|  | // Copyright lowRISC contributors. | 
|  | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  | { | 
|  | name: "pwm" | 
|  | 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/tl_device_access_types_testplan.hjson", | 
|  | "pwm_sec_cm_testplan.hjson"], | 
|  | testpoints: [ | 
|  | { | 
|  | name: smoke | 
|  | desc: ''' | 
|  | pwm_smoke tests pulse and blink mode for a single channel | 
|  |  | 
|  | Stimulus: | 
|  | - configure the envionment for one PWM channel | 
|  | - program the duty cycle a and b values | 
|  | - configure  the ClkDiv and Resn | 
|  |  | 
|  | Checking: | 
|  | - ensure pulses are generated correctly in pulse or blink mode | 
|  |  | 
|  | ''' | 
|  | stage: V1 | 
|  | tests: ["pwm_smoke"] | 
|  | } | 
|  | { | 
|  | name: dutycycle | 
|  | desc: ''' | 
|  | Verify different duty cycle settings in Pulse, Blink and Heart Beat mode. | 
|  |  | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_rand_output"] | 
|  | } | 
|  | { | 
|  | name: pulse | 
|  | desc: ''' | 
|  | Verify the pulse mode of the PWM | 
|  | by de-asserting blink_en field in the PWM_PARAM register | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_rand_output"] | 
|  | } | 
|  | { | 
|  | name: blink | 
|  | desc: ''' | 
|  | Verify the blink mode of the PWM | 
|  | by asserting the blink_en field in the PWM_PARAM register | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_rand_output"] | 
|  | } | 
|  | { | 
|  | name: heartbeat | 
|  | desc: ''' | 
|  | Verify the Heart Beat mode of the PWM | 
|  | by asserting the blink_en and HTBT field in the PWM_PARAM register | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_rand_output"] | 
|  | } | 
|  | { | 
|  | name: resolution | 
|  | desc: ''' | 
|  | Verify the PWM generates correct duty cycle for different resolution settings | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_rand_output"] | 
|  | } | 
|  | { | 
|  | name: multi_channel | 
|  | desc: ''' | 
|  | Verifies that PWM correctly generates pulses on multiple channels concurrently | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_rand_output"] | 
|  | } | 
|  | { | 
|  | name: polarity | 
|  | desc: ''' | 
|  | Verify that the polarity of the pulse can be inverted by setting the invert channel bit in the invert register | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_rand_output"] | 
|  | } | 
|  | { | 
|  | name: phase | 
|  | desc: ''' | 
|  | Check that the relative phase between pulses matches the setting in the phase_delay field in the PWM_PARAM register. | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_rand_output"] | 
|  | } | 
|  | { | 
|  | name: lowpower | 
|  | desc: ''' | 
|  | Verify the PWM can continue when the chip is in low power mode. | 
|  | Stimulus: | 
|  | - start PWM on one or more channels | 
|  | - stop the TL UL clock | 
|  |  | 
|  | Checks: | 
|  | - Ensure pulses are still generated when in LP mode | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_rand_output"] | 
|  | } | 
|  | { | 
|  | name: perf | 
|  | desc: ''' | 
|  | Checking ip operation at min/max bandwidth | 
|  |  | 
|  | Stimulus: | 
|  | - Program timing registers (CLK_DIV, DC_RESN) to high/low values (slow/fast data rate) | 
|  | - Program other required registers for pwm operation | 
|  | - Start pwm channels | 
|  |  | 
|  | Checks: | 
|  | - Ensure the output pulses are correctly modulated for all channels | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_perf"] | 
|  | } | 
|  | { | 
|  | 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 | 
|  | ''' | 
|  | stage: V2 | 
|  | tests: ["pwm_stress_all"] | 
|  | } | 
|  | ] | 
|  |  | 
|  | covergroups: [ | 
|  | { | 
|  | name: regwen_cg | 
|  | desc: ''' | 
|  | Covers that an attempt to write wen REG enable was made and was unsuccessful | 
|  | ''' | 
|  | } | 
|  | { | 
|  | name: cfg_cg | 
|  | desc: ''' | 
|  | Covers that valid settings for the PWM.CFG register has been tested. | 
|  | This includes values for: | 
|  | - clk_div | 
|  | - dc_resn | 
|  | - cntr_en | 
|  | ''' | 
|  | } | 
|  | { | 
|  | name: pwm_en_cg | 
|  | desc: ''' | 
|  | Covers that both runs with a single PWM channel and multiple channels has been tested. | 
|  | Verifies both when the channels are enabled for parallel behavior (activated at the same time) | 
|  | and activated individually | 
|  | ''' | 
|  | } | 
|  | { | 
|  | name: invert_cg | 
|  | desc: ''' | 
|  | Covers that channels have been tested with different polarity | 
|  | Also cover that a mix channels with invert enabled and disabled concurrently have been tested. | 
|  | ''' | 
|  | } | 
|  | { | 
|  | name: pwm_param_cg | 
|  | desc: ''' | 
|  | Covers that both pulse, blink and heart beat mode have been tested. | 
|  | Also covers that. | 
|  | - various phase delays have been tested | 
|  | - different delays on different concurrent channels | 
|  | ''' | 
|  | } | 
|  | { | 
|  | name: duty_cycle_cg | 
|  | desc: ''' | 
|  | Covers that a good range of combinations of values for A and B have been send. | 
|  | Also cover that multiple channels can run concurrently with different settings for A and B. | 
|  | Cover these cases: | 
|  | - A > B | 
|  | - A < B | 
|  | - A == B | 
|  | ''' | 
|  | } | 
|  | { | 
|  | name: blink_param_cg | 
|  | desc: ''' | 
|  | Covers that a good range of combinations of values for X and Y have been seend. | 
|  | Also cover that multiple channels can run concurrently with different settings for X and Y. | 
|  | ''' | 
|  | } | 
|  | { | 
|  | name: lowpower_cg | 
|  | desc: ''' | 
|  | Covers that the DUT will continue to produce pulses with TL clock disabled (low power mode) | 
|  | ''' | 
|  | } | 
|  | { | 
|  | name: clock_cg | 
|  | desc: ''' | 
|  | Cover that a range of frequencies have been tested for the PWM clock including a clock that matches the TL clk. | 
|  | ''' | 
|  | } | 
|  | { | 
|  | name: overwrite_conf_cg | 
|  | desc: ''' | 
|  | Cover that a the PWM configuration cannot be altered while a channel is active | 
|  | ''' | 
|  | } | 
|  | ] | 
|  | } |