La manera de elegir cómo declarar su señal no es cómo se creará una instancia física, sino cómo se asignará sintácticamente su valor.
Si la señal es controlada por asignaciones en un bloque de procedimiento (un bloque que comienza con always
o initial
), debe declararse como reg
.
Si la señal es controlada por una asignación continua (una declaración assign
) o es la salida de una instancia de módulo, entonces debe declararse como wire
(o una de sus variantes como wor
o wand
), o como una salida sin el calificador reg
.
Una señal reg
podría ser físicamente la salida de un latch o un flip-flop o de lógica combinatoria (por ejemplo, hay una forma muy común de inferir un multiplexor combinatorio usando un bloque always
). Un wire
podría ser físicamente la salida de un latch o un flip-flop o lógica combinatoria (por ejemplo, si el flip-flop está dentro de un submódulo).