У меня есть простой дизайн арбитра, который предоставляет одному из двух запросов приоритет первому. Я хочу подключить его к испытательному стенду, разработанному в SystemVerilog. Я хочу подключить свою среду к моему тестируемому устройству через интерфейс на двух позициях: 1) к монитору, который контролирует шину 2). Драйверу для выполнения соответствующих тестов.
Для двух подключений я определил два modports
. Я создал экземпляр своего DUT и интерфейса в верхнем модуле и попытался передать ссылку на эти два modports
с помощью виртуальных интерфейсов. Однако я получаю ошибку времени компиляции, как показано ниже:
** Ошибка: Environment.sv (8): недопустимое присвоение типу виртуального интерфейса arbi_if из типа виртуальный интерфейс arb_if: Тип виртуального интерфейса 'arbi_if' не может быть назначен типу 'arb_if'.
Ниже приведены различные коды:
arb_if.sv
interface arb_if(
input clk
);
logic [1:0] request;
logic [1:0] grant;
logic rst;
clocking cb @(posedge clk);
input grant;
output request;
endclocking
modport TEST(clocking cb, output rst);
modport ARBI(input clk, grant, output rst, request);
modport MONT(input clk, grant, rst, request);
endinterface
Environment.sv
class Environment;
virtual arbi_if af;
virtual arbi_if.TEST aft;
virtual arbi_if.TEST afm;
function new(virtual arb_if af);
this.af = af;
this.aft = af.TEST;
this.afm = af.MONT;
endfunction
endclass
test.sv
`include "Environment.sv"
class test;
Environment env;
virtual arb_if af;
function new(virtual arb_if afi);
this.af = afi; // Compiler complains for this line.
endfunction
...
endclass
tb_top.sv
module tb_top;
reg clk;
initial
begin
clk = 0;
forever #5 clk = ~clk;
end
arb_if arbif(clk);
arb a(arbif);
test ta(arbif);
endmodule
Подводя итог, я хочу знать, как ссылки на модопорты передаются в разные классы из верхний модуль? Приведенный выше код был урезан, чтобы сделать минимальный рабочий пример.