Скажем, у меня есть многомерный автобус
wire logic [7:0]example_bus[60] [16][4];
и модуль имеет выход
output logic [7:0]example_out[16][4];
Как мне назначить example_out всем 60 проводам в example_bus?
Я знаю, как назначить его на отдельные провода.
example_mod example_mod1(
.example_out(example_bus[0]));
Но я не могу понять, как назначить выход всей шине.
Я рассматривал возможность использования отдельного задания, но обнаружил, что это обычно вызывает проблемы со временем.
Вы можете использовать шаблон назначения, чтобы упростить задания.
wire logic [7:0] example_bus[60] [16][4];
wire logic [7:0] example_temp [16][4];
example_mod example_mod1(
.example_out(example_temp)
);
assign example_bus = '{default:example_temp};
Но это не изменит того факта, что каждый провод example_out
разветвляется на 60 проводов example_bus
. Это фактически то же самое, что и
for(genvar i=0;i<60;i++) begin
assign example_bus[i] = example_temp;
end
У вас должна быть старая версия. Я сам проверял это на Questa. edaplayground.com/x/A7jL
К сожалению, у меня нет лицензии, а SSLC — это кошмар, поэтому я не могу использовать Questa.
@Lupushonora, обновил мой ответ. Если это создает проблему времени, у вас совсем другая проблема.
Спасибо! Я более или менее разобрался с этим самостоятельно, но надеялся, что мне не придется его использовать, поскольку модуль, над которым я работаю, очень сложен и зависит от нескольких таймеров и часов, поэтому следить за тем, чтобы все происходило в правильном порядке, — это кошмар. . К счастью, в данном случае я просто тупил, то, что я пытался сделать, не имело смысла, и проблема, которую я пытался решить, на самом деле могла быть решена в предыдущем модуле.
Спасибо за ответ! К сожалению, хотя quartus может это скомпилировать, modelsim выдает ошибку: «Questa обнаружила непредвиденную внутреннюю ошибку: ../../src/vlog/vgendecl.c(7760). Пожалуйста, свяжитесь со службой поддержки Questa по адресу supportnet.mentor.com «Поэтому я не могу проверить, действительно ли это решило мою проблему.