Cuprins:

Arduino ca placă de panouri ieftină FPGA: 5 pași (cu imagini)
Arduino ca placă de panouri ieftină FPGA: 5 pași (cu imagini)

Video: Arduino ca placă de panouri ieftină FPGA: 5 pași (cu imagini)

Video: Arduino ca placă de panouri ieftină FPGA: 5 pași (cu imagini)
Video: The cold darkness of a DIY smart house and Risc-V | Keysight Connect #3 2024, Noiembrie
Anonim
Arduino ca placă de panouri ieftine FPGA
Arduino ca placă de panouri ieftine FPGA

Proiectarea circuitelor logice hardware poate fi distractivă. Modul vechi de școală de a face acest lucru a fost cu porțile NAND, pe o placă de pâine, conectate cu fire jumper. Acest lucru este încă posibil, dar nu durează mult până când numărul de porți scapă de sub control. O opțiune mai nouă este utilizarea unui FPGA (Field Programmable Gate Array). Aceste cipuri se pot reconecta pentru a deveni orice circuit logic digital pe care îl puteți proiecta, dar nu sunt ieftine și disponibile. Voi arăta cum acest FPGA poate fi înlocuit cu un cip Atmega ieftin de la un Arduino UNO, punând în mod eficient circuitul digital într-un pachet DIP, care este foarte prietenos cu panourile.

Pasul 1: Proiectați circuitul pe care îl va reprezenta „FPGA”

Proiectează circuitul pentru care
Proiectează circuitul pentru care
Proiectează circuitul pentru care
Proiectează circuitul pentru care
Proiectează circuitul pentru care
Proiectează circuitul pentru care

Voi construi un sumator de 2 biți + 2 biți. Este nevoie de două perechi de pini logici de intrare și scoate un triplet de pini de ieșire.

Pentru a face acest lucru cu porțile NAND, consultați schema din imagine. Are nevoie de 14 porți NAND. Am folosit 4 cipuri TTL cu poartă NAND quad și le-am conectat pe placa de pâine.

Am adăugat câteva LED-uri (nu uitați de rezistențele de limitare a curentului) pentru a arăta când pinii de intrare și de ieșire erau aprinși (ridicați) și când erau opriți (reduși). Pentru a conduce pinii de intrare, fie i-am sărit la șina de la sol, fie la șina de putere pozitivă.

Acest circuit funcționează, dar ocupă deja 4 jetoane TTL și este un cuib de fire de șobolan. Dacă ar fi nevoie de mai mulți biți, ar exista mai multe plăci de pâine și mai mulți jumperi. Foarte repede, dimensiunea circuitului ar scăpa de sub control.

Pe o notă laterală, atunci când lucrați cu porți TTL, acestea nu emit exact 0V sau 5V așa cum ne-am aștepta. De multe ori produc în jurul valorii de 3V pentru „mare”, dar tensiunea exactă se află într-o gamă foarte largă. Același circuit care utilizează cipuri echivalente CMOS ar avea mai bine o schimbare exact de la 0V la exact 5V.

Pasul 2: Introduceți FPGA

Introduceți FPGA
Introduceți FPGA
Introduceți FPGA
Introduceți FPGA

Un FPGA este un cip fantastic, care poate deveni literalmente orice combinație de porți logice, conectate împreună în orice combinație. Unul proiectează „circuitul” într-un limbaj de proiectare hardware (HDL). Există mai multe astfel de limbi, dintre care una se numește Verilog. Fișierul.v din imagine este echivalentul Verilog al sumatorului pe doi biți. Fișierul.pch de sub acesta este, de asemenea, necesar pentru a atribui pinii de intrare și de ieșire numiți în fișierul verilog pinilor hardware reali de pe cip.

În acest caz, folosesc o placă de dezvoltare Lattice Semiconductors iCEstick (https://www.latticesemi.com/icestick). Cipul FPGA real este un iCE40HX-1k, cu puțin peste 1000 de porți, care pot deveni fiecare o poartă logică. Asta înseamnă că fiecare poartă poate fi o poartă NAND sau o poartă SAU, NU poartă, NOR, XOR etc. În plus, fiecare poartă poate gestiona mai mult de două intrări. Acest lucru este specific fiecărui producător, dar pe iCE40 fiecare poartă poate gestiona 4 intrări. Astfel fiecare poartă este mult mai capabilă decât cele 2 porți NAND de intrare.

A trebuit să aloc pinii de intrare 4 și cei 3 pini de ieșire pinilor fizici 91, 90, 88, 87, 81, 80 și, respectiv, 79. Acest lucru este specific cipului fpga și plăcii de breakout pe care este activat și modul în care acei pini sunt conectați la portul PMOD. Aceasta este disponibilă în fișele tehnice pentru această placă FPGA.

Lattice oferă propriul lanț de instrumente pentru a sintetiza (echivalentul FPGA cu compilarea pentru procesoare) circuite de la Verilog, dar am folosit lanțul de instrumente open source gratuit icestorm (https://www.clifford.at/icestorm/). Instrucțiunile de instalare sunt disponibile pe acel site. Cu icestorm instalat și fișierul verilog și pcf, comenzile pentru încărcarea acestui circuit pe FPGA sunt:

yosys -p "synth_ice40 -blif twoBitAdder.v" twoBitAdder.blif

arachne-pnr -d 1k -p iCEstick.pcf twoBitAdder.blif -o twoBitAdder.asc

icepack twoBitAdder.asc twoBitAdder.bin

iceprog twoBitAdder.bin

Acest lucru funcționează excelent, dar inclusiv livrarea acestui iCEstick va costa aproximativ 30 USD. Acesta nu este cel mai ieftin mod de a construi un circuit digital, dar este puternic. Are peste 1000 de porți și pentru acest mic circuit folosește doar 3 dintre ele. Echivalentul porții NAND a folosit 14 porți. Acest lucru se datorează faptului că fiecare poartă poate deveni orice fel de poartă, iar fiecare poartă este de fapt o poartă cu 4 intrări. Fiecare poartă poate face mai mult. Dacă aveți nevoie de mai multe porți, iCEstick are un frate mai mare cu 8000 de porți, care costă aproximativ dublu. Alți producători au alte oferte, dar prețul poate deveni destul de abrupt.

Pasul 3: De la FPGA la Arduino

De la FPGA la Arduino
De la FPGA la Arduino

FPGA-urile sunt grozave, dar pot fi costisitoare, greu de găsit și nu sunt foarte prietenoase cu panourile. Un chipset prietenos și ieftin este Atmega 328 P, care vine într-un pachet DIP îngrijit, perfect pentru breadboarding. De asemenea, poate fi achiziționat pentru aproximativ 4 USD. Aceasta este inima Arduino UNO. Desigur, ați putea folosi întregul UNO, dar fiți ieftin, putem scoate Atmega 328 P de la UNO și îl putem folosi de la sine. Totuși, am folosit placa UNO ca programator pentru Atmega.

În acest moment veți avea nevoie

1. Un Arduino UNO, cu procesorul detașabil Atmega 328P.

2. Un alt Atmega 328P cu bootloader-ul Arduino pre-ars, pentru a-l înlocui pe cel pe care urmează să îl scoatem din UNO. (Opțional, presupunând că doriți în continuare să aveți un UNO utilizabil).

Scopul este de a converti fișierul verilog într-un proiect arduino care poate fi încărcat în 328P. Arduino se bazează pe C ++. În mod convenabil există un traducător de la Verilog la C ++, numit Verilator (https://www.veripool.org/wiki/verilator). Verilator este destinat a fi utilizat de către proiectanții de hardware care trebuie să-și simuleze proiectele înainte de a le configura pe hardware scumpe. Crucea Verilator compilează verilogul în C ++, apoi utilizatorul oferă un ham de testare pentru a furniza semnale de intrare simulate și a înregistra semnalele de ieșire. O vom folosi pentru a înghesui designul verilog în Atmega 328P folosind lanțul de instrumente Arduino.

Mai întâi instalați Verilator. Urmați instrucțiunile de la

Instalați, de asemenea, Arduino IDE și testați că se poate conecta la Arduino UNO prin USB.

Vom folosi același fișier verilog ca pentru FPGA, cu excepția faptului că numele pinilor trebuie modificate. Am adăugat un subliniat (_) la începutul fiecăruia. Acest lucru este necesar, deoarece bibliotecile arduino includ un fișier antet care traduce lucruri precum B0, B001, etc, în numere binare. Celelalte nume ale pinilor de intrare ar fi fost așa cum sunt, dar B0 și B1 ar fi cauzat eșecul construcției.

În directorul care conține twoBitAdder.v și iCEstick.pcf, rulați următoarele:

verilator -Wall --cc twoBitAdder.v

Aceasta va crea un subdirector numit obj_dir care conține mai multe fișiere noi. Avem nevoie doar de fișierele antet și cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h și VtwoBitAdder_Syms.cpp.

În IDE-ul Arduino, creați o nouă schiță numită twoBitAdder.ino. Aceasta va crea fișierul ino într-un nou director numit și twoBitAdder, în directorul de schițe Arduino. Copiați fișierele VtwoBitAdder.h și VtwoBitAdder.cpp în acest folder twoBitAdder din folderul Arduino.

Acum copiați fișierele antet din instalarea verilatorului.

cp / usr / local / share / verilator / include / verilated *.

în cele din urmă copiați în biblioteca std c ++ din https://github.com/maniacbug/StandardCplusplus. În conformitate cu instrucțiunile lor de instalare "Acest lucru este instalat la fel ca o bibliotecă Arduino obișnuită. Despachetați conținutul distribuției în folderul„ biblioteci "de sub caietul de schițe. De exemplu, caietul meu de schițe se află la / home / maniacbug / Source / Arduino, deci această bibliotecă este în / home / maniacbug / Source / Arduino / libraries / StandardCplusplus.

Asigurați-vă că ați resetat ID-ul Arduino după instalare."

Acum înlocuiți conținutul twoBitAdder.ino cu cel furnizat la acest pas. Acesta este un cablaj de test la care se așteaptă verilatorul, care configurează pinii de intrare / ieșire, apoi în buclă, citește pinii de intrare, îi alimentează către VtwoBitAdder (versiunea tradusă a circuitului nostru), apoi citește ieșirile de la VtwoBitAdder și aplică le la pinii de ieșire.

Acest program ar trebui să compileze și să execute pe Arduino UNO.

Pasul 4: De la Arduino la DIP Chip pe o placă de pâine

De la Arduino la DIP Chip pe o placă de pâine
De la Arduino la DIP Chip pe o placă de pâine

Acum că programul rulează pe Arduino, nu mai avem nevoie de placa Arduino. Tot ce avem nevoie este CPU.

Scoateți cu atenție Atmega 328P din soclul Arduino UNO și introduceți opțional înlocuitorul acestuia.

Puneți Atmega 328P pe panou. Puneți capătul cu divotul îndreptat în sus pe panoul de pâine. Pinul 1 este pinul din stânga sus. Pinul 2 este următorul în jos, și așa mai departe, la pinul 14, care este în partea stângă jos. Apoi, pinul 15 este în dreapta jos, iar pinii 16 - 28 contează înapoi partea dreaptă a cipului.

Conectați pinii 8 și 22 la masă.

Conectați pinul 7 la VCC (+ 5V).

Conectați un cristal de cuarț de 16 MHz între pinii 9 și 10. De asemenea, un condensator mic (22pF) între pinul 9 și masă și între pinul 10 și masă. Acest lucru oferă Atmega 328P viteza de ceas de 16Mhz. Există instrucțiuni în altă parte cu privire la predarea 328P să folosească în schimb ceasul său intern de 8Mhz, ceea ce ar economisi câteva părți, dar aceasta ar încetini procesorul.

Porturile Arduino GPIO 5, 6, 7 și 8, pe care le-am folosit pentru pinii de intrare sunt de fapt pinii fizici 11, 12, 13, 14 de pe Atmega 328P. Aceștia ar fi cei patru pini inferiori din stânga.

Porturile Arduino GPIO 11, 10 și 9, pe care le-am folosit pentru pinii de ieșire sunt de fapt pinii fizici 17, 16, 15 de pe Atmega 328P. Acesta ar fi cei trei pini inferiori din dreapta.

Am conectat LED-urile la acești pini ca înainte.

Pasul 5: Concluzie

Concluzie
Concluzie

Cipurile TTL funcționează, dar este nevoie de multe dintre ele pentru a construi orice. FPGA-urile funcționează foarte bine, dar nu sunt ieftine. Dacă poți trăi cu mai puțini pini IO și cu o viteză mai mică, atunci un Atmega 328P poate fi cipul pentru tine.

Câteva lucruri de reținut:

FPGA:

Pro

- Poate gestiona semnale de mare viteză. Deoarece nu există un procesor care să blocheze procesarea până la o instrucțiune la un moment dat, factorul limitativ este întârzierea propagării prin porțile de pe circuitul dat. În multe cazuri, acest lucru poate fi mult mai rapid decât ceasul furnizat cu cipul. Pentru proiectarea mea, întârzierea calculată ar fi permis ca twoBitAdder să răspundă la aproximativ 100 de milioane de modificări ale valorilor de intrare pe secundă (100Mhz), chiar dacă ceasul de la bord este doar un cristal de 12Mhz.

- Pe măsură ce designul devine mai complex, performanța circuitelor existente nu se degradează (mult). Deoarece adăugarea de circuite la țesătură înseamnă pur și simplu ceva nou în imobilele neutilizate, nu are impact asupra circuitelor existente.

- În funcție de FPGA, numărul pinilor IO disponibili poate fi foarte mare și, în general, nu sunt blocați în niciun scop anume.

Con

- Poate fi scump și / sau greu de găsit.

- De obicei vine într-un pachet BGA care necesită un fel de panou de lucru pentru a lucra cu cipul în orice proiect amator. Dacă îl construiți într-un design cu un PCB SMT multi-strat personalizat, aceasta nu este o problemă.

- Majoritatea producătorilor de FPGA furnizează propriul software de proiectare cu sursă închisă, care în unele cazuri poate costa bani sau poate avea o dată de expirare a licenței.

Arduino ca FPGA:

Pro

- Ieftin și ușor de obținut. Doar căutați atmega328p-pu pe Amazon. Ar trebui să fie de aproximativ 4 USD / bucată. Mai mulți vânzători le vând în loturi de 3 sau 4.

- Acesta este un pachet DIP, ceea ce înseamnă că se potrivește perfect pe o placă cu pini externi.

- Acesta este un dispozitiv de 5V, care poate facilita interfața cu alte dispozitive de 5V.

Con

- ATMEGA328P are un număr limitat de pini IO (23), iar mai multe dintre ele sunt rezervate pentru sarcini specifice.

- Pe măsură ce complexitatea circuitului crește, cantitatea de cod rulată în metoda buclei Arduino crește, ceea ce înseamnă că durata fiecărui ciclu este mai lungă.

- Chiar dacă complexitatea circuitului este scăzută, fiecare ciclu necesită multe instrucțiuni ale procesorului pentru a prelua valorile pinului de intrare și a scrie valorile pinului de ieșire și pentru a reveni în partea de sus a buclei. Cu un cristal de 16 MHz, chiar și la o instrucțiune pe ciclu de ceas, bucla nu va rula mai mult de poate 1 milion de ori pe secundă (1 MHz). Pentru majoritatea proiectelor electronice de amatori, este mult mai rapid decât este necesar.

Recomandat: