summaryrefslogtreecommitdiff
path: root/rtl/core/decode
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-11-16 16:46:52 -0600
committerAlejandro Soto <alejandro@34project.org>2022-11-16 17:55:27 -0600
commit683352ce030923bdef3cf4fe90d6cb73f4f74529 (patch)
tree09bfdff34626fe90a10d93df2c293f7d87763e44 /rtl/core/decode
parent14a3611e492d2f213e81c9053bf613a5d8ad30a6 (diff)
Implement psr read/write logic
Diffstat (limited to 'rtl/core/decode')
-rw-r--r--rtl/core/decode/decode.sv7
-rw-r--r--rtl/core/decode/isa.sv2
-rw-r--r--rtl/core/decode/mux.sv13
3 files changed, 14 insertions, 8 deletions
diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv
index 7d666f3..f16db9a 100644
--- a/rtl/core/decode/decode.sv
+++ b/rtl/core/decode/decode.sv
@@ -27,6 +27,7 @@ module core_decode
assign dec.coproc = dec_coproc;
assign dec_ctrl.mul = mul;
+ assign dec_ctrl.psr = psr;
assign dec_ctrl.ldst = ldst;
assign dec_ctrl.branch = branch;
assign dec_ctrl.coproc = coproc;
@@ -35,7 +36,7 @@ module core_decode
assign dec_ctrl.undefined = undefined;
assign dec_ctrl.conditional = conditional;
- assign dec_psr.saved = spsr;
+ assign dec_psr.saved = psr_saved;
assign dec_psr.write = psr_write;
assign dec_psr.wr_flags = psr_wr_flags;
assign dec_psr.wr_control = psr_wr_control;
@@ -43,8 +44,8 @@ module core_decode
assign dec_psr.restore_spsr = restore_spsr;
logic execute, undefined, conditional, writeback, update_flags,
- restore_spsr, branch, ldst, mul, coproc, spsr, psr_write,
- psr_wr_flags, psr_wr_control;
+ restore_spsr, branch, ldst, mul, psr, coproc, psr_saved,
+ psr_write, psr_wr_flags, psr_wr_control;
core_decode_mux mux
(
diff --git a/rtl/core/decode/isa.sv b/rtl/core/decode/isa.sv
index 4f2578d..1273a8b 100644
--- a/rtl/core/decode/isa.sv
+++ b/rtl/core/decode/isa.sv
@@ -194,7 +194,7 @@
`define GROUP_MSR 28'b0_0_?_1_0_?_1_0_????_1111_0000_0000_????
-`define FIELD_MRS_R [24]
+`define FIELD_MRS_R [22]
`define FIELD_MRS_RD [15:12]
`define FIELD_MSR_I [25]
`define FIELD_MSR_R [22]
diff --git a/rtl/core/decode/mux.sv b/rtl/core/decode/mux.sv
index e8d930e..51fe14b 100644
--- a/rtl/core/decode/mux.sv
+++ b/rtl/core/decode/mux.sv
@@ -55,8 +55,9 @@ module core_decode_mux
branch,
ldst,
mul,
+ psr,
coproc,
- spsr,
+ psr_saved,
psr_write,
psr_wr_flags,
psr_wr_control,
@@ -78,7 +79,8 @@ module core_decode_mux
conditional = 0;
restore_spsr = 0;
- spsr = 0;
+ psr = 0;
+ psr_saved = 0;
psr_write = 0;
update_flags = 0;
psr_wr_flags = 1;
@@ -189,7 +191,8 @@ module core_decode_mux
dec_data.rd = mrs_rd;
dec_data.uses_rn = 0;
- spsr = mrs_spsr;
+ psr = 1;
+ psr_saved = mrs_spsr;
writeback = 1;
conditional = 1;
end
@@ -201,9 +204,10 @@ module core_decode_mux
snd_ror_if_imm = 1;
snd_shift_by_reg_if_reg = 0;
- spsr = msr_spsr;
+ psr = 1;
dec_snd = snd;
psr_write = 1;
+ psr_saved = msr_spsr;
conditional = 1;
psr_wr_flags = msr_fields.f;
psr_wr_control = msr_fields.c;
@@ -233,6 +237,7 @@ module core_decode_mux
execute = 0;
mul = 1'bx;
+ psr = 1'bx;
ldst = 1'bx;
branch = 1'bx;
coproc = 1'bx;