|  | // Copyright lowRISC contributors. | 
|  | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  | { | 
|  | testpoints: [ | 
|  | { | 
|  | name: csr_hw_reset | 
|  | desc: ''' | 
|  | 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. | 
|  | ''' | 
|  | stage: V1 | 
|  | tests: ["{name}{intf}_csr_hw_reset"] | 
|  | } | 
|  | { | 
|  | name: csr_rw | 
|  | desc: ''' | 
|  | 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. | 
|  | ''' | 
|  | stage: V1 | 
|  | tests: ["{name}{intf}_csr_rw"] | 
|  | } | 
|  | { | 
|  | name: csr_bit_bash | 
|  | desc: ''' | 
|  | 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. | 
|  | ''' | 
|  | stage: V1 | 
|  | tests: ["{name}{intf}_csr_bit_bash"] | 
|  | } | 
|  | { | 
|  | name: csr_aliasing | 
|  | desc: ''' | 
|  | 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. | 
|  | ''' | 
|  | stage: V1 | 
|  | tests: ["{name}{intf}_csr_aliasing"] | 
|  | } | 
|  | { | 
|  | name: csr_mem_rw_with_rand_reset | 
|  | desc: ''' | 
|  | 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. | 
|  | ''' | 
|  | stage: V1 | 
|  | tests: ["{name}{intf}_csr_mem_rw_with_rand_reset"] | 
|  | } | 
|  | { | 
|  | name: regwen_csr_and_corresponding_lockable_csr | 
|  | desc: ''' | 
|  | 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. | 
|  | ''' | 
|  | stage: V1 | 
|  | tests: ["{name}{intf}_csr_rw", "{name}{intf}_csr_aliasing"] | 
|  | } | 
|  | ] | 
|  | covergroups: [ | 
|  | { | 
|  | name: regwen_val_when_new_value_written_cg | 
|  | desc: ''' | 
|  | 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. | 
|  | ''' | 
|  | } | 
|  | ] | 
|  | } |