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
@@ -58,6 +58,140 @@ builtin function sync_write_after_read_device {
58
58
  }
59
59
  }
60
60
 
61
+ # Global flag: true while the second packed instruction in an ILUT entry is executing.
62
+ # Set by qc.cm.ilut before executing the second slot; cleared after. Used by raise_ilut()
63
+ # to encode the faulting slot into mepc bit 0.
64
+ Boolean executing_second_inst = false;
65
+
66
+ # Simplified precise-exception raise for qc_iu (M-mode only).
67
+ # Identical to raise_precise except mepc.PC (or mnepc.PC for a double-trap)
68
+ # captures bit 0 from executing_second_inst, allowing the trap handler to
69
+ # distinguish first- vs second-instruction faults within an ILUT entry.
70
+ # This function must be called for any exception raised by an ILUT-executed
71
+ # instruction (first or second slot). The executing_second_inst flag must be set
72
+ # before calling: false for the first instruction, true for the second.
73
+ function raise_ilut {
74
+ arguments ExceptionCode exception_code, XReg tval
75
+ description {
76
+ Raise a precise exception for an ILUT-executed instruction.
77
+ Sets mepc.PC = $pc | (executing_second_inst ? 1 : 0) so that the trap handler
78
+ can determine whether the fault came from the first or second packed
79
+ instruction in the ILUT entry. For a double-trap, sets mnepc.PC instead.
80
+ Only the M-mode handling path is included because qc_iu is M-mode only.
81
+ }
82
+ body {
83
+ Bits<1> slot_bit = executing_second_inst ? 1'b1 : 1'b0;
84
+
85
+ # qc_iu is M-mode only; no S/H/VS/VU delegation logic needed.
86
+ if (implemented?(ExtensionName::Smrnmi) && CSR[mnstatus].NMIE == 1'b0) {
87
+ # Double-trap: use mnepc
88
+ CSR[mnepc].PC = $pc | slot_bit;
89
+ } else {
90
+ CSR[mepc].PC = $pc | slot_bit;
91
+ }
92
+
93
+ if (!mtval_readonly?()) {
94
+ CSR[mtval].VALUE = mtval_for(exception_code, tval);
95
+ }
96
+
97
+ $pc = {CSR[mtvec].BASE, 2'b00};
98
+ CSR[mcause].INT = 1'b0;
99
+ CSR[mcause].CODE = $bits(exception_code);
100
+
101
+ set_mode(PrivilegeMode::M);
102
+ abort_current_instruction();
103
+ }
104
+ }
105
+
106
+ function is_pc_referencing_inst? {
107
+ returns Boolean
108
+ arguments Bits<32> inst
109
+ description {
110
+ Returns true if +inst+ references PC as an input or output, making it
111
+ forbidden inside an ILUT entry. This covers three categories:
112
+ (1) PC-relative instructions: auipc, branches, jal, c.j, c.jal, c.beqz, c.bnez;
113
+ (2) register-indirect jumps that write PC: jalr, c.jr, c.jalr;
114
+ (3) return instructions that write PC: cm.popret, cm.popretz, qc.cm.popret, qc.cm.popretz.
115
+ For 16-bit compressed instructions, only the lower 16 bits of +inst+ are examined.
116
+ For 48-bit Xqci instructions, only the lower 32 bits are passed here (the upper
117
+ 16 bits are in a separate word and are not needed for this check).
118
+ }
119
+ body {
120
+ if (inst[1:0] != 2'b11) {
121
+ # 16-bit compressed instruction: examine only the lower 16 bits
122
+ Bits<16> cinst = inst[15:0];
123
+ # c.j: funct3=101, op=01
124
+ if (cinst[15:13] == 3'b101 && cinst[1:0] == 2'b01) {
125
+ return true;
126
+ }
127
+ # c.jal: funct3=001, op=01
128
+ if (cinst[15:13] == 3'b001 && cinst[1:0] == 2'b01) {
129
+ return true;
130
+ }
131
+ # c.beqz: funct3=110, op=01
132
+ if (cinst[15:13] == 3'b110 && cinst[1:0] == 2'b01) {
133
+ return true;
134
+ }
135
+ # c.bnez: funct3=111, op=01
136
+ if (cinst[15:13] == 3'b111 && cinst[1:0] == 2'b01) {
137
+ return true;
138
+ }
139
+ # c.jr: bits[15:12]=1000, bits[6:2]!=00000, bits[1:0]=10 (register jump, writes PC)
140
+ if (cinst[15:12] == 4'b1000 && cinst[6:2] != 5'b00000 && cinst[1:0] == 2'b10) {
141
+ return true;
142
+ }
143
+ # c.jalr: bits[15:12]=1001, bits[6:2]!=00000, bits[1:0]=10 (register jump-and-link, writes PC)
144
+ if (cinst[15:12] == 4'b1001 && cinst[6:2] != 5'b00000 && cinst[1:0] == 2'b10) {
145
+ return true;
146
+ }
147
+ # cm.popret / qc.cm.popret: bits[15:8]=10111110, bits[1:0]=10 (pops stack and returns, writes PC)
148
+ if (cinst[15:8] == 8'b10111110 && cinst[1:0] == 2'b10) {
149
+ return true;
150
+ }
151
+ # cm.popretz / qc.cm.popretz: bits[15:8]=10111100, bits[1:0]=10 (pops stack, zeroes a0, returns, writes PC)
152
+ if (cinst[15:8] == 8'b10111100 && cinst[1:0] == 2'b10) {
153
+ return true;
154
+ }
155
+ return false;
156
+ } else {
157
+ # 32-bit (or 48-bit) instruction: check opcode field bits[6:0]
158
+ Bits<7> opcode = inst[6:0];
159
+ # auipc
160
+ if (opcode == 7'b0010111) {
161
+ return true;
162
+ }
163
+ # jal
164
+ if (opcode == 7'b1101111) {
165
+ return true;
166
+ }
167
+ # jalr: register-indirect jump, writes PC
168
+ # (grouped with PC-referencing instructions, not PC-relative)
169
+ if (opcode == 7'b1100111) {
170
+ return true;
171
+ }
172
+ # branches
173
+ if (opcode == 7'b1100011) {
174
+ return true;
175
+ }
176
+ # 48-bit Xqci PC-relative instructions (inst[4:2]==3'b111 indicates 48-bit length)
177
+ if (inst[4:2] == 3'b111) {
178
+ # All Xqci 48-bit PC-relative instructions use opcode 7'b0011111
179
+ if (opcode == 7'b0011111) {
180
+ # qc.e.j / qc.e.jal: funct3=000, inst[24:20]==5'b00000
181
+ if (inst[14:12] == 3'b000 && inst[24:20] == 5'b00000) {
182
+ return true;
183
+ }
184
+ # qc.e.beqi/bnei/blti/bgei/bltui/bgeui: funct3=100, inst[24:23]==2'b11
185
+ if (inst[14:12] == 3'b100 && inst[24:23] == 2'b11) {
186
+ return true;
187
+ }
188
+ }
189
+ }
190
+ return false;
191
+ }
192
+ }
193
+ }
194
+
61
195
  function get_and_validate_stack_pointer {
62
196
  returns XReg
63
197
  arguments XReg sp, Bits<INSTR_ENC_SIZE> encoding
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "v0.1",
4
+ "title": "Configuration Schema",
5
+ "description": "A configuration represents RISC-V architectural choices - ranging from complete design specifications to requirement sets to unconstrained baselines.\n\n> **See also:** Configurations Overview for a narrative introduction with examples and use cases.\n\nConfigurations come in three forms:\n\n- **Fully configured**: Concrete implementations with all extensions and parameters explicitly specified. These represent actual processor implementations where every architectural detail is known. Each extension must specify an exact version (e.g., `2.1.0` or `2.1`). Used for generating implementations, documentation, and test suites for specific hardware.\n\n- **Partially configured**: Profiles or configurable IP that define mandatory, optional, and prohibited extensions using version constraints (e.g., `>= 2.0`). These specify requirements that multiple implementations can satisfy. Can restrict whether additional extensions beyond those listed are allowed. Used for RISC-V compliance profiles, configurable IP offerings (a class of implementations a vendor may offer), and platform requirements.\n\n- **Unconfigured**: Special case representing the entire RISC-V specification without any implementation choices. Used to model the complete RISC-V architecture space before any configuration decisions are made.\n\nThe variant is selected by the `type` field. Fields common to all variants: `name`, `description`, `arch_overlay`. The `params` field is available on `fully configured` and `partially configured` variants.\n\n> **Note:** Schema validation checks structural correctness only. A schema-valid file can still be semantically invalid - for example, referencing an extension version that does not exist in the database, or omitting a parameter that is required by the implemented extensions.",
4
6
  "$defs": {
5
7
  "full_configuration": {
6
8
  "type": "object",
@@ -15,17 +17,18 @@
15
17
  ],
16
18
  "properties": {
17
19
  "$schema": {
18
- "type": "string",
19
- "format": "uri-reference",
20
- "const": "config_schema.json#"
20
+ "const": "config_schema.json#",
21
+ "description": "Schema reference - must be `config_schema.json#`"
21
22
  },
22
23
  "kind": {
23
24
  "type": "string",
24
- "const": "architecture configuration"
25
+ "const": "architecture configuration",
26
+ "description": "Document type identifier - must be `architecture configuration`"
25
27
  },
26
28
  "type": {
27
29
  "type": "string",
28
- "const": "fully configured"
30
+ "const": "fully configured",
31
+ "description": "Configuration specificity level - `fully configured` means all extensions and parameters are explicitly specified"
29
32
  },
30
33
  "name": {
31
34
  "type": "string",
@@ -33,19 +36,32 @@
33
36
  },
34
37
  "description": {
35
38
  "type": "string",
36
- "description": "An asciidoc description of the configuration"
39
+ "description": "Human-readable description of this configuration (AsciiDoc format)"
37
40
  },
38
41
  "arch_overlay": {
39
42
  "type": "string",
40
- "description": "Optional arch overlay to apply. Can be either the name of a directory under arch_overlay/ or a (absolute or relative) path to an overlay directory"
43
+ "description": "Optional arch overlay to apply. Can be either the name of a directory under arch_overlay/ or an absolute or relative path to an overlay directory"
41
44
  },
42
45
  "$source": {
43
46
  "type": "string",
44
47
  "format": "uri",
45
- "description": "Path to original file, when this is a copy"
48
+ "description": "Source file path when this configuration was generated or copied from another file"
49
+ },
50
+ "compatible": {
51
+ "description": "Declares that this configuration is compatible with one or more other configurations — meaning there exists at least one concrete hardware implementation that satisfies both this config and each listed config simultaneously. Each pointer is either the name of a config in the repository cfgs/ directory or a path to a config YAML file (absolute, or relative to this file). Compatibility is checked transitively: if config B lists config C as compatible, then this config must also be compatible with C.",
52
+ "examples": [
53
+ "profile/RVA23U64",
54
+ ["profile/RVA23U64", "profile/RVB23U64"],
55
+ "../other/my_config.yaml"
56
+ ],
57
+ "oneOf": [
58
+ { "type": "string" },
59
+ { "type": "array", "items": { "type": "string" } }
60
+ ]
46
61
  },
47
62
  "params": {
48
- "type": "object"
63
+ "type": "object",
64
+ "description": "Architecture parameters that define implementation choices (e.g., `MXLEN: 64`, privilege modes, physical address width, etc.). Parameter names and valid values are defined by the parameter data files in `spec/std/isa/param/`."
49
65
  },
50
66
  "implemented_extensions": {
51
67
  "description": "Extensions implemented by this architecture",
@@ -59,10 +75,26 @@
59
75
  "description": "Extension name"
60
76
  },
61
77
  "version": {
62
- "$ref": "schema_defs.json#/$defs/extension_version"
78
+ "$ref": "schema_defs.json#/$defs/implemented_extension_version"
63
79
  }
64
80
  }
65
- }
81
+ },
82
+ "examples": [
83
+ [
84
+ {
85
+ "name": "I",
86
+ "version": "2.1.0"
87
+ },
88
+ {
89
+ "name": "M",
90
+ "version": "2.0.0"
91
+ },
92
+ {
93
+ "name": "Zicsr",
94
+ "version": "2.0.0"
95
+ }
96
+ ]
97
+ ]
66
98
  }
67
99
  },
68
100
  "additionalProperties": false
@@ -81,15 +113,18 @@
81
113
  "$schema": {
82
114
  "type": "string",
83
115
  "format": "uri-reference",
84
- "const": "config_schema.json#"
116
+ "const": "config_schema.json#",
117
+ "description": "Schema reference - must be `config_schema.json#`"
85
118
  },
86
119
  "kind": {
87
120
  "type": "string",
88
- "const": "architecture configuration"
121
+ "const": "architecture configuration",
122
+ "description": "Document type identifier - must be `architecture configuration`"
89
123
  },
90
124
  "type": {
91
125
  "type": "string",
92
- "const": "partially configured"
126
+ "const": "partially configured",
127
+ "description": "Configuration specificity level - `partially configured` means some extensions/parameters are specified as requirements while others are left open"
93
128
  },
94
129
  "name": {
95
130
  "type": "string",
@@ -97,19 +132,32 @@
97
132
  },
98
133
  "description": {
99
134
  "type": "string",
100
- "description": "An asciidoc description of the configuration"
135
+ "description": "Human-readable description of this configuration (AsciiDoc format)"
101
136
  },
102
137
  "params": {
103
- "type": "object"
138
+ "type": "object",
139
+ "description": "Architecture parameters that constrain compliant implementations. The entire `params` key may be omitted if no parameter constraints are needed. Parameter names and valid values are defined by the parameter data files in `spec/std/isa/param/`."
104
140
  },
105
141
  "arch_overlay": {
106
142
  "type": "string",
107
- "description": "Optional arch overlay to apply. Can be either the name of a directory under arch_overlay/ or a (absolute or relative) path to an overlay directory"
143
+ "description": "Optional arch overlay to apply. Can be either the name of a directory under arch_overlay/ or an absolute or relative path to an overlay directory"
108
144
  },
109
145
  "$source": {
110
146
  "type": "string",
111
147
  "format": "uri",
112
- "description": "Path to original file, when this is a copy"
148
+ "description": "Source file path when this configuration was generated or copied from another file"
149
+ },
150
+ "compatible": {
151
+ "description": "Declares that this configuration is compatible with one or more other configurations — meaning there exists at least one concrete hardware implementation that satisfies both this config and each listed config simultaneously. Each pointer is either the name of a config in the repository cfgs/ directory or a path to a config YAML file (absolute, or relative to this file). Compatibility is checked transitively: if config B lists config C as compatible, then this config must also be compatible with C.",
152
+ "examples": [
153
+ "profile/RVA23U64",
154
+ ["profile/RVA23U64", "profile/RVB23U64"],
155
+ "../other/my_config.yaml"
156
+ ],
157
+ "oneOf": [
158
+ { "type": "string" },
159
+ { "type": "array", "items": { "type": "string" } }
160
+ ]
113
161
  },
114
162
  "mandatory_extensions": {
115
163
  "description": "Extensions mandatory in this architecture",
@@ -119,7 +167,7 @@
119
167
  }
120
168
  },
121
169
  "non_mandatory_extensions": {
122
- "description": "Extensions that are not mandatory but are still _special_ in this architecture. This could mean different things depending on the context: for certificates or generated IP, this would correspond to _optional supported_, and extensions not in non_mandatory are not possible. For profiles, this corresponds to some type of _profile optional_, but extensions in non_mandatory are still possible.",
170
+ "description": "Optional extensions with special significance in this architecture. For configurable IP, these are optionally supported extensions. For profiles, these are profile-optional extensions.",
123
171
  "type": "array",
124
172
  "items": {
125
173
  "$ref": "schema_defs.json#/$defs/extension_requirement"
@@ -138,10 +186,11 @@
138
186
  "additional_extensions": {
139
187
  "type": "boolean",
140
188
  "default": true,
141
- "description": "Whether or not a compliant instance of this partial config can have more extensions than those listed in mandatory_extensions/non_mandatory_extensions"
189
+ "description": "Whether a compliant instance may implement extensions beyond those listed in `mandatory_extensions`/`non_mandatory_extensions`. Defaults to `true` if omitted."
142
190
  },
143
191
  "requirements": {
144
- "$ref": "schema_defs.json#/$defs/condition"
192
+ "$ref": "schema_defs.json#/$defs/condition",
193
+ "description": "Additional condition that must be satisfied for this configuration to be valid (e.g., a parameter constraint or extension dependency)."
145
194
  }
146
195
  },
147
196
  "additionalProperties": false
@@ -153,15 +202,18 @@
153
202
  "$schema": {
154
203
  "type": "string",
155
204
  "format": "uri-reference",
156
- "const": "config_schema.json#"
205
+ "const": "config_schema.json#",
206
+ "description": "Schema reference - must be `config_schema.json#`"
157
207
  },
158
208
  "kind": {
159
209
  "type": "string",
160
- "const": "architecture configuration"
210
+ "const": "architecture configuration",
211
+ "description": "Document type identifier - must be `architecture configuration`"
161
212
  },
162
213
  "type": {
163
214
  "type": "string",
164
- "const": "unconfigured"
215
+ "const": "unconfigured",
216
+ "description": "Configuration specificity level - `unconfigured` represents the entire RISC-V specification with all implementation choices left unresolved"
165
217
  },
166
218
  "name": {
167
219
  "type": "string",
@@ -169,16 +221,16 @@
169
221
  },
170
222
  "arch_overlay": {
171
223
  "type": "string",
172
- "description": "Optional arch overlay to apply. Can be either the name of a directory under arch_overlay/ or a (absolute or relative) path to an overlay directory"
224
+ "description": "Optional arch overlay to apply. Can be either the name of a directory under arch_overlay/ or an absolute or relative path to an overlay directory"
173
225
  },
174
226
  "$source": {
175
227
  "type": "string",
176
228
  "format": "uri",
177
- "description": "Path to original file, when this is a copy"
229
+ "description": "Source file path when this configuration was generated or copied from another file"
178
230
  },
179
231
  "description": {
180
232
  "type": "string",
181
- "description": "An asciidoc description of the configuration"
233
+ "description": "Human-readable description of this configuration (AsciiDoc format)"
182
234
  }
183
235
  },
184
236
  "additionalProperties": false
@@ -194,5 +246,146 @@
194
246
  {
195
247
  "$ref": "#/$defs/unconfiguration"
196
248
  }
249
+ ],
250
+ "examples": [
251
+ {
252
+ "_title": "Minimal Fully Configured",
253
+ "_quick_start": true,
254
+ "$schema": "config_schema.json#",
255
+ "kind": "architecture configuration",
256
+ "type": "fully configured",
257
+ "name": "MyProcessor",
258
+ "description": "A minimal 64-bit RISC-V processor",
259
+ "params": {
260
+ "MXLEN": 64
261
+ },
262
+ "implemented_extensions": [
263
+ { "name": "I", "version": "2.1" },
264
+ { "name": "Sm", "version": "1.12" }
265
+ ]
266
+ },
267
+ {
268
+ "_title": "Minimal Partially Configured",
269
+ "_quick_start": true,
270
+ "$schema": "config_schema.json#",
271
+ "kind": "architecture configuration",
272
+ "type": "partially configured",
273
+ "name": "MyProfile",
274
+ "description": "A minimal profile requiring base integer instructions",
275
+ "mandatory_extensions": [{ "name": "I", "version": ">= 2.1" }]
276
+ },
277
+ {
278
+ "_title": "Minimal Unconfigured",
279
+ "_quick_start": true,
280
+ "$schema": "config_schema.json#",
281
+ "kind": "architecture configuration",
282
+ "type": "unconfigured",
283
+ "name": "generic",
284
+ "description": "The complete RISC-V specification with no implementation choices"
285
+ },
286
+ {
287
+ "_title": "Full Configuration Example (RV64)",
288
+ "$schema": "config_schema.json#",
289
+ "kind": "architecture configuration",
290
+ "type": "fully configured",
291
+ "name": "RV64GC",
292
+ "description": "64-bit RISC-V with General-purpose and Compressed extensions",
293
+ "params": {
294
+ "XLEN": 64,
295
+ "MXLEN": 64,
296
+ "SXLEN": 64,
297
+ "UXLEN": 64
298
+ },
299
+ "implemented_extensions": [
300
+ {
301
+ "name": "I",
302
+ "version": "2.1"
303
+ },
304
+ {
305
+ "name": "M",
306
+ "version": "2.0"
307
+ },
308
+ {
309
+ "name": "A",
310
+ "version": "2.1"
311
+ },
312
+ {
313
+ "name": "F",
314
+ "version": "2.2"
315
+ },
316
+ {
317
+ "name": "D",
318
+ "version": "2.2"
319
+ },
320
+ {
321
+ "name": "C",
322
+ "version": "2.0"
323
+ },
324
+ {
325
+ "name": "Zicsr",
326
+ "version": "2.0"
327
+ },
328
+ {
329
+ "name": "Zifencei",
330
+ "version": "2.0"
331
+ }
332
+ ]
333
+ },
334
+ {
335
+ "_title": "Partial Configuration Example (Profile)",
336
+ "$schema": "config_schema.json#",
337
+ "kind": "architecture configuration",
338
+ "type": "partially configured",
339
+ "name": "RVA22U64",
340
+ "description": "RISC-V Application Profile for 64-bit Unix-like systems",
341
+ "mandatory_extensions": [
342
+ {
343
+ "name": "I",
344
+ "version": ">= 2.1"
345
+ },
346
+ {
347
+ "name": "M",
348
+ "version": ">= 2.0"
349
+ },
350
+ {
351
+ "name": "A",
352
+ "version": ">= 2.1"
353
+ },
354
+ {
355
+ "name": "F",
356
+ "version": ">= 2.2"
357
+ },
358
+ {
359
+ "name": "D",
360
+ "version": ">= 2.2"
361
+ },
362
+ {
363
+ "name": "C",
364
+ "version": ">= 2.0"
365
+ },
366
+ {
367
+ "name": "Zicsr",
368
+ "version": ">= 2.0"
369
+ }
370
+ ],
371
+ "non_mandatory_extensions": [
372
+ {
373
+ "name": "V",
374
+ "version": ">= 1.0"
375
+ }
376
+ ],
377
+ "params": {
378
+ "XLEN": 64
379
+ },
380
+ "additional_extensions": false
381
+ },
382
+ {
383
+ "_title": "Unconfigured Example",
384
+ "$schema": "config_schema.json#",
385
+ "kind": "architecture configuration",
386
+ "type": "unconfigured",
387
+ "name": "generic",
388
+ "description": "Generic unconfigured RISC-V architecture"
389
+ }
197
390
  ]
198
391
  }
@@ -115,9 +115,6 @@
115
115
  }
116
116
  ],
117
117
  "description": "Extension(s) that affect the definition of the field beyond the extension (or base) the field is originally defined in"
118
- },
119
- "cert_normative_rules": {
120
- "$ref": "schema_defs.json#/$defs/cert_normative_rules"
121
118
  }
122
119
  },
123
120
  "allOf": [
@@ -272,9 +269,6 @@
272
269
  "$source": {
273
270
  "description": "Path to the source file this definition came from; used by downstream tooling -- not expected to be in handwritten files",
274
271
  "type": "string"
275
- },
276
- "cert_normative_rules": {
277
- "$ref": "schema_defs.json#/$defs/cert_normative_rules"
278
272
  }
279
273
  },
280
274
  "additionalProperties": false,