Upload
varden
View
24
Download
0
Embed Size (px)
DESCRIPTION
Progetto sincrono. Una rete riceve in seriale 8 bit, i quali rappresentano un numero binari in valore assoluto, e due segnali di controllo X e Y che comandano la rete. Se XY = 00 bisogna sommare i primi 4 bit con gli ultimi 4 bit. Se XY = 10 bisogna sottrarre i primi 4 bit dagli ultimi 4bit. - PowerPoint PPT Presentation
Citation preview
Progetto sincronoUna rete riceve in seriale 8 bit, i quali rappresentano un numero binari in valore assoluto, e due segnali di controllo X e Y che comandano la rete.
Se XY = 00 bisogna sommare i primi 4 bit con gli ultimi 4 bit.Se XY = 10 bisogna sottrarre i primi 4 bit dagli ultimi 4bit.
Se XY = 11 bisogna sommare i bit pari con i bit dispari.Se XY = 01 bisogna sottrarre i bit pari dai bit dispari.
Infine se in uscita si ha un numero maggiore di 4 bisogna trasmettere l'uscita serialmente altrimenti tramite un registro parallelo.
SchematicoA sinistra vi è un registro SR8CE.Per 8 colpi di clock resta attivo per poter ricevere gli 8 bit.Gli 8 multiplexer ricevono i bit e trasmettono l’uscita opportuna in base ai segnali di controllo XYIl full adder riceve gli 8 bit e li somma. Se X e Y sono 10 o 01 il CI del FA è ad 1 (utile per effettuare la sottrazione fra due numeri in complemento a 2).Se il numero ottenuto è minore o uguale a 4 lo si trasmette tramite uscita parallela (la quale si resetterà dopo 4 colpi di clock).Se ,invece, il numero è maggiore di 4 si trasmette l’uscita serialmente(un registro riceve i bit e li invia in un multiplexer, il quale viene regolato dalle uscite di un contatore.La rete viene opportunamente resettata dopo 12 colpi di clock (8 per ricevere i bit più 4 bit per inviare l’uscita serialmente).
Simulazione behavioral
Ricevo 00100001. Con XY=00 si sommano i primi 4 bit con gli ultimi 4.Quindi 0010 + 0001 = 0011
Ricevo 00100001. Con XY=01 si sottraggono i 4 bit dispari dai 4 bit pari. Quindi 0001 – 0100, quindi 0001 + 1011 + 1. In uscita avrò 1101 la quale sarà inviata serialmente poiché è maggiore di 4
Ricevo 00100001. Con XY = 10 si sottraggono gli ultimi 4 bit dai primi 4 bit. Quindi 0001 – 0100, ovvero 0001 + 1011 + 1 =1111
Ricevo 00100001. Con XY = 11 si sommano i 4 bit dispari ai 4 bit pari. Quindi 0001 + 0100 = 0101
Si può notare che la rete nei primi 8 colpi di clock riceve il valore serialmente lasciando le uscite a 0. Poi per 4 colpi di clocktrasmette l’opportuna uscita per poi resettarsi per poter ricevere un nuovo numero
Simulazione post-route
Nella post-route si può notare che la rete trasmette l’uscita conun ritardo pari a 9 ns.XY=00 in uscita si trasmette0011 con uscita parallela
Con XY=01 si ha in uscita 1101 serialmente
Con XY=11 si trasmette in uscita 0101 serialmente
Con XY=10 si trasmette in uscita 1111 serialmente
VHDLlibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;use IEEE.NUMERIC_STD.ALL;entity vhdl is Port ( Clock : in STD_LOGIC; X : in STD_LOGIC; Y : in STD_LOGIC; Ser_In : in STD_LOGIC; Reset : in STD_LOGIC; Par_Out : out STD_LOGIC_VECTOR (3 downto 0); Ser_Out : out STD_LOGIC);end vhdl;
architecture Behavioral of vhdl is
SIGNAL number : STD_LOGIC_VECTOR ( 7 DOWNTO 0) :=(others=>'0');SIGNAL counter : STD_LOGIC_VECTOR ( 3 DOWNTO 0) :=(others=>'0');SIGNAL number_op : STD_LOGIC_VECTOR ( 3 DOWNTO 0) :=(others=>'0');SIGNAL primi : STD_LOGIC_VECTOR ( 3 DOWNTO 0) :=(others=>'0');SIGNAL ultimi : STD_LOGIC_VECTOR ( 3 DOWNTO 0) :=(others=>'0');SIGNAL pari : STD_LOGIC_VECTOR ( 3 DOWNTO 0) :=(others=>'0');SIGNAL dispari : STD_LOGIC_VECTOR ( 3 DOWNTO 0) :=(others=>'0');
Begin
Per effettuare le operazioni artimetiche abbiamo bisogno di alcune librerie.
Definisco le entità opportune
Definisco dei segnali interni utili per la realizzazione della rete.Number si memorizza il numero ricevuto.Counter è il nostro contatore.Number_op si memorizza il nuovo numero
ottenuto dopo le varie operazioniPrimi,Ultimi,Pari e Dispari, corrispondono ai
rispettivi bit del numero ricevuto serialmente
Tutti inizializzati a 0!
rete : process(clock,reset)Variable I : integer;beginif(reset = '1') then
Par_Out <="0000";Ser_Out <= '0';number <= "00000000";counter <= "0000";number_op<= "0000";
elsif(clock'event AND clock='1') thenif(counter = 13) then
Par_Out <="0000";Ser_Out <= '0';number <= "00000000";counter <= "0000";number_op<= "0000";
elsif(counter< 8) thennumber(0) <= ser_In;for I in 6 downto 0 loop number(I+ 1) <= number( I ); end loop;
Dichiaro un process che viene invocato ad ogni variamento del clock e del reset.Se il reset è attivo viene resettata la rete ad uno stato pronto per ricevere un nuovo numero.Altrimenti ad ogni fronte di salita del clock si controlla il counter.Se è a 13 bisogna resettare la rete.Se è minore di 8 allora memorizza il bit ricevuto all’interno del segnale number shiftando gli altri bit a sinistra
if(counter = 7) thenprimi(0)<= ser_in;primi(1)<= number(0);primi(2)<= number(1);primi(3)<= number(2);ultimi(0)<= number(3);ultimi(1)<= number(4);ultimi(2)<= number(5);ultimi(3)<= number(6);pari(0)<= ser_in;pari(1)<= number(1);pari(2)<= number(3);pari(3)<= number(5);dispari(0)<= number(0);dispari(1)<= number(2);dispari(2)<= number(4);dispari(3)<= number(6);
end if;elsif(counter = 8 ) then if (X='0' and Y='0') then
number_op <= primi + ultimi; elsif (X='1' and Y='0') then
number_op <= primi + (not ultimi + 1); elsif (X='0' and Y='1') then
number_op <= pari + (not dispari + 1); elsif (X='1' and Y='1') then
number_op <= pari + dispari; end if;
Se il counter è a 7 allora si assegnano gli opportuni valori ai vari segnali.Quando il counter ha campionato 8 fronti positivi di clock tramite i due segnali di controllo si eseguono le opportune operazioni di somma o sottrazione in complemento a 2.
elsif(counter > 8) thenif(number_op<="0100") then
par_out <= number_op;elsif(number_op > "0100") then
case counter iswhen "1001" => ser_out <= number_op(3);when "1010" => ser_out <= number_op(2);when "1011" => ser_out <= number_op(1);when "1100" => ser_out <= number_op(0);when others => null;
end case;end if;
end if; counter <= counter + 1;end if;
end process rete;
end Behavioral;
Se il counter ha campionato più di 8 fronti positivi di clock allora si controlla il numero ottenuto dalle opportune operazioni, se è minore o uguale a 4 viene inviato in uscita parallela.Se , invece , è maggiore di 4 viene trasmesso in uscita paralle con un opportuno case.Infine si incrementa il counter prima dell’end if (riferito al fronte positivo di clock).
Simulazione Behavioral
In ingresso: 00100001. Con XY=00 si trasmette il numero 0011 parallelemente
Con XY=01 si trasmette il numero 1101 serialmente
Con XY=11 si trasmette in uscita il numero 0101 serialmente
Con XY=10 si trasmette in uscita il numero 1111 serialmente
Simulazione post-route
In ingresso: 00100001. Con XY=00 si trasmette il numero 0011 parallelemente
Con XY=01 si trasmette il numero 1101 serialmente
Con XY=11 si trasmette in uscita il numero 0101 serialmente
Con XY=10 si trasmette in uscita il numero 1111 serialmente