Ettag 2

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

d--a-ds--sa-d----------------------------------------------------------------------

// Descridasption : Ethernet 802.3 agent


//das
//
//-----------
as---------------------------------------------------------------------------------
-------------------------
// $Id:
//---------------------------------------------------------------------------------
--------asd----------------------------

//---------------------------------------------------------------------------------
------------------------------------
class eth802_3_agent extends uvm_agent;

virtual eth802_3_ifc ifc; // GMII Interface


sd
eth802_3_agent_cfsdaadg m_eth_ag_cfg; // Agent's configuration

dsadasdas
sdd

eth802_3_sequencer msa_seqduencer; // ETH802_3 Agent Sequencer


a
local eth802_3_codsaverage m_coverage_rx; // ETH802_3 Coverage (RX port)d
local eth802_3_coverage m_coverage_tx; // ETH802_3 dCoverage (TX port)
daddd
dadasdsa
dasaas
local eth802_3_moniasddasdastor_base m_gmii_monitor_rx; // ETH802_3 Agent
Monitor (RX port)d
local eth802_3_monitor_bdsaasde m_gmii_monitor_txd; // ETH802_3 Agent Monitor
(TX Port)sad; // Enable logging what monitors see on interface to PCAP file.
das
//--------------------------as-------------------------------------
`uvm_component_utils(eth802_3d_agent)
sasa
//--------------------------sadasd---d-----------------------------------
// Methodssa-----------------------------------
extern function new (input strinasuvm_phase phase); dsadas // builds an
agent and all its components (analysis ports, driver, monitor)
extern virtual function void connsadect_phase(uvm_phase phase); // connects
driver, monitor and sequencer together
sda
extern virtual task set_speed(eth802_3_speed_e speed); // sets ethernet
speed for agent
extern virtual task set_gmii_mode(eth_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_agent

//---------------------------------------------------------------------------------
------------------------------------
function eth802_3_agent::new(input string name, uvm_component parent);
super.new(name, parent);
ap_rx = new("m_analysids_port_rx", this);
ap_tx = new("m_analysis_port_tx", this);
pcap_log_enable = 0;
endfunction: newdase(uvm_pashase phase);
super.buildsasth802_3_ifc)::get(this, "", "vif", this.ifc))
`uvm_fatal("NOVIF",{"virtual indrface must be set for:
",get_full_name(),".vif"});
as, "", "eth802_3_agent_cfg", m_eth_ag_cfg))
`uvm_fatal("NOCONFIG", $ssabegindte("m_gmii_driver", this);
m_sequencer = eth802_3_dsequencer::type_id::create("m_sequencer", this);

// monitor and coverage module that process RX transactions


if (m_eth_ag_cfg.eth_mode == STANDARD_GMII ) m_gmii_monitor_rx =
eth802_3_gmii_monitor ::type_id::create("m_gmii_monitor_rx", this);
else if (m_eth_ag_cfg.eth_mode == Sdsad monitor ethernet mode")
das
m_coverage_rx = eth802_3_coverage::type_id::create("m_coverage_rx", dasdas
// monitor d;
d
dde == STANDARD_RGMII) m_gmii_monitor_tx =
eth802_3_rgmii_monitor ::type_id::create("m_rgmii_monitor_tx", this);
else if (m_eth_ag_cfg.eth_modeaUnrecognized monitor ethernet mode")

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 = TXd

//---------------------sagent::connect_phase(uvm_padsase phase);
if (m_eth_ag_cfg.is_active) begin
// driver and seddquencer
m_gmii_driver.ifcas = m_eth_ag_cfg;
m_gmii_driver.m_asdrage module that process RX transactions
m_gmii_monitor_rdsx.ifc = this.ifc;
m_gmii_monitor_rx.ap.connect(ap_rx);
ds
if (m_eth_ag_cfg.has_cosadrage_rx.coverage_transaction_rx_imp);
m_cfg = m_eth_ag_cfg;
end
d
// monitor and coverage module that process TX transactions
m_gmii_monitor_tx.ifc = this.ifc;
m_gmii_monitor_tx.ap.connect(ap_tx);as
if (m_eth_ag_cfg.has_coveraasge)
ap_tx.connect(m_coverage_tx.coverage_transaction_tx_imp);
d
m_gmii_monitor_tx.m_cfg = m_eth_ag_cfg;
endfunction:
connect_phaseassds----------------------------------------------------------
task eth802_3_agent::set_speed(eth802_3_speed_e speed);
string msg_id;
string speed_str = speed.name();dsd
$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);

uvm_report_info(msg_id, $sformatf("Speed was set to %s.", speed_str));


endtask: set_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);

uvm_report_info(msg_id, $sformatf("GMII mode was set to %s.", gmii_mode_str));


endtask: set_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";

$sformat(msg_id, "%s::enable_monitor()", get_name());

if (!enable) begin
enable_str = "DISABLED";
end

if (mon_typ == RX_MONITOR) begin


ifc.EN_MON_RXCLK_EN = enable;
end else begin
ifc.EN_MON_TXCLK_EN = enable;
mon_typ_str = "TX";
end

uvm_report_info(msg_id, $sformatf("%s monitor is %s.", mon_typ_str,


enable_str));
endtask: enable_monitor

//---------------------------------------------------------------------------------
------------------------------------
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

//---------------------------------------------------------------------------------
------------------------------------

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy