Etude d`un additionneur
Transcription
Etude d`un additionneur
VHDL exercises Etude d’additionneur P. Bakowski [email protected] Additionneur binaire Modéliser et simuler l'additionneur binaire complet (full adder). a b cout cin a, b – entrées s – sortie cin – retenue d’entrée cout – retenue de sortie s P. Bakowski 2 Additionneur binaire - fonction a b cout cin s P. Bakowski a 0 0 0 0 1 1 1 1 b 0 0 1 1 0 0 1 1 cin 0 1 0 1 0 1 0 1 s 0 1 1 0 1 0 0 1 cout 0 0 0 1 0 1 1 1 3 Additionneur binaire - entity entity adder is port (a,b,cin: in bit; s,cout: out bit); end adder; -- a,b,cin,s,cout sont des signaux interface de l’additionneur P. Bakowski 4 Additionneur binaire - architecture architecture behavioral of adder is begin s <= (a xor b) xor cin after sum_del; cout <= (a and b) or (cin and a) or (cin and b) after carry_del; end behavioral; a b cout cin délais d’affectation s P. Bakowski 5 Additionneur binaire - architecture architecture behavioral of adder is begin s <= (a xor b) xor cin after sum_del; cout <= (a and b) or (cin and a) or (cin and b) after carry_del; end behavioral; a b cout cin délais d’affectation à définir comme: un littéral une constante un paramètre s P. Bakowski 6 Additionneur binaire - architecture entity adder is generic sum_del: time:= 10 ns; generic carry_del: time:= 20 ns; port (a,b,cin: in bit; s,cout: out bit); end adder; a b cout cin délais d’affectation à définir comme: un littéral une constante un paramètre s P. Bakowski 7 Additionneur 4-bits a(3) b(3) cout s(3) a(2) b(2) c(2) s(2) a(1) b(1) c(1) s(1) a(0) b(0) c(0) cin s(0) entity adder4 is port (a,b: in bit_vector(3 downto 0); cin: in bit; s: out bit_vector(3 downto 0); cout: out bit); end adder4; P. Bakowski 8 adder4: architecture algorithmique A partir de la description d'un additionneur binaire écrire un additionneur 4-bit en version fonctionnelle - architecture algorithmique Mots clés à étudier: • process • variable • for.. loop P. Bakowski 9 adder4: architecture algorithmique architecture algorithmique of adder4 is signal... process (liste de sensibilité) variable ... begin for i in ... loop -- ici mettre l'opération de l'additionneur binaire end loop; end process; end algorithmique ; Attention: le seul endroit pour déclarer une variable – à l’intérieur du process P. Bakowski 10 adder4: architecture algorithmique architecture algorithmique of adder4 is process (liste de sensibilité) variable retenue: bit; begin retenue .. end process; cout <= retenue after 4*carry_del; end algorithmique ; a(i) b(i) s(i) La première version de l'architecture algorithmique utilise une variable interne pour le stockage de la valeur de la retenue entre les étages de l'additionneur; le délai entre cin est cout est globalisé P. Bakowski 11 adder4: architecture algorithmique architecture algorithmique of adder4 is process variable retenue: bit; begin retenue .. wait for carry_del; end process; end algorithmique ; a(i) b(i) s(i) La deuxième version de l'architecture algorithmique doit utiliser l'instruction wait afin de modéliser les délais locaux (e.g: wait on a,b,cin; wait for carry_del) P. Bakowski 12 addern: architecture algorithmique entity addern is generic: taille integer:=4; port (a,b: in bit_vector(taille-1 downto 0); cin: in bit; s: out bit_vector(taille-1 downto 0); cout: out bit); end addern; La troisième version de l'architecture algorithmique est générique : dans l'interface de cette version il faut introduire le terme générique caractérisant la taille de l'additionneur. Le module de l'architecture doit être modifiée en conséquence. P. Bakowski 13 Architecture « data flow » La version de l'architecture (additionneur 4 bits) du type data flow ne contient que des affectations type signal enchainées par les signaux internes: architecture dataflow of adder4 is signal c: bit_vector(3 downto 0); begin s(0) <= .. after .. c(0) <= .. after .. s(1) <= .. after .. c(1) <= .. after .. .. end dataflow; P. Bakowski 14 Architecture structurelle Une architecture structurelle est construite à partir des composants – components. Mots clés a étudier: signal, component, port map, generate, .. instances de l’additionneur adder: composant P. Bakowski 15 Architecture structurelle 1 architecture structurelle of adder4 is signal c: bit_vector(3 downto 0); component adder port (...); -- ici il faut copier le port de l'entity end component; begin add1: adder port map(...); add2: ... ... end structurelle; P. Bakowski instances câblés 16 Architecture structurelle 2 Dans la deuxième version de l'architecture structurelle doit utiliser le mécanisme de génération des instanciations: generate à étudier: boucle principale de génération for .. conditions de génération (instanciation) if .. P. Bakowski 17 Architecture structurelle 2 architecture structurelle of addern is signal c: bit_vector(taille-1 downto 0); component adder .. begin ADD: for i in 0 to taille-1 generate INADD: if i=0 adder port map (…) end generate INADD; ADDX : if i>0 adder port map (…) end generate ADDX; end generate ADD; ... end structurelle; P. Bakowski 18