Despre FPGA-uri
Recent m-a cuprins "febra" circuitelor reprogramabile. Pentru cei mai puțin familiarizați cu acest domeniu, un circuit reprogramabil este compus dintr-un număr foarte mare de porți logice care se pot interconecta prin programarea unor conexiuni la nivelul matricei de siliciu. Programarea se face cu ajutorul unor platforme dedicate și printr-un limbaj cu care se poate proiecta un circuit la nivel hardware – HDL. Interconectarea suportă un număr aproape infinit de configurații. Astfel se poate proiecta la nivel hardware o configurație completă de porți logice care, împreună, generează o anumită funcționalitate. Marele avantaj este că, spre deosebire de circuitele cu logică predefinită, configurația unui circuit programabil poate fi modificată hardware prin... software. Circuitele cu logică [re]programabilă au mai multe avantaje, dar cele mai importante sunt cele legate de timpul și costul de implementare. De pildă, costurile de producție ale unui circuit specializat (ASIC – Application Specific Integrated Circuit) sunt de ordinul milioanelor de dolari din cauză că producția matricei de siliciu este foarte scumpă. În cazul unor erori, această matrice practic se aruncă la coș și trebuie luat totul de la capăt. Aceeași logică poate fi creată într-un circuit cu logică programabilă iar, în cazul unor erori, pur și simplu trebuie doar schimbat codul software care definește partea de hardware. Avantajul este evident. Din seria circuitelor cu logică programabilă, cele mai importante sunt CPLD-urile (Complex Programmable Logic Device[s]) și FPGA-urile (Field Programmable Graphic Arrays). Sunt mai multe diferențe între cele două categorii, dar principala diferență funcțională este că FPGA-urile au nevoie de o memorie externă (poate fi chiar un microcontroller) pentru a stoca configurația, care se încarcă în circuit la pornire. Pentru mai multe detalii aici, în secțiunea "Features".
În radioamatorism, FPGA-urile reprezintă alegerea ideală pentru o serie de proiecte care implică procesarea digitală a semnalelor. Se pot realiza arhitecturi DSP complexe cu un efort de programare mult mai mic decât în cazul DSP-urilor dedicate (care necesită cunoștințe serioase de C sau C++). Există, evident, un compromis între gradul de complexitate al circuitului și logicii sale și decizia de a alege între implementarea pe un FPGA sau pe un circuit DSP dedicat. Lărgimea de bandă pentru bus-ul de date este un factor determinant pentru alegere (mare = FPGA; mică–moderată = DSP). Decizia mai este ajutată și de oferta extrem de bogată de plăci de experimentare și prototipare cu FPGA-uri, cu prețuri extrem de avantajoase în comparație cu oferta similară pentru DSP-uri. Vezi, de pildă oferta de la Terasic și Digilent pentru plăci pe bază de FPGA-uri Intel (fost Altera) respectiv Xilinx.
Nu în ultimul rând trebuie menționat că există pe piața producătorilor de FPGA jucători mai mici decât Intel (fost Altera) și Xilinx. Lattice, de pildă, este specializat pe nișa circuitelor cu logică programabilă compacte, pentru dispozitive mobile și dedicate DSP ceea ce le face să fie foarte atrăgătoare pentru multe proiecte de radioamatorism care nu necesită complexitatea unor circuite cu foarte multe circuite logice.
Toolchains — Suite de dezvoltare
8/02/2026
Cred că cel mai bun echivalent în limba română pentru toolchains este suite de dezvoltare sau instrumente de dezvoltare și reprezintă un ansamblu de instrumente a căror utilizare permite realizarea unor aplicații de la cap la coadă.
Personal prefer termenul de suite de dezvoltare deoarece este mai ilustrativ pentru imaginea unui grup de aplicații și alte instrumente, hardware și software, care conlucrează pentru realizarea produsului finit.
Cel mai mult am lucrat cu Quartus Prime de la Altera (Intel a re-promovat recent brand-ul Altera pentru divizia sa de circuite programabile). Nu am deloc experiență cu platformele similare de la Xilinx (Vivado & co.) sau Lattice (IceCube2). Dar diferențele nu trebuie să fie mari, poate diferă doar anumite detalii de implementare a unor funcționalități specifice. Indiferent de platformă (Intel-Altera, AMD-Xilinx sau Lattice etc) toate trec obligatoriu prin aceleași etape:
- Design — Proiectare
- Sinteză
- Plasare și rutare
- Analiza duratelor (timing analysis)
- Programarea FPGA-ului
- Testarea și verificarea
Pentru Windows și Linux există instrumente care includ atât sinteza cât și plasarea și rutarea circuitelor. Pentru Mac nu există toolchain care să facă asta. Cel mai apropiat este TerosHDL, modul pentru Visual Studio Code. Recent l-am instalat și utilizat cu success, nu fără bătaie de cap. Mai jos sunt câteva lucruri de care trebuie ținut cont pentru o bună funcționare:
- Crearea și activarea unui mediu virtual (virtual environment) Python <3.12
- Instalare edalize
- Instalare vunit
- Instalare ghdl
- Instalare Icarus Verilog
Mediul virtual Python
Acesta nu trebuie să fie mai mare de 3.11. Edalize are anumite cerințe specifice în ceea ce privește versiunea Python:
python3.11 -m venv venv
source venv/bin/activate
Din acest motiv am folosit versiunea 3.11.14:
python --version
>> Python 3.11.14
pip show edalize | grep Requires
>> Requires: Jinja2
Apoi am instalat modulele:
pip install --upgrade pip
pip install vunit_hdl edalize
pip list
>>
Package Version
---------- -------
colorama 0.4.6
edalize 0.6.5
Jinja2 3.1.6
MarkupSafe 3.0.3
pip 26.0.1
setuptools 80.9.0
vunit_hdl 4.7.0
Edalize
Edalize este o bibliotecă Python pentru interacțiunea cu instrumente EDA. Poate crea fișiere-proiect pentru instrumentele suportate și le poate rula în mod batch sau GUI (acolo unde modul GUI este suportat). Aici este pagina github pentru edalize iar aici un link direct către un fișier README
Vunit
VUnit este o platformă open source pentru testarea unitară (unit testing) VHDL/Verilog/SystemVerilog. Oferă funcționalitățile necesare realizării unui proces automat de testare a codului HDL. Aici este pagina proiectului iar aici este un link direct către un fișier README.
ghdl
După toate acestea, am avut alte probleme:
---> Build directory: /Users/tom/.teroshdl/build
---> Make installation folder path: System path
Error: '['make', 'run']' exited with an error: 2
Cele mai comunte trei cauze pentru această eroare sunt:
- Fișierul Makefile nu a fost găsit → VUnit/edalize nu l-au generat corect
- Lipsește simulatorul → trebuie verificat dacă este instalat un simulator (gen ghdl sau ModelSim)
- Probleme cu calea către executabil → executabilul simulatorului nu este în variabila PATH de sistem
La mine s-a dovedit a fi a doua problemă
# Check for GHDL (free, open-source)
which ghdl
ghdl --version
Și l-am instalat cu brew:
# Install GHDL via Homebrew
brew install ghdl
Icarus Verilog
Pagina proiectului este aici, iar aici este un fișier README din respozitoriul online.
# Install Icarus Verilog
brew install icarus-verilog
Comenzi compilare și simulare
#!/bin/bash
# Compile
iverilog -o sim logic_gates.v logic_gates_tb.v
# Run simulation
vvp sim
# Open waveform
surfer logic_gates.vcd
Documentație
- Comparație între diverse plăci de dezvoltare cu FPGA
- Comparație între Digilent Arty A7-100T și Arty Z7 (Zynq-7000 Z7020)
- Bazele arhitecturii FPGA presupunând că ești un începător
- Ce face conceptul de „hardware lichid” atât de special?
- Proiecte FPGA pentru radioamatori
Exemple
- Numărător pe 4 biți - VHDL
- Divizor cu 16 – Verilog
- Sincronizare verticală pentru semnal video – Verilog
- Porți logice - Verilog
Cursuri recomandate
Coursera
- Introduction to FPGA Design for Embedded Systems » Certificat
- Hardware Description Languages for FPGA Design » Certificat
- Expanded FPGA Training with NIOS II (University of Colorado, Boulder) » Descriere » Pagina cursului