назначить инструкцию с использованием переменной виртуального интерфейса

#system-verilog #uvm

#system-verilog #uvm

Вопрос:

Я хочу подключить переменную модуля к порту в виртуальном интерфейсе с помощью инструкции 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:

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

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

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

 always @* val = u_intf.values;
  

Комментарии:

1. Привет, Серж, это допустимо, если я использую always_comb val = u_intf.values; ? Допустимо ли использовать виртуальный интерфейс внутри always_comb? Спасибо, Somesh