Verilog分支指令MIPS

Verilog分支指令MIPS,mips,verilog,instructions,Mips,Verilog,Instructions,我试图理解verilog branch语句如何在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 我读过一些关于符号扩展的东西,但不太明白这里发

我试图理解verilog branch语句如何在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
  • 我读过一些关于符号扩展的东西,但不太明白这里发生了什么


    谢谢你的帮助

    1:MIPS中的分支偏移量是相对于下一条指令计算的(因为分支后的指令也会作为分支延迟槽执行)。因此,我们必须使用PC+4进行基址计算。 2:由于MIPS使用字节内存寻址系统(内存中的每个字节都有一个唯一的地址),但使用32位(4字节)字,因此规范要求每个指令都是字对齐的;因此,地址的最后两位指向指令的底部字节(0x\uu00)。
    总的来说,指令计算分支目标地址的方法是:取程序计数器,加上4以说明分支延迟槽,然后加上扩展符号(因为分支偏移量可以是正的,也可以是负的;
    14{IR[15]}
    就是这样做的)到目标的偏移量。

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

    2'b11; // 2 bit binary 
    3'd3 ; // 3 bit decimal
    4'ha ; // 4 bit hex
    
    该格式描述了以下数字,所使用的位模式不会因格式而改变。Ie 2'b11与2'd3相同