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.
Files changed (414) hide show
  1. checksums.yaml +4 -4
  2. data/.data/cfgs/example_rv64_with_overlay.yaml +20 -20
  3. data/.data/cfgs/mc100-32-full-example.yaml +1 -0
  4. data/.data/cfgs/profile/README.adoc +10 -0
  5. data/.data/cfgs/profile/RVA20S64.yaml +26 -6
  6. data/.data/cfgs/profile/RVA20U64.yaml +18 -4
  7. data/.data/cfgs/profile/RVA22S64.yaml +27 -7
  8. data/.data/cfgs/profile/RVA22U64.yaml +18 -4
  9. data/.data/cfgs/profile/RVA23S64.yaml +61 -7
  10. data/.data/cfgs/profile/RVA23U64.yaml +36 -4
  11. data/.data/cfgs/profile/RVB23S64.yaml +27 -7
  12. data/.data/cfgs/profile/RVB23U64.yaml +18 -4
  13. data/.data/cfgs/profile/RVI20U32.yaml +10 -4
  14. data/.data/cfgs/profile/RVI20U64.yaml +10 -4
  15. data/.data/cfgs/qc_iu.yaml +8 -1
  16. data/.data/cfgs/rv32-riscv-tests.yaml +6 -2
  17. data/.data/cfgs/rv32-vector.yaml +6 -2
  18. data/.data/cfgs/rv64-riscv-tests.yaml +6 -2
  19. data/.data/cfgs/rv64-vector.yaml +6 -2
  20. data/.data/spec/custom/isa/qc_iu/csr/Smrnmi/mnepc.yaml +17 -0
  21. data/.data/spec/custom/isa/qc_iu/csr/Xqccmi/qc.itba.yaml +45 -0
  22. data/.data/spec/custom/isa/qc_iu/csr/Xqccmi/qc.itdec.yaml +39 -0
  23. data/.data/spec/custom/isa/qc_iu/csr/jvt.yaml +11 -0
  24. data/.data/spec/custom/isa/qc_iu/csr/mepc.yaml +16 -0
  25. data/.data/spec/custom/isa/qc_iu/ext/Xqccmi.yaml +290 -0
  26. data/.data/spec/custom/isa/qc_iu/ext/Xqccmt.yaml +127 -0
  27. data/.data/spec/custom/isa/qc_iu/inst/Xqccmi/qc.cm.ilut.yaml +136 -0
  28. data/.data/spec/custom/isa/qc_iu/inst/Xqccmt/qc.cm.jalt.yaml +84 -0
  29. data/.data/spec/custom/isa/qc_iu/inst/Xqccmt/qc.cm.jt.yaml +60 -0
  30. data/.data/spec/custom/isa/qc_iu/isa/globals.isa +134 -0
  31. data/.data/spec/schemas/config_schema.json +220 -27
  32. data/.data/spec/schemas/csr_schema.json +0 -6
  33. data/.data/spec/schemas/ext_schema.json +80 -24
  34. data/.data/spec/schemas/inst_schema.json +0 -3
  35. data/.data/spec/schemas/mmr_schema.json +3 -3
  36. data/.data/spec/schemas/profile_release_schema.json +1 -1
  37. data/.data/spec/schemas/profile_schema.json +0 -3
  38. data/.data/spec/schemas/register_file_schema.json +8 -3
  39. data/.data/spec/schemas/schema_defs.json +13 -27
  40. data/.data/spec/std/isa/csr/H/henvcfg.yaml +25 -0
  41. data/.data/spec/std/isa/csr/I/pmpaddr0.yaml +6 -4
  42. data/.data/spec/std/isa/csr/I/pmpaddr1.yaml +6 -4
  43. data/.data/spec/std/isa/csr/I/pmpaddr10.yaml +6 -4
  44. data/.data/spec/std/isa/csr/I/pmpaddr11.yaml +6 -4
  45. data/.data/spec/std/isa/csr/I/pmpaddr12.yaml +6 -4
  46. data/.data/spec/std/isa/csr/I/pmpaddr13.yaml +6 -4
  47. data/.data/spec/std/isa/csr/I/pmpaddr14.yaml +6 -4
  48. data/.data/spec/std/isa/csr/I/pmpaddr15.yaml +6 -4
  49. data/.data/spec/std/isa/csr/I/pmpaddr16.yaml +6 -4
  50. data/.data/spec/std/isa/csr/I/pmpaddr17.yaml +6 -4
  51. data/.data/spec/std/isa/csr/I/pmpaddr18.yaml +6 -4
  52. data/.data/spec/std/isa/csr/I/pmpaddr19.yaml +6 -4
  53. data/.data/spec/std/isa/csr/I/pmpaddr2.yaml +6 -4
  54. data/.data/spec/std/isa/csr/I/pmpaddr20.yaml +6 -4
  55. data/.data/spec/std/isa/csr/I/pmpaddr21.yaml +6 -4
  56. data/.data/spec/std/isa/csr/I/pmpaddr22.yaml +6 -4
  57. data/.data/spec/std/isa/csr/I/pmpaddr23.yaml +6 -4
  58. data/.data/spec/std/isa/csr/I/pmpaddr24.yaml +6 -4
  59. data/.data/spec/std/isa/csr/I/pmpaddr25.yaml +6 -4
  60. data/.data/spec/std/isa/csr/I/pmpaddr26.yaml +6 -4
  61. data/.data/spec/std/isa/csr/I/pmpaddr27.yaml +6 -4
  62. data/.data/spec/std/isa/csr/I/pmpaddr28.yaml +6 -4
  63. data/.data/spec/std/isa/csr/I/pmpaddr29.yaml +6 -4
  64. data/.data/spec/std/isa/csr/I/pmpaddr3.yaml +6 -4
  65. data/.data/spec/std/isa/csr/I/pmpaddr30.yaml +6 -4
  66. data/.data/spec/std/isa/csr/I/pmpaddr31.yaml +6 -4
  67. data/.data/spec/std/isa/csr/I/pmpaddr32.yaml +6 -4
  68. data/.data/spec/std/isa/csr/I/pmpaddr33.yaml +6 -4
  69. data/.data/spec/std/isa/csr/I/pmpaddr34.yaml +6 -4
  70. data/.data/spec/std/isa/csr/I/pmpaddr35.yaml +6 -4
  71. data/.data/spec/std/isa/csr/I/pmpaddr36.yaml +6 -4
  72. data/.data/spec/std/isa/csr/I/pmpaddr37.yaml +6 -4
  73. data/.data/spec/std/isa/csr/I/pmpaddr38.yaml +6 -4
  74. data/.data/spec/std/isa/csr/I/pmpaddr39.yaml +6 -4
  75. data/.data/spec/std/isa/csr/I/pmpaddr4.yaml +6 -4
  76. data/.data/spec/std/isa/csr/I/pmpaddr40.yaml +6 -4
  77. data/.data/spec/std/isa/csr/I/pmpaddr41.yaml +6 -4
  78. data/.data/spec/std/isa/csr/I/pmpaddr42.yaml +6 -4
  79. data/.data/spec/std/isa/csr/I/pmpaddr43.yaml +6 -4
  80. data/.data/spec/std/isa/csr/I/pmpaddr44.yaml +6 -4
  81. data/.data/spec/std/isa/csr/I/pmpaddr45.yaml +6 -4
  82. data/.data/spec/std/isa/csr/I/pmpaddr46.yaml +6 -4
  83. data/.data/spec/std/isa/csr/I/pmpaddr47.yaml +6 -4
  84. data/.data/spec/std/isa/csr/I/pmpaddr48.yaml +6 -4
  85. data/.data/spec/std/isa/csr/I/pmpaddr49.yaml +6 -4
  86. data/.data/spec/std/isa/csr/I/pmpaddr5.yaml +6 -4
  87. data/.data/spec/std/isa/csr/I/pmpaddr50.yaml +6 -4
  88. data/.data/spec/std/isa/csr/I/pmpaddr51.yaml +6 -4
  89. data/.data/spec/std/isa/csr/I/pmpaddr52.yaml +6 -4
  90. data/.data/spec/std/isa/csr/I/pmpaddr53.yaml +6 -4
  91. data/.data/spec/std/isa/csr/I/pmpaddr54.yaml +6 -4
  92. data/.data/spec/std/isa/csr/I/pmpaddr55.yaml +6 -4
  93. data/.data/spec/std/isa/csr/I/pmpaddr56.yaml +6 -4
  94. data/.data/spec/std/isa/csr/I/pmpaddr57.yaml +6 -4
  95. data/.data/spec/std/isa/csr/I/pmpaddr58.yaml +6 -4
  96. data/.data/spec/std/isa/csr/I/pmpaddr59.yaml +6 -4
  97. data/.data/spec/std/isa/csr/I/pmpaddr6.yaml +6 -4
  98. data/.data/spec/std/isa/csr/I/pmpaddr60.yaml +6 -4
  99. data/.data/spec/std/isa/csr/I/pmpaddr61.yaml +6 -4
  100. data/.data/spec/std/isa/csr/I/pmpaddr62.yaml +6 -4
  101. data/.data/spec/std/isa/csr/I/pmpaddr63.yaml +6 -4
  102. data/.data/spec/std/isa/csr/I/pmpaddr7.yaml +6 -4
  103. data/.data/spec/std/isa/csr/I/pmpaddr8.yaml +6 -4
  104. data/.data/spec/std/isa/csr/I/pmpaddr9.yaml +6 -4
  105. data/.data/spec/std/isa/csr/I/pmpaddrN.layout +6 -4
  106. data/.data/spec/std/isa/csr/I/pmpcfg0.yaml +128 -152
  107. data/.data/spec/std/isa/csr/I/pmpcfg1.yaml +64 -76
  108. data/.data/spec/std/isa/csr/I/pmpcfg10.yaml +128 -152
  109. data/.data/spec/std/isa/csr/I/pmpcfg11.yaml +64 -76
  110. data/.data/spec/std/isa/csr/I/pmpcfg12.yaml +128 -152
  111. data/.data/spec/std/isa/csr/I/pmpcfg13.yaml +64 -76
  112. data/.data/spec/std/isa/csr/I/pmpcfg14.yaml +128 -152
  113. data/.data/spec/std/isa/csr/I/pmpcfg15.yaml +64 -76
  114. data/.data/spec/std/isa/csr/I/pmpcfg2.yaml +128 -152
  115. data/.data/spec/std/isa/csr/I/pmpcfg3.yaml +64 -76
  116. data/.data/spec/std/isa/csr/I/pmpcfg4.yaml +128 -152
  117. data/.data/spec/std/isa/csr/I/pmpcfg5.yaml +64 -76
  118. data/.data/spec/std/isa/csr/I/pmpcfg6.yaml +128 -152
  119. data/.data/spec/std/isa/csr/I/pmpcfg7.yaml +64 -76
  120. data/.data/spec/std/isa/csr/I/pmpcfg8.yaml +128 -152
  121. data/.data/spec/std/isa/csr/I/pmpcfg9.yaml +64 -76
  122. data/.data/spec/std/isa/csr/I/pmpcfgN.layout +16 -19
  123. data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.layout +6 -2
  124. data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.yaml +6 -2
  125. data/.data/spec/std/isa/csr/hstatus.yaml +16 -0
  126. data/.data/spec/std/isa/csr/jvt.yaml +1 -0
  127. data/.data/spec/std/isa/csr/mcycleh.yaml +1 -1
  128. data/.data/spec/std/isa/csr/menvcfg.yaml +20 -0
  129. data/.data/spec/std/isa/csr/misa.yaml +0 -12
  130. data/.data/spec/std/isa/csr/mstatus.yaml +46 -6
  131. data/.data/spec/std/isa/csr/mstatush.yaml +17 -15
  132. data/.data/spec/std/isa/csr/senvcfg.yaml +42 -0
  133. data/.data/spec/std/isa/csr/sstatus.yaml +12 -0
  134. data/.data/spec/std/isa/csr/vsstatus.yaml +24 -0
  135. data/.data/spec/std/isa/ext/A.yaml +5 -7
  136. data/.data/spec/std/isa/ext/S.yaml +12 -0
  137. data/.data/spec/std/isa/ext/Smpmpmt.yaml +52 -0
  138. data/.data/spec/std/isa/ext/Sv32.yaml +7 -19
  139. data/.data/spec/std/isa/ext/Sv39.yaml +7 -19
  140. data/.data/spec/std/isa/ext/Sv48.yaml +4 -20
  141. data/.data/spec/std/isa/ext/Sv57.yaml +4 -20
  142. data/.data/spec/std/isa/ext/Svukte.yaml +71 -0
  143. data/.data/spec/std/isa/ext/Zawrs.yaml +1 -1
  144. data/.data/spec/std/isa/ext/Zihpm.yaml +0 -12
  145. data/.data/spec/std/isa/inst/B/andn.yaml +10 -12
  146. data/.data/spec/std/isa/inst/B/clmul.yaml +9 -11
  147. data/.data/spec/std/isa/inst/B/clmulh.yaml +9 -11
  148. data/.data/spec/std/isa/inst/B/orn.yaml +9 -11
  149. data/.data/spec/std/isa/inst/B/rev8.yaml +1 -1
  150. data/.data/spec/std/isa/inst/B/rol.yaml +9 -11
  151. data/.data/spec/std/isa/inst/B/rolw.yaml +9 -11
  152. data/.data/spec/std/isa/inst/B/ror.yaml +9 -11
  153. data/.data/spec/std/isa/inst/B/rorw.yaml +9 -11
  154. data/.data/spec/std/isa/inst/B/xnor.yaml +9 -11
  155. data/.data/spec/std/isa/inst/C/c.addi.yaml +1 -0
  156. data/.data/spec/std/isa/inst/C/c.addi16sp.yaml +1 -0
  157. data/.data/spec/std/isa/inst/C/c.addiw.yaml +1 -0
  158. data/.data/spec/std/isa/inst/C/c.andi.yaml +1 -0
  159. data/.data/spec/std/isa/inst/C/c.ldsp.yaml +4 -4
  160. data/.data/spec/std/isa/inst/C/c.li.yaml +1 -0
  161. data/.data/spec/std/isa/inst/C/c.lui.yaml +1 -0
  162. data/.data/spec/std/isa/inst/C/c.mv.yaml +1 -1
  163. data/.data/spec/std/isa/inst/C/c.sdsp.yaml +1 -1
  164. data/.data/spec/std/isa/inst/D/fsgnj.d.yaml +3 -0
  165. data/.data/spec/std/isa/inst/D/fsgnjn.d.yaml +3 -0
  166. data/.data/spec/std/isa/inst/D/fsgnjx.d.yaml +3 -0
  167. data/.data/spec/std/isa/inst/F/fadd.s.yaml +5 -5
  168. data/.data/spec/std/isa/inst/F/fclass.s.yaml +2 -2
  169. data/.data/spec/std/isa/inst/F/fcvt.l.s.yaml +1 -1
  170. data/.data/spec/std/isa/inst/F/fcvt.lu.s.yaml +1 -1
  171. data/.data/spec/std/isa/inst/F/fcvt.s.l.yaml +1 -1
  172. data/.data/spec/std/isa/inst/F/fcvt.s.lu.yaml +1 -1
  173. data/.data/spec/std/isa/inst/F/fcvt.s.w.yaml +1 -1
  174. data/.data/spec/std/isa/inst/F/fcvt.s.wu.yaml +1 -1
  175. data/.data/spec/std/isa/inst/F/fcvt.w.s.yaml +1 -1
  176. data/.data/spec/std/isa/inst/F/fcvt.wu.s.yaml +1 -1
  177. data/.data/spec/std/isa/inst/F/fdiv.s.yaml +1 -1
  178. data/.data/spec/std/isa/inst/F/feq.s.yaml +2 -2
  179. data/.data/spec/std/isa/inst/F/fle.s.yaml +2 -2
  180. data/.data/spec/std/isa/inst/F/fleq.s.yaml +2 -2
  181. data/.data/spec/std/isa/inst/F/flt.s.yaml +2 -2
  182. data/.data/spec/std/isa/inst/F/fltq.s.yaml +2 -2
  183. data/.data/spec/std/isa/inst/F/flw.yaml +2 -2
  184. data/.data/spec/std/isa/inst/F/fmadd.s.yaml +1 -1
  185. data/.data/spec/std/isa/inst/F/fmax.s.yaml +6 -6
  186. data/.data/spec/std/isa/inst/F/fmin.s.yaml +6 -6
  187. data/.data/spec/std/isa/inst/F/fmsub.s.yaml +1 -1
  188. data/.data/spec/std/isa/inst/F/fmul.s.yaml +1 -1
  189. data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +2 -2
  190. data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +1 -1
  191. data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +2 -2
  192. data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +1 -1
  193. data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +4 -4
  194. data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +3 -3
  195. data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +4 -4
  196. data/.data/spec/std/isa/inst/F/fsqrt.s.yaml +1 -1
  197. data/.data/spec/std/isa/inst/F/fsub.s.yaml +1 -1
  198. data/.data/spec/std/isa/inst/F/fsw.yaml +1 -1
  199. data/.data/spec/std/isa/inst/I/addi.yaml +2 -1
  200. data/.data/spec/std/isa/inst/I/addiw.yaml +2 -1
  201. data/.data/spec/std/isa/inst/I/andi.yaml +2 -1
  202. data/.data/spec/std/isa/inst/I/auipc.yaml +1 -0
  203. data/.data/spec/std/isa/inst/I/beq.yaml +1 -1
  204. data/.data/spec/std/isa/inst/I/bge.yaml +4 -2
  205. data/.data/spec/std/isa/inst/I/bgeu.yaml +3 -0
  206. data/.data/spec/std/isa/inst/I/blt.yaml +4 -2
  207. data/.data/spec/std/isa/inst/I/bltu.yaml +3 -0
  208. data/.data/spec/std/isa/inst/I/bne.yaml +1 -1
  209. data/.data/spec/std/isa/inst/I/lb.yaml +1 -0
  210. data/.data/spec/std/isa/inst/I/lbu.yaml +1 -0
  211. data/.data/spec/std/isa/inst/I/ld.yaml +2 -0
  212. data/.data/spec/std/isa/inst/I/lh.yaml +1 -0
  213. data/.data/spec/std/isa/inst/I/lhu.yaml +1 -0
  214. data/.data/spec/std/isa/inst/I/lui.yaml +1 -0
  215. data/.data/spec/std/isa/inst/I/lw.yaml +1 -0
  216. data/.data/spec/std/isa/inst/I/lwu.yaml +1 -0
  217. data/.data/spec/std/isa/inst/I/ori.yaml +1 -0
  218. data/.data/spec/std/isa/inst/I/sb.yaml +1 -0
  219. data/.data/spec/std/isa/inst/I/sd.yaml +1 -0
  220. data/.data/spec/std/isa/inst/I/sh.yaml +1 -0
  221. data/.data/spec/std/isa/inst/I/slt.yaml +2 -2
  222. data/.data/spec/std/isa/inst/I/slti.yaml +1 -0
  223. data/.data/spec/std/isa/inst/I/sltiu.yaml +2 -1
  224. data/.data/spec/std/isa/inst/I/sltu.yaml +1 -1
  225. data/.data/spec/std/isa/inst/I/sub.yaml +1 -1
  226. data/.data/spec/std/isa/inst/I/subw.yaml +1 -1
  227. data/.data/spec/std/isa/inst/I/sw.yaml +1 -0
  228. data/.data/spec/std/isa/inst/I/xori.yaml +2 -1
  229. data/.data/spec/std/isa/inst/M/mul.yaml +0 -19
  230. data/.data/spec/std/isa/inst/Q/fsgnj.q.yaml +1 -1
  231. data/.data/spec/std/isa/inst/S/sret.yaml +3 -1
  232. data/.data/spec/std/isa/inst/V/vadc.vim.yaml +1 -0
  233. data/.data/spec/std/isa/inst/V/vadd.vi.yaml +1 -0
  234. data/.data/spec/std/isa/inst/V/vadd.vv.yaml +1 -5
  235. data/.data/spec/std/isa/inst/V/vand.vi.yaml +1 -0
  236. data/.data/spec/std/isa/inst/V/vfsgnjn.vv.yaml +3 -0
  237. data/.data/spec/std/isa/inst/V/vfsgnjx.vv.yaml +3 -0
  238. data/.data/spec/std/isa/inst/V/vl1re8.v.yaml +3 -0
  239. data/.data/spec/std/isa/inst/V/vl2re8.v.yaml +3 -0
  240. data/.data/spec/std/isa/inst/V/vl4re8.v.yaml +3 -0
  241. data/.data/spec/std/isa/inst/V/vl8re8.v.yaml +3 -0
  242. data/.data/spec/std/isa/inst/V/vle8.v.yaml +4 -8
  243. data/.data/spec/std/isa/inst/V/vmadc.vi.yaml +1 -0
  244. data/.data/spec/std/isa/inst/V/vmadc.vim.yaml +1 -0
  245. data/.data/spec/std/isa/inst/V/vmand.mm.yaml +3 -0
  246. data/.data/spec/std/isa/inst/V/vmerge.vim.yaml +1 -0
  247. data/.data/spec/std/isa/inst/V/vmfle.vv.yaml +3 -0
  248. data/.data/spec/std/isa/inst/V/vmflt.vv.yaml +3 -0
  249. data/.data/spec/std/isa/inst/V/vmnand.mm.yaml +3 -0
  250. data/.data/spec/std/isa/inst/V/vmseq.vi.yaml +1 -0
  251. data/.data/spec/std/isa/inst/V/vmsgt.vi.yaml +4 -0
  252. data/.data/spec/std/isa/inst/V/vmsgtu.vi.yaml +4 -0
  253. data/.data/spec/std/isa/inst/V/vmsle.vi.yaml +4 -0
  254. data/.data/spec/std/isa/inst/V/vmsle.vv.yaml +3 -0
  255. data/.data/spec/std/isa/inst/V/vmsleu.vi.yaml +4 -0
  256. data/.data/spec/std/isa/inst/V/vmsleu.vv.yaml +3 -0
  257. data/.data/spec/std/isa/inst/V/vmslt.vv.yaml +3 -0
  258. data/.data/spec/std/isa/inst/V/vmsltu.vv.yaml +3 -0
  259. data/.data/spec/std/isa/inst/V/vmsne.vi.yaml +1 -0
  260. data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +2 -13
  261. data/.data/spec/std/isa/inst/V/vmv.x.s.yaml +1 -1
  262. data/.data/spec/std/isa/inst/V/vmxnor.mm.yaml +3 -0
  263. data/.data/spec/std/isa/inst/V/vmxor.mm.yaml +3 -0
  264. data/.data/spec/std/isa/inst/V/vnsrl.wx.yaml +3 -0
  265. data/.data/spec/std/isa/inst/V/vor.vi.yaml +1 -0
  266. data/.data/spec/std/isa/inst/V/vrsub.vi.yaml +1 -0
  267. data/.data/spec/std/isa/inst/V/vrsub.vx.yaml +3 -0
  268. data/.data/spec/std/isa/inst/V/vsadd.vi.yaml +1 -0
  269. data/.data/spec/std/isa/inst/V/vsaddu.vi.yaml +1 -0
  270. data/.data/spec/std/isa/inst/V/vse8.v.yaml +4 -4
  271. data/.data/spec/std/isa/inst/V/vwadd.vx.yaml +3 -0
  272. data/.data/spec/std/isa/inst/V/vwaddu.vx.yaml +3 -0
  273. data/.data/spec/std/isa/inst/V/vxor.vi.yaml +4 -0
  274. data/.data/spec/std/isa/inst/Zalasr/lSIZE.AQRL.layout +40 -5
  275. data/.data/spec/std/isa/inst/Zalasr/lb.aq.yaml +17 -1
  276. data/.data/spec/std/isa/inst/Zalasr/lb.aqrl.yaml +17 -1
  277. data/.data/spec/std/isa/inst/Zalasr/ld.aq.yaml +17 -1
  278. data/.data/spec/std/isa/inst/Zalasr/ld.aqrl.yaml +17 -1
  279. data/.data/spec/std/isa/inst/Zalasr/lh.aq.yaml +17 -1
  280. data/.data/spec/std/isa/inst/Zalasr/lh.aqrl.yaml +17 -1
  281. data/.data/spec/std/isa/inst/Zalasr/lw.aq.yaml +17 -1
  282. data/.data/spec/std/isa/inst/Zalasr/lw.aqrl.yaml +17 -1
  283. data/.data/spec/std/isa/inst/Zalasr/sSIZE.AQRL.layout +46 -5
  284. data/.data/spec/std/isa/inst/Zalasr/sb.aqrl.yaml +16 -1
  285. data/.data/spec/std/isa/inst/Zalasr/sb.rl.yaml +16 -1
  286. data/.data/spec/std/isa/inst/Zalasr/sd.aqrl.yaml +16 -1
  287. data/.data/spec/std/isa/inst/Zalasr/sd.rl.yaml +16 -1
  288. data/.data/spec/std/isa/inst/Zalasr/sh.aqrl.yaml +16 -1
  289. data/.data/spec/std/isa/inst/Zalasr/sh.rl.yaml +16 -1
  290. data/.data/spec/std/isa/inst/Zalasr/sw.aqrl.yaml +16 -1
  291. data/.data/spec/std/isa/inst/Zalasr/sw.rl.yaml +16 -1
  292. data/.data/spec/std/isa/inst/Zawrs/wrs.nto.yaml +4 -2
  293. data/.data/spec/std/isa/inst/Zba/add.uw.yaml +9 -11
  294. data/.data/spec/std/isa/inst/Zbb/orc.b.yaml +1 -1
  295. data/.data/spec/std/isa/inst/Zbkb/brev8.yaml +3 -3
  296. data/.data/spec/std/isa/inst/Zbkb/packw.yaml +1 -1
  297. data/.data/spec/std/isa/inst/Zbkb/unzip.yaml +2 -2
  298. data/.data/spec/std/isa/inst/Zbkb/zip.yaml +2 -2
  299. data/.data/spec/std/isa/inst/Zbkx/xperm4.yaml +2 -2
  300. data/.data/spec/std/isa/inst/Zbkx/xperm8.yaml +2 -2
  301. data/.data/spec/std/isa/inst/Zcd/c.fld.yaml +1 -1
  302. data/.data/spec/std/isa/inst/Zcd/c.fldsp.yaml +1 -1
  303. data/.data/spec/std/isa/inst/Zcd/c.fsdsp.yaml +1 -1
  304. data/.data/spec/std/isa/inst/Zcf/c.flwsp.yaml +1 -1
  305. data/.data/spec/std/isa/inst/Zcf/c.fswsp.yaml +1 -1
  306. data/.data/spec/std/isa/inst/Zcmp/cm.pop.yaml +1 -1
  307. data/.data/spec/std/isa/inst/Zcmp/cm.popret.yaml +1 -1
  308. data/.data/spec/std/isa/inst/Zcmp/cm.popretz.yaml +1 -1
  309. data/.data/spec/std/isa/inst/Zcmp/cm.push.yaml +2 -3
  310. data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +1 -1
  311. data/.data/spec/std/isa/inst/Zfh/fcvt.h.s.yaml +6 -6
  312. data/.data/spec/std/isa/inst/Zfh/fcvt.s.h.yaml +5 -5
  313. data/.data/spec/std/isa/inst/Zfh/flh.yaml +1 -1
  314. data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +1 -1
  315. data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +1 -1
  316. data/.data/spec/std/isa/inst/Zfh/fsh.yaml +1 -1
  317. data/.data/spec/std/isa/inst/Zicbop/prefetch.i.yaml +2 -0
  318. data/.data/spec/std/isa/inst/Zicbop/prefetch.r.yaml +2 -0
  319. data/.data/spec/std/isa/inst/Zicbop/prefetch.w.yaml +2 -0
  320. data/.data/spec/std/isa/inst/Zicsr/csrrc.yaml +1 -1
  321. data/.data/spec/std/isa/inst/Zicsr/csrrci.yaml +1 -1
  322. data/.data/spec/std/isa/inst/Zicsr/csrrs.yaml +2 -2
  323. data/.data/spec/std/isa/inst/Zicsr/csrrsi.yaml +1 -1
  324. data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +1 -1
  325. data/.data/spec/std/isa/inst/Zicsr/csrrwi.yaml +1 -1
  326. data/.data/spec/std/isa/inst/Zks/sm3p0.yaml +1 -1
  327. data/.data/spec/std/isa/inst/Zks/sm3p1.yaml +1 -1
  328. data/.data/spec/std/isa/inst/Zks/sm4ed.yaml +1 -1
  329. data/.data/spec/std/isa/inst/Zks/sm4ks.yaml +1 -1
  330. data/.data/spec/std/isa/isa/builtin_functions.idl +18 -0
  331. data/.data/spec/std/isa/isa/fp.idl +1 -5
  332. data/.data/spec/std/isa/isa/globals.isa +72 -21
  333. data/.data/spec/std/isa/isa/interrupts.idl +1 -0
  334. data/.data/spec/std/isa/isa/vec.idl +1 -2
  335. data/.data/spec/std/isa/manual_version/isa/20240411/isa_20240411.yaml +5 -5
  336. data/.data/spec/std/isa/param/COUNTINHIBIT_EN.yaml +8 -2
  337. data/.data/spec/std/isa/param/HSTATEEN_CONTEXT_TYPE.yaml +1 -0
  338. data/.data/spec/std/isa/param/JVT_BASE_MASK.yaml +1 -1
  339. data/.data/spec/std/isa/param/MCOUNTINHIBIT_IMPLEMENTED.yaml +25 -0
  340. data/.data/spec/std/isa/param/MSTATEEN_CONTEXT_TYPE.yaml +1 -0
  341. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_DIRECT.yaml +1 -0
  342. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_VECTORED.yaml +1 -0
  343. data/.data/spec/std/isa/param/MTVEC_MODES.yaml +10 -3
  344. data/.data/spec/std/isa/param/NUM_PMP_ENTRIES.yaml +11 -22
  345. data/.data/spec/std/isa/param/NUM_USABLE_PMP_ENTRIES.yaml +35 -0
  346. data/.data/spec/std/isa/param/PMP_NA4_SUPPORTED.yaml +23 -0
  347. data/.data/spec/std/isa/param/PMP_NAPOT_SUPPORTED.yaml +19 -0
  348. data/.data/spec/std/isa/param/{MSTATUS_TVM_IMPLEMENTED.yaml → PMP_TOR_SUPPORTED.yaml} +6 -6
  349. data/.data/spec/std/isa/param/PRECISE_SYNCHRONOUS_EXCEPTIONS.yaml +1 -0
  350. data/.data/spec/std/isa/param/TRAP_ON_EBREAK.yaml +1 -0
  351. data/.data/spec/std/isa/param/TRAP_ON_ECALL_FROM_M.yaml +1 -0
  352. data/.data/spec/std/isa/param/TRAP_ON_SFENCE_VMA_WHEN_SATP_MODE_IS_READ_ONLY.yaml +1 -0
  353. data/.data/spec/std/isa/param/VLEN.yaml +2 -0
  354. data/.data/spec/std/isa/param/ZAWRS_NTO_IS_NOP.yaml +19 -0
  355. data/.data/spec/std/isa/profile/RVA20S64.yaml +11 -4
  356. data/.data/spec/std/isa/profile/RVA20U64.yaml +14 -5
  357. data/.data/spec/std/isa/profile/RVA22S64.yaml +14 -3
  358. data/.data/spec/std/isa/profile/RVA22U64.yaml +8 -1
  359. data/.data/spec/std/isa/profile/RVA23S64.yaml +13 -0
  360. data/.data/spec/std/isa/profile/RVA23U64.yaml +15 -1
  361. data/.data/spec/std/isa/profile/RVB23S64.yaml +15 -3
  362. data/.data/spec/std/isa/profile/RVB23U64.yaml +8 -1
  363. data/.data/spec/std/isa/profile/RVI20U32.yaml +8 -1
  364. data/.data/spec/std/isa/profile/RVI20U64.yaml +7 -0
  365. data/.data/spec/std/isa/register_file/F.yaml +3 -2
  366. data/.data/spec/std/isa/register_file/V.yaml +2 -2
  367. data/.data/spec/std/isa/register_file/X.yaml +2 -1
  368. data/lib/udb/ESPRESSO_VERSION +1 -1
  369. data/lib/udb/architecture.rb +4 -25
  370. data/lib/udb/cfg_arch.rb +171 -59
  371. data/lib/udb/cli.rb +10 -1
  372. data/lib/udb/condition.rb +38 -37
  373. data/lib/udb/config.rb +86 -8
  374. data/lib/udb/doc_link.rb +3 -4
  375. data/lib/udb/logic.rb +29 -56
  376. data/lib/udb/obj/csr.rb +23 -5
  377. data/lib/udb/obj/csr_field.rb +36 -21
  378. data/lib/udb/obj/database_obj.rb +2 -5
  379. data/lib/udb/obj/extension.rb +0 -3
  380. data/lib/udb/obj/instruction.rb +2 -5
  381. data/lib/udb/obj/non_isa_specification.rb +22 -100
  382. data/lib/udb/obj/portfolio.rb +75 -20
  383. data/lib/udb/obj/profile.rb +0 -4
  384. data/lib/udb/obj/register_file.rb +63 -2
  385. data/lib/udb/portfolio_design.rb +3 -6
  386. data/lib/udb/resolver.rb +84 -23
  387. data/lib/udb/version.rb +1 -1
  388. data/lib/udb/version_spec.rb +8 -0
  389. data/lib/udb/z3.rb +25 -2
  390. data/lib/udb.rb +0 -3
  391. metadata +30 -38
  392. data/.data/cfgs/profile/RVA23M64.yaml +0 -159
  393. data/.data/cfgs/profile/RVB23M64.yaml +0 -149
  394. data/.data/spec/schemas/proc_cert_class_schema.json +0 -35
  395. data/.data/spec/schemas/proc_cert_model_schema.json +0 -336
  396. data/.data/spec/std/isa/proc_cert_class/AC.yaml +0 -13
  397. data/.data/spec/std/isa/proc_cert_class/MC.yaml +0 -13
  398. data/.data/spec/std/isa/proc_cert_class/RVI.yaml +0 -16
  399. data/.data/spec/std/isa/proc_cert_model/AC100.yaml +0 -72
  400. data/.data/spec/std/isa/proc_cert_model/AC200.yaml +0 -58
  401. data/.data/spec/std/isa/proc_cert_model/MC100-32.yaml +0 -155
  402. data/.data/spec/std/isa/proc_cert_model/MC100-64.yaml +0 -21
  403. data/.data/spec/std/isa/proc_cert_model/MC200-32.yaml +0 -60
  404. data/.data/spec/std/isa/proc_cert_model/MC200-64.yaml +0 -21
  405. data/.data/spec/std/isa/proc_cert_model/MC300-32.yaml +0 -40
  406. data/.data/spec/std/isa/proc_cert_model/MC300-64.yaml +0 -21
  407. data/.data/spec/std/isa/proc_cert_model/RVI20-32.yaml +0 -39
  408. data/.data/spec/std/isa/proc_cert_model/RVI20-64.yaml +0 -19
  409. data/.data/spec/std/isa/profile/RVA23M64.yaml +0 -24
  410. data/.data/spec/std/isa/profile/RVB23M64.yaml +0 -86
  411. data/lib/udb/cert_normative_rule.rb +0 -41
  412. data/lib/udb/obj/certifiable_obj.rb +0 -21
  413. data/lib/udb/obj/certificate.rb +0 -230
  414. 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
- return 0;
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 # the encoding of an instruction causing this access
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
- return read_physical_memory(LEN, result.paddr);
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
- !pma_applies?(PmaAttribute::AmoArithmetic, physical_address, N)) {
2920
- raise(ExceptionCode::StoreAmoAccessFault, mode(), virtual_address);
2921
- } else if (((op == AmoOperation::And || op == AmoOperation::Or || op == AmoOperation::Xor)) &&
2922
- !pma_applies?(PmaAttribute::AmoLogical, physical_address, N)) {
2923
- raise(ExceptionCode::StoreAmoAccessFault, mode(), virtual_address);
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");
@@ -259,6 +259,7 @@ function highest_priority_interrupt {
259
259
  }
260
260
  }
261
261
  assert(false, "There is no valid interrupt");
262
+ unreachable();
262
263
  }
263
264
  }
264
265
 
@@ -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.1" }
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.12.0" }
211
- - { name: Sv39, version: "1.12.0" }
212
- - { name: Sv48, version: "1.12.0" }
213
- - { name: Sv57, version: "1.12.0" }
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
- extension:
30
- name: Sm
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.
@@ -19,6 +19,7 @@ schema:
19
19
  - rw
20
20
  - read-only-0
21
21
  - read-only-1
22
+ default: rw
22
23
  requirements:
23
24
  idl(): |
24
25
  MSTATEEN_CONTEXT_TYPE == "read-only-0" -> HSTATEEN_CONTEXT_TYPE == "read-only-0";
@@ -23,6 +23,6 @@ schema:
23
23
  maximum: 0x7ffffffffffffff # 58 bits
24
24
  requirements:
25
25
  idl(): |
26
- MXLEN == 32 -> JVT_BASE_MASK < 0xffff_ffc0;
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
@@ -19,6 +19,7 @@ schema:
19
19
  - rw
20
20
  - read-only-0
21
21
  - read-only-1
22
+ default: rw
22
23
  definedBy:
23
24
  extension:
24
25
  allOf:
@@ -25,6 +25,7 @@ description: |
25
25
  the base, the minimum alignment cannot be less than 4.
26
26
  schema:
27
27
  description: An unsigned power of 2 greater than or equal to 4 that fits in 64 bits
28
+ default: 4
28
29
  enum:
29
30
  [
30
31
  4,
@@ -25,6 +25,7 @@ description: |
25
25
  the base, the minimum alignment cannot be less than 4.
26
26
  schema:
27
27
  description: An unsigned power of 2 greater than or equal to 4 that fits in 64 bits
28
+ default: 4
28
29
  enum:
29
30
  [
30
31
  4,
@@ -30,6 +30,13 @@ schema:
30
30
  maxItems: 2
31
31
  uniqueItems: true
32
32
  requirements:
33
- idl(): |
34
- (MTVEC_ACCESS == "ro") -> ($array_size(MTVEC_MODES) == 1);
35
- reason: If `mtvec` is read-only, the mode cannot be changed.
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. Can be any value between 0-64, inclusive.
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
- Therefore, pmp registers will behave as follows according to NUN_PMP_ENTRIES:
16
-
17
- [separator="!"]
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
- When NUM_PMP_ENTRIES is not exactly 0, 16, or 64, some extant pmp registers,
34
- and associated pmpNcfg, will be read-only zero (but will never cause an exception).
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
- minimum: 0
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: MSTATUS_TVM_IMPLEMENTED
8
+ name: PMP_TOR_SUPPORTED
9
9
  description: |
10
- Whether or not mstatus.TVM is implemented.
10
+ Whether or not the Top-of-Range (TOR) PMP address matching mode is supported.
11
11
 
12
- When not implemented mstatus.TVM will be read-only-zero.
13
- long_name: TODO
12
+ long_name: PMP TOR mode supported
14
13
  schema:
15
14
  type: boolean
16
15
  definedBy:
17
- extension:
18
- name: S
16
+ param:
17
+ name: NUM_PMP_ENTRIES
18
+ greaterThan: 0
@@ -15,3 +15,4 @@ description: |
15
15
  will cause execution to enter an unpredictable state.
16
16
  schema:
17
17
  type: boolean
18
+ default: true
@@ -15,3 +15,4 @@ description: |
15
15
  without raising a trap, in which case the EEI must provide a builtin.
16
16
  schema:
17
17
  type: boolean
18
+ default: true
@@ -15,3 +15,4 @@ description: |
15
15
  without raising a trap, in which case the EEI must provide a builtin.
16
16
  schema:
17
17
  type: boolean
18
+ default: true
@@ -20,6 +20,7 @@ description: |
20
20
  long_name: TODO
21
21
  schema:
22
22
  type: boolean
23
+ default: false
23
24
  definedBy:
24
25
  extension:
25
26
  allOf:
@@ -11,6 +11,8 @@ description: |
11
11
  long_name: TODO
12
12
  schema:
13
13
  type: integer
14
+ minimum: 32
15
+ maximum: 65536
14
16
  # requirements:
15
17
  # idl(): |
16
18
  # -> (VLEN >= ELEN) && (VLEN <='h10000) && (popcount(VLEN) == 1);