0

I am trying to understand how the verilog branch statement works in an immediate instruction format for the MIPS processor. I am having trouble understanding what the following Verilog code does:

IR is the instruction so IR[31:26] would give the opcode.

reg[31:0] BT = PC + 4 + { 14{IR[15]}, IR[15:0], 2'b0};

I see bits and pieces such as we are updating the program counter and that we are taking the last 16 bits of the instruction to get the immediate address. Then we need a 32 bit word so we extend 16 more zeros.

  1. Why is it PC + 4 instead of just PC?
  2. What is 2'b0?

I have read something about sign extension but don't quite understand what is going on here.

Thanks for all the help!

4

2 回答 2

2

1:MIPS中的分支偏移量是相对于下一条指令计算的(因为分支之后的指令也被执行,作为分支延迟槽)。因此,我们必须使用 PC +4 进行基地址计算。2:由于MIPS使用的是按字节的内存寻址系统(内存中的每个字节都有唯一的地址),但是使用的是32位(4字节)字,规范要求每条指令都是字对齐的;因此,地址的最后两位指向指令的底部字节(0x_ _ __00)。在完整的情况下,该指令通过获取程序计数器来计算分支目标地址,加上 4 以说明 hte 分支延迟槽,然后添加符号扩展(因为分支偏移量可以是正数或负数;这就是它的14{IR[15]}作用)偏移到目标。

于 2013-11-08T21:12:43.883 回答
0

Verilog 中的数字可以使用以下数字的位数刻度格式表示。

2'b11; // 2 bit binary 
3'd3 ; // 3 bit decimal
4'ha ; // 4 bit hex

格式描述后面的数字,使用的位模式不会被格式改变。即 2'b11 与 2'd3 相同;

于 2013-11-09T00:03:02.170 回答