From bcc9a54b8c83f547c062895c95558cf2a4a0fb8c Mon Sep 17 00:00:00 2001 From: "Samuel A. Falvo II" Date: Fri, 24 Jul 2020 16:19:17 -0700 Subject: [PATCH] Reorganize code layout Make proof code match corresponding code in main_stage. I am constantly getting confused about what to work on next. Purely a cosmetic change, but has impact on cognitive load for me. --- src/soc/fu/trap/formal/proof_main_stage.py | 88 ++++++++++++---------- 1 file changed, 48 insertions(+), 40 deletions(-) diff --git a/src/soc/fu/trap/formal/proof_main_stage.py b/src/soc/fu/trap/formal/proof_main_stage.py index 1816afac..a5d5e7e9 100644 --- a/src/soc/fu/trap/formal/proof_main_stage.py +++ b/src/soc/fu/trap/formal/proof_main_stage.py @@ -163,47 +163,13 @@ class Driver(Elaboratable): Assert(nia_o.data == op.trapaddr << 4), ] - ################# - # SC. v3.0B p952 - ################# - with m.Case(MicrOp.OP_SC): - expected_msr = Signal(len(msr_o.data)) - comb += expected_msr.eq(op.msr) - # Unless otherwise documented, these exceptions to the MSR bits - # are documented in Power ISA V3.0B, page 1063 or 1064. - # We are not supporting hypervisor or transactional semantics, - # so we skip enforcing those fields' properties. - comb += field(expected_msr, MSRb.IR).eq(0) - comb += field(expected_msr, MSRb.DR).eq(0) - comb += field(expected_msr, MSRb.FE0).eq(0) - comb += field(expected_msr, MSRb.FE1).eq(0) - comb += field(expected_msr, MSRb.EE).eq(0) - comb += field(expected_msr, MSRb.RI).eq(0) - comb += field(expected_msr, MSRb.SF).eq(1) - comb += field(expected_msr, MSRb.TM).eq(0) - comb += field(expected_msr, MSRb.VEC).eq(0) - comb += field(expected_msr, MSRb.VSX).eq(0) - comb += field(expected_msr, MSRb.PR).eq(0) - comb += field(expected_msr, MSRb.FP).eq(0) - comb += field(expected_msr, MSRb.PMM).eq(0) - comb += field(expected_msr, MSRb.TEs, MSRb.TEe).eq(0) - comb += field(expected_msr, MSRb.UND).eq(0) - comb += field(expected_msr, MSRb.LE).eq(1) - - comb += [ - Assert(dut.o.srr0.ok), - Assert(srr1_o.ok), - Assert(msr_o.ok), - - Assert(dut.o.srr0.data == (op.cia + 4)[0:64]), - Assert(field(srr1_o, 33, 36) == 0), - Assert(field(srr1_o, 42, 47) == 0), - Assert(field(srr1_o, 0, 32) == field(msr_i, 0, 32)), - Assert(field(srr1_o, 37, 41) == field(msr_i, 37, 41)), - Assert(field(srr1_o, 48, 63) == field(msr_i, 48, 63)), + ################### + # MTMSR + ################### - Assert(msr_o.data == expected_msr), - ] + ################### + # MFMSR + ################### ################### # RFID. v3.0B p955 @@ -267,6 +233,48 @@ class Driver(Elaboratable): # check NIA against SRR0. 2 LSBs are set to zero (word-align) comb += Assert(nia_o.data == Cat(Const(0, 2), dut.i.srr0[2:])) + ################# + # SC. v3.0B p952 + ################# + with m.Case(MicrOp.OP_SC): + expected_msr = Signal(len(msr_o.data)) + comb += expected_msr.eq(op.msr) + # Unless otherwise documented, these exceptions to the MSR bits + # are documented in Power ISA V3.0B, page 1063 or 1064. + # We are not supporting hypervisor or transactional semantics, + # so we skip enforcing those fields' properties. + comb += field(expected_msr, MSRb.IR).eq(0) + comb += field(expected_msr, MSRb.DR).eq(0) + comb += field(expected_msr, MSRb.FE0).eq(0) + comb += field(expected_msr, MSRb.FE1).eq(0) + comb += field(expected_msr, MSRb.EE).eq(0) + comb += field(expected_msr, MSRb.RI).eq(0) + comb += field(expected_msr, MSRb.SF).eq(1) + comb += field(expected_msr, MSRb.TM).eq(0) + comb += field(expected_msr, MSRb.VEC).eq(0) + comb += field(expected_msr, MSRb.VSX).eq(0) + comb += field(expected_msr, MSRb.PR).eq(0) + comb += field(expected_msr, MSRb.FP).eq(0) + comb += field(expected_msr, MSRb.PMM).eq(0) + comb += field(expected_msr, MSRb.TEs, MSRb.TEe).eq(0) + comb += field(expected_msr, MSRb.UND).eq(0) + comb += field(expected_msr, MSRb.LE).eq(1) + + comb += [ + Assert(dut.o.srr0.ok), + Assert(srr1_o.ok), + Assert(msr_o.ok), + + Assert(dut.o.srr0.data == (op.cia + 4)[0:64]), + Assert(field(srr1_o, 33, 36) == 0), + Assert(field(srr1_o, 42, 47) == 0), + Assert(field(srr1_o, 0, 32) == field(msr_i, 0, 32)), + Assert(field(srr1_o, 37, 41) == field(msr_i, 37, 41)), + Assert(field(srr1_o, 48, 63) == field(msr_i, 48, 63)), + + Assert(msr_o.data == expected_msr), + ] + comb += dut.i.ctx.matches(dut.o.ctx) return m -- 2.30.2