#verilog #system-verilog #verification #modelsim #uvm
Вопрос:
У меня есть интерфейс в моем тестовом стенде UVM, который состоит из нескольких экземпляров nmo. Симулятор(modelsim) жалуется на это, поскольку это нарушение LRM (не может иметь экземпляров чего-либо, кроме интерфейса, внутри интерфейса). Мне нужно переместить экземпляры за пределы интерфейса.
Как мне это сделать? Можно ли это сделать с помощью модпорта или задач? Это устаревший код, который я не писал.
interface model_interface(input wire mac_clk,input reset);
wire [31:0] modelio_vi;
wire [31:0] modelio_data_in;
wire [31:0] modelio_data_out;
wire [31:0] modelio_data_oen;
logic [4:0] modelio_mode_if [32];
logic [4:0] ulp_modelio_mode_if [32];
logic sample_if [32];
bit ulp_modelio_mux_en;
bit host_disable;
genvar loop;
//The below block is the issue
generate
for(loop=0; loop<32; loop=loop 1)
begin:asgn
nmos inst_1(modelio_vi[loop], modelio_data_in[loop], (~modelio_data_oen[loop]));//TB to DUT Buffer
nmos inst_2(modelio_data_out[loop], modelio_vi[loop], ( modelio_data_oen[loop]));//DUT to TB Buffer
end
endgenerate
endinterface
Ответ №1:
nmos
должен быть создан экземпляр внутри модуля, так как это примитив переключателя Verilog.
nmos (out,in,ctrl);
функционально это то же assign out = ctrl ? in : 'z;
самое , что и, поэтому вы можете просто переключиться на использование инструкций assign для минимального изменения кода. Другой размер вы должны переместить nmos
в отдельный модуль и назначить подключение общих сигналов.
generate
for(loop=0; loop<32; loop=loop 1)
begin:asgn
assign modelio_vi[loop] = !modelio_data_oen[loop] ? modelio_data_in[loop] : 'z;//TB to DUT Buffer
assign modelio_data_out[loop] = modelio_data_oen[loop] ? modelio_vi[loop] : 'z;//DUT to TB Buffer
end
endgenerate
Комментарии:
1. nmo необходим, если вам нужно передать сильные стороны.
2. Спасибо за быстрый ответ. Хотя это действительно решает проблему LRM, это создает функциональные ошибки во время моделирования. Первоначальное намерение состояло в том, чтобы этот сигнал исходил от DUT и TB, и в зависимости от того, какая сила будет выше, он пройдет. Таким образом, НМО по-прежнему будут необходимы.