Merge pull request #2020 from ThalesSiliconSecurity/cvxif_vp

CVXIF : Add custom instruction spec & add feature for custom instruction in the DV-plan
This commit is contained in:
Mike Thompson 2023-07-06 14:37:51 -04:00 committed by GitHub
commit 765c5ab4fd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 1684 additions and 2307 deletions

View file

@ -1,998 +0,0 @@
(VIssue Interface
p0
ccopy_reg
_reconstructor
p1
(cvp_pack
Ip
p2
c__builtin__
object
p3
Ntp4
Rp5
(dp6
Vprop_count
p7
I9
sVname
p8
g0
sVprop_list
p9
(dp10
sVip_num
p11
I0
sVwid_order
p12
I0
sVrfu_dict
p13
(dp14
sVrfu_list
p15
(lp16
(V000_issue_req signals stable
p17
g1
(cvp_pack
Prop
p18
g3
Ntp19
Rp20
(dp21
Vitem_count
p22
I1
sg8
g17
sVtag
p23
VVP_CVXIF_F000_S000
p24
sVitem_list
p25
(dp26
sg12
I0
sg15
(lp27
(V000
p28
g1
(cvp_pack
Item
p29
g3
Ntp30
Rp31
(dp32
g8
V000
p33
sg23
VVP_CVXIF_F000_S000_I000
p34
sVdescription
p35
VThe \u201cinstr\u201d and \u201cmode\u201d signals remain stable during an Issue request transaction.
p36
sVpurpose
p37
V
p38
sVverif_goals
p39
VCheck that \u201cmode\u201d and \u201cinstr\u201d are stable during an issue transaction (cannot be modified by an instruction when transaction issue is in process)
p40
sVcoverage_loc
p41
g38
sVref_mode
p42
Vpage
p43
sVref_page
p44
g38
sVref_section
p45
g38
sVref_viewer
p46
Vfirefox
p47
sVpfc
p48
I4
sVtest_type
p49
I3
sVcov_method
p50
I2
sVcores
p51
I56
sVcomments
p52
g38
sVstatus
p53
g38
sVsimu_target_list
p54
(lp55
sg15
(lp56
sVrfu_list_2
p57
(lp58
sg13
(dp59
Vlock_status
p60
I0
ssbtp61
asVrfu_list_1
p62
(lp63
sg57
(lp64
sg13
(dp65
sbtp66
a(V001_mode signal value
p67
g1
(g18
g3
Ntp68
Rp69
(dp70
g22
I2
sg8
g67
sg23
VVP_CVXIF_F000_S001
p71
sg25
(dp72
sg12
I1
sg15
(lp73
(V000
p74
g1
(g29
g3
Ntp75
Rp76
(dp77
g8
V000
p78
sg23
VVP_CVXIF_F000_S001_I000
p79
sg35
VWhen issue transaction starts, instruction and current CPU mode are provided
p80
sg37
g38
sg39
VCheck that a mode modification coming from execution of a first instruction is well provided to the following offloaded instruction
p81
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I3
sg49
I3
sg50
I1
sg51
I56
sg52
g38
sg53
g38
sg54
(lp82
sg15
(lp83
sg57
(lp84
sg13
(dp85
g60
I0
ssbtp86
a(V001
p87
g1
(g29
g3
Ntp88
Rp89
(dp90
g8
V001
p91
sg23
VVP_CVXIF_F000_S001_I001
p92
sg35
VCheck \u201cmode\u201d signal values.
p93
sg37
g38
sg39
VCheck that mode take a value that the CPU supports : Privilege level (2\u2019b00 = User, 2\u2019b01 = Supervisor, 2\u2019b10 = Reserved,\u000a 2\u2019b11 = Machine).
p94
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I-1
sg49
I-1
sg50
I-1
sg51
I56
sg52
g38
sg53
g38
sg54
(lp95
sg15
(lp96
sg57
(lp97
sg13
(dp98
g60
I0
ssbtp99
asg62
(lp100
sg57
(lp101
sg13
(dp102
sbtp103
a(V002_rs_valid signal transition order
p104
g1
(g18
g3
Ntp105
Rp106
(dp107
g22
I1
sg8
g104
sg23
VVP_CVXIF_F000_S002
p108
sg25
(dp109
sg12
I2
sg15
(lp110
(V000
p111
g1
(g29
g3
Ntp112
Rp113
(dp114
g8
V000
p115
sg23
VVP_CVXIF_F000_S002_I000
p116
sg35
VDuring a transaction, each bit of \u201crs_valid\u201d can transition from 0 to 1 but are not allowed to transition back to 0.
p117
sg37
g38
sg39
VFor issue transaction which lasts more than one cycle, check that asserted \u201crs_valid\u201d signals do not transition back to 0.(for i in [0;2] if rs_valid[i] = 1 then rs_valid[i] \u2192 0 cannot happen)
p118
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I4
sg49
I3
sg50
I2
sg51
I56
sg52
g38
sg53
g38
sg54
(lp119
sg15
(lp120
sg57
(lp121
sg13
(dp122
g60
I0
ssbtp123
asg62
(lp124
sg57
(lp125
sg13
(dp126
sbtp127
a(V003_rs signal value
p128
g1
(g18
g3
Ntp129
Rp130
(dp131
g22
I3
sg8
g128
sg23
VVP_CVXIF_F000_S003
p132
sg25
(dp133
sg12
I3
sg15
(lp134
(V000
p135
g1
(g29
g3
Ntp136
Rp137
(dp138
g8
V000
p139
sg23
VVP_CVXIF_F000_S003_I000
p140
sg35
VIf XLEN = X_RFR_WIDTH, then rs[X_NUM_RS-1:0] correspond to rs1 and rs2 CPU registers (and rs3 if X_NUM_RS = 3).
p141
sg37
g38
sg39
VFor every issue transaction check that rs signal correspond to rs1,rs2(rs3) value in CPU register file.
p142
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I3
sg49
I3
sg50
I1
sg51
I56
sg52
g38
sg53
g38
sg54
(lp143
sg15
(lp144
sg57
(lp145
sg13
(dp146
g60
I0
ssbtp147
a(V001
p148
g1
(g29
g3
Ntp149
Rp150
(dp151
g8
V001
p152
sg23
VVP_CVXIF_F000_S003_I001
p153
sg35
Vrs signals are only required to be stable during the part of a transaction in which these signals are considered to be valid.
p154
sg37
g38
sg39
VCheck that rs signals are stable when issue_valid==1 && the corresponding bit in rs_valid is 1.
p155
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I4
sg49
I-1
sg50
I2
sg51
I56
sg52
g38
sg53
g38
sg54
(lp156
sg15
(lp157
sg57
(lp158
sg13
(dp159
g60
I0
ssbtp160
a(V002
p161
g1
(g29
g3
Ntp162
Rp163
(dp164
g8
V002
p165
sg23
VVP_CVXIF_F000_S003_I002
p166
sg35
VIf XLEN != X_RFR_WIDTH , then rs[X_NUM_RS-1:0] correspond to even/odd register pair with rs1, rs2, (rs3) are even register and even register is provided in the 32 lower bits of rs signal.
p167
sg37
g38
sg39
VFor every issue transaction check that rs signal correspond to the concatenation of rs1/rs1+1,rs2/rs2+1, (rs3/rs3+1) value in CPU register file and even register is in the 32 lower bits of rs.
p168
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I-1
sg49
I-1
sg50
I-1
sg51
I56
sg52
g38
sg53
g38
sg54
(lp169
sg15
(lp170
sg57
(lp171
sg13
(dp172
g60
I0
ssbtp173
asg62
(lp174
sg57
(lp175
sg13
(dp176
sbtp177
a(V004_Default value for unaccepted instruction
p178
g1
(g18
g3
Ntp179
Rp180
(dp181
g22
I1
sg8
g178
sg23
VVP_CVXIF_F000_S004
p182
sg25
(dp183
sg12
I4
sg15
(lp184
(V000
p185
g1
(g29
g3
Ntp186
Rp187
(dp188
g8
V000
p189
sg23
VVP_CVXIF_F000_S004_I000
p190
sg35
VIf accept == 0 :\u000aWriteback == 0; dualwrite == 0; dualread == 0; loadstore == 0; exc = 0.
p191
sg37
g38
sg39
VCheck that for writeback; dualwrite; dualread; loadstore; exc signals if accept == 0 then all those signals are 0.
p192
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I4
sg49
I3
sg50
I2
sg51
I56
sg52
g38
sg53
g38
sg54
(lp193
sg15
(lp194
sg57
(lp195
sg13
(dp196
g60
I0
ssbtp197
asg62
(lp198
sg57
(lp199
sg13
(dp200
sbtp201
a(V005_Illegal Instruction causes
p202
g1
(g18
g3
Ntp203
Rp204
(dp205
g22
I1
sg8
g202
sg23
VVP_CVXIF_F000_S005
p206
sg25
(dp207
sg12
I5
sg15
(lp208
(V000
p209
g1
(g29
g3
Ntp210
Rp211
(dp212
g8
V000
p213
sg23
VVP_CVXIF_F000_S005_I000
p214
sg35
VThe CPU shall cause an illegal instruction if:\u000a- an instruction is considered to be valid by the CPU and accepted by the coprocessor (accept = 1)\u000a- neither to be valid by the CPU nor accepted by the coprocessor (accept = 0)
p215
sg37
g38
sg39
V- CPU causes illegal instruction for instruction accepted by the core and the coprocessor.\u000a- CPU causes illegal instruction exception for instruction that are not valid for coprocessor and CPU
p216
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I3
sg49
I3
sg50
I1
sg51
I56
sg52
g38
sg53
g38
sg54
(lp217
sg15
(lp218
sg57
(lp219
sg13
(dp220
g60
I0
ssbtp221
asg62
(lp222
sg57
(lp223
sg13
(dp224
sbtp225
a(V006_issue uniquness
p226
g1
(g18
g3
Ntp227
Rp228
(dp229
g22
I1
sg8
g226
sg23
VVP_CVXIF_F000_S006
p230
sg25
(dp231
sg12
I6
sg15
(lp232
(V000
p233
g1
(g29
g3
Ntp234
Rp235
(dp236
g8
V000
p237
sg23
VVP_CVXIF_F000_S006_I000
p238
sg35
VCheck for issue id validity.
p239
sg37
g38
sg39
VCheck that the issue interface doesn't issue an "id" that isn't legal to be used (has not fully completed).
p240
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I11
sg49
I3
sg50
I10
sg51
I56
sg52
g38
sg53
g38
sg54
(lp241
sg15
(lp242
sg57
(lp243
sg13
(dp244
g60
I0
ssbtp245
asg62
(lp246
sg57
(lp247
sg13
(dp248
sbtp249
a(V007_coprocessor decoding
p250
g1
(g18
g3
Ntp251
Rp252
(dp253
g22
I1
sg8
g250
sg23
VVP_CVXIF_F000_S007
p254
sg25
(dp255
sg12
I7
sg15
(lp256
(V000
p257
g1
(g29
g3
Ntp258
Rp259
(dp260
g8
V000
p261
sg23
VVP_CVXIF_F000_S007_I000
p262
sg35
VAccept = 1 if: \u000a- coprocessor can handle the instruction based on decoding \u201cinstr\u201dand "mode".\u000a- \u201cissue_valid\u201d == 1 and required bit(s) of \u201crs_valid\u201d are 1.
p263
sg37
g38
sg39
VTo be checked in coprocessor.
p264
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I3
sg49
I3
sg50
I1
sg51
I56
sg52
g38
sg53
g38
sg54
(lp265
sg15
(lp266
sg57
(lp267
sg13
(dp268
g60
I0
ssbtp269
asg62
(lp270
sg57
(lp271
sg13
(dp272
sbtp273
a(V008_Transaction definition
p274
g1
(g18
g3
Ntp275
Rp276
(dp277
g22
I1
sg8
g274
sg23
VVP_CVXIF_F000_S008
p278
sg25
(dp279
sg12
I8
sg15
(lp280
(V000
p281
g1
(g29
g3
Ntp282
Rp283
(dp284
g8
V000
p285
sg23
VVP_CVXIF_F000_S008_I000
p286
sg35
V\u201cissue_resp\u201d signals and \u201cissue_req\u201d signals are accepted when \u201cissue_valid\u201d == \u201cissue_ready\u201d == 1\u000a\u201cissue_resp\u201d is valid when "valid==ready==1".\u000a\u201cissue_req\u201d is valid when "valid==1"
p287
sg37
g38
sg39
VThe definition of a transaction. \u000aNot to be verified.
p288
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I11
sg49
I10
sg50
I10
sg51
I56
sg52
g38
sg53
g38
sg54
(lp289
sg15
(lp290
sg57
(lp291
sg13
(dp292
g60
I0
ssbtp293
asg62
(lp294
sg57
(lp295
sg13
(dp296
sbtp297
asVrfu_list_0
p298
(lp299
sg62
(lp300
sVvptool_gitrev
p301
V$Id: a782de3eec3de5ff99661fb165c09f541b4228d0 $
p302
sVio_fmt_gitrev
p303
V$Id: 2f6f9e7bc800d8b831382463dc706473c6c6ad8c $
p304
sVconfig_gitrev
p305
V$Id: 0422e19126dae20ffc4d5a84e4ce3de0b6eb4eb5 $
p306
sVymlcfg_gitrev
p307
V$Id: 286c689bd48b7a58f9a37754267895cffef1270c $
p308
sbtp309
.

View file

@ -0,0 +1,285 @@
!Feature
next_elt_id: 9
name: Issue Interface
id: 0
display_order: 0
subfeatures: !!omap
- 000_issue_req signals stable: !Subfeature
name: 000_issue_req signals stable
tag: VP_CVXIF_F000_S000
next_elt_id: 1
display_order: 0
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F000_S000_I000
description: The “instr” and “mode” signals remain stable during an Issue
request transaction.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that “mode” and “instr” are stable during an issue transaction
(cannot be modified by an instruction when transaction issue is in process)
pfc: 4
test_type: 3
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- 001_mode signal value: !Subfeature
name: 001_mode signal value
tag: VP_CVXIF_F000_S001
next_elt_id: 2
display_order: 1
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F000_S001_I000
description: When issue transaction starts, instruction and current CPU mode
are provided
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that a mode modification coming from execution of a first
instruction is well provided to the following offloaded instruction
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- '001': !VerifItem
name: '001'
tag: VP_CVXIF_F000_S001_I001
description: Check “mode” signal values.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Check that mode take a value that the CPU supports : Privilege\
\ level (2b00 = User, 2b01 = Supervisor, 2b10 = Reserved,\n 2b11 = Machine)."
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- 002_rs_valid signal transition order: !Subfeature
name: 002_rs_valid signal transition order
tag: VP_CVXIF_F000_S002
next_elt_id: 1
display_order: 2
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F000_S002_I000
description: During a transaction, each bit of “rs_valid” can transition from
0 to 1 but are not allowed to transition back to 0.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: For issue transaction which lasts more than one cycle, check
that asserted “rs_valid” signals do not transition back to 0.(for i in [0;2]
if rs_valid[i] = 1 then rs_valid[i] → 0 cannot happen)
pfc: 4
test_type: 3
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- 003_rs signal value: !Subfeature
name: 003_rs signal value
tag: VP_CVXIF_F000_S003
next_elt_id: 3
display_order: 3
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F000_S003_I000
description: If XLEN = X_RFR_WIDTH, then rs[X_NUM_RS-1:0] correspond to rs1
and rs2 CPU registers (and rs3 if X_NUM_RS = 3).
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: For every issue transaction check that rs signal correspond to
rs1,rs2(rs3) value in CPU register file.
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- '001': !VerifItem
name: '001'
tag: VP_CVXIF_F000_S003_I001
description: rs signals are only required to be stable during the part of
a transaction in which these signals are considered to be valid.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that rs signals are stable when issue_valid==1 && the corresponding
bit in rs_valid is 1.
pfc: 4
test_type: -1
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- '002': !VerifItem
name: '002'
tag: VP_CVXIF_F000_S003_I002
description: If XLEN != X_RFR_WIDTH , then rs[X_NUM_RS-1:0] correspond to
even/odd register pair with rs1, rs2, (rs3) are even register and even register
is provided in the 32 lower bits of rs signal.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "For every issue transaction check that rs signal correspond\
\ to the concatenation of rs1/rs1+1,rs2/rs2+1, (rs3/rs3+1) value in CPU\
\ register file and even register is in the 32 lower bits of rs.\n\nCan't\
\ be check XLEN == X_RFR_WIDTH"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- 004_Default value for unaccepted instruction: !Subfeature
name: 004_Default value for unaccepted instruction
tag: VP_CVXIF_F000_S004
next_elt_id: 1
display_order: 4
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F000_S004_I000
description: "If accept == 0 :\nWriteback == 0; dualwrite == 0; dualread ==\
\ 0; loadstore == 0; exc = 0."
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that for writeback; dualwrite; dualread; loadstore; exc
signals if accept == 0 then all those signals are 0.
pfc: 4
test_type: 3
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- 005_Illegal Instruction causes: !Subfeature
name: 005_Illegal Instruction causes
tag: VP_CVXIF_F000_S005
next_elt_id: 1
display_order: 5
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F000_S005_I000
description: "The CPU shall cause an illegal instruction if:\n- an instruction\
\ is considered to be valid by the CPU and accepted by the coprocessor (accept\
\ = 1)\n- neither to be valid by the CPU nor accepted by the coprocessor\
\ (accept = 0)"
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "- CPU causes illegal instruction for instruction accepted by\
\ the core and the coprocessor.\n- CPU causes illegal instruction exception\
\ for instruction that are not valid for coprocessor and CPU"
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- 006_issue uniquness: !Subfeature
name: 006_issue uniquness
tag: VP_CVXIF_F000_S006
next_elt_id: 1
display_order: 6
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F000_S006_I000
description: Check for issue id validity.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that the issue interface doesn't issue an "id" that isn't
legal to be used (has not fully completed).
pfc: 11
test_type: 3
cov_method: 10
cores: 56
coverage_loc: ''
comments: ''
- 007_coprocessor decoding: !Subfeature
name: 007_coprocessor decoding
tag: VP_CVXIF_F000_S007
next_elt_id: 1
display_order: 7
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F000_S007_I000
description: "Accept = 1 if: \n- coprocessor can handle the instruction based\
\ on decoding “instr” and \"mode\".\n- “issue_valid” == 1 and required bit(s)\
\ of “rs_valid” are 1."
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: To be checked in coprocessor.
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- 008_Transaction definition: !Subfeature
name: 008_Transaction definition
tag: VP_CVXIF_F000_S008
next_elt_id: 1
display_order: 8
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F000_S008_I000
description: "“issue_resp” signals and “issue_req” signals are accepted when\
\ “issue_valid” == “issue_ready” == 1\n“issue_resp” is valid when \"valid==ready==1\"\
.\n“issue_req” is valid when \"valid==1\""
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "The definition of a transaction. \nNot to be verified."
pfc: 11
test_type: 10
cov_method: 10
cores: 56
coverage_loc: ''
comments: ''
vptool_gitrev: '$Id: b0efb3ae3f9057b71a577d43c2b77f1cfb2ef82f $'
io_fmt_gitrev: '$Id: 7ee5d68801f5498a957bcbe23fcad87817a364c5 $'
config_gitrev: '$Id: 0422e19126dae20ffc4d5a84e4ce3de0b6eb4eb5 $'
ymlcfg_gitrev: '$Id: 286c689bd48b7a58f9a37754267895cffef1270c $'

View file

@ -1,418 +0,0 @@
(VCommit Interface
p0
ccopy_reg
_reconstructor
p1
(cvp_pack
Ip
p2
c__builtin__
object
p3
Ntp4
Rp5
(dp6
Vprop_count
p7
I4
sVname
p8
g0
sVprop_list
p9
(dp10
sVip_num
p11
I1
sVwid_order
p12
I1
sVrfu_dict
p13
(dp14
sVrfu_list
p15
(lp16
(V000_commit_valid pulse
p17
g1
(cvp_pack
Prop
p18
g3
Ntp19
Rp20
(dp21
Vitem_count
p22
I1
sg8
g17
sVtag
p23
VVP_CVXIF_F001_S000
p24
sVitem_list
p25
(dp26
sg12
I0
sg15
(lp27
(V000
p28
g1
(cvp_pack
Item
p29
g3
Ntp30
Rp31
(dp32
g8
V000
p33
sg23
VVP_CVXIF_F001_S000_I000
p34
sVdescription
p35
VThe \u201ccommit_valid\u201d == 1 exactly one clk cycle for every offloaded Instruction by the coprocessor (whether accepted or not).
p36
sVpurpose
p37
V
p38
sVverif_goals
p39
VFor every offloaded instruction, check that commit_valid is asserted exactly one clk cycle ( is a pulse ).
p40
sVcoverage_loc
p41
g38
sVref_mode
p42
Vpage
p43
sVref_page
p44
g38
sVref_section
p45
g38
sVref_viewer
p46
Vfirefox
p47
sVpfc
p48
I4
sVtest_type
p49
I3
sVcov_method
p50
I2
sVcores
p51
I56
sVcomments
p52
g38
sVstatus
p53
g38
sVsimu_target_list
p54
(lp55
sg15
(lp56
sVrfu_list_2
p57
(lp58
sg13
(dp59
Vlock_status
p60
I0
ssbtp61
asVrfu_list_1
p62
(lp63
sg57
(lp64
sg13
(dp65
sbtp66
a(V001_commit transaction uniquness
p67
g1
(g18
g3
Ntp68
Rp69
(dp70
g22
I1
sg8
g67
sg23
VVP_CVXIF_F001_S001
p71
sg25
(dp72
sg12
I1
sg15
(lp73
(V000
p74
g1
(g29
g3
Ntp75
Rp76
(dp77
g8
V000
p78
sg23
VVP_CVXIF_F001_S001_I000
p79
sg35
VThere is a unique commit transaction for every issue transaction (unique until an instruction has "fully completed" = its result has been submitted).
p80
sg37
g38
sg39
VCheck that the commit interface doesn't commit an "id" that isn't legal to be used (hasn't been seen in earlier stages, or has not fully completed).
p81
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I1
sg49
I10
sg50
I10
sg51
I56
sg52
g38
sg53
g38
sg54
(lp82
sg15
(lp83
sg57
(lp84
sg13
(dp85
g60
I0
ssbtp86
asg62
(lp87
sg57
(lp88
sg13
(dp89
sbtp90
a(V002_commit transaction for every issue transaction
p91
g1
(g18
g3
Ntp92
Rp93
(dp94
g22
I1
sg8
g91
sg23
VVP_CVXIF_F001_S002
p95
sg25
(dp96
sg12
I2
sg15
(lp97
(V000
p98
g1
(g29
g3
Ntp99
Rp100
(dp101
g8
V000
p102
sg23
VVP_CVXIF_F001_S002_I000
p103
sg35
V- The CPU shall perform a commit transaction for every issue transaction, independent of the accept value of the issue transaction.\u000a- For each offloaded and accepted instruction the core is guaranteed to (eventually) signal that such an instruction is either no longer speculative and can be committed (commit_valid is 1 and commit_kill is 0) or that the instruction must be killed (commit_valid is 1 and commit_kill is 1).
p104
sg37
g38
sg39
VCheck that for each issue transaction, the commit transaction is sent at the same clock cycle than the issue transaction, or at any clock cycle after the issue transaction.
p105
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I4
sg49
I3
sg50
I2
sg51
I56
sg52
g38
sg53
g38
sg54
(lp106
sg15
(lp107
sg57
(lp108
sg13
(dp109
g60
I0
ssbtp110
asg62
(lp111
sg57
(lp112
sg13
(dp113
sbtp114
a(V003_Transaction definition
p115
g1
(g18
g3
Ntp116
Rp117
(dp118
g22
I1
sg8
g115
sg23
VVP_CVXIF_F001_S003
p119
sg25
(dp120
sg12
I3
sg15
(lp121
(V000
p122
g1
(g29
g3
Ntp123
Rp124
(dp125
g8
V000
p126
sg23
VVP_CVXIF_F001_S003_I000
p127
sg35
VThe signals in commit are valid when commit_valid is 1.
p128
sg37
g38
sg39
VThe definition of a transaction.\u000aNot to be verified.
p129
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I11
sg49
I-1
sg50
I10
sg51
I56
sg52
g38
sg53
g38
sg54
(lp130
sg15
(lp131
sg57
(lp132
sg13
(dp133
g60
I0
ssbtp134
asg62
(lp135
sg57
(lp136
sg13
(dp137
sbtp138
asVrfu_list_0
p139
(lp140
sg62
(lp141
sVvptool_gitrev
p142
V$Id: a782de3eec3de5ff99661fb165c09f541b4228d0 $
p143
sVio_fmt_gitrev
p144
V$Id: 2f6f9e7bc800d8b831382463dc706473c6c6ad8c $
p145
sVconfig_gitrev
p146
V$Id: 0422e19126dae20ffc4d5a84e4ce3de0b6eb4eb5 $
p147
sVymlcfg_gitrev
p148
V$Id: 286c689bd48b7a58f9a37754267895cffef1270c $
p149
sbtp150
.

View file

@ -0,0 +1,110 @@
!Feature
next_elt_id: 4
name: Commit Interface
id: 1
display_order: 1
subfeatures: !!omap
- 000_commit_valid pulse: !Subfeature
name: 000_commit_valid pulse
tag: VP_CVXIF_F001_S000
next_elt_id: 1
display_order: 0
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F001_S000_I000
description: The “commit_valid” == 1 exactly one clk cycle for every offloaded Instruction
by the coprocessor (whether accepted or not).
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: For every offloaded instruction, check that commit_valid is
asserted exactly one clk cycle ( is a pulse ).
pfc: 4
test_type: 3
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- 001_commit transaction uniquness: !Subfeature
name: 001_commit transaction uniquness
tag: VP_CVXIF_F001_S001
next_elt_id: 1
display_order: 1
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F001_S001_I000
description: There is a unique commit transaction for every issue transaction
(unique until an instruction has "fully completed" = its result has been
submitted).
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that the commit interface doesn't commit an "id" that isn't
legal to be used (hasn't been seen in earlier stages, or has not fully completed).
pfc: 1
test_type: 10
cov_method: 10
cores: 56
coverage_loc: ''
comments: ''
- 002_commit transaction for every issue transaction: !Subfeature
name: 002_commit transaction for every issue transaction
tag: VP_CVXIF_F001_S002
next_elt_id: 1
display_order: 2
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F001_S002_I000
description: "- The CPU shall perform a commit transaction for every issue\
\ transaction, independent of the accept value of the issue transaction.\n\
- For each offloaded and accepted instruction the core is guaranteed to\
\ (eventually) signal that such an instruction is either no longer speculative\
\ and can be committed (commit_valid is 1 and commit_kill is 0) or that\
\ the instruction must be killed (commit_valid is 1 and commit_kill is 1)."
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that for each issue transaction, the commit transaction
is sent at the same clock cycle than the issue transaction, or at any clock
cycle after the issue transaction.
pfc: 4
test_type: 3
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- 003_Transaction definition: !Subfeature
name: 003_Transaction definition
tag: VP_CVXIF_F001_S003
next_elt_id: 1
display_order: 3
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F001_S003_I000
description: The signals in commit are valid when commit_valid is 1.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "The definition of a transaction.\nNot to be verified."
pfc: 11
test_type: -1
cov_method: 10
cores: 56
coverage_loc: ''
comments: ''
vptool_gitrev: '$Id: b0efb3ae3f9057b71a577d43c2b77f1cfb2ef82f $'
io_fmt_gitrev: '$Id: 7ee5d68801f5498a957bcbe23fcad87817a364c5 $'
config_gitrev: '$Id: 0422e19126dae20ffc4d5a84e4ce3de0b6eb4eb5 $'
ymlcfg_gitrev: '$Id: 286c689bd48b7a58f9a37754267895cffef1270c $'

View file

@ -1,860 +0,0 @@
(VResult Interface
p0
ccopy_reg
_reconstructor
p1
(cvp_pack
Ip
p2
c__builtin__
object
p3
Ntp4
Rp5
(dp6
Vprop_count
p7
I8
sVname
p8
g0
sVprop_list
p9
(dp10
sVip_num
p11
I2
sVwid_order
p12
I2
sVrfu_dict
p13
(dp14
sVrfu_list
p15
(lp16
(V000_no speculative result transaction
p17
g1
(cvp_pack
Prop
p18
g3
Ntp19
Rp20
(dp21
Vitem_count
p22
I1
sg8
g17
sVtag
p23
VVP_CVXIF_F002_S000
p24
sVitem_list
p25
(dp26
sg12
I0
sg15
(lp27
(V000
p28
g1
(cvp_pack
Item
p29
g3
Ntp30
Rp31
(dp32
g8
V000
p33
sg23
VVP_CVXIF_F002_S000_I000
p34
sVdescription
p35
VA coprocessor is not allowed to perform speculative result transactions.
p36
sVpurpose
p37
V
p38
sVverif_goals
p39
VThere is no result transaction for instructions that haven't been committed. Check that Result valid is only asserted for instructions that were committed (commit_valid == 1 && commit_kill == 0).
p40
sVcoverage_loc
p41
g38
sVref_mode
p42
Vpage
p43
sVref_page
p44
g38
sVref_section
p45
g38
sVref_viewer
p46
Vfirefox
p47
sVpfc
p48
I11
sVtest_type
p49
I10
sVcov_method
p50
I10
sVcores
p51
I56
sVcomments
p52
g38
sVstatus
p53
g38
sVsimu_target_list
p54
(lp55
sg15
(lp56
sVrfu_list_2
p57
(lp58
sg13
(dp59
Vlock_status
p60
I0
ssbtp61
asVrfu_list_1
p62
(lp63
sg57
(lp64
sg13
(dp65
sbtp66
a(V001_out of order result transaction
p67
g1
(g18
g3
Ntp68
Rp69
(dp70
g22
I1
sg8
g67
sg23
VVP_CVXIF_F002_S001
p71
sg25
(dp72
sg12
I1
sg15
(lp73
(V000
p74
g1
(g29
g3
Ntp75
Rp76
(dp77
g8
V000
p78
sg23
VVP_CVXIF_F002_S001_I000
p79
sg35
VA coprocessor is allowed to provide results to the core in an out of order fashion.
p80
sg37
g38
sg39
VCheck that the CPU is able to receive the result in an out of order fashion.
p81
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I3
sg49
I3
sg50
I1
sg51
I56
sg52
g38
sg53
g38
sg54
(lp82
sg15
(lp83
sg57
(lp84
sg13
(dp85
g60
I0
ssbtp86
asg62
(lp87
sg57
(lp88
sg13
(dp89
sbtp90
a(V002_result transaction uniquness
p91
g1
(g18
g3
Ntp92
Rp93
(dp94
g22
I1
sg8
g91
sg23
VVP_CVXIF_F002_S002
p95
sg25
(dp96
sg12
I2
sg15
(lp97
(V000
p98
g1
(g29
g3
Ntp99
Rp100
(dp101
g8
V000
p102
sg23
VVP_CVXIF_F002_S002_I000
p103
sg35
VEach accepted offloaded (committed and not killed) instruction shall have exactly one result group transaction (even if no data needs to be written back to the CPU\u2019s register file).
p104
sg37
g38
sg39
VThere is an unique result transaction for every accepted and commit instruction.
p105
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I11
sg49
I10
sg50
I10
sg51
I56
sg52
g38
sg53
g38
sg54
(lp106
sg15
(lp107
sg57
(lp108
sg13
(dp109
g60
I0
ssbtp110
asg62
(lp111
sg57
(lp112
sg13
(dp113
sbtp114
a(V003_result packet stability
p115
g1
(g18
g3
Ntp116
Rp117
(dp118
g22
I1
sg8
g115
sg23
VVP_CVXIF_F002_S003
p119
sg25
(dp120
sg12
I3
sg15
(lp121
(V000
p122
g1
(g29
g3
Ntp123
Rp124
(dp125
g8
V000
p126
sg23
VVP_CVXIF_F002_S003_I000
p127
sg35
VThe signals in result shall remain stable during a result transaction (except data ...)
p128
sg37
g38
sg39
VCheck that result signals (except data) are stable during result transaction (result_valid==1 jusqu'à valid==ready ==1)
p129
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I4
sg49
I3
sg50
I2
sg51
I56
sg52
g38
sg53
g38
sg54
(lp130
sg15
(lp131
sg57
(lp132
sg13
(dp133
g60
I0
ssbtp134
asg62
(lp135
sg57
(lp136
sg13
(dp137
sbtp138
a(V004_data stability
p139
g1
(g18
g3
Ntp140
Rp141
(dp142
g22
I1
sg8
g139
sg23
VVP_CVXIF_F002_S004
p143
sg25
(dp144
sg12
I4
sg15
(lp145
(V000
p146
g1
(g29
g3
Ntp147
Rp148
(dp149
g8
V000
p150
sg23
VVP_CVXIF_F002_S004_I000
p151
sg35
VData is only required to remain stable during result transactions in which "we" is not 0.
p152
sg37
g38
sg39
VCheck that "data" remains stable when we==1.
p153
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I4
sg49
I3
sg50
I2
sg51
I56
sg52
g38
sg53
g38
sg54
(lp154
sg15
(lp155
sg57
(lp156
sg13
(dp157
g60
I0
ssbtp158
asg62
(lp159
sg57
(lp160
sg13
(dp161
sbtp162
a(V005_synchronous exception
p163
g1
(g18
g3
Ntp164
Rp165
(dp166
g22
I3
sg8
g163
sg23
VVP_CVXIF_F002_S005
p167
sg25
(dp168
sg12
I5
sg15
(lp169
(V000
p170
g1
(g29
g3
Ntp171
Rp172
(dp173
g8
V000
p174
sg23
VVP_CVXIF_F002_S005_I000
p175
sg35
VThe exc is used to signal synchronous exceptions. A synchronous exception will lead to a trap in CPU unless the corresponding instruction is killed.
p176
sg37
g38
sg39
VCheck that synchronous exception (exc ==1) leads to a trap in the CPU if the instruction is committed.
p177
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I3
sg49
I3
sg50
I1
sg51
I56
sg52
g38
sg53
g38
sg54
(lp178
sg15
(lp179
sg57
(lp180
sg13
(dp181
g60
I0
ssbtp182
a(V001
p183
g1
(g29
g3
Ntp184
Rp185
(dp186
g8
V001
p187
sg23
VVP_CVXIF_F002_S005_I001
p188
sg35
Vexccode provides the least significant bits of the exception code bitfield of the mcause CSR.
p189
sg37
g38
sg39
VCheck that exccode signal is the value of the mcause CSR when exc == 1.
p190
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I-1
sg49
I-1
sg50
I-1
sg51
I56
sg52
g38
sg53
g38
sg54
(lp191
sg15
(lp192
sg57
(lp193
sg13
(dp194
g60
I0
ssbtp195
a(V002
p196
g1
(g29
g3
Ntp197
Rp198
(dp199
g8
V002
p200
sg23
VVP_CVXIF_F002_S005_I002
p201
sg35
V "we" shall be driven to 0 by the coprocessor for synchronous exceptions.
p202
sg37
g38
sg39
VCheck that "we" signal == 0 when exc == 1.
p203
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I4
sg49
I-1
sg50
I2
sg51
I56
sg52
g38
sg53
g38
sg54
(lp204
sg15
(lp205
sg57
(lp206
sg13
(dp207
g60
I0
ssbtp208
asg62
(lp209
sg57
(lp210
sg13
(dp211
sbtp212
a(V006_"we" value when dualwrite
p213
g1
(g18
g3
Ntp214
Rp215
(dp216
g22
I1
sg8
g213
sg23
VVP_CVXIF_F002_S006
p217
sg25
(dp218
sg12
I6
sg15
(lp219
(V000
p220
g1
(g29
g3
Ntp221
Rp222
(dp223
g8
V000
p224
sg23
VVP_CVXIF_F002_S006_I000
p225
sg35
Vwe is 2 bits wide when XLEN` = 32 and X_RFW_WIDTH = 64, and 1 bit wide otherwise. If "we" is 2 bits wide, then we[1] is only allowed to be 1 if we[0] is 1 as well (i.e. for dual writeback).
p226
sg37
g38
sg39
VFor dualwrite instruction, check that we[1]==1 is only allowed if we[0] == 1.
p227
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I4
sg49
I3
sg50
I2
sg51
I56
sg52
g38
sg53
g38
sg54
(lp228
sg15
(lp229
sg57
(lp230
sg13
(dp231
g60
I0
ssbtp232
asg62
(lp233
sg57
(lp234
sg13
(dp235
sbtp236
a(V007_proper result transaction
p237
g1
(g18
g3
Ntp238
Rp239
(dp240
g22
I1
sg8
g237
sg23
VVP_CVXIF_F002_S007
p241
sg25
(dp242
sg12
I7
sg15
(lp243
(V000
p244
g1
(g29
g3
Ntp245
Rp246
(dp247
g8
V000
p248
sg23
VVP_CVXIF_F002_S007_I000
p249
sg35
VResult transaction starts in the cycle that result_valid = 1 and ends in the cycle that both result_valid == result_ready == 1.
p250
sg37
g38
sg39
VCheck that result transaction ends properly.
p251
sg41
g38
sg42
g43
sg44
g38
sg45
g38
sg46
g47
sg48
I4
sg49
I3
sg50
I2
sg51
I56
sg52
g38
sg53
g38
sg54
(lp252
sg15
(lp253
sg57
(lp254
sg13
(dp255
g60
I0
ssbtp256
asg62
(lp257
sg57
(lp258
sg13
(dp259
sbtp260
asVrfu_list_0
p261
(lp262
sg62
(lp263
sVvptool_gitrev
p264
V$Id: a782de3eec3de5ff99661fb165c09f541b4228d0 $
p265
sVio_fmt_gitrev
p266
V$Id: 2f6f9e7bc800d8b831382463dc706473c6c6ad8c $
p267
sVconfig_gitrev
p268
V$Id: 0422e19126dae20ffc4d5a84e4ce3de0b6eb4eb5 $
p269
sVymlcfg_gitrev
p270
V$Id: 286c689bd48b7a58f9a37754267895cffef1270c $
p271
sbtp272
.

View file

@ -0,0 +1,238 @@
!Feature
next_elt_id: 8
name: Result Interface
id: 2
display_order: 2
subfeatures: !!omap
- 000_no speculative result transaction: !Subfeature
name: 000_no speculative result transaction
tag: VP_CVXIF_F002_S000
next_elt_id: 1
display_order: 0
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F002_S000_I000
description: A coprocessor is not allowed to perform speculative result transactions.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: There is no result transaction for instructions that haven't
been committed. Check that Result valid is only asserted for instructions
that were committed (commit_valid == 1 && commit_kill == 0).
pfc: 11
test_type: 10
cov_method: 10
cores: 56
coverage_loc: ''
comments: ''
- 001_out of order result transaction: !Subfeature
name: 001_out of order result transaction
tag: VP_CVXIF_F002_S001
next_elt_id: 1
display_order: 1
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F002_S001_I000
description: A coprocessor is allowed to provide results to the core in an
out of order fashion.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that the CPU is able to receive the result in an out of
order fashion.
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- 002_result transaction uniquness: !Subfeature
name: 002_result transaction uniquness
tag: VP_CVXIF_F002_S002
next_elt_id: 1
display_order: 2
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F002_S002_I000
description: Each accepted offloaded (committed and not killed) instruction
shall have exactly one result group transaction (even if no data needs to
be written back to the CPUs register file).
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: There is an unique result transaction for every accepted and
commit instruction.
pfc: 11
test_type: 10
cov_method: 10
cores: 56
coverage_loc: ''
comments: ''
- 003_result packet stability: !Subfeature
name: 003_result packet stability
tag: VP_CVXIF_F002_S003
next_elt_id: 1
display_order: 3
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F002_S003_I000
description: The signals in result shall remain stable during a result transaction
(except data ...)
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that result signals (except data) are stable during result
transaction (result_valid==1 jusqu'à valid==ready ==1)
pfc: 4
test_type: 3
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- 004_data stability: !Subfeature
name: 004_data stability
tag: VP_CVXIF_F002_S004
next_elt_id: 1
display_order: 4
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F002_S004_I000
description: Data is only required to remain stable during result transactions
in which "we" is not 0.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that "data" remains stable when we==1.
pfc: 4
test_type: 3
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- 005_synchronous exception: !Subfeature
name: 005_synchronous exception
tag: VP_CVXIF_F002_S005
next_elt_id: 3
display_order: 5
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F002_S005_I000
description: The exc is used to signal synchronous exceptions. A synchronous
exception will lead to a trap in CPU unless the corresponding instruction
is killed.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that synchronous exception (exc ==1) leads to a trap in
the CPU if the instruction is committed.
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- '001': !VerifItem
name: '001'
tag: VP_CVXIF_F002_S005_I001
description: exccode provides the least significant bits of the exception
code bitfield of the mcause CSR.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that exccode signal is the value of the mcause CSR when
exc == 1.
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- '002': !VerifItem
name: '002'
tag: VP_CVXIF_F002_S005_I002
description: '"we" shall be driven to 0 by the coprocessor for synchronous
exceptions.'
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that "we" signal == 0 when exc == 1.
pfc: 4
test_type: -1
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- 006_"we" value when dualwrite: !Subfeature
name: 006_"we" value when dualwrite
tag: VP_CVXIF_F002_S006
next_elt_id: 1
display_order: 6
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F002_S006_I000
description: we is 2 bits wide when XLEN = 32 and X_RFW_WIDTH = 64, and 1
bit wide otherwise. If "we" is 2 bits wide, then we[1] is only allowed to
be 1 if we[0] is 1 as well (i.e. for dual writeback).
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "For dualwrite instruction, check that we[1]==1 is only allowed\
\ if we[0] == 1.\n\nDualwrite not supported (for now)"
pfc: 4
test_type: 3
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
- 007_proper result transaction: !Subfeature
name: 007_proper result transaction
tag: VP_CVXIF_F002_S007
next_elt_id: 1
display_order: 7
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F002_S007_I000
description: Result transaction starts in the cycle that result_valid = 1
and ends in the cycle that both result_valid == result_ready == 1.
reqt_doc: https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check that result transaction ends properly.
pfc: 4
test_type: 3
cov_method: 2
cores: 56
coverage_loc: ''
comments: ''
vptool_gitrev: '$Id: b0efb3ae3f9057b71a577d43c2b77f1cfb2ef82f $'
io_fmt_gitrev: '$Id: 7ee5d68801f5498a957bcbe23fcad87817a364c5 $'
config_gitrev: '$Id: 0422e19126dae20ffc4d5a84e4ce3de0b6eb4eb5 $'
ymlcfg_gitrev: '$Id: 286c689bd48b7a58f9a37754267895cffef1270c $'

View file

@ -0,0 +1,402 @@
!Feature
next_elt_id: 8
name: Custom Instructions
id: 3
display_order: 3
subfeatures: !!omap
- 000_CUS_ADD: !Subfeature
name: 000_CUS_ADD
tag: VP_CVXIF_F003_S000
next_elt_id: 4
display_order: 0
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F003_S000_I000
description: "cus_add rd, rs1, rs2\nrd = rs1 + rs2\ncus_add works in all privilege\
\ modes"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Register operands:\n\nAll possible rs1 registers are used.\n\
All possible rs2 registers are used.\nAll possible rd registers are used.\n\
All possible register combinations where rs1 == rd are used\nAll possible\
\ register combinations where rs2 == rd are used"
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- '001': !VerifItem
name: '001'
tag: VP_CVXIF_F003_S000_I001
description: "cus_add rd, rs1, rs2\nrd = rs1 + rs2\ncus_add works in all privilege\
\ modes"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Input operands:\n\nrs1 value is +ve, -ve and zero\nrs2 value\
\ is +ve, -ve and zero\nAll combinations of rs1 and rs2 +ve, -ve, and zero\
\ values are used\nAll bits of rs1 are toggled\nAll bits of rs2 are toggled"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- '002': !VerifItem
name: '002'
tag: VP_CVXIF_F003_S000_I002
description: "cus_add rd, rs1, rs2\nrd = rs1 + rs2\ncus_add works in all privilege\
\ modes"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Output result:\n\nrd value is +ve, -ve and zero\nAll bits of\
\ rd are toggled"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- 001_CUS_NOP: !Subfeature
name: 001_CUS_NOP
tag: VP_CVXIF_F003_S001
next_elt_id: 1
display_order: 1
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F003_S001_I000
description: No operation Instruction
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Instruction executed
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- 003_CUS_S_ADD: !Subfeature
name: 003_CUS_S_ADD
tag: VP_CVXIF_F003_S003
next_elt_id: 3
display_order: 3
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F003_S003_I000
description: "cus_s_add rd, rs1, rs2\nrd = rs1 + rs2\ncus_s_add works in supervisor\
\ privilege mode"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Register operands:\n\nif (mode == s)\nAll possible rs1 registers\
\ are used.\nAll possible rs2 registers are used.\nAll possible rd registers\
\ are used.\nAll possible register combinations where rs1 == rd are used\n\
All possible register combinations where rs2 == rd are used\n\nelse if (mode\
\ != s)\nillegal exception raised on hte CPU"
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- '001': !VerifItem
name: '001'
tag: VP_CVXIF_F003_S003_I001
description: "cus_s_add rd, rs1, rs2\nrd = rs1 + rs2\ncus_s_add works in supervisor\
\ privilege mode"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Input operands:\n\nif (mode == s)\nrs1 value is +ve, -ve and\
\ zero\nrs2 value is +ve, -ve and zero\nAll combinations of rs1 and rs2\
\ +ve, -ve, and zero values are used\nAll bits of rs1 are toggled\nAll bits\
\ of rs2 are toggled\n\nelse if (mode != s)\nillegal exception raised on\
\ the CPU"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- '002': !VerifItem
name: '002'
tag: VP_CVXIF_F003_S003_I002
description: "cus_s_add rd, rs1, rs2\nrd = rs1 + rs2\ncus_s_add works in supervisor\
\ privilege mode"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Output operands:\n\nif (mode == s)\nrd value is +ve, -ve and\
\ zero\nAll bits of rd are toggled\n\nelse if (mode != s)\nillegal exception\
\ raised on the CPU"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- 004_CUS_U_ADD: !Subfeature
name: 004_CUS_U_ADD
tag: VP_CVXIF_F003_S004
next_elt_id: 3
display_order: 4
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F003_S004_I000
description: "cus_u_add rd, rs1, rs2\nrd = rs1 + rs2\ncus_u_add works in User\
\ privilege mode"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Register operands:\n\nif (mode == u)\nAll possible rs1 registers\
\ are used.\nAll possible rs2 registers are used.\nAll possible rd registers\
\ are used.\nAll possible register combinations where rs1 == rd are used\n\
All possible register combinations where rs2 == rd are used\n\nelse if (mode\
\ != u)\nillegal exception raised on hte CPU"
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- '001': !VerifItem
name: '001'
tag: VP_CVXIF_F003_S004_I001
description: "cus_u_add rd, rs1, rs2\nrd = rs1 + rs2\ncus_u_add works in User\
\ privilege mode"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Input operands:\n\nif (mode == u)\nrs1 value is +ve, -ve and\
\ zero\nrs2 value is +ve, -ve and zero\nAll combinations of rs1 and rs2\
\ +ve, -ve, and zero values are used\nAll bits of rs1 are toggled\nAll bits\
\ of rs2 are toggled\n\nelse if (mode != u)\nillegal exception raised on\
\ the CPU"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- '002': !VerifItem
name: '002'
tag: VP_CVXIF_F003_S004_I002
description: "cus_u_add rd, rs1, rs2\nrd = rs1 + rs2\ncus_u_add works in User\
\ privilege mode"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Output operands:\n\nif (mode == u)\nrd value is +ve, -ve and\
\ zero\nAll bits of rd are toggled\n\nelse if (mode != u)\nillegal exception\
\ raised on the CPU"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- 005_CUS_ADD_MULTI: !Subfeature
name: 005_CUS_ADD_MULTI
tag: VP_CVXIF_F003_S005
next_elt_id: 4
display_order: 5
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F003_S005_I000
description: "cus_add_multi rd, rs1, rs2\nrd = rs1 + rs2\ncus_add_multi works\
\ in all privilege modes"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Register operands:\n\nAll possible rs1 registers are used.\n\
All possible rs2 registers are used.\nAll possible rd registers are used.\n\
All possible register combinations where rs1 == rd are used\nAll possible\
\ register combinations where rs2 == rd are used"
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- '001': !VerifItem
name: '001'
tag: VP_CVXIF_F003_S005_I001
description: "cus_add_multi rd, rs1, rs2\nrd = rs1 + rs2\ncus_add_multi works\
\ in all privilege modes"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Input operands:\n\nrs1 value is +ve, -ve and zero\nrs2 value\
\ is +ve, -ve and zero\nAll combinations of rs1 and rs2 +ve, -ve, and zero\
\ values are used\nAll bits of rs1 are toggled\nAll bits of rs2 are toggled"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- '002': !VerifItem
name: '002'
tag: VP_CVXIF_F003_S005_I002
description: "cus_add_multi rd, rs1, rs2\nrd = rs1 + rs2\ncus_add_multi works\
\ in all privilege modes"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Output result:\n\nrd value is +ve, -ve and zero\nAll bits of\
\ rd are toggled"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- '003': !VerifItem
name: '003'
tag: VP_CVXIF_F003_S005_I003
description: "cus_add_multi rd, rs1, rs2\nrd = rs1 + rs2\ncus_add_multi works\
\ in all privilege modes"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check all delays from min to max
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- 006_CUS_EXC: !Subfeature
name: 006_CUS_EXC
tag: VP_CVXIF_F003_S006
next_elt_id: 1
display_order: 6
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F003_S006_I000
description: "cus_exc imm[5:0]\nmcause[5:0] = imm[5:0]\ncus_exc raise an exception\
\ on the CPU base on the imm value"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: Check all possible imm value
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
- 007_CUS_ADD_RS3: !Subfeature
name: 007_CUS_ADD_RS3
tag: VP_CVXIF_F003_S007
next_elt_id: 3
display_order: 7
items: !!omap
- '000': !VerifItem
name: '000'
tag: VP_CVXIF_F003_S007_I000
description: "cus_add_rs3 rd, rs1, rs2, rs3\nrd = rs1 + rs2 + rs3\ncus_add_rs3\
\ works in all privilege modes\n\nX_NUM_RS == 3"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Register operands:\n\nif (X_NUM_RS == 3)\nAll possible rs1 registers\
\ are used.\nAll possible rs2 registers are used.\nAll possible rs3 registers\
\ are used.\nAll possible rd registers are used.\nAll possible register\
\ combinations where rs1 == rd are used\nAll possible register combinations\
\ where rs2 == rd are used\nAll possible register combinations where rs3\
\ == rd are used\n\n\nelse if (X_NUM_RS != 3)\nillegal exception raised\
\ on the CPU"
pfc: 3
test_type: 3
cov_method: 1
cores: 56
coverage_loc: ''
comments: ''
- '001': !VerifItem
name: '001'
tag: VP_CVXIF_F003_S007_I001
description: "cus_add_rs3 rd, rs1, rs2, rs3\nrd = rs1 + rs2 + rs3\ncus_add_rs3\
\ works in all privilege modes\n\nX_NUM_RS == 3"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Input operands:\n\nif (X_NUS_RS == 3)\nrs1 value is +ve, -ve\
\ and zero\nrs2 value is +ve, -ve and zero\nrs3 value is +ve, -ve and zero\n\
All combinations of rs1, rs2 and rs3 +ve, -ve, and zero values are used\n\
All bits of rs1 are toggled\nAll bits of rs2 are toggled\nAll bits of rs3\
\ are toggled\n\nelse if (X_NUM_RS != 3)\nillegal exception raised on the\
\ CPU"
pfc: -1
test_type: -1
cov_method: -1
cores: -1
coverage_loc: ''
comments: ''
- '002': !VerifItem
name: '002'
tag: VP_CVXIF_F003_S007_I002
description: "cus_add_rs3 rd, rs1, rs2, rs3\nrd = rs1 + rs2 + rs3\ncus_add_rs3\
\ works in all privilege modes\n\nX_NUM_RS == 3"
reqt_doc: ./custom_instruction.rst
ref_mode: page
ref_page: ''
ref_section: ''
ref_viewer: firefox
verif_goals: "Output operands:\n\nif (X_NUM_RS == 3)\nrd value is +ve, -ve\
\ and zero\nAll bits of rd are toggled\n\nelse if (X_NUM_RS != 3)\nillegal\
\ exception raised on the CPU"
pfc: -1
test_type: -1
cov_method: -1
cores: 56
coverage_loc: ''
comments: ''
vptool_gitrev: '$Id: b0efb3ae3f9057b71a577d43c2b77f1cfb2ef82f $'
io_fmt_gitrev: '$Id: 7ee5d68801f5498a957bcbe23fcad87817a364c5 $'
config_gitrev: '$Id: 0422e19126dae20ffc4d5a84e4ce3de0b6eb4eb5 $'
ymlcfg_gitrev: '$Id: 286c689bd48b7a58f9a37754267895cffef1270c $'

View file

@ -0,0 +1,100 @@
..
Copyright (c) 2023 OpenHW Group
Copyright (c) 2023 Thales DIS SAS
SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
..
Custom Instruction to challenge CV-X-IF protocol
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This section describes some custom instruction, for stress or challenge the CV-X-IF protocol for the 3 implemented interfaces, it's just to interact with the cvxif agent.
All instructions use opcode `CUSTOM_3`(0x7b, 0b111_1011).
- **CUS_ADD**: Custom Add
**Format**: cus_add rd, rs1, rs2 -> |0000000|rs2|rs1|001|rd|111_1011|
**Description**: add register rs1 to rs2, and store the result in rd (works for all privilege modes).
**Pseudocode**: x[rd] = x[rs1] + x[rs2]
**Invalid values**: NONE
**Exception raised**: Illegal instruction exception is raised if rs_valid != 2'b11 && rs_valid != 3'b111.
- **CUS_NOP**: Custom No Operation
**Format**: cus_nop -> |0000000000000000000000000|111_1011|
**Description**: do nothing, it's just a hint instruction.
**Pseudocode**: cus_nop
**Invalid values**: NONE
**Exception raised**: NONE
- **CUS_ADD_RS3**: Custom Add
**Format**: cus_add_rs3 rd, rs1, rs2, rs3 -> |rs3|01|rs2|rs1|000|rd|111_1011|
**Description**: add register rs1 to rs2 then the result to rs3, and store the result in register rd (works for all privilege modes).
**Pseudocode**: x[rd] = x[rs1] + x[rs2] + x[rs3]
**Invalid values**: NONE
**Exception raised**: Illegal instruction exception is raised if rs_valid != 3'b111.
- **CUS_S_ADD**: Custom Supervisor Add
**Format**: add rd, rs1, rs2 -> |0000110|rs2|rs1|000|rd|111_1011|
**Description**: add register rs1 to rs2, and store the result in register rd (works only in Supervisor mode).
**Pseudocode**: x[rd] = x[rs1] + x[rs2]
**Invalid values**: NONE
**Exception raised**: Illegal instruction exception is raised if the privilege mode isn't Supervisor mode, or rs_valid != 2'b11 && rs_valid != 3'b111.
- **CUS_U_ADD**: Custom User Add
**Format**: add rd, rs1, rs2 -> |0000010|rs2|rs1|000|rd|111_1011|
**Description**: add register rs1 to rs2, and store the result in register rd (works only in User mode).
**Pseudocode**: x[rd] = x[rs1] + x[rs2]
**Invalid values**: NONE
**Exception raised**: Illegal instruction exception is raised if the privilege mode isn't User mode, or rs_valid != 2'b11 && rs_valid != 3'b111.
- **CUS_ADD_MULTI**: Custom Multicycle Add
**Format**: addi rd, rs1, rs2 -> |0001000|rs2|rs1|000|rd|111_1011|
**Description**: add register rs1 to rs2, and store the result in rd (works for all privilege mode).
**Pseudocode**: x[rd] = x[rs1] + x[rs2]
**Invalid values**: NONE
**Exception raised**: Illegal instruction exception is raised if rs_valid != 2'b11 && rs_valid != 3'b111.
- **CUS_EXC**: Custom Exception
**Format**: cus_exc imm[5:0] -> |1100000|000000000001|imm|111_1011|
**Description**: raise an exception.
**Pseudocode**: mcause[5:0] = imm[5:0]
**Invalid values**: NONE
**Exception raised**: raise an exception based on the value on the immediate field.
When a CV-X-IF exception is raised, mcause[5:0] of the corresponding CORE-V hart is assumed set to exccode[5:0] of CV-X-IF.

View file

@ -6,7 +6,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
The “instr” and “mode” signals remain stable during an Issue request transaction.
@ -27,7 +27,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
When issue transaction starts, instruction and current CPU mode are provided
@ -46,7 +46,7 @@
#### Item: 001
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
Check “mode” signal values.
@ -68,7 +68,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
During a transaction, each bit of “rs_valid” can transition from 0 to 1 but are not allowed to transition back to 0.
@ -89,7 +89,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
If XLEN = X_RFR_WIDTH, then rs[X_NUM_RS-1:0] correspond to rs1 and rs2 CPU registers (and rs3 if X_NUM_RS = 3).
@ -108,7 +108,7 @@
#### Item: 001
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
rs signals are only required to be stable during the part of a transaction in which these signals are considered to be valid.
@ -127,13 +127,15 @@
#### Item: 002
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
If XLEN != X_RFR_WIDTH , then rs[X_NUM_RS-1:0] correspond to even/odd register pair with rs1, rs2, (rs3) are even register and even register is provided in the 32 lower bits of rs signal.
* **Verification Goals**
For every issue transaction check that rs signal correspond to the concatenation of rs1/rs1+1,rs2/rs2+1, (rs3/rs3+1) value in CPU register file and even register is in the 32 lower bits of rs.
For every issue transaction check that rs signal correspond to the concatenation of rs1/rs1+1,rs2/rs2+1, (rs3/rs3+1) value in CPU register file and even register is in the 32 lower bits of rs.
Can't be check XLEN == X_RFR_WIDTH
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
@ -148,7 +150,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
If accept == 0 :
@ -170,7 +172,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
The CPU shall cause an illegal instruction if:
@ -194,7 +196,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
Check for issue id validity.
@ -215,11 +217,11 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
Accept = 1 if:
- coprocessor can handle the instruction based on decoding “instr”and "mode".
- coprocessor can handle the instruction based on decoding “instr” and "mode".
- “issue_valid” == 1 and required bit(s) of “rs_valid” are 1.
* **Verification Goals**
@ -238,7 +240,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
“issue_resp” signals and “issue_req” signals are accepted when “issue_valid” == “issue_ready” == 1
@ -264,7 +266,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
The “commit_valid” == 1 exactly one clk cycle for every offloaded Instruction by the coprocessor (whether accepted or not).
@ -285,7 +287,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
There is a unique commit transaction for every issue transaction (unique until an instruction has "fully completed" = its result has been submitted).
@ -306,7 +308,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
- The CPU shall perform a commit transaction for every issue transaction, independent of the accept value of the issue transaction.
@ -328,7 +330,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
The signals in commit are valid when commit_valid is 1.
@ -352,7 +354,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
A coprocessor is not allowed to perform speculative result transactions.
@ -373,7 +375,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
A coprocessor is allowed to provide results to the core in an out of order fashion.
@ -394,7 +396,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
Each accepted offloaded (committed and not killed) instruction shall have exactly one result group transaction (even if no data needs to be written back to the CPUs register file).
@ -415,7 +417,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
The signals in result shall remain stable during a result transaction (except data ...)
@ -436,7 +438,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
Data is only required to remain stable during result transactions in which "we" is not 0.
@ -457,7 +459,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
The exc is used to signal synchronous exceptions. A synchronous exception will lead to a trap in CPU unless the corresponding instruction is killed.
@ -476,7 +478,7 @@
#### Item: 001
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
exccode provides the least significant bits of the exception code bitfield of the mcause CSR.
@ -495,10 +497,10 @@
#### Item: 002
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
 "we" shall be driven to 0 by the coprocessor for synchronous exceptions.
"we" shall be driven to 0 by the coprocessor for synchronous exceptions.
* **Verification Goals**
Check that "we" signal == 0 when exc == 1.
@ -516,13 +518,15 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
we is 2 bits wide when XLEN` = 32 and X_RFW_WIDTH = 64, and 1 bit wide otherwise. If "we" is 2 bits wide, then we[1] is only allowed to be 1 if we[0] is 1 as well (i.e. for dual writeback).
we is 2 bits wide when XLEN = 32 and X_RFW_WIDTH = 64, and 1 bit wide otherwise. If "we" is 2 bits wide, then we[1] is only allowed to be 1 if we[0] is 1 as well (i.e. for dual writeback).
* **Verification Goals**
For dualwrite instruction, check that we[1]==1 is only allowed if we[0] == 1.
For dualwrite instruction, check that we[1]==1 is only allowed if we[0] == 1.
Dualwrite not supported (for now)
* **Pass/Fail Criteria:** Assertion
* **Test Type:** Constrained Random
* **Coverage Method:** Assertion Coverage
@ -537,7 +541,7 @@
#### Item: 000
* **Requirement location:**
* **Requirement location:** https://github.com/openhwgroup/core-v-xif/blob/43dc03563e0c79cc55922f653406a9f122f61e80/docs/source/x_ext.rst
* **Feature Description**
Result transaction starts in the cycle that result_valid = 1 and ends in the cycle that both result_valid == result_ready == 1.
@ -554,3 +558,517 @@
*(none)*
## Feature: Custom Instructions
### Sub-feature: 000_CUS_ADD
#### Item: 000
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add rd, rs1, rs2
rd = rs1 + rs2
cus_add works in all privilege modes
* **Verification Goals**
Register operands:
All possible rs1 registers are used.
All possible rs2 registers are used.
All possible rd registers are used.
All possible register combinations where rs1 == rd are used
All possible register combinations where rs2 == rd are used
* **Pass/Fail Criteria:** Check RM
* **Test Type:** Constrained Random
* **Coverage Method:** Functional Coverage
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S000_I000
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 001
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add rd, rs1, rs2
rd = rs1 + rs2
cus_add works in all privilege modes
* **Verification Goals**
Input operands:
rs1 value is +ve, -ve and zero
rs2 value is +ve, -ve and zero
All combinations of rs1 and rs2 +ve, -ve, and zero values are used
All bits of rs1 are toggled
All bits of rs2 are toggled
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S000_I001
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 002
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add rd, rs1, rs2
rd = rs1 + rs2
cus_add works in all privilege modes
* **Verification Goals**
Output result:
rd value is +ve, -ve and zero
All bits of rd are toggled
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S000_I002
* **Link to Coverage:**
* **Comments**
*(none)*
### Sub-feature: 001_CUS_NOP
#### Item: 000
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
No operation Instruction
* **Verification Goals**
Instruction executed
* **Pass/Fail Criteria:** Check RM
* **Test Type:** Constrained Random
* **Coverage Method:** Functional Coverage
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S001_I000
* **Link to Coverage:**
* **Comments**
*(none)*
### Sub-feature: 003_CUS_S_ADD
#### Item: 000
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_s_add rd, rs1, rs2
rd = rs1 + rs2
cus_s_add works in supervisor privilege mode
* **Verification Goals**
Register operands:
if (mode == s)
All possible rs1 registers are used.
All possible rs2 registers are used.
All possible rd registers are used.
All possible register combinations where rs1 == rd are used
All possible register combinations where rs2 == rd are used
else if (mode != s)
illegal exception raised on hte CPU
* **Pass/Fail Criteria:** Check RM
* **Test Type:** Constrained Random
* **Coverage Method:** Functional Coverage
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S003_I000
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 001
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_s_add rd, rs1, rs2
rd = rs1 + rs2
cus_s_add works in supervisor privilege mode
* **Verification Goals**
Input operands:
if (mode == s)
rs1 value is +ve, -ve and zero
rs2 value is +ve, -ve and zero
All combinations of rs1 and rs2 +ve, -ve, and zero values are used
All bits of rs1 are toggled
All bits of rs2 are toggled
else if (mode != s)
illegal exception raised on the CPU
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S003_I001
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 002
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_s_add rd, rs1, rs2
rd = rs1 + rs2
cus_s_add works in supervisor privilege mode
* **Verification Goals**
Output operands:
if (mode == s)
rd value is +ve, -ve and zero
All bits of rd are toggled
else if (mode != s)
illegal exception raised on the CPU
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S003_I002
* **Link to Coverage:**
* **Comments**
*(none)*
### Sub-feature: 004_CUS_U_ADD
#### Item: 000
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_u_add rd, rs1, rs2
rd = rs1 + rs2
cus_u_add works in User privilege mode
* **Verification Goals**
Register operands:
if (mode == u)
All possible rs1 registers are used.
All possible rs2 registers are used.
All possible rd registers are used.
All possible register combinations where rs1 == rd are used
All possible register combinations where rs2 == rd are used
else if (mode != u)
illegal exception raised on hte CPU
* **Pass/Fail Criteria:** Check RM
* **Test Type:** Constrained Random
* **Coverage Method:** Functional Coverage
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S004_I000
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 001
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_u_add rd, rs1, rs2
rd = rs1 + rs2
cus_u_add works in User privilege mode
* **Verification Goals**
Input operands:
if (mode == u)
rs1 value is +ve, -ve and zero
rs2 value is +ve, -ve and zero
All combinations of rs1 and rs2 +ve, -ve, and zero values are used
All bits of rs1 are toggled
All bits of rs2 are toggled
else if (mode != u)
illegal exception raised on the CPU
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S004_I001
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 002
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_u_add rd, rs1, rs2
rd = rs1 + rs2
cus_u_add works in User privilege mode
* **Verification Goals**
Output operands:
if (mode == u)
rd value is +ve, -ve and zero
All bits of rd are toggled
else if (mode != u)
illegal exception raised on the CPU
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S004_I002
* **Link to Coverage:**
* **Comments**
*(none)*
### Sub-feature: 005_CUS_ADD_MULTI
#### Item: 000
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add_multi rd, rs1, rs2
rd = rs1 + rs2
cus_add_multi works in all privilege modes
* **Verification Goals**
Register operands:
All possible rs1 registers are used.
All possible rs2 registers are used.
All possible rd registers are used.
All possible register combinations where rs1 == rd are used
All possible register combinations where rs2 == rd are used
* **Pass/Fail Criteria:** Check RM
* **Test Type:** Constrained Random
* **Coverage Method:** Functional Coverage
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S005_I000
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 001
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add_multi rd, rs1, rs2
rd = rs1 + rs2
cus_add_multi works in all privilege modes
* **Verification Goals**
Input operands:
rs1 value is +ve, -ve and zero
rs2 value is +ve, -ve and zero
All combinations of rs1 and rs2 +ve, -ve, and zero values are used
All bits of rs1 are toggled
All bits of rs2 are toggled
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S005_I001
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 002
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add_multi rd, rs1, rs2
rd = rs1 + rs2
cus_add_multi works in all privilege modes
* **Verification Goals**
Output result:
rd value is +ve, -ve and zero
All bits of rd are toggled
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S005_I002
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 003
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add_multi rd, rs1, rs2
rd = rs1 + rs2
cus_add_multi works in all privilege modes
* **Verification Goals**
Check all delays from min to max
* **Pass/Fail Criteria:** Check RM
* **Test Type:** Constrained Random
* **Coverage Method:** Functional Coverage
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S005_I003
* **Link to Coverage:**
* **Comments**
*(none)*
### Sub-feature: 006_CUS_EXC
#### Item: 000
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_exc imm[5:0]
mcause[5:0] = imm[5:0]
cus_exc raise an exception on the CPU base on the imm value
* **Verification Goals**
Check all possible imm value
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S006_I000
* **Link to Coverage:**
* **Comments**
*(none)*
### Sub-feature: 007_CUS_ADD_RS3
#### Item: 000
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add_rs3 rd, rs1, rs2, rs3
rd = rs1 + rs2 + rs3
cus_add_rs3 works in all privilege modes
X_NUM_RS == 3
* **Verification Goals**
Register operands:
if (X_NUM_RS == 3)
All possible rs1 registers are used.
All possible rs2 registers are used.
All possible rs3 registers are used.
All possible rd registers are used.
All possible register combinations where rs1 == rd are used
All possible register combinations where rs2 == rd are used
All possible register combinations where rs3 == rd are used
else if (X_NUM_RS != 3)
illegal exception raised on the CPU
* **Pass/Fail Criteria:** Check RM
* **Test Type:** Constrained Random
* **Coverage Method:** Functional Coverage
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S007_I000
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 001
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add_rs3 rd, rs1, rs2, rs3
rd = rs1 + rs2 + rs3
cus_add_rs3 works in all privilege modes
X_NUM_RS == 3
* **Verification Goals**
Input operands:
if (X_NUS_RS == 3)
rs1 value is +ve, -ve and zero
rs2 value is +ve, -ve and zero
rs3 value is +ve, -ve and zero
All combinations of rs1, rs2 and rs3 +ve, -ve, and zero values are used
All bits of rs1 are toggled
All bits of rs2 are toggled
All bits of rs3 are toggled
else if (X_NUM_RS != 3)
illegal exception raised on the CPU
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32E40P, CV32E40S, CV32E40X, CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S007_I001
* **Link to Coverage:**
* **Comments**
*(none)*
#### Item: 002
* **Requirement location:** ./custom_instruction.rst
* **Feature Description**
cus_add_rs3 rd, rs1, rs2, rs3
rd = rs1 + rs2 + rs3
cus_add_rs3 works in all privilege modes
X_NUM_RS == 3
* **Verification Goals**
Output operands:
if (X_NUM_RS == 3)
rd value is +ve, -ve and zero
All bits of rd are toggled
else if (X_NUM_RS != 3)
illegal exception raised on the CPU
* **Pass/Fail Criteria:** NDY (Not Defined Yet)
* **Test Type:** NDY (Not Defined Yet)
* **Coverage Method:** NDY (Not Defined Yet)
* **Applicable Cores:** CV32A6_v0.1.0, CV32A6-step2, CV64A6-step3
* **Unique verification tag:** VP_CVXIF_F003_S007_I002
* **Link to Coverage:**
* **Comments**
*(none)*