Quartus II

Rezultatele muncii funcțiilor logice, datele de intrare sau finale trebuie stocate undeva - în general, sunt necesare registre.

Dacă tragem o analogie a lucrării chipului nostru cu bucătăria, atunci, de exemplu, curățați cartofii, turnați apă într-o oală etc. - functii logice. Iar tigaia, farfuriile, lingurile etc sunt mijloacele de stocare a rezultatelor intermediare sau finale ale acestor functii.

După cum sa menționat deja în articolul anterior, pentru implementarea logicii registrului în fiecare „LE” (element logic) există un D-flip-flop. Are o ieșire și trei intrări - intrare de date ( date ), ceas ( clk ) și activare scriere ( activare ).

Funcționează după cum urmează. Dacă este prezent un semnal de activare a scrierii, atunci la marginea ceasului, datele de intrare apar la ieșire și vor rămâne apoi neschimbate până la următorul margine a ceasului (adică, stocat).

În absența permisiunii de scriere, datele de ieșire nu se vor modifica. Acesta, de fapt, este un registru de 1 bit.

Pentru implementarea în proiectarea circuitelor în mediul Altera Quartus II, puteți utiliza primitivul „DFFE” sau cazul său special (când scrierea este întotdeauna permisă) „DFF”:

La fel ca în toate cazurile anterioare, pentru a nu trage fiecare declanșator separat, puteți folosi mega-funcții.

Megafuncție LPM_DFF - registru paralel:

este
Aici "data[] " sunt intrările tuturor declanșatorilor, " q[] " sunt ieșirile acestora, iar semnalele de activare a ceasului și a scrierii sunt comune pentru toate declanșatoarele.

Megafuncție LPM_SHIFTREG - registru de schimbare (serial):

sunt

Spre deosebire de registrul paralel, aici „shiftin” este intrarea pentru cel mai tânăr flip-flop, iar ieșirea acelui flip-flop este intrarea pentru următorul și așa mai departe. Semnale de permisiune de ceas și scriere, precum și în registrul paralel, pttoate declanșatoarele sunt comune.

Ei bine, în continuare, câteva recomandări (de data aceasta - insistente):

  • Nu utilizați ieșirea logicii combinatorii ca un ceas. Oricât de simplă este funcția implementată de această logică, execuția ei necesită ceva timp, timp în care ieșirea va fi într-o stare nedefinită și poate apărea un declanșare fals. Un ceas poate fi luat de la pinul de intrare (dacă un generator de ceas este conectat la el din exterior), de la un generator de ceas intern sau de la ieșirea unui alt declanșator.
  • Nu folosiți semnale asincrone în proiecte (pe primitive sunt intrări cu cercuri deasupra și dedesubt, iar pe megafuncții semnalele „aclr” și „aset”), cu o singură excepție, pe care vreau să o detaliez. Cipul nostru ( da, probabil toate celelalte FPGA-uri), pe lângă logica programabilă în sine, conțin o serie de funcții utilitare. Una dintre ele este „Power-On Reset”. Toate acestea sunt descrise în detaliu în documentație, dar aici vreau să notez că una dintre acțiunile pe care le efectuează această funcție este setarea tuturor declanșatoarelor logice programabile la o stare inițială (la „0”). Prin urmare, vreau să subliniez că proiectul dumneavoastră va începe, după ce porniți alimentarea, va fi întotdeauna cu o stare inițială „zero” a tuturor registrelor. Pentru începerea corectă a proiectului dumneavoastră, acest lucru trebuie luat în considerare. Există cazuri când un proiect (sau un fragment din acesta) este dezvoltat pentru utilizare ulterioară, de exemplu, în ASIC sau nu se știe deloc unde, iar FPGA este folosit doar pentru depanarea lui. În acest caz, trebuie să aveți grijă de starea inițială a registrelor din proiectul în sine. Acest lucru este de obicei implementat prin combinarea resetărilor asincrone ale tuturor declanșatorilor proiectului într-un singur semnal comun, un fel de „GLOBAL_RESET”.

În următorul articol - Partea 4.Elemente de logică combinată. Tejghea.