summaryrefslogtreecommitdiff
path: root/rtl/core/regs/regs.sv
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/core/regs/regs.sv')
-rw-r--r--rtl/core/regs/regs.sv45
1 files changed, 16 insertions, 29 deletions
diff --git a/rtl/core/regs/regs.sv b/rtl/core/regs/regs.sv
index 9b9ba57..b25a122 100644
--- a/rtl/core/regs/regs.sv
+++ b/rtl/core/regs/regs.sv
@@ -23,48 +23,28 @@ module core_regs
* sincronizadas del archivo de registros.
*/
- logic rd_pc_a, rd_pc_b, wr_pc, file_wr_enable;
- reg_index rd_index_a, rd_index_b, wr_index;
- word pc_word, file_rd_value_a, file_rd_value_b;
+ word pc_word, wr_current;
+ logic wr_pc, wr_enable_file;
+ reg_index wr_index;
+ assign branch = wr_enable && wr_pc;
assign pc_word = {pc_visible, 2'b00};
- assign rd_value_a = rd_pc_a ? pc_word : (wr_enable && rd_index_a == wr_index) ? wr_value : file_rd_value_a;
- assign rd_value_b = rd_pc_b ? pc_word : (wr_enable && rd_index_b == wr_index) ? wr_value : file_rd_value_b;
- assign file_wr_enable = wr_enable & ~wr_pc;
- assign branch = wr_enable & wr_pc;
+ assign wr_enable_file = wr_enable && !wr_pc;
core_reg_file a
(
- .rd_index(rd_index_a),
- .rd_value(file_rd_value_a),
- .wr_enable(file_wr_enable),
+ .rd_r(rd_r_a),
+ .rd_value(rd_value_a),
.*
);
core_reg_file b
(
- .rd_index(rd_index_b),
- .rd_value(file_rd_value_b),
- .wr_enable(file_wr_enable),
+ .rd_r(rd_r_b),
+ .rd_value(rd_value_b),
.*
);
- core_reg_map map_rd_a
- (
- .r(rd_r_a),
- .mode(rd_mode),
- .is_pc(rd_pc_a),
- .index(rd_index_a)
- );
-
- core_reg_map map_rd_b
- (
- .r(rd_r_b),
- .mode(rd_mode),
- .is_pc(rd_pc_b),
- .index(rd_index_b)
- );
-
core_reg_map map_wr
(
.r(wr_r),
@@ -73,4 +53,11 @@ module core_regs
.index(wr_index)
);
+ always_ff @(posedge clk)
+ if(wr_enable)
+ wr_current <= wr_value;
+
+ initial
+ wr_current = 0;
+
endmodule