blob: 5493cac3aa85c0a2d4025a9f338136e1f3aaacbe [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
module rstmgr_bind;
bind rstmgr tlul_assert #(
.EndpointType("Device")
) tlul_assert_device (.clk_i, .rst_ni, .h2d(tl_i), .d2h(tl_o));
// In top-level testbench, do not bind the csr_assert_fpv to reduce simulation time.
`ifndef TOP_LEVEL_DV
bind rstmgr rstmgr_csr_assert_fpv rstmgr_csr_assert (.clk_i, .rst_ni, .h2d(tl_i), .d2h(tl_o));
`endif
bind rstmgr pwrmgr_rstmgr_sva_if pwrmgr_rstmgr_sva_if (
.clk_i(clk_i),
.rst_ni(rst_ni),
.clk_slow_i(clk_aon_i),
.rst_slow_ni(&rst_por_aon_n),
// These inputs from pwrmgr are ignored since they check pwrmgr's rstreqs output.
.rstreqs_i('0),
.reset_en('0),
.sw_rst_req_i('0),
.main_rst_req_i('0),
.esc_rst_req_i('0),
.rstreqs('0),
// These are actually used for checks.
.rst_lc_req(pwr_i.rst_lc_req),
.rst_sys_req(pwr_i.rst_sys_req),
.main_pd_n('1),
.ndm_sys_req(ndmreset_req_i),
.reset_cause(pwr_i.reset_cause),
// The inputs from rstmgr.
.rst_lc_src_n(pwr_o.rst_lc_src_n),
.rst_sys_src_n(pwr_o.rst_sys_src_n)
);
bind rstmgr rstmgr_cascading_sva_if rstmgr_cascading_sva_if (
.clk_i,
.clk_aon_i,
.clk_io_div4_i,
.clk_io_div2_i,
.clk_io_i,
.clk_main_i,
.clk_usb_i,
.por_n_i,
.scan_rst_ni,
.scanmode_i,
.resets_o,
.rst_lc_req(pwr_i.rst_lc_req),
.rst_sys_req(pwr_i.rst_sys_req),
.rst_lc_src_n(pwr_o.rst_lc_src_n),
.rst_sys_src_n(pwr_o.rst_sys_src_n)
);
bind rstmgr rstmgr_attrs_sva_if rstmgr_attrs_sva_if (
.rst_ni,
.actual_alert_info_attr(int'(hw2reg.alert_info_attr)),
.actual_cpu_info_attr(int'(hw2reg.cpu_info_attr)),
.expected_alert_info_attr(($bits(alert_dump_i) + 31) / 32),
.expected_cpu_info_attr(($bits(cpu_dump_i) + 31) / 32)
);
bind rstmgr rstmgr_sw_rst_sva_if rstmgr_sw_rst_sva_if (
.clk_i({
clk_io_div4_i,
clk_io_div4_i,
clk_io_div4_i,
clk_usb_i,
clk_io_div4_i,
clk_io_div2_i,
clk_io_i,
clk_io_div4_i
}),
.rst_ni,
.parent_rst_n(rst_sys_src_n[1]),
.ctrl_ns(reg2hw.sw_rst_ctrl_n),
.rst_ens({
rst_en_o.i2c2[1] == prim_mubi_pkg::MuBi4True,
rst_en_o.i2c1[1] == prim_mubi_pkg::MuBi4True,
rst_en_o.i2c0[1] == prim_mubi_pkg::MuBi4True,
rst_en_o.usbif[1] == prim_mubi_pkg::MuBi4True,
rst_en_o.usb[1] == prim_mubi_pkg::MuBi4True,
rst_en_o.spi_host1[1] == prim_mubi_pkg::MuBi4True,
rst_en_o.spi_host0[1] == prim_mubi_pkg::MuBi4True,
rst_en_o.spi_device[1] == prim_mubi_pkg::MuBi4True
}),
.rst_ns({
resets_o.rst_i2c2_n[1],
resets_o.rst_i2c1_n[1],
resets_o.rst_i2c0_n[1],
resets_o.rst_usbif_n[1],
resets_o.rst_usb_n[1],
resets_o.rst_spi_host1_n[1],
resets_o.rst_spi_host0_n[1],
resets_o.rst_spi_device_n[1]
})
);
// sec cm coverage bind
bind rstmgr cip_mubi_cov_if #(.Width(prim_mubi_pkg::MuBi4Width)) u_scanmode_mubi_cov_if (
.rst_ni (rst_ni),
.mubi (scanmode_i)
);
endmodule