Impulse C

limbaj de programare

Impulse C este un subset al limbajului de programare C combinat cu o bibliotecă de funcții compatibilă cu limbajul C ce suporta programarea paralelă. Acest limbaj a fost conceput în mod special pentru aplicații software ce urmează a fi implementate pe dispozitive FPGA. Este dezvoltat de firma Impulse Accelerated Technologies ce are sediul în Kirkland, Washington.

Generalități

modificare

Intrumentul de sinteză hardware de nivel înalt CoDeveloper include un compilator de Impulse C și o librărie de funcții care sunt menite pentru dezvoltarea aplicațiilor bazate pe FPGA. Impulse C este compatibil cu standardul ANSI C, lucru ce permite utilizarea instrumentelor C standard pentru proiectarea si verificarea aplicațiilor ce urmează a fi implementate pe FPGA. Compilatorul Impulse C acceptă instrucțiuni din limbajul C și generează hardware FPGA in forma fișierelor Hardware Description Language (HDL). Impulse C permite proiectanților de sisteme embedded cat și programatorilor să accelereze implementarea programelor C pe dispozitive FPGA.

Modelul de programare

modificare

Impulse C suportă o variantă a modelului de programare de tip Communicating Sequential Process (CSP), ramânând în același timp compatibil cu intrumentele C standard cu ar fi debugger-ele și profiler-ele. Impulse C este destinat aplicațiilor bazate pe streaming de date dar poate suporta și modele de programare alternative printre care și folosirea memoriei partajate pe post de mecanism de comunicare.

Într-o aplicație Impulse C de streaming, procesele hardware și software comunică in principal prin stream-uri de date buffer-ate care sunt implementate direct in hardware. Buffer-ele de date sunt implementate folosind cozi dublu-ceas (dual-clock FIFO) generate de compilator. Această abordare face posibilă scrierea aplicațiilor paralele la un nivel de abstractizare relativ ridicat, făra a mai fi nevoie de sincronizare ciclu-cu-ciclu.

Folosind Impulse C, o aplicație poate fi partiționată pentru a crea o implementare multi-proces care este segmentată în componente hardware și software sau poate fi implementată direct în FPGA. De exemplu, o aplicație de filtrare de imagine poate fi descrisă ca o colectie de procese pipeline paralele, implementate în Impulse C folosind una sau mai multe subrutine C.

În ceea ce privește partea software a aplicației, pe un procesor FPGA embedded de exemplu, funcțiile din librăria Impulse C sunt folosite pentru deschiderea și închiderea stream-urilor de date, citirea sau scrierea stream-urilor și, daca se dorește, trimiterea unui mesaj de status sau interogarea pentru rezultate. Pentru optimizarea comunicării procesor-FPGA, citirea și scrierea stream-urilor de date pot fi implementate ca operații care exploatează interfețele de bus (interne sau externe) specifice FPGA.

Pe partea hardware a aplicațiilor, funcțiile din librăria Impulse C și alte instrucțiuni C sunt compilate pentru a genera implementări hardware paralele echivalente sub forma unor fișiere HDL sintetizabile.

La baza modelului de programare al Impulse C stau procesele și stream-urile. Procesele sunt sincronizate în mod independent, executând în mod concurent segmente ale aplicației. Procesele hardware sunt definite folosind un subset al limbajului C standard, prelucrează datele de intrare și generează ieșirile specifice. Într-o aplicație uzuală datele curg de la proces la proces prin intermediul stream-urilor buffer-ate sau prin intermediul mesajelor și memoriei partajate. Caracteristicile fiecărui stream, printre care și lățimea și adâncimea fiecărei cozi generate poate fi specificată in aplicația C.

Aplicații și platforme

modificare

Impulse C este utilizat pentru aplicații ce țin de prelucrarea numerică a semnalelor pe sisteme embedded precum și pentru accelerarea aplicațiilor computaționale de înaltă performanță din domeniul analizei financiare, bioinformaticii și nu în ultimul rând al calculului științific.

Altera Nios II și Xilinx MircoBlaze și PowerPC sunt câteva din platformele FPGA ce suportă Impulse C.

Concluzii

modificare

Datorită numarului enorm al porților logice programabile dintr-un FPGA, o aplicație poate fi segmentată în mai multe nuclee, fiecare rulând în mod paralel pe calea sa hardware din interiorul dispozitivului. FPGA fiind paralele prin natura lor, diferitele procese nu trebuie să concureze pentru aceleași resurse. Impulse C permite programatorilor care nu sunt familiarizati cu limbaje de descriere hardware să exploateze avantajele inerente ale implementării unui algoritm pe un FPGA, folosind un instrument mai apropiat de programatori și anume limbajul ANSI C.

Legături externe

modificare