Code Browser Pages:
Files in
rvm_eth.tar



call_back.vr
cfg_intf.vr
cfg_xtor.vr
chan.vr
cov.vr
defines.vr
env.vr
host_driver.vr
host_intf.vr
Current file: host_xtor_rx.vr
host_xtor.vr
phy_driver.vr
phy_intf.vr
phy_xtor_rx.vr
phy_xtor.vr
pkt.vr
pro.vr
run
rx_pkt.vr
sb.vr
timescale.v
top.v



#include <rvm_std_lib.vrh>

#ifndef HOST_XTOR_CLASS
#define HOST_XTOR_CLASS


class host_xtor_rx extends rvm_xactor{
  host_driver drvr;
  packet_channel chan_hst2sb;
  task new(string name,host_driver drvr,packet_channel chan_hst2sb );

  task main_t();
}

task host_xtor_rx::new(string name,host_driver drvr,packet_channel chan_hst2sb){

  super.new("HOST_RX",name);
  log  = new("HOST_RX",name);
  if(drvr == null)
  { rvm_note(this.log,psprintf("null object drvr ")); }

  this.drvr = drvr;
  this.chan_hst2sb = chan_hst2sb ;
}

task host_xtor_rx::main_t(){
  bit [7:0] data[*];
  bit [31:0] word;
  rx_packet p;
  super.main_t();
  while(1) {
    drvr.posedge_clk();
    if(drvr.read_Rx_mac_ra())
      drvr.drive_Rx_mac_rd(1);
    else
      drvr.drive_Rx_mac_rd(0);
    if(drvr.read_Rx_mac_pa())
      {
      if(drvr.read_Rx_mac_sop())
        data.delete();
        word = drvr.read_Rx_mac_data();
        if(drvr.read_Rx_mac_BE() == 0)
        { data = new[data.size() + 1] (data);  data[data.size() - 1] = word[7:0]; }
        if(drvr.read_Rx_mac_BE() <= 1)
        { data = new[data.size() + 1] (data);  data[data.size() - 1] = word[15:8]; }
        if(drvr.read_Rx_mac_BE() <= 2)
        { data = new[data.size() + 1] (data);  data[data.size() - 1] = word[23:16]; }
        if(drvr.read_Rx_mac_BE() <= 3)
        { data = new[data.size() + 1] (data);  data[data.size() - 1] = word[31:24]; }

      if(drvr.read_Rx_mac_eop())
        { rvm_note(this.log,psprintf(" EOP is SEEN data size is 0 \n",data.size()));
          p = new();
          void = p.byte_unpack(data);
          rvm_note(this.log,psprintf("PKT LEN AFTER UNPACK 0",p.Pkt_Packed.size()));
          rvm_trace(this.log, "Recieved transaction...");
          rvm_debug(this.log, p.psdisplay("   "));

        rvm_OO_callback(data_callback,pre_cb(p));
        chan_hst2sb.sneak(p);
        data.delete();
        }
      }
  }
}

#endif