This repository has been archived on 2025-06-06. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
simple-risc-v32i-cpu/cpu_rv32i.srcs/sources_1/new/regfile.v
2023-02-28 09:10:42 +08:00

45 lines
1.1 KiB
Verilog

module regfile(
input clk,
input reset,
// READ PORT 1
input [ 4:0] raddr1,
output [31:0] rdata1,
// READ PORT 2
input [ 4:0] raddr2,
output [31:0] rdata2,
// READ PORT 3
input [ 4:0] raddr3,
output [31:0] rdata3,
// WRITE PORT
input we, //write enable, HIGH valid
input [ 4:0] waddr,
input [31:0] wdata
);
reg [31:0] rf[31:0];
integer i = 0;
//WRITE
always @(posedge clk) begin
if (reset) begin
for(i = 0; i < 32; i = i + 1) begin
rf[i] <= 32'b0;
end
end
else if (we) begin
rf[waddr]<= wdata;
end
end
//READ OUT 1
assign rdata1 = (we & (raddr1 == waddr)) ? wdata :
( raddr1 == 5'b0 ) ? 32'b0 :
rf[raddr1];
//READ OUT 2
assign rdata2 = (we & (raddr2 == waddr)) ? wdata :
( raddr2 == 5'b0 ) ? 32'b0 :
rf[raddr2];
//READ OUT 3
assign rdata3 = (we & (raddr3 == waddr)) ? wdata :
( raddr3 == 5'b0 ) ? 32'b0 :
rf[raddr3];
endmodule