Autres Elements du Langage

Autres Elements du Langage

Les Variables

Pour certains (rares) cas, une affectation immédiate peut être nécessaire.

On utilise alors le concept de variable dans les process.

Si l’on sait qu’un signal est vecteur d’information (un fil), une variable n’a pas de réalité physique immédiate, le compilateur interprêtera le code pour générer un composant.

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;


entity decodeur is
port(	E : in std_logic_vector(3 downto 0);
		S : out std_logic_vector(2 downto 0);
end decodeur;


architecture arch_dec of decodeur is
begin

process(E) 									-- process combinatoire
variable resultat : unsigned (2 downto 0) 	-- zone de déclaration du process
begin
	for i in 0 to 3 loop
		if E(i)='1' then resultat := resultat + 1 ; end if;
		-- l'affectation d'une variable étant immédiate, 
		-- resultat va bien s'incrémenter plusieurs fois
	end loop;	
S <= std_logic_vector(resultat);	-- la variable n'existe que dans le process
end process;

end arch_dec;

		

La Généricité

On considère un composant instancié plusieurs fois dans une architecture mais dont un paramètre (généralement une taille de vecteur) est susceptible de changer. On définit alors un paramètre générique.

Un paramètre générique correspond en quelques sortes à un #define en C

genericite.svg

entity registre is
generic( N : integer := 8); -- 8 valeur par défaut pour le test
port(	
		....
		E : in std_logic_vector(N-1 downto 0);
		S : out std_logic_vector(N-1 downto 0);
		...
end registre;


architecture arch_reg of reg is
...
end arch_reg

-------------------------------------------------------
-- 				Instanciation
-------------------------------------------------------
entity sys_mic is
...
end sys_mic;


architecture arch_sys_mic of sys_mic is
begin
...
reg_dat : entity registre generic map (N => 8) port map(...);
reg_adr : entity registre generic map (N => 16) port map(...);
...
end arch_sys_mic;