Testplan
Testpoints
Stage V1 Testpoints
wake_up
Test: otp_ctrl_wake_up
Wake_up test walks through otp_ctrl’s power-on initialization, read, program, and digest functionalities.
- drive pwrmgr’s request pin to trigger OTP initialization after reset, check status after OTP initialization
- write all-ones to a random address within OTP partition 0, wait until this operation completes
- read out the random selected write address, check if the readout value is all-ones
- trigger a digest calculation for a Software partition, check if the OtpError interrupt is set
- trigger a digest calculation for a non-software partition, expect operation completes without the OtpError interrupt
- read out secrets through the hardware interfaces
smoke
Test: otp_ctrl_smoke
OTP_CTRL smoke test provisions and locks partitions.
- drive pwrmgr’s request pin to trigger OTP initialization after reset, check status after OTP initialization
- randomly read out keys pertaining to
key_manager
,flash
,sram
,otbn
- randomly issue LC program request
- write random values to random addresses within each OTP partition
- read out the random selected write addresses, check if the readout values are expected
- during read and write operations, check if direct_access_regwen is correctly set by HW
- perform a system-level reset and check corresponding CSRs are set correctly
- lock all partitions except life_cycle by triggering digest calculations
- read back and verify the digest
- perform a system-level reset to verify the corresponding CSRs exposing the digests have been populated
Checks:
- Assertion checks to ensure vendor specific I/Os:
otp_vendor_test_status_o
,otp_vendor_test_ctrl_i
,cio_test_o
, andcio_test_en_o
are connected currently withlc_dft_en_i
On and Off.
csr_hw_reset
Test: otp_ctrl_csr_hw_reset
Verify the reset values as indicated in the RAL specification.
- Write all CSRs with a random value.
- Apply reset to the DUT as well as the RAL model.
- Read each CSR and compare it against the reset value. it is mandatory to replicate this test for each reset that affects all or a subset of the CSRs.
- It is mandatory to run this test for all available interfaces the CSRs are accessible from.
- Shuffle the list of CSRs first to remove the effect of ordering.
csr_rw
Test: otp_ctrl_csr_rw
Verify accessibility of CSRs as indicated in the RAL specification.
- Loop through each CSR to write it with a random value.
- Read the CSR back and check for correctness while adhering to its access policies.
- It is mandatory to run this test for all available interfaces the CSRs are accessible from.
- Shuffle the list of CSRs first to remove the effect of ordering.
csr_bit_bash
Test: otp_ctrl_csr_bit_bash
Verify no aliasing within individual bits of a CSR.
- Walk a 1 through each CSR by flipping 1 bit at a time.
- Read the CSR back and check for correctness while adhering to its access policies.
- This verify that writing a specific bit within the CSR did not affect any of the other bits.
- It is mandatory to run this test for all available interfaces the CSRs are accessible from.
- Shuffle the list of CSRs first to remove the effect of ordering.
csr_aliasing
Test: otp_ctrl_csr_aliasing
Verify no aliasing within the CSR address space.
- Loop through each CSR to write it with a random value
- Shuffle and read ALL CSRs back.
- All CSRs except for the one that was written in this iteration should read back the previous value.
- The CSR that was written in this iteration is checked for correctness while adhering to its access policies.
- It is mandatory to run this test for all available interfaces the CSRs are accessible from.
- Shuffle the list of CSRs first to remove the effect of ordering.
csr_mem_rw_with_rand_reset
Test: otp_ctrl_csr_mem_rw_with_rand_reset
Verify random reset during CSR/memory access.
- Run csr_rw sequence to randomly access CSRs
- If memory exists, run mem_partial_access in parallel with csr_rw
- Randomly issue reset and then use hw_reset sequence to check all CSRs are reset to default value
- It is mandatory to run this test for all available interfaces the CSRs are accessible from.
regwen_csr_and_corresponding_lockable_csr
Tests:
otp_ctrl_csr_rw
otp_ctrl_csr_aliasing
Verify regwen CSR and its corresponding lockable CSRs.
- Randomly access all CSRs
- Test when regwen CSR is set, its corresponding lockable CSRs become read-only registers
Note:
- If regwen CSR is HW read-only, this feature can be fully tested by common CSR tests - csr_rw and csr_aliasing.
- If regwen CSR is HW updated, a separate test should be created to test it.
This is only applicable if the block contains regwen and locakable CSRs.
mem_walk
Test: otp_ctrl_mem_walk
Verify accessibility of all memories in the design.
- Run the standard UVM mem walk sequence on all memories in the RAL model.
- It is mandatory to run this test from all available interfaces the memories are accessible from.
mem_partial_access
Test: otp_ctrl_mem_partial_access
Verify partial-accessibility of all memories in the design.
- Do partial reads and writes into the memories and verify the outcome for correctness.
- Also test outstanding access on memories
Stage V2 Testpoints
dai_access_partition_walk
Test: otp_ctrl_partition_walk
Similar to UVM’s memory walk test, this test ensures every address in each partition can be accessed successfully via DAI and TLUL interfacs according to its access policy.
init_fail
Test: otp_ctrl_init_fail
Based on OTP_CTRL smoke test, this test creates OTP_CTRL’s initialization failure:
- write and read OTP memory via DAI interface
- randomly issue DAI digest command to lock HW partitions
- keep writing to OTP memory via DAI interface without asserting reset
- if digests are not locked, backdoor inject ECC correctable or uncorrectable errors
- issue reset and power initialization
- if the injected errors are all correctable errors, disable the
lc_bypass_chk_en
after LC program request to create an LC partition check failure
If fatal error is triggered, this test will check:
- OTP initialization failure triggers fatal alert
status
,intr_state
,err_code
CSRs reflect correct fatal error
If OTP initialization finished without any fatal error, this test will check:
- OTP initialization finishes with power init output goes to 1
status
,intr_state
,err_code
CSRs reflect ECC correctable error
partition_check
Tests:
otp_ctrl_check_fail
otp_ctrl_background_chks
Randomly program the partition check related CSRs including:
check_timeout
integrity_check_period
consistency_check_period
check_trigger
Create a failure scenario by randomly picking one of these three methods:
- inject ECC errors into the OTP macro via backdoor
- set the
check_timeout
CSR with a very small value - write to a random OTP partition after digest is issued but before reset is asserted
Checks:
- the corresponding alerts are triggered
- the error_code register is set correctly Note that due to limited simulation time, for background checks, this test only write random value that is less than 20 to the check period.
regwen_during_otp_init
Test: otp_ctrl_regwen
The direct_access_regwen
is a RO register which controls the write-enable of other
reigsters. It is not verified by the common CSR tests. HW sets it to 0 when the DAI
interface is busy.
Stimulus and checks:
- randomly read
direct_access_regwen
and verify that it returns 0 during OTP initialization - verify that the writes to the registers controlled by it do not go through during OTP initialization
partition_lock
Test: otp_ctrl_dai_lock
This test will cover two methods of locking read and write: digest calculation and CSR
write. After locking the partitions, issue read or program sequences and check if the
operations are locked correctly, and check if the AccessError
is set.
interface_key_check
Test: otp_ctrl_parallel_key_req
OTP_CTRL will generate keys to flash
, sram
, and otbn
upon their requests.
Based on the DAI access sequence, this test will run key requests sequence in
parallel, and check if correct keys are generated.
lc_interactions
Tests:
otp_ctrl_parallel_lc_req
otp_ctrl_parallel_lc_esc
Verify the procotols between OTP_CTRL and LC_CTRL. Based on the DAI access sequence, run the following sequences in parallel:
- request a LC state transition via the programming interface
- enable the
lc_escalation_en
signal
Checks:
- if the LC program request has
AccessError
, check the LC program response sets theerror
bit to 1 - if
lc_escalation_en
is enabled, verify that alert is triggered and OTP_CTRL entered terminal state
otp_dai_errors
Test: otp_ctrl_dai_errs
Based on the otp_dai_lock test, this test will randomly run the following OTP errors:
- DAI interface writes non-blank OTP address
- DAI interface accesses LC partition
- DAI interface writes HW digests
- DAI interface writes non-empty memory
Checks:
err_code
andstatus
CSRsotp_error
interrupt
otp_macro_errors
Test: otp_ctrl_macro_errs
Randomly run the following OTP errors:
- MacroError
- MacroEccCorrError
- MacroEccUncorrError
Checks:
err_code
andstatus
CSRsotp_error
interrupt- if the error is unrecoverable, verify that alert is triggered and OTP_CTRL entered terminal state
test_access
Test: otp_ctrl_test_access
This test checks if the test access to OTP macro is connected correctly.
Stimulus and Checks:
- Write and check read results from the prim_tl_i/o.
- Ensure no error or alert occurs from DUT.
stress_all
Test: otp_ctrl_stress_all
- combine above sequences in one test to run sequentially, except csr sequence
- randomly add reset between each sequence
intr_test
Test: otp_ctrl_intr_test
Verify common intr_test CSRs that allows SW to mock-inject interrupts.
- Enable a random set of interrupts by writing random value(s) to intr_enable CSR(s).
- Randomly “turn on” interrupts by writing random value(s) to intr_test CSR(s).
- Read all intr_state CSR(s) back to verify that it reflects the same value as what was written to the corresponding intr_test CSR.
- Check the cfg.intr_vif pins to verify that only the interrupts that were enabled and turned on are set.
- Clear a random set of interrupts by writing a randomly value to intr_state CSR(s).
- Repeat the above steps a bunch of times.
alert_test
Test: otp_ctrl_alert_test
Verify common alert_test
CSR that allows SW to mock-inject alert requests.
- Enable a random set of alert requests by writing random value to alert_test CSR.
- Check each
alert_tx.alert_p
pin to verify that only the requested alerts are triggered. - During alert_handshakes, write
alert_test
CSR again to verify that: Ifalert_test
writes to current ongoing alert handshake, thealert_test
request will be ignored. Ifalert_test
writes to current idle alert handshake, a new alert_handshake should be triggered. - Wait for the alert handshakes to finish and verify
alert_tx.alert_p
pins all sets back to 0. - Repeat the above steps a bunch of times.
tl_d_oob_addr_access
Test: otp_ctrl_tl_errors
Access out of bounds address and verify correctness of response / behavior
tl_d_illegal_access
Test: otp_ctrl_tl_errors
Drive unsupported requests via TL interface and verify correctness of response / behavior. Below error cases are tested bases on the TLUL spec
- TL-UL protocol error cases
- invalid opcode
- some mask bits not set when opcode is
PutFullData
- mask does not match the transfer size, e.g.
a_address = 0x00
,a_size = 0
,a_mask = 'b0010
- mask and address misaligned, e.g.
a_address = 0x01
,a_mask = 'b0001
- address and size aren’t aligned, e.g.
a_address = 0x01
,a_size != 0
- size is greater than 2
- OpenTitan defined error cases
- access unmapped address, expect
d_error = 1
- write a CSR with unaligned address, e.g.
a_address[1:0] != 0
- write a CSR less than its width, e.g. when CSR is 2 bytes wide, only write 1 byte
- write a memory with
a_mask != '1
when it doesn’t support partial accesses - read a WO (write-only) memory
- write a RO (read-only) memory
- write with
instr_type = True
- access unmapped address, expect
tl_d_outstanding_access
Tests:
otp_ctrl_csr_hw_reset
otp_ctrl_csr_rw
otp_ctrl_csr_aliasing
otp_ctrl_same_csr_outstanding
Drive back-to-back requests without waiting for response to ensure there is one transaction outstanding within the TL device. Also, verify one outstanding when back- to-back accesses are made to the same address.
tl_d_partial_access
Tests:
otp_ctrl_csr_hw_reset
otp_ctrl_csr_rw
otp_ctrl_csr_aliasing
otp_ctrl_same_csr_outstanding
Access CSR with one or more bytes of data. For read, expect to return all word value of the CSR. For write, enabling bytes should cover all CSR valid fields.
Stage V2S Testpoints
sec_cm_additional_check
Test: otp_ctrl_sec_cm
Verify the outcome of injecting faults to security countermeasures.
Stimulus:
As mentioned in prim_count_check
, prim_fsm_check
and prim_double_lfsr_check
.
Checks:
- Check the value of status register according to where the fault is injected.
- Check OTP_CTRL is locked after the fatal fault injection by trying to access OTP_CTRL via dai, kdi, and lci interfaces.
tl_intg_err
Tests:
otp_ctrl_tl_intg_err
otp_ctrl_sec_cm
Verify that the data integrity check violation generates an alert.
- Randomly inject errors on the control, data, or the ECC bits during CSR accesses. Verify that triggers the correct fatal alert.
- Inject a fault at the onehot check in
u_reg.u_prim_reg_we_check
and verify the corresponding fatal alert occurs
prim_count_check
Test: otp_ctrl_sec_cm
Verify that violating prim_count counter properties generate a fatal alert.
Stimulus:
- At the falling edge (non-active edge), force the counter to a different value than expected.
- Randomly force the counter back to a normal value to ensure the error is latched and won’t go away until reset.
- Within the next few cycles, the violation of hardened counter property should generate a fatal alert.
- Repeat for ALL prim_count instances in the DUT.
Checks:
- Check that fatal alert is triggered.
- Check that err_code/fault_status is updated correctly and preserved until reset.
- Verify any operations that follow fail (as applicable).
prim_fsm_check
Test: otp_ctrl_sec_cm
Verify that entering to an undefined state generates a fatal alert.
Stimulus:
- Backdoor force the FSM to any of the undefined values.
- Randomly force the FSM back to a defined state to ensure the error is latched and won’t go away until reset.
- Within the next few cycles, the FSM landing in an invalid state should trigger a fatal alert.
- Repeat for ALL prim_fsm instances in the DUT.
Checks:
- Check that fatal alert is triggered.
- Check that err_code/fault_status is updated correctly and preserved until reset.
- Verify any operations that follow fail (as applicable).
sec_cm_bus_integrity
Test: otp_ctrl_tl_intg_err
Verify the countermeasure(s) BUS.INTEGRITY.
sec_cm_secret_mem_scramble
Test: otp_ctrl_smoke
Verify the countermeasure(s) SECRET.MEM.SCRAMBLE.
sec_cm_part_mem_digest
Test: otp_ctrl_smoke
Verify the countermeasure(s) PART.MEM.DIGEST.
sec_cm_dai_fsm_sparse
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) DAI.FSM.SPARSE.
sec_cm_kdi_fsm_sparse
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) KDI.FSM.SPARSE.
sec_cm_lci_fsm_sparse
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) LCI.FSM.SPARSE.
sec_cm_part_fsm_sparse
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) PART.FSM.SPARSE.
sec_cm_scrmbl_fsm_sparse
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) SCRMBL.FSM.SPARSE.
sec_cm_timer_fsm_sparse
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) TIMER.FSM.SPARSE.
sec_cm_dai_ctr_redun
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) DAI.CTR.REDUN.
sec_cm_kdi_seed_ctr_redun
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) KDI_SEED.CTR.REDUN.
sec_cm_kdi_entropy_ctr_redun
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) KDI_ENTROPY.CTR.REDUN.
sec_cm_lci_ctr_redun
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) LCI.CTR.REDUN.
sec_cm_part_ctr_redun
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) PART.CTR.REDUN.
sec_cm_scrmbl_ctr_redun
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) SCRMBL.CTR.REDUN.
sec_cm_timer_integ_ctr_redun
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) TIMER_INTEG.CTR.REDUN.
sec_cm_timer_cnsty_ctr_redun
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) TIMER_CNSTY.CTR.REDUN.
sec_cm_timer_lfsr_redun
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) TIMER.LFSR.REDUN.
sec_cm_dai_fsm_local_esc
Tests:
otp_ctrl_parallel_lc_esc
otp_ctrl_sec_cm
Verify the countermeasure(s) DAI.FSM.LOCAL_ESC.
sec_cm_lci_fsm_local_esc
Test: otp_ctrl_parallel_lc_esc
Verify the countermeasure(s) LCI.FSM.LOCAL_ESC.
sec_cm_kdi_fsm_local_esc
Test: otp_ctrl_parallel_lc_esc
Verify the countermeasure(s) KDI.FSM.LOCAL_ESC.
sec_cm_part_fsm_local_esc
Tests:
otp_ctrl_parallel_lc_esc
otp_ctrl_macro_errs
Verify the countermeasure(s) PART.FSM.LOCAL_ESC.
sec_cm_scrmbl_fsm_local_esc
Test: otp_ctrl_parallel_lc_esc
Verify the countermeasure(s) SCRMBL.FSM.LOCAL_ESC.
sec_cm_timer_fsm_local_esc
Tests:
otp_ctrl_parallel_lc_esc
otp_ctrl_sec_cm
Verify the countermeasure(s) TIMER.FSM.LOCAL_ESC.
sec_cm_dai_fsm_global_esc
Tests:
otp_ctrl_parallel_lc_esc
otp_ctrl_sec_cm
Verify the countermeasure(s) DAI.FSM.GLOBAL_ESC.
sec_cm_lci_fsm_global_esc
Test: otp_ctrl_parallel_lc_esc
Verify the countermeasure(s) LCI.FSM.GLOBAL_ESC.
sec_cm_kdi_fsm_global_esc
Test: otp_ctrl_parallel_lc_esc
Verify the countermeasure(s) KDI.FSM.GLOBAL_ESC.
sec_cm_part_fsm_global_esc
Tests:
otp_ctrl_parallel_lc_esc
otp_ctrl_macro_errs
Verify the countermeasure(s) PART.FSM.GLOBAL_ESC.
sec_cm_scrmbl_fsm_global_esc
Test: otp_ctrl_parallel_lc_esc
Verify the countermeasure(s) SCRMBL.FSM.GLOBAL_ESC.
sec_cm_timer_fsm_global_esc
Tests:
otp_ctrl_parallel_lc_esc
otp_ctrl_sec_cm
Verify the countermeasure(s) TIMER.FSM.GLOBAL_ESC.
sec_cm_part_data_reg_integrity
Test: otp_ctrl_init_fail
Verify the countermeasure(s) PART.DATA_REG.INTEGRITY.
sec_cm_part_data_reg_bkgn_chk
Test: otp_ctrl_check_fail
Verify the countermeasure(s) PART.DATA_REG.BKGN_CHK.
sec_cm_part_mem_regren
Test: otp_ctrl_dai_lock
Verify the countermeasure(s) PART.MEM.REGREN.
sec_cm_part_mem_sw_unreadable
Test: otp_ctrl_dai_lock
Verify the countermeasure(s) PART.MEM.SW_UNREADABLE.
sec_cm_part_mem_sw_unwritable
Test: otp_ctrl_dai_lock
Verify the countermeasure(s) PART.MEM.SW_UNWRITABLE.
sec_cm_lc_part_mem_sw_noaccess
Test: otp_ctrl_dai_lock
Verify the countermeasure(s) LC_PART.MEM.SW_NOACCESS.
sec_cm_access_ctrl_mubi
Test: otp_ctrl_dai_lock
Verify the countermeasure(s) ACCESS.CTRL.MUBI.
sec_cm_token_valid_ctrl_mubi
Test: otp_ctrl_smoke
Verify the countermeasure(s) TOKEN_VALID.CTRL.MUBI.
sec_cm_lc_ctrl_intersig_mubi
Test: otp_ctrl_dai_lock
Verify the countermeasure(s) LC_CTRL.INTERSIG.MUBI.
sec_cm_test_bus_lc_gated
Test: otp_ctrl_smoke
Verify the countermeasure(s) TEST.BUS.LC_GATED.
sec_cm_test_tl_lc_gate_fsm_sparse
Test: otp_ctrl_sec_cm
Verify the countermeasure(s) TEST_TL_LC_GATE.FSM.SPARSE.
sec_cm_direct_access_config_regwen
Test: otp_ctrl_regwen
Verify the countermeasure(s) DIRECT_ACCESS.CONFIG.REGWEN.
sec_cm_check_trigger_config_regwen
Test: otp_ctrl_smoke
Verify the countermeasure(s) CHECK_TRIGGER.CONFIG.REGWEN.
sec_cm_check_config_regwen
Test: otp_ctrl_smoke
Verify the countermeasure(s) CHECK.CONFIG.REGWEN.
sec_cm_macro_mem_integrity
Test: otp_ctrl_macro_errs
Verify the countermeasure(s) MACRO.MEM.INTEGRITY.
sec_cm_macro_mem_cm
Test: N/A
Verify the countermeasure(s) MACRO.MEM.CM.
Stage V3 Testpoints
otp_ctrl_low_freq_read
Test: otp_ctrl_low_freq_read
This test checks if OTP’s read operation can operate successfully in a low clock frequency before the clock is calibrated.
Stimulus and Checks:
- Configure OTP_CTRL’s clock to 6MHz low frequency.
- Backdoor write OTP memory.
- Use DAI access to read each memory address and compare if the value is correct.
- If DAI address is in a SW partition, read and check again via TLUL interface.
stress_all_with_rand_reset
Test: otp_ctrl_stress_all_with_rand_reset
This test runs 3 parallel threads - stress_all, tl_errors and random reset. After reset is asserted, the test will read and check all valid CSR registers.
Covergroups
buf_err_code_cg
This is an array of covergroups to cover all applicable error codes in five buffered partitions.
csr_rd_after_alert_cg
Covers if the following CSRs are being read and the value is checked in scoreboard after any fatal alert is triggered:
- unbuffered partitions’ digest CSRs
- HW partition’s digest CSRs
- secrets partitions’ digest CSRs
- direct_access read data CSRs
- status CSR
- error_code CSR
dai_access_secret2_cg
Covers whether lc_creator_seed_sw_rw_en
is On during any DAI accesses.
dai_err_code_cg
Covers all applicable error codes in DAI, and cross each error code with all 7 partitions.
flash_addr_req_condition_cg
Covers the following conditions when lc_escalation_en
is On:
- whether any key requests is in progress
- whether DAI interface is busy
- whether lc_esc_en is On
flash_data_req_condition_cg
Covers the following conditions when lc_escalation_en
is On:
- whether any key requests is in progress
- whether DAI interface is busy
- whether lc_esc_en is On
flash_req_cg
Covers whether secret1 partition is locked during flash
data or address
request.
issue_checks_after_alert_cg
Covers if sequence issued various OTP_CTRL’s background checks after any fatal alert is triggered.
keymgr_o_cg
Covers the following conditions when scoreboard checks keymgr_o
value:
- whether secret2 partition is locked
- whether
lc_seed_hw_rd_en_i
is On
lc_esc_en_condition_cg
Covers the following conditions when lc_escalation_en
is On:
- whether any key requests is in progress
- whether LC program reqeust is in progress
- whether DAI interface is busy
lc_prog_cg
Covers whether the error bit is set during LC program request.
lc_prog_req_condition_cg
Covers the following conditions when lc_escalation_en
is On:
- whether any key requests is in progress
- whether DAI interface is busy
- whether lc_esc_en is On
lci_err_code_cg
Covers all applicable error codes in LCI.
otbn_req_cg
Covers whether secret1 partition is locked during otbn
key request.
otbn_req_condition_cg
Covers the following conditions when lc_escalation_en
is On:
- whether any key requests is in progress
- whether DAI interface is busy
- whether lc_esc_en is On
power_on_cg
Covers the following conditions when OTP_CTRL finishes power-on initialization:
- whether
lc_escalation_en
is On - whether any partition (except life cycle partition) is locked
regwen_val_when_new_value_written_cg
Cover each lockable reg field with these 2 cases:
- When regwen = 1, a different value is written to the lockable CSR field, and a read occurs after that.
- When regwen = 0, a different value is written to the lockable CSR field, and a read occurs after that.
This is only applicable if the block contains regwen and locakable CSRs.
req_dai_access_after_alert_cg
Covers if sequence issued various DAI requests after any fatal alert is triggered.
sram_0_req_condition_cg
Covers the following conditions when lc_escalation_en
is On:
- whether any key requests is in progress
- whether DAI interface is busy
- whether lc_esc_en is On
sram_1_req_condition_cg
Covers the following conditions when lc_escalation_en
is On:
- whether any key requests is in progress
- whether DAI interface is busy
- whether lc_esc_en is On
sram_req_cg
Covers whether secret1 partition is locked during all srams
key request.
status_csr_cg
Covers the value of every bit in status
CSR.
tl_errors_cg
Cover the following error cases on TL-UL bus:
- TL-UL protocol error cases.
- OpenTitan defined error cases, refer to testpoint
tl_d_illegal_access
.
tl_intg_err_cg
Cover all kinds of integrity errors (command, data or both) and cover number of error bits on each integrity check.
Cover the kinds of integrity errors with byte enabled write on memory if applicable: Some memories store the integrity values. When there is a subword write, design re-calculate the integrity with full word data and update integrity in the memory. This coverage ensures that memory byte write has been issued and the related design logic has been verfied.
unbuf_access_lock_cg_wrap_cg
This is an array of covergroups to cover lock conditions below in three unbuffered partitions:
- the partition is write-locked
- the partition is read-locked
- the current operation type Then cross the three coverpoints.
unbuf_err_code_cg
This is an array of covergroups to cover all applicable error codes in three unbuffered partitions.