-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInteger_File.v.bak
More file actions
36 lines (32 loc) · 1.12 KB
/
Copy pathInteger_File.v.bak
File metadata and controls
36 lines (32 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// msrv32_integer_file 21BCE0289
module Integer_File(ms_riscv32_mp_clk_in, ms_riscv32_mp_rst_in, rs_2_addr_in, rd_addr_in, wr_en_in, rd_in, rs_1_addr_in, rs_1_out, rs_2_out);
input ms_riscv32_mp_clk_in;
input ms_riscv32_mp_rst_in;
input [4:0] rs_2_addr_in;
input [4:0] rd_addr_in;
input wr_en_in;
input [31:0] rd_in;
input [4:0] rs_1_addr_in;
output [31:0] rs_1_out;
output [31:0] rs_2_out;
reg signed [31:0] reg_file [31:0];
integer i;
initial begin
reg_file[0] = 0; // no write operations allowed for reg_file[0]
for (i=1; i<32; i=i+1) begin
reg_file[i] = 0;
end
end
always @(posedge ms_riscv32_mp_clk_in or posedge ms_riscv32_mp_rst_in) begin
if ((wr_en_in) && (rd_addr_in != 0) && (rs_1_addr_in != rd_addr_in) && (rs_2_addr_in != rd_addr_in)) begin
reg_file[rd_addr_in] = rd_in;
end
if (ms_riscv32_mp_rst_in) begin
for (i=1; i<32; i=i+1) begin
reg_file[i] = 0;
end
end
end
assign rs_1_out = ((rs_1_addr_in == rd_addr_in) & (wr_en_in == 1)) ? rd_in : reg_file[rs_1_addr_in];
assign rs_2_out = ((rs_2_addr_in == rd_addr_in) & (wr_en_in == 1)) ? rd_in : reg_file[rs_2_addr_in];
endmodule