blob: fc0a33d6e7162932427e7e548ba71f892cc5b4d4 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
class irq_agent #(int src=32) extends uvm_agent;
// To connect to scoreboard
uvm_analysis_port #(irq_seq_item#(src)) m_irq_port;
// No response required. So no irq_driver yet.
irq_monitor #(src) m_mon;
irq_sequencer #(src) m_seqr;
`uvm_component_utils(irq_agent)
function new (string name, uvm_component parent);
super.new(name, parent);
m_irq_port = new("m_irq_port", this);
endfunction : new
function void build_phase(uvm_phase phase);
super.build_phase(phase);
// Assume get_is_active() != UVM_ACTIVE
//assert (get_is_active() != UVM_ACTIVE);
m_seqr = irq_sequencer::type_id::create("m_seqr", this);
m_mon = irq_monitor::type_id::create("m_mon", this);
endfunction : build_phase
function void connect_phase(uvm_phase phase);
m_mon.m_irq_port.connect(m_seqr.m_irq_export);
m_mon.m_irq_port.connect(m_irq_port);
endfunction : connect_phase
endclass : irq_agent