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