aboutsummaryrefslogtreecommitdiff
path: root/rv64cpu/rtl
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-03-18 19:48:35 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-03-18 19:48:35 +0800
commit1d4ed362e1caccc22aa4bd0dc2a9316e999f849a (patch)
tree3c8d3a0c5ed61ef0e0e54995b0ab95411c289215 /rv64cpu/rtl
parent5e18d160d16771252292ccebcb66ae4ba8cc9d64 (diff)
downloadrcc-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.sv11
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