summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rtl/core/decode/decode.sv10
-rw-r--r--rtl/core/regs/file.sv4
-rw-r--r--rtl/core/regs/regs.sv3
3 files changed, 10 insertions, 7 deletions
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv
index a202694..af80135 100644
--- a/rtl/core/decode/decode.sv
+++ b/rtl/core/decode/decode.sv
@@ -18,8 +18,6 @@ module core_decode
logic cond_undefined;
//TODO
- logic link;
- ptr offset;
core_decode_conds conds
(
.cond(insn `FIELD_COND),
@@ -27,17 +25,19 @@ module core_decode
.*
);
- logic branch_link; //TODO
+ logic branch_link;
core_decode_branch group_branch
(
+ .link(branch_link),
+ .offset(branch_offset),
.*
);
//TODO
logic restore_spsr;
- logic data_writeback, data_update_flags;
+ logic data_writeback, data_update_flags, data_undefined;
alu_decode data_alu;
core_decode_data group_data
@@ -45,6 +45,7 @@ module core_decode
.decode(data_alu),
.writeback(data_writeback),
.update_flags(data_update_flags),
+ .undefined(data_undefined),
.*
);
@@ -70,6 +71,7 @@ module core_decode
alu = data_alu;
writeback = data_writeback;
update_flags = data_update_flags;
+ undefined = undefined | data_undefined;
end
`INSN_MUL: ;
diff --git a/rtl/core/regs/file.sv b/rtl/core/regs/file.sv
index e2bcc09..b2dd634 100644
--- a/rtl/core/regs/file.sv
+++ b/rtl/core/regs/file.sv
@@ -18,9 +18,9 @@ module core_reg_file
assign rd_value = overwrite_hold ? wr_value_hold : q;
- always @(posedge clk) begin
+ always @(negedge clk) begin
if(wr_enable) begin
- file[rd_index] <= wr_value;
+ file[wr_index] <= wr_value;
wr_value_hold <= wr_value;
end
diff --git a/rtl/core/regs/regs.sv b/rtl/core/regs/regs.sv
index 182b240..247c120 100644
--- a/rtl/core/regs/regs.sv
+++ b/rtl/core/regs/regs.sv
@@ -30,6 +30,7 @@ module core_regs
assign pc_word = {pc_visible, 2'b00};
assign rd_value_a = rd_pc_a ? pc_word : file_rd_value_a;
assign rd_value_b = rd_pc_b ? pc_word : file_rd_value_b;
+ assign file_wr_enable = wr_enable & ~wr_pc;
assign branch = wr_enable & wr_pc;
core_reg_file a
@@ -44,7 +45,7 @@ module core_regs
(
.rd_index(rd_index_b),
.rd_value(file_rd_value_b),
- .wr_enable(wr_enable & ~wr_pc),
+ .wr_enable(file_wr_enable),
.*
);