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