I have tried this code and trying to interface with design but I’m getting error.
interface absum;
logic [3:0]a;
logic [3:0]b;
logic clk;
logic [4:0]s;
modport DRV (input a,b, input s,clk);
endinterface
class transaction;
randc bit [3:0] a;
randc bit [3:0] b;
bit [4:0]s;
function void display();
$display("a : %0d \t b: %0d sum: %0d", a,b,s);
endfunction
function transaction copy();
copy = new();
copy.a = this.a;
copy.b = this.b;
endfunction
endclass
class generator;
virtual absum ab;
transaction trans;
mailbox #(transaction) mbx;
int i = 0;
function new(mailbox #(transaction) mbx);
this.mbx = mbx;
trans = new();
endfunction
task run();
for(i = 0; i<20; i++) begin
trans = new();
assert(trans.randomize()) else $display("Randomization Failed");
$display("[GEN] : DATA SENT TO DRIVER");
trans.display();
mbx.put(trans.copy);
end
endtask
endclass
class driver;
transaction tc;
virtual absum ab;
mailbox #(transaction) mbx;
function new(mailbox #(transaction) mbx);
this.mbx = mbx;
tc = new();
endfunction
task run1();
forever begin
mbx.get(tc);
@(posedge ab.clk);
ab.a <= tc.a;
ab.b <= tc.b;
tc.display();
$display("DRV received the values ");
end
endtask
endclass
module tb;
absum ab();
generator gen;
driver drv;
mailbox #(transaction) mbx;
sum dut(.a(ab.a),.b(ab.b),.clk(ab.clk),.s(ab.s));
initial begin
ab.clk = 0;
mbx = new();
gen = new(mbx);
drv = new(mbx);
gen.ab = ab;
fork
gen.run();
drv.run1();
join
end
always #10 ab.clk = ~ab.clk;
endmodule
module sum(
input [3:0]a,b,
input clk,
output reg [4:0]s);
assign s = a + b;
endmodule