[dv/cip_lib] devmode fix
In the current DV code, if `devmode_en` is set and `addrmiss` happened,
cip_lib scoreboard expect design to NOT set tl `d_error` bit. However,
in current design, the condition will set `d_error` to 1.
The reason this issue has not caused any mismatch is because: in dv we
assume `devmode_en` = 0, but in RTL, devmode is internally tied to 1.
This PR:
1. Fix the logic that `devmode_en` will trigger `d_error` if `addrmiss`.
2. Temporarily set `devmode_en` to 1 with a TODO note.
3. Comment out the code that drives devmode in tl_error_vseq, and add a
TODO to fix it once `devmode_i` is not internally tied off in RTL.
Signed-off-by: Cindy Chen <chencindy@google.com>
diff --git a/hw/dv/sv/cip_lib/cip_base_env_cfg.sv b/hw/dv/sv/cip_lib/cip_base_env_cfg.sv
index a419580..b78dfad 100644
--- a/hw/dv/sv/cip_lib/cip_base_env_cfg.sv
+++ b/hw/dv/sv/cip_lib/cip_base_env_cfg.sv
@@ -11,9 +11,10 @@
intr_vif intr_vif;
devmode_vif devmode_vif;
- // only security IP can support devmode. If supported, override it to 1 in initialize()
+ // en_devmode default sets to 1 because all IPs' devmode_i is tied off internally to 1
+ // TODO: enable random drive devmode once design supports
bit has_devmode = 1;
- bit en_devmode = 0;
+ bit en_devmode = 1;
uint num_interrupts;
string list_of_alerts[] = {};
diff --git a/hw/dv/sv/cip_lib/cip_base_scoreboard.sv b/hw/dv/sv/cip_lib/cip_base_scoreboard.sv
index 3658c1f..125585c 100644
--- a/hw/dv/sv/cip_lib/cip_base_scoreboard.sv
+++ b/hw/dv/sv/cip_lib/cip_base_scoreboard.sv
@@ -148,8 +148,8 @@
if (!is_tl_access_mapped_addr(item)) begin
is_tl_unmapped_addr = 1;
- // if devmode is enabled, d_error won't be set
- if (cfg.en_devmode == 0 || cfg.devmode_vif.sample()) begin
+ // if devmode is enabled, d_error will be set
+ if (cfg.en_devmode || cfg.devmode_vif.sample()) begin
is_tl_err = 1;
end
end
diff --git a/hw/dv/sv/cip_lib/cip_base_vseq__tl_errors.svh b/hw/dv/sv/cip_lib/cip_base_vseq__tl_errors.svh
index b395524..5119f7e 100644
--- a/hw/dv/sv/cip_lib/cip_base_vseq__tl_errors.svh
+++ b/hw/dv/sv/cip_lib/cip_base_vseq__tl_errors.svh
@@ -139,9 +139,11 @@
set_tl_assert_en(.enable(0));
for (int trans = 1; trans <= num_times; trans++) begin
`uvm_info(`gfn, $sformatf("Running run_tl_errors_vseq %0d/%0d", trans, num_times), UVM_LOW)
- if (cfg.en_devmode == 1) begin
- cfg.devmode_vif.drive($urandom_range(0, 1));
- end
+ // TODO: once devmode is not tied internally in design, randomly drive devmode_vif
+ // if (cfg.en_devmode == 1) begin
+ // cfg.devmode_vif.drive($urandom_range(0, 1));
+ // end
+
// use multiple thread to create outstanding access
fork
begin: isolation_fork