оператор присваивания с использованием переменной виртуального интерфейса - PullRequest
0 голосов
/ 23 марта 2019

Я хочу подключить переменную модуля к порту в виртуальном интерфейсе с помощью оператора assign.

Я создал один интерфейс и установил его как виртуальный в config_db в моем верхнем модуле. Я получил виртуальный интерфейс через config_db в другом модуле и пытаюсь подключить порт в другом модуле к порту в виртуальном интерфейсе

//Below is the sample code

  interface intf();   //Interface

       int values;

  endinterface

  module another_module();   //Another module

       virtual intf u_intf;

       int val;

       assign val = u_intf.values; //I am getting ERROR here

       initial begin
             uvm_config_db#(virtual intf)::get(null,"","assoc_array",u_intf);
       end

  endmodule

  module tb();           // Top TB

       intf u_intf();
       another_module u_another_module();

       initial begin
            uvm_config_db#(virtual intf)::set(uvm_root::get(),"","assoc_array",u_intf);
       end

  endmodule

1 Ответ

1 голос
/ 23 марта 2019

Стандарт не позволяет использовать виртуальные интерфейсы в операторах assign.assign используется в Verilog для подключения различных блоков RTL.virtual interface - концепция испытательного стенда системы Verilog.Таким образом, они не могут быть смешаны вместе.

Вы должны уточнить, почему вам действительно нужен интерфейс virtual в этом содержании.Они не являются синтезируемыми.Вы пишете модуль для тестирования?В общем случае вы должны использовать обычные интерфейсы для подключения модулей.

Однако в вашем примере вы можете использовать always @* для выполнения задания:

always @* val = u_intf.values;
...