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.
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'.
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.