--library ieee; --use ieee.std_logic_1164.all; entity addern is generic (enne: integer:=8); port( c_in: in bit; x_in: in bit_vector (enne-1 downto 0); y_in: in bit_vector (enne-1 downto 0); c_out, s: out bit; s_out: out bit_vector (enne-1 downto 0) ); end entity; -- quello che ho fatto qui è definire praticamente una serie di 8 full adder, praticamente lo posso immaginare come una black box in cui all'interno ho tutti i componenti -- che sto per andare a definire all'interno dell'architecture architecture archi of addern is signal carry_chain : bit_vector (enne-2 downto 0); component cfa is port( a: in bit; b: in bit; ci:in bit; s: out bit; co: out bit ); end component; begin --qui è necessario fare attenzione perchè tutti i blocchetti non sono uguali, i due estremi non sono collegati a nulla, mentre quelli interni invece sono collegati tra di loro gen_stat: for index in 0 to (enne-1) generate --fino all'end generate qui è come se stessimo mettendo uno dopo l'altro n pezzi. --come già detto abbiamo 3 differenti casi di blocchetti: estremo destro, estremo sinistro e interni: begin prima_cella:if (index=0) generate begin cella_0: component cfa port map(a=>x_in(index), b=>y_in(index), ci=>c_in, s=>s_out(index), co=>carry_chain(index) ); end generate; ultima_cella:if (index=(enne-1)) generate begin cella_n: component cfa port map(a=>x_in(index), b=>y_in(index), ci=>carry_chain(index-1), s=>s_out(index), co=>c_out ); end generate; altre_celle:if ((index/=0) and (index/=(enne-1)))generate begin celle: component cfa port map(a=>x_in(index), b=>y_in(index), ci=>carry_chain(index-1), s=>s_out(index), co=>carry_chain(index) ); end generate; end generate; end architecture;