diff options
Diffstat (limited to '')
| -rw-r--r-- | rtl/core/cycles.sv | 1 | ||||
| -rw-r--r-- | rtl/core/decode/decode.sv | 2 | ||||
| -rw-r--r-- | rtl/core/regs/file.sv | 15 |
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 |
