riscv中jalr指令实现方式
我们计组老师让我们写出jalr的实现, 于是正好总结一下单周期cpu是如何执行指令的. 周期开始, PC在时钟周期上升沿读取送来的地址, 随后组合电路 Instruction Memory 在一个短小的延迟后输出了指令. 随后, 指令被分为了多个部分, 送往寄存器文件, 立即数生成器和控制单元. 我们现在主要关注作为I-type 指令的 jalr, 其指令格式是: 其作用是将当前 PC 中的地址送入 rd (通常是 ra), 然后把 rs1 + immediate 的值送入PC. 而return一般用代码 jalr x0, ra, x0 实现. 我们可以看到, 其 0~6 位的 opcode 被送往了 control 单元. 然后, 在阅读了 opcode 后, control 单元会生成以下信号: ALUop , 这是一个两位的指令, 被送往ALU. 其用于决定ALU执行什么类型的运算. (add sub and or… etc.) 不同情况下的ALUop如下: 在这里, 我们的ALU要实现一个加法, 并且不需要查看funct3的值. 我们可以合理推测其ALUOP也是 00. ALU control 在收到ALUOP后, 发现自己不需要看funt3 和 funt7, 于是生成了一个 值为 0010 的ALU control. ...