mirror of
https://github.com/lowRISC/ibex.git
synced 2025-06-28 01:12:02 -04:00
[dv/formal] Helpers for DivInstrStable
To make the proof of DivInstrStable, this commit adds two helper properties in the previous step. One that when an instruction is not a multiply that the multiplier state must never leave ALBL and one that the writeback stage must have a valid instruction in it if it is blocking an instruction from proceeding from EX to WB. This allow DivInstrStable to be proven with Hp 2.
This commit is contained in:
parent
4fe6b7d53f
commit
0b718c5eac
1 changed files with 25 additions and 20 deletions
|
@ -219,6 +219,11 @@ lemma ibex
|
||||||
|
|
||||||
MultEndState: have (instr_will_progress |=> `MULTG.mult_state_q == `MULTG.ALBL)
|
MultEndState: have (instr_will_progress |=> `MULTG.mult_state_q == `MULTG.ALBL)
|
||||||
|
|
||||||
|
# Assert that only when multiplying the mult_state_q leaves ALBL mode. This assertion helps remove some state space for DivInstrStable.
|
||||||
|
DivInstrNotMult: have (~`MULT.mult_en_internal |-> `MULTG.mult_state_q == `MULTG.ALBL)
|
||||||
|
# When there is an instruction is finished in EX but is blocked from moving to WB then there must be a valid instruction in the WB stage. This is a helper property for DivInstrStable
|
||||||
|
InstrInWbStage: have (wbexc_exists & ~wbexc_finishing -> `WBG.wb_valid_q)
|
||||||
|
|
||||||
/
|
/
|
||||||
|
|
||||||
MemErrKind: have (finishing_executed && wbexc_is_mem_instr && ~wbexc_illegal && wbexc_err |-> `IDC.store_err_q | `IDC.load_err_q)
|
MemErrKind: have (finishing_executed && wbexc_is_mem_instr && ~wbexc_illegal && wbexc_err |-> `IDC.store_err_q | `IDC.load_err_q)
|
||||||
|
@ -255,7 +260,7 @@ lemma ibex
|
||||||
|
|
||||||
FirstCycleNoGnt: have (`ID.instr_first_cycle |-> ~mem_gnt_fst_q)
|
FirstCycleNoGnt: have (`ID.instr_first_cycle |-> ~mem_gnt_fst_q)
|
||||||
MemStartFirstCycle: have (`LSU.ls_fsm_cs == `LSU.IDLE && `CR.lsu_req |-> `ID.instr_first_cycle)
|
MemStartFirstCycle: have (`LSU.ls_fsm_cs == `LSU.IDLE && `CR.lsu_req |-> `ID.instr_first_cycle)
|
||||||
# The below is slow!
|
|
||||||
DivInstrStable: have (`MULT.md_state_q != `MULT.MD_IDLE |-> $stable(`CR.instr_rdata_id) && `CR.instr_valid_id && (~`ID.stall_multdiv -> `MULT.md_state_q == `MULT.MD_FINISH) && `MULTG.mult_state_q == `MULTG.ALBL && `MULT.div_en_internal && (~wbexc_exists | wbexc_finishing))
|
DivInstrStable: have (`MULT.md_state_q != `MULT.MD_IDLE |-> $stable(`CR.instr_rdata_id) && `CR.instr_valid_id && (~`ID.stall_multdiv -> `MULT.md_state_q == `MULT.MD_FINISH) && `MULTG.mult_state_q == `MULTG.ALBL && `MULT.div_en_internal && (~wbexc_exists | wbexc_finishing))
|
||||||
|
|
||||||
InstrReqCount: have (
|
InstrReqCount: have (
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue