blob: 854459502dc31deccb4a176e4d2e19fb2e9cb5f0 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
package pwm_env_pkg;
// dep packages
import uvm_pkg::*;
import top_pkg::*;
import dv_utils_pkg::*;
import dv_lib_pkg::*;
import tl_agent_pkg::*;
import cip_base_pkg::*;
import dv_base_reg_pkg::*;
import csr_utils_pkg::*;
import pwm_monitor_pkg::*;
import pwm_reg_pkg::*;
import pwm_ral_pkg::*;
parameter uint PWM_NUM_CHANNELS = pwm_reg_pkg::NOutputs;
// macro includes
`include "uvm_macros.svh"
`include "dv_macros.svh"
// parameters
// alerts
parameter uint NUM_ALERTS = 1;
parameter string LIST_OF_ALERTS[] = {"fatal_fault"};
// datatype
typedef enum bit [1:0] {
Standard = 2'b00,
Blinking = 2'b01,
Heartbeat = 2'b11,
Allmodes = 2'b10
} pwm_mode_e;
typedef enum bit {
Enable = 1'b1,
Disable = 1'b0
} pwm_status_e;
typedef struct {
// cfg reg
rand bit [3:0] dc_resn;
rand bit [26:0] clk_div;
bit cntr_en;
// en reg
rand bit [PWM_NUM_CHANNELS-1:0] pwm_en;
// invert multireg
rand bit [PWM_NUM_CHANNELS-1:0] invert;
// param multireg
rand bit [PWM_NUM_CHANNELS-1:0] blink_en;
rand bit [PWM_NUM_CHANNELS-1:0] htbt_en;
rand bit [PWM_NUM_CHANNELS-1:0][15:0] phase_delay;
// duty_cycle multireg
rand bit [PWM_NUM_CHANNELS-1:0][15:0] duty_cycle_a;
rand bit [PWM_NUM_CHANNELS-1:0][15:0] duty_cycle_b;
// blink_param multireg
rand bit [PWM_NUM_CHANNELS-1:0][15:0] blink_param_x;
rand bit [PWM_NUM_CHANNELS-1:0][15:0] blink_param_y;
// mode multireg
rand pwm_mode_e [PWM_NUM_CHANNELS-1:0] pwm_mode;
// derived params
bit [27:0] beat_cycle; // 2**(clk_div+1) core cycles
bit [16:0] pulse_cycle; // 2**(dc_resn+1) beat cycles
} pwm_regs_t;
// function
function automatic pwm_mode_e get_pwm_mode(bit [1:0] mode);
return (mode == 2'b10) ? Blinking :
(mode == 2'b11) ? Heartbeat :
(mode == 2'b00) ? Standard :
Allmodes;
endfunction : get_pwm_mode
// package sources
`include "pwm_seq_cfg.sv"
`include "pwm_env_cfg.sv"
`include "pwm_env_cov.sv"
`include "pwm_virtual_sequencer.sv"
`include "pwm_scoreboard.sv"
`include "pwm_monitor.sv"
`include "pwm_env.sv"
`include "pwm_vseq_list.sv"
endpackage : pwm_env_pkg