Двунаправленное назначение в Systemverilog - PullRequest
0 голосов
/ 25 июня 2018

Мне нужно создать блок мультиплексора, который работает с входными выводами.Мой модуль имеет n входов и n выходов, я хочу иметь возможность переключаться между различными выходами.

Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что мне нужно сделать это с входными выводами.Так что, если мой выходной контакт будет опущен, входной контакт мультиплексора увидит это.Это не работает с обычным оператором присваивания, поскольку оно будет писать только в одном направлении.Я пробовал оператор псевдонима, который работает как двунаправленное назначение, но я не могу совместить его с оператором if для мультиплексирования.

Что я хочу сделать:

alias net_out = (config) ? net1 : net2;

Iсоздали пример на edaplayground

Заранее спасибо, Патрик

1 Ответ

0 голосов
/ 25 июня 2018

Вы можете использовать двунаправленные tran примитивы, которые точно так же, как можно реализовать это на аппаратном обеспечении MOS.

tranif1(net_out, net1, config);
tranif0(net_out, net2, config);

Если вы хотите сделать это на аппаратном уровне, это должно быть что-то вашеТехнология поддерживает.Большинство FPGA не поддерживают это.

Однако, если этот сигнал config был параметром, а не переменной, вы могли бы использовать оператор alias с generate-if

if(config)
  alias net_out = net1;
else
  alias net_out = net2;
...