9. Класс Receiver
Объявленный в файле Receiver.sv класс Receiver также, как и драйвер, содержит метод start():
task start();
Transaction trans = new();
while (!trans.stop) begin
receive(trans);
rcvr2sb.put(trans);
end
endtask : start
Пока не пришел сигнал stop, который выставляет Driver, повторяется следующая последовательность действий:
1) Принимается транзакция:
receive(trans);
2) Принятая транзакция кладется в почтовый ящик:
rcvr2sb.put(trans);
Аналогично методу Driver::drive() в методе receive() прием транзакции можно конфигурировать в зависимости от принципа работы тестируемой схемы.
SystemVerilog-описание класса Receiver:
`ifndef _RECEIVER_
`define _RECEIVER_
class Receiver;
virtual output_interface.output_prt output_intf;
mailbox #(Transaction) rcvr2sb;
// Constructor
function new(
virtual output_interface.output_prt output_intf_new,
mailbox #(Transaction) rcvr2sb
);
this.output_intf = output_intf_new ;
if(rcvr2sb == null) begin
$display(" **ERROR: rcvr2sb is null");
$finish;
end else
this.rcvr2sb = rcvr2sb;
endfunction : new
task receive(Transaction trans);
@(posedge output_intf.clock);
trans.result = output_intf.cb.result;
endtask
// Start method
task start();
Transaction trans = new();
while (!trans.stop) begin
receive(trans);
rcvr2sb.put(trans);
end
endtask : start
endclass
`endif
Из описанных в классе Receiver методов при конфигурировании изменяется только метод receive().

Комментарии (0)