summaryrefslogtreecommitdiff
path: root/rtl/core/decode
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/core/decode')
-rw-r--r--rtl/core/decode/decode.sv20
-rw-r--r--rtl/core/decode/ldst/misc.sv1
-rw-r--r--rtl/core/decode/ldst/multiple.sv1
-rw-r--r--rtl/core/decode/ldst/single.sv1
-rw-r--r--rtl/core/decode/mul.sv1
5 files changed, 13 insertions, 11 deletions
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv
index f5668c1..e93c476 100644
--- a/rtl/core/decode/decode.sv
+++ b/rtl/core/decode/decode.sv
@@ -14,14 +14,16 @@ module core_decode
output mul_decode mul_ctrl
);
- logic execute, undefined, conditional, writeback, update_flags, branch;
+ logic execute, undefined, conditional, writeback, update_flags, branch, ldst, mul;
assign ctrl.execute = execute;
assign ctrl.undefined = undefined;
assign ctrl.conditional = conditional;
assign ctrl.writeback = writeback;
assign ctrl.update_flags = update_flags;
- assign branch_ctrl.branch = branch;
+ assign ctrl.branch = branch;
+ assign ctrl.ldst = ldst;
+ assign ctrl.mul = mul;
//TODO
logic restore_spsr;
@@ -130,11 +132,14 @@ module core_decode
);
always_comb begin
+ mul = 0;
+ ldst = 0;
branch = 0;
- writeback = 0;
- update_flags = 0;
+
execute = cond_execute;
undefined = cond_undefined;
+ writeback = 0;
+ update_flags = 0;
data_ctrl = {($bits(data_ctrl)){1'bx}};
data_ctrl.uses_rn = 1;
@@ -152,7 +157,6 @@ module core_decode
ldst_addr = {($bits(ldst_addr)){1'bx}};
ldst_ctrl = {($bits(ldst_ctrl)){1'bx}};
- ldst_ctrl.enable = 0;
// El orden de los casos es importante, NO CAMBIAR
priority casez(insn `FIELD_OP)
@@ -168,7 +172,7 @@ module core_decode
end
`GROUP_MUL: begin
- mul_ctrl.enable = 1;
+ mul = 1;
data_ctrl.rd = mul_rd;
data_ctrl.rn = mul_rs;
@@ -241,7 +245,7 @@ module core_decode
unique casez(insn `FIELD_OP)
`GROUP_LDST_SINGLE, `GROUP_LDST_MISC, `GROUP_LDST_MULT: begin
- ldst_ctrl.enable = 1;
+ ldst = 1;
data_ctrl = data_ldst;
writeback = ldst_ctrl.writeback || ldst_ctrl.load;
end
@@ -252,6 +256,8 @@ module core_decode
if(undefined) begin
execute = 0;
+ mul = 1'bx;
+ ldst = 1'bx;
branch = 1'bx;
writeback = 1'bx;
conditional = 1'bx;
diff --git a/rtl/core/decode/ldst/misc.sv b/rtl/core/decode/ldst/misc.sv
index df7b823..d8ac898 100644
--- a/rtl/core/decode/ldst/misc.sv
+++ b/rtl/core/decode/ldst/misc.sv
@@ -13,7 +13,6 @@ module core_decode_ldst_misc
logic p, w;
- assign decode.enable = 1'bx;
assign decode.rn = insn `FIELD_LDST_MISC_RN;
assign decode.rd = insn `FIELD_LDST_MISC_RD;
assign decode.size = insn `FIELD_LDST_MISC_H ? LDST_HALF : LDST_BYTE;
diff --git a/rtl/core/decode/ldst/multiple.sv b/rtl/core/decode/ldst/multiple.sv
index 8a09fc0..0ecd674 100644
--- a/rtl/core/decode/ldst/multiple.sv
+++ b/rtl/core/decode/ldst/multiple.sv
@@ -12,7 +12,6 @@ module core_decode_ldst_multiple
logic s, l;
reg_list regs;
- assign decode.enable = 1'bx;
assign decode.rn = insn `FIELD_LDST_MULT_RN;
assign decode.rd = 4'bxxxx;
assign decode.size = LDST_WORD;
diff --git a/rtl/core/decode/ldst/single.sv b/rtl/core/decode/ldst/single.sv
index b99c1c0..402c17b 100644
--- a/rtl/core/decode/ldst/single.sv
+++ b/rtl/core/decode/ldst/single.sv
@@ -11,7 +11,6 @@ module core_decode_ldst_single
logic p, w;
- assign decode.enable = 1'bx;
assign decode.rn = insn `FIELD_LDST_SINGLE_RN;
assign decode.rd = insn `FIELD_LDST_SINGLE_RD;
assign decode.size = insn `FIELD_LDST_SINGLE_B ? LDST_BYTE : LDST_WORD;
diff --git a/rtl/core/decode/mul.sv b/rtl/core/decode/mul.sv
index f67435c..27f6651 100644
--- a/rtl/core/decode/mul.sv
+++ b/rtl/core/decode/mul.sv
@@ -20,7 +20,6 @@ module core_decode_mul
assign rm = insn `FIELD_MUL_RM;
assign update_flags = insn `FIELD_MUL_S;
- assign decode.enable = 0;
assign decode.add = insn `FIELD_MUL_ACC;
assign decode.long_mul = long_mul;
assign decode.signed_mul = insn `FIELD_MUL_SIGNED;