summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--rtl/core/arm810.sv4
-rw-r--r--rtl/core/control/control.sv3
-rw-r--r--rtl/core/decode/data.sv6
-rw-r--r--rtl/core/decode/decode.sv8
-rw-r--r--rtl/core/uarch.sv1
5 files changed, 9 insertions, 13 deletions
diff --git a/rtl/core/arm810.sv b/rtl/core/arm810.sv
index c0d5750..f804061 100644
--- a/rtl/core/arm810.sv
+++ b/rtl/core/arm810.sv
@@ -33,8 +33,7 @@ module arm810
snd_decode dec_snd;
data_decode dec_data;
ldst_decode dec_ldst;
- logic dec_execute, dec_conditional, dec_undefined, dec_writeback,
- dec_update_flags, dec_uses_rn;
+ logic dec_execute, dec_conditional, dec_undefined, dec_writeback, dec_update_flags;
core_decode decode
(
@@ -42,7 +41,6 @@ module arm810
.conditional(dec_conditional),
.undefined(dec_undefined),
.writeback(dec_writeback),
- .uses_rn(dec_uses_rn),
.update_flags(dec_update_flags),
.branch_ctrl(dec_branch),
.snd_ctrl(dec_snd),
diff --git a/rtl/core/control/control.sv b/rtl/core/control/control.sv
index 81e7257..238b353 100644
--- a/rtl/core/control/control.sv
+++ b/rtl/core/control/control.sv
@@ -6,7 +6,6 @@ module core_control
dec_execute,
dec_undefined,
dec_conditional,
- dec_uses_rn,
dec_writeback,
dec_update_flags,
input branch_decode dec_branch,
@@ -84,7 +83,7 @@ module core_control
assign next_bubble =
(final_writeback && final_rd == `R15)
|| ((dec_update_flags || dec_conditional) && (final_update_flags || update_flags))
- || (final_writeback && ((dec_uses_rn && (final_rd == dec_data.rn || dec_data.rn == `R15))
+ || (final_writeback && ((dec_data.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/data.sv b/rtl/core/decode/data.sv
index 103fb14..1bd7ef9 100644
--- a/rtl/core/decode/data.sv
+++ b/rtl/core/decode/data.sv
@@ -10,16 +10,18 @@ module core_decode_data
snd_shift_by_reg_if_reg,
writeback,
update_flags,
- restore_spsr,
- uses_rn
+ restore_spsr
);
alu_op op;
reg_num rn, rd;
+ logic uses_rn;
assign decode.op = op;
assign decode.rn = rn;
assign decode.rd = rd;
+ assign decode.uses_rn = uses_rn;
+
assign rn = insn `FIELD_DATA_RN;
assign rd = insn `FIELD_DATA_RD;
assign op = insn `FIELD_DATA_OPCODE;
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv
index cd3ee53..da244c1 100644
--- a/rtl/core/decode/decode.sv
+++ b/rtl/core/decode/decode.sv
@@ -11,7 +11,6 @@ module core_decode
undefined,
writeback,
update_flags,
- uses_rn,
output branch_decode branch_ctrl,
output snd_decode snd_ctrl,
output data_decode data_ctrl,
@@ -56,7 +55,7 @@ module core_decode
data_decode data;
logic data_writeback, data_update_flags, data_restore_spsr,
- data_is_imm, data_shift_by_reg_if_reg, data_uses_rn;
+ data_is_imm, data_shift_by_reg_if_reg;
core_decode_data group_data
(
@@ -66,7 +65,6 @@ module core_decode
.restore_spsr(data_restore_spsr),
.snd_is_imm(data_is_imm),
.snd_shift_by_reg_if_reg(data_shift_by_reg_if_reg),
- .uses_rn(data_uses_rn),
.*
);
@@ -117,11 +115,11 @@ module core_decode
branch = 0;
writeback = 0;
update_flags = 0;
- uses_rn = 1;
execute = cond_execute;
undefined = cond_undefined;
data_ctrl = {($bits(data_ctrl)){1'bx}};
+ data_ctrl.uses_rn = 1;
snd_ctrl = {$bits(snd_ctrl){1'bx}};
snd_ctrl.shr = 0;
@@ -152,7 +150,6 @@ module core_decode
end
`GROUP_ALU: begin
- uses_rn = data_uses_rn;
snd_is_imm = data_is_imm;
snd_ror_if_imm = 1;
snd_shift_by_reg_if_reg = data_shift_by_reg_if_reg;
@@ -227,7 +224,6 @@ module core_decode
execute = 0;
branch = 1'bx;
- uses_rn = 1'bx;
writeback = 1'bx;
conditional = 1'bx;
update_flags = 1'bx;
diff --git a/rtl/core/uarch.sv b/rtl/core/uarch.sv
index 1574895..d1bdce8 100644
--- a/rtl/core/uarch.sv
+++ b/rtl/core/uarch.sv
@@ -62,6 +62,7 @@ typedef struct packed
alu_op op;
reg_num rn,
rd;
+ logic uses_rn;
} data_decode;
typedef struct packed