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.
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
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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;
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
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
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
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