| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| //############################################################################ |
| // *Name: alert |
| // *Module Description: Alert |
| //############################################################################ |
| |
| module alert ( |
| input clk_i, |
| input rst_ni, |
| input ast_pkg::ast_dif_t alert_in_i, |
| input ast_pkg::ast_dif_t alert_trig_i, |
| input ast_pkg::ast_dif_t alert_ack_i, |
| output ast_pkg::ast_dif_t alert_req_o |
| ); |
| |
| // Unpack inputs |
| logic alert_in_p, alert_in_n, alert_trig_p, alert_trig_n, alert_ack_p, alert_ack_n; |
| |
| assign alert_in_p = alert_in_i.p; |
| assign alert_in_n = alert_in_i.n; |
| assign alert_trig_p = alert_trig_i.p; |
| assign alert_trig_n = alert_trig_i.n; |
| assign alert_ack_p = alert_ack_i.p; |
| assign alert_ack_n = alert_ack_i.n; |
| |
| // Pack outputs |
| logic alert_req_p, alert_req_n; |
| |
| assign alert_req_o.p = alert_req_p; |
| assign alert_req_o.n = alert_req_n; |
| |
| |
| logic alert_p, set_alert_p, clr_alert_p; |
| |
| assign set_alert_p = alert_in_p || alert_trig_p; |
| assign clr_alert_p = !set_alert_p && alert_ack_p; |
| |
| always_ff @( posedge clk_i, negedge rst_ni ) begin |
| if ( !rst_ni ) alert_p <= 1'b0; |
| else if ( set_alert_p ) alert_p <= 1'b1; |
| else if ( clr_alert_p ) alert_p <= 1'b0; |
| end |
| |
| assign alert_req_p = alert_p; |
| |
| logic alert_n, set_alert_n, clr_alert_n; |
| assign set_alert_n = !(alert_in_n && alert_trig_n); |
| assign clr_alert_n = !(set_alert_n || alert_ack_n); |
| |
| always_ff @( posedge clk_i, negedge rst_ni ) begin |
| if ( !rst_ni ) alert_n <= 1'b1; |
| else if ( set_alert_n ) alert_n <= 1'b0; |
| else if ( clr_alert_n ) alert_n <= 1'b1; |
| end |
| |
| assign alert_req_n = alert_n; |
| |
| |
| endmodule : alert |