| // Copyright lowRISC contributors. | |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. | |
| // SPDX-License-Identifier: Apache-2.0 | |
| // | |
| // This module gates the alert triggers with their enable bits, and correctly bins | |
| // the enabled alerts into the class that they have been assigned to. The module | |
| // produces the alert cause and class trigger signals. | |
| // | |
| module alert_handler_class import alert_pkg::*; ( | |
| input [NAlerts-1:0] alert_trig_i, // alert trigger | |
| input [N_LOC_ALERT-1:0] loc_alert_trig_i, // alert trigger | |
| input [NAlerts-1:0] alert_en_i, // alert enable | |
| input [N_LOC_ALERT-1:0] loc_alert_en_i, // alert enable | |
| input [NAlerts-1:0] [CLASS_DW-1:0] alert_class_i, // class assignment | |
| input [N_LOC_ALERT-1:0][CLASS_DW-1:0] loc_alert_class_i, // class assignment | |
| output logic [NAlerts-1:0] alert_cause_o, // alert cause | |
| output logic [N_LOC_ALERT-1:0] loc_alert_cause_o, // alert cause | |
| output logic [N_CLASSES-1:0] class_trig_o // class triggered | |
| ); | |
| // assign alert cause | |
| assign alert_cause_o = alert_en_i & alert_trig_i; | |
| assign loc_alert_cause_o = loc_alert_en_i & loc_alert_trig_i; | |
| // classification mapping | |
| logic [N_CLASSES-1:0][NAlerts-1:0] class_masks; | |
| logic [N_CLASSES-1:0][N_LOC_ALERT-1:0] loc_class_masks; | |
| // this is basically an address to onehot0 decoder | |
| always_comb begin : p_class_mask | |
| class_masks = '0; | |
| loc_class_masks = '0; | |
| for (int unsigned kk = 0; kk < NAlerts; kk++) begin | |
| class_masks[alert_class_i[kk]][kk] = 1'b1; | |
| end | |
| for (int unsigned kk = 0; kk < N_LOC_ALERT; kk++) begin | |
| loc_class_masks[loc_alert_class_i[kk]][kk] = 1'b1; | |
| end | |
| end | |
| // mask and OR reduction, followed by class enable gating | |
| for (genvar k = 0; k < N_CLASSES; k++) begin : gen_classifier | |
| assign class_trig_o[k] = (|{ alert_cause_o & class_masks[k], | |
| loc_alert_cause_o & loc_class_masks[k] }); | |
| end | |
| endmodule : alert_handler_class |