Professional Documents
Culture Documents
XXXX
XXXX
------------------------------------
/asdasd
//d
//------------sa
//-------------a
//---------------------------------------------------------------------------------
------------------------------------
class eth802_3_agent ed2_3_frame) ap_rx; // Transaction name matches dio agent name
uvm_analysis_dasdse m_gmii_monitor_tx; // ETH802_3 Agent Monitor (TX Port)
das; // Enable logging what monitors see on interface to PCAP file.
//----------------------------------------------------------------
// UVM registration macro
//----------------------------------------------------------------
`uvm_component_utils(eth802_3_agent)
dinput strisadeth_gmii_mode_e gmii_mode); // sets gmii speed mode for agent
extern virtual task enable_monitor(eth802_3_monitor_type_e mon_typ, bit enable);
// enable/disable monitor mid test
extern virtual function void enableMonitorRX(); // enables RX monitor
extern virtual function void disableMonitorRX(); // disables RX
monitor
extern virtual task set_ifg(int ifg, string msg_id = ""); // sets interframe
gap for agent
extern task send_frame(eth802_3_frame tr);
extern task set_sideband_signals(eth802_3_speed_e an_speed = SPEED_1GBIT, bit
an_link_ok = 1'b0, bit an_full_duplex = 1'b0, logic [3:0] carrier_data = 4'b0,
set_error = 0'b0); // Set sideband signals
endclass: eth802_3_agentas
//----------------------------------------------
dsa----------------------------------------------------------------
function eth802_3_adsadgent::new(input string name, uvm_component parent);
super.new(name, parent);
ap_rx = new("m_analysis_port_rx", this);
ap_tx = new("m_analysis_port_tx", this);
pcap_log_enable = 0;
endfunction: new
//---------------------------------------------------------------------------------
------------------------------------
function void eth802_3_asadgent::build_phase(uvm_phase phase);
super.build_phase(phase);
if (m_eth_ag_cfg.has_coverage)
m_coverage_rx = eth802_3_coverage::type_id::create("m_coverage_rx", this);
// monitor settings
m_gmii_monitor_rx.monitor_type = RX_MONITOR;
m_gmii_monitor_rx.pcap_log_enable = pcap_log_enable;
end
if (m_eth_ag_cfg.has_coverage)
m_coverage_tx = eth802_3_coverage::type_id::create("m_coverage_tx", this);
m_gmii_monitor_tx.monitor_type = TX_MONITOR;
m_gmii_monitor_tx.pcap_log_enable = pcap_log_enable;
endfunction: build_phase
//---------------------------------------------------------------------------------
------------------------------------
function void eth802_3_agent::connect_phase(uvm_phase phase);
if (m_eth_ag_cfg.is_active) begin
// driver and sequencer
m_gmii_driver.ifc = this.ifc;
m_sequencer.m_cfg = m_eth_ag_cfg;
m_gmii_driver.m_cfg = m_eth_ag_cfg;
m_gmii_driver.seq_item_port.connect(m_sequencer.seq_item_export);
if (m_eth_ag_cfg.has_coverage)
ap_rx.connect(m_coverage_rx.coverage_transaction_rx_imp);
m_gmii_monitor_rx.m_cfg = m_eth_ag_cfg;
end
if (m_eth_ag_cfg.has_coverage)
ap_tx.connect(m_coverage_tx.coverage_transaction_tx_imp);
m_gmii_monitor_tx.m_cfg = m_eth_ag_cfg;
endfunction: connect_phase
//---------------------------------------------------------------------------------
------------------------------------
task eth802_3_agent::set_speed(eth802_3_speed_e speed);
string msg_id;
string speed_str = speed.name();
$sformat(msg_id, "%s::set_speed()", get_name());
m_gmii_monitor_tx.m_cfg.speed = speed;
m_gmii_monitor_rx.m_cfg.speed = speed;
m_gmii_driver.m_cfg.speed = speed;
m_gmii_driver.set_speed(speed);
//---------------------------------------------------------------------------------
------------------------------------
task eth802_3_agent::set_gmii_mode(eth_gmii_mode_e gmii_mode);
string msg_id;
string gmii_mode_str = gmii_mode.name();
$sformat(msg_id, "%s::set_speed()", get_name());
m_gmii_monitor_tx.m_cfg.gmii_mode = gmii_mode;
m_gmii_monitor_rx.m_cfg.gmii_mode = gmii_mode;
m_gmii_driver.m_cfg.gmii_mode = gmii_mode;
m_gmii_driver.set_gmii_mode(gmii_mode);
//---------------------------------------------------------------------------------
------------------------------------
task eth802_3_agent::enable_monitor(eth802_3_monitor_type_e mon_typ, bit enable);
string msg_id;
string enable_str = "ENABLED";
string mon_typ_str = "RX";
if (!enable) begin
enable_str = "DISABLED";
end
//---------------------------------------------------------------------------------
------------------------------------
function void eth802_3_agent::enableMonitorRX();
//m_gmii_monitor_tx.monitor_en = 1'b1;
m_gmii_monitor_rx.monitor_en = 1'b1;
endfunction : enableMonitorRX
//---------------------------------------------------------------------------------
------------------------------------
function void eth802_3_agent::disableMonitorRX();
//m_gmii_monitor_tx.monitor_en = 1'b0;
m_gmii_monitor_rx.monitor_en = 1'b0;
endfunction : disableMonitorRX
//---------------------------------------------------------------------------------
------------------------------------
task eth802_3_agent::set_ifg(int ifg, string msg_id = "");
m_gmii_driver.set_ifg(ifg);
`uvm_info(msg_id, $sformatf("%s : IFG was set to %d", get_name(), ifg),
UVM_LOW);
endtask: set_ifg
//---------------------------------------------------------------------------------
------------------------------------
task eth802_3_agent::send_frame(eth802_3_frame tr);
m_sequencer.inject_transaction(tr);
endtask: send_frame
//---------------------------------------------------------------------------------
------------------------------------
task eth802_3_agent::set_sideband_signals(eth802_3_speed_e an_speed = SPEED_1GBIT,
bit an_link_ok = 1'b0, bit an_full_duplex = 1'b0, logic [3:0] carrier_data = 4'b0,
set_error = 0'b0);
if(m_eth_ag_cfg.eth_mode == STANDARD_RGMII ) begin
set_speed(an_speed);
m_gmii_driver.set_sideband_signals_idle(an_speed, an_link_ok, an_full_duplex,
carrier_data, set_error);
end else begin
`uvm_fatal(get_type_name(), $sformatf("Sideband signals can only be set in
STANDARD_RGMII mode"));
end
endtask: set_sideband_signals
//---------------------------------------------------------------------------------
------------------------------------