| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| // |
| |
| package alert_pkg; |
| |
| // these localparams are generated based on the system top-level configuration |
| localparam int unsigned NAlerts = alert_handler_reg_pkg::NAlerts; // maximum 252 |
| localparam int unsigned EscCntDw = alert_handler_reg_pkg::EscCntDw; // maximum 32 |
| localparam int unsigned AccuCntDw = alert_handler_reg_pkg::AccuCntDw; // maximum 32 |
| localparam int unsigned NLpg = alert_handler_reg_pkg::NLpg; |
| localparam int unsigned NLpgWidth = alert_handler_reg_pkg::NLpgWidth; |
| localparam logic [NAlerts-1:0][NLpgWidth-1:0] LpgMap = alert_handler_reg_pkg::LpgMap; |
| // enable async transitions for specific RX/TX pairs |
| localparam bit [NAlerts-1:0] AsyncOn = alert_handler_reg_pkg::AsyncOn; |
| |
| // common constants, do not change |
| localparam int unsigned N_CLASSES = alert_handler_reg_pkg::N_CLASSES; |
| localparam int unsigned N_ESC_SEV = alert_handler_reg_pkg::N_ESC_SEV; |
| localparam int unsigned N_PHASES = alert_handler_reg_pkg::N_PHASES; |
| localparam int unsigned N_LOC_ALERT = alert_handler_reg_pkg::N_LOC_ALERT; |
| |
| localparam int unsigned PING_CNT_DW = alert_handler_reg_pkg::PING_CNT_DW; |
| localparam int unsigned PHASE_DW = alert_handler_reg_pkg::PHASE_DW; |
| localparam int unsigned CLASS_DW = alert_handler_reg_pkg::CLASS_DW; |
| |
| // do not change the phase encoding |
| typedef enum logic [2:0] {Idle = 3'b000, Timeout = 3'b001, Terminal = 3'b011, |
| Phase0 = 3'b100, Phase1 = 3'b101, Phase2 = 3'b110, |
| Phase3 = 3'b111, FsmError = 3'b010} cstate_e; |
| |
| // These LFSR parameters have been generated with |
| // $ util/design/gen-lfsr-seed.py --width 32 --seed 2700182644 |
| localparam int LfsrWidth = 32; |
| typedef logic [LfsrWidth-1:0] lfsr_seed_t; |
| typedef logic [LfsrWidth-1:0][$clog2(LfsrWidth)-1:0] lfsr_perm_t; |
| localparam lfsr_seed_t RndCnstLfsrSeedDefault = 32'he96064e5; |
| localparam lfsr_perm_t RndCnstLfsrPermDefault = |
| 160'hebd1e5d4a1cee5afdb866a9c7a0278b899020d31; |
| |
| // struct containing the current alert handler state |
| // can be used to gather crashdump information in HW |
| typedef struct packed { |
| // alerts |
| logic [NAlerts-1:0] alert_cause; // alert cause bits |
| logic [N_LOC_ALERT-1:0] loc_alert_cause; // local alert cause bits |
| // class state |
| logic [N_CLASSES-1:0][AccuCntDw-1:0] class_accum_cnt; // current accumulator value |
| logic [N_CLASSES-1:0][EscCntDw-1:0] class_esc_cnt; // current escalation counter value |
| cstate_e [N_CLASSES-1:0] class_esc_state; // current escalation protocol state |
| } alert_crashdump_t; |
| |
| // Default for dangling connection |
| parameter alert_crashdump_t ALERT_CRASHDUMP_DEFAULT = '{ |
| alert_cause: '0, |
| loc_alert_cause: '0, |
| class_accum_cnt: '0, |
| class_esc_cnt: '0, |
| class_esc_state: {N_CLASSES{Idle}} |
| }; |
| |
| // breakout wrapper structs |
| typedef struct packed { |
| // alerts |
| logic [NAlerts-1:0] alert_cause; // alert cause bits |
| logic [N_LOC_ALERT-1:0] loc_alert_cause; // local alert cause bits |
| // class state |
| logic [N_CLASSES-1:0] class_trig; // class trigger |
| logic [N_CLASSES-1:0] class_esc_trig; // escalation trigger |
| logic [N_CLASSES-1:0][AccuCntDw-1:0] class_accum_cnt; // current accumulator value |
| logic [N_CLASSES-1:0][EscCntDw-1:0] class_esc_cnt; // current escalation counter value |
| cstate_e [N_CLASSES-1:0] class_esc_state; // current escalation protocol state |
| } hw2reg_wrap_t; |
| |
| typedef struct packed { |
| // aggregated shadow reg errors (trigger internal alerts) |
| logic shadowed_err_update; |
| logic shadowed_err_storage; |
| // ping config |
| logic ping_enable; // ping timer enable |
| logic [PING_CNT_DW-1:0] ping_timeout_cyc; // ping timeout config |
| logic [NAlerts-1:0] alert_ping_en; // ping enable for alerts |
| // alert config |
| logic [N_LOC_ALERT-1:0] loc_alert_en; // alert enable |
| logic [N_LOC_ALERT-1:0][CLASS_DW-1:0] loc_alert_class; // alert class config |
| logic [NAlerts-1:0] alert_en; // alert enable |
| logic [NAlerts-1:0][CLASS_DW-1:0] alert_class; // alert class config |
| // class config |
| logic [N_CLASSES-1:0] class_en; // enables esc mechanisms |
| logic [N_CLASSES-1:0] class_clr; // clears esc/accu |
| logic [N_CLASSES-1:0][AccuCntDw-1:0] class_accum_thresh; // accum esc threshold |
| logic [N_CLASSES-1:0][EscCntDw-1:0] class_timeout_cyc; // interrupt timeout |
| logic [N_CLASSES-1:0][N_PHASES-1:0][EscCntDw-1:0] class_phase_cyc; // length of phases 0..3 |
| logic [N_CLASSES-1:0][N_ESC_SEV-1:0] class_esc_en; // esc signal enables |
| logic [N_CLASSES-1:0][N_ESC_SEV-1:0][PHASE_DW-1:0] class_esc_map; // esc signal/phase map |
| // determines when to latch the crashdump output. |
| logic [N_CLASSES-1:0][PHASE_DW-1:0] class_crashdump_phase; |
| } reg2hw_wrap_t; |
| |
| endpackage : alert_pkg |
| |
| |