Code Browser Pages:
| #include <rvm_std_lib.vrh> #ifndef PHY_XTOR_CLASS #define PHY_XTOR_CLASS class phy_xtor_tx extends rvm_xactor{ phy_driver drvr; packet_channel chan_mon2sb; task new(string name,phy_driver drvr,packet_channel chan_mon2sb); task main_t(); } task 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) { rvm_note(log,psprintf("drvr is null")); exit(0); } this.drvr = drvr; this.chan_mon2sb = chan_mon2sb; } task phy_xtor_tx::main_t(){ bit [7:0] data[*]; integer i; packet p; super.main_t(); fork while(1){ drvr.posedge_clk(); if(drvr.read_Tx_en()) { data = new[data.size() + 1] (data); data[data.size() - 1] = drvr.read_Txd(); } } join none fork while(1) { @(negedge phy_intf.Tx_en); p = new(); void = p.byte_unpack(data); rvm_trace(this.log, "Recieved transaction..."); rvm_debug(this.log, p.psdisplay(" ")); rvm_OO_callback(data_callback,pre_cb(p)); chan_mon2sb.sneak(p); data.delete(); } join none } #endif |