udb 0.1.9 → 0.1.14
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 +20 -20
- data/.data/cfgs/mc100-32-full-example.yaml +1 -0
- data/.data/cfgs/profile/README.adoc +10 -0
- data/.data/cfgs/profile/RVA20S64.yaml +26 -6
- data/.data/cfgs/profile/RVA20U64.yaml +18 -4
- data/.data/cfgs/profile/RVA22S64.yaml +27 -7
- data/.data/cfgs/profile/RVA22U64.yaml +18 -4
- data/.data/cfgs/profile/RVA23S64.yaml +61 -7
- data/.data/cfgs/profile/RVA23U64.yaml +36 -4
- data/.data/cfgs/profile/RVB23S64.yaml +27 -7
- data/.data/cfgs/profile/RVB23U64.yaml +18 -4
- data/.data/cfgs/profile/RVI20U32.yaml +10 -4
- data/.data/cfgs/profile/RVI20U64.yaml +10 -4
- data/.data/cfgs/qc_iu.yaml +8 -1
- data/.data/cfgs/rv32-riscv-tests.yaml +6 -2
- data/.data/cfgs/rv32-vector.yaml +6 -2
- data/.data/cfgs/rv64-riscv-tests.yaml +6 -2
- data/.data/cfgs/rv64-vector.yaml +6 -2
- data/.data/spec/custom/isa/qc_iu/csr/Smrnmi/mnepc.yaml +17 -0
- data/.data/spec/custom/isa/qc_iu/csr/Xqccmi/qc.itba.yaml +45 -0
- data/.data/spec/custom/isa/qc_iu/csr/Xqccmi/qc.itdec.yaml +39 -0
- data/.data/spec/custom/isa/qc_iu/csr/jvt.yaml +11 -0
- data/.data/spec/custom/isa/qc_iu/csr/mepc.yaml +16 -0
- data/.data/spec/custom/isa/qc_iu/ext/Xqccmi.yaml +290 -0
- data/.data/spec/custom/isa/qc_iu/ext/Xqccmt.yaml +127 -0
- data/.data/spec/custom/isa/qc_iu/inst/Xqccmi/qc.cm.ilut.yaml +136 -0
- data/.data/spec/custom/isa/qc_iu/inst/Xqccmt/qc.cm.jalt.yaml +84 -0
- data/.data/spec/custom/isa/qc_iu/inst/Xqccmt/qc.cm.jt.yaml +60 -0
- data/.data/spec/custom/isa/qc_iu/isa/globals.isa +134 -0
- data/.data/spec/schemas/config_schema.json +220 -27
- data/.data/spec/schemas/csr_schema.json +0 -6
- data/.data/spec/schemas/ext_schema.json +80 -24
- data/.data/spec/schemas/inst_schema.json +0 -3
- data/.data/spec/schemas/mmr_schema.json +3 -3
- data/.data/spec/schemas/profile_release_schema.json +1 -1
- data/.data/spec/schemas/profile_schema.json +0 -3
- data/.data/spec/schemas/register_file_schema.json +8 -3
- data/.data/spec/schemas/schema_defs.json +13 -27
- data/.data/spec/std/isa/csr/H/henvcfg.yaml +25 -0
- data/.data/spec/std/isa/csr/I/pmpaddr0.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr1.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr10.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr11.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr12.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr13.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr14.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr15.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr16.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr17.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr18.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr19.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr2.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr20.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr21.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr22.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr23.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr24.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr25.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr26.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr27.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr28.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr29.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr3.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr30.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr31.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr32.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr33.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr34.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr35.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr36.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr37.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr38.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr39.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr4.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr40.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr41.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr42.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr43.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr44.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr45.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr46.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr47.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr48.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr49.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr5.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr50.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr51.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr52.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr53.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr54.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr55.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr56.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr57.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr58.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr59.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr6.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr60.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr61.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr62.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr63.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr7.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr8.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddr9.yaml +6 -4
- data/.data/spec/std/isa/csr/I/pmpaddrN.layout +6 -4
- data/.data/spec/std/isa/csr/I/pmpcfg0.yaml +128 -152
- data/.data/spec/std/isa/csr/I/pmpcfg1.yaml +64 -76
- data/.data/spec/std/isa/csr/I/pmpcfg10.yaml +128 -152
- data/.data/spec/std/isa/csr/I/pmpcfg11.yaml +64 -76
- data/.data/spec/std/isa/csr/I/pmpcfg12.yaml +128 -152
- data/.data/spec/std/isa/csr/I/pmpcfg13.yaml +64 -76
- data/.data/spec/std/isa/csr/I/pmpcfg14.yaml +128 -152
- data/.data/spec/std/isa/csr/I/pmpcfg15.yaml +64 -76
- data/.data/spec/std/isa/csr/I/pmpcfg2.yaml +128 -152
- data/.data/spec/std/isa/csr/I/pmpcfg3.yaml +64 -76
- data/.data/spec/std/isa/csr/I/pmpcfg4.yaml +128 -152
- data/.data/spec/std/isa/csr/I/pmpcfg5.yaml +64 -76
- data/.data/spec/std/isa/csr/I/pmpcfg6.yaml +128 -152
- data/.data/spec/std/isa/csr/I/pmpcfg7.yaml +64 -76
- data/.data/spec/std/isa/csr/I/pmpcfg8.yaml +128 -152
- data/.data/spec/std/isa/csr/I/pmpcfg9.yaml +64 -76
- data/.data/spec/std/isa/csr/I/pmpcfgN.layout +16 -19
- data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.layout +6 -2
- data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.yaml +6 -2
- data/.data/spec/std/isa/csr/hstatus.yaml +16 -0
- data/.data/spec/std/isa/csr/jvt.yaml +1 -0
- data/.data/spec/std/isa/csr/mcycleh.yaml +1 -1
- data/.data/spec/std/isa/csr/menvcfg.yaml +20 -0
- data/.data/spec/std/isa/csr/misa.yaml +0 -12
- data/.data/spec/std/isa/csr/mstatus.yaml +46 -6
- data/.data/spec/std/isa/csr/mstatush.yaml +17 -15
- data/.data/spec/std/isa/csr/senvcfg.yaml +42 -0
- data/.data/spec/std/isa/csr/sstatus.yaml +12 -0
- data/.data/spec/std/isa/csr/vsstatus.yaml +24 -0
- data/.data/spec/std/isa/ext/A.yaml +5 -7
- data/.data/spec/std/isa/ext/S.yaml +12 -0
- data/.data/spec/std/isa/ext/Smpmpmt.yaml +52 -0
- data/.data/spec/std/isa/ext/Sv32.yaml +7 -19
- data/.data/spec/std/isa/ext/Sv39.yaml +7 -19
- data/.data/spec/std/isa/ext/Sv48.yaml +4 -20
- data/.data/spec/std/isa/ext/Sv57.yaml +4 -20
- data/.data/spec/std/isa/ext/Svukte.yaml +71 -0
- data/.data/spec/std/isa/ext/Zawrs.yaml +1 -1
- data/.data/spec/std/isa/ext/Zihpm.yaml +0 -12
- data/.data/spec/std/isa/inst/B/andn.yaml +10 -12
- data/.data/spec/std/isa/inst/B/clmul.yaml +9 -11
- data/.data/spec/std/isa/inst/B/clmulh.yaml +9 -11
- data/.data/spec/std/isa/inst/B/orn.yaml +9 -11
- data/.data/spec/std/isa/inst/B/rev8.yaml +1 -1
- data/.data/spec/std/isa/inst/B/rol.yaml +9 -11
- data/.data/spec/std/isa/inst/B/rolw.yaml +9 -11
- data/.data/spec/std/isa/inst/B/ror.yaml +9 -11
- data/.data/spec/std/isa/inst/B/rorw.yaml +9 -11
- data/.data/spec/std/isa/inst/B/xnor.yaml +9 -11
- data/.data/spec/std/isa/inst/C/c.addi.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addi16sp.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addiw.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.andi.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.ldsp.yaml +4 -4
- data/.data/spec/std/isa/inst/C/c.li.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.lui.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.mv.yaml +1 -1
- data/.data/spec/std/isa/inst/C/c.sdsp.yaml +1 -1
- data/.data/spec/std/isa/inst/D/fsgnj.d.yaml +3 -0
- data/.data/spec/std/isa/inst/D/fsgnjn.d.yaml +3 -0
- data/.data/spec/std/isa/inst/D/fsgnjx.d.yaml +3 -0
- data/.data/spec/std/isa/inst/F/fadd.s.yaml +5 -5
- data/.data/spec/std/isa/inst/F/fclass.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fcvt.l.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.lu.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.l.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.lu.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.w.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.wu.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.w.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.wu.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fdiv.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/feq.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fle.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fleq.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/flt.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fltq.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/flw.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fmadd.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmax.s.yaml +6 -6
- data/.data/spec/std/isa/inst/F/fmin.s.yaml +6 -6
- data/.data/spec/std/isa/inst/F/fmsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmul.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +4 -4
- data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +3 -3
- data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +4 -4
- data/.data/spec/std/isa/inst/F/fsqrt.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsw.yaml +1 -1
- data/.data/spec/std/isa/inst/I/addi.yaml +2 -1
- data/.data/spec/std/isa/inst/I/addiw.yaml +2 -1
- data/.data/spec/std/isa/inst/I/andi.yaml +2 -1
- data/.data/spec/std/isa/inst/I/auipc.yaml +1 -0
- data/.data/spec/std/isa/inst/I/beq.yaml +1 -1
- data/.data/spec/std/isa/inst/I/bge.yaml +4 -2
- data/.data/spec/std/isa/inst/I/bgeu.yaml +3 -0
- data/.data/spec/std/isa/inst/I/blt.yaml +4 -2
- data/.data/spec/std/isa/inst/I/bltu.yaml +3 -0
- data/.data/spec/std/isa/inst/I/bne.yaml +1 -1
- data/.data/spec/std/isa/inst/I/lb.yaml +1 -0
- data/.data/spec/std/isa/inst/I/lbu.yaml +1 -0
- data/.data/spec/std/isa/inst/I/ld.yaml +2 -0
- data/.data/spec/std/isa/inst/I/lh.yaml +1 -0
- data/.data/spec/std/isa/inst/I/lhu.yaml +1 -0
- data/.data/spec/std/isa/inst/I/lui.yaml +1 -0
- data/.data/spec/std/isa/inst/I/lw.yaml +1 -0
- data/.data/spec/std/isa/inst/I/lwu.yaml +1 -0
- data/.data/spec/std/isa/inst/I/ori.yaml +1 -0
- data/.data/spec/std/isa/inst/I/sb.yaml +1 -0
- data/.data/spec/std/isa/inst/I/sd.yaml +1 -0
- data/.data/spec/std/isa/inst/I/sh.yaml +1 -0
- data/.data/spec/std/isa/inst/I/slt.yaml +2 -2
- data/.data/spec/std/isa/inst/I/slti.yaml +1 -0
- data/.data/spec/std/isa/inst/I/sltiu.yaml +2 -1
- data/.data/spec/std/isa/inst/I/sltu.yaml +1 -1
- data/.data/spec/std/isa/inst/I/sub.yaml +1 -1
- data/.data/spec/std/isa/inst/I/subw.yaml +1 -1
- data/.data/spec/std/isa/inst/I/sw.yaml +1 -0
- data/.data/spec/std/isa/inst/I/xori.yaml +2 -1
- data/.data/spec/std/isa/inst/M/mul.yaml +0 -19
- data/.data/spec/std/isa/inst/Q/fsgnj.q.yaml +1 -1
- data/.data/spec/std/isa/inst/S/sret.yaml +3 -1
- data/.data/spec/std/isa/inst/V/vadc.vim.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vadd.vi.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vadd.vv.yaml +1 -5
- data/.data/spec/std/isa/inst/V/vand.vi.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vfsgnjn.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vfsgnjx.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vl1re8.v.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vl2re8.v.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vl4re8.v.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vl8re8.v.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vle8.v.yaml +4 -8
- data/.data/spec/std/isa/inst/V/vmadc.vi.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vmadc.vim.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vmand.mm.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmerge.vim.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vmfle.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmflt.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmnand.mm.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmseq.vi.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vmsgt.vi.yaml +4 -0
- data/.data/spec/std/isa/inst/V/vmsgtu.vi.yaml +4 -0
- data/.data/spec/std/isa/inst/V/vmsle.vi.yaml +4 -0
- data/.data/spec/std/isa/inst/V/vmsle.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsleu.vi.yaml +4 -0
- data/.data/spec/std/isa/inst/V/vmsleu.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmslt.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsltu.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsne.vi.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +2 -13
- data/.data/spec/std/isa/inst/V/vmv.x.s.yaml +1 -1
- data/.data/spec/std/isa/inst/V/vmxnor.mm.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmxor.mm.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vnsrl.wx.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vor.vi.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vrsub.vi.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vrsub.vx.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vsadd.vi.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vsaddu.vi.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vse8.v.yaml +4 -4
- data/.data/spec/std/isa/inst/V/vwadd.vx.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vwaddu.vx.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vxor.vi.yaml +4 -0
- data/.data/spec/std/isa/inst/Zalasr/lSIZE.AQRL.layout +40 -5
- data/.data/spec/std/isa/inst/Zalasr/lb.aq.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lb.aqrl.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/ld.aq.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/ld.aqrl.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lh.aq.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lh.aqrl.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lw.aq.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lw.aqrl.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/sSIZE.AQRL.layout +46 -5
- data/.data/spec/std/isa/inst/Zalasr/sb.aqrl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sb.rl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sd.aqrl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sd.rl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sh.aqrl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sh.rl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sw.aqrl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sw.rl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zawrs/wrs.nto.yaml +4 -2
- data/.data/spec/std/isa/inst/Zba/add.uw.yaml +9 -11
- data/.data/spec/std/isa/inst/Zbb/orc.b.yaml +1 -1
- data/.data/spec/std/isa/inst/Zbkb/brev8.yaml +3 -3
- data/.data/spec/std/isa/inst/Zbkb/packw.yaml +1 -1
- data/.data/spec/std/isa/inst/Zbkb/unzip.yaml +2 -2
- data/.data/spec/std/isa/inst/Zbkb/zip.yaml +2 -2
- data/.data/spec/std/isa/inst/Zbkx/xperm4.yaml +2 -2
- data/.data/spec/std/isa/inst/Zbkx/xperm8.yaml +2 -2
- data/.data/spec/std/isa/inst/Zcd/c.fld.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcd/c.fldsp.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcd/c.fsdsp.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcf/c.flwsp.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcf/c.fswsp.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmp/cm.pop.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmp/cm.popret.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmp/cm.popretz.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmp/cm.push.yaml +2 -3
- data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/fcvt.h.s.yaml +6 -6
- data/.data/spec/std/isa/inst/Zfh/fcvt.s.h.yaml +5 -5
- data/.data/spec/std/isa/inst/Zfh/flh.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/fsh.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicbop/prefetch.i.yaml +2 -0
- data/.data/spec/std/isa/inst/Zicbop/prefetch.r.yaml +2 -0
- data/.data/spec/std/isa/inst/Zicbop/prefetch.w.yaml +2 -0
- data/.data/spec/std/isa/inst/Zicsr/csrrc.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrci.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrs.yaml +2 -2
- data/.data/spec/std/isa/inst/Zicsr/csrrsi.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrwi.yaml +1 -1
- data/.data/spec/std/isa/inst/Zks/sm3p0.yaml +1 -1
- data/.data/spec/std/isa/inst/Zks/sm3p1.yaml +1 -1
- data/.data/spec/std/isa/inst/Zks/sm4ed.yaml +1 -1
- data/.data/spec/std/isa/inst/Zks/sm4ks.yaml +1 -1
- data/.data/spec/std/isa/isa/builtin_functions.idl +18 -0
- data/.data/spec/std/isa/isa/fp.idl +1 -5
- data/.data/spec/std/isa/isa/globals.isa +72 -21
- data/.data/spec/std/isa/isa/interrupts.idl +1 -0
- data/.data/spec/std/isa/isa/vec.idl +1 -2
- data/.data/spec/std/isa/manual_version/isa/20240411/isa_20240411.yaml +5 -5
- data/.data/spec/std/isa/param/COUNTINHIBIT_EN.yaml +8 -2
- data/.data/spec/std/isa/param/HSTATEEN_CONTEXT_TYPE.yaml +1 -0
- data/.data/spec/std/isa/param/JVT_BASE_MASK.yaml +1 -1
- data/.data/spec/std/isa/param/MCOUNTINHIBIT_IMPLEMENTED.yaml +25 -0
- data/.data/spec/std/isa/param/MSTATEEN_CONTEXT_TYPE.yaml +1 -0
- data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_DIRECT.yaml +1 -0
- data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_VECTORED.yaml +1 -0
- data/.data/spec/std/isa/param/MTVEC_MODES.yaml +10 -3
- data/.data/spec/std/isa/param/NUM_PMP_ENTRIES.yaml +11 -22
- data/.data/spec/std/isa/param/NUM_USABLE_PMP_ENTRIES.yaml +35 -0
- data/.data/spec/std/isa/param/PMP_NA4_SUPPORTED.yaml +23 -0
- data/.data/spec/std/isa/param/PMP_NAPOT_SUPPORTED.yaml +19 -0
- data/.data/spec/std/isa/param/{MSTATUS_TVM_IMPLEMENTED.yaml → PMP_TOR_SUPPORTED.yaml} +6 -6
- data/.data/spec/std/isa/param/PRECISE_SYNCHRONOUS_EXCEPTIONS.yaml +1 -0
- data/.data/spec/std/isa/param/TRAP_ON_EBREAK.yaml +1 -0
- data/.data/spec/std/isa/param/TRAP_ON_ECALL_FROM_M.yaml +1 -0
- data/.data/spec/std/isa/param/TRAP_ON_SFENCE_VMA_WHEN_SATP_MODE_IS_READ_ONLY.yaml +1 -0
- data/.data/spec/std/isa/param/VLEN.yaml +2 -0
- data/.data/spec/std/isa/param/ZAWRS_NTO_IS_NOP.yaml +19 -0
- data/.data/spec/std/isa/profile/RVA20S64.yaml +11 -4
- data/.data/spec/std/isa/profile/RVA20U64.yaml +14 -5
- data/.data/spec/std/isa/profile/RVA22S64.yaml +14 -3
- data/.data/spec/std/isa/profile/RVA22U64.yaml +8 -1
- data/.data/spec/std/isa/profile/RVA23S64.yaml +13 -0
- data/.data/spec/std/isa/profile/RVA23U64.yaml +15 -1
- data/.data/spec/std/isa/profile/RVB23S64.yaml +15 -3
- data/.data/spec/std/isa/profile/RVB23U64.yaml +8 -1
- data/.data/spec/std/isa/profile/RVI20U32.yaml +8 -1
- data/.data/spec/std/isa/profile/RVI20U64.yaml +7 -0
- data/.data/spec/std/isa/register_file/F.yaml +3 -2
- data/.data/spec/std/isa/register_file/V.yaml +2 -2
- data/.data/spec/std/isa/register_file/X.yaml +2 -1
- data/lib/udb/ESPRESSO_VERSION +1 -1
- data/lib/udb/architecture.rb +4 -25
- data/lib/udb/cfg_arch.rb +171 -59
- data/lib/udb/cli.rb +10 -1
- data/lib/udb/condition.rb +38 -37
- data/lib/udb/config.rb +86 -8
- data/lib/udb/doc_link.rb +3 -4
- data/lib/udb/logic.rb +29 -56
- data/lib/udb/obj/csr.rb +23 -5
- data/lib/udb/obj/csr_field.rb +36 -21
- data/lib/udb/obj/database_obj.rb +2 -5
- data/lib/udb/obj/extension.rb +0 -3
- data/lib/udb/obj/instruction.rb +2 -5
- data/lib/udb/obj/non_isa_specification.rb +22 -100
- data/lib/udb/obj/portfolio.rb +75 -20
- data/lib/udb/obj/profile.rb +0 -4
- data/lib/udb/obj/register_file.rb +63 -2
- data/lib/udb/portfolio_design.rb +3 -6
- data/lib/udb/resolver.rb +84 -23
- data/lib/udb/version.rb +1 -1
- data/lib/udb/version_spec.rb +8 -0
- data/lib/udb/z3.rb +25 -2
- data/lib/udb.rb +0 -3
- metadata +30 -38
- data/.data/cfgs/profile/RVA23M64.yaml +0 -159
- data/.data/cfgs/profile/RVB23M64.yaml +0 -149
- data/.data/spec/schemas/proc_cert_class_schema.json +0 -35
- data/.data/spec/schemas/proc_cert_model_schema.json +0 -336
- data/.data/spec/std/isa/proc_cert_class/AC.yaml +0 -13
- data/.data/spec/std/isa/proc_cert_class/MC.yaml +0 -13
- data/.data/spec/std/isa/proc_cert_class/RVI.yaml +0 -16
- data/.data/spec/std/isa/proc_cert_model/AC100.yaml +0 -72
- data/.data/spec/std/isa/proc_cert_model/AC200.yaml +0 -58
- data/.data/spec/std/isa/proc_cert_model/MC100-32.yaml +0 -155
- data/.data/spec/std/isa/proc_cert_model/MC100-64.yaml +0 -21
- data/.data/spec/std/isa/proc_cert_model/MC200-32.yaml +0 -60
- data/.data/spec/std/isa/proc_cert_model/MC200-64.yaml +0 -21
- data/.data/spec/std/isa/proc_cert_model/MC300-32.yaml +0 -40
- data/.data/spec/std/isa/proc_cert_model/MC300-64.yaml +0 -21
- data/.data/spec/std/isa/proc_cert_model/RVI20-32.yaml +0 -39
- data/.data/spec/std/isa/proc_cert_model/RVI20-64.yaml +0 -19
- data/.data/spec/std/isa/profile/RVA23M64.yaml +0 -24
- data/.data/spec/std/isa/profile/RVB23M64.yaml +0 -86
- data/lib/udb/cert_normative_rule.rb +0 -41
- data/lib/udb/obj/certifiable_obj.rb +0 -21
- data/lib/udb/obj/certificate.rb +0 -230
- data/lib/udb/proc_cert_design.rb +0 -77
|
@@ -307,6 +307,7 @@ function compatible_mode? {
|
|
|
307
307
|
(actual_mode == PrivilegeMode::VS) ||
|
|
308
308
|
(actual_mode == PrivilegeMode::VU);
|
|
309
309
|
}
|
|
310
|
+
return false;
|
|
310
311
|
}
|
|
311
312
|
}
|
|
312
313
|
|
|
@@ -327,8 +328,7 @@ function exception_handling_mode {
|
|
|
327
328
|
} else {
|
|
328
329
|
return PrivilegeMode::M;
|
|
329
330
|
}
|
|
330
|
-
} else {
|
|
331
|
-
assert(implemented?(ExtensionName::H) && ((mode() == PrivilegeMode::VS) || (mode() == PrivilegeMode::VU)), "Unexpected mode");
|
|
331
|
+
} else if (implemented?(ExtensionName::H) && ((mode() == PrivilegeMode::VS) || (mode() == PrivilegeMode::VU)) ) {
|
|
332
332
|
if (($bits(CSR[medeleg]) & (MXLEN'1 << $bits(exception_code))) != 0) {
|
|
333
333
|
if (($bits(CSR[hedeleg]) & (MXLEN'1 << $bits(exception_code))) != 0) {
|
|
334
334
|
return PrivilegeMode::VS;
|
|
@@ -339,6 +339,8 @@ function exception_handling_mode {
|
|
|
339
339
|
# if an exception is not delegated to HS-mode, it can't be delegated to VS-mode
|
|
340
340
|
return PrivilegeMode::M;
|
|
341
341
|
}
|
|
342
|
+
} else {
|
|
343
|
+
unreachable();
|
|
342
344
|
}
|
|
343
345
|
}
|
|
344
346
|
}
|
|
@@ -717,7 +719,7 @@ function raise_precise {
|
|
|
717
719
|
$pc = {CSR[mtvec].BASE, 2'b00};
|
|
718
720
|
CSR[mcause].INT = 1'b0;
|
|
719
721
|
CSR[mcause].CODE = $bits(exception_code);
|
|
720
|
-
if (CSR[misa].H == 1) {
|
|
722
|
+
if (implemented?(ExtensionName::H) && CSR[misa].H == 1) {
|
|
721
723
|
# write zero into mtval2 and minst
|
|
722
724
|
# (when these are non-zero values, raise_guest_page_fault should be callecd)
|
|
723
725
|
CSR[mtval2].VALUE = 0;
|
|
@@ -1179,6 +1181,7 @@ function mpv {
|
|
|
1179
1181
|
return (MXLEN == 32) ? CSR[mstatush].MPV : CSR[mstatus].MPV;
|
|
1180
1182
|
} else {
|
|
1181
1183
|
assert(false, "TODO");
|
|
1184
|
+
unreachable();
|
|
1182
1185
|
}
|
|
1183
1186
|
}
|
|
1184
1187
|
}
|
|
@@ -1196,13 +1199,13 @@ function effective_ldst_mode {
|
|
|
1196
1199
|
if (mode() == PrivilegeMode::M) {
|
|
1197
1200
|
if (CSR[misa].U == 1 && CSR[mstatus].MPRV == 1) {
|
|
1198
1201
|
if (CSR[mstatus].MPP == 0b00) {
|
|
1199
|
-
if (CSR[misa].H == 1 && mpv() == 0b1) {
|
|
1202
|
+
if (implemented?(ExtensionName::H) && CSR[misa].H == 1 && mpv() == 0b1) {
|
|
1200
1203
|
return PrivilegeMode::VU;
|
|
1201
1204
|
} else {
|
|
1202
1205
|
return PrivilegeMode::U;
|
|
1203
1206
|
}
|
|
1204
1207
|
} else if (CSR[misa].S == 1 && CSR[mstatus].MPP == 0b01) {
|
|
1205
|
-
if (CSR[misa].H == 1 && mpv() == 0b1) {
|
|
1208
|
+
if (implemented?(ExtensionName::H) && CSR[misa].H == 1 && mpv() == 0b1) {
|
|
1206
1209
|
return PrivilegeMode::VS;
|
|
1207
1210
|
} else {
|
|
1208
1211
|
return PrivilegeMode::S;
|
|
@@ -1532,7 +1535,7 @@ function translate_gstage {
|
|
|
1532
1535
|
body {
|
|
1533
1536
|
TranslationResult result;
|
|
1534
1537
|
|
|
1535
|
-
if (effective_mode == PrivilegeMode::S || effective_mode == PrivilegeMode::U) {
|
|
1538
|
+
if (!implemented?(ExtensionName::H) || effective_mode == PrivilegeMode::S || effective_mode == PrivilegeMode::U) {
|
|
1536
1539
|
# there is no gstage page walk
|
|
1537
1540
|
result.paddr = gpaddr;
|
|
1538
1541
|
return result;
|
|
@@ -1604,6 +1607,7 @@ function tinst_value_for_guest_page_fault {
|
|
|
1604
1607
|
return tinst_transform(encoding, 0); # all guest page faults are aligned
|
|
1605
1608
|
} else {
|
|
1606
1609
|
unpredictable("Custom value written into htinst/mtinst");
|
|
1610
|
+
return 0;
|
|
1607
1611
|
}
|
|
1608
1612
|
} else if (op == MemoryOperation::Write || op == MemoryOperation::ReadModifyWrite) {
|
|
1609
1613
|
if (TINST_VALUE_ON_FINAL_STORE_AMO_GUEST_PAGE_FAULT == "always zero") {
|
|
@@ -1618,6 +1622,7 @@ function tinst_value_for_guest_page_fault {
|
|
|
1618
1622
|
return tinst_transform(encoding, 0); # all guest page faults are aligned
|
|
1619
1623
|
} else {
|
|
1620
1624
|
unpredictable("Custom value written into htinst/mtinst");
|
|
1625
|
+
return 0;
|
|
1621
1626
|
}
|
|
1622
1627
|
}
|
|
1623
1628
|
} else {
|
|
@@ -1630,6 +1635,7 @@ function tinst_value_for_guest_page_fault {
|
|
|
1630
1635
|
}
|
|
1631
1636
|
}
|
|
1632
1637
|
}
|
|
1638
|
+
return 0;
|
|
1633
1639
|
}
|
|
1634
1640
|
}
|
|
1635
1641
|
|
|
@@ -1657,9 +1663,11 @@ function tinst_transform {
|
|
|
1657
1663
|
return {encoding[31:20], addr_offset, encoding[14:0]};
|
|
1658
1664
|
} else {
|
|
1659
1665
|
assert(false, "Bad transform");
|
|
1666
|
+
unreachable();
|
|
1660
1667
|
}
|
|
1661
1668
|
} else {
|
|
1662
1669
|
assert(false, "TODO: compressed instruction");
|
|
1670
|
+
unreachable();
|
|
1663
1671
|
}
|
|
1664
1672
|
}
|
|
1665
1673
|
}
|
|
@@ -1674,7 +1682,7 @@ function transformed_standard_instruction_for_tinst {
|
|
|
1674
1682
|
}
|
|
1675
1683
|
body {
|
|
1676
1684
|
assert(false, "TODO");
|
|
1677
|
-
|
|
1685
|
+
unreachable();
|
|
1678
1686
|
}
|
|
1679
1687
|
}
|
|
1680
1688
|
|
|
@@ -1788,6 +1796,7 @@ function tinst_value {
|
|
|
1788
1796
|
}
|
|
1789
1797
|
} else {
|
|
1790
1798
|
assert(false, "Unhandled exception type");
|
|
1799
|
+
unreachable();
|
|
1791
1800
|
}
|
|
1792
1801
|
}
|
|
1793
1802
|
}
|
|
@@ -1973,6 +1982,7 @@ function gstage_page_walk {
|
|
|
1973
1982
|
success = atomic_check_then_write_64(pte_paddr, pte, updated_pte);
|
|
1974
1983
|
} else {
|
|
1975
1984
|
assert(false, "Unexpected PTESIZE");
|
|
1985
|
+
unreachable();
|
|
1976
1986
|
}
|
|
1977
1987
|
|
|
1978
1988
|
|
|
@@ -2023,6 +2033,7 @@ function gstage_page_walk {
|
|
|
2023
2033
|
ppn = pte[PA_SIZE-3:10] << 12;
|
|
2024
2034
|
}
|
|
2025
2035
|
}
|
|
2036
|
+
unreachable();
|
|
2026
2037
|
}
|
|
2027
2038
|
}
|
|
2028
2039
|
|
|
@@ -2297,6 +2308,7 @@ function stage1_page_walk {
|
|
|
2297
2308
|
success = atomic_check_then_write_64(pte_phys.paddr, pte, updated_pte);
|
|
2298
2309
|
} else {
|
|
2299
2310
|
assert(false, "Unexpected PTESIZE");
|
|
2311
|
+
unreachable();
|
|
2300
2312
|
}
|
|
2301
2313
|
|
|
2302
2314
|
|
|
@@ -2369,6 +2381,7 @@ function stage1_page_walk {
|
|
|
2369
2381
|
ppn = pte[PA_SIZE-3:10];
|
|
2370
2382
|
}
|
|
2371
2383
|
}
|
|
2384
|
+
unreachable();
|
|
2372
2385
|
}
|
|
2373
2386
|
}
|
|
2374
2387
|
|
|
@@ -2450,6 +2463,7 @@ function translate {
|
|
|
2450
2463
|
result = stage1_page_walk(57, 56, 64, 5, vaddr, op, effective_mode, encoding);
|
|
2451
2464
|
} else {
|
|
2452
2465
|
assert(false, "Unexpected SatpMode");
|
|
2466
|
+
unreachable();
|
|
2453
2467
|
}
|
|
2454
2468
|
|
|
2455
2469
|
maybe_cache_translation(vaddr, op, result);
|
|
@@ -2495,6 +2509,7 @@ function canonical_vaddr? {
|
|
|
2495
2509
|
} else if ((MXLEN == 64) && satp_mode == SatpMode::Sv57) {
|
|
2496
2510
|
return eaddr[63:57] == {6{eaddr[56]}};
|
|
2497
2511
|
}
|
|
2512
|
+
return false;
|
|
2498
2513
|
}
|
|
2499
2514
|
}
|
|
2500
2515
|
|
|
@@ -2521,6 +2536,7 @@ function canonical_gpaddr? {
|
|
|
2521
2536
|
} else if ((MXLEN > 32) && (satp_mode == SatpMode::Sv57)) {
|
|
2522
2537
|
return gpaddr[63:57] == {6{gpaddr[56]}};
|
|
2523
2538
|
}
|
|
2539
|
+
return false;
|
|
2524
2540
|
}
|
|
2525
2541
|
}
|
|
2526
2542
|
|
|
@@ -2562,9 +2578,15 @@ function read_memory_aligned {
|
|
|
2562
2578
|
arguments
|
|
2563
2579
|
U32 LEN,
|
|
2564
2580
|
XReg virtual_address,
|
|
2565
|
-
Bits<INSTR_ENC_SIZE> encoding
|
|
2581
|
+
Bits<INSTR_ENC_SIZE> encoding, # the encoding of an instruction causing this access
|
|
2582
|
+
Bits<1> aq, # acquire semantics? 0=no, 1=yes
|
|
2583
|
+
Bits<1> rl # release semantics? 0=no, 1=yes
|
|
2566
2584
|
description {
|
|
2567
2585
|
Read from virtual memory using a known aligned address.
|
|
2586
|
+
|
|
2587
|
+
If +rl+ is 1, then the load also acts as a memory model release (applied after all
|
|
2588
|
+
checks pass but before the physical read).
|
|
2589
|
+
If +aq+ is 1, then the load also acts as a memory model acquire (applied after the read).
|
|
2568
2590
|
}
|
|
2569
2591
|
body {
|
|
2570
2592
|
TranslationResult result;
|
|
@@ -2578,7 +2600,17 @@ function read_memory_aligned {
|
|
|
2578
2600
|
# may raise an exception
|
|
2579
2601
|
access_check(result.paddr, LEN, virtual_address, MemoryOperation::Read, ExceptionCode::LoadAccessFault, effective_ldst_mode());
|
|
2580
2602
|
|
|
2581
|
-
|
|
2603
|
+
if (rl == 1'b1) {
|
|
2604
|
+
memory_model_release();
|
|
2605
|
+
}
|
|
2606
|
+
|
|
2607
|
+
XReg value = read_physical_memory(LEN, result.paddr);
|
|
2608
|
+
|
|
2609
|
+
if (aq == 1'b1) {
|
|
2610
|
+
memory_model_acquire();
|
|
2611
|
+
}
|
|
2612
|
+
|
|
2613
|
+
return value;
|
|
2582
2614
|
}
|
|
2583
2615
|
}
|
|
2584
2616
|
|
|
@@ -2597,7 +2629,7 @@ function read_memory {
|
|
|
2597
2629
|
XReg physical_address;
|
|
2598
2630
|
|
|
2599
2631
|
if (aligned) {
|
|
2600
|
-
return read_memory_aligned(LEN, virtual_address, encoding);
|
|
2632
|
+
return read_memory_aligned(LEN, virtual_address, encoding, 1'b0, 1'b0);
|
|
2601
2633
|
}
|
|
2602
2634
|
|
|
2603
2635
|
# access isn't naturally aligned, but it still might be atomic if this hart supports
|
|
@@ -2636,13 +2668,15 @@ function read_memory {
|
|
|
2636
2668
|
if (MISALIGNED_SPLIT_STRATEGY == "sequential_bytes") {
|
|
2637
2669
|
XReg result = 0;
|
|
2638
2670
|
for (U32 I = 0; I < (LEN/8); I++) {
|
|
2639
|
-
result = result | (read_memory_aligned(8, virtual_address + I, encoding) `<< (8*I));
|
|
2671
|
+
result = result | (read_memory_aligned(8, virtual_address + I, encoding, 1'b0, 1'b0) `<< (8*I));
|
|
2640
2672
|
}
|
|
2641
2673
|
return result;
|
|
2642
2674
|
} else if (MISALIGNED_SPLIT_STRATEGY == "custom") {
|
|
2643
2675
|
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");
|
|
2676
|
+
return 0;
|
|
2644
2677
|
}
|
|
2645
2678
|
}
|
|
2679
|
+
return 0;
|
|
2646
2680
|
}
|
|
2647
2681
|
}
|
|
2648
2682
|
|
|
@@ -2759,6 +2793,7 @@ function register_reservation_set {
|
|
|
2759
2793
|
unpredictable("Implementations may set reservation sets of any size, as long as they cover the reserved accessed");
|
|
2760
2794
|
} else {
|
|
2761
2795
|
assert(false, "Unexpected LRSC_RESERVATION_STRATEGY");
|
|
2796
|
+
unreachable();
|
|
2762
2797
|
}
|
|
2763
2798
|
}
|
|
2764
2799
|
}
|
|
@@ -2805,7 +2840,7 @@ function load_reserved {
|
|
|
2805
2840
|
reservation_virtual_address = virtual_address;
|
|
2806
2841
|
}
|
|
2807
2842
|
|
|
2808
|
-
return read_memory_aligned(N, physical_address, encoding);
|
|
2843
|
+
return read_memory_aligned(N, physical_address, encoding, 1'b0, 1'b0);
|
|
2809
2844
|
}
|
|
2810
2845
|
}
|
|
2811
2846
|
|
|
@@ -2915,12 +2950,14 @@ function amo {
|
|
|
2915
2950
|
# PMA Atomicity checks
|
|
2916
2951
|
if (pma_applies?(PmaAttribute::AmoNone, physical_address, N)) {
|
|
2917
2952
|
raise(ExceptionCode::StoreAmoAccessFault, mode(), virtual_address);
|
|
2918
|
-
} else if (((op == AmoOperation::Add || op == AmoOperation::Max || op == AmoOperation::Maxu || op == AmoOperation::Min || op == AmoOperation::Minu))
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2922
|
-
|
|
2923
|
-
|
|
2953
|
+
} else if (((op == AmoOperation::Add || op == AmoOperation::Max || op == AmoOperation::Maxu || op == AmoOperation::Min || op == AmoOperation::Minu))) {
|
|
2954
|
+
if (!pma_applies?(PmaAttribute::AmoArithmetic, physical_address, N)) {
|
|
2955
|
+
raise(ExceptionCode::StoreAmoAccessFault, mode(), virtual_address);
|
|
2956
|
+
}
|
|
2957
|
+
} else if (((op == AmoOperation::And || op == AmoOperation::Or || op == AmoOperation::Xor))) {
|
|
2958
|
+
if (!pma_applies?(PmaAttribute::AmoLogical, physical_address, N)) {
|
|
2959
|
+
raise(ExceptionCode::StoreAmoAccessFault, mode(), virtual_address);
|
|
2960
|
+
}
|
|
2924
2961
|
} else {
|
|
2925
2962
|
assert(
|
|
2926
2963
|
pma_applies?(PmaAttribute::AmoSwap, physical_address, N) &&
|
|
@@ -2951,9 +2988,15 @@ function write_memory_aligned {
|
|
|
2951
2988
|
U32 LEN,
|
|
2952
2989
|
XReg virtual_address,
|
|
2953
2990
|
XReg value,
|
|
2954
|
-
Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
|
|
2991
|
+
Bits<INSTR_ENC_SIZE> encoding, # encoding of the instruction causing this access
|
|
2992
|
+
Bits<1> aq, # acquire semantics? 0=no, 1=yes
|
|
2993
|
+
Bits<1> rl # release semantics? 0=no, 1=yes
|
|
2955
2994
|
description {
|
|
2956
2995
|
Write to virtual memory using a known aligned address.
|
|
2996
|
+
|
|
2997
|
+
If +rl+ is 1, then the store also acts as a memory model release (applied after all
|
|
2998
|
+
checks pass but before the physical write).
|
|
2999
|
+
If +aq+ is 1, then the store also acts as a memory model acquire.
|
|
2957
3000
|
}
|
|
2958
3001
|
body {
|
|
2959
3002
|
XReg physical_address;
|
|
@@ -2965,7 +3008,15 @@ function write_memory_aligned {
|
|
|
2965
3008
|
# may raise an exception
|
|
2966
3009
|
access_check(physical_address, LEN, virtual_address, MemoryOperation::Write, ExceptionCode::StoreAmoAccessFault, effective_ldst_mode());
|
|
2967
3010
|
|
|
3011
|
+
if (rl == 1'b1) {
|
|
3012
|
+
memory_model_release();
|
|
3013
|
+
}
|
|
3014
|
+
|
|
2968
3015
|
write_physical_memory(LEN, physical_address, value);
|
|
3016
|
+
|
|
3017
|
+
if (aq == 1'b1) {
|
|
3018
|
+
memory_model_acquire();
|
|
3019
|
+
}
|
|
2969
3020
|
}
|
|
2970
3021
|
}
|
|
2971
3022
|
|
|
@@ -2983,7 +3034,7 @@ function write_memory {
|
|
|
2983
3034
|
XReg physical_address;
|
|
2984
3035
|
|
|
2985
3036
|
if (aligned) {
|
|
2986
|
-
write_memory_aligned(LEN, virtual_address, value, encoding);
|
|
3037
|
+
write_memory_aligned(LEN, virtual_address, value, encoding, 1'b0, 1'b0);
|
|
2987
3038
|
return;
|
|
2988
3039
|
}
|
|
2989
3040
|
|
|
@@ -3022,7 +3073,7 @@ function write_memory {
|
|
|
3022
3073
|
# misaligned, must break into multiple reads
|
|
3023
3074
|
if (MISALIGNED_SPLIT_STRATEGY == "sequential_bytes") {
|
|
3024
3075
|
for (U32 I = 0; I < (LEN/8); I++) {
|
|
3025
|
-
write_memory_aligned(8, virtual_address + I, (value >> (8*I))[7:0], encoding);
|
|
3076
|
+
write_memory_aligned(8, virtual_address + I, (value >> (8*I))[7:0], encoding, 1'b0, 1'b0);
|
|
3026
3077
|
}
|
|
3027
3078
|
} else if (MISALIGNED_SPLIT_STRATEGY == "custom") {
|
|
3028
3079
|
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");
|
|
@@ -11,8 +11,7 @@
|
|
|
11
11
|
# - integer arith (vadd/vsub/vrsub(.vv,.vx,.vi), compare, min, max)
|
|
12
12
|
# - integer widening arith ()
|
|
13
13
|
|
|
14
|
-
# the vector register file
|
|
15
|
-
Bits<128> v[32];
|
|
14
|
+
# the vector register file is populated by the symtab from V.yaml
|
|
16
15
|
|
|
17
16
|
enum VectorLmulType {
|
|
18
17
|
Divide
|
|
@@ -85,7 +85,7 @@ volumes:
|
|
|
85
85
|
- { name: Zicond, version: "1.0.0" }
|
|
86
86
|
- { name: M, version: "2.0.0" }
|
|
87
87
|
- { name: A, version: "2.1.0" }
|
|
88
|
-
- { name: Zawrs, version: "1.0
|
|
88
|
+
- { name: Zawrs, version: "1.0" }
|
|
89
89
|
- { name: Zacas, version: "1.0.0" }
|
|
90
90
|
- { name: Zabha, version: "1.0.0" }
|
|
91
91
|
# - { name: RVWMO, version: "2.0" }
|
|
@@ -207,10 +207,10 @@ volumes:
|
|
|
207
207
|
- { name: Smcdeleg, version: "1.0.0" }
|
|
208
208
|
- { name: S, version: "1.12.0" }
|
|
209
209
|
- { name: Sm, version: "1.12.0" }
|
|
210
|
-
- { name: Sv32, version: "1.
|
|
211
|
-
- { name: Sv39, version: "1.
|
|
212
|
-
- { name: Sv48, version: "1.
|
|
213
|
-
- { name: Sv57, version: "1.
|
|
210
|
+
- { name: Sv32, version: "1.0" }
|
|
211
|
+
- { name: Sv39, version: "1.0" }
|
|
212
|
+
- { name: Sv48, version: "1.0" }
|
|
213
|
+
- { name: Sv57, version: "1.0" }
|
|
214
214
|
- { name: Svnapot, version: "1.0.0" }
|
|
215
215
|
- { name: Svpbmt, version: "1.0.0" }
|
|
216
216
|
- { name: Svinval, version: "1.0.0" }
|
|
@@ -26,5 +26,11 @@ schema:
|
|
|
26
26
|
maxItems: 32
|
|
27
27
|
minItems: 32
|
|
28
28
|
definedBy:
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
allOf:
|
|
30
|
+
- extension:
|
|
31
|
+
name: Sm
|
|
32
|
+
- param:
|
|
33
|
+
name: MCOUNTINHIBIT_IMPLEMENTED
|
|
34
|
+
equal: true
|
|
35
|
+
reason: |
|
|
36
|
+
`COUNTINHIBIT_EN` only has effect when the `mcountinhibit` CSR is implemented.
|
|
@@ -23,6 +23,6 @@ schema:
|
|
|
23
23
|
maximum: 0x7ffffffffffffff # 58 bits
|
|
24
24
|
requirements:
|
|
25
25
|
idl(): |
|
|
26
|
-
MXLEN == 32 -> JVT_BASE_MASK
|
|
26
|
+
MXLEN == 32 -> JVT_BASE_MASK <= 0xffff_ffc0;
|
|
27
27
|
reason: |
|
|
28
28
|
Includes the implicitly-zero bits of jvt.BASE, so JVT_BASE_MASK[5:0] must always be 0.
|
|
@@ -0,0 +1,25 @@
|
|
|
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: MCOUNTINHIBIT_IMPLEMENTED
|
|
9
|
+
long_name: |
|
|
10
|
+
Whether or not the `mcountinhibit` CSR is implemented
|
|
11
|
+
description: |
|
|
12
|
+
Options:
|
|
13
|
+
|
|
14
|
+
true::
|
|
15
|
+
The `mcountinhibit` CSR is implemented and can be accessed in M-mode.
|
|
16
|
+
|
|
17
|
+
false::
|
|
18
|
+
The `mcountinhibit` CSR is not implemented.
|
|
19
|
+
Accessing the CSR will cause an IllegalInstruction trap or enter an unpredictable state,
|
|
20
|
+
depending on TRAP_ON_UNIMPLEMENTED_CSR.
|
|
21
|
+
schema:
|
|
22
|
+
type: boolean
|
|
23
|
+
definedBy:
|
|
24
|
+
extension:
|
|
25
|
+
name: Sm
|
|
@@ -30,6 +30,13 @@ schema:
|
|
|
30
30
|
maxItems: 2
|
|
31
31
|
uniqueItems: true
|
|
32
32
|
requirements:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
# If `mtvec` is read-only, the mode cannot be changed.
|
|
34
|
+
if:
|
|
35
|
+
param:
|
|
36
|
+
name: MTVEC_ACCESS
|
|
37
|
+
equal: ro
|
|
38
|
+
then:
|
|
39
|
+
param:
|
|
40
|
+
name: MTVEC_MODES
|
|
41
|
+
size: true
|
|
42
|
+
equal: 1
|
|
@@ -7,36 +7,25 @@ $schema: param_schema.json#
|
|
|
7
7
|
kind: parameter
|
|
8
8
|
name: NUM_PMP_ENTRIES
|
|
9
9
|
description: |
|
|
10
|
-
Number of implemented PMP entries.
|
|
10
|
+
Number of implemented PMP entries.
|
|
11
11
|
|
|
12
12
|
The architecture mandates that the number of implemented PMP registers
|
|
13
|
-
must appear to be 0, 16, or 64.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
!===
|
|
19
|
-
! NUM_PMP_ENTRIES ! pmpaddr<0-15> / pmpcfg<0-3> ! pmpaddr<16-63> / pmpcfg<4-15>
|
|
20
|
-
! 0 ! N ! N
|
|
21
|
-
! 1-16 ! Y ! N
|
|
22
|
-
! 17-64 ! Y ! Y
|
|
23
|
-
!===
|
|
24
|
-
|
|
25
|
-
** N = Not implemented; access will cause `IllegalInstruction`
|
|
26
|
-
if TRAP_ON_UNIMPLEMENTED_CSR is true
|
|
27
|
-
** Y = Implemented; access will not cause an exception (from M-mode), but register
|
|
28
|
-
may be read-only-zero if NUM_PMP_ENTRIES is less than the corresponding register
|
|
13
|
+
must appear to be 0, 16, or 64, so NUM_PMP_ENTRIES must be one of those values.
|
|
14
|
+
It directly determines which PMP registers exist: `pmpaddr0`-`pmpaddr<N-1>`
|
|
15
|
+
and their corresponding `pmpNcfg` fields are implemented, and the rest are
|
|
16
|
+
not. Accessing an unimplemented PMP register causes an `IllegalInstruction`
|
|
17
|
+
when TRAP_ON_UNIMPLEMENTED_CSR is true.
|
|
29
18
|
|
|
30
19
|
[NOTE]
|
|
31
|
-
`pmpcfgN` for an odd N never exists when XLEN == 64
|
|
20
|
+
`pmpcfgN` for an odd N never exists when XLEN == 64.
|
|
32
21
|
|
|
33
|
-
|
|
34
|
-
|
|
22
|
+
An implemented entry may still be read-only zero (but will never cause an exception).
|
|
23
|
+
The number of entries that are actually usable is given by
|
|
24
|
+
NUM_USABLE_PMP_ENTRIES.
|
|
35
25
|
long_name: TODO
|
|
36
26
|
schema:
|
|
37
27
|
type: integer
|
|
38
|
-
|
|
39
|
-
maximum: 64
|
|
28
|
+
enum: [0, 16, 64]
|
|
40
29
|
definedBy:
|
|
41
30
|
extension:
|
|
42
31
|
name: Sm
|
|
@@ -0,0 +1,35 @@
|
|
|
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: NUM_USABLE_PMP_ENTRIES
|
|
9
|
+
description: |
|
|
10
|
+
Number of implemented PMP entries that are actually usable.
|
|
11
|
+
|
|
12
|
+
An implementation may implement PMP entries (NUM_PMP_ENTRIES) but hardwire
|
|
13
|
+
some of them to zero (read-only zero). Such entries exist -- their
|
|
14
|
+
`pmpaddrN`/`pmpNcfg` registers are accessible and will not cause an exception
|
|
15
|
+
from M-mode -- but they cannot be configured to guard a region.
|
|
16
|
+
|
|
17
|
+
NUM_USABLE_PMP_ENTRIES gives the number of low-numbered entries that are
|
|
18
|
+
writable/usable. Entries `0` through `NUM_USABLE_PMP_ENTRIES-1` are usable;
|
|
19
|
+
entries `NUM_USABLE_PMP_ENTRIES` through `NUM_PMP_ENTRIES-1` are read-only
|
|
20
|
+
zero.
|
|
21
|
+
|
|
22
|
+
Must be between 0 and NUM_PMP_ENTRIES, inclusive.
|
|
23
|
+
long_name: TODO
|
|
24
|
+
schema:
|
|
25
|
+
type: integer
|
|
26
|
+
minimum: 0
|
|
27
|
+
maximum: 64
|
|
28
|
+
definedBy:
|
|
29
|
+
param:
|
|
30
|
+
name: NUM_PMP_ENTRIES
|
|
31
|
+
greaterThan: 0
|
|
32
|
+
requirements:
|
|
33
|
+
idl(): |
|
|
34
|
+
NUM_PMP_ENTRIES == 16 -> NUM_USABLE_PMP_ENTRIES <= 16;
|
|
35
|
+
reason: Usable PMP entries cannot exceed the number of implemented PMP entries
|
|
@@ -0,0 +1,23 @@
|
|
|
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: PMP_NA4_SUPPORTED
|
|
9
|
+
description: |
|
|
10
|
+
Whether or not the Naturally Aligned four-byte (NA4) PMP address matching
|
|
11
|
+
mode is supported.
|
|
12
|
+
|
|
13
|
+
long_name: PMP NA4 mode supported
|
|
14
|
+
schema:
|
|
15
|
+
type: boolean
|
|
16
|
+
definedBy:
|
|
17
|
+
param:
|
|
18
|
+
name: NUM_PMP_ENTRIES
|
|
19
|
+
greaterThan: 0
|
|
20
|
+
requirements:
|
|
21
|
+
idl(): |
|
|
22
|
+
PMP_NA4_SUPPORTED -> (PMP_GRANULARITY == 2);
|
|
23
|
+
reason: NA4 is not valid when the PMP granularity is larger than 4 bytes
|
|
@@ -0,0 +1,19 @@
|
|
|
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: PMP_NAPOT_SUPPORTED
|
|
9
|
+
description: |
|
|
10
|
+
Whether or not the Naturally Aligned Power-Of-Two (NAPOT) PMP address
|
|
11
|
+
matching mode is supported.
|
|
12
|
+
|
|
13
|
+
long_name: PMP NAPOT mode supported
|
|
14
|
+
schema:
|
|
15
|
+
type: boolean
|
|
16
|
+
definedBy:
|
|
17
|
+
param:
|
|
18
|
+
name: NUM_PMP_ENTRIES
|
|
19
|
+
greaterThan: 0
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
$schema: param_schema.json#
|
|
7
7
|
kind: parameter
|
|
8
|
-
name:
|
|
8
|
+
name: PMP_TOR_SUPPORTED
|
|
9
9
|
description: |
|
|
10
|
-
Whether or not
|
|
10
|
+
Whether or not the Top-of-Range (TOR) PMP address matching mode is supported.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
long_name: TODO
|
|
12
|
+
long_name: PMP TOR mode supported
|
|
14
13
|
schema:
|
|
15
14
|
type: boolean
|
|
16
15
|
definedBy:
|
|
17
|
-
|
|
18
|
-
name:
|
|
16
|
+
param:
|
|
17
|
+
name: NUM_PMP_ENTRIES
|
|
18
|
+
greaterThan: 0
|