What is the exact difference between mailbox and data queue? Explain it by giving some Example

What is the exact difference between mailbox and data queue? Explain it by giving some Example.

Drishti,

I am assuming that you are novice user of the system-verilog.

In system-verilog, mailboxs are nothing but the wrapper on top of the queues with some in-built functions, like

put(), get(), peek, try_put(), try_get(), try_peek()

When you try to retrieve the queue element from the empty queue, you will get the fatal error, while in case of mailbox, depending upon the functions used, your piece of code either waits or does something else.

System verilog code template :

module test; 
mailbox mbox_h;
 
initial begin 
 mbox_h = new(); 
 if (mbox_h) begin 
  fork 
   packet_send(); 
   packet_receive(); 
  join
 end 
 $display("DONE"); 
end 

task packet_send(); 
 int i; 
 begin 
  for (i=0; i<5; i++) begin 
   #(50); 
   mbox_h.put(i); 
   $display("Sent packet : %d : @time %d",i, $time); 
  end 
 end 
endtask 

task packet_receive(); 
 int i, pkt; 
 begin 
  for (int i=0; i<5; i++) 
  begin 
   mbox_h.get(pkt); 
   $display("Received packet : %d : @time %d", pkt, $time); 
  end 
 end 
endtask 
endmodule

Printed log messages :
Sent packet : 0  : @time 50
Received packet : 0 : @time 50
Sent packet : 1  : @time 100
Received packet : 1 : @time 100 
Sent packet : 2  : @time 150
Received packet : 2 : @time 150 
Sent packet : 3  : @time 200
Received packet : 3 : @time 200 
Sent packet : 4  : @time 250
Received packet : 4 : @time 250 
DONE

Hope this helps.

Thanks,
Pratik

In reply to drishti:
See queue and mailbox | Verification Academy