diff --git a/hw/top_chip/data/rstmgr_cfg.hjson b/hw/top_chip/data/rstmgr_cfg.hjson index 09344b17d..a8d78eb12 100644 --- a/hw/top_chip/data/rstmgr_cfg.hjson +++ b/hw/top_chip/data/rstmgr_cfg.hjson @@ -112,7 +112,7 @@ shadowed: false sw: false path: rstmgr_aon_resets.rst_main_n - parent: sys_src + parent: lc_src clock: main } { @@ -122,11 +122,12 @@ domains: [ Main + Aon ] shadowed: false sw: false path: rstmgr_aon_resets.rst_io_n - parent: sys_src + parent: lc_src clock: io } { @@ -140,7 +141,7 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_spi_device_n - parent: sys_src + parent: lc_src clock: io } { @@ -154,7 +155,7 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_spi_host_n - parent: sys_src + parent: lc_src clock: io } { @@ -168,9 +169,23 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_i2c_n - parent: sys_src + parent: lc_src clock: io } + { + name: debug + gen: true + type: top + domains: + [ + Main + ] + shadowed: false + sw: false + path: rstmgr_aon_resets.rst_debug_n + parent: sys_src + clock: main + } ] leaf_rsts: [ @@ -213,7 +228,7 @@ shadowed: false sw: false path: rstmgr_aon_resets.rst_main_n - parent: sys_src + parent: lc_src clock: main } { @@ -227,7 +242,7 @@ shadowed: false sw: false path: rstmgr_aon_resets.rst_io_n - parent: sys_src + parent: lc_src clock: io } { @@ -241,7 +256,7 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_spi_device_n - parent: sys_src + parent: lc_src clock: io } { @@ -255,7 +270,7 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_spi_host_n - parent: sys_src + parent: lc_src clock: io } { @@ -269,9 +284,23 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_i2c_n - parent: sys_src + parent: lc_src clock: io } + { + name: debug + gen: true + type: top + domains: + [ + Main + ] + shadowed: false + sw: false + path: rstmgr_aon_resets.rst_debug_n + parent: sys_src + clock: main + } ] rst_ni: sys_src export_rsts: {} diff --git a/hw/top_chip/ip_autogen/rstmgr/data/mocha_rstmgr.ipconfig.hjson b/hw/top_chip/ip_autogen/rstmgr/data/mocha_rstmgr.ipconfig.hjson index fb5b996f8..d6048bba4 100644 --- a/hw/top_chip/ip_autogen/rstmgr/data/mocha_rstmgr.ipconfig.hjson +++ b/hw/top_chip/ip_autogen/rstmgr/data/mocha_rstmgr.ipconfig.hjson @@ -112,7 +112,7 @@ shadowed: false sw: false path: rstmgr_aon_resets.rst_main_n - parent: sys_src + parent: lc_src clock: main } { @@ -122,11 +122,12 @@ domains: [ Main + Aon ] shadowed: false sw: false path: rstmgr_aon_resets.rst_io_n - parent: sys_src + parent: lc_src clock: io } { @@ -140,7 +141,7 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_spi_device_n - parent: sys_src + parent: lc_src clock: io } { @@ -154,7 +155,7 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_spi_host_n - parent: sys_src + parent: lc_src clock: io } { @@ -168,9 +169,23 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_i2c_n - parent: sys_src + parent: lc_src clock: io } + { + name: debug + gen: true + type: top + domains: + [ + Main + ] + shadowed: false + sw: false + path: rstmgr_aon_resets.rst_debug_n + parent: sys_src + clock: main + } ] leaf_rsts: [ @@ -213,7 +228,7 @@ shadowed: false sw: false path: rstmgr_aon_resets.rst_main_n - parent: sys_src + parent: lc_src clock: main } { @@ -227,7 +242,7 @@ shadowed: false sw: false path: rstmgr_aon_resets.rst_io_n - parent: sys_src + parent: lc_src clock: io } { @@ -241,7 +256,7 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_spi_device_n - parent: sys_src + parent: lc_src clock: io } { @@ -255,7 +270,7 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_spi_host_n - parent: sys_src + parent: lc_src clock: io } { @@ -269,9 +284,23 @@ shadowed: false sw: true path: rstmgr_aon_resets.rst_i2c_n - parent: sys_src + parent: lc_src clock: io } + { + name: debug + gen: true + type: top + domains: + [ + Main + ] + shadowed: false + sw: false + path: rstmgr_aon_resets.rst_debug_n + parent: sys_src + clock: main + } ] rst_ni: sys_src export_rsts: {} diff --git a/hw/top_chip/ip_autogen/rstmgr/dv/cov/rstmgr_tgl_excl.cfg b/hw/top_chip/ip_autogen/rstmgr/dv/cov/rstmgr_tgl_excl.cfg index fd621cceb..604fbe164 100644 --- a/hw/top_chip/ip_autogen/rstmgr/dv/cov/rstmgr_tgl_excl.cfg +++ b/hw/top_chip/ip_autogen/rstmgr/dv/cov/rstmgr_tgl_excl.cfg @@ -20,3 +20,5 @@ -module_node rstmgr rst_en_o.spi_host[DomainAonSel] -module_node rstmgr resets_o.rst_i2c_n[DomainAonSel] -module_node rstmgr rst_en_o.i2c[DomainAonSel] +-module_node rstmgr resets_o.rst_debug_n[DomainAonSel] +-module_node rstmgr rst_en_o.debug[DomainAonSel] diff --git a/hw/top_chip/ip_autogen/rstmgr/dv/env/rstmgr_env_pkg.sv b/hw/top_chip/ip_autogen/rstmgr/dv/env/rstmgr_env_pkg.sv index f136b40c1..a88868277 100644 --- a/hw/top_chip/ip_autogen/rstmgr/dv/env/rstmgr_env_pkg.sv +++ b/hw/top_chip/ip_autogen/rstmgr/dv/env/rstmgr_env_pkg.sv @@ -37,6 +37,7 @@ package rstmgr_env_pkg; parameter string LIST_OF_LEAFS[] = { "u_daon_por", "u_daon_por_io", + "u_dmain_debug", "u_dmain_i2c", "u_dmain_io", "u_dmain_main", diff --git a/hw/top_chip/ip_autogen/rstmgr/dv/sva/rstmgr_cascading_sva_if.sv b/hw/top_chip/ip_autogen/rstmgr/dv/sva/rstmgr_cascading_sva_if.sv index e71890760..0f46321bb 100644 --- a/hw/top_chip/ip_autogen/rstmgr/dv/sva/rstmgr_cascading_sva_if.sv +++ b/hw/top_chip/ip_autogen/rstmgr/dv/sva/rstmgr_cascading_sva_if.sv @@ -158,21 +158,23 @@ interface rstmgr_cascading_sva_if ( `CASCADED_ASSERTS(CascadeEffAonToRstPorMain, effective_aon_rst_n[rstmgr_pkg::DomainAonSel], resets_o.rst_por_n[rstmgr_pkg::DomainAonSel], SyncCycles, clk_main_i) - // Controlled by rst_sys_src_n. - `CASCADED_ASSERTS(CascadeSysToMain_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_main_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_main_i) - - `CASCADED_ASSERTS(CascadeSysToIO_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_io_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) - - `CASCADED_ASSERTS(CascadeSysToSPIHost_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_spi_host_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) + // Controlled by rst_lc_src_n. + `CASCADED_ASSERTS(CascadeLcToAon, rst_lc_src_n[rstmgr_pkg::DomainAonSel], + resets_o.rst_io_n[rstmgr_pkg::DomainAonSel], SysCycles, clk_aon_i) + `CASCADED_ASSERTS(CascadeLcToMain, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_main_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_main_i) + `CASCADED_ASSERTS(CascadeLcToIo, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_io_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) + `CASCADED_ASSERTS(CascadeLcToSpiDevice, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_spi_device_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) + `CASCADED_ASSERTS(CascadeLcToSpiHost, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_spi_host_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) + `CASCADED_ASSERTS(CascadeLcToI2c, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_i2c_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) - `CASCADED_ASSERTS(CascadeSysToSPIDevice_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_spi_device_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) - - `CASCADED_ASSERTS(CascadeSysToI2C_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_i2c_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) + // Controlled by rst_sys_src_n. + `CASCADED_ASSERTS(CascadeSysToDebug, rst_sys_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_debug_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_main_i) `undef FALL_ASSERT `undef RISE_ASSERTS diff --git a/hw/top_chip/ip_autogen/rstmgr/dv/sva/rstmgr_rst_en_track_sva_if.sv b/hw/top_chip/ip_autogen/rstmgr/dv/sva/rstmgr_rst_en_track_sva_if.sv index e41eb3b67..ef5a36868 100644 --- a/hw/top_chip/ip_autogen/rstmgr/dv/sva/rstmgr_rst_en_track_sva_if.sv +++ b/hw/top_chip/ip_autogen/rstmgr/dv/sva/rstmgr_rst_en_track_sva_if.sv @@ -94,6 +94,19 @@ interface rstmgr_rst_en_track_sva_if ( clk_io_i, !rst_por_ni) + `ASSERT(DAonRstIoEnTracksRstIoActive_A, + $fell(resets_i.rst_io_n[DomainAonSel]) |-> ##[0:DELAY] + reset_en_i.io[DomainAonSel] == prim_mubi_pkg::MuBi4True, + clk_io_i, + !rst_por_ni) + + `ASSERT(DAonRstIoEnTracksRstIoInactive_A, + $rose(resets_i.rst_io_n[DomainAonSel]) |-> ##DELAY + !resets_i.rst_io_n[DomainAonSel] || + reset_en_i.io[DomainAonSel] == prim_mubi_pkg::MuBi4False, + clk_io_i, + !rst_por_ni) + `ASSERT(DMainRstSpiDeviceEnTracksRstSpiDeviceActive_A, $fell(resets_i.rst_spi_device_n[DomainMainSel]) |-> ##[0:DELAY] reset_en_i.spi_device[DomainMainSel] == prim_mubi_pkg::MuBi4True, @@ -133,4 +146,17 @@ interface rstmgr_rst_en_track_sva_if ( clk_io_i, !rst_por_ni) + `ASSERT(DMainRstDebugEnTracksRstDebugActive_A, + $fell(resets_i.rst_debug_n[DomainMainSel]) |-> ##[0:DELAY] + reset_en_i.debug[DomainMainSel] == prim_mubi_pkg::MuBi4True, + clk_main_i, + !rst_por_ni) + + `ASSERT(DMainRstDebugEnTracksRstDebugInactive_A, + $rose(resets_i.rst_debug_n[DomainMainSel]) |-> ##DELAY + !resets_i.rst_debug_n[DomainMainSel] || + reset_en_i.debug[DomainMainSel] == prim_mubi_pkg::MuBi4False, + clk_main_i, + !rst_por_ni) + endinterface diff --git a/hw/top_chip/ip_autogen/rstmgr/rtl/rstmgr.sv b/hw/top_chip/ip_autogen/rstmgr/rtl/rstmgr.sv index 0dc3f6899..33a5238e1 100644 --- a/hw/top_chip/ip_autogen/rstmgr/rtl/rstmgr.sv +++ b/hw/top_chip/ip_autogen/rstmgr/rtl/rstmgr.sv @@ -184,12 +184,12 @@ module rstmgr //////////////////////////////////////////////////// // consistency check errors - logic [6:0][PowerDomains-1:0] cnsty_chk_errs; - logic [6:0][PowerDomains-1:0] shadow_cnsty_chk_errs; + logic [7:0][PowerDomains-1:0] cnsty_chk_errs; + logic [7:0][PowerDomains-1:0] shadow_cnsty_chk_errs; // consistency sparse fsm errors - logic [6:0][PowerDomains-1:0] fsm_errs; - logic [6:0][PowerDomains-1:0] shadow_fsm_errs; + logic [7:0][PowerDomains-1:0] fsm_errs; + logic [7:0][PowerDomains-1:0] shadow_fsm_errs; assign hw2reg.err_code.reg_intg_err.d = 1'b1; assign hw2reg.err_code.reg_intg_err.de = reg_intg_err; @@ -370,7 +370,7 @@ module rstmgr .clk_i, .rst_ni, .leaf_clk_i(clk_main_i), - .parent_rst_ni(rst_sys_src_n[DomainMainSel]), + .parent_rst_ni(rst_lc_src_n[DomainMainSel]), .sw_rst_req_ni(1'b1), .scan_rst_ni, .scanmode_i, @@ -404,7 +404,7 @@ module rstmgr .clk_i, .rst_ni, .leaf_clk_i(clk_io_i), - .parent_rst_ni(rst_sys_src_n[DomainMainSel]), + .parent_rst_ni(rst_lc_src_n[DomainMainSel]), .sw_rst_req_ni(1'b1), .scan_rst_ni, .scanmode_i, @@ -438,7 +438,7 @@ module rstmgr .clk_i, .rst_ni, .leaf_clk_i(clk_io_i), - .parent_rst_ni(rst_sys_src_n[DomainMainSel]), + .parent_rst_ni(rst_lc_src_n[DomainMainSel]), .sw_rst_req_ni(reg2hw.sw_rst_ctrl_n[SPI_DEVICE].q), .scan_rst_ni, .scanmode_i, @@ -472,7 +472,7 @@ module rstmgr .clk_i, .rst_ni, .leaf_clk_i(clk_io_i), - .parent_rst_ni(rst_sys_src_n[DomainMainSel]), + .parent_rst_ni(rst_lc_src_n[DomainMainSel]), .sw_rst_req_ni(reg2hw.sw_rst_ctrl_n[SPI_HOST].q), .scan_rst_ni, .scanmode_i, @@ -506,7 +506,7 @@ module rstmgr .clk_i, .rst_ni, .leaf_clk_i(clk_io_i), - .parent_rst_ni(rst_sys_src_n[DomainMainSel]), + .parent_rst_ni(rst_lc_src_n[DomainMainSel]), .sw_rst_req_ni(reg2hw.sw_rst_ctrl_n[I2C].q), .scan_rst_ni, .scanmode_i, @@ -525,6 +525,40 @@ module rstmgr assign shadow_cnsty_chk_errs[6] = '0; assign shadow_fsm_errs[6] = '0; + // Generating resets for debug + // Power Domains: ['Main'] + // Shadowed: False + assign resets_o.rst_debug_n[DomainAonSel] = '0; + assign cnsty_chk_errs[7][DomainAonSel] = '0; + assign fsm_errs[7][DomainAonSel] = '0; + assign rst_en_o.debug[DomainAonSel] = MuBi4True; + rstmgr_leaf_rst #( + .SecCheck(SecCheck), + .SecMaxSyncDelay(SecMaxSyncDelay), + .SwRstReq(1'b0) + ) u_dmain_debug ( + .clk_i, + .rst_ni, + .leaf_clk_i(clk_main_i), + .parent_rst_ni(rst_sys_src_n[DomainMainSel]), + .sw_rst_req_ni(1'b1), + .scan_rst_ni, + .scanmode_i, + .rst_en_o(rst_en_o.debug[DomainMainSel]), + .leaf_rst_o(resets_o.rst_debug_n[DomainMainSel]), + .err_o(cnsty_chk_errs[7][DomainMainSel]), + .fsm_err_o(fsm_errs[7][DomainMainSel]) + ); + + if (SecCheck) begin : gen_dmain_debug_assert + `ASSERT_PRIM_FSM_ERROR_TRIGGER_ALERT( + DMainDebugFsmCheck_A, + u_dmain_debug.gen_rst_chk.u_rst_chk.u_state_regs, + alert_tx_o[0]) + end + assign shadow_cnsty_chk_errs[7] = '0; + assign shadow_fsm_errs[7] = '0; + //////////////////////////////////////////////////// // Reset info construction // diff --git a/hw/top_chip/ip_autogen/rstmgr/rtl/rstmgr_pkg.sv b/hw/top_chip/ip_autogen/rstmgr/rtl/rstmgr_pkg.sv index 1cce9f8e5..fab94d622 100644 --- a/hw/top_chip/ip_autogen/rstmgr/rtl/rstmgr_pkg.sv +++ b/hw/top_chip/ip_autogen/rstmgr/rtl/rstmgr_pkg.sv @@ -29,6 +29,7 @@ package rstmgr_pkg; logic [PowerDomains-1:0] rst_spi_device_n; logic [PowerDomains-1:0] rst_spi_host_n; logic [PowerDomains-1:0] rst_i2c_n; + logic [PowerDomains-1:0] rst_debug_n; } rstmgr_out_t; // reset indication for alert handler @@ -41,9 +42,10 @@ package rstmgr_pkg; prim_mubi_pkg::mubi4_t [PowerDomains-1:0] spi_device; prim_mubi_pkg::mubi4_t [PowerDomains-1:0] spi_host; prim_mubi_pkg::mubi4_t [PowerDomains-1:0] i2c; + prim_mubi_pkg::mubi4_t [PowerDomains-1:0] debug; } rstmgr_rst_en_t; - parameter int NumOutputRst = 8 * PowerDomains; + parameter int NumOutputRst = 9 * PowerDomains; // cpu reset requests and status typedef struct packed { diff --git a/hw/top_chip/rtl/top_chip_system.sv b/hw/top_chip/rtl/top_chip_system.sv index ddad37a2a..b34a3721e 100644 --- a/hw/top_chip/rtl/top_chip_system.sv +++ b/hw/top_chip/rtl/top_chip_system.sv @@ -670,7 +670,7 @@ module top_chip_system #( .InputDelayCycles(0) // note: may not be true for all tops ) u_i2c ( .clk_i (clkmgr_clocks.clk_io_infra), - .rst_ni (rstmgr_resets.rst_io_n[rstmgr_pkg::DomainMainSel]), + .rst_ni (rstmgr_resets.rst_i2c_n[rstmgr_pkg::DomainMainSel]), .alert_rx_i (prim_alert_pkg::ALERT_RX_DEFAULT), .alert_tx_o ( ), @@ -757,7 +757,7 @@ module top_chip_system #( // Instantiate SPI device spi_device u_spi_device ( .clk_i (clkmgr_clocks.clk_io_infra), - .rst_ni (rstmgr_resets.rst_io_n[rstmgr_pkg::DomainMainSel]), + .rst_ni (rstmgr_resets.rst_spi_device_n[rstmgr_pkg::DomainMainSel]), // Signals to xbar .tl_i (tl_spi_device_h2d), @@ -809,7 +809,7 @@ module top_chip_system #( ) u_spi_host ( // Clock and reset. .clk_i (clkmgr_clocks.clk_io_infra), - .rst_ni (rstmgr_resets.rst_io_n[rstmgr_pkg::DomainMainSel]), + .rst_ni (rstmgr_resets.rst_spi_host_n[rstmgr_pkg::DomainMainSel]), // TileLink bus connections. .tl_i (tl_spi_host_h2d), @@ -913,16 +913,20 @@ module top_chip_system #( .tl_o (tl_clkmgr_d2h), .scanmode_i (prim_mubi_pkg::MuBi4False), - // Clock and reset connections. + // Primary module control clocks and resets. .clk_i (clkmgr_clocks.clk_io_powerup), + .rst_ni (rstmgr_resets.rst_por_io_n[rstmgr_pkg::DomainAonSel]), + .rst_shadowed_ni (rstmgr_resets.rst_por_io_n[rstmgr_pkg::DomainAonSel]), + + // System source clocks and resets. .clk_main_i (clk_i), + .rst_main_ni (rstmgr_resets.rst_main_n[rstmgr_pkg::DomainAonSel]), .clk_io_i (clk_i), + .rst_io_ni (rstmgr_resets.rst_io_n[rstmgr_pkg::DomainAonSel]), .clk_aon_i (clk_i), - .rst_shadowed_ni (rstmgr_resets.rst_por_io_n[rstmgr_pkg::DomainAonSel]), - .rst_ni (rstmgr_resets.rst_por_io_n[rstmgr_pkg::DomainAonSel]), - .rst_aon_ni (rstmgr_resets.rst_por_io_n[rstmgr_pkg::DomainAonSel]), - .rst_io_ni (rstmgr_resets.rst_por_io_n[rstmgr_pkg::DomainAonSel]), - .rst_main_ni (rstmgr_resets.rst_por_io_n[rstmgr_pkg::DomainAonSel]), + .rst_aon_ni (rstmgr_resets.rst_io_n[rstmgr_pkg::DomainAonSel]), + + // Resets for derived clock generation, root clock gating and related status. .rst_root_ni (rstmgr_resets.rst_por_io_n[rstmgr_pkg::DomainAonSel]), .rst_root_io_ni (rstmgr_resets.rst_por_io_n[rstmgr_pkg::DomainAonSel]), .rst_root_main_ni (rstmgr_resets.rst_por_n[rstmgr_pkg::DomainAonSel]) @@ -1009,8 +1013,7 @@ module top_chip_system #( assign unused_manager_output = clkmgr_clocks.clk_main_hint | clkmgr_clocks.clk_io_peri | (|clkmgr_cg_en) | - (|rstmgr_resets.rst_por_n) | (|rstmgr_resets.rst_spi_device_n) | (|rstmgr_resets.rst_spi_host_n) | (|rstmgr_resets.rst_i2c_n) | - (|rstmgr_rst_en); + (|rstmgr_resets.rst_por_n) | (|rstmgr_resets.rst_debug_n) | (|rstmgr_rst_en); // Combine response and request between crossbar and atomics wrapper. AXI_BUS #( diff --git a/hw/vendor/lowrisc_ip/ip_templates/rstmgr/dv/sva/rstmgr_cascading_sva_if.sv.tpl b/hw/vendor/lowrisc_ip/ip_templates/rstmgr/dv/sva/rstmgr_cascading_sva_if.sv.tpl index 1653cb608..53ba9744d 100644 --- a/hw/vendor/lowrisc_ip/ip_templates/rstmgr/dv/sva/rstmgr_cascading_sva_if.sv.tpl +++ b/hw/vendor/lowrisc_ip/ip_templates/rstmgr/dv/sva/rstmgr_cascading_sva_if.sv.tpl @@ -183,21 +183,23 @@ interface rstmgr_cascading_sva_if ( resets_o.rst_por_${clk + "_" if clk != "main" else ""}n[rstmgr_pkg::DomainAonSel], SyncCycles, clk_${clk}_i) % endfor - // Controlled by rst_sys_src_n. - `CASCADED_ASSERTS(CascadeSysToMain_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_main_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_main_i) - - `CASCADED_ASSERTS(CascadeSysToIO_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_io_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) - - `CASCADED_ASSERTS(CascadeSysToSPIHost_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_spi_host_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) + // Controlled by rst_lc_src_n. + `CASCADED_ASSERTS(CascadeLcToAon, rst_lc_src_n[rstmgr_pkg::DomainAonSel], + resets_o.rst_io_n[rstmgr_pkg::DomainAonSel], SysCycles, clk_aon_i) + `CASCADED_ASSERTS(CascadeLcToMain, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_main_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_main_i) + `CASCADED_ASSERTS(CascadeLcToIo, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_io_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) + `CASCADED_ASSERTS(CascadeLcToSpiDevice, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_spi_device_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) + `CASCADED_ASSERTS(CascadeLcToSpiHost, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_spi_host_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) + `CASCADED_ASSERTS(CascadeLcToI2c, rst_lc_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_i2c_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) - `CASCADED_ASSERTS(CascadeSysToSPIDevice_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_spi_device_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) - - `CASCADED_ASSERTS(CascadeSysToI2C_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], - resets_o.rst_i2c_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) + // Controlled by rst_sys_src_n. + `CASCADED_ASSERTS(CascadeSysToDebug, rst_sys_src_n[rstmgr_pkg::DomainMainSel], + resets_o.rst_debug_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_main_i) `undef FALL_ASSERT `undef RISE_ASSERTS diff --git a/hw/vendor/patches/lowrisc_ip/rstmgr/0002_Fix_Templates.patch b/hw/vendor/patches/lowrisc_ip/rstmgr/0002_Fix_Templates.patch index 5ceb77777..bf35cb5d4 100644 --- a/hw/vendor/patches/lowrisc_ip/rstmgr/0002_Fix_Templates.patch +++ b/hw/vendor/patches/lowrisc_ip/rstmgr/0002_Fix_Templates.patch @@ -35,42 +35,6 @@ index 356807f..1670853 100644 check_reset_info(expected_reset_info_code); check_alert_info_after_reset(.alert_dump(expected_alert_dump), .enable(expected_alert_enable)); -diff --git a/dv/sva/rstmgr_cascading_sva_if.sv.tpl b/dv/sva/rstmgr_cascading_sva_if.sv.tpl -index 143d0ed..1653cb6 100644 ---- a/dv/sva/rstmgr_cascading_sva_if.sv.tpl -+++ b/dv/sva/rstmgr_cascading_sva_if.sv.tpl -@@ -183,17 +183,21 @@ interface rstmgr_cascading_sva_if ( - resets_o.rst_por_${clk + "_" if clk != "main" else ""}n[rstmgr_pkg::DomainAonSel], SyncCycles, clk_${clk}_i) - % endfor - -- // Controlled by rst_lc_src_n. -- `CASCADED_ASSERTS(CascadeLcToLcAon, rst_lc_src_n[rstmgr_pkg::DomainAonSel], -- resets_o.rst_lc_aon_n[rstmgr_pkg::DomainAonSel], SysCycles, clk_aon_i) -- `CASCADED_ASSERTS(CascadeLcToLc, rst_lc_src_n[rstmgr_pkg::DomainMainSel], -- resets_o.rst_lc_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_main_i) -- - // Controlled by rst_sys_src_n. -- `CASCADED_ASSERTS(CascadeSysToSys, rst_sys_src_n[rstmgr_pkg::DomainMainSel], -- resets_o.rst_sys_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_main_i) -- `CASCADED_ASSERTS(CascadeLcToLcShadowed, rst_lc_src_n[rstmgr_pkg::DomainMainSel], -- resets_o.rst_lc_shadowed_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_main_i) -+ `CASCADED_ASSERTS(CascadeSysToMain_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], -+ resets_o.rst_main_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_main_i) -+ -+ `CASCADED_ASSERTS(CascadeSysToIO_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], -+ resets_o.rst_io_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) -+ -+ `CASCADED_ASSERTS(CascadeSysToSPIHost_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], -+ resets_o.rst_spi_host_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) -+ -+ `CASCADED_ASSERTS(CascadeSysToSPIDevice_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], -+ resets_o.rst_spi_device_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) -+ -+ `CASCADED_ASSERTS(CascadeSysToI2C_A, rst_sys_src_n[rstmgr_pkg::DomainMainSel], -+ resets_o.rst_i2c_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_io_i) - - `undef FALL_ASSERT - `undef RISE_ASSERTS diff --git a/dv/tb.sv.tpl b/dv/tb.sv.tpl index c2e8ce4..49dbb57 100644 --- a/dv/tb.sv.tpl diff --git a/hw/vendor/patches/lowrisc_ip/rstmgr/0003_Cascade_Assertion_Fix.patch b/hw/vendor/patches/lowrisc_ip/rstmgr/0003_Cascade_Assertion_Fix.patch new file mode 100644 index 000000000..ca902ed4b --- /dev/null +++ b/hw/vendor/patches/lowrisc_ip/rstmgr/0003_Cascade_Assertion_Fix.patch @@ -0,0 +1,35 @@ +diff --git a/dv/sva/rstmgr_cascading_sva_if.sv.tpl b/dv/sva/rstmgr_cascading_sva_if.sv.tpl +index 143d0ed5..f8853b04 100644 +--- a/dv/sva/rstmgr_cascading_sva_if.sv.tpl ++++ b/dv/sva/rstmgr_cascading_sva_if.sv.tpl +@@ -184,16 +184,22 @@ interface rstmgr_cascading_sva_if ( + % endfor + + // Controlled by rst_lc_src_n. +- `CASCADED_ASSERTS(CascadeLcToLcAon, rst_lc_src_n[rstmgr_pkg::DomainAonSel], +- resets_o.rst_lc_aon_n[rstmgr_pkg::DomainAonSel], SysCycles, clk_aon_i) +- `CASCADED_ASSERTS(CascadeLcToLc, rst_lc_src_n[rstmgr_pkg::DomainMainSel], +- resets_o.rst_lc_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_main_i) ++ `CASCADED_ASSERTS(CascadeLcToAon, rst_lc_src_n[rstmgr_pkg::DomainAonSel], ++ resets_o.rst_io_n[rstmgr_pkg::DomainAonSel], SysCycles, clk_aon_i) ++ `CASCADED_ASSERTS(CascadeLcToMain, rst_lc_src_n[rstmgr_pkg::DomainMainSel], ++ resets_o.rst_main_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_main_i) ++ `CASCADED_ASSERTS(CascadeLcToIo, rst_lc_src_n[rstmgr_pkg::DomainMainSel], ++ resets_o.rst_io_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) ++ `CASCADED_ASSERTS(CascadeLcToSpiDevice, rst_lc_src_n[rstmgr_pkg::DomainMainSel], ++ resets_o.rst_spi_device_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) ++ `CASCADED_ASSERTS(CascadeLcToSpiHost, rst_lc_src_n[rstmgr_pkg::DomainMainSel], ++ resets_o.rst_spi_host_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) ++ `CASCADED_ASSERTS(CascadeLcToI2c, rst_lc_src_n[rstmgr_pkg::DomainMainSel], ++ resets_o.rst_i2c_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_io_i) + + // Controlled by rst_sys_src_n. +- `CASCADED_ASSERTS(CascadeSysToSys, rst_sys_src_n[rstmgr_pkg::DomainMainSel], +- resets_o.rst_sys_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_main_i) +- `CASCADED_ASSERTS(CascadeLcToLcShadowed, rst_lc_src_n[rstmgr_pkg::DomainMainSel], +- resets_o.rst_lc_shadowed_n[rstmgr_pkg::DomainMainSel], SysCycles, clk_main_i) ++ `CASCADED_ASSERTS(CascadeSysToDebug, rst_sys_src_n[rstmgr_pkg::DomainMainSel], ++ resets_o.rst_debug_n[rstmgr_pkg::DomainMainSel], PeriCycles, clk_main_i) + + `undef FALL_ASSERT + `undef RISE_ASSERTS