Jump to content
Sign in to follow this  
dan_e

Ce are in special un FPGA sau un CPLD fata de un uC obisnuit pe 6, 16 sau 32 biti ?

Recommended Posts

Am citit o gramada de teorie dar inca nu sunt lamurit in totalitate. Nu stiu daca s-a intrebat asta dar as vrea sa stiu ce are in special un FPGA sau un CPLD fata de un uC obisnuit pe 6, 16 sau 32 biti ? Deci, ce pot sa fac cu unele sau cu altele? Sau cand apelez la FPGA?

 

stima

dan

Edited by dan_e

Share this post


Link to post
Share on other sites

Subiectul asta parca s-a discutat candva. Citeste cateva tutoriale (face cat zece cuvinte romanesti spuse aci):

http://www.eecg.toronto.edu/~jayar/pubs/brown/survey.pdf

http://cpu.kongju.ac.kr/ezboard/db/data_file/upload/200302040006/fpga_cpld_tut.pdf

http://www.altera.com/literature/manual/mnl_qts_quick_start.pdf

http://www.circuitstoday.com/understanding-fpga-and-cpld

 

Nu are rost sa aprinzi leduri si sa le stingi cu FPGA sau CPLD. Pentru asta sunt microcontrolere pe 8 biti sau astabile cu porti logice (sau tranzistoare).

 

De retinut partea astea publicata intr-unul din link-urile web de mai sus:

FPGA, short for Field-Programmable Gate Array, is a type of a programmable logic chip. It is great chip as it can be programmed to do almost any kind of digital function. FPGA?s architecture allows the chip to have a very high logic capacity. It is used in designs that require a high gate count and their delays are quite unpredictable because of its architecture. The FPGA is considered as ?fine-grain? because it contains a lot of tiny logic blocks that could reach up to 100,000. It is with flip-flops, combination logic, and memory. It is designed for more complex applications.

 

On the other hand, CPLD (Complex Programmable Logic Device) are designed using EEPROM. It is more suitable in small gate count designs and since it is has a less complex architecture, the delays are much predictable and it is non-volatile. CPLD is often used for simple logic applications. It contains only a few blocks of logic ?? but larger ? that reaches up to 100. Having said that, CPLDs are considered as ?coarse-grain? type of devices. CPLDs offers a much faster input to output duration because of its simpler, ?coarse grain? architecture.

Share this post


Link to post
Share on other sites

deci prog,

 

ce are special un fpga? ca link-uri stiu sa puna toti.

RR

Edited by roadrunner

Share this post


Link to post
Share on other sites

roadrunner, explica tu, te rog, ca si eu sunt saturat de link-uri.

Share this post


Link to post
Share on other sites

as putea sa pun link-uri dupa care sa spun ca n-are valoare ce vorbim noi aici, dar n-o sa fac asta pentru FPGA-urilie sunt o tehnologie care cel putin mie mi-a folosit enorm in cariera, si am mari satisfactii lucrand cot la cot cu cei care au inventat-o.

 

cel mai bine sa-ti dau cateva exemple, acum cateva zile mi-au venit 2 placi de dezvoltare de la un fabricant de semiconductori, ele contin fiecare cate un convertor analog digital care poate sa esantioneze cu 4 Mesantioane pe secunda, iar rezultatul este pe 14 biti. Convetorul asta are o interfata asemanatoare cu SPI (in sensul ca numa scuipa datele eu nu trebuie sa scriu) - iar conversia se face pe baza semnalelor busului SPI. Deci eu cititnd din convetror el face conversia urmatoare si tot asa.

Eu avand doua convertoare care trebuie sa esantioneze la monente foarte precise unul relativ la altul (in quadratura, adica cu un defazaj in timp de 90 grade) trebuie sa construiesc doua bus-uri SPI care sunt defazate in timp cu 90 de grade, si la fiecare 20 biti ai clock-ului SPI fac o conversie (asta rezulta frecventa clock-ului de 20*4 Msample - adica o frecventa de 80 Mhz a clock-ului serial)

 

deci numai ca sa tin convertoarele in esantionare, am doua busuri SPI cu 80Mhz Clock, si trebuie sa le mentin defazate cu 90 grade. - deja aici microcontrolerele nu mai au treaba, dar sa mergem mai departe, pana aici de abia am rezolvata partea de conversie. (presupunem ca exista un MCU care poate avea doua busuri SPI independente si sunt capabile de 80Mhz)

 

pana in punctul asta merge fara probleme un CPLD ieftin, in car ese pot face fara probleme doua interfete SPI care sa funtioneze la 80Mhz (majoritatea MCU nu pot, nici chiar cele bazate pe ARM) - deci un CPLD de 2$ poate face chestia asta si un mcu cu ARM nu poate? dar sa mergem mai departe ca lucrurile sunt mai nasoale. (mai departe nici un CPLD nu mai poate, pana aici i-a mers)

 

 

Dupa ce am deserializat datele de la ADC practic am 2 cuvinte de 14 biti fiecare cu frecventa de 4Mhz, e aici incepe greul pentru micropocesor.

sa zicem ca fiecare numar trebuie inmultit cu ceva si rezultatele adunate intre ele. Iar rezultatul trebuie scris la un port extern de 16 biti.

 

deci ADC1 * K1 + ADC2 * K2 -> PORT

 

ha sa incercam sa scriem un pseudocod,

 

Load ACC cu ADC ADC1 in accumulator

Load K1 in Reg 1

Multiply ACC*R1 -> rez in ACC

PUSH ACC (salveaza rezultatul)

Load ACC cu ADC ADC1 in accumulator

Load K2 in Reg 1

Multiply ACC*R1 -> rez in ACC

Move ACC - R1

POP ACC

ADD ACC + R1

WRITE ACC la portul extern

 

in total sunt 11 operatii - pentru simplitate noi zicem ca avem cel mai efiicent MCU si executa fiecare instructiune pe 1 clock. (Nici I7 de la intel nu poate sa multiplice doi intregi pe un clock, iar in realitate e ceva mai complicat pentru ca dupa inmultire rezultatul se dubleaza ca numar de biti, si necesita niste operatii in plus)

deci ca sa faci doua inmultiri si o adunare a doua esantoiame care vin la 4Mhz, trebuie sa faci tota asta in 11 pasi, ce rezulta la o frecventa de clock de 44MHz.

 

acum imagineaza-ti ca mai ai un bloc de procesare identic cascadat cu primul, care scade esantioamele si le mai face ceva - deja ai nevoie de 88 MHz ....hm se-mpute treaba, de cate ori mai adaugi un bloc trebuie mai mult CPU ca asa poata procesa semnalele astea. Sa mentin curgerea datelor de la un bloc la altul, trebuie sa am buffere ca sa dau entionele la blocul urmator, trebuie sa ma misc repede.

 

Acum imagineazati ca iti vin esnatiamele cu 100MHz - si trebuie sa faci ceva cu ele in tervalul dintre ele, care e 10ns, care operatii poate sa faca un microprocesor in 10ns? pai cu I7 daca nu face altceva (fara OS fara nimic) face vro 32-34 maxim/core? - deci nici cel mai iute procesor de care stim nu poate sa faca asta? sa ia doua numere ca le inmulteasca cu niste valori sa le adune intre ele?

Pai un fpga poate face asta fluierand, ca are avantajul paralelismului, adica nu conteaza cate operatii mai are de facut in plus pentru ca le poate face "concurent"

fara sa-i afecteze performanta, iar enantiamele pot fi trasmise blocului urmator, si a celui urmator si tot asa fara sa fie afectata perotmanta in nici un fel.

 

Deci in concluzie FPGA sunt bune unde ai date care curg pe care trebuie sa le procesezi in timp ce curg (data flow) - deci in networking, procesarea semnalelor etc. Mai exista avantajul 2 care e la fel de important, nu contin logica fixa ele pot fi reconfigurate, rea aranjate, dupa bunul plac al utilizatorului, sunt cel mai fain teren de joaca pentru persoanele creative.

RR

Edited by donpetru

Share this post


Link to post
Share on other sites

La postul de mai sus, imi cer scuze pentru numeroasele greseli de ortografie si exprimare, sunt datorate grabei si oboselii.

unde am spus ca FPGA-ul face "concurent" operatiile astea, gilimelele nu-si aveau rostul, chiar le face concurent, intentia mea era sa subliniez concurent nu sa pun ghilimele.

RR

 

PS - daca unul din moderatori mi-ar da ocazia sa corectez postul anterior as aprecia gestul (am scris oribil)

RR

Edited by roadrunner

Share this post


Link to post
Share on other sites

Trimite-mi postul anterior (varianta corectata) intr-un mesaj privat si dupa aceea o sa inlocuiesc continutul de mai sus.

 

Numai bine

Share this post


Link to post
Share on other sites

Donpetru,

ti l-am trimis pe email, cu mesageria forumului nu am reusit.

RR

Share this post


Link to post
Share on other sites

Care adresa de email, ca pe adresa redactiei nu am primit nimic. Si de ce spui ca nu functioneaza mesageria forumului ?

Share this post


Link to post
Share on other sites

cand incerc sa folosesc mesageria refuza cu indarjire, vezi imaginea atasata

iar de trimis am trimis pe email-ul de pe @yahoo.com

RR

post-1482-0-35617200-1374015739_thumb.png

Edited by roadrunner

Share this post


Link to post
Share on other sites

Aveam casuta de mesaje private plina. Din acest motiv aparea eroarea de mai sus.

Intre timp am modificat continutul postului nr.5 cu continutul mesajului pe care mi l-ai trimis pe mail.

 

In cel mult 24 de ore o sa sterg mesajele offtopic de aici.

Numai bine

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We use cookies and related technologies to improve your experience on this website to give you personalized content and ads, and to analyze the traffic and audience of your website. Before continuing to browse www.tehnium-azi.ro, please agree to: Terms of Use.