summaryrefslogtreecommitdiff
path: root/rtl/core/decode/mux.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-10-02 11:15:34 -0600
committerAlejandro Soto <alejandro@34project.org>2023-10-02 23:29:46 -0600
commitfbe3ab39675d338eb6d5388b7deacf98a3a8ae2d (patch)
tree6a3a8479031d1434a18af4385713dd48207d3814 /rtl/core/decode/mux.sv
parent70d7dc9489f4d5b91d8138e0a341eec4ad7f15b0 (diff)
rtl/core: implement ldrex/strex decode
Diffstat (limited to '')
-rw-r--r--rtl/core/decode/mux.sv20
1 files changed, 15 insertions, 5 deletions
diff --git a/rtl/core/decode/mux.sv b/rtl/core/decode/mux.sv
index 297ad33..6f0451a 100644
--- a/rtl/core/decode/mux.sv
+++ b/rtl/core/decode/mux.sv
@@ -18,12 +18,14 @@ module core_decode_mux
data_is_imm,
data_shift_by_reg_if_reg,
- input ldst_decode ldst_single,
- ldst_misc,
+ input ldst_decode ldst_misc,
+ ldst_single,
ldst_multiple,
+ ldst_exclusive,
input logic ldst_single_is_imm,
ldst_misc_off_is_imm,
- input reg_num ldst_misc_off_reg,
+ input reg_num ldst_ex_snd_r,
+ ldst_misc_off_reg,
input logic[7:0] ldst_misc_off_imm,
input logic ldst_mult_restore_spsr,
input data_decode data_ldst,
@@ -135,6 +137,14 @@ module core_decode_mux
update_flags = mul_update_flags;
end
+ `GROUP_LDST_EX: begin
+ dec_ldst = ldst_exclusive;
+ ldst_addr = ldst_exclusive;
+
+ dec_snd.r = ldst_ex_snd_r;
+ dec_snd.is_imm = ldst_exclusive.load;
+ end
+
`GROUP_LDST_MISC: begin
dec_ldst = ldst_misc;
ldst_addr = ldst_misc;
@@ -255,10 +265,10 @@ module core_decode_mux
// Codificación coincide con ldst
`GROUP_MUL: ;
- `GROUP_LDST_SINGLE, `GROUP_LDST_MISC, `GROUP_LDST_MULT: begin
+ `GROUP_LDST_SINGLE, `GROUP_LDST_MISC, `GROUP_LDST_MULT, `GROUP_LDST_EX: begin
ldst = 1;
dec_data = data_ldst;
- writeback = dec_ldst.writeback || dec_ldst.load;
+ writeback = dec_ldst.writeback || dec_ldst.load || dec_ldst.exclusive;
end
default: ;