Code Browser Pages:
| // by gopi@testbench.in `include "vmm.sv" `ifndef PHY_TXXTOR_CLASS `define PHY_TXXTOR_CLASS class phy_xtor_tx extends vmm_xactor ; phy_driver drvr; packet_channel chan_mon2sb; extern function new(string name,phy_driver drvr,packet_channel chan_mon2sb); extern task main(); endclass function phy_xtor_tx::new(string name,phy_driver drvr,packet_channel chan_mon2sb); super.new("PHY_XTOR",name); log = new("PHY_XTOR",name); if(drvr == null) `vmm_fatal(log,$psprintf("drvr is null")); this.drvr = drvr; this.chan_mon2sb = chan_mon2sb; endfunction task phy_xtor_tx::main(); logic [7:0] data[]; integer i; packet p; fork super.main(); join_none fork forever begin drvr.posedge_clk(); if(drvr.read_Tx_en()) begin data = new[data.size() + 1] (data); data[data.size() - 1] = drvr.read_Txd(); end end join_none fork forever begin @(negedge phy_intf.Tx_en); p = new(); void'(p.byte_unpack(data)); `vmm_trace(this.log, "Recieved transaction..."); `vmm_debug(this.log, p.psdisplay(" ")); `vmm_callback(data_callback,pre_call(p)); chan_mon2sb.sneak(p); data.delete(); end join_none endtask `endif |