¿Hay alguna diferencia entre:
Type word is STD_logic_vector(15 downto 0)
Y
Signal word:STD_logic_vector(15 downto 0)
?
¿Hay alguna diferencia entre:
Type word is STD_logic_vector(15 downto 0)
Y
Signal word:STD_logic_vector(15 downto 0)
?
En el primer caso, simplemente estás declarando un tipo. Tendría que crear una instancia de una señal de ese tipo como:
type word is STD_logic_vector(15 downto 0);
signal word_signal : word;
Mi preferencia es agregar _type
a los nombres de tipo, por lo que su tipo sería WORD_type
, y su declaración de señal podría ser:
signal word : WORD_type;
Su segundo caso es un simple std_logic_vector
. Usar su propio tipo en lugar de uno predefinido puede hacer que su código sea más legible y / o proporcionar más controles de compilación en las asignaciones de señales, etc. También significa que si la longitud de su "palabra" cambia, es posible que solo tenga que cambiar la definición de tipo original, en lugar de tener que ir por todas partes cambiando 15 downto 0
en 31 downto 0
, o cualquiera que sea el nuevo tamaño.
Puedes permitir la conversión automática entre tu tipo y el tipo base, haciendo que tu tipo sea subtype
:
subtype WORD_type is std_logic_vector(15 downto 0);
Esto te permite hacer lo siguiente:
signal word : WORD_type;
signal another_signal : std_logic_vector (15 downto 0);
...
another_signal <= word;