Proiectarea, realizarea și programarea unei arhitecturi de microcontrolerutilizând un modul de dezvoltare cu FPGA [307620]
[anonimizat]: INGINERIE MECANICĂ ȘI ELECTRICĂ
DEPARTAMENTUL: AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ
PROGRAMUL DE STUDII: CALCULATOARE
FORMA DE ÎNVĂȚĂMÂNT: IF
PROIECT DE DIPLOMĂ
TEMA: Proiectarea, realizarea și programarea unei arhitecturi de microcontrolerutilizând un modul de dezvoltare cu FPGA
PLOIEȘTI
2019
Calificativele pot fi: nesatisfăcător/satisfăcător/bine /foarte bine /excelent.
Comentarii privind calitatea proiectului: ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Cuprins
Capitolul 1: Introducere
Capitolul 2 : Circuite logice programabile la utilizator
2.1 Circuite digitale configurabile software
2.2 FPGA (Field Programmable Gate Array)(il am)
2.3. Structura hardware a unui FPGA
2.4. Tipuri de dispozitive FPGA
2.5. Limbaje folosite pentru configurarea
2.6 Module de dezvoltare cu FPGA
Capitolul 3 : Dezvoltarea sistemului FPGA de control
3.1. Specificarea caracteristicilor plăcuței FPGA utilizate
3.2. Avantajele unui FPGA ca microcontroler
3.3. FPGA utilizat ca microcontroler
3.4Configurarea FPGA pentru a funcționa ca microcontroler (aici cred ca se refera la descarcarea programului python etc)
3.5.Cerinte de proiectare (nu stiu)
3.6.Realizarea algoritmului de implemenat microcontrolerului
3.7.Realizarea fizica a dispozitivului demonstrativ
3.8. Programarea microcontrolerului realizat cu FPGA pentru controlul traficului rutier prin semaforizare
3.9. Descrierea funcționării sistemului de control al traficului
Capitolul 4.Concluzii
Bibliografie
Anexa 1: Codul Verilog al sistemului implementat
REFERINTE –
Capitolul 1 : Introducere
Lucrarea de față își propune prezentarea si exemplificarea functionarii unuia dintre cele mai prezente circuite logice programabile la utilizator de pe piata si anume circuitul logic integrat FPGA. Circuite logice programabile sunt circuite care conțin într-o [anonimizat] o gamă extrem de variată de CLC. Ideea de bază a [anonimizat]. Ele sunt denumite PLD (Programmable Logic Device) atunci când sunt programate la fabricație prin mască și FPGA (Field Programmable Gate Arrays), în cazul când pot fi programate la locul de utilizare[link]. [anonimizat], HDL [link].
[anonimizat], [anonimizat]: [anonimizat].
[anonimizat], folosite în sistemele electronice atunci când producția de mască a unui IC personalizat devine prohibitiv costisitoare datorită cantității mici. Multe modele de sistem care au fost construite în VLSI cu siliciu personalizat sunt acum implementate în Array-uri de porți programabile. Acest lucru se datorează costului ridicat de construire a unei producții de măști dintr-un VLSI personalizat, în special pentru cantități mici.
Pentru a exemplifica fiabilitatea, eficienta si usurinta in utilizare a unui FPGA, in lucrarea de fata este prezentata o aplicatie utilizata pentru controlul traficului rutier prin semaforizare, unde placuta este configurata si programata sa indeplineasca rolul unui microcontroler. Traficul la treceri / intersecții rutiere este controlat prin aprinderea ON / OFF a luminilor roșie, verde și galbenă într-o anumită secvență. Controlerul de trafic este conceput pentru a genera o secvență de date digitale numite secvențe de comutare care pot fi utilizate pentru a controla semafoarele unei joncțiuni tipice de patru străzi într-o secvență fixă. De asemenea, se propune punerea în aplicare a modurilor de funcționare în regim de zi și de noapte. Acesta joacă un rol din ce în ce mai important în gestionarea și controlul modern al traficului urban pentru a reduce accidentele și blocajele rutiere pe șosea. Este o mașină secvențială care trebuie analizată și programată printr-un proces în mai multe etape. Dispozitivul care implică o analiză a mașinilor secvențiale existente în controlerele de semafoare, sincronizarea și sincronizarea și introducerea operațiunii și secvența de sinteză a luminii intermitente. Metodele utilizate în acest proiect sunt proiectarea circuitului, scrierea unei codări, simulare, sinteză și implementare în hardware.
Capitolul 2 :Circuite logice programabile la utilizator
2.1. Circuite digitale configurabile software
Controlerele care își modifică circuitele hardware în timp ce funcționează deschid o nouă eră în proiectarea calculatoarelor. Deoarece pot filtra datele rapid, ele excelează la recunoașterea modelului, prelucrarea imaginilor și criptarea
Proiectanții de controlere se confruntă cu o luptă constantă pentru a găsi echilibrul corect între viteză și generalitate. Ei pot construi controlere versatile care efectuează relativ încet multe funcții diferite sau pot elabora controlerespecifice aplicațiilor care fac doar un set limitat de sarcini, dar le fac mult mai repede. Microprocesoarele (cum ar fi Intel Pentium sau Motorola PowerPC care se găsesc frecvent în computerele personale) au un scop general: instrucțiunile de programare codificate în format binar pot conduce un microprocesor prin orice operație logică sau matematică pe care un programator o poate concepe. Intel Pentium, de exemplu, nu a fost creat niciodată în mod specific pentru a executa Microsoft Word sau jocul DOOM pentru computer, dar poate rula ambele.
În schimb, circuitele hardware personalizate, adesea cunoscute ca circuite integrate specifice aplicației (ASIC), oferă exact funcționalitatea necesară pentru o anumită sarcină. Prin acordarea cu atenție a fiecărui ASIC unui anumit loc de muncă, proiectantul de calculator poate produce un controlermai mic, mai ieftin, mai rapid, care consumă mai puțină energie decât un procesor programabil. Un cip graficpersonalizat pentru un PC, de exemplu, poate desena linii sau vopsea imagini pe ecran de 10 sau 100 de ori cât de repede poate fi o unitate de procesare centrală de uz general.
În timp ce designerii fac alegerea între versatilitate și viteză, trebuie să se confrunte, de asemenea, cu problema costurilor. Un ASIC bine conceput va rezolva problema specifică pentru care a fost proiectată, dar probabil nu o problemă ușor modificată introdusă după terminarea designului ASIC. În plus, chiar dacă o ASIC modificată poate fi dezvoltată pentru noua problemă, circuitele hardware originale pot fi prea personalizate pentru a fi reutilizate în generații succesive. Ca rezultat, efortul tehnic necesar pentru proiectarea și construirea unui ASIC trebuie amortizat pe un număr relativ mic de unități.
O nouă dezvoltare a circuitelor integrate oferă oa treia opțiune: magistrale de porți mari, rapide, programabile pe câmp sau FPGA – circuite hardware foarte bine reglate care pot fi modificate aproape în orice moment în timpul utilizării. FPGA-urile constau din rețele de blocuri logice configurabile care implementează funcțiile logice ale porților. Porțile logice sunt ca niște comutatoare cu intrări multiple și o singură ieșire. Ele sunt folosite în circuite digitale pentru a efectua operații binare de bază, cum ar fi AND, NAND, OR, NOR și XOR. În majoritatea componentelor hardware folosite astăzi în calcul, funcțiile logice ale porților sunt fixe și nu pot fi modificate. Cu toate acestea, în FPGA, atât funcțiile logice efectuate în blocurile logice cât și conexiunile dintre blocuri pot fi modificate prin trimiterea de semnale către cip. Aceste blocuri sunt structurale similare cu arhitecturile de poartă utilizate în unele ASIC-uri, dar întrucât matricele de poartă standard sunt configurate în timpul fabricației, blocurile logice configurabile din FPGA pot fi reluate și reprogramate repetat, mult după ce circuitul integrat a părăsit fabrica.
Cheia care a deschis ușa pentru configurarea computerizată este proiectarea unor noi FPGA care pot fi configurate extrem de rapid. Cele mai vechi agende programabileau necesitat câteva secunde sau mai mult pentru a schimba conexiunile lor – perfect potrivite pentru inginerii care doreau să testeze modelele de circuite alternative sau pentru companiile care vând dispozitive care ar putea necesita o îmbunătățire ocazională. FPGA mai noi pot fi configurate într-o milisecundă și așteptăm să vedem dispozitive cu timpi de configurare de până la 100 microsecunde în termen de doi ani. În cele din urmă, dispozitivele de calcul pot fi capabile să-și adapteze hardware-ul aproape în mod continuu ca răspuns la modificările datelor de intrare sau ale mediului de procesare.
Există multe variații ale designului FPGA, dar structura de bază constă dintr-un număr mare de blocuri logice configurabile și o rețea programabilă de conexiuni care pot lega aceste blocuri în orice model ales de designer.Un singur element dintr-un FPGA cu granulație grosieră ar putea fi capabil de a adăuga sau de a compara două numere. într-un dispozitiv cu granulație fină ar putea fi capabil doar de a compara două cifre binare – de fapt, ar fi o singură poartă logică. Un designer ar putea alege să înceapă cu un cip gros sau fin, în funcție de aplicația la îndemână și cantitatea de timp disponibilă pentru construirea subsistemelor complexe de la zero.
Componentele de calcul pot folosi elemente configurabile în mai multe moduri diferite. Tehnica cea mai puțin exigentă este să comutați între funcții pe comandă – echivalentul hardware al renunțării la un program și apoi al unui alt program. Reconfigurarea lentă, de ordinul mai multor secunde, poate fi acceptabilă într-o astfel de aplicație.
2.2. FPGA (Field Programmable Gate Array)
O arhitectură FPGA este un circuit integrat conceput pentru a fi configurat de client sau proiectant după fabricare. Configurația FPGA este specificată în general folosind un limbaj de descriere a hardware-ului (HDL), similar cu cel folosit pentru un circuit integrat specific aplicației (ASIC) (diagramele de circuite au fost utilizate anterior pentru a specifica configurația, așa cum erau pentru ASIC-uri, rar).
FPGA-urile pot fi folosite pentru a implementa orice funcție logică pe care ar putea-o efectua un ASIC. Abilitatea de a actualiza funcționalitatea după expediere, reconfigurarea parțială a unei părți a proiectului și costurile de inginerie reduse în raport cu un design ASIC (în ciuda costului unitar în general mai mare), oferă avantaje pentru multe aplicații.
FPGA conțin componente logice programabile numite "blocuri logice" și o ierarhie de interconectări reconfigurabile care permit blocurilor să fie "cablate împreună" – ceva asemănător cu multe porți logice (schimbabile) care pot fi inter-cablate în (multe) configurații diferite. Blocurile logice pot fi configurate pentru a realiza funcții combinaționale complexe sau simple porți logice precum AND și XOR. În majoritatea FPGA-urilor, blocurile logice includ și elemente de memorie, care pot fi simple flip-flops sau mai multe blocuri complete de memorie.
În plus față de funcțiile digitale, unele FPGA au caracteristici analogice. Caracteristica analogică cea mai obișnuită este viteza programabilă și capacitatea de antrenare pe fiecare pin de ieșire, permițând inginerului să stabilească rate lente pe pinii încărcați ușor care altfel ar suna inacceptabil și să stabilească rate mai puternice și mai rapide pe pinii încărcați puternic pe canalele de mare viteză care altfel ar fi prea lent. O altă caracteristică analogică relativ comună este compararea diferențială a pinilor de intrare proiectați pentru a fi conectați la canalele de semnalizare diferențiale.
Câteva "semnale FPGA cu semnale mixte" au integrate convertoare analogice periferice (ADC) și convertoare digitale la analogice (DAC) cu blocuri analogice de condiționare a semnalului care le permit să funcționeze ca un sistem pe un cip. Astfel de dispozitive distrug linia dintre un FPGA, care transportă cele digitale și zerouri pe țesătura internă programabilă de interconectare și matricea analogică programabilă pe câmp (FPAA), care transportă valori analogice pe țesătura interconectabilă internă programabilă.
Arhitectura FPGA este reprezentată de o serie de celule logice care comunică cu i / o prin canalele de rutare a firelor. Într-un FPGA, resursele de fire existente care rulează în coloane orizontale și verticale (canale de rutare) sunt conectate prin intermediul elementelor programabile. Aceste fire de rutare conectează de asemenea logica la i / 0s. Celulele logice au mai puțină funcționalitate decât termenii de produs combinați și celulele macro de CPLD, dar funcții mari pot fi create folosind celule logice în cascadă.
Cele mai importante caracteristici ale unui FPGA sunt:
1. Performanța – capacitatea de proiectare reală a sistemului să funcționeze la frecvențe din ce în ce mai mari.
2. Densitatea și capacitatea – capacitatea de a crește integrarea, de a plasa din ce în ce mai mult într-un cip și de a folosi toate porțile disponibile în FPGA, acestea oferă o soluție eficientă din punct de vedere al costurilor.
3. Ușurința în utilizare – capacitatea proiectanților de sisteme de a-și aduce rapid produsele pe piață, valorificând disponibilitatea unor instrumente software ușor de utilizat pentru sinteza logică, precum și maparea traseelor, în plus față de arhitecturile care permit proiectarea târzie care efectuează logica, rutarea și resursele i / o fără un efect negativ semnificativ asupra sincronizării.
4. Programabilitatea în sistem și reprogramarea în circuit a capacității de a programa sau reprograma un dispozitiv în timp ce este în sistem, precum și permițând actualizarea câmpurilor și configurabilitatea utilizatorului.
Pentru a defini comportamentul FPGA, utilizatorul oferă un limbaj de descriere hardware (HDL) sau un design schematic. Forma HDL este mai potrivită pentru a lucra cu structuri mari, deoarece este posibil să fie specificate doar numeric, în loc să fie nevoie să fie desenată fiecare piesă manual. Cu toate acestea, intrarea schematică poate permite vizualizarea mai ușoară a unui design.
Apoi, utilizând un instrument de automatizare a designului electronic, este generată o listă de canale intrare / ieșire. Această listă poate fi apoi montată pe arhitectura actuală FPGA folosind un proces de localizare și traseu, de obicei realizat de software-ul de locație și rutare dedicat echipamentului FPGA. Utilizatorul va valida rezultatele hărții, locului și traseului prin analize de timp, simulare și alte metodologii de verificare. Odată ce procesul de proiectare și validare este finalizat, fișierul binar generat (folosind, de asemenea, software-ul propriu al companiei FPGA) este utilizat pentru a (re) configura FPGA. Acest fișier este transferat pe FPGA / CPLD printr-o interfață serială (JTAG) sau pe un dispozitiv de memorie extern ca un EEPROM.
Cele mai comune HDL-uri sunt VHDL și Verilog, deși în încercarea de a reduce complexitatea proiectării în HDL-uri, care au fost comparate cu echivalentul limbajelor de asamblare, există mișcări de ridicare a nivelului de abstractizare prin introducerea unor limbaje alternative. Limbajul de programare LabVIEWare un modul de completare FPGA disponibil pentru a viza și programa hardware FPGA.
Pentru a simplifica proiectarea sistemelor complexe în FPGA, există biblioteci de funcții complexe predefinite și circuite care au fost testate și optimizate pentru a accelera procesul de proiectare. Aceste circuite predefinite sunt numite în mod obișnuit miezuri de tip "ip" și sunt disponibile de la furnizori FPGA și de la furnizori de IP(rareori gratuite și de obicei eliberate sub licențe de proprietate). Alte circuite predefinite sunt disponibile de la comunități de dezvoltatori, cum ar fi OpenCores (de obicei lansate sub licențe gratuite și open source cum ar fi GPL, BSD sau licență similară) și alte surse.
Într-un flux tipic de proiectare, un dezvoltator de aplicații FPGA va simula proiectarea în mai multe etape pe tot parcursul procesului de proiectare. Inițial, descrierea RTL în VHDL sau Verilog este simulată prin crearea de bancuri de test pentru simularea sistemului și observarea rezultatelor. Apoi, după ce motorul de sinteză a cartografiat designul, lista generată este tradusă la o descriere a nivelului de porți logice unde simularea se repetă pentru a confirma că sinteza a continuat fără erori.
2.3. Structura hardware a unui FPGA
FPGA este abrevierea FieldArray Gateway Programmable. Aceasta înseamnă un circuit integrat care este programat în câmp, adică de către producătorul sistemului. FPGA pot fi caracterizate de următoarele elemente:
Costuri ridicate de producție
Densitate redusă de proiectare
Țesătura programabilă adaugă cheltuieli semnificativ
Nu sunt costuri NRE și Re-Spin
Efort scăzut de dezvoltare
Timp scăzut mort
Sincronizare simplificată
Nu există vectori de testare
Verificare relaxată
Designul fizic este "hands-off"
FPGA este un circuit integrat format dintr-o serie de elemente neangajate; interconectarea dintre aceste elemente este programabilă de către utilizator. Folosind memorie cu acces randomizat, este furnizată o logică cu densitate mare. FPGA este avantajos în comparație cu microcontrolerul în ceea ce privește numărul de porturi IO (input & output) și performanță. FPGA, o soluție ieftină în comparație cu designul ASIC; este eficient în ceea ce privește costul în cazul producerii unui număr mare de unități, dar pentru fabricarea în număr mic de unități este întotdeauna costisitor și consumatoare de timp. Procesul de proiectare al FPGA este folosit pentru a implementa controlerul de trafic folosind FPGA. Descrierea circuitului poate fi realizată utilizând HDL, urmată de simularea și sinteza funcțională. Procesul de proiectare este urmat până la simularea de sincronizare și apoi fișierul generat este descărcat în dispozitivul țintă (FPGA). Verilog este folosit ca HDL pentru descrierea circuitului pentru a codifica modulul TLC. Verilog HDL este folosit datorită dificultății de scriere a unui cod VHDL care trebuie să integreze codul sursă, controlerul integrat ChipScope Pro (ICON) și intrarea virtuală (VIO).
2.4. Tipuri de dispozitiveFPGA
FPGA bazate pe SRAM
FPGA bazat pe SRAM stochează datele de configurare ale celulelor logice în memoria statică (organizată ca o serie de clapete). Memoria RAM statică (SRAM) utilizează drept celule elementare de un bit circuite basculante de tip bistabil și se caracterizează prin persistența informației înscrise, în sensul că nu este necesară o reîmprospătare periodică a acesteia[9]. In figura 1 este prezentata structura unui modul de memorie SRAM statica.
figura 1 Structura unui modul RAM static: [9]
DIA – decodificator intern de adrese; BC – bloc de control; MM – matrice de memorie; CT – circuit tampon; MA – magistrală de adrese; MD – magistrală de date; R/W-semanal de citire/ scriere, CS-semnal de selecție
Deoarece SRAM este volatilă și nu poate păstra date fără sursă de alimentare, astfel de FPGA trebuie programate (configurate) la pornire. Există două moduri de bază de programare:
Modul Master, când FPGA citește date de configurare de la o sursă externă, cum ar fi un cip de memorie Flash extern.
Modul Slave, când FPGA este configurat de un dispozitiv extern principal, cum ar fi un procesor. Acest lucru se poate face, de obicei, printr-o interfață de configurare dedicată sau printr-o interfață de scanare frontală (JTAG).
SRAM bazate pe FPGA includ cele mai multe serii de familii XilinxVirtex și Spartan și Altera Stratix și Cyclone.
FPGA bazate pe SRAM cu o memorie flash internă
Acest tip de FPGA este, în general, similar celui precedent, cu excepția faptului că aceste cipuri conțin blocuri interne de memorie flash, eliminând astfel nevoia de a avea o memorie externă nevolatilă.
Un exemplu de astfel de FPGA-uri este familia Xilinx Spartan-3AN. Fiecare model de Spartan-3AN are un modul de memorie flash in-chip cu o interfață SPI capabilă să stocheze două sau mai multe fluxuri de configurație. Bitstream-ul poate fi ales în timpul pornirii.
Un alt exemplu de astfel de tehnologie este familia LatticeXP de către LatticeSemiconductors, utilizat în cadrul acestui proiect.
Folosirea memoriei interne volatile poate fi de asemenea utilă pentru a împiedica copierea neautorizată a biților și implicit a datelor din memoria FPGA.
FPGA bazate pe memorii Flash
FPGA-urile bazate pe memorii flash nu ar trebui să fie confundate cu tipul anterior. FPGA-urile bazate pe SRAM cu memorie flash internă utilizează flash numai în timpul pornirii pentru a încărca datele în celulele de configurare SRAM. Dimpotrivă, adevăratul FPGA bazat pe flash utilizează flash-ul ca o resursă primară pentru stocarea configurației și nu necesită SRAM (o tehnologie similară este folosită în CPLD – dispozitive logice complexe programabile, dar arhitectura FPGA este foarte diferită de cea a CPLD ). Această tehnologie are avantajul de a fi mai puțin consumatoare de energie. FPGA-urile bazate pe memorii flash sunt, de asemenea, mai tolerante la efectele radiațiilor.
Modelele FPGA bazate pe flash, cum ar fi Igloo și ProASIC3, sunt fabricate de Actel.
Ca și în cazul precedent, utilizarea FPGA bazate pe flash poate fi o soluție pentru a împiedica copierea neautorizată a biților și implicit a datelor din memoria FPGA
FPGA bazate pe fuzionare
FPGA bazate pe fuzionare diferă de cele anterioare, deoarece pot fi programate o singură dată.
Antifuza este un dispozitiv care nu conduce curentul inițial, dar poate fi "ars" pentru a conduce curentul(comportamentul antifuză este astfel opus celui al siguranței, de aici și numele). FPGA bazat pe antifuză nu poate fi apoi reprogramat deoarece nu există nicio modalitate de a readuce o antifuză arsă în starea inițială.
Familiile de dispozitive bazate pe antifuzăinclud Axcelerator produs de Actel.
2.5. Limbaje folosite pentru FPGA
VHDL
Complexitatea tot mai mare a circuitelor a condus la inventarea unor limbaje pentru a descrie circuitele digitale, particularitatea lor fiind capacitatea de a abstractiza paralelismul intalnit in circuitele fizice => Limbajul de descriere hardware <=>Hardware Description Language (HDL)[7]
VHDL (VHSIC Hardware DescriptionLanguage) este un limbaj de descriere a hardware-ului utilizat în automatizarea electronică a designului pentru a descrie sistemele de semnale digitale și mixte, cum ar fi rețele de porți programabile și circuite integrate. VHDL poate fi utilizat și ca limbaj de programare paralelă cu scop general.
VHDL este frecvent utilizat pentru a scrie modele text care descriu un circuit logic. Un astfel de model este procesat de un program de sinteză, numai dacă face parte din designul logic. Un program de simulare este folosit pentru a testa proiectarea logică folosind modele de simulare pentru a reprezenta circuitele logice care interfață cu designul. Această colecție de modele de simulare este frecvent numită banc de teste.
Un simulator VHDL este în mod obișnuit un simulator bazat pe evenimente. Asta înseamnă că fiecare tranzacție este adăugată la o coadă de evenimente pentru o anumită oră programată. De exemplu. dacă o alocare de semnal ar trebui să aibă loc după 1 nanosecundă, evenimentul este adăugat la coadă pentru timpul + 1ns. Este permisă și o întârziere zero, dar trebuie încă programată: pentru aceste cazuri se utilizează întârzierea Delta, care reprezintă un pas de timp infinit de mic. Simularea modifică între două moduri: executarea instrucțiunilor, unde se evaluează instrucțiunile declanșate și procesarea evenimentelor, unde sunt procesate evenimentele din coadă.
VHDL are capabilități de lucru cu fișiere și poate fi folosit ca limbaj general pentru prelucrarea textului, dar fișierele sunt mai frecvent utilizate de un mediu de simulare pentru date de stimulare sau de verificare. Există niște compilatoare VHDL care construiesc binare executabile. În acest caz, este posibil să se utilizeze VHDL pentru a scrie un mediu de test pentru a verifica funcționalitatea designului utilizând fișierele de pe computerul gazdă pentru a defini stimulii, a interacționa cu utilizatorul și pentru a compara rezultatele cu cele așteptate.
VHDL nu este ideal pentru simularea sistemelor abstracte, înainte de split-ul hardware-software. Simularea la acest nivel este, de obicei, stochastică și se referă la modelarea performanței, transferului, așteptărilor și distribuțiilor statistice. VHDL a fost folosit în acest domeniu cu un anumit succes, dar este cel mai potrivit pentru simularea funcțională și nu stochastică.
VHDL este potrivit pentru utilizarea în procesul de proiectare hardware digitală, de la specificații prin simulare funcțională la nivel înalt, design manual și sinteză logică până la simulare la nivel de poartă. Instrumentele VHDL oferă de obicei un mediu de design integrat în acest domeniu.
VHDL nu este potrivit pentru instrumente specializate de verificare a designului la nivel de implementare, cum ar fi simularea analogică, simularea nivelului de comutare și simularea celui mai rău caz de sincronizare. VHDL poate fi folosit pentru a simula efectele de încărcare la nivelul porților logice, oferind stiluri de codare și instrumentele de calcul pentru întârzieri hardware.
Avantajele utilizării VHDL
Este adesea raportat că un număr mare de modele ASIC îndeplinesc specificațiile lor independent, dar nu funcționează atunci când sunt conectate într-un sistem. VHDL permite ca această problemă să fie abordată în două moduri: o specificație VHDL poate fi executată pentru a obține un nivel înalt de încredere în corectitudinea acesteia înainte de a începe proiectarea și poate simula una sau două ordine de mărime mai repede decât o descriere la nivel de porți logice. O specificație VHDL pentru o parte poate forma baza pentru un model de simulare pentru a verifica funcționarea părții în contextul mai larg al sistemului (de exemplu, simularea plăcii cu circuite imprimate).
Simularea comportamentală poate reduce timpul de proiectare, permițând detectarea anticipată a problemelor de proiectare, evitând necesitatea de a redimensiona modelele la nivel de porți logice. Simularea comportamentală permite, de asemenea, optimizarea designului prin explorarea unor arhitecturi alternative, ceea ce are ca rezultat un design mai bun.
Avantaje:
Specificație executabilă
Validarea specificațiilor în contextul sistemului (Subcontract)
Funcționalitatea separată de implementare
Simulare rapidă
Sinteza și generarea de teste automate (ATPG pentru ASIC-uri)
Creșterea productivității (Reducerea timpului de vânzare)
Tehnologia și independența instrumentului (deși funcțiile FPGA pot fi neexploatate)
Date de proiectare portabile (protecția investiției)
Verilog
Verilog, standardizat ca IEEE 1364, este un limbaj de descriere a hardware-ului (HDL) folosit pentru modelarea sistemelor electronice. Acesta este cel mai frecvent utilizat în proiectarea și verificarea circuitelor digitale la nivelul transferului de registre al abstractizării. Se utilizează, de asemenea, în verificarea circuitelor analogice și a circuitelor semnale mixte, precum și în proiectarea circuitelor genetice.
Limbajele de descriere a hardware-ului, cum ar fi Verilog, sunt similare cu limbajele de programare software deoarece includ modalități de descriere a timpului de propagare și a intensității semnalului (sensibilitate). Există două tipuri de operatori de atribuire; o atribuire de blocantă (=) și o atribuire non-blocantă (<=). Atribuirea non-blocant permite proiectanților să descrie o actualizare a unei mașini de stări fără a fi nevoie să declare și să utilizeze variabile temporare de stocare. Deoarece aceste concepte fac parte din semantica limbajului Verilog, designerii ar putea scrie rapid descrieri ale circuitelor mari într-o formă relativ compactă și concisă. La momentul introducerii Verilog (1984), Verilog a reprezentat o îmbunătățire extraordinară a productivității pentru designerii de circuite care folosiseră deja software-ul gramatic de captare schematică și programe software special scrise pentru documentarea și simularea circuitelor electronice.
Un design Verilog constă dintr-o ierarhie de module. Modulele încapsulează ierarhia de proiectare și comunică cu alte module printr-un set de porturi declarate de intrare, ieșire și bidirecțional. Pe plan intern, un modul poate conține orice combinație dintre următoarele: declarații variabile (wire, reg, integer etc.), blocuri de instrucțiuni concurente și secvențiale și instanțe ale altor module (sub-ierarhii). Instrucțiunile secvențiale sunt plasate într-un bloc de început / sfârșit și executate în ordine succesivă în cadrul blocului. Cu toate acestea, blocurile în sine sunt executate concomitent, făcând Verilog un flux de date.
Conceptul Verilog de "wire" constă în definirea ambelor valori ale semnalului (1, 0) și a puterii semnalului (puternic, slab, etc.). Acest sistem permite modelarea abstractă a liniilor de semnal partajate, unde mai multe surse conduc o rețea comună. Atunci când un cablu are mai multe drivere, valoarea firului (lizibilă) este rezolvată printr-o funcție a driverelor sursă și a forțelor lor.
Un subset de declarații în limbajulVerilog sunt sintetizabile. Modulele Verilog care sunt conforme cu un stil de codare sintetizabil, cunoscut sub numele de RTL (nivel de transfer de registru), pot fi realizate fizic prin software-ul de sinteză. Software-ul de sinteză transformă algoritmul sursa (abstractă) într-o listă de porți, o descriere echivalentă logic, constând doar în primitive logice elementare (AND, OR, NOT, flip-flops etc.) disponibile într-o anumită tehnologie FPGA sau VLSI. Mai multe manipulări de către lista de porți conduc în cele din urmă la o schemă de fabricare a circuitelor (cum ar fi o mască foto setată pentru un ASIC sau un fișier bitstream pentru un FPGA).
Verilog nu este ideal pentru simularea sistemelor abstracte, înainte de divizarea hardware-software. Aceasta este într-o anumită măsură abordată de SystemVerilog. Spre deosebire de VHDL, care are suport pentru tipurile definite de utilizator și operatorii supraîncărcați, care permit designerului să-și rezolve problemele, Verilog restricționează proiectantul să lucreze cu funcții predefinite ale sistemului și sarcini pentru simulare stochastică și poate fi utilizat pentru modelarea performanței, a transferului și a așteptărilor, dar numai în măsura în care aceste caracteristici integrate permit. Designerii ocazional folosesc nivelul stochastic de abstractizare pentru această fază a procesului de proiectare.
Verilog este potrivit pentru utilizarea astăzi în procesul de proiectare a hardware-ului digital, de la simularea funcțională, proiectarea manuală și sinteza logică până la simularea la nivel de poartă logică. Instrumentele Verilog oferă un mediu de proiectare integrat în acest domeniu.
Verilog este, de asemenea, potrivit pentru instrumente specializate de verificare a designului la nivel de implementare, cum ar fi simularea defecțiunilor, simularea nivelului de comutare și simularea celui mai rău caz de sincronizare. Verilog poate fi folosit pentru a simula efectele de încărcare a fanout-ului la nivelul poarta și întârzierile de rutare prin importul de fișiere SDF.
Nivelul de abstractizare RTL este folosit pentru simularea funcțională înainte de sinteză. Nivelul poarta de abstractizare exista post-sinteza, dar acest nivel de abstractizare nu este adesea creat de proiectant, este un nivel de abstractizare adoptat de instrumentele EDA (de exemplu, analiza sintezei si sincronizarii).
Datorită flexibilității Verilog ca limbaj de programare, acesta a fost extins pentru a face față simulării analogice în cazuri limitate. Există un proiect de standard – Verilog-AMS – care abordează simularea analogică și semnalul mixt.
Sinteza este un termen larg utilizat adesea pentru a descrie instrumente foarte diferite. Sinteza poate include compilatoare și generatoare de funcții folosite de furnizorii ASIC pentru a produce structuri regulate de tip RAM și ROM. Sinteza în contextul acestui tutorial se referă la generarea structurilor logice aleatorii din descrierile Verilog. Acest lucru este cel mai potrivit pentru matrice de porți și dispozitive programabile, cum ar fi FPGA-uri.
Nu este suficient ca codulVerilog să fie corect din punct de vedere funcțional; trebuie să fie scris în așa fel încât să direcționeze instrumentul de sinteză pentru a genera un hardware bun și, în plus, Verilog trebuie să se potrivească cu instrumentul de sinteză utilizat.
Există în prezent trei tipuri de sinteză:
Sinteză comportamentală
Sinteză la nivel înalt
Sinteză RTL
Există unele suprapuneri între aceste trei domenii de sinteză. Esența codului RTL este că operațiile descrise în Verilog sunt legate de anumite cicluri de ceas.
2.6. Module de dezvoltare cu FPGA
RTG4
Placa RTG4 Microsemi este echipată cu noul Radiation Tolerant Pro ASIC 4 FPGA, dezvoltat pentru aplicații spațiale extinse, dotat cu o țesătură logică foarte performantă, interfețe SERDES și circuite specializate SpaceWire de recuperare a ceasurilor.
Placa însăși dispune de toate interfețele necesare pentru a permite hardware-ul în testarea bucla, cum ar fi interfețele PCIe, GigaBit Ethernet și, desigur, interfețele FMC care vă permit să vă conectați la circuitele reprezentative ale designului dvs. hardware final.
Aplicațiile pentru această placă includ dezvoltarea procesoarelor de comunicații prin satelit, controlorilor de memorie de masă și controlorilor de sarcină utilă.
MicroZed Board
Această placă de dezvoltare a introdus sistemul pe conceptul de modul în lumea FPGA. Acesta combină un procesor Xilinx Zynq împreună cu DDR, flash, card SD și gestionare a alimentării, pentru a furniza un modul de dimensiuni care să poată fi integrat în orice aplicație sau banc de test. MicroZed este un modul pe care îl puteți dezvolta și apoi îl puteți folosi în sistemul dumneavoastră pentru a rula producția.
În timp ce această placă nu vine cu multe interfețe, majoritatea IO-urilor sale sunt dezvăluite, permițându-i să fie interfațată fie cu o cartelă specifică de transport, cum ar fi cartea de vizibilă încorporată sau cardul de transport IO sau propria dvs. personalizată.
Acesta vine, de asemenea, complet cu un sistem pe chip (SoC) dispozitiv care combină Dual ARM A9 nuclee cu FPGA tesatura care oferă adevărat capacitatea de sistem încorporat.
Aplicațiile pentru această placă includ viziune încorporată, control industrial, securitate, SDR.
ARTY Board
Această placă este destinată cu siguranță scopului inferior al dezvoltării FPGA, dar este încă foarte capabilă. Acesta vine complet cu un număr de interfețe Pmod (module periferice), care oferă o interfață comună standard pentru un număr de periferice, cum ar fi ADC / DAC, poduri H, OLED-o gamă destul de impresionantă de Pmods.
Placa ARTY vine complet cu o interfață Arduino Shield care ne permite să dezvoltăm FPGA astfel încât să putem conduce scuturile sau să ne dezvoltăm propria, dacă este cazul.
Această placă este dotată atât cu flash-ul QSPI, cât și cu DDR3L, împreună cu o licență de design Vivado Design Suite. Memoria ne permite să creăm aplicații MicroBlaze softcore încorporate. Costul scăzut al acestei plăci, împreună cu capacitatea sa, înseamnă că pentru acele proiecte FPGA simple, nu aveți nevoie să dezvoltați o placă personalizată, poate doar soluția de interfață.
Aplicațiile pentru acest forum includ viziune încorporată, aplicații de control, SDR, aplicații comerciale.
Capitolul 3 :Dezvoltarea sistemului FPGA de control
3.1. Specificarea caracteristicilor plăcuței FPGA utilizate
TinyFPGA BX este un mic modul FPGA cu toate componentele și circuitele necesare pentru funcționarea FPGA. Pentru a dezvolta pentru acestă placă se crează un design în limbajul preferat (Verilog / VHDL, Migen, și Chisel sunt câteva opțiuni populare). Alternativ, se poate utiliza un instrument de introducere schematică, cum ar fi IceStudio. Un instrument de introducere schematică permite desenarea grafică a unui circuit digital care să fie implementat pe FPGA.
Odată ce există un design, acesta se poate programa pe modulul TinyFPGA BX prin USB.
Figura 3: Plăcuța TinyFPGABX
Specificații
Interfață de programare: USB 2.0 full-speed (12 mbit / sec)
ICE40LP8K FPGA
128 KBit bloc RAM
Faza blocată
41 de pini IO de utilizator
8 MBit de SPI Flash
Regulatoare LDO de 3,3 V (300 mA) și 1,2 V (150 mA)
Oscilator MEMS de 16 MHz cu putere redusă
Putere de 1,3 mA când este activă
50 ppm stabilitate.
Caracteristici
Bootloader open souce
TinyFPGA BX implementează propriul bootloader USB open source! La pornire, bootloader-ul USB este încărcat de pe canalul SPI și devine activ. Apare pe computerul gazdă ca dispozitiv virtual de port serial. Software-ul de programare detectează automat placa și folosește interfața serială pentru a programa designul pe placă. Odată ce designul este încărcat pe SPI, placa se resetează și încarcă designul fără să mai încarce bootloaderul. Pentru a actualiza designul, se apasă butonul de resetare, iar bootloaderul va fi activat din nou.
ID unic pentru fiecare placă.
Indiferent de denumirea portului serial pe care sistemul o atribuie placii, se asigură programarea plăcii potrivite.
Informații despre unde să pună programul de utilizator și date opționale de utilizator.
Un URL de actualizare pentru preluarea actualizărilor bootloader / firmware.
Aceste metadate, împreună cu instrumentul dedicat programatorului, fac placileTinyFPGA BX ușor de utilizat.
Figura 4: Actualizarea bootloaderului plăcuței TinyFPGA BX
Dacă doriți să vedeți toate metadatele stocate pe toate plăcile conectate, puteți obține o listă completă JSON a metadatelor adnotate cu numele portului serial la care sunt conectate.
Figura 5: Vizualizarea caracteristicilor plăcuței TinyFPGA BX
Design de PCB de înaltă calitate
TinyFPGA BX îmbunătățește modelul anterior B2 în fiecare aspect și aspectul plăcii PCB nu face excepție. Pe lângă dublarea aproape a numărului de IO-uri utilizator, noul aspect al PCB-ului are și un aspect îmbunătățit al PCB-ului și al alimentării cu energie.
Figura 6: Design-ul PCB al plăcuței TinyFPGA BX
Comparații
În afară de TinyFPGA BX, există câteva plăci FPGA diferite care au adoptat un factor de formă mai mic, potrivit pentru panourile de pâine. Aceste plăci variază în funcție de disponibilitate, preț, capacitate, caracteristici și licență. A fost adăugată o secțiune privind comparațiile de livrare a puterii FPGA, deoarece este ușor de ignorat și poate avea un impact mare asupra stabilității și integrității semnalului.
Tabelul 1: Comparație între TinyFPGA BX și alte plăci FPGA
3.2. Avantajele unui FPGA ca microcontroler
Pentru implementarea controlerului de trafic am ales un FPGA deoarece acesta permite schimbarea cu ușurință a schimbării structurii circuitului ce simulează sistemul, fiind astfel foarte ușor să se facă schimbări în structura circuitului de control simulat.
Diferența principală și cea mai semnificativă dintre microcontroler și FPGA este că FPGA nu are o structură hardware fixă, dimpotrivă, este programabilă în funcție de aplicațiile utilizatorilor. Cu toate acestea, procesoarele au o structură hardware fixă. Aceasta înseamnă că toate memoriile tranzistorilor, structurile periferice și conexiunile sunt constante. Operațiile pe care procesorul le pot face (adăugare, multiplicare, control I / O etc.) sunt predefinite. Și utilizatorii fac procesorul să facă aceste operațiuni "într-o manieră secvențială" prin utilizarea unui software, în conformitate cu propriile scopuri.
Structura hardware în FPGA nu este fixă, așa că este definită de utilizator. Deși celulele logice sunt fixate în FPGA, funcțiile pe care le efectuează și interconexiunile dintre ele sunt determinate de utilizator. Deci, operațiile pe care FPGA le pot face nu sunt predefinite. Se pot avea procesele realizate conform codului HDL scris "în paralel", ceea ce înseamnă simultan. Abilitatea procesării paralele este una dintre cele mai importante caracteristici care separă FPGA de microcontroler și o face superioară în multe domenii.
Microcontrolerele sunt în general mai utile pentru controlul de rutină al unui anumite circuit. De exemplu, utilizarea FPGA pentru funcții simple, cum ar fi pornirea și oprirea oricărui dispozitiv de pe un computer, poate fi supraestimată. Acest proces poate fi ușor realizat cu multe microcontrolere obișnuite (seria PIC, etc.).
Deoarece utilizatorul poate determina structura hardware a FPGA-urilor, se poate programa FPGA pentru a procesa date mai mari în câteva cicluri de ceas, în timp ce acest lucru nu este posibil cu microcontrolerul, deoarece fluxul de date este limitat de magistrala procesorului (16 biți, 32 biți etc.) și viteza de procesare.
Ca rezultat, aplicațiile care necesită performanțe mai mari, cum ar fi procesarea intensivă a datelor FPGA, au ajuns în prim plan, iar procesorul / microcontrolerul a ajuns în prim plan pentru operațiunile de control de rutină.
Aici se află unul dintre cele mai mari avantaje ale unui FPGA: paralelism masiv. Scrierea într-un HDL pentru un FPGA permite definirea comportamentului blocurilor sale logice. Deci, dacă designul utilizează doar un mic procent din resurse, se pot crea mai multe instanțe ale acelui design care sunt independente unul de celălalt, permițând multiplicareaproductivității FPGA. De exemplu, se poate scrie un pic de cod HDL care comută un LED pe baza unei combinații de semnale de intrare, ceea ce permite verificarea pentru a vedea dacă un anumit număr de comutatoare sunt pornite. Puteți crea mai multe instanțe ale acelui modul în design, specificând un LED diferit de ieșire pentru fiecare set de intrări. Acest lucru permite monitorizarea în paralel a unui număr foarte mare de semnale de intrare diferite, în același timp, în mod independent, și niciunul dintre ele nu va avea întârziere la ieșire datorită celorlalte.
3.3.FPGA folosit ca microcontroler pentru trafic
Controlerul de trafic poate fi proiectat pornind de la unele ipoteze arbitrare. Avantajul scrierii programului de control al traficului este acela că, într-un program, modificările conform cerințelor pot fi realizate cu ușurință, adică presupunând că traficul pe drumul principal ar trebui să fie permis pentru mai mult timp și pentru drumurile laterale traficul ar trebui să fie permis pentru mai puțin timp; atunci timpul este împărțit în așa fel încât pentru drumul principal durata va fi mai mare și pentru drumurile laterale durata va fi mai mică. În general, sistemul TLC va avea trei lumini (roșii, verzi și galbene) în fiecare direcție, în care lumina roșie indică oprirea traficului, lumina verde înseamnă că traficul este permis și lumina galbenă înseamnă că traficul va fi oprit în câteva secunde.
În această structură, există patru semnale de traficcare urmează să fie controlate. Toate cele patru semnale au aceeași prioritate, deoarece toate acestea sunt drumurile principale.
Figura 2: Modelul intersecției ce urmează a fi semaforizată
Sistemul de control al traficului este sincronizat pe direcțiile nord – sud și vest est. Astfel, în momentul în care se atinge temporizarea necesară pentru schimbarea culorii semaforului, semafoarele se vor schimba sincron, două câte două, în perechile menționate mai sus.
Acest aspect este foarte important pentru sincronizarea corectă a traficului rutier în cadrul direcțiilor de circulație. În momentul în care urmează în curând o schimbare a culorii semaforului de la roșu la verde sau de la verde la roșu, lumina galbenă se va aprinde pentru a avertiza că această schimbare urmează să se facă în curând.
Este de asemenea important ca avertizarea să se facă cu suficient timp înainte de schimbarea culorii semaforului pentru ca participanții la trafic să aibă suficient timp pentru a reacționa și a se adapta la noua situație.
Aproape fiecare dispozitiv de calcul vine cu un microcontroler încorporat pentru efectuarea sarcinilor și a interacțiunilor. Se poate compara structura unui microcontroler cu cea a unui computer care are toate perifericele necesare, cum ar fi memoria, porturile de intrare și ieșire și cronometrele. Acesta poate fi programat să efectueze sarcini simple în numele altor hardware.
FPGA cu milioane de porți logice și poate fi setat pentru a efectua sarcini prin programarea porților logice. FPGA au nevoie de periferice externe, cum ar fi RAM și ROM, pentru aplicarea sa.
Microcontrolerul utilizează un program software pentru a executa comenzi consecutiv, scris în limbaje precum C, C ++. Conexiunea de programare a FPGA se află pe circuitul logic și utilizează soluții de programare precum VHDL și Verilog.
Puterea de procesare a microcontrolerelor este limitată în timp și se bazează pe puterea ciclului procesorului. FPGA-urile sunt limitate în spațiu; trebuie create mai multe circuite logice pentru a atinge scara de codare dorită.
FPGA-urile sunt mai versatile și mai flexibile datorită naturii lor. FPGA se pot reprograma pentru a efectua orice sarcină logică care poate fi găzduită în cadrul porților logice disponibile. Porțile logice pot fi reîncărcate de câte ori este necesar pentru a schimba programul și a efectua o altă sarcină.
Microcontrolerele pot efectua sarcini limitate deoarece vin cu instrucțiunile și circuitele lor. Un programator trebuie să respecte restricțiile în timp ce dezvoltă cod.
De asemenea, cele două diferă în metodele folosite pentru a procesa instrucțiunile. Microcontrolerele citesc fiecare linie a programului la un moment dat secvențial; ceea ce înseamnă că și comenzile sunt prelucrate succesiv. FPGA pot procesa comenzi simultan și pot executa numeroase linii de codla un moment dat. Acestea sunt, de asemenea, cablate ca un circuit electric, astfel încât să puteți obține bune rezultate cu circuite paralele.
Capacitatea de procesare paralelă a FPGA permite controlarea în mod efficient a întreruperilor prin utilizarea mașinilor de stări finite (FSM). În cazul microcontrolerelor, trebuie să se țină seama de timpul necesar pentru a rezolva o întrerupere.
Configurația unui FPGA este încărcată pe celulele logice configurabile atunci când alimentarea este pornită. Nu este nevoie să faceți nicio modificare în hardware pentru a reprograma FPGA.
Microcontrolerele pot executa un program și pot îndeplini sarcini generale. Dacă se dorește schimbarea setului de instrucțiuni al plăcii, atunci va trebui modificată structura circuitului fizic al microcontrolerului.
FPGA-urile sunt potrivite pentru procesarea de mare viteză a datelor paralele și au un grad înalt de personalizare. Cu toate acestea, ele au și dezavantajul dat de complexitatea configurației.
Microcontrolerele sunt simplu de utilizat și configurat și pot gestiona date secvențiale de mare viteză. Cu toate acestea, acestea nu au unele caracteristici ale FPGA. Microcontrolerele sunt mai flexibile când vine vorba de programare, dar nu pot fi personalizate cu exactitate prin hardware.
FPGA-urile sunt cunoscute pentru consumul mai mare de putere față de microcontrolere din diferite motive. Acest lucru poate reprezenta o provocare pentru inginerii care sunt în căutarea unor sisteme eficiente de alimentare. FPGA-urile pot traversa limitările de putere ale unui sistem încorporat și pot să nu fie potrivite pentru toate scopurile.
FPGA au fost utilizate pentru emulare și prototipuri, dar ele nu sunt la fel de eficiente ca și alte componente, cum ar fi ASIC-urile. Se poate reprograma un FPGA, dar va veni cu dezavantajul ineficienței, deoarece utilizarea logică devine scăzută din cauza constrângerilor hardware.
De asemenea, FPGA-urile consumă o putere mare datorită tranzistorilor neutilizați. Maparea ineficientă a semnalului de ceas și căile de semnal extins contribuie, de asemenea, la un consum mare de energie.
FPGA poate fi utilizat pentru sarcini de mare viteză dincolo de capacitățile microcontrolerului. Din acest motiv, FPGA-urile nu sunt optimizate pentru consumul de energie. Microcontrolerele au viteze de procesare de numai câteva MHz și consumă mult mai puțină putere în comparație cu FPGA-urile.
3.4. Configurarea FPGA pentru a funcționa ca microcontroler
Este necesară instalarea celui mai recent mediu de dezvoltare și alte instrumente de asistență pentru FPGA-urile iCE40 și placa BX. TinyFPGA BX este susținută de instrumente de tip open source.
1. Instalare Python
Instrumentele pentru TinyFPGA BX necesită Python. Dacă nu există deja instalat Python, se urmează instrucțiunile de mai jos. Utilizatorii Linux ar trebui să aibă deja instalat Python.
Linux
Cele mai multe distribuții Linux instalează Python în mod implicit. Dacă nu, se inatalează Python utilizând managerul de pachete al distribuției.
Windows
Descărcați și executați programul de instalare Windows Python.
Important: bifați caseta de selectare "Adăugați Python 3.6 la PATH".
Faceți clic pe "Instalați acum"
Când Python a terminat instalarea, faceți clic pe "Închidere".
Instalați APIO și tinyprog
APIO este un instrument care face foarte ușor pentru a rula open-source FPGA toolchain și program de design pe placa FPGA.
Pentru a instala APIO și tinyprog, deschideți un terminal și executați următoarele comenzi:
pip install apio==0.4.0b5 tinyprog
apio install system sconsicestormiverilog
apio drivers –serial-enable
Aceste comenzi instalează APIO, tinyprog, precum și toate instrumentele necesare pentru a programa FPGA.
Pe sistemele Unix, este posibil să fie necesar să vă adăugați la grupul dialout pentru ca utilizatorul să poată accesa porturile seriale. Puteți face asta executând:
sudousermod -a -G dialout $USER
Conectați placa TinyFPG BX și asigurați-vă că bootloader-ul este actualizat executând următoarea comandă:
tinyprog–update-bootloader
Această comandă va verifica actualizările bootloader-ului pentru toate plăcile conectate. Acest lucru este important pentru a vă asigura că placile dvs. au cele mai recente încărcătoare de boot cu bug-uri cunoscute.
3. Descărcați și instalați Atom.
Atom este un editor de text open source și IDE, care este foarte extensibil. Autorii APIO au creat pluginul APIO-IDE care permite APIO-ului să fie folosit din interiorul Atom.
Descărcați și rulați programul de instalare Atom. Când programul de instalare se termină, ar trebui să lanseze Atom.
Mergeți la "Fișier" și faceți clic pe "Setări".
Faceți clic pe fila "Instalare".
Introduceți "apio-ide" în caseta de text "Căutați pachete" și faceți clic pe "Pachete".
Instalați "apio-ide". Dați clic pe da pentru orice dependență. Ignorați orice avertismente cu privire la versiunea APIO.
3.5.Cerințe de proiectare
Pentru a avea o funcționare corectă și eficientă a sistemului de control al traficului, trebuiesc definite o serie de cerințe de proiectare care să asigure faptul că sistemul funcționează în contextul cerințelor stabilite.
Astfel, se vor impune următoarele cerințe de proiectare:
Sistemul va fi implementat în Verilog, pe o plăcuță de dezvoltare FPGA – TinyFPGA BX;
Sistemul va sincroniza semafoarele în cadrul unei intersecții clasice, unde 4 străzi se întâlnesc într-un punct comun;
Sistemul va sincroniza semafoarele două câte două, atfel încât schimbarea culorilor semaforului să se facă sincron pentru ambele sensuri de circulație;
Sistemul va comanda aprinderea culorii galbene pentru a semnaliza o schimbare de culoare a semaforului (din roșu în verde sau din verde în roșu);
Design-ul sistemului va permite schimbarea cu ușurință a temporizării semaforului. Temporizarea inițială este setată la 6 secunde pentru culorile roșu și verde, dintre care în ultimele 2 secunde se aprinde și culoarea galbenă pentru a semnaliza schimbarea de culoare a semaforului.
3.6.Realizarea algoritmului de implementare a microcontrolerului
Algoritmul utilizat de plăcuța TinyFPGA BX a fost implementat în Verilog, prin intermediu APIO IDE. Limbajul verilog presupune crearea unui modul de control al microcontrolerului, prin intermediul căruia sunt declarate toate intrările și ieșirile care sunt utilizate.
Astfel, ca intrări sunt declarate semnalul de ceas (16MHz) și registrul de control pentru rezistorul de pull-up al conectorului USB; iar ca ieșiri sunt declarați toți pinii la care sunt legate LED-urile utilizate ca lumini ale semafoarelor conectate la plăcuță.
Sunt declarate două variabile de state, care sunt utilizate pentru a seta starea culorilor semafoarelor: o variabilă pentru temporizarea culorilor roșu și verde și o altă variabilă pentru temporizarea culorii galben.
Semnalul de ceas este utilizat pentru măsurarea timpului în cadrul procesului de temporizare. Dat fiind că frecvența procesorului plăcuței TinyFPGA BX este de 16MHz, rezultă că într-o secundă sunt executate 16.000.000 cicluri de ceas. Această valoarea va fi utilizată în definirea variabilelor de temporizare pentru culorile semaforului.
Algoritmul de temporizare funcționează astfel: din momentul în care se încarcă codul pe plăcuța TinyFPGA, algorimul va rula atâta timp cât plăcuța este alimentată. Inițial, două semafoare vor fi setate pe culoarea verde, iar semafoarele de pe străzile perpendiculare vor fi setate pe culoarea roșie. În momentul în care este atinsă temporizarea pentru culoarea galbenă sunt aprinse LED-urile galbene. Apoi, în momentul în care este atinsă temporizarea pentru culorile roșu și verde semafoarele care indicau culoarea verde tre pe culoarea roșie, iar cele care erau pe culoarea roșie trec pe culoarea verde. De asemenea, culoarea galbenă este stinsă, iar contoarele pentru cele trei culori sunt resetate, fiind astfel inițiat un nou ciclu de temporizare.
În final, fiecărui pin îi este asociat semnalul corespunzător de ieșire pentru a aprinde / stinge LED-ul care este legat la pinul respectiv, fiind astfel controlate cele 4 semafoare.
3.7.Realizarea fizica a dispozitivului demonstrativ
Odată realizată configurarea FPGA de tip TinyFPGA BX pentru a funcționa că microcontroler conform instrucțiunilor prezentate în subcapitolul 3.5 și realizarea algoritmului de implementare a microcontrolerului conform subcapitolului 3.6, s-a trecut la realizarea fizică a dispozitivului demonstrativ. Primul pas a presupus în adăugarea unor pini la porturile de intrare/ieșire ale plăcuței FPGA care să permită conexiunea acesteia la un kit LED-uri [1].
Acest kit de LED-uri este utilizat pentru implementarea hardware a unui semafor. Modulul constă din 3 LED-uri (roșu, galben și verde) ce vor fi controlate de plăcuța TinyFPGA pentru a demonstra funcționalitatea controlerului de trafic [2].
Figura 7: Kit de LED-uri semafor
Pasul urmator a constat in asamblarea componentelor electronice pe o macheta ce ilustreaza in format 3D o intersectie.
3.8. Programarea microcontrolerului realizat cu FPGA pentru controlul traficului rutier prin semaforizare
Pentru a putea utiliza sistemul de control al traficului, primul pas este reprezentat de încărcarea codului Verilog cu descrierea hardware a sistemului pe plăcuța FPGA. Acest lucru se poate realiza foarte ușor prin intermediul interfeței grafice oferite de APIO IDE. Acesta este un pachet de software open source ce utilizează editorul Atom ca mediu de interfață grafică și se instalează ca un plugin al editorului Atom.
Astfel, se deschide în Atom directorul în care se regăsește codul Verilog al sistemului și se utilizează butonul dedicate de încărcare a codului pe placă, așa cum este arătat în figura de mai jos:
Figura 8: Încărcarea codului pe plăcuța TinyFPGA BX
După finalizarea procesului automat de încărcare a codului pe plăcuța FPGA, sistemul intră imediat în funcțiune. Temporizarea inițială este de 6 secunde pentru un ciclu de semaforizare, dintre care în ultimele 2 secunde se semnalează schimbarea culorii semaforului prin aprinderea LED-urilor galbene.
Această temporizare poate fi schimbată cu ușurință prin înlocuirea valorii 6 din cod cu noua valoare de temporizare. Apoi doar se încarcă din nou codul pe plăcuța FPGA, iar sistemul va funcționa conform noii temporizări.
Funcționarea sistemului în timp real poate fi observată în imaginea de mai jos:
Figura 9: Funcționarea sistemului de control al traficului
3.9. Descrierea funcționării sistemului de control al traficului
Figura de mai jos prezintă o structură generală de patru drumuri, care constă din direcțiile nord, est, vest și sud, fiecare cu un set de trei lumini, și anume verde, galben și roșu. Lampa verde într-o direcție va fi ON atunci când semafoarele din stânga si dreapta sunt setate sa indice lumina roșie. Semafoarele sunt sincronizate două câte două, astfel încât dacă semaforul din punctul cardinal nord are ledul verde aprins, în sud va fi aprins tot ledul verde, în timp ce semafoarele din est si vest vor indica culoarea roșie. După trecerea unui interval de timp precizat în codul verilog din calculator se va aprinde ledul galben, urmând să se realizeze trecerea semafoarelor din nord și sud la culoarea roșie si aprinderea ledurilor verzi de pe semafoarele din est și vest.
figura
Concluzii
Aplicația propusă implementează un sistem care controlează traficul într-o intersecție clasică. Avantajul utilizării unui sistem de tip FPGA este acela că se poate actualiza oricând structura internă hardware a sistemului (cea simulată de plăcuța FPGA), fără a fi necesare schimbări în componentele hardware ale sistemului. Este necesar doar o actualizare la noul software, iar noua structură hardware a sistemului va fi simulată corect de plăcuța FPGA.
Pe parcursul proiectului s-au experimentat avantajele pe care le oferă un limbaj de descriere a hardware-ului asupra metodei convenționale de proiectare.
Verilog împreună cu instrumentele de simulare oferă proiectanților posibilitatea de a modela în părți și avantajele verificării corectitudinii designului pe măsură ce acesta evoluează. Există o mare posibilitate de dezvoltare în cadrul proiectului în direcția introducerii AES în implementarea designului folosind VHD.
Bibliografie
Bala, Ș. – Tehnici CAD în realizarea modulelor electronice – Indrumar de laborator, Editura UPG Ploiești, 2016.
Bala, Ș. – Dispozitive electronice și electronică analogică, vol. I Editura UPG Ploiești, 2017.
Blaine C. Readler- Vhdl By Example First Edition, Editura Full Arc Press; First Edition (May 28, 2014)
Bhaskar.J – “ VHDL Primer “ Editura Prentice Hall; 3 edition (1999)
Douglas L.Perry – “ VHDL “ McGraw-Hill Education; 4 edition (June 2, 2002)
Douglas V..Hall – “Microprocessorsandinterfacing” Editura: Gregg Division, McGraw-Hill
Rădulescu, G., Olteanu, M. Programare în limbaj de asamblare. Lucrări practice. Editura Universității din Ploiești (2007),
Parag K. Lala, “Digital System Design Programmable Logic Devices”, Chapter 1, B S Publications
Paraschiv, N., Calculatoare numerice, Note de curs, Editura UPG, 2007
Stephen Brown – “Fundementas of digital logic with VHDL design” Editura McGraw-Hill Education; 3 edition (April 14, 2008)
Bibliografie web
http://www.virale.ro/omg/voi-cine-credeti-ca-are-prioritate-masina-verde-sau-masina-albastra-la-aceasta-intrebare-postata-de-politistul-marian-godina-s-au-strans-peste-2500-de-comentarii-vezi-care-este-raspunsul-corect/
https://tinyfpga.com/b-series-guide.html
https://ro.wikipedia.org/wiki/FPGA
https://dsp-sys.de/arm-dsp-fpga-module-de?gclid=CjwKCAjw67XpBRBqEiwA5RCocSL-zs4AJ1BbQNthgXtrSs2f1papz76D-0wrQEamKb4iJjd-txHdABoC-aoQAvD_BwE
Anexa 1: Codul Verilog al sistemului implementat
# Left side of board
set_io –warn-no-port PIN_1 A2
set_io –warn-no-port PIN_2 A1
set_io –warn-no-port PIN_3 B1
set_io –warn-no-port PIN_4 C2
set_io –warn-no-port PIN_5 C1
set_io –warn-no-port PIN_6 D2
set_io –warn-no-port PIN_7 D1
set_io –warn-no-port PIN_8 E2
set_io –warn-no-port PIN_9 E1
set_io –warn-no-port PIN_10 G2
set_io –warn-no-port PIN_11 H1
set_io –warn-no-port PIN_12 J1
set_io –warn-no-port PIN_13 H2
# Rightside of board
set_io –warn-no-port PIN_14 H9
set_io –warn-no-port PIN_15 D9
set_io –warn-no-port PIN_16 D8
set_io –warn-no-port PIN_17 C9
set_io –warn-no-port PIN_18 A9
set_io –warn-no-port PIN_19 B8
set_io –warn-no-port PIN_20 A8
set_io –warn-no-port PIN_21 B7
set_io –warn-no-port PIN_22 A7
set_io –warn-no-port PIN_23 B6
set_io –warn-no-port PIN_24 A6
# SPI flash interface on bottom of board
set_io –warn-no-port SPI_SS F7
set_io –warn-no-port SPI_SCK G7
set_io –warn-no-port SPI_IO0 G6
set_io –warn-no-port SPI_IO1 H7
set_io –warn-no-port SPI_IO2 H4
set_io –warn-no-port SPI_IO3 J8
# General purposepins on bottom of board
set_io –warn-no-port PIN_25 G1
set_io –warn-no-port PIN_26 J3
set_io –warn-no-port PIN_27 J4
set_io –warn-no-port PIN_28 G9
set_io –warn-no-port PIN_29 J9
set_io –warn-no-port PIN_30 E8
set_io –warn-no-port PIN_31 J2
# LED
set_io –warn-no-port LED B3
# USB
set_io –warn-no-port USBP B4
set_io –warn-no-port USBN A4
set_io –warn-no-port USBPU A3
# 16MHz clock
set_io –warn-no-port CLK B2 # input
// verificati in fisierulpins.pcf pentru toate denumirile pinilor de pe placutaTinyFPGA BX
module top (
input CLK, // ceas de 16MHz
output USBPU,
output PIN_5,
output PIN_6,
output PIN_7,
output PIN_11,
output PIN_12,
output PIN_13,
output PIN_17,
output PIN_18,
output PIN_19,
output PIN_22,
output PIN_14,
output PIN_24,
);
// se pune rezistoul pe valoarea '0' pentru a dezactiva USB
assign USBPU = 0;
// variabila utilizata pentru a activa / dezactiva pinii pentru culorile rosu si verde
reg pornit;
// variabila utilizata pentru a activa / dezactiva pinii pentru culoarea galben
regpornit_galben;
// contor de timp
reg [31:0] contor_lumini;
// stocheaza valoarea de timp pentru culoarea rosie / verde
reg [31:0] perioada_lumini;
// valoarea de timp pentru a masura o secunda este 16.000,000 deoarece frecventa semnalului de ceas este de 16MHz
assignperioada_lumini = 6 * 16000000;
// stocheaza valoarea de timp pentru culoarea galbena
reg [31:0] perioada_galben;
// valoarea de timp pentru a masura o secunda este 16.000,000 deoarece frecventa semnalului de ceas este de 16MHz
assignperioada_galben = 4 * 16000000;
// incrementeazacontor_lumini la fiecare ciclu de ceas
always @(posedge CLK) begin
contor_lumini<= contor_lumini + 1;
// daca este atinsa perioada de timp setata pentru culoarea galbena
if (contor_lumini == perioada_galben) begin
// activeaza culoarea galbena
pornit_galben<= 1'b1;
end
// daca o periodataintreaga a fost atinsa
if (contor_lumini == perioada_lumini) begin
if (pornit == 1'b1) begin
pornit <= 1'b0;
endelsebegin
pornit <= 1'b1;
end
// dezactiveaza culoarea galbena
pornit_galben<= 1'b0;
// reseteaa contorul de timp
contor_lumini<= 0;
end
end
// nord
assign PIN_11 = pornit; // verde
assign PIN_12 = pornit_galben; // galben
assign PIN_13 = !pornit; // rosu
// sud
assign PIN_19 = pornit; // verde
assign PIN_18 = pornit_galben; // galben
assign PIN_17 = !pornit; // rosu
// vest
assign PIN_22 = !pornit; // verde
assign PIN_14 = pornit_galben; // galben
assign PIN_24 = pornit; // rosu
// est
assign PIN_7 = !pornit; // verde
assign PIN_6 = pornit_galben; // galben
assign PIN_5 = pornit; // rosu
endmodule
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Proiectarea, realizarea și programarea unei arhitecturi de microcontrolerutilizând un modul de dezvoltare cu FPGA [307620] (ID: 307620)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
