Estoy comprobando lo que puedo y no puedo hacer al agregar y concatenar en VHDL.
si bien puedo combinar dos vectores concatenándolos, sigo recibiendo un error si uso agregado.
Vi una respuesta aquí que muestra que es posible.
¿Alguien puede explicar por qué están dando errores, o tal vez es el idioma que no permite esto?
Agradezco cualquier sugerencia.
aquí está mi código. Marqué las líneas correctas e incorrectas. Uso ModelSim. Comento/elimino el comentario al verificar para evitar varios controladores.
architecture RTL of example_array is
--signal Z_BUS : std_logic_vector(7 downto 0);
--signal R_BUS : std_logic_vector(3 downto 0);
--signal A_BIT, B_BIT, C_BIT, D_BIT : std_logic;
signal T_BUS : std_logic_vector(7 downto 0);
signal Y_BUS : std_logic_vector(7 downto 0);
signal U_BUS : std_logic_vector(3 downto 0);
signal P_BUS : std_logic_vector(3 downto 0);
signal E_BIT, F_BIT, G_BIT, H_BIT : std_logic;
BEGIN
Z_BUS <= A_BIT & R_BUS & B_BIT & C_BIT & D_BIT; -- correct
--Z_BUS <= W_BUS & R_BUS; -- correct
P_BUS <= (E_BIT, F_BIT, G_BIT, H_BIT); -- correct
U_BUS <= (E_BIT, F_BIT, G_BIT, H_BIT); -- correct
(E_BIT, F_BIT, G_BIT, H_BIT) <= std_logic_vector'("1011"); -- correct
(E_BIT, F_BIT, G_BIT, H_BIT) <= P_BUS(3 downto 0); -- correct
(E_BIT, F_BIT, G_BIT, H_BIT) <= P_BUS; -- correct
Y_BUS <= (2 => '1', 3 => F_BIT, 1 downto 0 => '0', others => '0'); -- correct
--T_BUS(7 downto 0) <= (U_BUS(3 downto 0), P_BUS(3 downto 0)); -- WRONG!!
--T_BUS <= (U_BUS, P_BUS); -- WRONG!!
--(U_BUS(3 downto 0), P_BUS(3 downto 0)) <= T_BUS(7 downto 0); -- WRONG!!
END architecture RTL;
Use la Biblioteca VHDL-2008 en ModelSim y su error se resolverá. Los paquetes VHDL-93/2002 no admiten la agregación de vectores como la que ha expresado.
usuario8352
(U_BUS(3 downto 0), P_BUS(3 downto 0));
es una agregación, no una concatenación (por ejemploT_BUS <= U_BUS & P_BUS;
, ). Para la asignación agregada, no ha especificado la versión de VHDL, anterior a o -2008type nybble_array is array (0 to 1) of std_logic_vector(3 downto 0);
y(U_BUS, P_BUS) <= nybble_array'(T_BUS (7 downto 4), T_BUS (3 downto 0));
necesita un elemento a la derecha para cada elemento a la izquierda. El tipo tiene que ser discernible del contexto. El tipo de elemento tiene que ser el mismo.Paebbels
usuario8352
Paebbels
usuario8352