2012-01-24 14 views
11

Hola, estoy tratando de encontrar una manera de reemplazar este comando: Bus_S <= "0000000000000000000000000000000" & Ne; con algo más conveniente. Contando los ceros uno por uno no es muy sofisticado. El programa trata de una unidad SLT para una ALU en mips. El SLT obtiene solo 1 bit (MSB de un ADDSU32) y tiene una salida de 32 bits, todos ceros, pero el primer bit que depende del Ne = MSB de ADDSU32. (PLZ ignorar ALUop por el momento)Cómo declarar un resultado con ceros múltiples en VHDL

entity SLT_32x is 
    Port (Ne : in STD_LOGIC; 
     ALUop : in STD_LOGIC_VECTOR (1 downto 0); 
     Bus_S : out STD_LOGIC_VECTOR (31 downto 0)); 
end SLT_32x; 

architecture Behavioral of SLT_32x is 
begin 
    Bus_S <= "0000000000000000000000000000000" & Ne; 
end Behavioral; 

¿Hay una manera de utilizar (30 downto 0) = '0' o algo por el estilo? Gracias.

+1

Gracias Eso también debería funcionar: 'constante C: std_logic_vector (30 downto 0): = (otros => '0');' 'comienzan Bus_S <= C & Ne; Ne_out <= Ne;' – BugShotGG

Respuesta

24

Pruebe esto: bus_S <= (0 => Ne, others => '0') Significa: configure el bit 0 a Ne, y configure los otros bits en '0'.

1

alternativa a las respuestas dadas:

architecture Behavioral of SLT_32x is 
begin 
    Bus_S <= (others => '0'); 
    Bus_S(0) <= ne; 
end Behavioral; 

siempre la última asignación en un proceso combinatorio se tiene en cuenta. Esto crea un código muy legible cuando tiene una asignación predeterminada para la mayoría de los casos y luego agrega los casos especiales, es decir alimentando un bus ancho (definido como registro) a través de un bloque jerárquico y simplemente modificando algunas de las señales.

+0

esta debe hacerse dentro de un proceso; de lo contrario, no funcionará. al menos no en ModelSim-Altera 10.3d – iSWORD

Cuestiones relacionadas