Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Erori
  • Crearea de circuite logice pe fpga altera. Plis - primii mei pași

Crearea de circuite logice pe fpga altera. Plis - primii mei pași

6. CIRCUITURI INTEGRATE LOGICE PROGRAMABILE (FPGA)

Circuit integrat logic programabil (FPGA, Programmable Logic Device, PLD) - componentă electronică,

folosit pentru a crea circuite integrate digitale. Spre deosebire de microcircuitele digitale convenționale, logica funcționării FPGA nu este determinată în timpul producției, ci este specificată prin programare (proiectare).

Istoria dezvoltării FPGA începe cu dispozitivele de memorie programabile doar pentru citire (PROM - Programmable Read Only Memory). La început, PROM-urile au fost folosite exclusiv pentru stocarea datelor, ulterior au început să fie folosite pentru a implementa funcții logice. Pentru implementarea sistemelor Funcții booleene Cu un numar mare variabile, au fost dezvoltate matrice logice programabile PLA (PLA - Programmable Logic Array) - cele mai multe tip tradițional FPGA având matrice programabile „ȘI” și „SAU”. Exemple de astfel de FPGA sunt circuitele domestice K556PT1, PT2, PT21.

Construcția PLA se bazează pe faptul că orice funcție combinațională poate fi reprezentată ca o sumă logică (operație SAU) a produselor logice (operații AND). Circuitul care implementează funcția combinațională este prezentat în Fig. 6.1.

Orez. 6.1. Diagrama construcției PLA

Dezavantajul acestei arhitecturi este utilizarea slabă a resurselor matricei programabile „OR”, prin urmare dezvoltare ulterioară microcircuite primite construite conform arhitecturii logicii matricei programabile (PAL - Programmable Array Logic) - acestea sunt FPGA-uri care au o matrice „ȘI” programabilă și o matrice „SAU” fixă ​​(Fig. 6.2). Cele mai multe FPGA-uri moderne cu un grad mic de integrare aparțin acestei clase. Exemplele includ circuite integrate interne KM1556ХП4, ХП6, ХП8, ХЛ8, evoluții timpurii (de la mijlocul până la sfârșitul anilor 1980) FPGA companii INTEL, ALTERA, AMD, LATTICE etc.

Orez. 6.2. Diagrama de construcție PAL

Îmbunătățirile în FPGA au condus la apariția macrologicii programabile. Acestea conțin o singură matrice programabilă „ȘI-NU” sau „SAU-NU”, dar datorită numeroaselor feedback-uri inverse sunt capabile să formeze complexe. funcții logice. Această clasă include, de exemplu, FPGA-urile PLHS501 și PLHS502 de la SIGNETICS, care au o matrice „ȘI-NU”, precum și circuitul XL78C800 de la EXEL, bazat pe o matrice „SAU-NU”.

Arhitecturile FPGA de mai sus conțin un număr mic de celule. Până în prezent, acestea au devenit învechite și sunt folosite pentru a implementa dispozitive relativ simple pentru care nu există circuite integrate gata făcute cu un grad mediu de integrare. Nu sunt potrivite pentru implementarea algoritmilor de procesare a semnalului digital.

Îmbunătățirile ulterioare ale tehnologiei de producție au făcut posibilă implementarea mai multor PAL-uri pe un singur cip, conectat prin conexiuni programabile. Astfel de arhitecturi sunt numite logică programabilă complexă (complexă).

LOGICA PROGRAMABILA

CIRCUITE INTEGRATE

dispozitive (CPLD - Dispozitiv logic programabil complex) - acesta este un FPGA,

Orez. 6.3. Diagrama de macrocelule CPLD

Microcircuite de acest tip pot fi utilizate pentru a crea ALU-uri, decodore, multiplexoare, etc. non-standard, i.e. astfel de dispozitive în care sunt necesare funcții logice ale multor variabile și un număr mic de flip-flops. FPGA-urile de tip CPLD au de obicei un grad ridicat de integrare (până la 10.000 de porți echivalente, până la 256 de macrocelule).

Această clasă include FPGA-uri din familia MAX de la ALTERA, familiile XC9500 și CoolRunner de la XILINX, precum și un număr mare de cipuri de la alți producători (Atmel, Vantis, Lucent etc.).

Un alt tip de arhitectură FPGA este matricele de porți programabile în câmp (FPGA - Field Programmable Gate Array Logic), constând din blocuri logice configurabile (CLB) și căi de comutare - matrici de conexiune programabile (Fig. 6.4). Blocurile logice configurabile ale unor astfel de FPGA constau din unul sau mai multe relativ simple elemente logice, care se bazează pe un tabel de căutare (LUT), multiplexoare programabile, un declanșator și circuite de control. Caracteristicile arhitecturilor FPGA sunt blocurile de intrare/ieșire (IOB - blocuri de intrare/ieșire),

permițând implementarea de intrare/ieșire bidirecțională, stare a treia etc.

Orez. 6.4. Structura FPGA

Pot exista destul de multe astfel de elemente simple, de exemplu, în FPGA-urile moderne cu o capacitate de 1 milion de porți sau mai mult, numărul de elemente logice ajunge la câteva zeci de mii. Datorită unui număr atât de mare de elemente logice, acestea conțin un număr semnificativ de bistabile, iar unele familii de FPGA-uri au module de memorie reconfigurabile încorporate. Acest lucru face ca FPGA-urile acestei arhitecturi să fie un mijloc foarte convenabil de implementare a algoritmilor de procesare a semnalului digital, ale căror principale operații sunt înmulțirea, multiplicarea cu o constantă, însumarea și întârzierea semnalului.

Clasa FPGA include FPGA-uri din familiile Spartan și Virtex

XILINX; Fusion, M1 și M7 Fusion și altele de la ACTEL, precum și Cyclone, familiile Stratix de la ALTERA, FPGA de la Atmel și Vantis.

6.1. Caracteristici ale programării FPGA

Datele de configurare pentru CPLD sunt stocate în memoria nevolatilă în cadrul FPGA, deci nu este nevoie să

DISPOZITIVE DIGITALE ȘI MICROPROCESARE. PARTEA 2

LOGICA PROGRAMABILA

CIRCUITE INTEGRATE

reprogramați când este pornit. Programul de configurare FPGA este stocat în memoria RAM volatilă distribuită a cipului, care este ștearsă atunci când alimentarea este oprită, astfel încât fișierul de configurare este stocat în memoria externă, iar când este pornită, fișierul de configurare este încărcat în memorie FPGA. Un ROM reprogramabil este de obicei folosit pentru a stoca fișierul de configurare.

(EPRM, EEPROM sau FLASH).

Atunci când se lucrează în astfel de sisteme, configurația circuitului care trebuie obținut „în interiorul” FPGA sau algoritmul pentru funcționarea acestuia este specificată fie într-un limbaj de descriere text: VDHL (Very high speed integrated circuitsH ardwareD descriptionLanguage - hardware description language for circuite integrate de mare viteză), Verilog, ADHL (limbaj de descriere A lteraH ardwareD), care amintește de un limbaj de programare de nivel înalt (de exemplu C); sau într-un editor grafic (sub forma unei scheme electrice); sau folosind diagrame de flux de algoritm sau grafice de stare. În plus, toate etapele de lucru, inclusiv programarea sau încărcarea FPGA, sunt efectuate de un sistem de proiectare automatizat. Astfel de sisteme sunt produse de toți producătorii de top FPGA

(www.actel.com) ACTEL, (www.altera.com) ALTERA, (www.xilinx.com) XILINX și alte companii.

7. DIGITAL-ANALOGȘI

7.1 Principii de construcție convertoare digital-analogic

Un convertor digital-analogic (DAC) este un dispozitiv pentru conversia codurilor numerice în valorile lor echivalente de tensiune sau curent. Circuitele DAC sunt construite folosind atât elemente digitale, cât și analogice (amplificatoare operaționale, comutatoare, matrici rezistive etc.). Majoritatea DAC-urilor realizate sub formă de circuite integrate sunt dispozitive de tip paralel. Munca lor se bazează pe însumarea curenților, ale căror mărimi sunt proporționale cu coeficienții de ponderare ai biților codului de intrare.

Circuitul unui DAC pe 4 biți este prezentat în Fig. 7.1.

Orez. 7.1. Principiul construirii unui circuit DAC

Include o matrice rezistivă, o tensiune de referință U R, un amplificator operațional și comutatoare S 0 - S 3.

Rezistențele rezistențelor matriceale sunt astfel încât curenții care circulă prin rezistențe corespund coeficienților de ponderare a cifrelor numărului

D = d 3 d 2 d 1 d 0 . Poziția contactelor comutatorului depinde de valorile lui d i . Dacă d i = 0, atunci curentul care circulă prin rezistența matricei sub acțiunea tensiunii de referință U R este scurtcircuitat la firul comun.

Când d i = 1, curentul rezistorului trece prin S i. curge către circuitul de însumare

curenți, executați pe un amplificator operațional cu feedback de tensiune în paralel. Nodul de însumare are practic zero

DISPOZITIVE DIGITALE ȘI MICROPROCESARE. PARTEA 2

DIGITAL-ANALOG ŞI

CONVERTOARE ANALOG-DIGITALE

potenţialul relativ la firul comun, prin urmare tensiune de ieșire se poate scrie astfel:

U 0= − R R 0 U R (2 3 d 3+ 2 2 d 2+ 2 1 d 1+ 2 0 d 0) .

Pentru a crește capacitatea de biți a DAC-ului, este necesar să adăugați numărul adecvat de rezistențe și comutatoare.

Fabricarea rezistențelor de înaltă precizie pentru matrice este plină de dificultăți, în special în cazul DAC-urilor multi-biți (valorile rezistoarelor sunt în intervalul gamă largă- de la R la

R 2 n − 1 , dar cerințele pentru precizia absolută a determinării

rezistențele sunt aceleași pentru toate rezistențele). Prin urmare, se utilizează adesea o matrice de rezistență de tip R − 2R (Fig. 7.2).

Orez. 7.2. DAC cu matrice tip R – 2R

Coeficienții de ponderare ai treptelor sunt stabiliți prin împărțirea secvențială a tensiunii de referință. Coeficientul de atenuare al fiecărei trepte de matrice este egal cu doi. Tensiunea de ieșire a DAC este:

U 0=− 16 R 0 R U R (2 3 d 3+ 2 2 d 2+ 2 1 d 1+ 2 0 d 0) .

Tranzistoarele MOS sunt adesea folosite ca comutatoare electronice în circuitele DAC (Fig. 7.3). Se folosesc și comutatoare de curent bazate pe tranzistoare bipolare.

Orez. 7.3. DAC pe 4 biți:

a – fragment dintr-un circuit cu comutatoare MOS, b – UGO

Exemple de IP:

K572PA1 - DAC pe 10 biți. CI conține o matrice de precizie R - 2R, comutatoare cu tranzistori MOS, amplificatoare de intrare, invertoare și un rezistor pentru circuitul de feedback al amplificatorului operațional. Pentru a converti curentul total în tensiune, trebuie conectat un amplificator operațional. De asemenea, este necesară o referință externă de tensiune.

DISPOZITIVE DIGITALE ȘI MICROPROCESARE. PARTEA 2

DIGITAL-ANALOG ŞI

CONVERTOARE ANALOG-DIGITALE

7.2. Principii de construcție convertoare analog-digitale

Un convertor analog-digital (ADC) este un dispozitiv pentru conversia tensiunii în codul numeric corespunzător. Operațiuni efectuate în timpul procesului conversie analog-digitală, sunt descrise în introducere. Mai jos luăm în considerare doar aspectele de circuite ale construirii unui ADC.

Conform metodei de conversie, ADC poate fi împărțit în paralel

Și consistent.

ÎN ADC-uri paralele, tensiunea de intrare este comparată simultan cu toate nivelurile de prag ale scalei de cuantizare (Fig. B.1.). Ca rezultat al comparației, se găsește cel mai apropiat nivel de cuantizare, al cărui număr este exprimat în cod binar folosind un encoder. O diagramă reprezentând ADC paralel pe 3 biți, prezentat în Fig. 7.4. O sursă de tensiune de referință și un set de rezistențe fac posibilă generarea de tensiuni egale cu nivelurile de prag.

Tensiunea de referință este (2n -1) = de 7 ori valoarea pasului de cuantizare U S . Dacă, de exemplu, tensiunea de intrare este în

interval de la (4+ 1 2 ) US la (5+ 1 2 ) US trebuie reprezentat

nivelul de cuantizare egal cu 5U S și, în consecință, cod binar 101. Codul de ieșire este generat după cum urmează. Pentru o valoare dată a lui U I, ieșirile a șase comparatoare sunt setate la

interval de eșantionare, semnalele de ieșire ale comparatoarelor sunt introduse într-un registru. Pentru a genera codul de număr al nivelului de cuantizare, se utilizează un codificator prioritar. Codul de ieșire al encoderului este determinat de intrarea activată cu cel mai mare număr (în numărul considerat

exemplu acesta este X 5).

Orez. 7.4. ADC paralel: a – circuit, b – UGO

Exemplul este:

K1107PV1 - ADC paralel pe 6 biți. IC-ul este fabricat folosind tehnologia bipolară. Frecvența maximă de eșantionare este de 20 MHz.

În ADC-urile seriale, tensiunea de intrare este echilibrată secvenţial de un set (suma) de standarde, ale căror valori sunt multipli ai pasului de cuantificare. Un tip de astfel de convertoare este ADC

DISPOZITIVE DIGITALE ȘI MICROPROCESARE. PARTEA 2

DIGITAL-ANALOG ŞI

CONVERTOARE ANALOG-DIGITALE

numărare secvenţială. Funcționarea acestuia se bazează pe numărarea numărului de însumări ale etapei de cuantizare necesare pentru obținerea valorii tensiunii de intrare. Circuitul ADC de numărare în serie este prezentat în Fig. 7.5. Este alcătuit dintr-un contor sus/jos de n-biți, un comparator și un n-biți convertor digital-analogic incluse în circuitul de feedback.

Orez. 7.5. ADC de numărare în serie

Folosind un comparator, se compară tensiunea de intrare U I și tensiunea de ieșire a DAC O. Dacă U I > U O, atunci ieșirea comparatorului este la nivel de unitate și contorul funcționează în modul de însumare a impulsurilor de ceas C. Din această cauză, tensiunea U O tinde spre U I . Când sunt comparate, codul de ieșire de n biți D va reprezenta tensiunea de intrare ADC. Daca eu< U O то счетчик работает в вычитающем режиме. Таким образом, напряжениеU O , а следовательно, и выходной код, отслеживают выходное напряжениеU I Для того, чтобы

Pentru a preveni oscilarea semnalului de inversare U/D după finalizarea procesului de urmărire, este posibilă completarea circuitului ADC cu un dispozitiv

blocarea contorului la U I − U O< U S 2 .

Schema circuitului ADC prezentată în Fig. 7.5, foarte simplu. Dar cu supratensiuni de intrare, procesul de urmărire poate dura până la 2n cicluri de ceas (perioade de impuls C). Accelerarea conversiei este realizată într-un ADC ponderat în biți. Diagrama sa este similară cu diagrama din fig. 7.5, doar contorul este înlocuit cu un registru cu dispozitiv de control. Funcționarea ADC-ului de cântărire pe biți are loc după cum urmează. În primul rând, toți biții de registru sunt setați la zero. Apoi 1 este introdus în bitul cel mai semnificativ al registrului. În același timp, la ieșirea DAC

se setează tensiunea U O = 2n − 1 U S, egală cu jumătate din totalul2 n − 2),

atunci d n − 2 = 1

Dacă nu,

d n − 2 = 0 .

După n

etape, procesul de echilibrare se termină și o combinație de coduri reprezentând tensiunea de intrare ADC este setată la ieșirea registrului. Pentru a se asigura că în timpul conversiei tensiunea

U I nu s-a schimbat; un circuit de eșantionare de stocare este instalat la intrările comparatorului.

Sunt cunoscute și alte ADC-uri seriale, de exemplu, ADC-uri care funcționează folosind metoda de integrare.

Exemple de IP:

K572PV1 - ADC pe 12 biți cu cântărire bit cu bit. IC-ul este fabricat folosind tehnologia CMOS. Folosit cu extern amplificatoare operaționaleși o sursă de tensiune de referință. Timpul de conversie tipic este de 110 µsec.

K1113PV1 - ADC de 10 biți pentru cântărire bit cu bit. IC este fabricat folosind tehnologia bipolară și conține toate componentele funcționale ale ADC, inclusiv o sursă de tensiune de referință și un generator de ceas. Etapele de ieșire sunt proiectate conform unui circuit cu trei stări. Timp de conversie - nu mai mult de 30 μsec.

Comparând ADC-urile paralele și seriale, se pot observa următoarele. ADC-urile paralele sunt circuite de mare viteză, dar implementarea lor necesită costuri hardware mari (un ADC pe 6 biți conține 64 de comparatoare). ADC-urile de numărare în serie au cel mai simplu circuit, dar funcționează relativ cu tensiuni de joasă frecvență. ADC-urile ponderate pe biți ocupă o poziție intermediară în ceea ce privește complexitatea și performanța. Combinația de circuite ADC paralele și seriale vă permite să construiți un număr mare de opțiuni de convertizor cu parametri diferiți și o varietate de funcționalități.

DISPOZITIVE DIGITALE ȘI MICROPROCESARE. PARTEA 2

LITERATURĂ

LITERATURĂ

1. Glassman K.F., Pokoptseva M.N. Dispozitive digitale și microprocesoare. Manual pentru studenții specialității 210312 „Tehnologia audiovizuală”. Partea 1. – Sankt Petersburg: SPbGUKiT, 2008.

2. Novikov Yu.V. Fundamentele circuitelor digitale. Elemente de baza si diagrame. Metode de proiectare. – M.: Mir, 2001.

3. Novikov Yu., Skorobogatov P. Fundamentele tehnologiei microprocesoarelor: un curs de prelegeri. – M.: INTUIT.RU, 2003.

4. Belov A. Manual de autoinstruire privind tehnologia microprocesoarelor. – M.: Știință și tehnologie, 2003.

5. Novozhilov O.P. Fundamentele tehnologiei digitale: manual. – M.: Radio Soft, 2004.

6. Ugryumov E. Circuite digitale de la elementul logic la LSI/VLSI avansat cu structuri programabile. – Sankt Petersburg: BHV – Petersburg, 2004.

7. Boyko V. Proiectarea circuitelor sistemelor electronice. Dispozitive digitale.

– Sankt Petersburg: BHV – Petersburg, 2004.

8. Boyko V. Proiectarea circuitelor sistemelor electronice. Microprocesoare și microcontrolere. – BHV – Sankt Petersburg, 2004.

9. Naryshkin A.K. Dispozitive digitale și microprocesoare. – M.: Editura. Centrul „Academia”, 2004.

10. Wilkinson B. Fundamentele proiectării circuitelor digitale. – Kiev: Williams, 2004.

11. Fricke K. Curs introductiv de electronică digitală. – M.: Tehnosfera, 2004.

12. Opadchiy Yu.A. Electronică analogică și digitală. Manual pentru universități. – M.: Linia fierbinte– Telecom, 2005.

13. Tocci R. Widmer N. Sisteme digitale. Teorie și practică. – Kiev: Williams, 2004.

14. Alekseeva L.A., Bul M.P., Glassman K.F., Pokoptseva M.N.. Ghid pentru efectuarea lucrărilor de laborator pentru studenții specialității 201400 „Tehnologie audiovizuală” la cursul „Dispozitive digitale și microprocesoare”. – Sankt Petersburg: SPbGUKiT, 2002.

Am fost obligat să scriu acest articol de tovarășii mei care înțeleg controlorii foarte bine (mult mai bine decât mine) și le folosesc oriunde merg. Cu toate acestea, există un număr mare de aplicații în care utilizarea FPGA-urilor nu este doar justificată, dar duce și la o simplificare semnificativă a sistemului și la îmbunătățirea parametrilor acestuia. Voi face imediat o rezervare: în acest articol și, eventual, în articolele ulterioare, consider FPGA-urile doar de la Xilinx, nu pentru că m-au plătit și nici măcar pentru că sunt cele mai bune, doar din punct de vedere istoric lucrez aproape exclusiv cu ei.

Deci, să începem cu o mică teorie. FPGA sunt împărțite în două grupe principale: CPLD (Complex Programmed Logic Device) și FPGA (Field Programmed Gate Array). CPLD- acesta este de obicei un FPGA din clasa „economie”, adică avea preț scăzutși o cantitate destul de slabă de resurse, acest lucru se observă în special pe declanșatoare. FPGA de obicei mai scumpe, conțin mai multe resurse (logică simplă - declanșatoare...) și, cel mai important, blocuri „complexe” de curând suplimentare, precum multiplicatori, memorie bloc, hardware de interfață (Ethernet, PCI-express...) și chiar PowerPC nuclee de procesor. Separat, putem aminti seria Zinq de la Xilinx - în general au umplut nuclee ARM acolo. Principala diferență dintre FPGA și CPLD este necesitatea de a încărca configurația atunci când este pornită alimentarea și, în consecință, un ROM extern cu configurația. Chiar și familia SPARTAN-3AN are un ROM încorporat la bord, de pe care pornește.

Acum, cel mai important lucru: cum diferă un FPGA de un controler și când să le folosești. Totul este destul de simplu aici: FPGA (le luăm pe cele fără clopoței și fluiere) este, de fapt, un sac de logică pe un singur cip, care poate fi conectat în mod arbitrar: aceleași declanșatoare, AND, OR și primitive similare, ca, de exemplu , în seria K155 sau 74NS. Un controler este un procesor gata făcut (deși cu un număr mic de comenzi), memorie încorporată, magistrale de date și comandă, periferice etc. În general, puteți face un controler mic dintr-un FPGA mare, dar această idee este macar, prost. Deci, controlerul este conceput pentru a executa lanțuri lungi de comenzi, lor repetarea ciclică, trecerea de la un lanț la altul etc., iar FPGA este proiectat să funcționeze simplu operatii logiceși, important, un număr mare deodată (și chiar la frecvențe diferite de ceas).

Să trecem de la teorie la practică. Pentru început, vom avea nevoie de un fel de cip CPLD. Sunt puține resurse, dar sunt suficiente pentru dezvoltare. Voi lua XC95288XL în carcasa TQ144 (din nou, tocmai s-a întâmplat să fie pe stoc), în general recomand să luați ceva mai fresh, de exemplu, din seria CoolRunner 2. A obtine produs gata(chiar dacă este un LED care clipește minim), trebuie să: lipim hardware-ul (aici, sper, nu vor fi probleme, dar voi menționa nuanțele), „scriem” firmware-ul (în cazul nostru, mai degrabă, desenați-l) și introduceți firmware-ul în microcircuit. În general, vom avea nevoie de software care generează firmware-ul și de un programator. Descărcăm software-ul (Xilinx ISE Webpack) de pe site-ul oficial (deși vă vor cere să vă înregistrați), licența Webpack este gratuită. Programatorul poate fi realizat conform diagramei din Fig. 1 (pentru un port LPT) sau puteți achiziționa unul USB din fabrică (l-am găsit în magazinele online chinezești la aproximativ 50 USD, dar nu l-am cumpărat eu). Mai mult.

Orez. 1

După ce am lipit FPGA-ul la panou, am lipit sau cumpărat un programator, am descărcat și instalat pachetul ISE Webpack (am versiunea 13.2), lansează Project Navigator și creează un nou proiect. Pentru a crea un proiect, selectați Fișier -> Proiect nou, specificați numele proiectului și unde să îl salvați și, de asemenea, specificați tipul sursei TOP-LEVEL (Fig. 2). Faptul este că pentru un FPGA nu este necesar să desenați o diagramă de flip-flop și conexiunile acestora, puteți, de exemplu, să scrieți în limbaje de nivel înalt (VHDL, Verilog) și nu este deloc necesar să; folosiți un singur lucru în cadrul aceluiași proiect. Pentru moment, folosim doar Schematic la toate nivelurile.


Orez. 2
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

În fereastra următoare (Fig. 3) ne selectăm microcircuitul (nu atingem restul la început); În fereastra care apare după ce facem clic pe butonul „Next”, admirăm parametrii proiectului creat, facem clic pe „Finish” - și gata: proiectul este creat.


Orez. 3

Acum trebuie să desenăm, de fapt, o diagramă: faceți clic dreapta pe fereastra cu proiectul și noua sursă (Fig. 4), dați un nume acestei surse (acesta este numele schemei noastre, pot fi multe dintre ele). în proiect), selectați din nou Schematic, faceți clic pe „Next””, admirăm din nou parametrii fișier creat, faceți clic pe „Terminare” și obțineți o diagramă curată.


Orez. 4
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Distracția începe: pe panoul din stânga (nu chiar la margine) faceți clic pe butonul „adăugați simbol” (Fig. 5).


Orez. 5
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Și obținem o listă de simboluri ale bibliotecii curente chiar mai la stânga. Ne vom da seama cum să adăugăm, să creăm și să edităm biblioteci mai târziu (după caz). Acum este important pentru noi să alegem simbolul necesar. Așadar, în fereastra de sus vedem un anumit clasificator - un filtru, care nu este necesar să îl folosim (ei bine, de ce să parcurgeți tot felul de declanșatoare și elemente logice atunci când avem nevoie de un contor).

De exemplu, luați în considerare următoarea sarcină: trebuie să determinați cât mai precis posibil timpul de întârziere dintre marginile de conducere a 2 impulsuri care apar pe fire diferite și să îmbinați această valoare în controler prin interfața SPI. Orice asemănare între sarcină și subiectul „Promovare frecventa de operare MK" pe unul dintre forumurile de robotică este intenționat. Deci, la intrarea dispozitivului sunt 2 fire pentru impulsuri și 3 fire pentru controlerul SPI. Adăugăm încă o intrare de ceas (nu știm încă la ce frecvență, putem presupune doar că este de cel puțin 70 MHz Să începem să desenăm firmware-ul: avem nevoie de declanșatoare blocate care vor „prinde” impulsuri, un contor de timp, un registru de deplasare (nu este nevoie să le creăm, sunt de bibliotecă). Nu voi descrie ce sunt declanșatorii și contoarele, sper că cititorii sunt „în cunoștință de cauză” și nu vor fi probleme, altfel va trebui să scrieți mai multe articole. Am primit o astfel de diagramă (Fig. 6). , după cum puteți vedea, nu este necesar să trageți un fir de la ieșirea simbolului la intrare, este suficient să etichetați pur și simplu circuitul Pentru a desemna intrările și ieșirile externe, folosim butonul ". Adăugați I/. O Marker”.


Orez. 6
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Când diagrama este gata, accesați fila Design și faceți dublu clic pe Implement Design - încep tot felul de procese (în primul rând, nu contează care dintre ele - principalul lucru este că totul împreună este procesul de distilare codul sursă în firmware). Când totul funcționează, ne uităm la erori cu avertismente: reparăm tot ce este important și lăsăm restul. De exemplu, nu avem nevoie de ieșirile CEO și TS ale contorului, iar restul de 15 biți ai ieșirii paralele a registrului de deplasare nu sunt, de asemenea, necesari, dar jură avertismente. Dacă înjură cu greșeli la ceea ce vrem, înseamnă că vrem ceva greșit. Dacă noi (și sintetizatorul) suntem mulțumiți de tot, continuăm să admirăm rapoartele: câte resurse au fost folosite, ce frecvențe de ceas sunt disponibile... Dacă totul este din nou bine, atunci este timpul să simulăm circuitul și să ne asigurăm că funcționează de fapt conform sarcinii. Vă sugerez să efectuați simularea după verificarea temporizărilor, deoarece uneori, pentru a obține frecvența de ceas necesară, trebuie să agitați întregul circuit, ceea ce, desigur, poate afecta rezultatul...

Deci, simulare: în fila Design (în panoul din stânga) selectați simulare (Fig. 7).


Orez. 7
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Mai jos, în procese, în locul proceselor de sinteză și cablare, a apărut procesul Simulare Behavioral Model, dublu clic pe el - este lansat simulatorul, în care ne vedem semnalele (nu doar intrare-ieșire, ci și intermediare) (Fig. 8).


Orez. 8
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Plasăm cursorul mouse-ului peste butoane și citim comentariile la butoane. Setăm ora etapei de simulare (Fig. 9) și valorile inițiale ale semnalelor de intrare și setăm imediat semnalele de ceas (nu vom simula și comuta ceasul la fiecare 5 ns).


Orez. 9
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Pasând în timp prin manipularea intrărilor și (dacă este necesar) a pasului de simulare, obținem o diagramă de timp (Fig. 10).


Orez. 10
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Ne asigurăm că totul funcționează conform intenției (sau depanăm circuitul în continuare) și trecem la pasul următor - distribuirea ieșirilor și intrărilor peste pinii microcircuitului. Pentru a face acest lucru, adăugați un alt fișier sursă (Fig. 11), și anume Implementation Constraints File.


Orez. unsprezece
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Notăm „pinout-ul microcircuitului” (Fig. 12) și aici notăm și cerințele pentru frecvențele de ceas. Și acum ajungem la nuanța asociată cu semnalele de ceas. Cert este că semnalele de ceas trebuie să ajungă pe așa-numitele linii globale - linii care trec prin întregul microcircuit, liniile rămase sunt de natură locală și trec prin logica de comutare de la bloc la bloc. Cipul XC95288XL din pachetul TQ144 are 3 astfel de linii și sunt conectate la picioarele 30, 32, 38. Semnalele rămase pot fi conectate la orice segment de intrare/ieșire (I/O).


Orez. 12
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Faceți dublu clic din nou pe Implement Design, așteptați, citiți comentariile pe tema avertismentelor cu erori și accesați rapoartele despre pinouts (Fig. 13) și timings (Fig. 14); Ne asigurăm că totul ni se potrivește și avem fericire sub forma fișierului %project_name%.jed.


Orez. 13
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)


Orez. 14
(poza pe care se poate face clic pentru mărire, se deschide într-o fereastră nouă)

Fișierul firmware este gata. Să spunem și dispozitivul. Conectam cablul JTAG la computer și facem dublu clic pe Configure Target Device. Utilitarul de firmware (Impact.exe) va porni de fapt, la fabricarea mai multor dispozitive pentru flash-ul unei serii, vă puteți limita la lansarea unui singur; Creăm un nou proiect (acesta este un proiect pentru programul firmware), îi permitem să găsească automat programatorul și cipul conectat, arătăm fișierul firmware și facem clic pe Program. Așteptăm câteva zeci de secunde, vedem o inscripție care spune că totul este în regulă - dispozitivul este gata.

INTRODUCERE

De obicei, când cineva vede o placă funcțională, își pune mereu aceleași întrebări: - Este un Arduino? - Cum funcționează fără Arduino?

Nu este un microcontroler, nu este nici măcar un procesor, este un FPGA. FPGA este un circuit integrat logic programabil, un astfel de microcircuit constă din multe blocuri sau macrocelule identice, fiecare producător le numește diferit, așa că pentru Xilinx este Slices (slices) for Altera - LogicElements (elemente logice). Aceste blocuri sunt relativ simple, pot acționa ca mai multe elemente logice, pot fi un mic tabel de căutare (LUT), conțin un adunator gata făcut, un multiplicator, un bloc de procesare a semnalului digital (DSP), în general, tot ceea ce producătorul are în vedere . Utilizatorul poate aranja și configura aceste blocuri după cum dorește, implementând astfel circuite digitale destul de complexe. Puteți implementa chiar și un microcontroler pe un FPGA, de exemplu implementând același Arduino sau un procesor de arhitectură proprie, de exemplu, nu un procesor de registru, ci un procesor de stivă, puteți chiar să vă implementați propriul FPGA pe un FPGA!

Printre FPGA-urile bugetare disponibile, pot fi identificați doi producători principali: Altera și Xilinx, cu produsele lor, vă puteți începe călătoria de a stăpâni aceste tehnologii. În opinia mea, este mai bine să alegeți cipurile Altera, deoarece mediul lor de design este actualizat constant, iar dacă alegeți un cip popular Xilinx XC3S500E, va trebui să vă mulțumiți cu mediul învechit ISE 14.7 (deși are și avantajele sale) .

În literatura străină puteți găsi abrevieri pentru FPGA: FPGA și CPLD. CPLD (Dispozitiv logic programabil complex) - cipuri cu un număr mic macrocelule, blocuri specializate și consum redus de energie. Un proiect mare nu poate fi sintetizat pentru acest tip de cip, dar ele sunt folosite și în practică, de exemplu, un microcontroler rar are, să zicem, 300 de picioare. Astfel de cipuri sunt adesea folosite ca sisteme de interfață, preprocesoare și expandoare I/O. FPGA (Field-Programmable Gate Array) este un field-programmable gate array (FPGA), cipuri mult mai puternice în comparație cu CPLD, dar consumă mai multă energie și costă mult mai mult. Pentru a reduce costul zonei matrițelor, cipurile FPGA pot conține funcții gata făcute, cum ar fi unități de procesare a semnalului digital (unități DSP), procesoare încorporate și memorie încorporată. FPGA-urile sunt utilizate pe scară largă pentru testarea și verificarea proiectelor, în așa-numita validare pre-siliciu, reducând astfel costurile și timpul înainte de lansarea produsului. Cipurile FPGA pot fi reconfigurate aproape în orice moment sunt în curs de dezvoltare, de exemplu la Intel, pentru a combina arhitecturile unui procesor convențional și a unui cip FPGA. Xilinx are deja astfel de soluții - Zynq, dar nu vom vorbi despre ele deocamdată.

Conversația va fi despre mai multe lucruri simple, mai ales că am pus mâna pe un kit de dezvoltare: Cyclone IV 4 FPGA Core Board și Altera USB Blaster Downloader PLD Development kit pentru 35 USD, achiziționat de pe AliExpress.

1 Placă demonstrativă Cyclone IV 4 Placă de bază FPGA, scurtă descriere

Orez. 1 - Plată demonstrativă Placă de bază Cyclone IV 4 FPGA

Placa (Fig. 1) are instalat un cip EP4CE6E22C8N, caracteristicile sale:

Tipul de resursă Scurta descriere Cantitate
Elemente logice (Les) Numărul de blocuri logice - celule, principala caracteristică prin care putem compara „puterea” cipurilor, orice logică sintetizată va folosi aceste blocuri 6,272
Memorie încorporată (Kbiți) Memoria încorporată nu este încă o caracteristică importantă pentru noi 270
Multiplicatori 18x18 încorporați Multiplicatori hardware încorporați, un parametru foarte important în procesarea semnalului digital, puterea maximă a FPGA-urilor este dezvăluită atunci când mai mulți multiplicatori funcționează în paralel 15
PLL-uri de uz general Nodurile bucle blocate în fază, care nu sunt încă o caracteristică importantă, simplifică sincronizarea dispozitivelor care funcționează pe frecvente diferite 2
Rețele globale de ceas Numărul de domenii de frecvență nu este încă o caracteristică importantă 10
Bănci I/O utilizator Numărul de bănci I/O separate ale utilizatorului nu este încă o caracteristică importantă 8
I/O utilizator maxim Număr de pini I/O personalizați, putem conecta orice dispozitive, cum ar fi Arduino 91

Tabla are:

  1. Memorie flash – Când este aplicată alimentarea, FPGA va fi configurat pentru a fi implementat în memoria flash. Vă puteți sintetiza proiectul și puteți scrie în acest flash
  2. Cuarțul de 25 MHz este un generator de frecvență de ceas de referință, tocmai la această frecvență vor funcționa toate proiectele noastre, FPGA-ul nostru poate suporta până la 10 astfel de canale.
  3. LED-uri – 10, butoane – 2.
  4. Pini I/O 61 + 2 masă, 1 neconectat. Puteți conecta o varietate de dispozitive. DAC-ADC, accelerometre și giroscoape, simbolice și afisajele grafice, la fel ca Arduino.
  5. Alimentare prin USB sau 5V extern.

Setul include și un programator JTAG, Altera USB Blaster.

2. Mediul Quartus II și primul nostru proiect

Pentru a lucra cu acest FPGA, trebuie să descarcăm mediul oficial de dezvoltare - Ediția web Quartus II, este gratis. Mergem pe site-ul oficial http://dl.altera.com/15.0/?edition=web, la momentul scrierii, versiunea 15.0 este cea mai nouă, dacă este mai nouă, descărcați-o.

Alege:


Orez. 2 - selectați produsele Altera necesare

Și faceți clic pe butonul de descărcare (Descărcați fișierele selectate). După care ni se va cere să ne înregistrăm, să ne înregistrăm, să descarcăm și să instalăm.

Să creăm primul nostru proiect.

Lansați Quartus, selectați meniul principal File -> New Project Wizard, apare fereastra de introducere, faceți clic pe următorul. Apoi trebuie să specificați directorul pentru proiect și numele acestuia, al treilea câmp este numele modulului de sus, veți vedea mai târziu despre ce este vorba. Selectăm folderul în care dorim să salvăm proiectul și venim cu un nume, am test1.


Orez. 3 - fereastra expertului nou proiect

Faceți clic pe următorul, suntem întrebați dacă este un proiect gol sau un șablon de proiect. Lasă gol, în continuare. Apoi ni se cere să adăugăm fișiere existente, nu avem nimic, deoarece tocmai ne începem călătoria, faceți clic pe următorul.

Apoi, trebuie să ne selectăm cipul; acest lucru se poate face în orice moment. Selectăm ca în figură, Family – Cyclone IV E, dispozitiv specific selectat în „Dispozitive disponibile” și selectăm cipul nostru EP4CE6E22C8N, este la început. Dacă ai altul, găsește-l pe al tău, este important. Faceți clic pe următorul.


Orez. 4 -

Va apărea o fereastră - selectând instrumente de proiectare, depanare, săriți peste aceasta pentru moment, faceți clic pe următorul și apoi finalizați.


Orez. 5 - Fereastra „Assinments-Deice”

În fereastră, selectați elementul „Ace neutilizate”. Această setare determină ce se întâmplă cu pinii neconectați. Acest lucru poate fi important în proiectul dvs. este puțin probabil să utilizați toți pinii, iar cei neconectați pot fi de fapt conectați la masă sau la putere (ei bine, nu știți niciodată cine a conectat placa). Dacă aplicați unul pe un pin împământat, acesta se va arde, așa că trebuie să monitorizați cu atenție acest lucru.

În mod implicit, pinii neutilizați „Ca intrare tri-stat cu tracțiune slabă” (pinii de intrare sunt în a treia stare cu impedanță mare, cu o putere slabă pull-up), puteți lăsa sau selecta „Ca intrare tri-stat ”. Puteți citi despre rezistența de tragere pe Wikipedia https://ru.wikipedia.org/wiki/Pull-up_resistor. ÎN tehnologie digitala pot exista trei stări, una logică este tensiunea de alimentare sau un nivel ridicat, un zero logic este atunci când pinul este conectat la masă sau nivel scăzutși stare de impedanță ridicată. Stare de impedanță ridicată- asta este atunci cand pinul are o rezistenta foarte mare si practic nu afecteaza firul la care este conectat aceasta stare este necesara, de exemplu, la organizarea autobuzelor, cand multe dispozitive sunt conectate la un fir si nu dispozitive active nu interfera cu munca.


Orez. 6 - Fereastra „Opțiuni dispozitiv și pin”, Pinuri neutilizate

Conectăm totul în „Editorul de sarcini”


Orez. 7 - Apelați „Editor de sarcini” din meniu sau panou

În fereastra care apare, fă-o așa cum am făcut eu sau, dacă este absolut corect, apoi conform diagramei plăcii tale.


Orez. 8 - Assinement Editor

În coloana „Către”, introduceți numele intrării sau ieșirii. În coloana „Numele sarcinii”, selectați „Locație”. În coloana „Valoare” se află numărul de pin al microcircuitului, conform diagramei plăcii (am numerele de pin scrise direct pe placă).

De asemenea, trebuie să specificați ce să faceți cu butoanele, care sunt conectate cu un picior la sol și celălalt la intrarea cipului. Când apăsați pe picior, va fi un nivel scăzut, dar fără apăsare, nu este clar, piciorul cipului va atârna în aer, ceea ce este foarte rău. Trebuie să conectați intrarea cipului la alimentare fie cu un rezistor pe placă, fie într-un mod mai elegant în „Editorul de sarcini”. În coloana „Nume atribuire”, selectați „Rezistor slab de tragere” pentru grupul de chei* (grupul este indicat printr-un asterisc).


Orez. 9 - Editor de sarcini

Apoi, trebuie să creați o descriere a modulului de nivel superior, care va funcționa direct cu picioarele cipului, toate celelalte module vor funcționa numai cu acesta. În meniul principal, faceți clic pe Nou și selectați „Fișiere de proiectare-> Diagramă bloc/Fișier schematic”.


Orez. 10 - Dialog fișiere noi

În fereastra care se deschide, selectați „Instrumentul Pin” și plasați intrarea și ieșirea (pinii de intrare și de ieșire) pe diagramă. Redenumim intrarea ca cheie, ieșirea ca led și le conectăm cu un conductor. Salvați și faceți clic pe „Start Compilation”.


Orez. 11 - Fereastra descriere grafică, Instrumentul Pin și Start Compilation sunt evidențiate

După compilare, am primit avertismente, le ignorăm deocamdată, se referă la pini neconectați, lipsa semnal de ceasși descrieri pentru „Analizator de sincronizare”.

Conectăm placa demo și programatorul, selectăm instrumentul „Programator”. Fereastra ar trebui să spună „USB-Blaster”, dacă nu, atunci faceți clic pe „Hardware Setup” și încercați să vă dați seama de ce nu, cel mai probabil driverele nu sunt instalate, uitați-vă la dispozitivele Windows, căutați dispozitive neidentificate, poate există o problemă cu cablul. Dacă totul este în regulă, faceți clic pe „Detectare automată” și selectați cipul nostru.


Orez. 12 - Fereastra programatorului

Clic dublu click mouse-ul în câmpul „Fișier” și selectați fișierul de scris în FPGA (situat în folderul output_files al proiectului nostru), bifați câmpul „Program / Configurare” și apăsați butonul „Start”.


Orez. 13 - Fereastra programatorului, cipul nostru este deja configurat

Felicitări pentru prima configurație FPGA! Dioda D1 ar trebui să se aprindă, atunci când apăsați tasta 1 ar trebui să se stingă (din moment ce butonul închide piciorul la sol), atunci vom face ceva în privința asta)

Circuit integrat logic programabil (FPGA, Engleză dispozitiv logic programabil, PLD) este o componentă electronică utilizată pentru a crea circuite integrate digitale. Spre deosebire de microcircuitele digitale convenționale, logica funcționării FPGA nu este determinată în timpul producției, ci este specificată prin programare (proiectare). Pentru programare, programatorii și mediile de depanare sunt folosite pentru a seta structura dorită a unui dispozitiv digital sub forma unei diagrame de circuit sau a unui program în limbaje speciale de descriere hardware Verilog, VHDL, AHDL etc. O alternativă la FPGA sunt: ​​matrice de bază cristale care necesită fabrică proces de producție pentru programare; ASIC - LSI-uri personalizate specializate (mari circuite integrate), care în producția la scară mică și unică sunt semnificativ mai scumpe; calculatoare specializate, procesoare (cum ar fi procesoare de semnal digital) sau microcontrolere care, din cauza metoda software Implementările algoritmilor sunt mai lente decât FPGA-urile. Unii producători de FPGA oferă procesoare moi pentru FPGA-urile lor, care pot fi modificate pentru a se potrivi sarcina specificași apoi încorporat în FPGA. Acest lucru asigură o reducere a spațiului pe placa de circuit imprimat și simplifică designul FPGA în sine.

Circuitele integrate logice programabile (FPGA) au apărut acum un deceniu și jumătate ca o alternativă la matricele de porți programabile (PLA). FPGA-urile diferă de cele mai recente atât în ​​arhitectură, cât și în tehnologia de producție.

PLM este o matrice de elemente logice cu mai multe intrări (mai multe zeci de intrări) cu flip-flops, în care componentele unităților de forme normale disjunctive ale funcțiilor acestor elemente sunt programate prin jumperi. La început, jumperii au fost fabricați sub formă de conductori subțiri fuzionați. Acum jumperii sunt realizati sub forma unui MOSFET cu poarta plutitoare, ca intr-un ROM reprogramabil electric, i.e. PLM-urile sunt fabricate folosind tehnologia memoriei flash. PLD-urile mari (CPLD) diferă doar prin aceea că mai multe PLD-uri sunt asamblate pe un singur cip și unite printr-un câmp programabil de conexiuni.

FPGA este o matrice de elemente logice cu intrare joasă (de la două până la cinci intrări), flip-flops, secțiuni de linii de comunicație conectate prin jumperi de la tranzistoare cu efect de câmp. Judecând după nume englezesc- Field Programmable Gate Array (FPGA) - FPGA-urile sunt programate prin modificarea nivelului câmpului electric (câmpului) în porțile acestor tranzistoare. Spre deosebire, de exemplu, de LPGA - Laser Programmable Gate Array. Porțile tuturor tranzistorilor cu efect de câmp „de programare” sunt conectate la ieșirile de declanșare ale unui registru cu deplasare lungă, care este umplut atunci când FPGA este programat. Unele dintre secțiunile acestui registru pot servi și ca celule ROM.

Firmware-ul este de obicei stocat în ROM lângă FPGA și după pornire sau un semnal de resetare, este scris automat în registrul de schimbare de programare FPGA. Acest proces se numește configurație FPGA. Deoarece baza FPGA sunt flip-flops care stochează firmware-ul, FPGA-urile sunt fabricate folosind tehnologia cipurilor RAM statice.

În comparație cu CPLD-urile, FPGA-urile beneficiază, în primul rând, de un număr nelimitat de reprogramari, în al doilea rând, de capacitatea logică, inclusiv capacitatea specifică a porților la sută și, în al treilea rând, de un consum redus de energie.

De regulă, FPGA-urile au o capacitate cu două până la trei ordine de mărime mai mare în numărul de porți logice echivalente decât CPLD-urile și, la fel ca RAM statică, nu consumă aproape deloc energie în absența comutării. În plus, FPGA-urile au o fiabilitate un ordin de mărime mai mare (rată de eșec mai mică) decât CPLD-urile.

Dezavantajele includ necesitatea unui firmware ROM extern și a unui generator de ceas. Dar un ROM cu 8 pini ocupă mult mai puțin spațiu pe placă decât FPGA în sine, cu multe sute de pini. Același lucru este valabil și pentru generatorul de sincronizare. programare electronică integrată

Utilizatorii au multe îndoieli cu privire la protejarea unui proiect împotriva copierii. Într-adevăr, firmware-ul FPGA este stocat într-un ROM extern, al cărui conținut este pur și simplu copiat. Dar schimbarea sau decriptarea firmware-ului, de exemplu, pentru a ascunde paternitatea sau a restabili circuitul, este aproape imposibilă, deoarece semantica biților din fișierul firmware este un secret al companiei, iar schimbarea neglijentă poate deteriora FPGA. Dacă este necesară protecție, programul este încărcat folosind un CPLD extern, mașina în care oferă protecție pentru proiect. Noile generații de FPGA asigură criptarea firmware-ului, de exemplu, folosind criptorul DES încorporat, asigurând că cheia este stocată folosind o baterie.

Circuitele integrate logice programabile (FPGA) sunt unul dintre cele mai promițătoare elemente ale circuitelor digitale. Un FPGA este un cip pe care se află un număr mare de elemente logice simple. Inițial, aceste elemente nu sunt conectate între ele. Elemente de legătură (transformarea elementelor disparate în schema electrica) se realizează folosind chei electronice situate în același cristal. Chei electronice a reușit memorie specială, în celulele cărora este introdus codul de configurare circuit digital. Astfel, după ce a scris în memoria FPGA anumite coduri, puteți asambla un dispozitiv digital de orice grad de complexitate (acest lucru depinde de numărul de elemente de pe cip și de parametrii FPGA). Spre deosebire de microprocesoare, FPGA-urile pot organiza algoritmi de procesare digitală la nivel hardware (circuit). În același timp, viteza de procesare digitală crește brusc. Avantajele tehnologiei de proiectare a dispozitivelor bazate pe FPGA sunt:

  • · timp minim de dezvoltare a circuitului (trebuie doar să introduceți codul de configurare în memoria FPGA);
  • · spre deosebire de elementele convenționale ale circuitelor digitale, nu este nevoie să se dezvolte și să producă complexe plăci de circuite imprimate;
  • · conversia rapidă a unei configurații de circuit digital în alta (înlocuirea codului de configurare a circuitului din memorie);
  • · producția tehnologică complexă nu este necesară pentru a crea dispozitive bazate pe FPGA. FPGA este configurat folosind un computer personal de pe biroul dezvoltatorului. De aceea, această tehnologie este uneori numită „fabrică pe masă”.

Aplicații tipice FPGA: prelucrare digitală semnale, electronice la comanda, sisteme de achizitie de date, sisteme de control, echipamente de telecomunicatii, echipamente de sisteme comunicații fără fir, echipamente informatice scop general.

Străduindu-se să obțină caracteristici tehnice ridicate și calități de consum ale produselor lor, dezvoltatorii dispozitive electronice utilizați CI specializate (SIS). Utilizarea lor oferă următoarele avantaje:

  • - reducerea dimensiunilor dispozitivului. Utilizarea FPGA face posibilă reducerea numărului de circuite integrate, reducerea dimensiunii plăcilor cu circuite imprimate și, prin urmare, reducerea dimensiunilor întregului dispozitiv;
  • - îmbunătățirea caracteristicilor tehnice. Reducerea numărului de circuite integrate duce la creșterea performanței sistemului și la reducerea consumului de energie;
  • - cresterea fiabilitatii. Deoarece probabilitatea unei erori sau defecțiuni a dispozitivului este direct proporțională cu numărul de circuite integrate, fiabilitatea dispozitivelor care utilizează FPIC crește semnificativ;
  • - asigurarea protecţiei dezvoltării. Deoarece este mult mai dificil (și uneori aproape imposibil) să copiați un dispozitiv care conține FPIC decât un dispozitiv care utilizează componente standard, utilizarea FPIC face posibilă asigurarea drepturilor de autor ale dezvoltatorului;
  • - creșterea flexibilității modificării. Deoarece modificarea SIS nu necesită, de regulă, procesarea altor componente, redirecționarea plăcilor de circuite imprimate etc., posibilitățile de depanare și modificare a dispozitivului sunt semnificativ crescute.

În majoritatea cazurilor, în literatură se disting următoarele clase de ASIC-uri:

  • - circuite integrate programabile de utilizator - FPGA (PLD).
  • - circuite integrate programabile cu mască - cristale matrice de bază (BMK) sau matrice de poartă (Gate Arrays).
  • - CI pe celule standard (Standard Cells).
  • - CI complet personalizate (Full Custom).

FPGA-urile și BMK-urile aparțin categoriei de circuite integrate semi-personalizate, deoarece topologia în circuit este parțial formată în timpul producției de circuite integrate în sine și parțial programată în conformitate cu cerințele consumatorilor.

Restul SPIS-urilor sunt la comandă, pentru că Întreaga topologie a circuitului, ținând cont de funcțiile necesare, este dezvoltată în timpul producției de cip.

Clasificarea FPGA-urilor este prezentată în figură, din care puteți vedea ce direcție și secțiune a FPGA-urilor ocupă FPGA:

Clasificarea SPIS

Așteptai un semn? Aici era!

Mulți ani am ezitat să încep să programez FPGA-uri pentru că era dificil, costisitor și dureros (cum mi s-a părut). Dar este bine să ai prieteni care te ajută să faci primul pas. Și acum nu înțeleg un lucru - DE CE AM AȘTEPTAT ATÂT?

Acum te voi ajuta și pe tine să faci primul pas!

De ce am nevoie de el?

Te-ai săturat să citești în mod constant documente de pe MK-ul tău sau să ții o grămadă de informații în cap. Ai rescris totul în asm, dar viteza încă nu este suficientă. Ai conectat două dispozitive externe la MK-ul tău, conectezi un al treilea, dar ai rămas fără întreruperi, acele module care deja funcționau nu mai funcționează. Mai iei un MK, unul mai puternic din aceeași linie, dar din nou manuale, registre de steag, biți... la naiba. Schimbați platforma: treceți la alt MK și vă aruncați cunoștințele despre platforma anterioară. Indiferent ce faci, este greu. Găsești o platformă populară în care poți asambla cu ușurință un proiect din componente, dar tot nu poți sări peste limitările hardware ale acestui MK... Undeva la marginea conștiinței tale apare uneori gândul că pe un FPGA asta cu siguranță ar funcționa rapid și în paralel, care este „exact problema care trebuie rezolvată, vă rog”, dar sunt prea bătrân/prost/ocupat/etc pentru a putea/începe să fac asta.

Vrei să respiri în sfârșit liber? Daţi-i drumul!

Bucuria de a dezvolta pe FPGA

Am avut o zi grea la serviciu. De la un loc de muncă am ajuns la un al doilea job, apoi la dacha, teme, teme seara, apoi un film de familie, și abia la 23:00 eram complet liber! A spune că am obosit înseamnă a nu spune nimic. Dar în această stare, m-am așezat la laptop cu un scop ferm: să fac un generator de unde pătrate de 440 Hz. Au trecut 20 de minute și deja îl auzeam în căști. Nu-mi venea să cred urechilor! Mi-a luat încă 15 minute să fac PWM și să schimb volumul. Până atunci, aveam doar placa FPGA de aproximativ o săptămână și înainte de asta citisem doar câteva cărți despre Verilog.

În seara aceea mi-am dat seama: IATĂ-L! Aceasta este platforma în care îmi pot transforma rapid și ușor gândurile în hardware care funcționează efectiv!

De ce este asta?

Voi descrie avantajele pe care le există în studiul și utilizarea FPGA-urilor, deși toată lumea le cunoaște deja:
  • Universalitatea cunoașterii- la schimbarea modelului MK, trebuie să citiți documentația. Când schimbați producătorul MK, trebuie să citiți documentația. Trebuie să citiți în mod constant documentele, să păstrați în mod constant o mulțime de informații în cap. Când dezvoltați pe un FPGA, dacă cunoașteți Verilog sau VHDL, atunci puteți nu numai să programați orice FPGA din linia unui producător, ci și, dacă doriți, să treceți la altul (Altera, Xilinx). Deși vor exista momente în care stăpâniți un mediu de dezvoltare diferit și probleme subtile de hardware, însăși esența abordării pentru proiectarea dispozitivelor în HDL nu se va schimba de la aceasta.
  • De la idee la hardware- la dezvoltarea unui proiect, dacă vă lipsește un microcontroler, trebuie să alegeți altul. În principiu, puteți face ipoteze dacă acest MK va face față sau nu proiectului. Sau există un anume MK și încerci să încadrezi un proiect în el. Cel mai adesea acesta este cazul. Îmi amintește puțin de abordarea bunicului meu, care face o scară din ceea ce are în șopron. Deși puteți proiecta o scară, cumpărați scânduri care să se potrivească... De la idee la feronerie, și nu invers.
  • Ușurința de utilizare a evoluțiilor altor persoane- poți lua modulul altcuiva și îl poți aplica în proiectul tău. Din cod puteți înțelege cum funcționează. Chiar dacă este pentru xilinx, și o faci sub altera. Uneori, acest lucru nu funcționează bine, dar este mai ușor decât, de exemplu, adăugarea de biblioteci binare la un proiect C++/Qt
  • Blocați independența. Blocurile din HDL sunt ca funcții pure în limbaj. Ele depind doar de semnalele de intrare. Modulul dezvoltat și depanat va continua să funcționeze corect, indiferent de cum crește proiectul. Nimic din exterior nu va afecta funcționarea corectă a acestuia din interior. Și, în general, puteți uita cum funcționează - este o cutie neagră. În plus, blocurile funcționează paralel.

Problema alegerii

Există o mulțime de întrebări despre ce să alegeți: Altera/Xilinx, Verilog/VHDL, ce placă de depanare să luați. Dar mai întâi lucrurile.

Producător

Am ales Altera. De ce? Ei bine, așa am decis eu și prietenul meu, deși numele Xilinx este mai frumos pentru mine. DAR. Dacă nu poți alege acum, atunci o voi face pentru tine. Ai nevoie de Altera! De ce? Nu știu. Cel mai important lucru acum este să faci un pas: să faci o alegere. Am ales Altera și nu am regrete până acum.



Limba

Să o luăm Verilog - deoarece… Ei bine, înțelegi.

Placa de dezvoltare

Alegerea plăcii de dezvoltare a durat cel mai mult timp. Este clar că plăcile diferă în ceea ce privește cipul FPGA instalat. Și cipurile FPGA diferă unele de altele prin numărul de elemente. Dar nu este deloc clar de câte dintre ele vor fi necesare pentru proiectele tale de testare. Prin urmare, mi-am petrecut cea mai mare parte a timpului căutând tot felul de proiecte FPGA pentru a afla cât de mult consumă resurse FPGA.

În familia Altera, pentru bani rezonabili putem cumpăra plăci cu CPLD MAX II cu 240, 570 și 1270 de elemente, sau cipuri FPGA mai vechi precum Cyclone 1, 2, 3, 4 cu până la 10.000 sau mai multe celule. Cum să alegi?

Chiar și pe baza a 240 de celule, proiectul Mars Rover face doar un număr mare de proiecte. Vă recomand cu tărie să îl citiți pentru a vă face o idee aproximativă despre complexitatea proiectelor care se pot încadra în 240 de celule. Pe de altă parte, există proiecte care sunt complet programate pentru o copie hardware a unui anumit PC, inclusiv procesorul și toată logica din jurul acestuia (NES, Speccy, Orion, YuT-88 etc.). Acest lucru necesită deja cinci, zece sau mai multe mii de celule. În plus, aceste plăci conțin dispozitive externe suplimentare.

Prin urmare, aș sfătui să luați ceva între 240 și 10.000 de celule, cu preferință pentru cele mai mari în funcție de fondurile disponibile. Pe o placă de depanare, celulele suplimentare nu sunt o mare problemă, dar dacă nu sunt suficiente, nu poți face nimic. Apoi, când dispozitivul este depanat, va deveni clar de câte celule sunt necesare, cumpărați cantitatea necesară, fără „kit de corp” inutil, mai ieftin și lăsați-l în dispozitivul finit.

Ceea ce diferențiază cu adevărat MAX de Cicloni, pe lângă numărul de celule, este:
1) Seria MAX nu are un PLL în interior. Fiecare placă de dezvoltare are un oscilator, de obicei 50 MHz. Acest lucru va fi suficient pentru majoritatea proiectelor. Toată sincronizarea va avea loc prin împărțirea a 50 MHz la o anumită valoare. Sau puteți lua un generator extern și îl puteți alimenta la o intrare FPGA separată. Ce se întâmplă dacă aveți nevoie de o frecvență mai mare de 50 MHz? Nu am putut găsi imediat oscilatoare de peste 50 MHz. Dar aici este locul în care PLL, care este încorporat în Cyclones, vine în ajutor. Pe el puteți înmulți frecvența, de exemplu, până la 100 MHz.
2) Seria Cyclone are unități de multiplicare hardware încorporate. Numărul lor depinde de modelul specific - aici puteți încă „vă uitați la instrucțiuni” pentru a afla cât. Dacă intenționați să faceți un fel de DSP, atunci acestea vor fi utile: vor salva celulele și vor crește viteza. Pe de altă parte, dacă nu există multiplicatori, aceștia pot fi sintetizați, dar un FPGA mic poate să nu aibă suficiente resurse pentru asta.

În toate celelalte privințe, am un criteriu „potrivit/nu se potrivește”. Depanare pe o placă care este evident mai mare decât este necesar, urmată de completarea acesteia cu minimul necesar pentru aceasta.

Câți bani sunt necesari?


Programator
Cred că nu am timp să lipim programatorii în vrac.

300 de ruble. L-am luat pe al meu pe eBay, arata cam asa:

Placa de dezvoltare
Alegerea este largă, în funcție de suma de bani.

Primul nivel 350 - 550 de ruble. Acestea sunt plăci bazate pe MAX II (sau celule). Poate fi potrivit pentru familiarizarea inițială și integrarea ulterioară în dispozitivele finale. Placa are un generator, câteva butoane, câteva LED-uri și restul de 80 de pini la discreția dvs.

unitate de putere
Este un must have, dar nu este întotdeauna inclus. Veți avea nevoie de o sursă de alimentare de 5 volți și un curent de 2A.

Nivel mediu de la 900 la 1500 de ruble. Acestea sunt Cyclone 1, 2, 3, 4 plăci, care diferă în principal prin numărul de celule.
Sunt marcate cam așa:
E.P. 2 C 5 T144 - Ciclonul 2 aproximativ 5k celule
E.P. 4 C.E. 6 E22C8N - Ciclonul 4 aproximativ 6k celule
E.P. 2 C 8 Q208C8N - Ciclonul 2 aproximativ 8k celule

Este posibil să observați că Ciclonul 3 poate avea mai multe celule decât Ciclonul 4.

Iată câteva opțiuni:

835 de ruble.
ALTERA FPGA CycloneII EP2C5T144 Placă de sistem minimă pentru a învăța bine

880 de ruble
Altera CycloneII EP2C5T144 FPGA Mini Development Learn Core Board E081

1265 de ruble
EP2C8 EP2C8Q208C8N ALTERA Cyclone II FPGA Evaluare Dezvoltare Placă de bază

Placi avansate . Acestea sunt plăci pe care sunt instalate module suplimentare (UTP, USB, AUDIO), conectori (SD, VGA), butoane, comutatoare, LED-uri, indicatoare cu șapte segmente etc. Oricare poate merge placa de baza, iar cardurile de expansiune pot fi atașate separat.

Am următorul set de lucru - placă + placă de expansiune:
Altrea EP4CE10E22 FPGA CORE Board+ Device Board USB/Sound/Ethernet/SD Card/VGA
2760 de ruble

Aici este placa principală. Are 2 LED-uri, 2 butoane, 4 comutatoare, un indicator cu șapte segmente și un cip RAM.

Placa de expansiune. Conține SD, VGA, precum și controlere USB (High Speed ​​​​USB2.0 Chip: CY7C68013A), AUDIO (Placă de sunet de până la 96kHz/32bit ADC/DAC: WM8731S), UTP (interfață Ethernet 100M: DM9000A):

Aceste plăci sunt pur și simplu introduse una în alta, dar încă le am într-un sertar. Pentru meșteșugurile mele, am o placă de breadboard, la care mă conectez cu un cablu care vine cu trusa. De asemenea, în inclus sursa de alimentare de 5 volti.

Cele mai bune articole pe această temă