采用二维组织的形式实现了一堆寄存器,对应的是单发射五级流水的MIPS CPU
对应一个32项,每项32位的寄存器堆。
为了支持流水,寄存器堆要具备每周期读入两个32位数,写入一个32位数的能力。
还有一个特殊的0号寄存器
verilog代码如下
module regfile(input clk,input [4:0]raddr1,output [31:0]rdata1,input [4:0]raddr2,output [31:0]rdata2,input we,//write enable signalinput [4:0]waddr,input [31:0]wdata);reg [31:0]reg_array[31:0];//writealways @(posedge clk)beginif(we)reg_array[waddr]<=wdata;endassign rdata1=(raddr1==5'b0)?32'b0:reg_array[raddr1];//write channel 1 raddr1 is an address directs to the placeassign rdata2=(raddr2==5'b0)?32'b0:reg_array[raddr2];//two channel in sumendmodule
可以看出这里寄存器的结果比较简单,有两输出地址,两个输出的数据,一个使能信号”en”,一个输入的地址和数据
后面根据时钟周期进行写入,然后读取的话,这种写法还是值得学习的,他相当于进行了5-32位译码,软件会自动加入译码的电路,只用这样的写法实现译码,是值得学习的。
