summaryrefslogtreecommitdiff
path: root/rtl/core
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/core')
-rw-r--r--rtl/core/control/control.sv3
-rw-r--r--rtl/core/decode/decode.sv4
2 files changed, 5 insertions, 2 deletions
diff --git a/rtl/core/control/control.sv b/rtl/core/control/control.sv
index e1bdbb8..95d3bb9 100644
--- a/rtl/core/control/control.sv
+++ b/rtl/core/control/control.sv
@@ -84,7 +84,8 @@ module core_control
assign next_bubble =
((dec_update_flags || dec_conditional) && (final_update_flags || update_flags))
- || (final_writeback && ((dec_uses_rn && final_rd == dec_data.rn) || final_rd == dec_snd.r));
+ || (final_writeback && ((dec_uses_rn && (final_rd == dec_data.rn || dec_data.rn == `R15))
+ || final_rd == dec_snd.r || dec_snd.r == `R15));
core_control_ldst_pop ldst_pop
(
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv
index 2580701..9367e6d 100644
--- a/rtl/core/decode/decode.sv
+++ b/rtl/core/decode/decode.sv
@@ -143,9 +143,11 @@ module core_decode
`GROUP_B: begin
branch = 1;
if(branch_link) begin
+ data_ctrl.op = `ALU_SUB;
data_ctrl.rd = `R14;
+ data_ctrl.rn = `R15;
+ snd_ctrl.imm = 12'd4;
writeback = 1;
- //TODO: Valor de LR
end
end