Code Browser Pages:
| // by gopi@testbench.in `include "vmm.sv" `ifndef SB_CLASS `define SB_CLASS class sb extends vmm_xactor ; packet_channel exp_chan,rcv_chan; cov cb; integer exp_size,rcv_size; bit test_pass = 0; extern function new(string name,packet_channel exp_chan,packet_channel rcv_chan,cov cb); extern task main(); extern task final_report(); extern function integer exp_num_pkts(); extern function integer rcv_num_pkts(); endclass function sb::new(string name,packet_channel exp_chan,packet_channel rcv_chan,cov cb); super.new("SB",name); log = new("SB",name); this.exp_chan = exp_chan; this.rcv_chan = rcv_chan; this.exp_size = 0; this.rcv_size = 0; this.cb = cb; endfunction task sb::main() ; packet exp_pkt,rcv_pkt; string msg; super.main(); forever begin exp_chan.get(exp_pkt); exp_size++; rcv_chan.get(rcv_pkt); `vmm_note(log,$psprintf("Pkt len Recieved 0 Expected 0",rcv_pkt.Pkt_Packed.size(),exp_pkt.Pkt_Packed.size())); rcv_size++; if(!exp_pkt.compare(rcv_pkt,msg)) begin `vmm_note(log,msg); `vmm_error(log,$psprintf("ERROR :: Packet mismatch occured on pkt number 0",exp_size)); end else this.cb.sample(exp_pkt); end endtask task sb::final_report(); $display("\t***********************************************"); $display("\t Number of packets sent 0",get_instance(),exp_size + exp_chan.size() ); $display("\t Number of packets Recieved 0",get_instance(),rcv_size); $display("\t***********************************************"); if (exp_size == rcv_size) this.test_pass = 1; else `vmm_error(this.log,"Packet count mismatch "); endtask function integer sb::exp_num_pkts() ; exp_num_pkts = exp_size + exp_chan.size() ; endfunction function integer sb::rcv_num_pkts(); rcv_num_pkts = rcv_size; endfunction `endif |