summaryrefslogtreecommitdiff
path: root/rtl/core/decode/decode.sv
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--rtl/core/decode/decode.sv34
1 files changed, 30 insertions, 4 deletions
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv
index f7d7be8..f4de2d0 100644
--- a/rtl/core/decode/decode.sv
+++ b/rtl/core/decode/decode.sv
@@ -12,12 +12,12 @@ module core_decode
update_flags,
branch,
output ptr branch_offset,
+ output snd_decode snd_ctrl,
output data_decode data_ctrl
);
logic cond_undefined;
- //TODO
core_decode_conds conds
(
.cond(insn `FIELD_COND),
@@ -25,6 +25,18 @@ module core_decode
.*
);
+ logic snd_is_imm, snd_shift_by_reg_if_reg, snd_undefined;
+ snd_decode snd;
+
+ core_decode_snd snd_operand
+ (
+ .decode(snd),
+ .is_imm(snd_is_imm),
+ .shift_by_reg_if_reg(snd_shift_by_reg_if_reg),
+ .undefined(snd_undefined),
+ .*
+ );
+
logic branch_link;
core_decode_branch group_branch
@@ -37,7 +49,7 @@ module core_decode
//TODO
logic restore_spsr;
- logic data_writeback, data_update_flags, data_undefined;
+ logic data_writeback, data_update_flags, data_is_imm, data_shift_by_reg_if_reg;
data_decode data;
core_decode_data group_data
@@ -45,7 +57,8 @@ module core_decode
.decode(data),
.writeback(data_writeback),
.update_flags(data_update_flags),
- .undefined(data_undefined),
+ .snd_is_imm(data_is_imm),
+ .snd_shift_by_reg_if_reg(data_shift_by_reg_if_reg),
.*
);
@@ -57,6 +70,13 @@ module core_decode
update_flags = 0;
data_ctrl = {($bits(data_ctrl)){1'bx}};
+ snd_ctrl = {($bits(snd_ctrl)){1'bx}};
+ snd_ctrl.shl = 0;
+ snd_ctrl.shr = 0;
+ snd_ctrl.ror = 0;
+ snd_is_imm = 1'bx;
+ snd_shift_by_reg_if_reg = 1'bx;
+
priority casez(insn `FIELD_OP)
`GROUP_B: begin
branch = 1;
@@ -68,10 +88,15 @@ module core_decode
end
`GROUP_ALU: begin
+ snd_is_imm = data_is_imm;
+ snd_shift_by_reg_if_reg = data_shift_by_reg_if_reg;
+
+ snd_ctrl = snd;
data_ctrl = data;
+
writeback = data_writeback;
update_flags = data_update_flags;
- undefined = undefined | data_undefined;
+ undefined = undefined | snd_undefined;
end
`INSN_MUL: ;
@@ -88,6 +113,7 @@ module core_decode
undefined = 1;
branch = 1'bx;
writeback = 1'bx;
+ snd_ctrl = {($bits(snd_ctrl)){1'bx}};
end
endcase
end