1 / 15

lfaggianelli@arces.unibo.it

lfaggianelli@arces.unibo.it. Contatore binario. Un contatore binario è una rete sequenziale sincrona che memorizza un numero binario e lo incrementa a ogni fronte positivo del segnale do clock. Dunque un contatore conta i fronti positivi del segnale di clock. z = y.

arav
Download Presentation

lfaggianelli@arces.unibo.it

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. lfaggianelli@arces.unibo.it

  2. Contatore binario Un contatore binario è una rete sequenziale sincrona che memorizza un numero binario e lo incrementa a ogni fronte positivo del segnale do clock. Dunque un contatore conta i fronti positivi del segnale di clock. z = y Per sommare 1 a una configurazione di n bit bastano n half adder! + 1 yn-1 .. 0Stato presente (n variabili) Rn Yn-1 .. 0 Stato futuro (n variabili) CLK

  3. Contatore binario Contatore x2^n OUT n Se l’uscita del contatore è a n bit ( OUT[n-1 .. 0] ) le configurazioni d’uscita sono 2^n, quindi il valore massimo contato è 2^n -1. 0 2^n-1 1 2^n-2 2 …

  4. Contatore binario per 16 In caso di contatore per 16 si scriverà: Visto che dobbiamo considerare gli stati k-esimi e che quando il contatore arriva alla configurazione 1111, ricomincia a contare da 0. CLK Quando il segnale CLK passa da 0 a 1 (fronte di salita) i 4 FFD del registro da 4 bit R4 leggono il valore su D e lo portano in uscita ( su Q). Negli intervalli di tempo in cui non ci sono fronti di salita su CLK, il valore di Q rimane l’ultimo valore campionato sul fronte di CLK, anche al variare di D. Q R4 D + 1

  5. Contatore binario x8 (3 bit) Vediamo ora come realizzare un contatore binario da 3 bit. Ci servirà un sommatore da 3 bit, che potrebbe essere realizzato con 3 full adder e 3 Flip Flop D (ognuno memorizza un bit) come da figura. Ma si noti che il CI è posto a 0 e l’operando B è posto a 1. Lo stesso risultato si può ottenere ponendo CI a 1 e B a 0. A questo punto si potrebbe semplificare grandemente la rete combinatoria eliminando l’operatore B e sostituendo i 3 FULL-ADDER con 3 HALF-ADDER 0 CI S A B CO D Q CK COUNT0 COUNT1 COUNT2 1 0 0 CI S A B CO D Q CK CI S A B CO D Q CK CO CLK

  6. Segnali di comando di un contatore Il contatore binario x8 della slide precedente non può essere controllato: appena acceso, il contatore inizia a contare ininterrottamente. Dunque abbiamo progettato un contatore perfettamente funzionante ma inutilizzabile! Il contatore diventa più interessante se possiamo controllarlo. Ipotizziamo a titolo di esempio i seguenti possibili comandi. I comandi dovranno essere SINCRONI, in modo da assicurare che, se la frequenza di clock è stata ben calcolata, sia soddisfatto il requisito sul tempo di set up minimo dell’ingresso D dei FF rispetto al fronte positivo del Clock: RESET – Il conteggio riparte da zero (qualunque sia il valore di conteggio corrente) ENABLE – Il contatore “conta” cioè incrementa il suo valore in risposta ai fronti positivi del clock solo se il comando di ENABLE è attivo, altrimenti il contatore mantiene il suo valore; ipotizziamo che il reset prevalga sull’enable UP/DOWN# – Se il contatore può contare sia in avanti che all’indietro (cioè se può sia incrementarsi che decrementarsi in risposta ai fronti positivi del clock), allora questo comando indica il senso del conteggio (1 in avanti e 0 all’indietro) INCREMENTO NON UNITARIO – L’equazione diventa S=S+k , dove k è un numero naturale inviato ad appositi ingressi LOAD – Il contatore viene inizializzato con un valore arbitrario inviato ad appositi ingressi (quindi il contatore può partire anche da un valore diverso da zero)

  7. Segnali di comando di un contatore CONTATORE x8 EN UP/DOWN# RESET# LOAD LD[2..0] COUNT[2..0] CO 3 I comandi indicati nel lucido precedente sono solo esempi. L’unico ingresso necessario è l’ingresso di RESET che porta il contatore in uno stato iniziale ben definito. Gli altri comandi aggiungono flessibilità al contatore e possono esserci o non esserci. E’ sempre possibile immaginare anche altri possibili comandi.

  8. Carry Out Il segnale di uscita CO (carry out dell’Half-Adder più significativo) segnala lo stato di fine-conteggio (111), e può essere lasciato volante oppure può essere utilizzato come ingresso sincrono di un’altra RSS Se si vuol far contare il contatore sia in avanti che all’indietro, allora si propone di realizzare la funzione G con tre FULL-ADDER, piuttosto che con 3 HALF-ADDER. In questo caso: Quando il contatore conta in avanti l’unico caso in cui si ha riporto sull’ultimo Full Adder è quando lo stato presente è 111: infatti in questo stato le uscite della rete dei full-adder daranno 111+1 = 000 con 1 sul carry out dell’ultimo full adder. Dunque CO vale 1 solo quando il contatore finisce di contare! Quando il contatore conta indietro, ad ogni conteggiosomma 111 al suo stato presente, quindi c’è sempre un riporto sull’ultimo Carry Out tranne nel caso in cui lo stato presente è 000: infatti 000+111=111 senza riporto. In definitiva il CO vale 0 solo quando il contatore finisce di contare! In pratica se vogliamo sapere quando un contatore è nello stato di fine-conteggio, possiamo tenere sotto controllo l’ultimo carry out, senza dover controllare il valore di conteggio; il segnale di fine conteggio si dovrà attivare quando UP/DOWN# e CO sono entrambi a 1 o entrambi a 0.

  9. Reset Si può generare lo stato futuro del contatore con un mux da 3 bit a due vie controllato dal segnale di reset. Una via va messa a 0: Y[2..0] = 0.RESET + RESET/ . y[2..0] Dall’espressione si vede che il mux da 3 bit si riduce a tre AND a due ingressi Ogni variabile di stato futuro sarà zero se RESET=1, altrimenti sarà uguale all’altro ingresso dell’AND (uscita della rete dei 3 adder) In questa realizzazione il reset ha priorità su tutti gli altri comandi G D Q R3 RESET/

  10. Enable A lezione abbiamo visto che il comando di enable si può realizzare con un altro mux a due vie sull’ingresso D. Nel caso del nostro contatore proponiamo la seguente variante: si controlla con il segnale ENABLE l’ingresso CI dell’HALF-ADDER meno significativo EN CI S A CO Se CI=EN=0 -> U = I + 0 Se CI=EN=1 -> U = I + 1 ove I rappresenta lo stato presente (il valore del contatore) e l’uscita U è il prossimo valore (determinato dagli half-adder) y0 y1 y2 CI S CO U I CI S A CO CO

  11. Up/Down# Il comando Up/Down# seleziona la modalità di conteggio del contatore. Se Up/Down# =1 : COUNT<=COUNT+1 sale a 7 e riparte da 0 Se Up/Down#=0 : COUNT<=COUNT-1 scende a 0 e riparte da 7 Modifichiamo il contatore con i tre Full-Adder in modo da consentirgli di decrementare il suo valore. Dobbiamo agire sulla funzione G: + ) = - k 1 S ( (S 1) k mod8 = - = X X [ n 1 .. 0 ]; 2C complement o a 2 - = + = + + X k X X ( k 1 ) 2C (k) Se X è un numero senza segno di n bit in complemento a due si ha: In pratica per sottrarre uno, basta sommare la configurazione di tutti 1, quindi se n=3 abbiamo che:

  12. Up/Down# Quindi: CI B0 B1 B2 UP/DOWN# EN

  13. 3 3 3 3 3 Load 1 CI 3 HA S A R3 CK 1 3 L LOAD RESET/ Il load è un caso generalizzato del reset: il reset memorizza nel registro di stato il valore 000, mentre LOAD memorizza un valore qualunque tra 000 e 111 L è il valore che verrà memorizzato in R3 ed è proprio da L che partirà il conteggio;mentre LOAD è il segnale di controllo che abilita la funzione di load.

  14. 3 Conteggio fino a X<2^n Una funzione molto utile nei contatori (specialmente in quelli a molti bit) è il conteggio fino ad un numero diverso dal valore massimo di conteggio. Una soluzione può essere quella di realizzare una rete che riconosca il numero X e generi un impulso sul pin di RESET per resettare il contatore. 3 X CNT RST La soluzione prevede la realizzazione di una rete aggiuntiva: il che può andare bene se X è un numero fissato (la rete è semplice) ma il tutto si complica se X è un numero che varia (la rete si complica troppo). Una soluzione più flessibile è quella di partire da X e arrivare a 0 (invece che da 0 a X). Il che è possibile grazie alla modalità di conteggio inversa (UP/DOWN’=0) e al comando di LOAD. EN UP/DWN’ LD LOAD END_T 1 0 X COUNT Quando COUNT=0 il contatore si resetta al valore X e ricomincia a contare fino a 0 Quale sarà l’espressione di END_T?

  15. Contatore BCD Ci sono alcuni casi in cui, anche se la soluzione del conteggio da X a 0 sarebbe più semplice, bisogna per forza utilizzare una rete esterna per riconoscere il numero X e resettare il contatore: un caso del genere è il contatore BCD. Il contatore BCD è un contatore che conta da 0 a 9 (da 0000 a 1001), quindi è necessario usare un contatore x16 in cui lo stato futuro di 9 sia 0 (cioè che si resetti dopo il 9. In questo caso si usa una rete che decodifica lo stato 9 (mintermine m(9) di 4 variabili). Tale mintermine dovrà agire da reset sincrono del contatore.

More Related