Sari la conținut

Programarea FPGA-urilor sau CPLD-urilor - de la A la Z


Postări Recomandate

Ma uitam zilele trecute pe net sa caut ceva informatii despre programarea FPGA-urilor sau a CPLD-urilor si ce nu am inteles eu bine, cand folosim asemenea chip-uri. Adica, nu pot spre exemplu sa fac cu ARM tot ce trebuie ? De ce sa am nevoie de FPGA-uri sau CPLD-uri, sau difera doar metoda de programare si cand alegem una, si cand alegem alta ? Pretul unui ARM e mai mic ca un FPGA sau CPLD ? :scratchchin:

Link spre comentariu
Distribuie pe alte site-uri

ARM e un microprocesor (microcontoller mai precis) care executa instructiuni (software)

FPGA-urile si CPLD urile sunt circuite logice facute din porti logice si registrii (memorie) pe care le poti programa si conecta cum vrei. (ca si cand ai avea o punga de circuite logice NAND. AND OR NOR XOR si flip-flops sau registrii si o gramada de sarme pe care le poti conecta)

FPGA-urile mai moderne contin mai mult decat porti logice si registrii au blocuri dedicate pentru o gramada de functii standard (contollere de memorie externa, PCIexpress, Blocuri aritmetice pentru DSP, memorie SRAM etc.)

Sunt o gramada de aplicatii unde microprocesorele nu fac fata iar realizarea unui circuit dedicat (ASIC - aplication specific integrated circuit) e prea scumpa - aici vin FPGA-urile. Exemple de aplicatii, prelucrare de imagine (video DSP) - prelucrare de semnale DSP (radio receptoare digitale)

Interfete de retea pentru fibra optica, sateliti (unde trebuie sa reconfigurezi hardware-ul cand saltelitul e sus) - FPGA-ul se pote rexonfigura de un numar infinit de ori (configuratia cortilor si a legaturilor dintre ele) - deci poti sa schimbi hardware-ul la orice ora, motiv pentru care se numesc Field Programable Gate Arrays - Adica arie de porti logice programabila "pe teren" (in the Field)

Din pacate e un domeniu greu de invatat complet diferit de electronica uzuala si din pacate nu se poate preda in scoli (intr-un semestru)  totusi daca devii bun in domeniul asta esti aranjat pe viata. (crede-ma fac asta de 28 de ani si am lucrat 7 ani la cei care au inventat FPGA-urile)

RR

 

Editat de roadrunner
Link spre comentariu
Distribuie pe alte site-uri

Deci portile logice din CPLD-uri sau FPGA-uri, sunt ca portile logice dintr-un automat programabil (daca vrem sa-l programam in FB)? Adica le configurez sa fac ceea ce doresti. Aici adaugam daca avem nevoie de blocurile dedicate (ex. de memorie externa) si gata programul! Partea asta am inteles-o!

Acum 8 minute, roadrunner a spus:

Interfete de retea pentru fibra optica, sateliti (unde trebuie sa reconfigurezi hardware-ul cand saltelitul e sus) - FPGA-ul se pote rexonfigura de un numar infinit de ori (configuratia cortilor si a legaturilor dintre ele) - deci poti sa schimbi hardware-ul la orice ora, motiv pentru care se numesc Field Programable Gate Arrays - Adica arie de porti logice programabila "pe teren" (in the Field)

Sa inteleg ca portile logice din FPGA-uri, conexiunile intre ele, pot fi declarate in soft si in functie de anumite intrari (ex. starea unor senzori), sa activeze anumite legaturi intre portile logice ? Am inteles bine ?

Ce platforma hardware pentru un hobist ca mine recomanzi, pe FPGA-uri si CPLD-uri ?

Link spre comentariu
Distribuie pe alte site-uri

Da din punct de vedere dfuntional e la fel - numai ca AP emuleaza functia respectiva in software.

Legaturile dintre porti sunt fixe (sunt ca niste cutiute cu jumperi pe care-i programezi) - sunt segmente de diferite lungimi care se pot interconecta ca sa poti ajunge de oriunde aproape oriunde. Cand programezi nu trebuie ca utilizator sa te gandesti la interconexiuni ci numai la functia logica.

ca sa programezi folosesti unul din limbajele de descriere hardware (HDL - Hardware Description Language) cele doua limbaje sunt VHDL si Verilog.  si nu au nic o legatura cu limbajele de programare (Verilog are sintaxa apropiata de C )

In realitate nu sunt poti logice (ca ar fi prea multe combinatii) ci sunt LUT - look-up tables care sunt imprementate in memorie. De exemplu un LUT4 poate imprementa orice functie logica de patru intarari si 1 iesire (sau 3 sau 2 intrari). Imagineazat-ti look-up table-ul ca tabela de adevar a unei functii logice de patru intrari, adica un tabel cu 16 locatii de 1 bit, care contine rezultate dorite de functia care o doresti.(evident nu trebuie sa faci asta manual tool-urile fac asta automat)

exchivalentul compilatorului in lime FPGA este sintetizor-ul. (adica un software care trasforma ce ai scris in VHDL sau Verilog in porti logice)

FPGA e mult peste hobby - trebuie sa ai o baza solida in Hardware (cand m-am apucat eu de fpga faceam computere cu porti logice de ani buni - fara baza aia va fi foarte greu) dar nu imposibil. Tool-urile sunt free sunt doua companii mari care se ocupa de FPGA, Xilinx si Altera (Altera e acum Intel)

 

RR

PS - Cand proiectezi circuite digitale (nu FPGA) nu mergi la nivel de tranzistor ai blocuri in biblioteca de componente logice (LUT3, LUT4, FF - flip-flop etc.) - cam la fel si la FPGA. diferenta ca la ASIC daca ai o greaseala de logica e de aruncat tot circuitul (la FPGA poti sa corectezi de un numar infinit de ori)

 

Editat de roadrunner
  • Thanks 1
Link spre comentariu
Distribuie pe alte site-uri

  • 3 months later...

De ce in constructia osciloscoapelor digitale pe langa un ARM se foloseste un FPGA ? Partea asta nu prea am inteles-o din explicatiile de mai sus.

Spre exemplu, am vazut pe facebook o reclama la un osciloscop DANIU ADS1013D si citeam un review foarte interesant despre acest osciloscop pe site-ul unui slovac: https://www.elektrolab.eu/blog/ads1013d-2-x-100-mhz-osciloskop-o-velkosti-tabletu?fbclid=IwAR3lTrej3-U0WKNfCkF_AAHLJKWeZ04hhbeewidK8QYi5PgjRvGKulEFin8

Am aplicat google translate si din ce se spune acolo, osciloscopul e construit in jurul urmatoarelor piese:

  1. Două bucăți de TP4058 de la NanJing Top Power Corp ASIC . controlați încărcarea bateriei litiu-ion. Un cip poate furniza un curent de încărcare de 600 mA.
  2. SPX29302T5 de la Sipex , este un stabilizator de tensiune cu o cădere de tensiune joasă de 5 V ~ 3 A.
  3. AMS1117 este un regulator de tensiune cu o cădere de tensiune scăzută de 3,3 V ~ 1 A.
  4. TPS61040 , acesta este un amplificator care probabil furnizează tensiune afișajului.
  5. Din păcate, codul de pe acest cip nu poate fi decriptat.
  6. Este un procesor F1C100S , procesor ARM9 de ultimă generație de la Allwinner Tech . Particularitatea este că, conform fișei tehnice, acest procesor este destinat procesorelor video și audio.
  7. Ciclonul IV de la Altera , FPGA sau poarta programabilă. Un astfel de circuit este format din mii de componente logice programabile. Ele pot fi programate ca funcții logice precum AND, XOR și așa mai departe.
  8. Două ADC-uri de tip AD9288 , care probează două semnale de intrare analogice. Fiecare cip conține două ADC-uri identice pe 8 biți cu o frecvență maximă de eșantionare de 100 MSa / s. Este dificil de văzut cum este posibil să se obțină o rată de eșantionare în timp real de 1 GSa / s cu astfel de cipuri, așa cum susține producătorul. Frecvența de eșantionare hardware este probabil mult mai mică, iar algoritmul de eșantionare se aplică prin intermediul software-ului. Acest lucru nu este neobișnuit, majoritatea osciloscoapelor digitale folosesc aceste tipuri de trucuri pentru a include numere interesante în specificații. Dar nu-l numiți în timp real!
  9. Aceasta este o memorie flash de 16 Mb tip W25Q16 de la Winbond . Este probabil să conțină firmware-ul osciloscopului. În dreapta acestui cip sunt mai multe plăcuțe în care puteți instala fără îndoială un conector de programare.
  10. Două bucăți de BU4317G-TR de la Rohm Semiconductor . Acestea sunt detectoare de tensiune care probabil joacă un rol în detectarea nivelului de tensiune la intrări și controlează 2 x 3 relee (componente albe) în atenuatoarele de intrare prin firmware.

 

 

Link spre comentariu
Distribuie pe alte site-uri

Pai hai sa-ti dau un exemplu simplu.

 

Ai sa zicem 2 canale de date care vin de la ADC cu 100MS/s  (100 miliaoane de esantioane pe secunda) - la doua canale ai de doua ori pe atat. trebuie sa le scrii in memorie sa le filtrezi (ca ai si zgomot) sa le afisezi si eventual sa le analizezi (ca sa masori amplitudine frecventa) sau la osciloscoapele mai bune sa faci analiza Fourier. Nu ai timp sa faci toate astea per rand (secvential) pentru ca noile esantioane de inunda inainte sa termini de facut calculele cu un CPU clasic (sau MCU).

Singura sansa de succces e sa faci toate astea cu un DSP dar din pacate un DSP discret (care e un fel de CPU mai specializat) nu face fata la 100MSamples/s din cauza ca e in mare parte secvential si el,

Sau

sa implementezi functiile enumerate mai sus in blocuri specializate dispuse intr-un pipe line. (practic procesezi pe masura ce datele curg fara sa mai ai nevoie sa scrii si sa citesti blocuri din memorie. (ca la o linie de asamblare din industrie)

 

Exemplu simplu - la fiecare 10ns vin doua numere A,B care trebuie sa le inmultesti si sa scoti rezulatul C pe un port de iesire.

 

Pseudo cod pentru un CPU imaginar care executa o instuctiune la fiecare perioada de ceas. (in realitate sunt putine procesoare care pot executa asa eficient dar sa zicem ca exista)

 

Citesti valoare A de la un port de intrare in registrul R0 din CPU

Citesti valoare B de la un port de intrare in registrul R1 din CPU

Executi instructiounea de multiplicare a registrului R0 cu R1

Citesti rezultatul din registrul R2 unde se afla rezultatul si-l scrii la un port de iesire.

 

deci ai avea nevoie de 4 perioade de clock ca sa executi pseudo codul de mai sus. (idealistic ca de fapt ai mai multe perioade)

 

Sa zicem ca procesorul tau ruleaza la 1 GHz ( 1 ns perioada de clock) - deci are nevoie de 4ns sa execute codul de mai sus. Esantionele vin la fiecare 10ns (100Msamples/s) - deci din start procesorul tau e ocupat 4ns la fiecare 10ns ca sa faca doar 1 inmultire a doua numere. (40% incarcare) - ce te faci daca mai trebuie sa aduni un numar? sau scrii in memorie? totul trebuie sa se faca in 10ns inainte sa te loveasca urmatorul esantion.

 

Acum cu FPGA - exista sute de blocuri in FPGA-urile din ziua de azi care stiu sa faca inmultiri (si adunari si multe altele) care pot inmultii doua numere o singura perioada de clock si o pot face la un clock de 200-400Mhz.

 

Deci un singur multiplicator din fpga poate inmultii 2 numere in 4ns (la un clock de 250Mhz) - dar nimic nu te opreste sa folosesti 100 de multplicatoare simultan si sa faci 100 de inmultiri in 4ns (se numeste paralellism) - cum faci 100 de multiplicari in 4ns cu un CPU?

 

Deci FPGA-rile sunt bune la calcule care se pot paraleliza sau la calcule recursive cu esantioane de date care curg continuu. (procesare de semnal)

 

Daca vrei mai am o gramada de exemple.

RR

 

 

 

Link spre comentariu
Distribuie pe alte site-uri

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
 Share

  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.
×
×
  • Creează nouă...

Informații Importante

Folosim cookie-uri și tehnologii asemănătoare pentru a-ți îmbunătăți experiența pe acest website, pentru a-ți oferi conținut și reclame personalizate și pentru a analiza traficul și audiența website-ului. Înainte de a continua navigarea pe www.tehnium-azi.ro te rugăm să fii de acord cu: Termeni de Utilizare.

ATENTIE !!! Functionarea Tehnium Azi depinde de afisarea de reclame.

Pentru a putea accesa in continuoare site-ul web www.tehnium-azi.ro, va rugam sa dezactivati extensia ad block din browser-ul web al vostru. Dupa ce ati dezactivat extensia ad block din browser dati clic pe butonul de mai jos.

Multumim.

Apasa acest buton dupa dezactivarea extensiei Adblock