我试图理解verilog分支语句如何以MIPS处理器的立即指令格式工作。我无法理解以下Verilog代码的作用:
IR是指令,所以IR [31:26]会给出操作码。
reg[31:0] BT = PC + 4 + { 14{IR[15]}, IR[15:0], 2'b0};
我看到比特和片段,例如我们正在更新程序计数器,并且我们正在获取指令的最后16位以获得直接地址。然后我们需要一个32位字,所以我们再增加16个零。
PC + 4
而不仅仅是PC
?2'b0
?我已经阅读了有关符号扩展的内容,但不太明白这里发生了什么。
感谢您的帮助!
答案 0 :(得分:2)
1:相对于下一条指令计算MIPS中的分支偏移(因为分支之后的指令也被执行,作为分支延迟槽)。因此,我们必须使用PC +4进行基址计算。 2:由于MIPS使用逐字节存储器寻址系统(存储器中的每个字节都有唯一的地址),但使用32位(4字节)字,因此规范要求每条指令都是字对齐的;因此,地址的最后两位指向指令的底部字节(0x_ _ __ 00)。 在完整的情况下,指令通过取程序计数器计算分支目标地址,加上4来计算分支延迟槽,然后加上符号扩展(因为分支偏移可以是正数或负数;这就是{{ 1}}确实)偏移到目标。
答案 1 :(得分:0)
Verilog中的数字可以使用以下数字的位数刻度格式表示。
2'b11; // 2 bit binary
3'd3 ; // 3 bit decimal
4'ha ; // 4 bit hex
格式描述以下数字,使用的位模式不会被格式更改。即2'b11与2'd3相同;