diff options
author | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-05 11:35:00 +0200 |
---|---|---|
committer | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-05 11:35:00 +0200 |
commit | 38e4966386672acc92834246c85c97cd0be80314 (patch) | |
tree | 2458a9c21feba8dbfc5eac0f55585a10ed9abf77 /src/register_file.v | |
parent | 8d5d730269cc94fa8d5caed0e1996e3d94be25d1 (diff) | |
download | riscv_cpu-38e4966386672acc92834246c85c97cd0be80314.tar.gz riscv_cpu-38e4966386672acc92834246c85c97cd0be80314.zip |
register file testbench
Diffstat (limited to 'src/register_file.v')
-rw-r--r-- | src/register_file.v | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/register_file.v b/src/register_file.v index 81bce34..4846be8 100644 --- a/src/register_file.v +++ b/src/register_file.v @@ -5,25 +5,24 @@ module register_file #( input clk, rst, we, input [log2(N)-1:0] addr_rs0, addr_rs1, addr_rd2, input [N-1:0] data_rd2, - output [N-1:0] data_rs0, data_rs1 + output reg [N-1:0] data_rs0, data_rs1 ); `include "include/log2.vh" reg [N-1:0] registers[XLEN-1:1]; -assign data_rs0 = (addr_rs0 == 0) ? 0 : registers[addr_rs0]; -assign data_rs1 = (addr_rs1 == 0) ? 0 : registers[addr_rs1]; - - - integer i; -always @(posedge clk) begin +always @(posedge clk or rst) begin if (rst) begin for (i = 1; i < XLEN; i = i + 1) registers[i] <= 0; - end else if (we && (addr_rd2 != 0)) begin - registers[addr_rd2] <= data_rd2; + end else begin + data_rs0 = (addr_rs0 == 0) ? 0 : registers[addr_rs0]; + data_rs1 = (addr_rs1 == 0) ? 0 : registers[addr_rs1]; + if (we && (addr_rd2 != 0)) begin + registers[addr_rd2] = data_rd2; + end end end |