Curs de instruire

Unul dintre elementele digitale importante și utilizate pe scară largă este contorul. Vom încerca să înțelegem ce contoare sunt și cum să le construim din blocurile de bază ale circuitelor digitale. În paralel, va trebui să luăm în considerare și adders-urile, deoarece acestea vor fi necesare pentru a crea un contor sincron. Ce fel de contor este acesta și ce crede el?







Curs de instruire

Funcția de contor, deoarece nu este greu de ghicit, este numărarea numărului de impulsuri care ajung la intrarea sa. Înainte de operare, contorul este resetat printr-un semnal corespunzător (resetare), iar ieșirea acestuia este setată la un cod binar n-bit egal cu zero. Pe frontul activ al semnalului de ceas, codul de la ieșirea contorului este incrementat cu unu. În plus, semnalele de autorizare și de direcție pot fi de asemenea prezente (reducerea sau creșterea valorii contorului).

Am discutat deja despre neajunsurile designului asincron al circuitelor digitale, dar, ca exemplu, încă vreau să arăt implementarea unui contor asincron (contor cu vibrații). Și, deși este mai simplu decât un contor sincron și necesită mai puține elemente logice, nu o utilizați niciodată în proiectele dvs.! Acest lucru este plin de apariția de erori în activitatea schemei și poate provoca glitches neclare. Figura de mai jos arată circuitul unui numărător asincron pe 4 biți pe ambreiaje D în două timpi:

Curs de instruire

Contorul asincron este o conexiune de serie a flip-flop-urilor în doi timpi. Prin muchie activă a semnalului de ceas (clk) este inversat starea primului bistabilului în lanț (LSB), t. E. Modificările de ieșire de la 0 la 1 și vice-versa. Semnalul de ceas al fiecărui ulterioare flip-flop este preluat de la ieșirea celui anterior, prin urmare, fiecare ulterioare comutatoare flip-flop la 2 ori mai puțin anterioare (DD2 comutate la fiecare al doilea ciclu de ceas, DD3 - fiecare al patrulea ciclu, etc ...). Acest circuit este asincron și ieșirile de date vor fi actualizate alternativ, deoarece semnalul trece prin lanțul de declanșare.

Structura contorului sincron este oarecum mai complicată. În plus față de n flip-flops (registru n-bit), este nevoie de un adder de n-bit. Registrul stochează rezultatul contului, iar pentru fiecare ceas la valoarea stocată este necesar să se adauge unul (folosind agregatul) și să se memoreze noul rezultat în registru. Înainte de a lua în considerare punerea în aplicare a unui astfel de contor, este necesar să se înțeleagă cum funcționează adderul și cum să îl implementați.

Adderul, așa cum sugerează și numele, adaugă pur și simplu două numere binare. Adăugarea de numere binare apare în același mod ca zecimale. Aritmetice zecimal numerele disponibile 10 - de la 0 la 9. Dacă adăugați la unitatea 9, preaplinul de descărcare are loc (poziția) numărul și transfer de unitate are loc la descărcarea următoare, astfel încât dacă este adăugat la 29 1, apoi LSB preaplin, ar exista 0, iar unitatea este transferată la următoarea cifră și adăugată la valoarea sa (2 + 1 = 3), primim 30. Exact aceeași logică este valabilă și pentru numerele binare.

Mai intai, luati in considerare un adder cu un singur bit. Cum de a face din elementele logice? Un adder cu un singur bit are două intrări (pentru sume sumare) și două ieșiri - suma și transferul la următoarea cifră (preaplin). Să încercăm să determinăm ce funcție logică corespunde bitului sum și bitului de transport. Evident, transferul la bitul următor (bitul C-Carry) apare numai dacă ambele unități se află pe intrare, iar bitul sum este 0, deoarece debitul a fost depășit. Se pare că bitul sumă nu este altceva decât suma exclusivă OR a intrărilor adder (a se vedea tabelul exclusiv OR adevărat și a se vedea pe cont propriu). În acest caz, bitul de transport C este intrarea logică ȘI (la urma urmei, transferul are loc numai cu ambele unități la intrare).







Curs de instruire

Această schemă este denumită jumătate adder, deoarece nu ia în considerare bitul de transport de la bitul anterior, deși el însuși formează transferul la următoarea cifră. Pentru a ține cont de transferul de la cifra precedentă, este necesar să adăugăm la suma A și B și bitul de transport de la cifra precedentă, adică să adăugăm a doua jumătate de sumă:

Curs de instruire

Astfel, în cazul în care transferul a fost format cel puțin pe una dintre semimeri, atunci ar trebui să apară la ieșirea din totalul adderului. pentru aceasta aplicăm OR logic.

Curs de instruire

Un adder plin cu un singur bit are trei intrări (doi biți care trebuie combinați într-un bit dat și un bit de transport de la bitul anterior) și două ieșiri (un bit sum și un bit de transport la următorul bit).

Curs de instruire

Curs de instruire

Pentru a implementa adderul n-bit, aveți nevoie de un număr total de adderi. Intrările lor respective A și B sunt alimentate cu numerele de cifre corespunzătoare care urmează să fie adăugate, iar intrarea Cin a fiecărui bit este conectată la ieșirea Cout a cifrei precedente, iar jurnalul Cin al celui mai puțin semnificativ este dat un jurnal. 0. Mai jos este o diagramă a unui adder de 4 biți ([0] - ordine scăzută, [3] - bit de înaltă ordine):

Curs de instruire

Acum sunteți gata să implementați contorul sincron. Să complicăm puțin sarcina și să facem un contor care să țină cont atât în ​​direcția directă, cât și în direcția opusă. Introducem un bit suplimentar de direcție de numărare și dacă este 0, vom adăuga 1 la fiecare ceas, iar dacă este egal cu 1, scădeți câte unul din fiecare ciclu de ceas. Cu adăugarea totul este clar, dar cum să scăpați unitatea? Scăderea unei unități de la număr este aceeași cu adăugarea la numărul "minus unul". Numerele binare cu un semn sunt reprezentate în așa-numitul cod suplimentar. Pentru a obține o reprezentare binară a unui număr negativ, trebuie să inversați toate cifrele și să adăugați unul la acesta. De exemplu, numărul de 4 cifre „5“, în formă binară arată ca 0101 pentru a obține numărul „-5“ biți invertit - obține 1010 și adaugă unul - obține 1011. Acum, dacă vom adăuga aceste numere sunt 5 și -5, atunci obținem: 0101+ 1011 = 10000, overflow va avea loc, unitatea va merge la următoarea cifră, dar nu-l ia în considerare (acest bit este „aruncat“). Din moment ce ne-am rezumat numerele de 4 biți, de ieșire se va vedea doar 4 LSB, adică, 0000. Trebuie remarcat faptul că codul suplimentar MSB determină semnul .. (unitate - un semn al unui număr negativ). Astfel, în codul direct cu un număr pe 4 biți, puteți reprezenta numerele zecimale de la 0 la 15, iar în codul invers de la -8 la 7.

Deci, să începem să implementăm un contor sincron pe 4 biți. Contorul va avea 3 intrări: un semnal de ceas, numărătoare de direcții și un semnal de resetare (zero). Valoarea actuală a contorului va fi stocată în registru (4 push-pull D-flip-flop). Din ieșirea registrului, valoarea curentă a contorului ajunge la intrarea sumatorului (adică la intrarea B). Cealaltă intrare a numărătorului (A) primește valoarea "1" (0001) sau "-1" (1111) în funcție de direcția contorului. La ieșirea sumatorului, apare o nouă valoare, mărită sau scăzută cu una, care este alimentată la intrarea în registru. Pe marginea activă a semnalului de ceas, această valoare este stocată în registru, iar ieșirea contorului este actualizată.

Curs de instruire

Dacă DOWN = 0, atunci intrarea A sumatorului 0001 primește numărul (adaugă unul), altfel (DOWN = 1), la numărul de rotații 1111 (subtracts unul) de intrare a sumatorului. Rețineți că toate declanșatoarele sunt tactate de un singur semnal CLK. și toți biții contorului sunt actualizați simultan pe marginea activă a semnalului de ceas. Este important să se înțeleagă faptul că noile date înainte de următoarea muchie activă CLK (întârzierea Adder nu trebuie să depășească perioada semnalului de ceas) pentru funcționarea corectă a circuitului la ieșirea sumatorului trebuie să aibă timp să apară.

Schema de timp a semnalelor de contor (contorul este resetat la nivelul semnalului scăzut al RSTn, după cum se poate observa prin sufixul "n"):

Curs de instruire

Așa că am făcut cel mai simplu contor sincron. Apoi, vom încerca să o descriem în Verilog și să ne familiarizăm cu mediul de modelare pentru ModelSim.







Articole similare

Trimiteți-le prietenilor: