blob: cc30de3af0dc0fdf54cf9dd95ebce62331a8d00f [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 chip_earlgrey_verilator (
// Clock and Reset
input clk_i,
input rst_ni,
// communication with GPIO
input [31:0] cio_gpio_p2d_i,
output logic [31:0] cio_gpio_d2p_o,
output logic [31:0] cio_gpio_en_d2p_o,
output logic [31:0] cio_gpio_pull_en_o,
output logic [31:0] cio_gpio_pull_select_o,
// communication with UART
input cio_uart_rx_p2d_i,
output logic cio_uart_tx_d2p_o,
output logic cio_uart_tx_en_d2p_o,
// communication with SPI
input cio_spi_device_sck_p2d_i,
input cio_spi_device_csb_p2d_i,
input cio_spi_device_sdi_p2d_i,
output logic cio_spi_device_sdo_d2p_o,
output logic cio_spi_device_sdo_en_d2p_o,
// communication with USB
input cio_usbdev_sense_p2d_i,
output logic cio_usbdev_dp_pullup_d2p_o,
output logic cio_usbdev_dn_pullup_d2p_o,
input cio_usbdev_dp_p2d_i,
output logic cio_usbdev_dp_d2p_o,
output logic cio_usbdev_dp_en_d2p_o,
input cio_usbdev_dn_p2d_i,
output logic cio_usbdev_dn_d2p_o,
output logic cio_usbdev_dn_en_d2p_o,
input cio_usbdev_d_p2d_i,
output logic cio_usbdev_d_d2p_o,
output logic cio_usbdev_d_en_d2p_o,
output logic cio_usbdev_se0_d2p_o,
output logic cio_usbdev_rx_enable_d2p_o,
output logic cio_usbdev_tx_use_d_se0_d2p_o
);
import top_earlgrey_pkg::*;
logic IO_JTCK, IO_JTMS, IO_JTRST_N, IO_JTDI, IO_JTDO;
// TODO: instantiate padring and route these signals through that module
logic [pinmux_reg_pkg::NDioPads-1:0] dio_in;
logic [pinmux_reg_pkg::NDioPads-1:0] dio_out;
logic [pinmux_reg_pkg::NDioPads-1:0] dio_oe;
always_comb begin : assign_dio_in
dio_in = '0;
dio_in[DioSpiDeviceSck] = cio_spi_device_sck_p2d_i;
dio_in[DioSpiDeviceCsb] = cio_spi_device_csb_p2d_i;
dio_in[DioSpiDeviceSd0] = cio_spi_device_sdi_p2d_i;
dio_in[DioUsbdevUsbDp] = cio_usbdev_dp_p2d_i;
dio_in[DioUsbdevUsbDn] = cio_usbdev_dn_p2d_i;
end
// USB
logic usb_dp_pullup;
logic usb_dn_pullup;
logic usb_rx_d;
logic usb_tx_d;
logic usb_tx_se0;
logic usb_tx_use_d_se0;
logic usb_rx_enable;
assign usb_rx_d = cio_usbdev_d_p2d_i;
assign cio_usbdev_d_d2p_o = usb_tx_d;
assign cio_usbdev_d_en_d2p_o = dio_oe[DioUsbdevUsbDp];
assign cio_usbdev_dn_pullup_d2p_o = usb_dn_pullup;
assign cio_usbdev_dp_pullup_d2p_o = usb_dp_pullup;
assign cio_usbdev_se0_d2p_o = usb_tx_se0;
assign cio_usbdev_rx_enable_d2p_o = usb_rx_enable;
assign cio_usbdev_tx_use_d_se0_d2p_o = usb_tx_use_d_se0;
assign cio_usbdev_dp_d2p_o = dio_out[DioUsbdevUsbDp];
assign cio_usbdev_dp_en_d2p_o = dio_oe[DioUsbdevUsbDp];
assign cio_usbdev_dn_d2p_o = dio_out[DioUsbdevUsbDn];
assign cio_usbdev_dn_en_d2p_o = dio_oe[DioUsbdevUsbDn];
assign cio_spi_device_sdo_d2p_o = dio_out[DioSpiDeviceSd1];
assign cio_spi_device_sdo_en_d2p_o = dio_oe[DioSpiDeviceSd1];
logic [pinmux_reg_pkg::NMioPads-1:0] mio_in;
logic [pinmux_reg_pkg::NMioPads-1:0] mio_out;
logic [pinmux_reg_pkg::NMioPads-1:0] mio_oe;
prim_pad_wrapper_pkg::pad_attr_t[pinmux_reg_pkg::NMioPads-1:0] mio_attr;
always_comb begin : assign_mio_in
mio_in = '0;
// 14 generic GPIOs
mio_in[MioPadIob12:MioPadIob6] = cio_gpio_p2d_i[6:0];
mio_in[MioPadIor13:MioPadIor5] = cio_gpio_p2d_i[13:7];
// SW straps
mio_in[MioPadIoc2:MioPadIoc0] = cio_gpio_p2d_i[24:22];
// TAP straps
mio_in[MioPadIoc5] = cio_gpio_p2d_i[27];
mio_in[MioPadIoc8] = cio_gpio_p2d_i[30];
// UART RX
mio_in[MioPadIoc3] = cio_uart_rx_p2d_i;
// USB VBUS sense
mio_in[MioPadIoc7] = cio_usbdev_sense_p2d_i;
end
// 14 generic GPIOs
assign cio_gpio_d2p_o[6:0] = mio_out[MioPadIob12:MioPadIob6];
assign cio_gpio_en_d2p_o[6:0] = mio_oe[MioPadIob12:MioPadIob6];
assign cio_gpio_d2p_o[13:7] = mio_out[MioPadIor13:MioPadIor5];
assign cio_gpio_en_d2p_o[13:7] = mio_oe[MioPadIor13:MioPadIor5];
assign cio_gpio_d2p_o[21:14] = '0;
assign cio_gpio_en_d2p_o[21:14] = '0;
// SW straps
assign cio_gpio_d2p_o[24:22] = mio_out[MioPadIoc2:MioPadIoc0];
assign cio_gpio_en_d2p_o[24:22] = mio_oe[MioPadIoc2:MioPadIoc0];
assign cio_gpio_d2p_o[26:25] = '0;
assign cio_gpio_en_d2p_o[26:25] = '0;
// TAP straps
assign cio_gpio_d2p_o[27] = mio_out[MioPadIoc5];
assign cio_gpio_en_d2p_o[27] = mio_oe[MioPadIoc5];
assign cio_gpio_d2p_o[29:28] = '0;
assign cio_gpio_en_d2p_o[29:28] = '0;
assign cio_gpio_d2p_o[30] = mio_out[MioPadIoc8];
assign cio_gpio_en_d2p_o[30] = mio_oe[MioPadIoc8];
assign cio_gpio_d2p_o[31] = '0;
assign cio_gpio_en_d2p_o[31] = '0;
assign cio_uart_tx_d2p_o = mio_out[MioPadIoc4];
assign cio_uart_tx_en_d2p_o = mio_oe[MioPadIoc4];
// Note: we're collecting the `pull_en` and `pull_select` signals together
// so that the GPIO DPI functions can simulate weak and strong GPIO
// inputs. The `cio_gpio_pull_en_o` and `cio_gpio_pull_select_o` bit
// vectors should have the same ordering as the `cio_gpio_d2p_o` vector.
// See gpiodpi.c to see how weak/strong inputs work.
//
// Pull enable for 14 generic GPIOs
assign cio_gpio_pull_en_o[0] = mio_attr[MioPadIob6].pull_en;
assign cio_gpio_pull_en_o[1] = mio_attr[MioPadIob7].pull_en;
assign cio_gpio_pull_en_o[2] = mio_attr[MioPadIob8].pull_en;
assign cio_gpio_pull_en_o[3] = mio_attr[MioPadIob9].pull_en;
assign cio_gpio_pull_en_o[4] = mio_attr[MioPadIob10].pull_en;
assign cio_gpio_pull_en_o[5] = mio_attr[MioPadIob11].pull_en;
assign cio_gpio_pull_en_o[6] = mio_attr[MioPadIob12].pull_en;
assign cio_gpio_pull_en_o[7] = mio_attr[MioPadIor5].pull_en;
assign cio_gpio_pull_en_o[8] = mio_attr[MioPadIor6].pull_en;
assign cio_gpio_pull_en_o[9] = mio_attr[MioPadIor7].pull_en;
assign cio_gpio_pull_en_o[10] = mio_attr[MioPadIor10].pull_en;
assign cio_gpio_pull_en_o[11] = mio_attr[MioPadIor11].pull_en;
assign cio_gpio_pull_en_o[12] = mio_attr[MioPadIor12].pull_en;
assign cio_gpio_pull_en_o[13] = mio_attr[MioPadIor13].pull_en;
assign cio_gpio_pull_en_o[21:14] = '0;
// Pull enable for SW STRAPs
assign cio_gpio_pull_en_o[22] = mio_attr[MioPadIoc0].pull_en;
assign cio_gpio_pull_en_o[23] = mio_attr[MioPadIoc1].pull_en;
assign cio_gpio_pull_en_o[24] = mio_attr[MioPadIoc2].pull_en;
// Pull enable for TAP STRAPs
assign cio_gpio_pull_en_o[26:25] = '0;
assign cio_gpio_pull_en_o[27] = mio_attr[MioPadIoc5].pull_en;
assign cio_gpio_pull_en_o[29:28] = '0;
assign cio_gpio_pull_en_o[30] = mio_attr[MioPadIoc8].pull_en;
assign cio_gpio_pull_en_o[31] = '0;
// Pull select for 14 generic GPIOs
assign cio_gpio_pull_select_o[0] = mio_attr[MioPadIob6].pull_select;
assign cio_gpio_pull_select_o[1] = mio_attr[MioPadIob7].pull_select;
assign cio_gpio_pull_select_o[2] = mio_attr[MioPadIob8].pull_select;
assign cio_gpio_pull_select_o[3] = mio_attr[MioPadIob9].pull_select;
assign cio_gpio_pull_select_o[4] = mio_attr[MioPadIob10].pull_select;
assign cio_gpio_pull_select_o[5] = mio_attr[MioPadIob11].pull_select;
assign cio_gpio_pull_select_o[6] = mio_attr[MioPadIob12].pull_select;
assign cio_gpio_pull_select_o[7] = mio_attr[MioPadIor5].pull_select;
assign cio_gpio_pull_select_o[8] = mio_attr[MioPadIor6].pull_select;
assign cio_gpio_pull_select_o[9] = mio_attr[MioPadIor7].pull_select;
assign cio_gpio_pull_select_o[10] = mio_attr[MioPadIor10].pull_select;
assign cio_gpio_pull_select_o[11] = mio_attr[MioPadIor11].pull_select;
assign cio_gpio_pull_select_o[12] = mio_attr[MioPadIor12].pull_select;
assign cio_gpio_pull_select_o[13] = mio_attr[MioPadIor13].pull_select;
assign cio_gpio_pull_select_o[21:14] = '0;
// Pull select for SW STRAPs
assign cio_gpio_pull_select_o[22] = mio_attr[MioPadIoc0].pull_select;
assign cio_gpio_pull_select_o[23] = mio_attr[MioPadIoc1].pull_select;
assign cio_gpio_pull_select_o[24] = mio_attr[MioPadIoc2].pull_select;
// Pull select for TAP STRAPs
assign cio_gpio_pull_select_o[26:25] = '0;
assign cio_gpio_pull_select_o[27] = mio_attr[MioPadIoc5].pull_select;
assign cio_gpio_pull_select_o[29:28] = '0;
assign cio_gpio_pull_select_o[30] = mio_attr[MioPadIoc8].pull_select;
assign cio_gpio_pull_select_o[31] = '0;
////////////////////////////////
// AST - Custom for Verilator //
////////////////////////////////
ast_pkg::ast_pwst_t ast_pwst;
ast_pkg::ast_pwst_t ast_pwst_h;
// pwrmgr interface
pwrmgr_pkg::pwr_ast_req_t base_ast_pwr;
pwrmgr_pkg::pwr_ast_rsp_t ast_base_pwr;
ast_pkg::ast_clks_t ast_base_clks;
// external clock comes in at a fixed position
logic ext_clk;
assign ext_clk = '0;
logic [ast_pkg::Pad2AstInWidth-1:0] pad2ast;
assign pad2ast = '0;
logic clk_aon;
// reset is not used below becuase verilator uses only sync resets
// and also does not under 'x'.
// if we allow the divider below to reset, clk_aon will be silenced,
// and as a result all the clk_aon logic inside top_earlgrey does not
// get reset
prim_clock_div #(
.Divisor(4)
) u_aon_div (
.clk_i,
.rst_ni(1'b1),
.step_down_req_i('0),
.step_down_ack_o(),
.test_en_i('0),
.clk_o(clk_aon)
);
ast_pkg::clks_osc_byp_t clks_osc_byp;
assign clks_osc_byp = '{
usb: clk_i,
sys: clk_i,
io: clk_i,
aon: clk_aon
};
///////////////////////////////////////
// AST - Common with other platforms //
///////////////////////////////////////
// platform specific supply manipulation to create POR
logic [3:0] cnt;
logic vcc_supp;
// keep incrementing until saturation
always_ff @(posedge clk_aon) begin
if (cnt < 4'hf) begin
cnt <= cnt + 1'b1;
end
end
// create fake por condition
assign vcc_supp = cnt < 4'h4 ? 1'b0 :
cnt < 4'h8 ? 1'b1 :
cnt < 4'hc ? 1'b0 : 1'b1;
// TLUL interface
tlul_pkg::tl_h2d_t base_ast_bus;
tlul_pkg::tl_d2h_t ast_base_bus;
assign ast_base_pwr.main_pok = ast_pwst.main_pok;
// synchronization clocks / rests
clkmgr_pkg::clkmgr_out_t clkmgr_aon_clocks;
rstmgr_pkg::rstmgr_out_t rstmgr_aon_resets;
// monitored clock
logic sck_monitor;
// otp power sequence
otp_ctrl_pkg::otp_ast_req_t otp_ctrl_otp_ast_pwr_seq;
otp_ctrl_pkg::otp_ast_rsp_t otp_ctrl_otp_ast_pwr_seq_h;
logic usb_ref_pulse;
logic usb_ref_val;
// adc
ast_pkg::adc_ast_req_t adc_req;
ast_pkg::adc_ast_rsp_t adc_rsp;
// entropy source interface
// The entropy source pacakge definition should eventually be moved to es
entropy_src_pkg::entropy_src_rng_req_t es_rng_req;
entropy_src_pkg::entropy_src_rng_rsp_t es_rng_rsp;
logic es_rng_fips;
// entropy distribution network
edn_pkg::edn_req_t ast_edn_edn_req;
edn_pkg::edn_rsp_t ast_edn_edn_rsp;
// alerts interface
ast_pkg::ast_alert_rsp_t ast_alert_rsp;
ast_pkg::ast_alert_req_t ast_alert_req;
// Flash connections
prim_mubi_pkg::mubi4_t flash_bist_enable;
logic flash_power_down_h;
logic flash_power_ready_h;
// Life cycle clock bypass req/ack
prim_mubi_pkg::mubi4_t all_clk_byp_req;
prim_mubi_pkg::mubi4_t all_clk_byp_ack;
prim_mubi_pkg::mubi4_t io_clk_byp_req;
prim_mubi_pkg::mubi4_t io_clk_byp_ack;
prim_mubi_pkg::mubi4_t div_step_down_req;
logic hi_speed_sel;
// DFT connections
logic scan_en;
lc_ctrl_pkg::lc_tx_t dft_en;
pinmux_pkg::dft_strap_test_req_t dft_strap_test;
// Debug connections
logic [ast_pkg::Ast2PadOutWidth-1:0] ast2pinmux;
// Jitter enable
logic jen;
// reset domain connections
import rstmgr_pkg::PowerDomains;
import rstmgr_pkg::DomainAonSel;
import rstmgr_pkg::Domain0Sel;
// AST does not use all clocks / resets forwarded to it
logic unused_slow_clk_en;
assign unused_slow_clk_en = base_ast_pwr.slow_clk_en;
logic unused_pwr_clamp;
assign unused_pwr_clamp = base_ast_pwr.pwr_clamp;
prim_mubi_pkg::mubi4_t ast_init_done;
ast #(
.EntropyStreams(ast_pkg::EntropyStreams),
.AdcChannels(ast_pkg::AdcChannels),
.AdcDataWidth(ast_pkg::AdcDataWidth),
.UsbCalibWidth(ast_pkg::UsbCalibWidth),
.Ast2PadOutWidth(ast_pkg::Ast2PadOutWidth),
.Pad2AstInWidth(ast_pkg::Pad2AstInWidth)
) u_ast (
// different between verilator and other platforms
.clk_ast_ext_i ( clk_i ),
.por_ni ( rst_ni ),
// USB IO Pull-up Calibration Setting
.usb_io_pu_cal_o ( ),
// adc
.adc_a0_ai ( '0 ),
.adc_a1_ai ( '0 ),
// Direct short to PAD
.ast2pad_t0_ao ( ),
.ast2pad_t1_ao ( ),
// Memory configuration connections
.dpram_rmf_o ( ),
.dpram_rml_o ( ),
.spram_rm_o ( ),
.sprgf_rm_o ( ),
.sprom_rm_o ( ),
// clocks' oschillator bypass for FPGA
.clk_osc_byp_i ( clks_osc_byp ),
// clocks and resets supplied for detection
.sns_clks_i ( clkmgr_aon_clocks ),
.sns_rsts_i ( rstmgr_aon_resets ),
.sns_spi_ext_clk_i ( sck_monitor ),
// tlul
.tl_i ( base_ast_bus ),
.tl_o ( ast_base_bus ),
// init done indication
.ast_init_done_o ( ast_init_done),
// buffered clocks & resets
.clk_ast_tlul_i (clkmgr_aon_clocks.clk_io_div4_secure),
.clk_ast_adc_i (clkmgr_aon_clocks.clk_aon_secure),
.clk_ast_alert_i (clkmgr_aon_clocks.clk_io_div4_secure),
.clk_ast_es_i (clkmgr_aon_clocks.clk_main_secure),
.clk_ast_rng_i (clkmgr_aon_clocks.clk_main_secure),
.clk_ast_usb_i (clkmgr_aon_clocks.clk_usb_peri),
.rst_ast_tlul_ni (rstmgr_aon_resets.rst_lc_io_div4_n[rstmgr_pkg::Domain0Sel]),
.rst_ast_adc_ni (rstmgr_aon_resets.rst_lc_aon_n[rstmgr_pkg::Domain0Sel]),
.rst_ast_alert_ni (rstmgr_aon_resets.rst_lc_io_div4_n[rstmgr_pkg::Domain0Sel]),
.rst_ast_es_ni (rstmgr_aon_resets.rst_sys_n[rstmgr_pkg::Domain0Sel]),
.rst_ast_rng_ni (rstmgr_aon_resets.rst_sys_n[rstmgr_pkg::Domain0Sel]),
.rst_ast_usb_ni (rstmgr_aon_resets.rst_usb_n[rstmgr_pkg::Domain0Sel]),
// pok test for FPGA
.vcc_supp_i ( vcc_supp ),
.vcaon_supp_i ( 1'b1 ),
.vcmain_supp_i ( 1'b1 ),
.vioa_supp_i ( 1'b1 ),
.viob_supp_i ( 1'b1 ),
// pok
.ast_pwst_o ( ast_pwst ),
.ast_pwst_h_o ( ast_pwst_h ),
// main regulator
.main_env_iso_en_i ( base_ast_pwr.pwr_clamp_env ),
.main_pd_ni ( base_ast_pwr.main_pd_n ),
// pdm control (flash)/otp
.flash_power_down_h_o ( flash_power_down_h ),
.flash_power_ready_h_o ( flash_power_ready_h ),
.otp_power_seq_i ( otp_ctrl_otp_ast_pwr_seq ),
.otp_power_seq_h_o ( otp_ctrl_otp_ast_pwr_seq_h ),
// system source clock
.clk_src_sys_en_i ( base_ast_pwr.core_clk_en ),
// need to add function in clkmgr
.clk_src_sys_jen_i ( jen ),
.clk_src_sys_o ( ast_base_clks.clk_sys ),
.clk_src_sys_val_o ( ast_base_pwr.core_clk_val ),
// aon source clock
.clk_src_aon_o ( ast_base_clks.clk_aon ),
.clk_src_aon_val_o ( ast_base_pwr.slow_clk_val ),
// io source clock
.clk_src_io_en_i ( base_ast_pwr.io_clk_en ),
.clk_src_io_o ( ast_base_clks.clk_io ),
.clk_src_io_val_o ( ast_base_pwr.io_clk_val ),
.clk_src_io_48m_o ( div_step_down_req ),
// usb source clock
.usb_ref_pulse_i ( usb_ref_pulse ),
.usb_ref_val_i ( usb_ref_val ),
.clk_src_usb_en_i ( base_ast_pwr.usb_clk_en ),
.clk_src_usb_o ( ast_base_clks.clk_usb ),
.clk_src_usb_val_o ( ast_base_pwr.usb_clk_val ),
// adc
.adc_pd_i ( adc_req.pd ),
.adc_chnsel_i ( adc_req.channel_sel ),
.adc_d_o ( adc_rsp.data ),
.adc_d_val_o ( adc_rsp.data_valid ),
// rng
.rng_en_i ( es_rng_req.rng_enable ),
.rng_fips_i ( es_rng_fips ),
.rng_val_o ( es_rng_rsp.rng_valid ),
.rng_b_o ( es_rng_rsp.rng_b ),
// entropy
.entropy_rsp_i ( ast_edn_edn_rsp ),
.entropy_req_o ( ast_edn_edn_req ),
// alerts
.alert_rsp_i ( ast_alert_rsp ),
.alert_req_o ( ast_alert_req ),
// dft
.dft_strap_test_i ( dft_strap_test ),
.lc_dft_en_i ( dft_en ),
.fla_obs_i ( '0 ),
.otp_obs_i ( '0 ),
.otm_obs_i ( '0 ),
.usb_obs_i ( '0 ),
.obs_ctrl_o ( ),
// pinmux related
.padmux2ast_i ( pad2ast ),
.ast2padmux_o ( ast2pinmux ),
.ext_freq_is_96m_i ( hi_speed_sel ),
.all_clk_byp_req_i ( ast_clk_byp_req ),
.all_clk_byp_ack_o ( ast_clk_byp_ack ),
.io_clk_byp_req_i ( io_clk_byp_req ),
.io_clk_byp_ack_o ( io_clk_byp_ack ),
.flash_bist_en_o ( flash_bist_enable ),
// scan
.dft_scan_md_o ( scanmode ),
.scan_shift_en_o ( scan_en ),
.scan_reset_no ( scan_rst_n )
);
// TODO: generate these indices from the target-specific
// pinout configuration. But first, this verilator top needs
// to be split into a Verilator TB and a Verilator chiplevel.
// DFT and Debug signal positions in the pinout.
localparam pinmux_pkg::target_cfg_t PinmuxTargetCfg = '{
tck_idx: MioPadIor3,
tms_idx: MioPadIor0,
trst_idx: MioPadIor4,
tdi_idx: MioPadIor2,
tdo_idx: MioPadIor1,
tap_strap0_idx: MioPadIoc8,
tap_strap1_idx: MioPadIoc5,
dft_strap0_idx: MioPadIoc3,
dft_strap1_idx: MioPadIoc4,
// TODO: check whether there is a better way to pass these USB-specific params
usb_dp_idx: DioUsbdevUsbDp,
usb_dn_idx: DioUsbdevUsbDn,
usb_sense_idx: MioInUsbdevSense,
// TODO: connect these once the verilator chip-level has been merged with the chiplevel.sv.tpl
dio_pad_type: {pinmux_reg_pkg::NDioPads{prim_pad_wrapper_pkg::BidirStd}},
mio_pad_type: {pinmux_reg_pkg::NMioPads{prim_pad_wrapper_pkg::BidirStd}}
};
prim_mubi_pkg::mubi4_t lc_clk_bypass;
// Top-level design
logic [rstmgr_pkg::PowerDomains-1:0] por_n;
assign por_n = {ast_pwst.main_pok, ast_pwst.aon_pok};
top_earlgrey #(
.PinmuxAonTargetCfg(PinmuxTargetCfg),
.SecAesAllowForcingMasks(1'b1),
.SramCtrlMainInstrExec(1),
.SramCtrlRetAonInstrExec(0)
) top_earlgrey (
// update por / reset connections, this is not quite right here
.por_n_i (por_n ),
.clk_main_i (clk_i ),
.clk_io_i (clk_i ),
.clk_usb_i (clk_i ),
.clk_aon_i (clk_aon ),
// change the above
.clks_ast_o (clkmgr_aon_clocks ),
.clk_main_jitter_en_o ( jen ),
.rsts_ast_o ( rstmgr_aon_resets),
.sck_monitor_o ( sck_monitor ),
.pwrmgr_ast_req_o ( base_ast_pwr ),
.pwrmgr_ast_rsp_i ( ast_base_pwr ),
.sensor_ctrl_ast_alert_req_i ( ast_alert_req ),
.sensor_ctrl_ast_alert_rsp_o ( ast_alert_rsp ),
.sensor_ctrl_ast_status_i ( ast_pwst.io_pok ),
.usbdev_usb_ref_val_o ( usb_ref_val ),
.usbdev_usb_ref_pulse_o ( usb_ref_pulse ),
.ast_tl_req_o ( base_ast_bus ),
.ast_tl_rsp_i ( ast_base_bus ),
.adc_req_o ( adc_req ),
.adc_rsp_i ( adc_rsp ),
.ast_edn_req_i ( ast_edn_edn_req ),
.ast_edn_rsp_o ( ast_edn_edn_rsp ),
.otp_ctrl_otp_ast_pwr_seq_o ( otp_ctrl_otp_ast_pwr_seq ),
.otp_ctrl_otp_ast_pwr_seq_h_i ( otp_ctrl_otp_ast_pwr_seq_h ),
.flash_bist_enable_i ( flash_bist_enable ),
.flash_power_down_h_i ( flash_power_down_h ),
.flash_power_ready_h_i ( flash_power_ready_h ),
.es_rng_req_o ( es_rng_req ),
.es_rng_rsp_i ( es_rng_rsp ),
.es_rng_fips_o ( es_rng_fips ),
.all_clk_byp_req_o ( all_clk_byp_req ),
.all_clk_byp_ack_i ( all_clk_byp_ack ),
.io_clk_byp_req_o ( io_clk_byp_req ),
.io_clk_byp_ack_i ( io_clk_byp_ack ),
.hi_speed_sel_o ( hi_speed_sel ),
.div_step_down_req_i ( div_step_down_req ),
.ast2pinmux_i ( ast2pinmux ),
.calib_rdy_i ( ast_init_done ),
.ast_init_done_i ( ast_init_done ),
// USB signals
.usb_dp_pullup_en_o (usb_dp_pullup),
.usb_dn_pullup_en_o (usb_dn_pullup),
.usbdev_usb_rx_d_i (usb_rx_d),
.usbdev_usb_tx_d_o (usb_tx_d),
.usbdev_usb_tx_se0_o (usb_tx_se0),
.usbdev_usb_tx_use_d_se0_o (usb_tx_use_d_se0),
.usbdev_usb_rx_enable_o (usb_rx_enable),
// Flash test mode voltages
.flash_test_mode_a_io ( ),
.flash_test_voltage_h_io ( ),
// OTP external voltage
.otp_ext_voltage_h_io ( ),
// Multiplexed I/O
.mio_in_i (mio_in),
.mio_out_o (mio_out),
.mio_oe_o (mio_oe),
// Dedicated I/O
.dio_in_i (dio_in),
.dio_out_o (dio_out),
.dio_oe_o (dio_oe),
// Pad attributes
.mio_attr_o (mio_attr),
.dio_attr_o ( ),
// Memory attributes
// This is different between verilator and the rest of the platforms right now
.ram_1p_cfg_i ('0),
.ram_2p_cfg_i ('0),
.rom_cfg_i ('0),
// DFT signals
.ast_lc_dft_en_o ( dft_en ),
.dft_strap_test_o ( dft_strap_test ),
.dft_hold_tap_sel_i ( '0 ),
.scan_rst_ni ( scan_rst_n ),
.scan_en_i ( scan_en ),
.scanmode_i ( scanmode )
);
endmodule : chip_earlgrey_verilator