采用二维组织的形式实现了一堆寄存器,对应的是单发射五级流水的MIPS CPU
    对应一个32项,每项32位的寄存器堆。
    为了支持流水,寄存器堆要具备每周期读入两个32位数,写入一个32位数的能力。
    还有一个特殊的0号寄存器
    verilog代码如下

    1. module regfile(
    2. input clk,
    3. input [4:0]raddr1,
    4. output [31:0]rdata1,
    5. input [4:0]raddr2,
    6. output [31:0]rdata2,
    7. input we,//write enable signal
    8. input [4:0]waddr,
    9. input [31:0]wdata
    10. );
    11. reg [31:0]reg_array[31:0];
    12. //write
    13. always @(posedge clk)begin
    14. if(we)reg_array[waddr]<=wdata;
    15. end
    16. assign rdata1=(raddr1==5'b0)?32'b0:reg_array[raddr1];
    17. //write channel 1 raddr1 is an address directs to the place
    18. assign rdata2=(raddr2==5'b0)?32'b0:reg_array[raddr2];
    19. //two channel in sum
    20. endmodule

    可以看出这里寄存器的结果比较简单,有两输出地址,两个输出的数据,一个使能信号”en”,一个输入的地址和数据
    后面根据时钟周期进行写入,然后读取的话,这种写法还是值得学习的,他相当于进行了5-32位译码,软件会自动加入译码的电路,只用这样的写法实现译码,是值得学习的。