Domenii conexe
Introducere
Aceasta pagina exista pentru a va oferi cateva directii de invatare/cercetare, in cazul in care v-a placut aceasta materie si sunteti entuziasmati sa o aprofundati. Fiecare capitol va avea cateva propozitii despre respectivul domeniu si un link cu unde pot fi gasite mai multe informatii.
Aceste domenii si teme sunt mai avansate si se recomanda intai finalizarea cursului de CID.
Verificare Functionala Pre-Siliciu
A fabrica un chip implica sume semnificative mai ales in etapa initiala de creere a mastilor. Din acest motiv un chip care se fabrica trebuie sa nu aibe defecte.
Pentru a preveni defectele logice se ruleaza un numar urias de simulari cu tot felul de scenarii asupra codului SystemVerilog/VHDL ce urmeaza a fi sintetizat. Domeniul care se ocupa cu construirea testbench-ului si a testelor ce vor fi rulate se numeste Verificare Functionala Presiliciu (Pre-Silicon Functional Verification).
Pentru a putea scrie un cod cat mai general si reutilizabil, un inginer de verificare are nevoie de cunostiinte atat de circuite digitale, cat si de programare obiect orientat.
In prezent se foloseste metodologia "UVM". Un loc de unde puteti incepe sa intelegeti aceasta metodologie este: cluelogic_uvm.
Procesoare
Prin natura sa, un FPGA permite flexibilitate maxima privind circuitele ce sunt puse pe el. Procesorul (fie ca vorbim de cele relativ simple din microcontroller, cele foarte complexe din calculatoarele moderne, sau orice intre acestea) este un circuit digital ce poate fi sintetizat din cod SystemVerilog. Se realizeaza astfel sisteme complexe de calcul, cu unul sau mai multe procesoare, care uzual ajuta la coordonarea unui accelerator sau a altui sistem pus langa acestea in FPGA.
Daca doriti aprofundarea acestui subiect, puteti consulta cursurile de Arhitectura Microprocesoarelor (sau chiar sa incercati sa construiti versiuni rudimentare ale procesoarelor prezentate acolo in SystemVerilog) sau cursurile/laboratoarele de Arhitectura Sistemelor de Calcul de aici: Arhitectura Sistemelor de Calcul
De asemenea se poate intra pe open cores. Acest site contine numeroase core-uri ce pot fi studiate sau sintetizate si folosite.
Vivado - Zynq & MicroBlaze
Tot din categoria procesoare, Xilinx ne ofera 2 variante, in functie de placa pe care o avem la dispozitie. Este utila o diferentiere a procesoarelor in 2 categorii:
1) hard cores - procesoare ce exista fizic pe placa sub forma de siliciu
2) soft cores - procesoare ce sunt sintetizate si instantiate pe FPGA din LUT-uri.
Sistemele de tip Zynq ofera pe langa FPGA si un procesor hard ARM dual core. Placa din laborator PYNQ-Z2 este un astfel de sistem.
In cazul in care placa contine doar FPGA, se poate folosi un procesor MicroBlaze care este de tip soft core.
Ambele procesoare se instantiaza folosind Vivado Block Design si sunt apoi programate in C folosind Vitis.
Un tutorial despre programare sistemelor ZYNQ puteti gasi aici: Tutorial ZYNQ
Un tutorial despre programarea sistemelor cu MicroBlaze puteti gasi aici: Tutorial MicroBlaze
Vivado - IP si Block Design
Cu cat proiectele devin mai mari si cu cat creste complexitatea submodulelor, cu atat devine necesarea reutilizari unor module ce au fost testat anterior si abordarea proiectului ca fiind alcatuit din mai multe IP-uri (Intellectual Property) ce comunica intre ele pe un anumite protocol.
Pentru a usura aceasta sarcina, Vivado pune la dispozitia utilizatorului un mediu grafic in care sa instantieze si conecteze astfel de IP-uri. Se pot utiliza IP-uri puse la dispozitie de Xilinx sau se pot genera IP-uri proprii.
Protocolul de comunicatie intre componente folosit de Xilinx se numeste AXI.
Protocoale de comunicatie
Pentru a putea avea componente facute de ingineri diferiti care sa poata comunica intre ele, este nevoie de protocoale clare ce guverneaza transmisia informatiei.
Cei de la Xilinx folosesc protocolul AXI pentru comunicatie in cadrul aceluiasi fpga.
Acest protocol are mai multe versiuni, o versiune completa ce cuprinde toate semnalele pentru o folosire cat mai generalizata, o versiune cu mai putine semnale, mai usor de implementat, ce contine semnalele vitale transmisiunii si o versiune de tip "stream" pentru transmisia datelor in cantitati mari.
Pentru o mai buna intelegere a protocoalelor se poate vedea: Reference Manual sau pentru o explicatie mai succinta: AXI-explicatii rapide sau AXI-explicatii rapide2
Exista si multe alte protocolae de comunicatie folosite in afara FPGA-ului sau pentru comunicarea cu exteriorul. Si in interiorul FPGA-ului se pot folosii protocoale custom, specifice aplicatiei dorite. Este totusi de dorit, pe cat posibil sa se foloseasca protocoale deja implementate pentru a fi mai usor celorlalti ingineri sa interactioneze cu componenta respectiva.
HLS
HLS (High Level Synthesis) reprezinta generarea si sinteza circuitelor pornind de la limbaje de nivel inalt (uzual C). Astfel se doreste reducerea timpului de lucru deoarece:
1) Inginerul nu mai trebuie sa invete un limbaj nou (SystemVerilog/VHDL) ci poate sa foloseasca un limbaj de nivel inalt pe care il cunoaste deja.
2) Fiind un limbaj de nivel inalt, sansele sa apara erori/bug-uri sunt mai scazute decat la un limbaj de nivel foarte jos.
3) Procesul de debug poate fi usurat.
4) Codul scris este mai scurt.
Xilinx ofera capabilitati de HLS prin programul Vitis HLS. Exmple privind Vitis HLS pot fi gasite aici: Vitis HLS exemple
O observatie importanta este faptul ca in unele situatii, circuitul rezultat prin HLS poate sa iasa semnificativ mai mare decat un circuit proiectat de mana in SystemVerilog, astfel trebuie pus in balanta performanta dorita si timpul avut la dispozitie pentru dezvoltarea respectivului produs.