diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-10-08 15:34:46 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-10-08 15:34:46 -0600 |
| commit | dab6e68a8396475af5acbf53397f93c6b52e2e71 (patch) | |
| tree | 7ec0ee02735a730f633190acadaca23bbd574234 /rtl/core/uarch.sv | |
| parent | a0a12ef0c1bd6882d902a9d5938e7220e543b378 (diff) | |
Implement LDR/STR decode
Diffstat (limited to 'rtl/core/uarch.sv')
| -rw-r--r-- | rtl/core/uarch.sv | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/rtl/core/uarch.sv b/rtl/core/uarch.sv index 22f0578..2cd6f24 100644 --- a/rtl/core/uarch.sv +++ b/rtl/core/uarch.sv @@ -65,19 +65,48 @@ typedef struct packed typedef struct packed { - reg_num r, - r_shift; - logic shift_by_reg, - is_imm, - shl, - shr, - ror, - put_carry, - sign_extend; - logic[7:0] imm; - logic[5:0] shift_imm; + reg_num r, + r_shift; + logic shift_by_reg, + is_imm, + shl, + shr, + ror, + put_carry, + sign_extend; + logic[11:0] imm; + logic[5:0] shift_imm; } snd_decode; +typedef enum logic[1:0] +{ + LDST_WORD, + LDST_BYTE, + LDST_HALF +} ldst_size; + +typedef struct packed +{ + reg_num rn, + rd; + + logic enable, + load, + increment, + writeback, + sign_extend, + pre_indexed, + unprivileged, + user_regs; + + ldst_size size; + + /* P. 482: "If no bits are set, the result is UNPREDICTABLE." + * Esto permite diferenciar entre ldst mĂșltiple y simple. + */ + logic[15:0] reg_list; +} ldst_decode; + typedef struct packed { logic shl, |
