#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