[csrng/dv] create/integrate csrng_agent
Signed-off-by: Steve Nelson <steve.nelson@wdc.com>
diff --git a/hw/ip/csrng/dv/env/csrng_env.core b/hw/ip/csrng/dv/env/csrng_env.core
index 7907717..63f263a 100644
--- a/hw/ip/csrng/dv/env/csrng_env.core
+++ b/hw/ip/csrng/dv/env/csrng_env.core
@@ -10,7 +10,7 @@
- lowrisc:dv:ralgen
- lowrisc:dv:cip_lib
- lowrisc:dv:push_pull_agent
- - lowrisc:dv:entropy_src_env
+ - lowrisc:dv:csrng_agent
files:
- csrng_env_pkg.sv
- csrng_env_cfg.sv: {is_include_file: true}
diff --git a/hw/ip/csrng/dv/env/csrng_env.sv b/hw/ip/csrng/dv/env/csrng_env.sv
index b8052cc..727a4cf 100644
--- a/hw/ip/csrng/dv/env/csrng_env.sv
+++ b/hw/ip/csrng/dv/env/csrng_env.sv
@@ -10,22 +10,28 @@
);
`uvm_component_utils(csrng_env)
- push_pull_agent#(.HostDataWidth(entropy_src_env_pkg::FIPS_CSRNG_BUS_WIDTH)) m_entropy_src_agent;
+ push_pull_agent#(.HostDataWidth(entropy_src_pkg::FIPS_CSRNG_BUS_WIDTH)) m_entropy_src_agent;
+ csrng_agent m_csrng_agent;
`uvm_component_new
function void build_phase(uvm_phase phase);
super.build_phase(phase);
+
// create components
- m_entropy_src_agent = push_pull_agent#(.HostDataWidth(entropy_src_env_pkg::FIPS_CSRNG_BUS_WIDTH))
+ m_entropy_src_agent = push_pull_agent#(.HostDataWidth(entropy_src_pkg::FIPS_CSRNG_BUS_WIDTH))
::type_id::create("m_entropy_src_agent", this);
- uvm_config_db#(push_pull_agent_cfg#(.HostDataWidth(entropy_src_env_pkg::FIPS_CSRNG_BUS_WIDTH)))
+ uvm_config_db#(push_pull_agent_cfg#(.HostDataWidth(entropy_src_pkg::FIPS_CSRNG_BUS_WIDTH)))
::set(this, "m_entropy_src_agent*", "cfg", cfg.m_entropy_src_agent_cfg);
cfg.m_entropy_src_agent_cfg.agent_type = push_pull_agent_pkg::PullAgent;
cfg.m_entropy_src_agent_cfg.if_mode = dv_utils_pkg::Device;
+ m_csrng_agent = csrng_agent::type_id::create("m_csrng_agent", this);
+ uvm_config_db#(csrng_agent_cfg)::set(this, "m_csrng_agent*", "cfg", cfg.m_csrng_agent_cfg);
+ cfg.m_csrng_agent_cfg.if_mode = dv_utils_pkg::Host;
+
if (!uvm_config_db#(virtual pins_if)::get(this, "", "efuse_sw_app_enable_vif",
- cfg.efuse_sw_app_enable_vif)) begin
+ cfg.efuse_sw_app_enable_vif)) begin
`uvm_fatal(get_full_name(), "failed to get efuse_sw_app_enable_vif from uvm_config_db")
end
endfunction
diff --git a/hw/ip/csrng/dv/env/csrng_env_cfg.sv b/hw/ip/csrng/dv/env/csrng_env_cfg.sv
index 340ac51..43867a0 100644
--- a/hw/ip/csrng/dv/env/csrng_env_cfg.sv
+++ b/hw/ip/csrng/dv/env/csrng_env_cfg.sv
@@ -4,24 +4,28 @@
class csrng_env_cfg extends cip_base_env_cfg #(.RAL_T(csrng_reg_block));
- // ext component cfgs
- rand push_pull_agent_cfg#(.HostDataWidth(entropy_src_env_pkg::FIPS_CSRNG_BUS_WIDTH))
- m_entropy_src_agent_cfg;
-
- virtual pins_if efuse_sw_app_enable_vif;
-
`uvm_object_utils_begin(csrng_env_cfg)
- `uvm_field_object(m_entropy_src_agent_cfg, UVM_DEFAULT)
`uvm_object_utils_end
`uvm_object_new
+ // ext component cfgs
+ rand push_pull_agent_cfg#(.HostDataWidth(entropy_src_pkg::FIPS_CSRNG_BUS_WIDTH))
+ m_entropy_src_agent_cfg;
+
+ rand csrng_agent_cfg m_csrng_agent_cfg;
+
+ virtual pins_if efuse_sw_app_enable_vif;
+
virtual function void initialize(bit [31:0] csr_base_addr = '1);
super.initialize(csr_base_addr);
- // create push_pull agent config obj
- m_entropy_src_agent_cfg = push_pull_agent_cfg#(.HostDataWidth(entropy_src_env_pkg::
+
+ // create agent configs
+ m_entropy_src_agent_cfg = push_pull_agent_cfg#(.HostDataWidth(entropy_src_pkg::
FIPS_CSRNG_BUS_WIDTH))::type_id::create("m_entropy_src_agent_cfg");
+ m_csrng_agent_cfg = csrng_agent_cfg::type_id::create("m_csrng_agent_cfg");
+
// set num_interrupts & num_alerts
begin
uvm_reg rg = ral.get_reg_by_name("intr_state");
diff --git a/hw/ip/csrng/dv/env/csrng_env_pkg.sv b/hw/ip/csrng/dv/env/csrng_env_pkg.sv
index ab9b9be..83a236e 100644
--- a/hw/ip/csrng/dv/env/csrng_env_pkg.sv
+++ b/hw/ip/csrng/dv/env/csrng_env_pkg.sv
@@ -8,6 +8,7 @@
import top_pkg::*;
import dv_utils_pkg::*;
import push_pull_agent_pkg::*;
+ import csrng_agent_pkg::*;
import dv_lib_pkg::*;
import tl_agent_pkg::*;
import cip_base_pkg::*;
@@ -20,6 +21,7 @@
// parameters
parameter uint NUM_HW_APPS = 1;
+
parameter bit [TL_DW-1:0] [3:0] ZERO_SEED_GENBITS = {32'h0,
32'h0,
32'h0,
diff --git a/hw/ip/csrng/dv/env/csrng_scoreboard.sv b/hw/ip/csrng/dv/env/csrng_scoreboard.sv
index 8dd49f6..d1090f6 100644
--- a/hw/ip/csrng/dv/env/csrng_scoreboard.sv
+++ b/hw/ip/csrng/dv/env/csrng_scoreboard.sv
@@ -12,11 +12,11 @@
// local variables
// TLM agent fifos
- uvm_tlm_analysis_fifo#(push_pull_item#(.HostDataWidth(entropy_src_env_pkg::FIPS_CSRNG_BUS_WIDTH)))
+ uvm_tlm_analysis_fifo#(push_pull_item#(.HostDataWidth(entropy_src_pkg::FIPS_CSRNG_BUS_WIDTH)))
entropy_src_fifo;
// local queues to hold incoming packets pending comparison
- push_pull_item#(.HostDataWidth(entropy_src_env_pkg::FIPS_CSRNG_BUS_WIDTH))
+ push_pull_item#(.HostDataWidth(entropy_src_pkg::FIPS_CSRNG_BUS_WIDTH))
entropy_src_q[$];
`uvm_component_new
@@ -38,7 +38,7 @@
endtask
virtual task process_push_pull_fifo();
- push_pull_item#(.HostDataWidth(entropy_src_env_pkg::FIPS_CSRNG_BUS_WIDTH)) item;
+ push_pull_item#(.HostDataWidth(entropy_src_pkg::FIPS_CSRNG_BUS_WIDTH)) item;
forever begin
entropy_src_fifo.get(item);
`uvm_info(`gfn, $sformatf("received item:\n%0s", item.sprint()), UVM_HIGH)
diff --git a/hw/ip/csrng/dv/env/csrng_virtual_sequencer.sv b/hw/ip/csrng/dv/env/csrng_virtual_sequencer.sv
index 671f3c1..58f855d 100644
--- a/hw/ip/csrng/dv/env/csrng_virtual_sequencer.sv
+++ b/hw/ip/csrng/dv/env/csrng_virtual_sequencer.sv
@@ -8,7 +8,7 @@
);
`uvm_component_utils(csrng_virtual_sequencer)
- push_pull_sequencer#(.HostDataWidth(entropy_src_env_pkg::FIPS_CSRNG_BUS_WIDTH))
+ push_pull_sequencer#(.HostDataWidth(entropy_src_pkg::FIPS_CSRNG_BUS_WIDTH))
entropy_src_sequencer_h;
`uvm_component_new