From ae281afdd15d606536d5b445b49cbc3bafcb9b7c Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Fri, 26 Dec 2008 05:41:24 -0500 Subject: [PATCH] Add condition checking logic. --- ARM_Constants.v | 9 ++++++++- Issue.v | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/ARM_Constants.v b/ARM_Constants.v index 921e6ec..a635c5e 100644 --- a/ARM_Constants.v +++ b/ARM_Constants.v @@ -37,4 +37,11 @@ `define SHIFT_LSL 2'b00 `define SHIFT_LSR 2'b01 `define SHIFT_ASR 2'b10 -`define SHIFT_ROR 2'b11 \ No newline at end of file +`define SHIFT_ROR 2'b11 + +`define CPSR_N 31 +`define CPSR_Z 30 +`define CPSR_C 29 +`define CPSR_V 28 +`define CPSR_I 7 +`define CPSR_F 6 diff --git a/Issue.v b/Issue.v index a450190..1dbdc20 100644 --- a/Issue.v +++ b/Issue.v @@ -10,6 +10,7 @@ module Issue( input inbubble, /* stage inputs */ input [31:0] insn, input [31:0] inpc, + input [31:0] cpsr, output reg outbubble, /* stage outputs */ output reg [31:0] outpc @@ -230,4 +231,35 @@ module Issue( def_regs = 16'bxxxxxxxxxxxxxxxx; end endcase + + /* Condition checking logic */ + reg condition_met; + always @(*) + casez(insn[31:28]) + `COND_EQ: condition_met = cpsr[`CPSR_Z]; + `COND_NE: condition_met = !cpsr[`CPSR_Z]; + `COND_CS: condition_met = cpsr[`CPSR_C]; + `COND_CC: condition_met = !cpsr[`CPSR_C]; + `COND_MI: condition_met = cpsr[`CPSR_N]; + `COND_PL: condition_met = !cpsr[`CPSR_N]; + `COND_VS: condition_met = cpsr[`CPSR_V]; + `COND_VC: condition_met = !cpsr[`CPSR_V]; + `COND_HI: condition_met = cpsr[`CPSR_C] && !cpsr[`CPSR_Z]; + `COND_LS: condition_met = !cpsr[`CPSR_C] || cpsr[`CPSR_Z]; + `COND_GE: condition_met = cpsr[`CPSR_N] == cpsr[`CPSR_V]; + `COND_LT: condition_met = cpsr[`CPSR_N] != cpsr[`CPSR_V]; + `COND_GT: condition_met = !cpsr[`CPSR_Z] && (cpsr[`CPSR_N] == cpsr[`CPSR_V]); + `COND_LE: condition_met = cpsr[`CPSR_Z] || (cpsr[`CPSR_N] != cpsr[`CPSR_V]); + `COND_AL: condition_met = 1; + `COND_NV: condition_met = 0; + default: condition_met = 1'bx; + endcase + + /* Issue logic */ + /* reg use_cpsr; + * reg [15:0] use_regs; + * reg def_cpsr; + * reg [15:0] def_regs; + */ + endmodule -- 2.39.2