。10是为jr跳转语句所用,主要是将31号寄存器中预留的指令地址作为下一条指令地址传入。11是为jr和j无条件跳转时使用,将其指令中跳转的地址作为下一条指令地址传入。Р对WriteReg变量的赋值实现了由RegDst控制的选择器。这个选择器是3路选择器。控制信号为0时,要写入的寄存器改为31号,主要是用于jal语句发生跳转时,对本应下一条执行的指令地址进行存储。而控制信号为1和2时,是区别要写rt寄存器还是rd寄存器,主要是用于那些会用到三个寄存器的汇编语句。Р对变量DB的赋值实现了由DataSrc控制的选择器,主要决定重新写会寄存器的是ALU模块的计算结果还是内存RAM中的值,主要用于lw读取内存这个指令。Р对变量WriteData的赋值实现了由WrRegDSrc控制的选择器,这个选择器主要决定写入寄存器的值是下一条指令地址,还是从ALU或者是RAM传过来的值。这个选择其也是用于jal跳转语句,将本应下一条执行的指令地址存储到31号寄存器时使用。Р除了以上选择器的实现之外,顶层模块还实现了图中用于切割数据通路的寄存器。Р首先是使用寄存器类型声明变量。然后在一个always语句进行实现,所有寄存器都以时钟的上升沿作为触发。其中对于IR寄存器,需要由控制模块的使能端进行控制,其他的均不需要使能端,直接赋值即可。Р这里对IR寄存器进行使能端的控制,是实现多周期CPU的基础,只有这样才能保证一条指令在其执行结束之前的周期内不会被改变。РPC模块:Р这个模块接收了外部变量clk时钟和reset复位。pcwire是来自控制模块的控制信号,pc是接收的指令集地址,iaddr是输出的指令集地址。Р这个模块的实现比较简单,就是两步判断。首先判断是否复位,是则将地址置0,否则就向下进行。然后根据pcwire信号,判断是否将接收的地址赋值给送出地址的变量。这把信号是在控制模块的控制之下,只有在