U y el final del vector en iSIM

0

Estoy realizando los primeros pasos en VHDL e ISE (de Xilinx).

He intentado crear un simple 16bit - > Convertidor de 32 bits. El convertidor recibe un complemento a 2 números (16 bits, por lo que es 1 bit para signo y 15 bits para número de módulo) y genera su forma de 32 bits.

He escrito un fragmento de código en VHDL:

library IEEE;
--using standard lib
use IEEE.STD_LOGIC_1164.ALL;
--lib provides arithmetic functions for vectors
use IEEE.NUMERIC_STD.ALL;
--using lib for operating on U2-code numbers
use IEEE.STD_LOGIC_SIGNED.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;


entity MB_16b_to_32_conv is
    Port ( X_16b : in  STD_LOGIC_VECTOR (16-1 downto 0);
           Y_32b : out  STD_LOGIC_VECTOR (32-1 downto 0));
end MB_16b_to_32_conv;

architecture Behavioral of MB_16b_to_32_conv is

begin

 Y_32b <= std_logic_vector(resize(signed(X_16b), 32-1));

end Behavioral;

ejecutar una simulación en Xilinx ISE me da un error: la entrada es "0000000000000101" y la salida es "0000000000000101U" (naranja en iSIM).

Cuando se convierte a decimal en iSIM, obtengo entrada = 5 y salida = U. No sé por qué hay una U y cómo deshacerme de ella, así que estoy buscando ayuda.

    
pregunta MikelThief

2 respuestas

0

Tiene esta situación porque tiene un error en su asignación

Y_32b <= std_logic_vector(resize(signed(X_16b), 32-1));

Usted expandió x_16b hasta 32-1 (31 bits) y un bit permanece indefinido por lo que recibió una U en el bit del bus. Debe expandir X_16b hasta 32 bits, inténtelo de la siguiente manera:

Y_32b <= std_logic_vector(resize(signed(X_16b), 32));

Y debería funcionar correctamente.

    
respondido por el Roman
-1

No veo la diferencia, pero la solución es que debería haber

Y_32b <= std_logic_vector(resize(signed(X_16b), Y_32b'length);

en lugar de

Y_32b <= std_logic_vector(resize(signed(X_16b), 32-1));

aunque Y_32b'length es 31 creo ...

    
respondido por el MikelThief

Lea otras preguntas en las etiquetas