This is an old revision of the document!
= Laboratorul 3 - Sintetizarea modulelor Verilog = În laboratoarele anterioare au fost prezentate elementele principale ale limbajului Verilog și au fost descrise o serie de circuite digitale, folosind acest limbaj de descriere a hardware-ului. Verificarea comportamentului descris s-a făcut folosind simulatorul ISim, inclus în mediul de dezvoltare Xilinx ISE.
Scopul final pentru un cod Verilog este însă de a realiza implementări hardware care se comportă precum descrierea Verilog. Acest lucru poate fi obținut în mod automat printr-un proces numit sintetizare (eng. synthesis). Un utilitar de sintetizare preia descrierea Verilog sau VHDL și poate genera fișiere de configurare pentru circuite integrate reconfigurabile (ex. PLA, CPLD, FPGA) sau chiar măștile necesare pentru realizarea unui ASIC (Application-Specific Integrated Circuit) prin diferite tehnologii *MOS.
Există mai multe utilitare capabile de sintetizarea circuitelor digitale, de la diverși producători, care sunt în principal axate pe anumite tehnologii specifice acestora. Pentru programarea plăcilor de dezvoltare de la laborator, care sunt dotate cu FPGA-uri de la Xilinx, se folosește mediul de dezvoltare Xilinx ISE care, pe lângă simulatorul ISim, conține și un utilitar de sintetizare.
Un FPGA (Field-Programmable Gate Array) este un circuit integrat care poate fi programat pentru a se comporta ca orice alt circuit digital. Spre deosebire de un procesor, care stochează și execută instrucțiuni, programarea unui FPGA înseamnă reconfigurarea hardware a acestuia pentru a realiza funcționalitatea dorită.
Primele FPGA-uri au fost introduse în anii '80, iar utilizarea lor principală era în testarea prototipurilor pentru ASIC-uri. Avantajele aduse de FPGA-uri au făcut însă ca ele să fie folosite acum, atât pentru testare, cât și în multe alte domenii precum prelucrarea de semnale, criptografie și HPC (High Performance Computing).
FPGA-urile sunt construite dintr-un număr mare de blocuri logice configurabile (eng. configurable logic block - CLB), identice, interconectate printr-o matrice de fire și switch-uri programabile (<imgref interconnect>).
<imgcaption interconnect | Structura unui FPGA></imgcaption>
În general, un CLB este compus dintr-un element combinațional reconfigurabil și un bistabil. De obicei elementul combinațional este un LUT (Look-Up Table), iar bistabilul este de tip D. Arhitectura unui bloc diferă însă de la producător la producător, motiv pentru care trebuie folosite utilitarele de sintetizare specifice producătorului. <imgref clb> prezintă un CLB tipic.
<imgcaption clb | Configurable Logic Block></imgcaption>
Numărul de celule dintr-un FPGA variază de la model la model, putând ajunge până la câteva sute de mii și chiar milioane. Un exemplu este familia Virtex-7 de la Xilinx care conține peste 2 milioane de celule.
În cadrul laboratorului se folosește placa de dezvoltare Spartan3E Starter Board de la Digilent, care este dotată cu un FPGA din familia Spartan-3E (XC3S500E) produs de către Xilinx. Acest FPGA oferă ~500.000 de porți logice organizate în ~10.000 de celule. Pe lângă cipul FPGA, placa de dezvoltare oferă și o serie de periferice conectate la acesta, cum ar fi:
Lista completă a perifericelor, precum și modul de interconectare și folosire a acestora împreună cu cipul FPGA pot fi consultate în manualul de utilizare a plăcii.
Mediul de dezvoltare Xilinx ISE permite programarea cipurilor FPGA produse de către Xilinx. Versiunea WebPACK poate fi folosită pentru a sintetiza circuite și programa cipurile FPGA din gama low-cost ale acestui producător, cum ar fi familia Spartan.
În Xilinx ISE sintetizarea unui circuit se face selectând modul Implementation și este împărțită în două etape. În prima etapă, reprezentată de procesul Synthesize, este generată o descriere generică a circuitului ce urmează a fi implementat, sub forma unei liste de primitive și conexiunile dintre ele. În a doua etapă, reprezentată de procesul Implement Design, primitivele sunt mapate pe resursele oferite de cipul FPGA țintă, iar apoi conexiunile dintre ele sunt rutate prin matricea de interconectare din interiorul FPGA-ului.
Nu toate modulele pot fi expandate până la nivel de porți logice. În procesul de sintetizare, Xilinx ISE va infera anumite funcționalități precum: sumatoare (eng: adders), comparatoare (eng: comparators), multiplicatoare (eng: multipliers), numărătoare (eng: counters) etc. care nu mai pot fi expandate. Lista tuturor funcționalităților inferate se găsește în Synthesis Report disponibil în Design Summary/Reports din lista de procese.
Pentru a putea testa un modul Verilog pe placa de dezvoltare, intrările și ieșirile acestuia trebuie rutate la pinii cipului FPGA. Acest lucru se face cu un fișier de constrângeri care asignează fiecărui bit dintr-un port al modulului un anumit pin al cipului. Alegerea pinilor care se conectează la porturile modulului Verilog se face în funcție de perifericele care vrem să producă intările și să primească ieșirile modulului. Legăturile dintre pinii cipului FPGA și perifericele plăcii de dezvoltare se găsesc în manualul de utilizare.
În final, programarea cipului FPGA se face cu fișierul de configurare generat pentru acesta (extensia .bit). Urmăriți tutorialul de programare a FPGA-ului pentru a vedea cum se realizează acest lucru.
Modulul top-level poate fi modificat prin click-dreapta pe un alt modul și selectarea opțiunii Set as Top Level Module. În această situație, fișierul de constrângeri trebuie actualizat pentru a folosi porturile noului modul top-level.
+
. a
switch-urile SW0-SW3, pentru b
butoanele BTN_NORTH, BTN_EAST, BTN_SOUTH și BTN_WEST, iar pentru sel
butonul ROT_CENTER. Afișati ieșirea modulului pe LED-urile LED0-LED4.