diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-03-18 19:48:35 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-03-18 19:48:35 +0800 |
| commit | 1d4ed362e1caccc22aa4bd0dc2a9316e999f849a (patch) | |
| tree | 3c8d3a0c5ed61ef0e0e54995b0ab95411c289215 /rv64cpu/rtl | |
| parent | 5e18d160d16771252292ccebcb66ae4ba8cc9d64 (diff) | |
| download | rcc-project-1d4ed362e1caccc22aa4bd0dc2a9316e999f849a.tar.gz rcc-project-1d4ed362e1caccc22aa4bd0dc2a9316e999f849a.tar.xz | |
Add fibonacci tests and fix bugs
Diffstat (limited to 'rv64cpu/rtl')
| -rw-r--r-- | rv64cpu/rtl/core/regfile.sv | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/rv64cpu/rtl/core/regfile.sv b/rv64cpu/rtl/core/regfile.sv index 640890d..dbc3c04 100644 --- a/rv64cpu/rtl/core/regfile.sv +++ b/rv64cpu/rtl/core/regfile.sv @@ -41,8 +41,15 @@ module regfile logic [XLEN-1:0] regs [0:31]; // Read Logic (combinational logic) - assign rs1_rdata = (rs1_addr == 5'b0) ? '0 : regs[rs1_addr]; - assign rs2_rdata = (rs2_addr == 5'b0) ? '0 : regs[rs2_addr]; + // Internal bypass: If reading the same register as currently being written, + // forward the write data immediately. + assign rs1_rdata = (rs1_addr == 5'b0) ? '0 : + ((rs1_addr == rd_addr) && reg_write_en) ? rd_wdata : + regs[rs1_addr]; + + assign rs2_rdata = (rs2_addr == 5'b0) ? '0 : + ((rs2_addr == rd_addr) && reg_write_en) ? rd_wdata : + regs[rs2_addr]; // Write Logic (sequential logic) always_ff @(posedge clk) begin |
