Progetto sincrono

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

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

Transcript of Progetto sincrono

Page 1: Progetto sincrono

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.

Page 2: Progetto sincrono

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

Page 3: Progetto sincrono

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

Page 4: Progetto sincrono

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

Page 5: Progetto sincrono

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

Page 6: Progetto sincrono

Con XY=11 si trasmette in uscita 0101 serialmente

Con XY=10 si trasmette in uscita 1111 serialmente

Page 7: Progetto sincrono

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!

Page 8: Progetto sincrono

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.

Page 9: Progetto sincrono

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

Page 10: Progetto sincrono

Simulazione Behavioral

In ingresso: 00100001. Con XY=00 si trasmette il numero 0011 parallelemente

Con XY=01 si trasmette il numero 1101 serialmente

Page 11: Progetto sincrono

Con XY=11 si trasmette in uscita il numero 0101 serialmente

Con XY=10 si trasmette in uscita il numero 1111 serialmente

Page 12: Progetto sincrono

Simulazione post-route

In ingresso: 00100001. Con XY=00 si trasmette il numero 0011 parallelemente

Con XY=01 si trasmette il numero 1101 serialmente

Page 13: Progetto sincrono

Con XY=11 si trasmette in uscita il numero 0101 serialmente

Con XY=10 si trasmette in uscita il numero 1111 serialmente