class transaction; rand bit [7:0] data; rand bit [7:0] addr; endclass : transaction class generator; task transmit_bad(input int unsigned n, input mailbox #(transaction) mb); transaction tr; tr = new(); repeat (n) begin if (!tr.randomize()) begin $error("randomization failed"); end else begin $display("GEN: transmit_bad: after randomization tr.addr=%0h, tr.data=%0h", tr.addr, tr.data); end mb.put(tr); end endtask : transmit_bad endclass : generator class driver; task receive_bad(input mailbox #(transaction) mb); transaction tr; forever begin #5ns; mb.get(tr); // drive tranaction to DUT $display("DRV: receive_bad: Received tr.addr=%0h, tr.data=%0h", tr.addr, tr.data); end endtask : receive_bad endclass : driver module top(); generator gen; driver drv; mailbox #(transaction) mb; initial begin mb = new(); gen = new(); drv = new(); // Run producer and Consumer in parallel fork begin gen.transmit_bad (5, mb); end begin drv.receive_bad(mb); end join end endmodule : top