Подключение интерфейса Modport к среде Testbench в SystemVerilog - PullRequest
0 голосов
/ 05 мая 2020

У меня есть простой дизайн арбитра, который предоставляет одному из двух запросов приоритет первому. Я хочу подключить его к испытательному стенду, разработанному в 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

Подводя итог, я хочу знать, как ссылки на модопорты передаются в разные классы из верхний модуль? Приведенный выше код был урезан, чтобы сделать минимальный рабочий пример.

1 Ответ

0 голосов
/ 05 мая 2020

Modports - это просто ограниченные права доступа при объявлении портов интерфейса или переменных виртуального интерфейса или назначении им. Это объясняется в разделе 25.9 Виртуальные интерфейсы и 25.10 Доступ к интерфейсным объектам LRM IEEE 1800-2017.

По сути, вы всегда можете назначать типы интерфейсов из неограниченный экземпляр интерфейса для modport ограниченного порта или переменной, но вы никогда не можете выполнить назначение в обратном направлении (с ограничениями на неограниченное) или с одного типа порта мода на другой порт мода тип.

...