blob: 5886f70cc707936adced1c2c194cc893eba81c0c [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// this sequence responses to alert pins by sending the ack pins
class alert_receiver_alert_rsp_seq extends alert_receiver_base_seq;
`uvm_object_utils(alert_receiver_alert_rsp_seq)
`uvm_object_new
constraint alert_receiver_alert_rsp_seq_c {
r_alert_ping_send == 0;
r_alert_rsp == 1;
}
virtual task body();
if (cfg.start_default_rsp_seq) begin
default_rsp_thread();
end else begin
super.body();
end
endtask
// Sends alert rsps back to host.
virtual task default_rsp_thread();
alert_esc_seq_item req_q[$];
fork
forever begin : get_req
p_sequencer.req_analysis_fifo.get(req);
if (req.alert_esc_type == AlertEscSigTrans) req_q.push_back(req);
end : get_req
forever begin : send_rsp
if (cfg.in_reset) begin
req_q.delete();
wait (!cfg.in_reset);
end
wait (req_q.size());
rsp = req_q.pop_front();
start_item(rsp);
`DV_CHECK_RANDOMIZE_WITH_FATAL(req,
r_alert_ping_send == 0;
r_alert_rsp == 1;
int_err == 0;
)
finish_item(rsp);
get_response(rsp);
end : send_rsp
join
endtask
endclass : alert_receiver_alert_rsp_seq