Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[assert] Add ASSERT_KNOWN asserts to multiple new outputs #25999

Merged
merged 12 commits into from
Jan 24, 2025
Merged
3 changes: 3 additions & 0 deletions hw/ip/i2c/rtl/i2c.sv
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,9 @@ module i2c
`ASSERT_KNOWN(IntrAcqStretchKnownO_A, intr_acq_stretch_o)
`ASSERT_KNOWN(IntrUnexpStopKnownO_A, intr_unexp_stop_o)
`ASSERT_KNOWN(IntrHostTimeoutKnownO_A, intr_host_timeout_o)
`ASSERT_KNOWN(LsioTriggerKnown_A, lsio_trigger_o)
`ASSERT_KNOWN(RaclErrorKnown_A, racl_error_o)
`ASSERT_KNOWN(RaclErrorLogKnown_A, racl_error_log_o)

// Alert assertions for reg_we onehot check
`ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg, alert_tx_o[0])
Expand Down
5 changes: 3 additions & 2 deletions hw/ip/i2c/rtl/i2c_reg_top.sv
Original file line number Diff line number Diff line change
Expand Up @@ -3471,8 +3471,9 @@ module i2c_reg_top
end

assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
// Address hit but failed the RACL check
assign racl_error_o = (|addr_hit) & ~(|(addr_hit & (racl_addr_hit_read | racl_addr_hit_write)));
// A valid address hit but failed the RACL check
assign racl_error_o = tl_i.a_valid &
(|addr_hit) & ~(|(addr_hit & (racl_addr_hit_read | racl_addr_hit_write)));
assign racl_error_log_o.racl_role = racl_role;

if (EnableRacl) begin : gen_racl_log
Expand Down
14 changes: 14 additions & 0 deletions hw/ip/mbx/rtl/mbx.sv
Original file line number Diff line number Diff line change
Expand Up @@ -342,4 +342,18 @@ module mbx
`ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A,
u_sysif.u_soc_regs,
alert_tx_o[0])
// All outputs should be known all the time after reset
`ASSERT_KNOWN(AlertsKnown_A, alert_tx_o)
`ASSERT_KNOWN(IntrMbxReadyKnown_A, intr_mbx_ready_o)
`ASSERT_KNOWN(IntrMbxAbortKnown_A, intr_mbx_abort_o)
`ASSERT_KNOWN(IntrMbxErrorKnown_A, intr_mbx_error_o)
`ASSERT_KNOWN(DoeIntrSupportKnown_A, doe_intr_support_o)
`ASSERT_KNOWN(DoeIntrEnKnown_A, doe_intr_en_o)
`ASSERT_KNOWN(DoeIntrKnown_A, doe_intr_o)
`ASSERT_KNOWN(DoeAsyncMsgSupportKnown_A, doe_async_msg_support_o)
`ASSERT_KNOWN(CoreTlDValidKnownO_A, core_tl_d_o.d_valid)
`ASSERT_KNOWN(CoreTlAReadyKnownO_A, core_tl_d_o.a_ready)
`ASSERT_KNOWN(SocTlDValidKnownO_A, soc_tl_d_o.d_valid)
`ASSERT_KNOWN(SocTlAReadyKnownO_A, soc_tl_d_o.a_ready)

endmodule
3 changes: 3 additions & 0 deletions hw/ip/pwm/rtl/pwm.sv
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ module pwm
`ASSERT_KNOWN(CioPWMKnownO_A, cio_pwm_o)
`ASSERT(CioPWMEnIsOneO_A, (&cio_pwm_en_o) === 1'b1)

`ASSERT_KNOWN(RaclErrorKnown_A, racl_error_o)
`ASSERT_KNOWN(RaclErrorLogKnown_A, racl_error_log_o)

// Alert assertions for reg_we onehot check
`ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg, alert_tx_o[0])
endmodule : pwm
5 changes: 3 additions & 2 deletions hw/ip/pwm/rtl/pwm_reg_top.sv
Original file line number Diff line number Diff line change
Expand Up @@ -3164,8 +3164,9 @@ module pwm_reg_top
end

assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
// Address hit but failed the RACL check
assign racl_error_o = (|addr_hit) & ~(|(addr_hit & (racl_addr_hit_read | racl_addr_hit_write)));
// A valid address hit but failed the RACL check
assign racl_error_o = tl_i.a_valid &
(|addr_hit) & ~(|(addr_hit & (racl_addr_hit_read | racl_addr_hit_write)));
assign racl_error_log_o.racl_role = racl_role;

if (EnableRacl) begin : gen_racl_log
Expand Down
1 change: 1 addition & 0 deletions hw/ip/spi_host/rtl/spi_host.sv
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,7 @@ module spi_host
`ASSERT_KNOWN(CioSdEnKnownO_A, cio_sd_en_o)
`ASSERT_KNOWN(IntrSpiEventKnownO_A, intr_spi_event_o)
`ASSERT_KNOWN(IntrErrorKnownO_A, intr_error_o)
`ASSERT_KNOWN(LsioTriggerKnown_A, lsio_trigger_o)

// passthrough_o.s is passed through to spi_device, it may contain unknown data,
// but the unknown data won't be used based on the SPI protocol.
Expand Down
4 changes: 4 additions & 0 deletions hw/ip/tlul/rtl/tlul_adapter_reg_racl.sv
Original file line number Diff line number Diff line change
Expand Up @@ -120,4 +120,8 @@ module tlul_adapter_reg_racl
// Mask read data in case of a RACL violation
assign rdata = racl_error_o ? '1 : rdata_i;

// Ensure that RACL signals are not undefined
`ASSERT_KNOWN(RaclErrorKnown_A, racl_error_o)
`ASSERT_KNOWN(RaclErrorLogKnown_A, racl_error_log_o)

endmodule
3 changes: 3 additions & 0 deletions hw/ip/uart/rtl/uart.sv
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,9 @@ module uart
`ASSERT_KNOWN(RxBreakErrKnown_A, intr_rx_break_err_o)
`ASSERT_KNOWN(RxTimeoutKnown_A, intr_rx_timeout_o)
`ASSERT_KNOWN(RxParityErrKnown_A, intr_rx_parity_err_o)
`ASSERT_KNOWN(LsioTriggerKnown_A, lsio_trigger_o)
`ASSERT_KNOWN(RaclErrorKnown_A, racl_error_o)
`ASSERT_KNOWN(RaclErrorLogKnown_A, racl_error_log_o)

// Alert assertions for reg_we onehot check
`ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg, alert_tx_o[0])
Expand Down
5 changes: 3 additions & 2 deletions hw/ip/uart/rtl/uart_reg_top.sv
Original file line number Diff line number Diff line change
Expand Up @@ -1628,8 +1628,9 @@ module uart_reg_top
end

assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
// Address hit but failed the RACL check
assign racl_error_o = (|addr_hit) & ~(|(addr_hit & (racl_addr_hit_read | racl_addr_hit_write)));
// A valid address hit but failed the RACL check
assign racl_error_o = tl_i.a_valid &
(|addr_hit) & ~(|(addr_hit & (racl_addr_hit_read | racl_addr_hit_write)));
assign racl_error_log_o.racl_role = racl_role;

if (EnableRacl) begin : gen_racl_log
Expand Down
6 changes: 6 additions & 0 deletions hw/ip_templates/ac_range_check/rtl/ac_range_check.sv.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,12 @@ module ${module_instance_name}
// All outputs should be known value after reset
`ASSERT_KNOWN(AlertsKnown_A, alert_tx_o)

`ASSERT_KNOWN(TlDValidKnownO_A, tl_o.d_valid)
`ASSERT_KNOWN(TlAReadyKnownO_A, tl_o.a_ready)

`ASSERT_KNOWN(RaclErrorKnown_A, racl_error_o)
`ASSERT_KNOWN(RaclErrorLogKnown_A, racl_error_log_o)

// Alert assertions for reg_we onehot check
`ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_ac_range_check_reg,
alert_tx_o[0])
Expand Down
4 changes: 4 additions & 0 deletions hw/ip_templates/alert_handler/rtl/alert_handler.sv.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,10 @@ num_regs = 6 + 4 * n_alerts + 4 * 7 + n_classes * 14
// check whether all outputs have a good known state after reset
`ASSERT_KNOWN(TlDValidKnownO_A, tl_o.d_valid)
`ASSERT_KNOWN(TlAReadyKnownO_A, tl_o.a_ready)
% if racl_support:
`ASSERT_KNOWN(RaclErrorKnown_A, racl_error_o)
`ASSERT_KNOWN(RaclErrorLogKnown_A, racl_error_log_o)
% endif
`ASSERT_KNOWN(IrqAKnownO_A, intr_classa_o)
`ASSERT_KNOWN(IrqBKnownO_A, intr_classb_o)
`ASSERT_KNOWN(IrqCKnownO_A, intr_classc_o)
Expand Down
5 changes: 5 additions & 0 deletions hw/ip_templates/racl_ctrl/rtl/racl_ctrl.sv.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,11 @@ module ${module_instance_name} import ${module_instance_name}_reg_pkg::*; #(
// All outputs should be known value after reset
`ASSERT_KNOWN(AlertsKnown_A, alert_tx_o)

`ASSERT_KNOWN(TlDValidKnownO_A, tl_o.d_valid)
`ASSERT_KNOWN(TlAReadyKnownO_A, tl_o.a_ready)

`ASSERT_KNOWN(RaclErrorKnown_A, racl_policies_o)

// Alert assertions for reg_we onehot check
`ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_racl_ctrl_reg,
alert_tx_o[0])
Expand Down
4 changes: 4 additions & 0 deletions hw/ip_templates/rv_plic/rtl/rv_plic.sv.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,10 @@ num_regs = src + ceil(src / 32) + target * ceil(src / 32) + 3 * target + 1
// Assertions
`ASSERT_KNOWN(TlDValidKnownO_A, tl_o.d_valid)
`ASSERT_KNOWN(TlAReadyKnownO_A, tl_o.a_ready)
% if racl_support:
`ASSERT_KNOWN(RaclErrorKnown_A, racl_error_o)
`ASSERT_KNOWN(RaclErrorLogKnown_A, racl_error_log_o)
% endif
`ASSERT_KNOWN(IrqKnownO_A, irq_o)
`ASSERT_KNOWN(MsipKnownO_A, msip_o)
for (genvar k = 0; k < NumTarget; k++) begin : gen_irq_id_known
Expand Down
6 changes: 6 additions & 0 deletions hw/top_darjeeling/ip/soc_proxy/rtl/soc_proxy.sv
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,12 @@ module soc_proxy
i2c_lsio_trigger_sync
};

// All outputs should be known value after reset
`ASSERT_KNOWN(AlertsKnown_A, alert_tx_o)
`ASSERT_KNOWN(DmaLsioTriggerKnown_A, dma_lsio_trigger_o)
`ASSERT_KNOWN(CoreTlDValidKnownO_A, core_tl_d_o.d_valid)
`ASSERT_KNOWN(CoreTlAReadyKnownO_A, core_tl_d_o.a_ready)

// Assertions
`ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A,
u_reg,
Expand Down
5 changes: 3 additions & 2 deletions util/reggen/reg_top.sv.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -730,8 +730,9 @@ ${finst_gen(sr, field, finst_name, fsig_name, fidx)}

assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
% if racl_support:
// Address hit but failed the RACL check
assign racl_error_o = (|addr_hit) & ~(|(addr_hit & (racl_addr_hit_read | racl_addr_hit_write)));
// A valid address hit but failed the RACL check
assign racl_error_o = tl_i.a_valid &
(|addr_hit) & ~(|(addr_hit & (racl_addr_hit_read | racl_addr_hit_write)));
assign racl_error_log_o.racl_role = racl_role;

if (EnableRacl) begin : gen_racl_log
Expand Down
Loading