From f6929f9a4703e3eee9d7bd9752de055729cdd498 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Tue, 8 Nov 2022 13:00:40 -0600 Subject: Register decode output in a new porch stage --- rtl/core/porch/conds.sv | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 rtl/core/porch/conds.sv (limited to 'rtl/core/porch/conds.sv') diff --git a/rtl/core/porch/conds.sv b/rtl/core/porch/conds.sv new file mode 100644 index 0000000..b8db1e7 --- /dev/null +++ b/rtl/core/porch/conds.sv @@ -0,0 +1,47 @@ +`include "core/decode/isa.sv" +`include "core/uarch.sv" + +module core_porch_conds +( + input word insn, + input psr_flags flags, + + output logic execute, + conditional, + undefined +); + + always_comb begin + undefined = 0; + conditional = 1; + + unique case(insn `FIELD_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: begin + execute = 1; + conditional = 0; + end + + `COND_UD: begin + execute = 1'bx; + conditional = 1'bx; + undefined = 1; + end + endcase + end + +endmodule -- cgit v1.2.3