[edn/dv] Verify auto_req_mode
Signed-off-by: Steve Nelson <steve.nelson@wdc.com>
diff --git a/hw/dv/sv/csrng_agent/csrng_device_driver.sv b/hw/dv/sv/csrng_agent/csrng_device_driver.sv
index d4c78bf..185e264 100644
--- a/hw/dv/sv/csrng_agent/csrng_device_driver.sv
+++ b/hw/dv/sv/csrng_agent/csrng_device_driver.sv
@@ -13,7 +13,6 @@
super.run_phase(phase);
endtask
- // TODO: drive_trans
virtual task reset_signals();
cfg.vif.cmd_rsp_int.csrng_rsp_ack <= 1'b0;
cfg.vif.cmd_rsp_int.csrng_rsp_sts <= 1'b0;
diff --git a/hw/dv/sv/csrng_agent/csrng_monitor.sv b/hw/dv/sv/csrng_agent/csrng_monitor.sv
index 8086af9..6d177a9 100644
--- a/hw/dv/sv/csrng_agent/csrng_monitor.sv
+++ b/hw/dv/sv/csrng_agent/csrng_monitor.sv
@@ -59,6 +59,7 @@
forever begin
for (int i = 0; i <= cs_item.clen; i++) begin
csrng_cmd_fifo.get(item);
+ `uvm_info(`gfn, $sformatf("Received cs_item: %s", item.convert2string()), UVM_HIGH)
if (i == 0) begin
cs_item.acmd = acmd_e'(item.h_data[3:0]);
cs_item.clen = item.h_data[7:4];
@@ -77,7 +78,7 @@
end
end
cfg.vif.wait_cmd_ack();
- `uvm_info(`gfn, $sformatf("Captured cs_item: %s", cs_item.convert2string()), UVM_HIGH)
+ `uvm_info(`gfn, $sformatf("Writing analysis_port: %s", cs_item.convert2string()), UVM_HIGH)
analysis_port.write(cs_item);
end
endtask
@@ -100,7 +101,8 @@
cs_item.acmd = acmd_e'(cfg.vif.mon_cb.cmd_req.csrng_req_bus[3:0]);
if (cs_item.acmd == csrng_pkg::GEN)
cs_item.glen = cfg.vif.mon_cb.cmd_req.csrng_req_bus[30:12];
- `uvm_info(`gfn, $sformatf("Captured item: %s", cs_item.convert2string()), UVM_HIGH)
+ `uvm_info(`gfn, $sformatf("Writing req_analysis_port: %s", cs_item.convert2string()),
+ UVM_HIGH)
req_analysis_port.write(cs_item);
// After picking up a request, wait until a response is sent before
// detecting another request, as this is not a pipelined protocol.
diff --git a/hw/ip/edn/dv/env/edn_env_cfg.sv b/hw/ip/edn/dv/env/edn_env_cfg.sv
index 5a66f82..9cc0140 100644
--- a/hw/ip/edn/dv/env/edn_env_cfg.sv
+++ b/hw/ip/edn/dv/env/edn_env_cfg.sv
@@ -19,27 +19,43 @@
`uvm_object_new
// Knobs & Weights
- uint enable_pct, boot_req_mode_pct, auto_req_mode_pct;
+ uint enable_pct, boot_req_mode_pct, auto_req_mode_pct,
+ min_num_boot_genbits, max_num_boot_genbits,
+ min_num_requests, max_num_requests,
+ min_num_reqs_between_reseeds, max_num_reqs_between_reseeds;
rand mubi4_t enable, boot_req_mode, auto_req_mode;
- rand uint num_endpoints;
+ rand uint num_endpoints, num_boot_genbits, num_reqs_between_reseeds;
rand bit [csrng_pkg::CSRNG_CMD_WIDTH - 1:0] boot_ins_cmd, boot_gen_cmd;
// Constraints
// TODO: utilize suggestions in PR9535 to generate "other" values when testing alerts
constraint enable_c {enable dist {
- MuBi4True :/ enable_pct,
- MuBi4False :/ (100 - enable_pct) };}
- constraint boot_req_mode_c {boot_req_mode dist {
- MuBi4True :/ boot_req_mode_pct,
- MuBi4False :/ (100 - boot_req_mode_pct) };}
- constraint auto_req_mode_c {auto_req_mode dist {
- MuBi4True :/ auto_req_mode_pct,
- MuBi4False :/ (100 - auto_req_mode_pct) };}
+ MuBi4True :/ enable_pct,
+ MuBi4False :/ (100 - enable_pct) };}
+
constraint num_endpoints_c {num_endpoints dist {
- MIN_NUM_ENDPOINTS :/ 40,
- MAX_NUM_ENDPOINTS :/ 40,
- [MIN_NUM_ENDPOINTS + 1:MAX_NUM_ENDPOINTS - 1] :/ 20 };}
+ MIN_NUM_ENDPOINTS :/ 40,
+ MAX_NUM_ENDPOINTS :/ 40,
+ [MIN_NUM_ENDPOINTS + 1:MAX_NUM_ENDPOINTS - 1] :/ 20 };}
+
+ constraint req_mode_c {{boot_req_mode, auto_req_mode} dist {
+ {MuBi4True, MuBi4False} :/ boot_req_mode_pct,
+ {MuBi4False, MuBi4True} :/ auto_req_mode_pct,
+ {MuBi4False, MuBi4False} :/ (100 - boot_req_mode_pct - auto_req_mode_pct) };
+
+ if (boot_req_mode == MuBi4True) {
+ num_boot_genbits inside { [min_num_boot_genbits:max_num_boot_genbits] };
+ }
+ else {
+ num_boot_genbits == 0;}
+
+ if (auto_req_mode == MuBi4True) {
+ num_reqs_between_reseeds inside {
+ [min_num_reqs_between_reseeds:max_num_reqs_between_reseeds] };
+ }
+ else {
+ num_reqs_between_reseeds == 0;}}
virtual function void initialize(bit [31:0] csr_base_addr = '1);
list_of_alerts = edn_env_pkg::LIST_OF_ALERTS;
@@ -67,17 +83,37 @@
virtual function string convert2string();
string str = "";
str = {str, "\n"};
- str = {str, $sformatf("\n\t |************** edn_env_cfg ****************| \t") };
- str = {str, $sformatf("\n\t |***** enable : %10d *****| \t", enable) };
- str = {str, $sformatf("\n\t |***** boot_req_mode : %10d *****| \t", boot_req_mode) };
- str = {str, $sformatf("\n\t |***** auto_req_mode : %10d *****| \t", auto_req_mode) };
- str = {str, $sformatf("\n\t |***** num_endpoints : %10d *****| \t", num_endpoints) };
- str = {str, $sformatf("\n\t |---------- knobs --------------------------| \t") };
- str = {str, $sformatf("\n\t |***** enable_pct : %10d *****| \t", enable_pct) };
- str = {str, $sformatf("\n\t |***** boot_req_mode_pct : %10d *****| \t", boot_req_mode_pct) };
- str = {str, $sformatf("\n\t |***** auto_req_mode_pct : %10d *****| \t", auto_req_mode_pct) };
- str = {str, $sformatf("\n\t |***** MAX_NUM_ENDPOINTS : %10d *****| \t", MAX_NUM_ENDPOINTS) };
- str = {str, $sformatf("\n\t |*******************************************| \t") };
+ str = {str, $sformatf("\n\t |******************* edn_env_cfg *********************| \t")};
+ str = {str, $sformatf("\n\t |***** enable : %10s *****| \t",
+ enable.name())};
+ str = {str, $sformatf("\n\t |***** boot_req_mode : %10s *****| \t",
+ boot_req_mode.name())};
+ str = {str, $sformatf("\n\t |***** auto_req_mode : %10s *****| \t",
+ auto_req_mode.name())};
+ str = {str, $sformatf("\n\t |***** num_endpoints : %10d *****| \t",
+ num_endpoints)};
+ str = {str, $sformatf("\n\t |***** num_boot_genbits : %10d *****| \t",
+ num_boot_genbits)};
+ str = {str, $sformatf("\n\t |***** num_reqs_between_reseeds : %10d *****| \t",
+ num_reqs_between_reseeds)};
+ str = {str, $sformatf("\n\t |------------------- knobs ---------------------------| \t")};
+ str = {str, $sformatf("\n\t |***** enable_pct : %10d *****| \t",
+ enable_pct)};
+ str = {str, $sformatf("\n\t |***** boot_req_mode_pct : %10d *****| \t",
+ boot_req_mode_pct)};
+ str = {str, $sformatf("\n\t |***** auto_req_mode_pct : %10d *****| \t",
+ auto_req_mode_pct)};
+ str = {str, $sformatf("\n\t |***** MAX_NUM_ENDPOINTS : %10d *****| \t",
+ MAX_NUM_ENDPOINTS)};
+ str = {str, $sformatf("\n\t |***** min_num_boot_genbits : %10d *****| \t",
+ min_num_boot_genbits)};
+ str = {str, $sformatf("\n\t |***** max_num_boot_genbits : %10d *****| \t",
+ max_num_boot_genbits)};
+ str = {str, $sformatf("\n\t |***** min_num_reqs_between_reseeds : %10d *****| \t",
+ min_num_boot_genbits)};
+ str = {str, $sformatf("\n\t |***** max_num_reqs_between_reseeds : %10d *****| \t",
+ max_num_boot_genbits)};
+ str = {str, $sformatf("\n\t |*****************************************************| \t")};
str = {str, "\n"};
return str;
endfunction
diff --git a/hw/ip/edn/dv/env/edn_env_pkg.sv b/hw/ip/edn/dv/env/edn_env_pkg.sv
index 94c4a6e..67f6d48 100644
--- a/hw/ip/edn/dv/env/edn_env_pkg.sv
+++ b/hw/ip/edn/dv/env/edn_env_pkg.sv
@@ -24,8 +24,7 @@
// parameters
parameter uint MIN_NUM_ENDPOINTS = 1;
parameter uint MAX_NUM_ENDPOINTS = 7;
- parameter uint MIN_NUM_REQUESTS = 4;
- parameter uint MAX_NUM_REQUESTS = 32;
+ parameter uint MIN_GLEN = 1;
parameter string LIST_OF_ALERTS[] = {"recov_alert","fatal_alert"};
parameter uint NUM_ALERTS = 2;
diff --git a/hw/ip/edn/dv/env/edn_scoreboard.sv b/hw/ip/edn/dv/env/edn_scoreboard.sv
index a89c67b..39170f8 100644
--- a/hw/ip/edn/dv/env/edn_scoreboard.sv
+++ b/hw/ip/edn/dv/env/edn_scoreboard.sv
@@ -111,6 +111,12 @@
end
"sum_sts": begin
end
+ "generate_cmd": begin
+ end
+ "reseed_cmd": begin
+ end
+ "max_num_reqs_between_reseeds": begin
+ end
default: begin
`uvm_fatal(`gfn, $sformatf("invalid csr: %0s", csr.get_full_name()))
end
diff --git a/hw/ip/edn/dv/env/seq_lib/edn_base_vseq.sv b/hw/ip/edn/dv/env/seq_lib/edn_base_vseq.sv
index 015d2b3..e9354df 100644
--- a/hw/ip/edn/dv/env/seq_lib/edn_base_vseq.sv
+++ b/hw/ip/edn/dv/env/seq_lib/edn_base_vseq.sv
@@ -9,14 +9,11 @@
.VIRTUAL_SEQUENCER_T (edn_virtual_sequencer)
);
`uvm_object_utils(edn_base_vseq)
-
`uvm_object_new
bit do_edn_init = 1'b1;
bit [csrng_pkg::GENBITS_BUS_WIDTH - 1:0] genbits;
bit [entropy_src_pkg::FIPS_BUS_WIDTH - 1:0] fips;
- bit [3:0] acmd, clen, flags;
- bit [17:0] glen;
virtual edn_cov_if cov_vif;
@@ -42,8 +39,6 @@
csrng_device_seq m_dev_seq;
m_dev_seq = csrng_device_seq::type_id::create("m_dev_seq");
- `uvm_info(`gfn, "Start csrng_device sequence", UVM_DEBUG)
-
fork
m_dev_seq.start(p_sequencer.csrng_sequencer_h);
join_none
@@ -51,12 +46,11 @@
virtual task edn_init(string reset_kind = "HARD");
if (cfg.boot_req_mode == MuBi4True) begin
- // TODO: Randomize boot_ins_cmd/boot_gen_cmd
- cfg.boot_ins_cmd = 32'h1;
- csr_wr(.ptr(ral.boot_ins_cmd), .value(cfg.boot_ins_cmd));
- cfg.boot_gen_cmd = 32'h1003;
- csr_wr(.ptr(ral.boot_gen_cmd), .value(cfg.boot_gen_cmd));
+ wr_cmd(.cmd_type("boot_ins"), .acmd(csrng_pkg::INS), .clen(0), .flags(0), .glen(0));
+ wr_cmd(.cmd_type("boot_gen"), .acmd(csrng_pkg::GEN), .clen(0), .flags(0),
+ .glen(cfg.num_boot_genbits));
end
+
// Enable edn, set modes
ral.ctrl.edn_enable.set(cfg.enable);
ral.ctrl.boot_req_mode.set(cfg.boot_req_mode);
@@ -69,4 +63,26 @@
// TODO
endtask
+ virtual task wr_cmd(string cmd_type, csrng_pkg::acmd_e acmd,
+ bit[3:0] clen, bit[3:0] flags, bit[17:0] glen);
+ case (cmd_type)
+ "boot_ins": csr_wr(.ptr(ral.boot_ins_cmd), .value({glen, flags, clen, 1'b0, acmd}));
+ "boot_gen": csr_wr(.ptr(ral.boot_gen_cmd), .value({glen, flags, clen, 1'b0, acmd}));
+ "generate": csr_wr(.ptr(ral.generate_cmd), .value({glen, flags, clen, 1'b0, acmd}));
+ "reseed" : csr_wr(.ptr(ral.reseed_cmd), .value({glen, flags, clen, 1'b0, acmd}));
+ "sw" : begin
+ csr_spinwait(.ptr(ral.sw_cmd_sts.cmd_rdy), .exp_data(1'b1));
+ csr_wr(.ptr(ral.sw_cmd_req), .value({glen, flags, clen, 1'b0, acmd}));
+ wait_cmd_req_done();
+ end
+ default : `uvm_fatal(`gfn, $sformatf("Invalid cmd_type: %0s", cmd_type))
+ endcase
+ endtask
+
+ virtual task wait_cmd_req_done();
+ // Expect/Clear interrupt bit
+ csr_spinwait(.ptr(ral.intr_state.edn_cmd_req_done), .exp_data(1'b1));
+ check_interrupts(.interrupts((1 << CmdReqDone)), .check_set(1'b1));
+ endtask
+
endclass : edn_base_vseq
diff --git a/hw/ip/edn/dv/env/seq_lib/edn_genbits_vseq.sv b/hw/ip/edn/dv/env/seq_lib/edn_genbits_vseq.sv
index 1cb769c..8cfc0fe 100644
--- a/hw/ip/edn/dv/env/seq_lib/edn_genbits_vseq.sv
+++ b/hw/ip/edn/dv/env/seq_lib/edn_genbits_vseq.sv
@@ -4,41 +4,17 @@
class edn_genbits_vseq extends edn_base_vseq;
`uvm_object_utils(edn_genbits_vseq)
-
`uvm_object_new
- push_pull_host_seq#(edn_pkg::FIPS_ENDPOINT_BUS_WIDTH) m_endpoint_pull_seq[MAX_NUM_ENDPOINTS];
+ push_pull_host_seq#(edn_pkg::FIPS_ENDPOINT_BUS_WIDTH)
+ m_endpoint_pull_seq[MAX_NUM_ENDPOINTS];
- uint boot_requester, num_requesters, num_requests, num_requests_q[$], endpoint_q[$];
+ uint num_requesters, num_requests, num_genbits, endpoint_q[$];
task body();
super.body();
- // TODO: Test auto_req_mode
- `DV_CHECK_STD_RANDOMIZE_WITH_FATAL(boot_requester,
- boot_requester inside { [0:cfg.num_endpoints - 1] };)
- m_endpoint_pull_seq[boot_requester] = push_pull_host_seq#(edn_pkg::FIPS_ENDPOINT_BUS_WIDTH)::
- type_id::create($sformatf("m_endpoint_pull_seq[%0d]", boot_requester));
-
- // Verify boot_req_mode cmds, continue after disable
- if (cfg.boot_req_mode == MuBi4True) begin
- m_endpoint_pull_seq[boot_requester].num_trans =
- csrng_pkg::GENBITS_BUS_WIDTH/ENDPOINT_BUS_WIDTH;
- m_endpoint_pull_seq[boot_requester].start(p_sequencer.endpoint_sequencer_h[boot_requester]);
- end
-
- // Wait for cmd_rdy
- csr_spinwait(.ptr(ral.sw_cmd_sts.cmd_rdy), .exp_data(1'b1));
-
- // Create/Send INS cmd
- acmd = csrng_pkg::INS;
- csr_wr(.ptr(ral.sw_cmd_req), .value({glen, flags, clen, acmd}));
-
- // Expect/Clear interrupt bit
- csr_spinwait(.ptr(ral.intr_state.edn_cmd_req_done), .exp_data(1'b1));
- check_interrupts(.interrupts((1 << CmdReqDone)), .check_set(1'b1));
-
- // Determine which endpoints requesting
+ // Determine which endpoints are requesting
for (int i = 0; i < cfg.num_endpoints; i++) begin
endpoint_q.push_back(i);
end
@@ -47,34 +23,25 @@
num_requesters inside { [1:cfg.num_endpoints] };)
endpoint_q = endpoint_q[0:num_requesters - 1];
- // Calculate num_requests -> glen
for (int i = 0; i < num_requesters; i++) begin
+ // Calculate num_requests -> glen
`DV_CHECK_STD_RANDOMIZE_WITH_FATAL(num_requests,
num_requests inside
- { [MIN_NUM_REQUESTS:MAX_NUM_REQUESTS] };
+ { [cfg.min_num_requests:cfg.max_num_requests] };
num_requests % 4 == 0;)
- num_requests_q.push_back(num_requests);
- glen += num_requests/4;
- end
+ num_genbits += num_requests/4;
- // Load genbits_agent
- for (int i = 0; i < glen; i++) begin
- `DV_CHECK_STD_RANDOMIZE_FATAL(fips)
- `DV_CHECK_STD_RANDOMIZE_FATAL(genbits)
- cfg.m_csrng_agent_cfg.m_genbits_push_agent_cfg.add_h_user_data({fips, genbits});
- end
+ if ((i == 0) && (cfg.boot_req_mode == MuBi4True)) begin
+ // TODO: Not hard-coded 4
+ num_requests += cfg.num_boot_genbits * 4;
+ end
- // Create/configure endpoint_pull sequences
- for (int i = 0; i < num_requesters; i++) begin
+ // Create/Configure endpoint_pull_seq
m_endpoint_pull_seq[endpoint_q[i]] = push_pull_host_seq#(FIPS_ENDPOINT_BUS_WIDTH)::
type_id::create($sformatf("m_endpoint_pull_seq[%0d]", endpoint_q[i]));
- m_endpoint_pull_seq[endpoint_q[i]].num_trans = num_requests_q[i];
+ m_endpoint_pull_seq[endpoint_q[i]].num_trans = num_requests;
end
- // Create/Send GEN cmd
- acmd = csrng_pkg::GEN;
- csr_wr(.ptr(ral.sw_cmd_req), .value({glen, flags, clen, acmd}));
-
// Start endpoint_pull sequences
for (int i = 0; i < num_requesters; i++) begin
automatic int j = i;
@@ -86,9 +53,30 @@
join_none;
end
- // Expect/Clear interrupt bit
- csr_spinwait(.ptr(ral.intr_state.edn_cmd_req_done), .exp_data(1'b1));
- check_interrupts(.interrupts((1 << CmdReqDone)), .check_set(1'b1));
+ if (cfg.auto_req_mode == MuBi4True) begin
+ // TODO: Doesn't test functionality of max_num_reqs_between_reseeds register
+ csr_wr(.ptr(ral.max_num_reqs_between_reseeds), .value(cfg.num_reqs_between_reseeds));
+ wr_cmd(.cmd_type("reseed"), .acmd(csrng_pkg::RES), .clen(0), .flags(0), .glen(0));
+ wr_cmd(.cmd_type("generate"), .acmd(csrng_pkg::GEN), .clen(0), .flags(4'hF),
+ // .glen(MIN_GLEN));
+ .glen(num_genbits));
+ end
+
+ // TODO: Make num_requests not 4*num_genbits
+ if (cfg.boot_req_mode != MuBi4True) begin
+ // Send instantiate cmd
+ wr_cmd(.cmd_type("sw"), .acmd(csrng_pkg::INS), .clen(0), .flags(4'hF), .glen(0));
+ end
+
+ if (cfg.auto_req_mode != MuBi4True) begin
+ // Send generate cmd
+ wr_cmd(.cmd_type("sw"), .acmd(csrng_pkg::GEN), .clen(0), .flags(1), .glen(num_genbits));
+ end
+
+ if (cfg.auto_req_mode == MuBi4True) begin
+ ral.ctrl.auto_req_mode.set(MuBi4False);
+ csr_update(.csr(ral.ctrl));
+ end
endtask
endclass
diff --git a/hw/ip/edn/dv/env/seq_lib/edn_smoke_vseq.sv b/hw/ip/edn/dv/env/seq_lib/edn_smoke_vseq.sv
index 71f220e..f755006 100644
--- a/hw/ip/edn/dv/env/seq_lib/edn_smoke_vseq.sv
+++ b/hw/ip/edn/dv/env/seq_lib/edn_smoke_vseq.sv
@@ -12,64 +12,23 @@
task body();
super.body();
+ // Create single endpoint sequence
m_endpoint_pull_seq[0] = push_pull_host_seq#(edn_pkg::FIPS_ENDPOINT_BUS_WIDTH)::type_id::
create("m_endpoint_pull_seq[0]");
- // Verify boot_req_mode cmds, continue after disable
- if (cfg.boot_req_mode == MuBi4True) begin
- m_endpoint_pull_seq[0].num_trans = csrng_pkg::GENBITS_BUS_WIDTH/ENDPOINT_BUS_WIDTH;
- m_endpoint_pull_seq[0].start(p_sequencer.endpoint_sequencer_h[0]);
- end
-
- // Wait for cmd_rdy
- csr_spinwait(.ptr(ral.sw_cmd_sts.cmd_rdy), .exp_data(1'b1));
-
- // Create/Send INS cmd
- acmd = csrng_pkg::INS;
- flags = 'h1;
- glen = 'h0;
- csr_wr(.ptr(ral.sw_cmd_req), .value({glen, flags, clen, acmd}));
-
- // Expect/Clear interrupt bit
- csr_spinwait(.ptr(ral.intr_state.edn_cmd_req_done), .exp_data(1'b1));
- check_interrupts(.interrupts((1 << CmdReqDone)), .check_set(1'b1));
-
- // Load genbits_agent
- `DV_CHECK_STD_RANDOMIZE_FATAL(fips)
- `DV_CHECK_STD_RANDOMIZE_FATAL(genbits)
- `uvm_info(`gfn, $sformatf("{fips, genbits} = %0h", {fips, genbits}), UVM_DEBUG)
- cfg.m_csrng_agent_cfg.m_genbits_push_agent_cfg.add_h_user_data({fips, genbits});
-
- // Wait for cmd_rdy
- csr_spinwait(.ptr(ral.sw_cmd_sts.cmd_rdy), .exp_data(1'b1));
-
- // Create/Send GEN cmd
- acmd = csrng_pkg::GEN;
- flags = 'h0;
- glen = 'h1;
- csr_wr(.ptr(ral.sw_cmd_req), .value({glen, flags, clen, acmd}));
+ // Send instantiate cmd
+ wr_cmd(.cmd_type("sw"), .acmd(csrng_pkg::INS), .clen(0), .flags(0), .glen(0));
// Request data
m_endpoint_pull_seq[0] = push_pull_host_seq#(edn_pkg::FIPS_ENDPOINT_BUS_WIDTH)::type_id::
create("m_endpoint_pull_seq[0]");
m_endpoint_pull_seq[0].num_trans = csrng_pkg::GENBITS_BUS_WIDTH/ENDPOINT_BUS_WIDTH;
- m_endpoint_pull_seq[0].start(p_sequencer.endpoint_sequencer_h[0]);
+ fork
+ m_endpoint_pull_seq[0].start(p_sequencer.endpoint_sequencer_h[0]);
+ join_none
- // Expect/Clear interrupt bit
- csr_spinwait(.ptr(ral.intr_state.edn_cmd_req_done), .exp_data(1'b1));
- check_interrupts(.interrupts((1 << CmdReqDone)), .check_set(1'b1));
-
- // Create/Send GEN cmd
- acmd = csrng_pkg::UNI;
- clen = 'h0;
- flags = 'h0;
- glen = 'h0;
- csr_wr(.ptr(ral.sw_cmd_req), .value({glen, flags, clen, acmd}));
-
- // Expect/Clear interrupt bit
- csr_spinwait(.ptr(ral.intr_state.edn_cmd_req_done), .exp_data(1'b1));
- check_interrupts(.interrupts((1 << CmdReqDone)), .check_set(1'b1));
-
+ // Send generate cmd
+ wr_cmd(.cmd_type("sw"), .acmd(csrng_pkg::GEN), .clen(0), .flags(0), .glen(1));
endtask
endclass
diff --git a/hw/ip/edn/dv/tests/edn_base_test.sv b/hw/ip/edn/dv/tests/edn_base_test.sv
index 29d69a1..47768ae 100644
--- a/hw/ip/edn/dv/tests/edn_base_test.sv
+++ b/hw/ip/edn/dv/tests/edn_base_test.sv
@@ -24,9 +24,7 @@
// the run_phase; as such, nothing more needs to be done
virtual function void configure_env();
- cfg.enable_pct = 100;
- // TODO: Set percentage after PR#10339
- cfg.boot_req_mode_pct = 0;
+ cfg.enable_pct = 100;
cfg.m_csrng_agent_cfg.cmd_ack_zero_delays = 0; // Can't handle cmd ack too soon after req
cfg.m_csrng_agent_cfg.min_cmd_ack_dly = 4;
diff --git a/hw/ip/edn/dv/tests/edn_genbits_test.sv b/hw/ip/edn/dv/tests/edn_genbits_test.sv
index 74e8d73..62c73fd 100644
--- a/hw/ip/edn/dv/tests/edn_genbits_test.sv
+++ b/hw/ip/edn/dv/tests/edn_genbits_test.sv
@@ -10,6 +10,15 @@
function void configure_env();
super.configure_env();
+ cfg.boot_req_mode_pct = 30;
+ cfg.auto_req_mode_pct = 30;
+ cfg.min_num_boot_genbits = 1;
+ cfg.max_num_boot_genbits = 4;
+ cfg.min_num_reqs_between_reseeds = 1;
+ cfg.max_num_reqs_between_reseeds = 1;
+ cfg.min_num_requests = 4;
+ cfg.max_num_requests = 16;
+
`DV_CHECK_RANDOMIZE_FATAL(cfg)
`uvm_info(`gfn, $sformatf("%s", cfg.convert2string()), UVM_HIGH)
endfunction