diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-09-24 21:41:46 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-09-24 21:41:46 -0600 |
| commit | 601835e33298015cf49f0ab33a7ef3d61b003ad9 (patch) | |
| tree | 15b4dea57785ad60cf2402c34d10c60687d5f91a /rtl/core/decode/conds.sv | |
| parent | 80805f772cf37b13383c81135cc313bbf92068e9 (diff) | |
Implement initial decoder
Diffstat (limited to 'rtl/core/decode/conds.sv')
| -rw-r--r-- | rtl/core/decode/conds.sv | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/rtl/core/decode/conds.sv b/rtl/core/decode/conds.sv new file mode 100644 index 0000000..3eef925 --- /dev/null +++ b/rtl/core/decode/conds.sv @@ -0,0 +1,39 @@ +`include "core/isa.sv" +`include "core/psr.sv" + +module core_decode_conds +( + input logic[3:0] cond, + input psr_flags flags, + output logic execute, + undefined +); + + always_comb begin + undefined = 0; + + unique case(cond) + `COND_EQ: execute = flags.z; + `COND_NE: execute = ~flags.z; + `COND_HS: execute = flags.c; + `COND_LO: execute = ~flags.c; + `COND_MI: execute = flags.n; + `COND_PL: execute = ~flags.n; + `COND_VS: execute = flags.v; + `COND_VC: execute = ~flags.v; + `COND_HI: execute = flags.c & ~flags.z; + `COND_LS: execute = ~flags.c | flags.z; + `COND_GE: execute = flags.n ~^ flags.v; + `COND_LT: execute = flags.n ^ flags.v; + `COND_GT: execute = ~flags.z & (flags.n ~^ flags.v); + `COND_LE: execute = flags.z | (flags.n ^ flags.v); + `COND_AL: execute = 1; + + `COND_UD: begin + execute = 1'bx; + undefined = 1; + end + endcase + end + +endmodule |
