Исходя из вашего комментария, звучит так, будто вы хотите автобус с тремя состояниями. Базовая структура для управления автобусом с тремя состояниями:
assign bus = enable ? out : 1'bz;
Каждый модуль, управляющий шиной, имеет драйвер этой формы. Только один модуль может иметь активацию в любое время; протокол шины должен определять способ определения владельца шины. Например, последовательные шины, такие как I2C, имеют «ведущий» и «ведомый»; мастер всегда говорит первым, а раб говорит только после того, как его попросил мастер.
Если вы не хотите, чтобы шина плавала, когда ничего не движется (в симуляции это отображается как значение Z), вы можете объявить шину как tri0
или tri1
, а не как обычную wire
.
Если несколько модулей имеют активацию, установленную одновременно, или если у вас есть несколько стандартных assign bus = out;
драйверов, пытающихся управлять различными значениями на шине, это называется «конфликт». Это будет отображаться как значение X при моделировании и может привести к повреждению драйверов в физическом устройстве.