Code Browser Pages:
Files in
vmm_eth.tar



call_back.sv
cfg_intf.sv
cfg_xtor.sv
chan.sv
cov.sv
env.sv
file_list
host_driver.sv
host_intf.sv
Current file: host_xtor_rx.sv
host_xtor.sv
phy_driver.sv
phy_intf.sv
phy_xtor_rx.sv
phy_xtor.sv
pkt_generator_rx.sv
pkt_generator.sv
pkt.sv
pro.sv
run
rx_pkt.sv
sb.sv
tb_top.v
timescale.v
top.sv
verilog_top.v



`include "vmm.sv"

`ifndef HOST_RXXTOR_CLASS
`define HOST_RXXTOR_CLASS


class host_xtor_rx extends vmm_xactor ;

  host_driver drvr;
  packet_channel chan_hst2sb;

  extern function new(string name,host_driver drvr,packet_channel chan_hst2sb );
  extern task main();

endclass

function 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)
    begin
     `vmm_note(this.log,$psprintf("null object drvr "));
    end

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

endfunction

task host_xtor_rx::main();
  logic [7:0] data[];
  bit [31:0] word;
  rx_packet p;

  fork
   super.main();
  join_none

  forever
    begin
      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())
        begin
          if(drvr.read_Rx_mac_sop())
            data.delete();
            word = drvr.read_Rx_mac_data();
            if(drvr.read_Rx_mac_BE() <= 3)
              begin
                data = new[data.size() + 1] (data);  data[data.size() - 1] = word[31 :24];
              end
            if(drvr.read_Rx_mac_BE() <= 2)
              begin
                data = new[data.size() + 1] (data);  data[data.size() - 1] = word[23:16];
              end
            if(drvr.read_Rx_mac_BE() <= 1)
              begin
                data = new[data.size() + 1] (data);  data[data.size() - 1] = word[15:8];
              end
            if(drvr.read_Rx_mac_BE() <= 0)
              begin
                data = new[data.size() + 1] (data);  data[data.size() - 1] = word[7:0];
              end

          if(drvr.read_Rx_mac_eop())
            begin
              `vmm_note(this.log,$psprintf(" EOP is SEEN data size is 0 \n",data.size()));
              p = new();
              void'(p.byte_unpack(data));
              `vmm_note(this.log,$psprintf("PKT LEN AFTER UNPACK 0",p.Pkt_Packed.size()));
              `vmm_trace(this.log, "Recieved transaction...");
              `vmm_debug(this.log, p.psdisplay("   "));

            `vmm_callback(data_callback,pre_call(p));
             chan_hst2sb.sneak(p);
             data.delete();
            end
         end
  end
endtask

`endif