| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| { |
| name: "pattgen" |
| import_testplans: ["hw/dv/tools/dvsim/testplans/csr_testplan.hjson", |
| "hw/dv/tools/dvsim/testplans/alert_test_testplan.hjson", |
| "hw/dv/tools/dvsim/testplans/intr_test_testplan.hjson", |
| "hw/dv/tools/dvsim/testplans/stress_all_with_reset_testplan.hjson", |
| "hw/dv/tools/dvsim/testplans/tl_device_access_types_testplan.hjson"], |
| testpoints: [ |
| { |
| name: smoke |
| desc: ''' |
| Smoke test for pattgen ip in which dut is randomly programmed |
| to generate random patterns on output channels. |
| |
| Stimulus: |
| - Program the configuration registers of the output channels |
| - Randomly activate the output channels |
| - Re-program the configuration registers of the output channels once |
| completion interrupts are asserted |
| |
| Checking: |
| - Check divided clock rate for the active channels |
| matching with the values of pre-divider registers |
| - Check generated pattern matching on the active channels |
| matching with the values of pattern data registers |
| - Check completion interrupts are asserted once a pattern |
| is completely generated on the active channels |
| ''' |
| milestone: V1 |
| tests: ["pattgen_smoke"] |
| } |
| { |
| name: perf |
| desc: ''' |
| Checking ip operation at min/max bandwidth |
| |
| Stimulus: |
| - Program the pre-divider registers to high/low values (slow/fast data rate) |
| - Program the pattern data registers, the pattern length per output, and |
| repeat counter registers to high/low values |
| - Start and stop channels quickly |
| - Clear interrupts quickly |
| Checking: |
| - Ensure patterns are correctly generated |
| - Ensure interrupts are robust asserted and cleared (e.g. at the high data rate) |
| ''' |
| milestone: V2 |
| tests: ["pattgen_perf"] |
| } |
| { |
| name: cnt_rollover |
| desc: ''' |
| Checking ip operation with random counter values |
| |
| Stimulus: |
| - Program the pre-divider and size registers to unconstraint random values |
| - Program the clk_cnt, bit_cnt and rep_cnt to values less than but close to |
| predivider and size registers, so that counting would take a reasonable |
| number of clock cycles |
| - include programming for corner cases |
| repeat programming a random number of times |
| - Start and stop channels quickly |
| - Clear interrupts quickly |
| |
| Checking: |
| - Include functional cover point that rollover value is reached and counter is reset: |
| - Ensure patterns are correctly generated |
| - Ensure interrupts are robust asserted and cleared (e.g. at the high data rate) |
| ''' |
| milestone: V2 |
| tests: ["cnt_rollover"] |
| } |
| { |
| name: alert |
| desc: ''' |
| Checking alert errors |
| |
| Stimulus: |
| TODO: identify exactly what alerts are triggered, and for the V2 |
| find out exactly what triggers alert, if anything |
| Checking: |
| - Check alert `fatal_fault_err` is triggered |
| and err_code is `INVALID_CMD` |
| - Check alert `recov_operation_err` is triggered |
| and err_code is `INVALID_DATA` |
| - Check that operations are not recoverable |
| after `fatal_fault_err` alert |
| ''' |
| milestone: V2 |
| tests: ["pattgen_alert"] |
| } |
| { |
| name: error |
| desc: ''' |
| Reset then re-start the output channel on the fly. |
| |
| Stimulus: |
| - Programm the configuration registers of the output channels |
| - Randomly reset the in progress output channels |
| - Re-program the configuration registers of the output channels |
| |
| Checking: |
| - Ensure patterns are dropped when reset |
| - Ensure the output channels get back normal after reset |
| ''' |
| milestone: V2 |
| tests: ["pattgen_error"] |
| } |
| { |
| name: stress_all |
| desc: ''' |
| Combine above sequences in one test then randomly select for running. |
| |
| Stimulus: |
| - Start sequences and randomly add reset between each sequence |
| |
| Checking: |
| - All sequences should be finished and checked by the scoreboard |
| ''' |
| milestone: V2 |
| tests: ["pattgen_stress_all"] |
| } |
| ] |
| |
| |
| covergroups: [ |
| { |
| name: pattgen_op_cg |
| desc: ''' |
| The following coverage strategy is implemented: |
| * The counters are covered at the max |
| and min corner cases and for the middle values |
| * Data bus has functional coverage using walking ones and zeroes |
| * One bit width variables are wrapped in one cover point |
| while counters and data have designated cover points |
| * Channel enable signal is stand alone cover point |
| * Chennel enable signal is crossed with all other cover points |
| * When both channels are active, the enable signals of each |
| channel are each crossed with cover points of both channels |
| ''' |
| } |
| { |
| name: roll_cg |
| desc: ''' |
| Covers that all the counters revert to zero when they reach |
| the maximum value. |
| Individual initial and maximum counter values |
| that will be covered include: |
| - Initial and maximum values of clock divide counter |
| - Initial and maximum values of length counter |
| - Initial and maxim values of repetition counter |
| All valid combinations of the above will also be crossed. |
| ''' |
| } |
| { |
| name: ctrl_cg |
| desc: ''' |
| Covers that all valid enable and polarity settings |
| for the Pattgen control register have been tested. |
| Individual enable and polarity settings that will be covered include: |
| - Enable pattern generator functionality for Channel 0 (ENABLE_CH0) |
| - Enable pattern generator functionality for Channel 1 (ENABLE_CH1) |
| - Clock (pcl) polarity for Channel 0 (POLARITY_CH0) |
| - Clock (pcl) polarity for Channel 1 (POLARITY_CH1) |
| All valid combinations of the above will also be crossed. |
| ''' |
| } |
| { |
| name: alert_cg |
| desc: ''' |
| Covers fatal fault error alert when forcing command error |
| and recover operation error alert when forcing data error. |
| Individual alert settings and signals that will be covered include: |
| - fatal fault error alert |
| - recoverable operation error alert |
| ''' |
| } |
| { |
| name: inter_cg |
| desc: ''' |
| Covers that all valid settings of Interrupt Enable Register |
| and Interrupt State Register register have been tested. |
| Individual interrupt settings that will be covered include: |
| - Interrupt Enable Register[0] (done_ch0) |
| - Interrupt Enable Register[1] (done_ch1) |
| - Interrupt State Register[0] (done_ch0) |
| - Interrupt State Register[1] (done_ch1) |
| Combinations of Interrupt Enable and Interrupt State |
| registers for each channel will be crossed |
| ''' |
| } |
| { |
| name: pattern_len_ch0_cg |
| desc: ''' |
| Covers various Lengths of the channel0 seed pattern ranges, |
| to ensure that Pattgen can operate successfully |
| on different pattern lengths. |
| we will cover that an acceptable distribution of lengths has been seen, |
| and specifically cover some corner cases. |
| ''' |
| } |
| { |
| name: pattern_len_ch1_cg |
| desc: ''' |
| Similar to channel 0. |
| ''' |
| } |
| { |
| name: pattern_reps_ch0_cg |
| desc: ''' |
| Covers various numbers of channel repetitions of the channel0, to ensure that Pattgen |
| can operate successfully on different pattern lengths. |
| we will cover that an acceptable distribution of lengths has been seen, |
| and specifically cover all corner cases. |
| ''' |
| } |
| { |
| name: pattern_reps_ch1_cg |
| desc: ''' |
| Similar to channel 0. |
| ''' |
| } |
| { |
| name: pattern_prediv_ch0_cg |
| desc: ''' |
| Covers various numbers of clock divide ratios of the channel0, to ensure that Pattgen |
| can operate successfully on different clock divide ratios. |
| we will cover that an acceptable distribution of lengths has been seen, |
| and specifically cover corner cases. |
| ''' |
| } |
| { |
| name: pattern_prediv_ch1_cg |
| desc: ''' |
| Similar to channel 0. |
| ''' |
| } |
| { |
| name: pattern_data_ch0_0_cg |
| desc: ''' |
| Covers various data_0 values of the channel0 seed pattern ranges, |
| to ensure that Pattgen can operate successfully on different pattern lengths. |
| we will cover that an acceptable distribution of lengths has been seen, |
| and specifically cover corner cases. |
| ''' |
| } |
| { |
| name: pattern_data_ch0_1_cg |
| desc: ''' |
| Similar to pattern_data_ch0_0_cg, except using data_1 values |
| ''' |
| } |
| { |
| name: pattern_data_ch1_0_cg |
| desc: ''' |
| Similar to pattern_data_ch0_0_cg. |
| ''' |
| } |
| { |
| name: pattern_data_ch1_1_cg |
| desc: ''' |
| Similar to pattern_data_ch0_1_cg. |
| ''' |
| } |
| |
| ] |
| |
| } |