2008年8月26日 星期二

Register File in Verilog

在CPU裏面最重要的結構就是暫存器檔案(Register File)。Reading the Register FileWriting into the Register File底下列出簡單的Register File的Verilog範例程式碼

I/O Input
(1)Clock Signal(時脈訊號):clk
(2)Write Enable Signal(寫入暫存器訊號):en_write
(3)Address Bus(指定暫存器編號,需要3個5位元):ra1、ra2、wa
(4)Input Data Bus(寫入的資料,需要1個32位元):wd

I/O Output
(1)Output Data Bus(輸出的資料,需要2個32位元):rd1,rd2
module regfile
(
input [4:0] ra1,output [31:0] rd1,
input [4:0] ra2,output [31:0] rd2,
input clk,
input en_write,
input [4:0] wa,input [31:0] wd
);

reg [31:0] registers[31:0];
// 暫存器0永遠輸出0
assign rd1 = (ra1 == 5'b00000) ? 32'h00000000 : registers[ra1];
assign rd2 = (ra2 == 5'b00000) ? 32'h00000000 : registers[ra2];
// 當en_write=1時,執行將wd寫入暫存器的動作
always @(posedge clk)
begin
if ( en_write )
registers[wa] <= wd;
end

endmodule

2 則留言:

WORDKING 提到...

請問 4個4 bits 的Register File 該怎麼用 nad not or等邏輯閘表示呢??

fatalfeel 提到...

you can use chisel scala and intellij to design Risc-V cpu
it's much easier to do the work

一個小故事讓我們明白資金流通的意義

“又是炎熱小鎮慵懶的一天。太陽高掛,街道無人,每個人都債台高築,靠信用度日。這時,從外地來了一位有錢的旅客,他進了一家旅館,拿出一張1000 元鈔票放在櫃檯,說想先看看房間,挑一間合適的過夜,就在此人上樓的時候---- 店主抓了這張1000 元鈔,跑到隔壁屠戶那裡支付了他欠的肉錢...