Skip to content

Commit c3fe25a

Browse files
PMP Verif Plan and tests (#2648)
Verification Plan provided in VP_TOOL for the PMP. The verification plan should be complete, however only a partial set of the tests is available. This is not included in the CI but a bash script is available to run the test.
1 parent f984dc3 commit c3fe25a

39 files changed

+34737
-1
lines changed

core/cva6_rvfi.sv

+2-1
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,8 @@ module cva6_rvfi
429429
genvar i;
430430
generate
431431
for (i = 0; i < 16; i++) begin
432-
`CONNECT_RVFI_FULL(1'b1, pmpaddr[i], csr.pmpaddr_q[i][CVA6Cfg.PLEN-3:0])
432+
`CONNECT_RVFI_FULL(1'b1, pmpaddr[i], {
433+
csr.pmpaddr_q[i][CVA6Cfg.PLEN-3:1], pmpcfg_q[i].addr_mode[1]})
433434
end
434435
endgenerate
435436
;
+358
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,358 @@
1+
!Feature
2+
next_elt_id: 15
3+
name: TRISTAN Restrictions
4+
id: 0
5+
display_order: 0
6+
subfeatures: !!omap
7+
- 000_general: !Subfeature
8+
name: 000_general
9+
tag: VP_PMP_F000_S000
10+
next_elt_id: 1
11+
display_order: 0
12+
items: !!omap
13+
- '000': !VerifItem
14+
name: '000'
15+
tag: VP_PMP_F000_S000_I000
16+
description: "\nthe verif plan is written for 32bits architecture only"
17+
reqt_doc: ''
18+
ref_mode: page
19+
ref_page: ''
20+
ref_section: ''
21+
ref_viewer: firefox
22+
verif_goals: ''
23+
pfc: -1
24+
test_type: -1
25+
cov_method: -1
26+
cores: -1
27+
coverage_loc: ''
28+
comments: ''
29+
- 001_number of harts: !Subfeature
30+
name: 001_number of harts
31+
tag: VP_PMP_F000_S001
32+
next_elt_id: 2
33+
display_order: 1
34+
items: !!omap
35+
- '000': !VerifItem
36+
name: '000'
37+
tag: VP_PMP_F000_S001_I000
38+
description: "\nthere is only 1 hart in cv32a6"
39+
reqt_doc: ''
40+
ref_mode: page
41+
ref_page: ''
42+
ref_section: ''
43+
ref_viewer: firefox
44+
verif_goals: ''
45+
pfc: -1
46+
test_type: -1
47+
cov_method: -1
48+
cores: -1
49+
coverage_loc: ''
50+
comments: ''
51+
- 002_mxlen: !Subfeature
52+
name: 002_mxlen
53+
tag: VP_PMP_F000_S002
54+
next_elt_id: 1
55+
display_order: 2
56+
items: !!omap
57+
- '000': !VerifItem
58+
name: '000'
59+
tag: VP_PMP_F000_S002_I000
60+
description: "\nMXLEN is always 32bits"
61+
reqt_doc: ''
62+
ref_mode: page
63+
ref_page: ''
64+
ref_section: ''
65+
ref_viewer: firefox
66+
verif_goals: ''
67+
pfc: -1
68+
test_type: -1
69+
cov_method: -1
70+
cores: -1
71+
coverage_loc: ''
72+
comments: ''
73+
- 003_xlen: !Subfeature
74+
name: 003_xlen
75+
tag: VP_PMP_F000_S003
76+
next_elt_id: 1
77+
display_order: 3
78+
items: !!omap
79+
- '000': !VerifItem
80+
name: '000'
81+
tag: VP_PMP_F000_S003_I000
82+
description: "\nXLEN=MXLEN=32, so the PMP address registers are XLEN bits
83+
long, so no zero-extension needed"
84+
reqt_doc: ''
85+
ref_mode: page
86+
ref_page: ''
87+
ref_section: ''
88+
ref_viewer: firefox
89+
verif_goals: ''
90+
pfc: -1
91+
test_type: -1
92+
cov_method: -1
93+
cores: -1
94+
coverage_loc: ''
95+
comments: ''
96+
- 004_granularity: !Subfeature
97+
name: 004_granularity
98+
tag: VP_PMP_F000_S004
99+
next_elt_id: 1
100+
display_order: 4
101+
items: !!omap
102+
- '000': !VerifItem
103+
name: '000'
104+
tag: VP_PMP_F000_S004_I000
105+
description: "\nPMP granularity is 8 bytes (G=1), but the verif plan is written
106+
to take G=0 into account (NA4)"
107+
reqt_doc: ''
108+
ref_mode: page
109+
ref_page: ''
110+
ref_section: ''
111+
ref_viewer: firefox
112+
verif_goals: ''
113+
pfc: -1
114+
test_type: -1
115+
cov_method: -1
116+
cores: -1
117+
coverage_loc: ''
118+
comments: ''
119+
- 005_number of pmp entries: !Subfeature
120+
name: 005_number of pmp entries
121+
tag: VP_PMP_F000_S005
122+
next_elt_id: 1
123+
display_order: 5
124+
items: !!omap
125+
- '000': !VerifItem
126+
name: '000'
127+
tag: VP_PMP_F000_S005_I000
128+
description: "\nthere are 8 HW implemented PMP entries"
129+
reqt_doc: ''
130+
ref_mode: page
131+
ref_page: ''
132+
ref_section: ''
133+
ref_viewer: firefox
134+
verif_goals: ''
135+
pfc: -1
136+
test_type: -1
137+
cov_method: -1
138+
cores: -1
139+
coverage_loc: ''
140+
comments: ''
141+
- 006_hardwired regions: !Subfeature
142+
name: 006_hardwired regions
143+
tag: VP_PMP_F000_S006
144+
next_elt_id: 1
145+
display_order: 6
146+
items: !!omap
147+
- '000': !VerifItem
148+
name: '000'
149+
tag: VP_PMP_F000_S006_I000
150+
description: "\nnone of the 8 PMP entries is hardwired privileges"
151+
reqt_doc: ''
152+
ref_mode: page
153+
ref_page: ''
154+
ref_section: ''
155+
ref_viewer: firefox
156+
verif_goals: ''
157+
pfc: -1
158+
test_type: -1
159+
cov_method: -1
160+
cores: -1
161+
coverage_loc: ''
162+
comments: ''
163+
- 007_virtual memory: !Subfeature
164+
name: 007_virtual memory
165+
tag: VP_PMP_F000_S007
166+
next_elt_id: 1
167+
display_order: 7
168+
items: !!omap
169+
- '000': !VerifItem
170+
name: '000'
171+
tag: VP_PMP_F000_S007_I000
172+
description: "\nno virtual memory is implemented\nas a consequence no page-based
173+
virtual memory is implemented"
174+
reqt_doc: ''
175+
ref_mode: page
176+
ref_page: ''
177+
ref_section: ''
178+
ref_viewer: firefox
179+
verif_goals: ''
180+
pfc: -1
181+
test_type: -1
182+
cov_method: -1
183+
cores: -1
184+
coverage_loc: ''
185+
comments: ''
186+
- 008_physical memory regions: !Subfeature
187+
name: 008_physical memory regions
188+
tag: VP_PMP_F000_S008
189+
next_elt_id: 1
190+
display_order: 8
191+
items: !!omap
192+
- '000': !VerifItem
193+
name: '000'
194+
tag: VP_PMP_F000_S008_I000
195+
description: "\nthe list of all physical memory regions\n - system memory
196+
regions\n - I-$\n - D-$\n - I-scratchpad (preload mode)\n - I-scratchpad
197+
(functional mode)\n - D-scratchpad\n - ahb_periph"
198+
reqt_doc: ''
199+
ref_mode: page
200+
ref_page: ''
201+
ref_section: ''
202+
ref_viewer: firefox
203+
verif_goals: ''
204+
pfc: -1
205+
test_type: -1
206+
cov_method: -1
207+
cores: -1
208+
coverage_loc: ''
209+
comments: ''
210+
- 009_pmp entry disabling: !Subfeature
211+
name: 009_pmp entry disabling
212+
tag: VP_PMP_F000_S009
213+
next_elt_id: 1
214+
display_order: 9
215+
items: !!omap
216+
- '000': !VerifItem
217+
name: '000'
218+
tag: VP_PMP_F000_S009_I000
219+
description: "\nwe assume an already written PMP entry (i) can be disabled\n\
220+
\ - if L=0, by clearing pmpcfg(i)\n - if L=1, only by hart reset"
221+
reqt_doc: ''
222+
ref_mode: page
223+
ref_page: ''
224+
ref_section: ''
225+
ref_viewer: firefox
226+
verif_goals: ''
227+
pfc: -1
228+
test_type: -1
229+
cov_method: -1
230+
cores: -1
231+
coverage_loc: ''
232+
comments: ''
233+
- 010_access-faults (violations): !Subfeature
234+
name: 010_access-faults (violations)
235+
tag: VP_PMP_F000_S010
236+
next_elt_id: 1
237+
display_order: 10
238+
items: !!omap
239+
- '000': !VerifItem
240+
name: '000'
241+
tag: VP_PMP_F000_S010_I000
242+
description: "\nThe testbench/testcases architecture ensures that:\n - any
243+
time there is an access-fault type, we check it matches the related access-type\n
244+
- all violations are trapped at the processor\n\n{Page 56 Volume II: RISC-V
245+
Privileged Architectures V20211203}\nPMP violations are always trapped precisely
246+
at the processor"
247+
reqt_doc: ''
248+
ref_mode: page
249+
ref_page: ''
250+
ref_section: ''
251+
ref_viewer: firefox
252+
verif_goals: ''
253+
pfc: -1
254+
test_type: -1
255+
cov_method: -1
256+
cores: -1
257+
coverage_loc: ''
258+
comments: ''
259+
- 011_testcases modularity: !Subfeature
260+
name: 011_testcases modularity
261+
tag: VP_PMP_F000_S011
262+
next_elt_id: 1
263+
display_order: 11
264+
items: !!omap
265+
- '000': !VerifItem
266+
name: '000'
267+
tag: VP_PMP_F000_S011_I000
268+
description: "\nThe verif plan is written assuming there is a way (like SystemVerilog
269+
interaction):\n - to factorize the testcases in code blocks (in particular
270+
configuration code block and access code block)\n - to randomize the code
271+
blocks data and addresses\n - to randomize the sequence of code blocks"
272+
reqt_doc: ''
273+
ref_mode: page
274+
ref_page: ''
275+
ref_section: ''
276+
ref_viewer: firefox
277+
verif_goals: ''
278+
pfc: -1
279+
test_type: -1
280+
cov_method: -1
281+
cores: -1
282+
coverage_loc: ''
283+
comments: ''
284+
- 012_access types: !Subfeature
285+
name: 012_access types
286+
tag: VP_PMP_F000_S012
287+
next_elt_id: 1
288+
display_order: 12
289+
items: !!omap
290+
- '000': !VerifItem
291+
name: '000'
292+
tag: VP_PMP_F000_S012_I000
293+
description: "at the time of writing,\nthe verif plan makes no distinction
294+
between load and load-reserved instructions. they are gathered in the same
295+
access type, subtleties unknown\nthe verif plan makes no distinction between
296+
store, store-conditional, and AMO instructions. they are gathered in the
297+
same access type, subtleties unknown"
298+
reqt_doc: ''
299+
ref_mode: page
300+
ref_page: ''
301+
ref_section: ''
302+
ref_viewer: firefox
303+
verif_goals: ''
304+
pfc: -1
305+
test_type: -1
306+
cov_method: -1
307+
cores: -1
308+
coverage_loc: ''
309+
comments: ''
310+
- 013_multiple accesses instructions: !Subfeature
311+
name: 013_multiple accesses instructions
312+
tag: VP_PMP_F000_S013
313+
next_elt_id: 1
314+
display_order: 13
315+
items: !!omap
316+
- '000': !VerifItem
317+
name: '000'
318+
tag: VP_PMP_F000_S013_I000
319+
description: "\nwe assume there is no added value to test multiple accesses
320+
instructions"
321+
reqt_doc: ''
322+
ref_mode: page
323+
ref_page: ''
324+
ref_section: ''
325+
ref_viewer: firefox
326+
verif_goals: ''
327+
pfc: -1
328+
test_type: -1
329+
cov_method: -1
330+
cores: -1
331+
coverage_loc: ''
332+
comments: ''
333+
- 014_misaligned instructions: !Subfeature
334+
name: 014_misaligned instructions
335+
tag: VP_PMP_F000_S014
336+
next_elt_id: 1
337+
display_order: 14
338+
items: !!omap
339+
- '000': !VerifItem
340+
name: '000'
341+
tag: VP_PMP_F000_S014_I000
342+
description: "\nwe assume that instructions are mandatorily aligned"
343+
reqt_doc: ''
344+
ref_mode: page
345+
ref_page: ''
346+
ref_section: ''
347+
ref_viewer: firefox
348+
verif_goals: ''
349+
pfc: -1
350+
test_type: -1
351+
cov_method: -1
352+
cores: -1
353+
coverage_loc: ''
354+
comments: ''
355+
vptool_gitrev: '$Id: a8b561f68549658061625891c533e7d45996bc9e $'
356+
io_fmt_gitrev: '$Id: 61ab4e53ca49e21d56c416f0af0fa04d148e8001 $'
357+
config_gitrev: '$Id: 5192fced2cfa10be5e18e827922e31e7489ed987 $'
358+
ymlcfg_gitrev: '$Id: ce5e73bd5e8e0099334cb657afb7a624a99afbda $'

0 commit comments

Comments
 (0)