udb 0.1.17 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.data/cfgs/example_rv64_with_overlay.yaml +140 -5
- data/.data/cfgs/profile/RVA23S64.yaml +1 -1
- data/.data/cfgs/profile/RVA23p1S64.yaml +217 -0
- data/.data/cfgs/profile/RVB23S64.yaml +1 -1
- data/.data/cfgs/profile/RVB23p1S64.yaml +179 -0
- data/.data/cfgs/rv32-riscv-tests.yaml +134 -0
- data/.data/cfgs/rv32-vector.yaml +134 -0
- data/.data/cfgs/rv64-riscv-tests.yaml +134 -0
- data/.data/cfgs/rv64-vector.yaml +134 -0
- data/.data/spec/schemas/schema_defs.json +4 -1
- data/.data/spec/std/isa/csr/I/mcounteren.layout +7 -0
- data/.data/spec/std/isa/csr/I/mcounteren.yaml +7 -0
- data/.data/spec/std/isa/csr/Smcdeleg/scountinhibit.layout +111 -0
- data/.data/spec/std/isa/csr/Smcdeleg/scountinhibit.yaml +840 -0
- data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfg.yaml +2 -0
- data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfgh.yaml +2 -0
- data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfg.yaml +2 -0
- data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfgh.yaml +2 -0
- data/.data/spec/std/isa/csr/Sscofpmf/scountovf.layout +7 -0
- data/.data/spec/std/isa/csr/Sscofpmf/scountovf.yaml +7 -0
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9h.yaml +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounterN.layout +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounterNh.layout +2 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent10.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent10h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent11.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent11h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent12.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent12h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent13.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent13h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent14.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent14h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent15.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent15h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent16.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent16h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent17.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent17h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent18.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent18h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent19.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent19h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent20.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent20h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent21.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent21h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent22.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent22h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent23.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent23h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent24.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent24h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent25.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent25h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent26.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent26h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent27.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent27h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent28.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent28h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent29.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent29h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent3.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent30.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent30h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent31.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent31h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent3h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent4.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent4h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent5.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent5h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent6.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent6h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent7.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent7h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent8.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent8h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent9.yaml +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmevent9h.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmeventN.layout +4 -7
- data/.data/spec/std/isa/csr/Zihpm/mhpmeventNh.layout +4 -4
- data/.data/spec/std/isa/csr/Zkr/seed.yaml +75 -0
- data/.data/spec/std/isa/csr/hcontext.yaml +4 -4
- data/.data/spec/std/isa/csr/mcontext.yaml +4 -4
- data/.data/spec/std/isa/csr/mcycle.yaml +2 -0
- data/.data/spec/std/isa/csr/mcycleh.yaml +2 -0
- data/.data/spec/std/isa/csr/medeleg.yaml +72 -36
- data/.data/spec/std/isa/csr/menvcfg.yaml +12 -1
- data/.data/spec/std/isa/csr/menvcfgh.yaml +12 -0
- data/.data/spec/std/isa/csr/mideleg.yaml +13 -36
- data/.data/spec/std/isa/csr/mie.yaml +3 -6
- data/.data/spec/std/isa/csr/minstret.yaml +2 -0
- data/.data/spec/std/isa/csr/minstreth.yaml +2 -0
- data/.data/spec/std/isa/csr/mip.yaml +3 -6
- data/.data/spec/std/isa/csr/misa.yaml +3 -23
- data/.data/spec/std/isa/csr/mseccfg.yaml +27 -1
- data/.data/spec/std/isa/csr/mstatus.yaml +8 -2
- data/.data/spec/std/isa/csr/scontext.yaml +8 -4
- data/.data/spec/std/isa/csr/tcontrol.yaml +6 -2
- data/.data/spec/std/isa/csr/tdata2.yaml +6 -2
- data/.data/spec/std/isa/csr/tdata3.yaml +6 -2
- data/.data/spec/std/isa/ext/Sdext.yaml +58 -2
- data/.data/spec/std/isa/ext/Sm.yaml +2 -2
- data/.data/spec/std/isa/ext/Smcdeleg.yaml +7 -0
- data/.data/spec/std/isa/ext/Smmpm.yaml +8 -0
- data/.data/spec/std/isa/ext/Smnpm.yaml +19 -0
- data/.data/spec/std/isa/ext/Smpmpdeleg.yaml +33 -0
- data/.data/spec/std/isa/ext/Ssccfg.yaml +7 -0
- data/.data/spec/std/isa/ext/Ssnpm.yaml +8 -0
- data/.data/spec/std/isa/ext/Sspmp.yaml +44 -0
- data/.data/spec/std/isa/ext/Sspmpen.yaml +30 -0
- data/.data/spec/std/isa/ext/Zvabd.yaml +5 -1
- data/.data/spec/std/isa/ext/Zvfbdota32f.yaml +23 -0
- data/.data/spec/std/isa/ext/Zvzip.yaml +24 -0
- data/.data/spec/std/isa/inst/C/c.bnez.yaml +2 -2
- data/.data/spec/std/isa/inst/H/hlv.b.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hlv.bu.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hlv.d.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hlv.h.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hlv.hu.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hlv.w.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hlv.wu.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hlvx.hu.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hlvx.wu.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hsv.b.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hsv.d.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hsv.h.yaml +1 -1
- data/.data/spec/std/isa/inst/H/hsv.w.yaml +1 -1
- data/.data/spec/std/isa/inst/I/ld.yaml +9 -8
- data/.data/spec/std/isa/inst/I/sd.yaml +9 -8
- data/.data/spec/std/isa/inst/Q/fcvt.q.d.yaml +1 -1
- data/.data/spec/std/isa/inst/Q/flq.yaml +1 -1
- data/.data/spec/std/isa/inst/Sdext/dret.yaml +72 -6
- data/.data/spec/std/isa/inst/V/vfncvt.f.f.w.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vfncvt.f.x.w.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vfncvt.f.xu.w.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vfncvt.rod.f.f.w.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vfncvt.rtz.x.f.w.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vfncvt.rtz.xu.f.w.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vfncvt.x.f.w.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vfncvt.xu.f.w.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnclip.wi.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnclip.wv.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnclip.wx.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnclipu.wi.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnclipu.wv.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnclipu.wx.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnsra.wi.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnsra.wv.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnsra.wx.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnsrl.wi.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnsrl.wv.yaml +2 -2
- data/.data/spec/std/isa/inst/V/vnsrl.wx.yaml +2 -2
- data/.data/spec/std/isa/inst/Zfh/fcvt.h.s.yaml +28 -20
- data/.data/spec/std/isa/inst/Zfh/fcvt.s.h.yaml +35 -20
- data/.data/spec/std/isa/inst/Zvabd/vabd.vv.yaml +3 -3
- data/.data/spec/std/isa/inst/Zvabd/vabd.vx.yaml +69 -0
- data/.data/spec/std/isa/inst/Zvabd/vabdu.vv.yaml +3 -3
- data/.data/spec/std/isa/inst/Zvabd/{vabs.v.yaml → vabdu.vx.yaml} +17 -11
- data/.data/spec/std/isa/inst/Zvabd/vwabda.vv.yaml +1 -1
- data/.data/spec/std/isa/inst/Zvabd/vwabda.vx.yaml +73 -0
- data/.data/spec/std/isa/inst/Zvabd/vwabdau.vv.yaml +1 -1
- data/.data/spec/std/isa/inst/Zvabd/vwabdau.vx.yaml +74 -0
- data/.data/spec/std/isa/inst/Zvfbdota32f/vfbdota.vv.yaml +68 -0
- data/.data/spec/std/isa/inst/Zvzip/vpaire.vv.yaml +36 -0
- data/.data/spec/std/isa/inst/Zvzip/vpairo.vv.yaml +37 -0
- data/.data/spec/std/isa/inst/Zvzip/vunzipe.v.yaml +33 -0
- data/.data/spec/std/isa/inst/Zvzip/vunzipo.v.yaml +33 -0
- data/.data/spec/std/isa/inst/Zvzip/vzip.vv.yaml +37 -0
- data/.data/spec/std/isa/isa/builtin_functions.idl +51 -0
- data/.data/spec/std/isa/isa/globals.isa +117 -5
- data/.data/spec/std/isa/param/HCONTEXT_IMPLEMENTED.yaml +29 -0
- data/.data/spec/std/isa/param/{MCONTEXT_AVAILABLE.yaml → MCONTEXT_IMPLEMENTED.yaml} +3 -3
- data/.data/spec/std/isa/param/MEDELEG_DELEGATABLE.yaml +121 -0
- data/.data/spec/std/isa/param/MEI_INTR_IMPL.yaml +1 -1
- data/.data/spec/std/isa/param/MIDELEG_DELEGATABLE.yaml +177 -0
- data/.data/spec/std/isa/param/MSI_INTR_IMPL.yaml +1 -1
- data/.data/spec/std/isa/param/MTI_INTR_IMPL.yaml +1 -1
- data/.data/spec/std/isa/param/SCONTEXT_IMPLEMENTED.yaml +18 -0
- data/.data/spec/std/isa/param/SDTRIG_BREAKPOINT_REENTRANCY.yaml +45 -0
- data/.data/spec/std/isa/param/SDTRIG_ETRIGGER_SUPPORTED_EXCEPTIONS.yaml +37 -0
- data/.data/spec/std/isa/param/SDTRIG_ETRIGGER_SUPPORTED_TRIGGERS.yaml +25 -0
- data/.data/spec/std/isa/param/SDTRIG_ICOUNT_COUNT_HARDWIRED_1.yaml +23 -0
- data/.data/spec/std/isa/param/SDTRIG_ICOUNT_SELF_WRITE_SETS_PENDING.yaml +23 -0
- data/.data/spec/std/isa/param/SDTRIG_ICOUNT_SUPPORTED_TRIGGERS.yaml +25 -0
- data/.data/spec/std/isa/param/SDTRIG_ITRIGGER_SUPPORTED_INTERRUPTS.yaml +37 -0
- data/.data/spec/std/isa/param/SDTRIG_ITRIGGER_SUPPORTED_TRIGGERS.yaml +25 -0
- data/.data/spec/std/isa/param/SDTRIG_MAX_CHAIN_LENGTH.yaml +33 -0
- data/.data/spec/std/isa/param/SDTRIG_MCONTROL6_EXECUTE_WRITABLE.yaml +22 -0
- data/.data/spec/std/isa/param/SDTRIG_MCONTROL6_LOAD_WRITABLE.yaml +22 -0
- data/.data/spec/std/isa/param/SDTRIG_MCONTROL6_MASKMAX6.yaml +26 -0
- data/.data/spec/std/isa/param/SDTRIG_MCONTROL6_MATCH_LEGAL_VALUES.yaml +41 -0
- data/.data/spec/std/isa/param/SDTRIG_MCONTROL6_SELECT_WRITABLE.yaml +22 -0
- data/.data/spec/std/isa/param/SDTRIG_MCONTROL6_SIZE_LEGAL_VALUES.yaml +38 -0
- data/.data/spec/std/isa/param/SDTRIG_MCONTROL6_STORE_WRITABLE.yaml +22 -0
- data/.data/spec/std/isa/param/SDTRIG_MCONTROL6_SUPPORTED_TRIGGERS.yaml +25 -0
- data/.data/spec/std/isa/param/SDTRIG_M_WRITABLE.yaml +17 -0
- data/.data/spec/std/isa/param/SDTRIG_NUM_TRIGGERS.yaml +22 -0
- data/.data/spec/std/isa/param/SDTRIG_S_WRITABLE.yaml +19 -0
- data/.data/spec/std/isa/param/SDTRIG_TEXTRA_MHSELECT_MCONTEXT_MATCH.yaml +24 -0
- data/.data/spec/std/isa/param/SDTRIG_TEXTRA_MHSELECT_VMID_MATCH.yaml +23 -0
- data/.data/spec/std/isa/param/SDTRIG_TEXTRA_MHVALUE_LEN.yaml +26 -0
- data/.data/spec/std/isa/param/SDTRIG_TEXTRA_SSELECT_ASID_MATCH.yaml +23 -0
- data/.data/spec/std/isa/param/SDTRIG_TEXTRA_SSELECT_SCONTEXT_MATCH.yaml +26 -0
- data/.data/spec/std/isa/param/SDTRIG_TEXTRA_SVALUE_LEN.yaml +26 -0
- data/.data/spec/std/isa/param/SDTRIG_U_WRITABLE.yaml +19 -0
- data/.data/spec/std/isa/param/SDTRIG_VS_WRITABLE.yaml +19 -0
- data/.data/spec/std/isa/param/SDTRIG_VU_WRITABLE.yaml +19 -0
- data/.data/spec/std/isa/param/SEI_INTR_IMPL.yaml +1 -1
- data/.data/spec/std/isa/param/SSEED_READ_ONLY_ZERO.yaml +28 -0
- data/.data/spec/std/isa/param/SSI_INTR_IMPL.yaml +1 -1
- data/.data/spec/std/isa/param/STI_INTR_IMPL.yaml +1 -1
- data/.data/spec/std/isa/param/TCONTROL_IMPLEMENTED.yaml +16 -0
- data/.data/spec/std/isa/param/TDATA2_IMPLEMENTED.yaml +26 -0
- data/.data/spec/std/isa/param/TDATA3_IMPLEMENTED.yaml +29 -0
- data/.data/spec/std/isa/param/USEED_READ_ONLY_ZERO.yaml +28 -0
- data/.data/spec/std/isa/profile/RVA23p1S64.yaml +37 -0
- data/.data/spec/std/isa/profile/RVB23p1S64.yaml +39 -0
- data/.data/spec/std/isa/profile_family/RVA.yaml +3 -1
- data/.data/spec/std/isa/profile_family/RVB.yaml +3 -1
- data/.data/spec/std/isa/profile_release/RVA23p1.yaml +30 -0
- data/.data/spec/std/isa/profile_release/RVB23p1.yaml +30 -0
- data/lib/udb/version.rb +1 -1
- metadata +65 -8
- data/.data/spec/std/isa/param/HCONTEXT_AVAILABLE.yaml +0 -19
- data/.data/spec/std/isa/param/VSEI_INTR_IMPL.yaml +0 -28
- data/.data/spec/std/isa/param/VSSI_INTR_IMPL.yaml +0 -28
- data/.data/spec/std/isa/param/VSTI_INTR_IMPL.yaml +0 -33
|
@@ -945,6 +945,76 @@ function xlen {
|
|
|
945
945
|
}
|
|
946
946
|
}
|
|
947
947
|
|
|
948
|
+
enum Endian {
|
|
949
|
+
Little 0
|
|
950
|
+
Big 1
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
function endianness {
|
|
954
|
+
returns Endian
|
|
955
|
+
description {
|
|
956
|
+
Returns the endianness for the effective privilege mode.
|
|
957
|
+
}
|
|
958
|
+
body {
|
|
959
|
+
if (effective_ldst_mode() == PrivilegeMode::M) {
|
|
960
|
+
if (CSR[mstatus].MBE == 1'b1) {
|
|
961
|
+
return Endian::Big;
|
|
962
|
+
} else {
|
|
963
|
+
return Endian::Little;
|
|
964
|
+
}
|
|
965
|
+
} else if (implemented?(ExtensionName::S) && effective_ldst_mode() == PrivilegeMode::S) {
|
|
966
|
+
if (CSR[mstatus].SBE == 1'b1) {
|
|
967
|
+
return Endian::Big;
|
|
968
|
+
} else {
|
|
969
|
+
return Endian::Little;
|
|
970
|
+
}
|
|
971
|
+
} else if (implemented?(ExtensionName::U) && effective_ldst_mode() == PrivilegeMode::U) {
|
|
972
|
+
if (CSR[mstatus].UBE == 1'b1) {
|
|
973
|
+
return Endian::Big;
|
|
974
|
+
} else {
|
|
975
|
+
return Endian::Little;
|
|
976
|
+
}
|
|
977
|
+
} else if (implemented?(ExtensionName::H)) {
|
|
978
|
+
if (effective_ldst_mode() == PrivilegeMode::VS) {
|
|
979
|
+
if(CSR[hstatus].VSBE == 1'b1) {
|
|
980
|
+
return Endian::Big;
|
|
981
|
+
} else {
|
|
982
|
+
return Endian::Little;
|
|
983
|
+
}
|
|
984
|
+
} else if (effective_ldst_mode() == PrivilegeMode::VU) {
|
|
985
|
+
if(CSR[vsstatus].UBE == 1'b1) {
|
|
986
|
+
return Endian::Big;
|
|
987
|
+
} else {
|
|
988
|
+
return Endian::Little;
|
|
989
|
+
}
|
|
990
|
+
} else {
|
|
991
|
+
unreachable();
|
|
992
|
+
}
|
|
993
|
+
} else {
|
|
994
|
+
unreachable();
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
function byte_swap {
|
|
1000
|
+
returns XReg
|
|
1001
|
+
arguments
|
|
1002
|
+
U32 LEN,
|
|
1003
|
+
XReg value
|
|
1004
|
+
description {
|
|
1005
|
+
Swaps bytes in register based on LEN.
|
|
1006
|
+
}
|
|
1007
|
+
body {
|
|
1008
|
+
XReg result;
|
|
1009
|
+
|
|
1010
|
+
result = 0;
|
|
1011
|
+
for (U32 i=0; i < LEN; i = i+8) {
|
|
1012
|
+
result[(i+7):i] = value[(LEN-1-i):(LEN-8-i)];
|
|
1013
|
+
}
|
|
1014
|
+
return result;
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
|
|
948
1018
|
function virtual_mode? {
|
|
949
1019
|
returns Boolean
|
|
950
1020
|
description {
|
|
@@ -2627,9 +2697,19 @@ function read_memory {
|
|
|
2627
2697
|
body {
|
|
2628
2698
|
Boolean aligned = is_naturally_aligned(LEN, virtual_address);
|
|
2629
2699
|
XReg physical_address;
|
|
2700
|
+
XReg result;
|
|
2630
2701
|
|
|
2631
2702
|
if (aligned) {
|
|
2632
|
-
|
|
2703
|
+
result = read_memory_aligned(LEN, virtual_address, encoding, 1'b0, 1'b0);
|
|
2704
|
+
if (LEN > 8 && endianness() == Endian::Big ) {
|
|
2705
|
+
U32 tmp;
|
|
2706
|
+
for (U32 i=0; i < LEN/2; i = i+8) {
|
|
2707
|
+
tmp = result[(i+7):i];
|
|
2708
|
+
result[(i+7):i] = result[(LEN-1-i):(LEN-8-i)];
|
|
2709
|
+
result[(LEN-1-i):(LEN-8-i)] = tmp[7:0];
|
|
2710
|
+
}
|
|
2711
|
+
}
|
|
2712
|
+
return result;
|
|
2633
2713
|
}
|
|
2634
2714
|
|
|
2635
2715
|
# access isn't naturally aligned, but it still might be atomic if this hart supports
|
|
@@ -2646,7 +2726,16 @@ function read_memory {
|
|
|
2646
2726
|
|
|
2647
2727
|
if (misaligned_is_atomic?(LEN, physical_address)) {
|
|
2648
2728
|
access_check(physical_address, LEN, virtual_address, MemoryOperation::Read, ExceptionCode::LoadAccessFault, effective_ldst_mode());
|
|
2649
|
-
|
|
2729
|
+
result = read_physical_memory(LEN, physical_address);
|
|
2730
|
+
if (LEN > 8 && endianness() == Endian::Big) {
|
|
2731
|
+
U32 tmp;
|
|
2732
|
+
for (U32 i=0; i < LEN/2; i = i+8) {
|
|
2733
|
+
tmp = result[(i+7):i];
|
|
2734
|
+
result[(i+7):i] = result[(LEN-1-i):(LEN-8-i)];
|
|
2735
|
+
result[(LEN-1-i):(LEN-8-i)] = tmp[7:0];
|
|
2736
|
+
}
|
|
2737
|
+
}
|
|
2738
|
+
return result;
|
|
2650
2739
|
}
|
|
2651
2740
|
}
|
|
2652
2741
|
|
|
@@ -2666,10 +2755,18 @@ function read_memory {
|
|
|
2666
2755
|
|
|
2667
2756
|
# misaligned, must break into multiple reads
|
|
2668
2757
|
if (MISALIGNED_SPLIT_STRATEGY == "sequential_bytes") {
|
|
2669
|
-
|
|
2758
|
+
result = 0;
|
|
2670
2759
|
for (U32 I = 0; I < (LEN/8); I++) {
|
|
2671
2760
|
result = result | (read_memory_aligned(8, virtual_address + I, encoding, 1'b0, 1'b0) `<< (8*I));
|
|
2672
2761
|
}
|
|
2762
|
+
if(LEN > 8 && endianness() == Endian::Big) {
|
|
2763
|
+
U32 tmp;
|
|
2764
|
+
for (U32 i=0; i < LEN/2; i = i+8) {
|
|
2765
|
+
tmp = result[(i+7):i];
|
|
2766
|
+
result[(i+7):i] = result[(LEN-1-i):(LEN-8-i)];
|
|
2767
|
+
result[(LEN-1-i):(LEN-8-i)] = tmp[7:0];
|
|
2768
|
+
}
|
|
2769
|
+
}
|
|
2673
2770
|
return result;
|
|
2674
2771
|
} else if (MISALIGNED_SPLIT_STRATEGY == "custom") {
|
|
2675
2772
|
unpredictable("An implementation is free to break a misaligned access any way, leading to unpredictable behavior when any part of the misaligned access causes an exception");
|
|
@@ -2972,10 +3069,16 @@ function amo {
|
|
|
2972
3069
|
raise (ExceptionCode::StoreAmoAddressMisaligned, mode(), virtual_address);
|
|
2973
3070
|
}
|
|
2974
3071
|
|
|
2975
|
-
if (N ==
|
|
3072
|
+
if (N == 8) {
|
|
3073
|
+
return atomic_read_modify_write_8(physical_address, value, op);
|
|
3074
|
+
} else if (N == 16) {
|
|
3075
|
+
return atomic_read_modify_write_16(physical_address, value, op);
|
|
3076
|
+
} else if (N == 32) {
|
|
2976
3077
|
return atomic_read_modify_write_32(physical_address, value, op);
|
|
2977
|
-
} else {
|
|
3078
|
+
} else if (N == 64) {
|
|
2978
3079
|
return atomic_read_modify_write_64(physical_address, value, op);
|
|
3080
|
+
} else {
|
|
3081
|
+
unreachable();
|
|
2979
3082
|
}
|
|
2980
3083
|
|
|
2981
3084
|
}
|
|
@@ -3033,6 +3136,15 @@ function write_memory {
|
|
|
3033
3136
|
Boolean aligned = is_naturally_aligned(LEN, virtual_address);
|
|
3034
3137
|
XReg physical_address;
|
|
3035
3138
|
|
|
3139
|
+
if(LEN > 8 && endianness() == Endian::Big) {
|
|
3140
|
+
U32 tmp;
|
|
3141
|
+
for (U32 i=0; i < LEN/2; i = i+8) {
|
|
3142
|
+
tmp = value[(i+7):i];
|
|
3143
|
+
value[(i+7):i] = value[(LEN-1-i):(LEN-8-i)];
|
|
3144
|
+
value[(LEN-1-i):(LEN-8-i)] = tmp[7:0];
|
|
3145
|
+
}
|
|
3146
|
+
}
|
|
3147
|
+
|
|
3036
3148
|
if (aligned) {
|
|
3037
3149
|
write_memory_aligned(LEN, virtual_address, value, encoding, 1'b0, 1'b0);
|
|
3038
3150
|
return;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/param_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: param_schema.json#
|
|
7
|
+
kind: parameter
|
|
8
|
+
name: HCONTEXT_IMPLEMENTED
|
|
9
|
+
description: |
|
|
10
|
+
Specifies if the hcontext CSR is implemented
|
|
11
|
+
long_name: hcontext CSR is implemented
|
|
12
|
+
schema:
|
|
13
|
+
type: boolean
|
|
14
|
+
definedBy:
|
|
15
|
+
allOf:
|
|
16
|
+
- extension:
|
|
17
|
+
name: Sdtrig
|
|
18
|
+
- extension:
|
|
19
|
+
name: H
|
|
20
|
+
requirements:
|
|
21
|
+
if:
|
|
22
|
+
param:
|
|
23
|
+
name: HCONTEXT_IMPLEMENTED
|
|
24
|
+
equal: true
|
|
25
|
+
then:
|
|
26
|
+
param:
|
|
27
|
+
name: MCONTEXT_IMPLEMENTED
|
|
28
|
+
equal: true
|
|
29
|
+
reason: HCONTEXT cannot exist without MCONTEXT
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
|
|
6
6
|
$schema: param_schema.json#
|
|
7
7
|
kind: parameter
|
|
8
|
-
name:
|
|
8
|
+
name: MCONTEXT_IMPLEMENTED
|
|
9
9
|
description: |
|
|
10
|
-
Specifies if
|
|
11
|
-
long_name:
|
|
10
|
+
Specifies if the mcontext CSR is implemented
|
|
11
|
+
long_name: mcontext CSR is implemented
|
|
12
12
|
schema:
|
|
13
13
|
type: boolean
|
|
14
14
|
definedBy:
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/param_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: param_schema.json#
|
|
7
|
+
kind: parameter
|
|
8
|
+
name: MEDELEG_DELEGATABLE
|
|
9
|
+
description: |
|
|
10
|
+
Indicates which synchronous exceptions can be delegated via `medeleg`.
|
|
11
|
+
|
|
12
|
+
Entry _i_ corresponds to `medeleg` bit _i_, whose index is the exception code reported in `mcause`.
|
|
13
|
+
When an entry is true, the corresponding `medeleg` bit is writable.
|
|
14
|
+
When an entry is false, the corresponding `medeleg` bit is read-only zero.
|
|
15
|
+
|
|
16
|
+
An implementation may support any subset of the delegatable exceptions,
|
|
17
|
+
but no bit of `medeleg` may be read-only one.
|
|
18
|
+
|
|
19
|
+
`MEDELEG_DELEGATABLE[11]` (environment call from M-mode) and
|
|
20
|
+
`MEDELEG_DELEGATABLE[16]` (double trap) must always be false.
|
|
21
|
+
long_name: Exceptions that can be delegated through medeleg
|
|
22
|
+
schema:
|
|
23
|
+
type: array
|
|
24
|
+
items:
|
|
25
|
+
type: boolean
|
|
26
|
+
maxItems: 64
|
|
27
|
+
minItems: 64
|
|
28
|
+
definedBy:
|
|
29
|
+
extension:
|
|
30
|
+
name: S
|
|
31
|
+
requirements:
|
|
32
|
+
allOf:
|
|
33
|
+
# medeleg[11] (ECALL from M-mode) and medeleg[16] (double trap) are read-only zero
|
|
34
|
+
- param:
|
|
35
|
+
allOf:
|
|
36
|
+
- name: MEDELEG_DELEGATABLE
|
|
37
|
+
index: 11
|
|
38
|
+
equal: false
|
|
39
|
+
- name: MEDELEG_DELEGATABLE
|
|
40
|
+
index: 16
|
|
41
|
+
equal: false
|
|
42
|
+
# Reserved exception codes (14, 17, 32-47) cannot be delegated
|
|
43
|
+
- param:
|
|
44
|
+
allOf:
|
|
45
|
+
- name: MEDELEG_DELEGATABLE
|
|
46
|
+
index: 14
|
|
47
|
+
equal: false
|
|
48
|
+
- name: MEDELEG_DELEGATABLE
|
|
49
|
+
index: 17
|
|
50
|
+
equal: false
|
|
51
|
+
- name: MEDELEG_DELEGATABLE
|
|
52
|
+
index: 32
|
|
53
|
+
equal: false
|
|
54
|
+
- name: MEDELEG_DELEGATABLE
|
|
55
|
+
index: 33
|
|
56
|
+
equal: false
|
|
57
|
+
- name: MEDELEG_DELEGATABLE
|
|
58
|
+
index: 34
|
|
59
|
+
equal: false
|
|
60
|
+
- name: MEDELEG_DELEGATABLE
|
|
61
|
+
index: 35
|
|
62
|
+
equal: false
|
|
63
|
+
- name: MEDELEG_DELEGATABLE
|
|
64
|
+
index: 36
|
|
65
|
+
equal: false
|
|
66
|
+
- name: MEDELEG_DELEGATABLE
|
|
67
|
+
index: 37
|
|
68
|
+
equal: false
|
|
69
|
+
- name: MEDELEG_DELEGATABLE
|
|
70
|
+
index: 38
|
|
71
|
+
equal: false
|
|
72
|
+
- name: MEDELEG_DELEGATABLE
|
|
73
|
+
index: 39
|
|
74
|
+
equal: false
|
|
75
|
+
- name: MEDELEG_DELEGATABLE
|
|
76
|
+
index: 40
|
|
77
|
+
equal: false
|
|
78
|
+
- name: MEDELEG_DELEGATABLE
|
|
79
|
+
index: 41
|
|
80
|
+
equal: false
|
|
81
|
+
- name: MEDELEG_DELEGATABLE
|
|
82
|
+
index: 42
|
|
83
|
+
equal: false
|
|
84
|
+
- name: MEDELEG_DELEGATABLE
|
|
85
|
+
index: 43
|
|
86
|
+
equal: false
|
|
87
|
+
- name: MEDELEG_DELEGATABLE
|
|
88
|
+
index: 44
|
|
89
|
+
equal: false
|
|
90
|
+
- name: MEDELEG_DELEGATABLE
|
|
91
|
+
index: 45
|
|
92
|
+
equal: false
|
|
93
|
+
- name: MEDELEG_DELEGATABLE
|
|
94
|
+
index: 46
|
|
95
|
+
equal: false
|
|
96
|
+
- name: MEDELEG_DELEGATABLE
|
|
97
|
+
index: 47
|
|
98
|
+
equal: false
|
|
99
|
+
# Exception codes 10 and 20-23 are defined by H
|
|
100
|
+
- if:
|
|
101
|
+
not:
|
|
102
|
+
extension:
|
|
103
|
+
name: H
|
|
104
|
+
then:
|
|
105
|
+
param:
|
|
106
|
+
allOf:
|
|
107
|
+
- name: MEDELEG_DELEGATABLE
|
|
108
|
+
index: 10
|
|
109
|
+
equal: false
|
|
110
|
+
- name: MEDELEG_DELEGATABLE
|
|
111
|
+
index: 20
|
|
112
|
+
equal: false
|
|
113
|
+
- name: MEDELEG_DELEGATABLE
|
|
114
|
+
index: 21
|
|
115
|
+
equal: false
|
|
116
|
+
- name: MEDELEG_DELEGATABLE
|
|
117
|
+
index: 22
|
|
118
|
+
equal: false
|
|
119
|
+
- name: MEDELEG_DELEGATABLE
|
|
120
|
+
index: 23
|
|
121
|
+
equal: false
|
|
@@ -13,7 +13,7 @@ description: |
|
|
|
13
13
|
|
|
14
14
|
true::
|
|
15
15
|
Machine-level external interrupts are implemented.
|
|
16
|
-
`mie.MEIE` and `mideleg.MEI`
|
|
16
|
+
`mie.MEIE` is writable, and `mideleg.MEI` is writable if `MIDELEG_DELEGATABLE[11]` is true.
|
|
17
17
|
|
|
18
18
|
false::
|
|
19
19
|
Machine-level external interrupts are not implemented.
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/param_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: param_schema.json#
|
|
7
|
+
kind: parameter
|
|
8
|
+
name: MIDELEG_DELEGATABLE
|
|
9
|
+
description: |
|
|
10
|
+
Indicates which interrupts can be delegated via `mideleg`.
|
|
11
|
+
|
|
12
|
+
Entry _i_ corresponds to `mideleg` bit _i_, which uses the same bit layout as `mip`.
|
|
13
|
+
When an entry is true, the corresponding interrupt can be delegated: the `mideleg` bit is writable,
|
|
14
|
+
except for bits that are always delegated, which are read-only one.
|
|
15
|
+
When an entry is false, the corresponding `mideleg` bit is read-only zero.
|
|
16
|
+
|
|
17
|
+
An unimplemented interrupt cannot be delegated, i.e., if `STI_INTR_IMPL` is false,
|
|
18
|
+
`MIDELEG_DELEGATABLE[5]` must be false.
|
|
19
|
+
|
|
20
|
+
When the H extension is implemented, VSSI, VSTI, and VSEI are always delegated to HS-mode,
|
|
21
|
+
so `MIDELEG_DELEGATABLE[2]`, `[6]`, and `[10]` must be true.
|
|
22
|
+
SGEI is also always delegated when any guest external interrupts are implemented
|
|
23
|
+
(`NUM_EXTERNAL_GUEST_INTERRUPTS` is nonzero), so `MIDELEG_DELEGATABLE[12]` must then be true;
|
|
24
|
+
otherwise it must be false.
|
|
25
|
+
When H is not implemented, all four must be false.
|
|
26
|
+
long_name: Interrupts that can be delegated through mideleg
|
|
27
|
+
schema:
|
|
28
|
+
type: array
|
|
29
|
+
items:
|
|
30
|
+
type: boolean
|
|
31
|
+
maxItems: 64
|
|
32
|
+
minItems: 64
|
|
33
|
+
definedBy:
|
|
34
|
+
extension:
|
|
35
|
+
name: S
|
|
36
|
+
requirements:
|
|
37
|
+
allOf:
|
|
38
|
+
# Reserved interrupt codes (0, 4, 8, 14, 15) cannot be delegated
|
|
39
|
+
- param:
|
|
40
|
+
allOf:
|
|
41
|
+
- name: MIDELEG_DELEGATABLE
|
|
42
|
+
index: 0
|
|
43
|
+
equal: false
|
|
44
|
+
- name: MIDELEG_DELEGATABLE
|
|
45
|
+
index: 4
|
|
46
|
+
equal: false
|
|
47
|
+
- name: MIDELEG_DELEGATABLE
|
|
48
|
+
index: 8
|
|
49
|
+
equal: false
|
|
50
|
+
- name: MIDELEG_DELEGATABLE
|
|
51
|
+
index: 14
|
|
52
|
+
equal: false
|
|
53
|
+
- name: MIDELEG_DELEGATABLE
|
|
54
|
+
index: 15
|
|
55
|
+
equal: false
|
|
56
|
+
# An unimplemented interrupt cannot be delegated
|
|
57
|
+
- if:
|
|
58
|
+
param:
|
|
59
|
+
name: MIDELEG_DELEGATABLE
|
|
60
|
+
index: 1
|
|
61
|
+
equal: true
|
|
62
|
+
then:
|
|
63
|
+
param:
|
|
64
|
+
name: SSI_INTR_IMPL
|
|
65
|
+
equal: true
|
|
66
|
+
- if:
|
|
67
|
+
param:
|
|
68
|
+
name: MIDELEG_DELEGATABLE
|
|
69
|
+
index: 3
|
|
70
|
+
equal: true
|
|
71
|
+
then:
|
|
72
|
+
param:
|
|
73
|
+
name: MSI_INTR_IMPL
|
|
74
|
+
equal: true
|
|
75
|
+
- if:
|
|
76
|
+
param:
|
|
77
|
+
name: MIDELEG_DELEGATABLE
|
|
78
|
+
index: 5
|
|
79
|
+
equal: true
|
|
80
|
+
then:
|
|
81
|
+
param:
|
|
82
|
+
name: STI_INTR_IMPL
|
|
83
|
+
equal: true
|
|
84
|
+
- if:
|
|
85
|
+
param:
|
|
86
|
+
name: MIDELEG_DELEGATABLE
|
|
87
|
+
index: 7
|
|
88
|
+
equal: true
|
|
89
|
+
then:
|
|
90
|
+
param:
|
|
91
|
+
name: MTI_INTR_IMPL
|
|
92
|
+
equal: true
|
|
93
|
+
- if:
|
|
94
|
+
param:
|
|
95
|
+
name: MIDELEG_DELEGATABLE
|
|
96
|
+
index: 9
|
|
97
|
+
equal: true
|
|
98
|
+
then:
|
|
99
|
+
param:
|
|
100
|
+
name: SEI_INTR_IMPL
|
|
101
|
+
equal: true
|
|
102
|
+
- if:
|
|
103
|
+
param:
|
|
104
|
+
name: MIDELEG_DELEGATABLE
|
|
105
|
+
index: 11
|
|
106
|
+
equal: true
|
|
107
|
+
then:
|
|
108
|
+
param:
|
|
109
|
+
name: MEI_INTR_IMPL
|
|
110
|
+
equal: true
|
|
111
|
+
# LCOFI (bit 13) is defined by Sscofpmf
|
|
112
|
+
- if:
|
|
113
|
+
not:
|
|
114
|
+
extension:
|
|
115
|
+
name: Sscofpmf
|
|
116
|
+
then:
|
|
117
|
+
param:
|
|
118
|
+
name: MIDELEG_DELEGATABLE
|
|
119
|
+
index: 13
|
|
120
|
+
equal: false
|
|
121
|
+
# VSSI, VSTI, and VSEI are always delegated to HS-mode when H is implemented
|
|
122
|
+
- if:
|
|
123
|
+
extension:
|
|
124
|
+
name: H
|
|
125
|
+
then:
|
|
126
|
+
allOf:
|
|
127
|
+
# VSSI, VSTI, and VSEI are always delegated to HS-mode when H is implemented
|
|
128
|
+
- param:
|
|
129
|
+
allOf:
|
|
130
|
+
- name: MIDELEG_DELEGATABLE
|
|
131
|
+
index: 2
|
|
132
|
+
equal: true
|
|
133
|
+
- name: MIDELEG_DELEGATABLE
|
|
134
|
+
index: 6
|
|
135
|
+
equal: true
|
|
136
|
+
- name: MIDELEG_DELEGATABLE
|
|
137
|
+
index: 10
|
|
138
|
+
equal: true
|
|
139
|
+
# SGEI is always delegated to HS-mode when any guest external interrupts are implemented (GEILEN nonzero)
|
|
140
|
+
- if:
|
|
141
|
+
not:
|
|
142
|
+
param:
|
|
143
|
+
name: NUM_EXTERNAL_GUEST_INTERRUPTS
|
|
144
|
+
equal: 0
|
|
145
|
+
then:
|
|
146
|
+
param:
|
|
147
|
+
name: MIDELEG_DELEGATABLE
|
|
148
|
+
index: 12
|
|
149
|
+
equal: true
|
|
150
|
+
- if:
|
|
151
|
+
param:
|
|
152
|
+
name: NUM_EXTERNAL_GUEST_INTERRUPTS
|
|
153
|
+
equal: 0
|
|
154
|
+
then:
|
|
155
|
+
param:
|
|
156
|
+
name: MIDELEG_DELEGATABLE
|
|
157
|
+
index: 12
|
|
158
|
+
equal: false
|
|
159
|
+
- if:
|
|
160
|
+
not:
|
|
161
|
+
extension:
|
|
162
|
+
name: H
|
|
163
|
+
then:
|
|
164
|
+
param:
|
|
165
|
+
allOf:
|
|
166
|
+
- name: MIDELEG_DELEGATABLE
|
|
167
|
+
index: 2
|
|
168
|
+
equal: false
|
|
169
|
+
- name: MIDELEG_DELEGATABLE
|
|
170
|
+
index: 6
|
|
171
|
+
equal: false
|
|
172
|
+
- name: MIDELEG_DELEGATABLE
|
|
173
|
+
index: 10
|
|
174
|
+
equal: false
|
|
175
|
+
- name: MIDELEG_DELEGATABLE
|
|
176
|
+
index: 12
|
|
177
|
+
equal: false
|
|
@@ -13,7 +13,7 @@ description: |
|
|
|
13
13
|
|
|
14
14
|
true::
|
|
15
15
|
Machine-level software interrupts are implemented.
|
|
16
|
-
`mie.MSIE` and `mideleg.MSI`
|
|
16
|
+
`mie.MSIE` is writable, and `mideleg.MSI` is writable if `MIDELEG_DELEGATABLE[3]` is true.
|
|
17
17
|
|
|
18
18
|
false::
|
|
19
19
|
Machine-level software interrupts are not implemented.
|
|
@@ -13,7 +13,7 @@ description: |
|
|
|
13
13
|
|
|
14
14
|
true::
|
|
15
15
|
Machine-level timer interrupts are implemented.
|
|
16
|
-
`mie.MTIE
|
|
16
|
+
`mie.MTIE` and `mtimecmp` are writable, and `mideleg.MTI` is writable if `MIDELEG_DELEGATABLE[7]` is true.
|
|
17
17
|
|
|
18
18
|
false::
|
|
19
19
|
Machine-level timer interrupts are not implemented.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Copyright (C) 2026 Harvey Mudd College
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/param_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: param_schema.json#
|
|
7
|
+
kind: parameter
|
|
8
|
+
name: SCONTEXT_IMPLEMENTED
|
|
9
|
+
description: |
|
|
10
|
+
Specifies if the scontext CSR is implemented
|
|
11
|
+
long_name: scontext CSR is implemented
|
|
12
|
+
schema:
|
|
13
|
+
type: boolean
|
|
14
|
+
definedBy:
|
|
15
|
+
extension:
|
|
16
|
+
allOf:
|
|
17
|
+
- name: Sdtrig
|
|
18
|
+
- name: S
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Copyright (C) 2026 Harvey Mudd College
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/param_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: param_schema.json#
|
|
7
|
+
kind: parameter
|
|
8
|
+
name: SDTRIG_BREAKPOINT_REENTRANCY
|
|
9
|
+
description: |
|
|
10
|
+
How the hart prevents triggers with action=0 (breakpoint exception) from re-firing
|
|
11
|
+
inside their own handler (Debug spec 1.0, Sdtrig "Native Triggers").
|
|
12
|
+
|
|
13
|
+
* No_reentrancy_support: no specific support for reentrancy.
|
|
14
|
+
* Use_interrupt_enables: triggers with action=0 do not match or fire in M-mode while
|
|
15
|
+
mstatus.MIE is 0 (and likewise S/VS-mode with sstatus.SIE / vsstatus.SIE when delegated).
|
|
16
|
+
* Use_tcontrol: tcontrol.mte and tcontrol.mpte are implemented, and medeleg[3] is hard-wired to 0.
|
|
17
|
+
long_name: Breakpoint reentrancy mechanism
|
|
18
|
+
schema:
|
|
19
|
+
type: string
|
|
20
|
+
enum:
|
|
21
|
+
- No_reentrancy_support
|
|
22
|
+
- Use_interrupt_enables
|
|
23
|
+
- Use_tcontrol
|
|
24
|
+
requirements:
|
|
25
|
+
if:
|
|
26
|
+
param:
|
|
27
|
+
name: SDTRIG_BREAKPOINT_REENTRANCY
|
|
28
|
+
equal: Use_tcontrol
|
|
29
|
+
then:
|
|
30
|
+
allOf:
|
|
31
|
+
- param:
|
|
32
|
+
name: TCONTROL_IMPLEMENTED
|
|
33
|
+
equal: true
|
|
34
|
+
reason: The Use_tcontrol mechanism requires the tcontrol CSR.
|
|
35
|
+
- if:
|
|
36
|
+
extension:
|
|
37
|
+
name: S
|
|
38
|
+
then:
|
|
39
|
+
param:
|
|
40
|
+
name: MEDELEG_DELEGATABLE
|
|
41
|
+
index: 3
|
|
42
|
+
equal: false
|
|
43
|
+
definedBy:
|
|
44
|
+
extension:
|
|
45
|
+
name: Sdtrig
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Copyright (C) 2026 Harvey Mudd College
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/param_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: param_schema.json#
|
|
7
|
+
kind: parameter
|
|
8
|
+
name: SDTRIG_ETRIGGER_SUPPORTED_EXCEPTIONS
|
|
9
|
+
description: |
|
|
10
|
+
The set of exception codes (mcause Exception Code) that etrigger can be enabled for, i.e. the bits of
|
|
11
|
+
etrigger.tdata2 that are writable as 1.
|
|
12
|
+
|
|
13
|
+
Debug spec 1.0, etrigger: "Hardware may support only a subset of exceptions."
|
|
14
|
+
long_name: List of exceptions supported by etrigger
|
|
15
|
+
schema:
|
|
16
|
+
type: array
|
|
17
|
+
items:
|
|
18
|
+
type: integer
|
|
19
|
+
minimum: 0
|
|
20
|
+
maximum: 63
|
|
21
|
+
maxItems: 64
|
|
22
|
+
minItems: 1
|
|
23
|
+
uniqueItems: true
|
|
24
|
+
requirements:
|
|
25
|
+
idl(): |
|
|
26
|
+
for (U32 i = 32; i < 64; i++) {
|
|
27
|
+
(MXLEN == 32) -> !$array_includes?(SDTRIG_ETRIGGER_SUPPORTED_EXCEPTIONS, i);
|
|
28
|
+
}
|
|
29
|
+
reason: etrigger.tdata2 is XLEN bits wide, so codes above 31 cannot be selected when XLEN is 32.
|
|
30
|
+
definedBy:
|
|
31
|
+
allOf:
|
|
32
|
+
- extension:
|
|
33
|
+
name: Sdtrig
|
|
34
|
+
- param:
|
|
35
|
+
name: SDTRIG_ETRIGGER_SUPPORTED_TRIGGERS
|
|
36
|
+
includes: true
|
|
37
|
+
reason: Only relevant if at least one trigger supports etrigger.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Copyright (C) 2026 Harvey Mudd College
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/param_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: param_schema.json#
|
|
7
|
+
kind: parameter
|
|
8
|
+
name: SDTRIG_ETRIGGER_SUPPORTED_TRIGGERS
|
|
9
|
+
description: |
|
|
10
|
+
Indicates which triggers support etrigger. Entry i is true if the trigger selected by
|
|
11
|
+
tselect=i supports etrigger. Must have exactly SDTRIG_NUM_TRIGGERS entries.
|
|
12
|
+
long_name: List of triggers that support etrigger
|
|
13
|
+
schema:
|
|
14
|
+
type: array
|
|
15
|
+
items:
|
|
16
|
+
type: boolean
|
|
17
|
+
maxItems: 18446744073709551616 # 2**64, max tselect values (2**XLEN)
|
|
18
|
+
minItems: 0
|
|
19
|
+
definedBy:
|
|
20
|
+
extension:
|
|
21
|
+
name: Sdtrig
|
|
22
|
+
# TODO: uncomment when we have support for parameter comparison to other parameters
|
|
23
|
+
# requirements:
|
|
24
|
+
# idl(): |
|
|
25
|
+
# -> $array_size(SDTRIG_ETRIGGER_SUPPORTED_TRIGGERS) == SDTRIG_NUM_TRIGGERS;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Copyright (C) 2026 Harvey Mudd College
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/param_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: param_schema.json#
|
|
7
|
+
kind: parameter
|
|
8
|
+
name: SDTRIG_ICOUNT_COUNT_HARDWIRED_1
|
|
9
|
+
description: |
|
|
10
|
+
If true then icount.count is hard-wired to 1 for all icount triggers: it does not become 0 when the
|
|
11
|
+
trigger matches, and icount.m, icount.s, icount.u, icount.vs, and icount.vu are cleared when the trigger fires.
|
|
12
|
+
If false, icount.count is writable and becomes 0 when the trigger matches with a count of 1.
|
|
13
|
+
long_name: icount.COUNT is hard-wired to 1
|
|
14
|
+
schema:
|
|
15
|
+
type: boolean
|
|
16
|
+
definedBy:
|
|
17
|
+
allOf:
|
|
18
|
+
- extension:
|
|
19
|
+
name: Sdtrig
|
|
20
|
+
- param:
|
|
21
|
+
name: SDTRIG_ICOUNT_SUPPORTED_TRIGGERS
|
|
22
|
+
includes: true
|
|
23
|
+
reason: Only relevant if at least one trigger supports icount.
|