summaryrefslogtreecommitdiff
path: root/rtl/core
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/core')
-rw-r--r--rtl/core/cycles.sv1
-rw-r--r--rtl/core/decode/decode.sv2
-rw-r--r--rtl/core/regs/file.sv15
3 files changed, 12 insertions, 6 deletions
diff --git a/rtl/core/cycles.sv b/rtl/core/cycles.sv
index d52c0b0..c5ad62f 100644
--- a/rtl/core/cycles.sv
+++ b/rtl/core/cycles.sv
@@ -39,7 +39,6 @@ module core_cycles
always_ff @(posedge clk) begin
cycle <= next_cycle;
- stall <= next_cycle != EXECUTE;
flags <= next_flags;
if(next_cycle == EXECUTE) begin
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv
index 57744e1..508467d 100644
--- a/rtl/core/decode/decode.sv
+++ b/rtl/core/decode/decode.sv
@@ -59,7 +59,7 @@ module core_decode
rd = 4'bxxxx;
data_op = 4'bxxxx;
- priority case(insn `FIELD_OP) inside
+ priority casez(insn `FIELD_OP)
`GROUP_B: begin
branch = 1;
if(branch_link) begin
diff --git a/rtl/core/regs/file.sv b/rtl/core/regs/file.sv
index 1b10682..e2bcc09 100644
--- a/rtl/core/regs/file.sv
+++ b/rtl/core/regs/file.sv
@@ -13,12 +13,19 @@ module core_reg_file
// Ver comentario en uarch.sv
word file[30];
+ word q, wr_value_hold;
+ logic overwrite_hold;
- always @(posedge clk)
- if(wr_enable)
+ assign rd_value = overwrite_hold ? wr_value_hold : q;
+
+ always @(posedge clk) begin
+ if(wr_enable) begin
file[rd_index] <= wr_value;
+ wr_value_hold <= wr_value;
+ end
- always @(posedge clk)
- rd_value <= wr_enable & (rd_index == wr_index) ? wr_value : file[rd_index];
+ q <= file[rd_index];
+ overwrite_hold <= wr_enable & (rd_index == wr_index);
+ end
endmodule