[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