diff --git a/sim/wb_packet_sink.svh b/sim/wb_packet_sink.svh
new file mode 100644
index 0000000000000000000000000000000000000000..a0c4b5b98b2507a2dd3f1f9e71ddedacf5ad860a
--- /dev/null
+++ b/sim/wb_packet_sink.svh
@@ -0,0 +1,91 @@
+`ifndef __WB_PACKET_SINK_SVH
+ `define __WB_PACKET_SINK_SVH
+
+`include "wb_packet_source.svh"
+
+virtual class EthPacketSink;
+
+   static int _null  = 0;
+   
+   pure virtual function int poll();
+   pure virtual task recv(ref EthPacket pkt, ref int result = _null);      
+   
+   endclass // EthPacketSink
+
+
+class WBPacketSink extends EthPacketSink;
+   protected CWishboneAccessor m_acc;
+
+   
+   function new(CWishboneAccessor acc);
+      m_acc  = acc;
+   endfunction // new
+
+   function int poll();
+      return m_acc.poll();
+      endfunction // poll
+
+   protected task decode_status(uint64_t stat, ref EthPacket pkt);
+     if(stat & 'h2)
+       pkt.error      = 1'b1;
+     else begin
+        pkt.has_smac  = (stat & 'h4 ? 1'b1 : 1'b0);
+        pkt.has_crc   = (stat & 'h8 ? 1'b1 : 1'b0);
+     end
+   endtask // decode_status
+   
+
+   task recv(ref EthPacket pkt, ref int result = _null);
+      byte tmp[];
+      wb_cycle_t cyc;
+      int i, size = 0, n = 0;
+
+      
+      pkt  = new;
+      m_acc.get(cyc);
+
+      
+      for(i=0;i<cyc.data.size(); i++)
+        if (cyc.data[i].a == WRF_DATA)
+          size           = size + cyc.data[i].size;
+
+      tmp                = new[size];
+
+      $display("CDS %d size: %d\n", cyc.data.size(), size);
+      
+      
+      for(i=0;i<cyc.data.size(); i++)
+        begin
+           wb_xfer_t xf  = cyc.data[i];
+           
+           case(xf.a)
+             WRF_STATUS:
+               begin
+                  decode_status(xf.d, pkt);
+                  if(pkt.error)
+                    break;
+               end
+
+             WRF_DATA:
+               begin
+                  if(xf.size == 1)
+                    tmp[n++]  = (xf.d  & 'hff);
+                  else if(xf.size == 2)begin
+                     tmp[n++]  = ((xf.d >> 8)  & 'hff);
+                     tmp[n++]  = (xf.d  & 'hff);
+                  end
+               end
+             endcase // case (xf.a)
+        end
+      pkt.deserialize(tmp);
+      
+
+endtask // recv
+   
+   
+
+endclass // WBPacketSink
+
+
+
+`endif