web-dev-qa-db-fra.com

Comment déclarer une sortie avec plusieurs zéros en VHDL

Bonjour, j'essaie de trouver un moyen de remplacer cette commande: Bus_S <= "0000000000000000000000000000000" & Ne; avec quelque chose de plus pratique. Compter les zéros un par un n'est pas très sophistiqué. Le programme concerne une unité SLT pour une ALU en mips. Le SLT n'obtient que 1 bit (MSB d'un ADDSU32) et a une sortie de 32 bits tous zéros mais le premier bit qui dépend du Ne = MSB d'ADDSU32. (plz ignorer ALUop pour le moment)

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;

Existe-t-il un moyen d'utiliser (30 jusqu'à 0) = '0' ou quelque chose comme ça? Merci.

12
BugShotGG

Essayez ceci: bus_S <= (0 => Ne, others => '0') Cela signifie: définissez le bit 0 sur Ne et définissez les autres bits sur '0'.

29
Philippe

alternative aux réponses données:

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

Toujours la dernière affectation dans un processus combinatoire est prise en compte. Cela rend le code très lisible lorsque vous avez une affectation par défaut pour la plupart des cas et ajoutez ensuite les cas spéciaux, c'est-à-dire alimentant un bus large (défini comme enregistrement) à travers un bloc hiérarchique et modifiant simplement certains des signaux.

3
iterationbound