Code Browser Pages:
| #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 |