blob: ad102cbc8b44e8fb911e4cff20c80eeafbeb9a63 [file] [log] [blame]
// 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