[dv/shadowed_rst] Add shadowned reset interface to each IP
This PR adds shadowed reset to IPs that have shadowed regsiter:
AES, Alert_handler, and keymgr
Signed-off-by: Cindy Chen <chencindy@opentitan.org>
diff --git a/hw/ip/aes/dv/env/aes_env_cfg.sv b/hw/ip/aes/dv/env/aes_env_cfg.sv
index c917d84..1e19825 100644
--- a/hw/ip/aes/dv/env/aes_env_cfg.sv
+++ b/hw/ip/aes/dv/env/aes_env_cfg.sv
@@ -180,6 +180,7 @@
virtual function void initialize(bit [TL_AW-1:0] csr_base_addr = '1);
list_of_alerts = aes_env_pkg::LIST_OF_ALERTS;
has_edn = 1;
+ has_shadowed_regs = 1;
super.initialize(csr_base_addr);
tl_intg_alert_fields[ral.status.alert_fatal_fault] = 1;
shadow_update_err_status_fields[ral.status.alert_recov_ctrl_update_err] = 1;
diff --git a/hw/ip/aes/dv/tb/tb.sv b/hw/ip/aes/dv/tb/tb.sv
index 4011bc3..82d44e4 100644
--- a/hw/ip/aes/dv/tb/tb.sv
+++ b/hw/ip/aes/dv/tb/tb.sv
@@ -13,7 +13,7 @@
`include "uvm_macros.svh"
`include "dv_macros.svh"
- wire clk, rst_n;
+ wire clk, rst_n, rst_shadowed_n;
wire devmode;
wire [NUM_MAX_INTERRUPTS-1:0] interrupts;
wire edn_req;
@@ -21,6 +21,7 @@
// interfaces
clk_rst_if clk_rst_if(.clk(clk), .rst_n(rst_n));
+ rst_shadowed_if rst_shadowed_if(.rst_n(rst_n), .rst_shadowed_n(rst_shadowed_n));
pins_if #(NUM_MAX_INTERRUPTS) intr_if(interrupts);
pins_if #(1) devmode_if(devmode);
@@ -41,7 +42,7 @@
) dut (
.clk_i ( clk ),
.rst_ni ( rst_n ),
- .rst_shadowed_ni ( rst_n ),
+ .rst_shadowed_ni ( rst_shadowed_n ),
.idle_o ( ),
.lc_escalate_en_i ( lc_ctrl_pkg::Off ),
@@ -62,6 +63,8 @@
// drive clk and rst_n from clk_if
clk_rst_if.set_active();
uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "clk_rst_vif", clk_rst_if);
+ uvm_config_db#(virtual rst_shadowed_if)::set(null, "*.env", "rst_shadowed_vif",
+ rst_shadowed_if);
uvm_config_db#(intr_vif)::set(null, "*.env", "intr_vif", intr_if);
uvm_config_db#(devmode_vif)::set(null, "*.env", "devmode_vif", devmode_if);
uvm_config_db#(virtual tl_if)::set(null, "*.env.m_tl_agent*", "vif", tl_if);
diff --git a/hw/ip/keymgr/dv/env/keymgr_env_cfg.sv b/hw/ip/keymgr/dv/env/keymgr_env_cfg.sv
index 4ec5b1e..e66587b 100644
--- a/hw/ip/keymgr/dv/env/keymgr_env_cfg.sv
+++ b/hw/ip/keymgr/dv/env/keymgr_env_cfg.sv
@@ -18,6 +18,7 @@
list_of_alerts = keymgr_env_pkg::LIST_OF_ALERTS;
tl_intg_alert_name = "fatal_fault_err";
has_edn = 1;
+ has_shadowed_regs = 1;
super.initialize(csr_base_addr);
tl_intg_alert_fields[ral.fault_status.regfile_intg] = 1;
shadow_update_err_status_fields[ral.err_code.invalid_shadow_update] = 1;
diff --git a/hw/ip/keymgr/dv/tb.sv b/hw/ip/keymgr/dv/tb.sv
index b6dbcc1..c74282b 100644
--- a/hw/ip/keymgr/dv/tb.sv
+++ b/hw/ip/keymgr/dv/tb.sv
@@ -13,12 +13,13 @@
`include "uvm_macros.svh"
`include "dv_macros.svh"
- wire clk, rst_n;
+ wire clk, rst_n, rst_shadowed_n;
wire devmode;
wire [NUM_MAX_INTERRUPTS-1:0] interrupts;
// interfaces
clk_rst_if clk_rst_if(.clk(clk), .rst_n(rst_n));
+ rst_shadowed_if rst_shadowed_if(.rst_n(rst_n), .rst_shadowed_n(rst_shadowed_n));
pins_if #(NUM_MAX_INTERRUPTS) intr_if(interrupts);
pins_if #(1) devmode_if(devmode);
tl_if tl_if(.clk(clk), .rst_n(rst_n));
@@ -41,11 +42,11 @@
// dut
keymgr dut (
- .clk_i (clk ),
- .rst_ni (rst_n ),
- .rst_shadowed_ni (rst_n ),
- .clk_edn_i (edn_clk ),
- .rst_edn_ni (edn_rst_n ),
+ .clk_i (clk ),
+ .rst_ni (rst_n ),
+ .rst_shadowed_ni (rst_shadowed_n),
+ .clk_edn_i (edn_clk ),
+ .rst_edn_ni (edn_rst_n ),
.aes_key_o (keymgr_if.aes_key),
.otbn_key_o (keymgr_if.otbn_key),
.kmac_key_o (keymgr_if.kmac_key),
@@ -77,6 +78,8 @@
// drive clk and rst_n from clk_if
clk_rst_if.set_active();
uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "clk_rst_vif", clk_rst_if);
+ uvm_config_db#(virtual rst_shadowed_if)::set(null, "*.env", "rst_shadowed_vif",
+ rst_shadowed_if);
uvm_config_db#(intr_vif)::set(null, "*.env", "intr_vif", intr_if);
uvm_config_db#(devmode_vif)::set(null, "*.env", "devmode_vif", devmode_if);
uvm_config_db#(virtual tl_if)::set(null, "*.env.m_tl_agent*", "vif", tl_if);
diff --git a/hw/ip_templates/alert_handler/dv/env/alert_handler_env_cfg.sv b/hw/ip_templates/alert_handler/dv/env/alert_handler_env_cfg.sv
index 59f8ce3..6704258 100644
--- a/hw/ip_templates/alert_handler/dv/env/alert_handler_env_cfg.sv
+++ b/hw/ip_templates/alert_handler/dv/env/alert_handler_env_cfg.sv
@@ -19,6 +19,7 @@
virtual function void initialize(bit [TL_AW-1:0] csr_base_addr = '1);
has_edn = 1;
+ has_shadowed_regs = 1;
super.initialize(csr_base_addr);
shadow_update_err_status_fields[ral.loc_alert_cause[LocalShadowRegUpdateErr].la] = 1;
shadow_storage_err_status_fields[ral.loc_alert_cause[LocalShadowRegStorageErr].la] = 1;
diff --git a/hw/ip_templates/alert_handler/dv/tb/tb.sv b/hw/ip_templates/alert_handler/dv/tb/tb.sv
index 4deefb0..6992f64 100644
--- a/hw/ip_templates/alert_handler/dv/tb/tb.sv
+++ b/hw/ip_templates/alert_handler/dv/tb/tb.sv
@@ -13,7 +13,7 @@
`include "uvm_macros.svh"
`include "dv_macros.svh"
- wire clk, rst_n;
+ wire clk, rst_n, rst_shadowed_n;
wire devmode;
wire [NUM_MAX_INTERRUPTS-1:0] interrupts;
wire [NUM_MAX_ESC_SEV-1:0] esc_en;
@@ -21,6 +21,7 @@
// interfaces
clk_rst_if clk_rst_if(.clk(clk), .rst_n(rst_n));
+ rst_shadowed_if rst_shadowed_if(.rst_n(rst_n), .rst_shadowed_n(rst_shadowed_n));
pins_if #(NUM_MAX_INTERRUPTS) intr_if(interrupts);
pins_if #(NUM_CRASHDUMP) crashdump_if(crashdump);
pins_if #(1) devmode_if(devmode);
@@ -71,7 +72,7 @@
alert_handler dut (
.clk_i ( clk ),
.rst_ni ( rst_n ),
- .rst_shadowed_ni ( rst_n ),
+ .rst_shadowed_ni ( rst_shadowed_n),
.clk_edn_i ( edn_clk ),
.rst_edn_ni ( edn_rst_n ),
.tl_i ( tl_if.h2d ),
@@ -96,6 +97,8 @@
// drive clk and rst_n from clk_if
clk_rst_if.set_active();
uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "clk_rst_vif", clk_rst_if);
+ uvm_config_db#(virtual rst_shadowed_if)::set(null, "*.env", "rst_shadowed_vif",
+ rst_shadowed_if);
uvm_config_db#(intr_vif)::set(null, "*.env", "intr_vif", intr_if);
uvm_config_db#(crashdump_vif)::set(null, "*.env", "crashdump_vif", crashdump_if);
uvm_config_db#(devmode_vif)::set(null, "*.env", "devmode_vif", devmode_if);
diff --git a/hw/top_earlgrey/ip_autogen/alert_handler/dv/env/alert_handler_env_cfg.sv b/hw/top_earlgrey/ip_autogen/alert_handler/dv/env/alert_handler_env_cfg.sv
index 59f8ce3..6704258 100644
--- a/hw/top_earlgrey/ip_autogen/alert_handler/dv/env/alert_handler_env_cfg.sv
+++ b/hw/top_earlgrey/ip_autogen/alert_handler/dv/env/alert_handler_env_cfg.sv
@@ -19,6 +19,7 @@
virtual function void initialize(bit [TL_AW-1:0] csr_base_addr = '1);
has_edn = 1;
+ has_shadowed_regs = 1;
super.initialize(csr_base_addr);
shadow_update_err_status_fields[ral.loc_alert_cause[LocalShadowRegUpdateErr].la] = 1;
shadow_storage_err_status_fields[ral.loc_alert_cause[LocalShadowRegStorageErr].la] = 1;
diff --git a/hw/top_earlgrey/ip_autogen/alert_handler/dv/tb/tb.sv b/hw/top_earlgrey/ip_autogen/alert_handler/dv/tb/tb.sv
index 4deefb0..6992f64 100644
--- a/hw/top_earlgrey/ip_autogen/alert_handler/dv/tb/tb.sv
+++ b/hw/top_earlgrey/ip_autogen/alert_handler/dv/tb/tb.sv
@@ -13,7 +13,7 @@
`include "uvm_macros.svh"
`include "dv_macros.svh"
- wire clk, rst_n;
+ wire clk, rst_n, rst_shadowed_n;
wire devmode;
wire [NUM_MAX_INTERRUPTS-1:0] interrupts;
wire [NUM_MAX_ESC_SEV-1:0] esc_en;
@@ -21,6 +21,7 @@
// interfaces
clk_rst_if clk_rst_if(.clk(clk), .rst_n(rst_n));
+ rst_shadowed_if rst_shadowed_if(.rst_n(rst_n), .rst_shadowed_n(rst_shadowed_n));
pins_if #(NUM_MAX_INTERRUPTS) intr_if(interrupts);
pins_if #(NUM_CRASHDUMP) crashdump_if(crashdump);
pins_if #(1) devmode_if(devmode);
@@ -71,7 +72,7 @@
alert_handler dut (
.clk_i ( clk ),
.rst_ni ( rst_n ),
- .rst_shadowed_ni ( rst_n ),
+ .rst_shadowed_ni ( rst_shadowed_n),
.clk_edn_i ( edn_clk ),
.rst_edn_ni ( edn_rst_n ),
.tl_i ( tl_if.h2d ),
@@ -96,6 +97,8 @@
// drive clk and rst_n from clk_if
clk_rst_if.set_active();
uvm_config_db#(virtual clk_rst_if)::set(null, "*.env", "clk_rst_vif", clk_rst_if);
+ uvm_config_db#(virtual rst_shadowed_if)::set(null, "*.env", "rst_shadowed_vif",
+ rst_shadowed_if);
uvm_config_db#(intr_vif)::set(null, "*.env", "intr_vif", intr_if);
uvm_config_db#(crashdump_vif)::set(null, "*.env", "crashdump_vif", crashdump_if);
uvm_config_db#(devmode_vif)::set(null, "*.env", "devmode_vif", devmode_if);