Я знаю, что SystemVerilog позволяет сохранить ссылку на интерфейс в классе SystemVerilog, объявив его «виртуальным». Шина, возможно ли также объявить модуль как "виртуальный", чтобы сохранить ссылку на модуль в классе SystemVerilog? Пример:
`timescale 1 ns / 10 ps
// Verilog-95 style BFM (with verilog 2001 style ports)
module BFM1(
input wire clk,
output reg [15:0] data
);
task write(input [15:0] data1);
data = data1;
@(posedge clk);
#1;
endtask;
endmodule
class MyClass
//"Virtual module" (instead of a "virtual interface")
virtual BFM1 vBFM1;
function new(virtual BFM1 vvBFM1);
// save virtual module reference
vBFM1 = vvBFM1;
endfunction
function write(input [15:0] data);
vBFM.write(data);
endfunction
endclass
// Testbench top-level
module top;
reg clk;
reg [15:0] data;
initial begin
clk = 0;
forever #5 !clk = clk;
end
BFM1 BFM1(
.clk (clk),
.data (data)
);
DUT DUT(
.clk (clk),
.data (data)
);
initial begin
//Verilog-95 Style BFM call
BFM1.write(16'h12340);
// SystemVerilog Class style
MyClass MyClass1 = new(BFM1);
MyClass.write(16'hDEAD);
MyClass.write(16'hBEEF);
$finish;
end
endmodule
// Design under Test
module DUT(
input wire clk,
input wire [15:0] data
);
//insert design under test logic
endmodule
Мне было просто любопытно, если бы я мог обойтись без формальности использования интерфейсов SystemVerilog и просто использовать старую BFM в стиле verilog-95 из Класс SystemVerilog?
Я просто думаю, что BFM старого стиля будет работать лучше в тестовом стенде SystemVerilog, если ваш DUT находится в VHDL, поскольку VHDL не имеет интерфейсов SystemVerilog. Это своего рода избыточность для создания ненужных интерфейсов и пакетов только для подключения тестового стенда SystemVerilog к VHDL DUT, который их не использует.