lucrarea 1 familiarizare cu programarea fpgaatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/lucrarea...

16
Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrării este acela de a parcurge paşii de la definirea unui proiect până la înscrierea fişierului de configurare în circuitul FPGA şi testarea funcţionalităţii acestuia folosind resursele hardware şi software existente, şi anume placa de dezvoltare XSA-50 şi IISE WebPack. Desfăsurarea lucrării prin etapele sale va conţine următoarele puncte: Cum se porneşte un proiect FPGA Cum se leagă un design de un anumit tip de circuit FPGA Cum se descrie un circuit logic folosind VHDL şi/sau schematic Cum se detectează erorile sintactice Cum se sintetizează un netlist de la o descriere de circuit. Cum se potriveşte netlist-ul într-un FPGA. Cum se generează un bitstream Cum se descarcă un bitstream într-un FPGA Cum se testează FPGA-ul programat. Pentru început se pune problema realizării unei logice simple care sa fie încărcată într-un FPGA. Cum am arătat mai sus, dispunem deja de un circuit FPGA, o placă de dezvoltare-testare şi un sistem de programe pe care ne putem baza ca să putem rezolva problema concretă. După definirea clară a problemei se realizează un nou proiect în ISE Project Navigator care este mediul software de dezvoltare. Mediul de programare dispune de 4 ferestre pentru afişarea surselor proiectului, o fereastră de editare, una de alegere a proceselor ce se doresc a fi executate şi in final o fereastră pentru afişarea mesajelor (evidentiate in figura urmatoare). Programarea FPGA presupune finalizarea următoarelor etape care vor fi parcurse în exemplul ce va urma: 1. Descrierea circuitului logic folosind un limbaj de descriere hardware hardware description language (HDL) cum ar fi VHDL sau Verilog. De asemenea se poate introduce şi în schematic. 2. Se transformă HDL sau schema în netlist (lista de legături) prin folosirea unui program care sintetizează logica (logic synthesizer). Netlist-ul este o descriere a porţilor logice din design şi modul de interconectare. 3. Se folosesc uneltele de implementare (implementation tools) pentru a realiza maparea porţilor logice şi interconexiunile din FPGA. FPGA-ul este constituit din blocuri logice configurabile (configurable logic blocks), care pot fi descompuse în tabele look-up tables care realizează operaţiile logice. CLB şi LUT sunt conectate folosind diferite resurse de rutare. Unealta software de mapare colectează netlistul porţilor într-un grup care se potriveşte unui LUT şi apoi se foloseşte modulul de plasare şi rutare (place & route tool) care atribuie grupul unui CLB specific prin închiderea/deschiderea switch-urilor în matricea de rutare pentru a le conecta împreună.

Upload: doandiep

Post on 16-Mar-2018

240 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Lucrarea 1

Familiarizare cu programarea FPGA

Scopul lucrării este acela de a parcurge paşii de la definirea unui proiect până la

înscrierea fişierului de configurare în circuitul FPGA şi testarea funcţionalităţii acestuia folosind resursele hardware şi software existente, şi anume placa de dezvoltare XSA-50 şi IISE WebPack.

Desfăsurarea lucrării prin etapele sale va conţine următoarele puncte:

• Cum se porneşte un proiect FPGA • Cum se leagă un design de un anumit tip de circuit FPGA • Cum se descrie un circuit logic folosind VHDL şi/sau schematic • Cum se detectează erorile sintactice • Cum se sintetizează un netlist de la o descriere de circuit. • Cum se potriveşte netlist-ul într-un FPGA. • Cum se generează un bitstream • Cum se descarcă un bitstream într-un FPGA • Cum se testează FPGA-ul programat.

Pentru început se pune problema realizării unei logice simple care sa fie încărcată într-un FPGA.

Cum am arătat mai sus, dispunem deja de un circuit FPGA, o placă de dezvoltare-testare şi un sistem de programe pe care ne putem baza ca să putem rezolva problema concretă. După definirea clară a problemei se realizează un nou proiect în ISE Project Navigator care este mediul software de dezvoltare. Mediul de programare dispune de 4 ferestre pentru afişarea surselor proiectului, o fereastră de editare, una de alegere a proceselor ce se doresc a fi executate şi in final o fereastră pentru afişarea mesajelor (evidentiate in figura urmatoare).

Programarea FPGA presupune finalizarea următoarelor etape care vor fi parcurse în exemplul ce va urma: 1. Descrierea circuitului logic folosind un limbaj de descriere hardware hardware description language (HDL) cum ar fi VHDL sau Verilog. De asemenea se poate introduce şi în schematic. 2. Se transformă HDL sau schema în netlist (lista de legături) prin folosirea unui program care sintetizează logica (logic synthesizer). Netlist-ul este o descriere a porţilor logice din design şi modul de interconectare. 3. Se folosesc uneltele de implementare (implementation tools) pentru a realiza maparea porţilor logice şi interconexiunile din FPGA. FPGA-ul este constituit din blocuri logice configurabile (configurable logic blocks), care pot fi descompuse în tabele look-up tables care realizează operaţiile logice. CLB şi LUT sunt conectate folosind diferite resurse de rutare. Unealta software de mapare colectează netlistul porţilor într-un grup care se potriveşte unui LUT şi apoi se foloseşte modulul de plasare şi rutare (place & route tool) care atribuie grupul unui CLB specific prin închiderea/deschiderea switch-urilor în matricea de rutare pentru a le conecta împreună.

Page 2: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

4. Dupa ce faza de implementare este completă, un alt program extrage starea switch-urilor din matricea de rutare şi genereaza şirul de biţi (bitstream) unde “1” si “0” corespund stării de deschis sau respectiv de închis a comutatoarelor. 5. Bitstream-ul este înscris în circuitul FPGA. XILINX ISE oferă editor HDL şi schematic, sintetizor logic, generator de bitstream. XSTOOLs de la XESS oferă utilitare de descarcare a bitstream in FPGA de pe placa de dezvoltare.

Principalele 4 ferestre in mediul de programare ISE “Project Navigator”

Primul design folosind placa de dezvoltare XSA-50 Problema: Să se realizeze un decodor pentru display LED cu 7 segmente folosind placa de dezvoltare XSA-50– intrare de 4 biti si ieşirea de 7 pentru a afişa cifre de la 0-F in hexadecimal

Page 3: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Schema pentru decodorul de LED

1. Definirea unui proiect nou

Pentru a defini un design se lanseaza Project Navigator şi se crează un proiect nou : File -> New Project item, de exemplu pentru placa de dezvoltare XSA-50: Spartan II (familia de circuite), XC2S50 (circuitul), TQ144 (capsula), -5 (gradul de viteza)

Se introduc numele proiectului şi anume L1, locul unde se doreşte a fi creat ...\ARC-

lab\L1\work, circuitul folosit şi limbajul în care se va face descrierea (VHDL). La

alegerea tipului de circuit se setează următorii parametri Family, Device, Package si Speed . (Familia din care face parte circuitul, tipul de circuit, capsula şi gradul de viteza)

Folosind documentaţia [14] putem compara datele pentru diverse circuite din familia Spartan 2 si 3 folosite pentru diferite variante de placi de dezvoltare.

Page 4: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Apoi alegem Project->New Source şi se crează un modul VHDL (VHDL Module) cu numele leddcd. Acesta se va adăuga la proiectul definit şi va descrie funcţionarea LED decoder-ului.

În fereastra Define Module se declară intrările şi ieşirile circuitului. (în cazul nostru 4 intrări şi 7 ieşiri; 0-3 respectiv 0-6 biţi.

Page 5: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

ÎÎn acest moment panoul de editare afişează un prototip al sursei în VHDL gererat automat de către program, urmând a fi completată partea care descrie efectiv circuitul dorit, în cazul nostru decodorul LED. Programul va arăta după cum urmează:

Page 6: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity leddcd is Port ( d : in STD_LOGIC_VECTOR (3 downto 0); s : out STD_LOGIC_VECTOR (6 downto 0)); end leddcd; architecture Behavioral of leddcd is begin s <="1110111" when d="0000" else "0010010" when d="0001" else "1011101" when d="0010" else "1011011" when d="0011" else "0111010" when d="0100" else "1101011" when d="0101" else "1101111" when d="0110" else "1010010" when d="0111" else "1111111" when d="1000" else "1111011" when d="1001" else "1111110" when d="1010" else "0101111" when d="1011" else "0001101" when d="1100" else "0011111" when d="1101" else "1101101" when d="1110" else "1101100"; end Behavioral; ►Verificarea sursei VHDL. Din panoul sursă se selectează din cadrul proiectului fişierul cu extensia .vhd iar din panoul proceselor se alege Check Syntax şi se face dublu click. În urma rulării, eventualele erori din codul sursă sunt semnalate. După corectare se reia procesul de verificare. În acest moment design-ul are o sursa în VHDL care descrie circuitul decodorului şi care trebuie convertită în circuit logic. Se selectează în panoul proceselor Synthesize-XST şi se face dublu click. Sintetizorul va citi sursa în VHDL şi va converti codul într-un “netlist” de porţi. Se poate face dublu click pe View Synthesis Report pentru a vedea diferite opţiuni ale sintetizorului, statistici ale timpilor etc. De asemenea, dacă se face dublu click pe View RTL Schematic se poate vedea schema care corespunde codului sursă în VHDL. ►Implementare circuitului logic în FPGA După sintetizarea circuitului, se trece la translatarea, maparea, plasarea şi rutarea acestuia în resursele FPGA-ului. Pentru aceasta se face dublu click pe Implement Design process. Dacă se expandează procesul Implement Design se observă subprocesele efectuate. Procesul de translatare Translate converteşte netlist-ul într-un format specific Xilinx şi ţine cont de toate constrângerile aplicate. Procesul de mapare Map descompune netlist-ul şi îl rearanjează astfel incât să se potrivească cu elementele circuitelor FPGA. Plasarea şi rutarea Place & Route mapează elementele în locaţiile specifice şi seteaza switch-urile pentru a ruta semnalele logice între ele.

Page 7: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

►Verificarea implementarii În acest moment, design-ul este asociat resurselor în FPGA, dar dorim să ştim cât anume ocupă, care sunt pinii de intrare/ieşire, etc. Aceste informaţii se afişează facând dublu click pe Place & Route Report şi Pad Report din panoul proceselor. De notat că până acum am făcut atribuirea pinilor în mod automat, fără să ţinem cont de constrângerile impuse prin conectarea la circuite externe FPGA . ►Atribuirea pinilor folosind constrângeri. Se doreşte atribuirea pinilor din FPGA astfel incât să poata fi forţaţi să fie high sau low pentru a putea testa comportamentul decodorului pentru toate combinaţiile posibile de intrări. Ieşirile trebuiesc conectate la un LED cu 7 segmente pentru a testa cu uşurinţă corectitudinea funcţionarii schemei. Programul utilitar GXSPORT permite setarea nivelului pentru 8 ieşiri de date a portului paralel. În acest caz atribuim intrarile LED decoder-ului la 4 dintre acestea astfel incât să poată fi controlate folosind GXSPORT. Pinii se preiau din documentul care conţine harta pinilor plăcii de dezvoltare [15][16].

Tot din acelaşi document se extrag pinii FPGA corespunzatori LED-ului de 7 segmente.

Page 8: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Pentru a realiza acest pas de atribuire a pinilor se foloseşte procesul de constrângere constraints. Se crează un fisier al constrângerilor – se face click dreapta pe obiectul vhdl din panoul surselor şi se selecteaza New Source… din meniul pop-up.

Page 9: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Dublu click Floorplan IO – Pre-Synthesis şi se incepe adăugarea constrângerilor pinilor. Se deschide fereastra Xilinx PACE. Se face click pe I/O Pins din Design Browser. În Design Object List – I/O Pins se deschide o lista cu ieşirile şi intrările curente ale decodorului. În acest moment se pot modifica atribuirile pinilor corespunzător schemei dorite. Se salvează modificările şi se reimplementează design-ul. În Pad Report se verifică pinii. ►Vizualizarea circuitului După ce s-a încheiat procesul de implementare, se poate vizualiza modul în care circuitul logic şi I/O–urile sunt atribuite CLB-urilor şi pinilor FPGA. Pentru acesta se face dublu click pe procesul View/Edit Placed Design (FloorPlanner). Fereastra FloorPlanner va conţine următoarele:

1. Design Hierarchy – intrările LED decoder, ieşirile, LUT atribuite diferitelor CLB în FPGA.

2. Design Nets – diferitele semnale în LED decoder 3. Placement – aria de CLB în FPGA. 4. Editable Floorplan – permite modificarea atribuirii pinilor către semnalele I/O

prin tragerea acestora către diferitele locaţii ale pinilor.

Page 10: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

CLB-urile folosite de circuit sunt marcate cu verde. Se poate mări zona de interes pentru a putea fi mai bine vizualizată.

Page 11: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Se pot afişa sau nu conexiunile dintre pinii I/O pins şi CLB în modul urmator: Edit Preferences şi bifare check box în tab-ul Ratsnest.

Page 12: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Prin click pe un CLB se vor observa conexiunile dintre intrări şi ieşiri.

În mod similar, se poate face click pe pinul de intrare pentru a vedea care CLB este dependent de acea intrare.

Page 13: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Pentru a vizualiza toate resursele FPGA disponibile (nu numai cele utilizate de design-ul implementat), se selectează Edit Preferences şi se bifează toate check box-urile in tab-ul Resources.

Page 14: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Acum se pot vizualiza toate LUT, RAM, buffere, etc. care sunt disponibile în FPGA.

Page 15: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

►Generare “Bitstream” – fişierul de configurare Se obţine cu ajutorul procesului Generate Programming File. Fişierul creat are extensia *.bit si este cel care se înscrie în FPGA. Acesta se poate face prin portul paralel sau prin USB daca se foloseşte o interfaţă specială XSUSB (paralel – USB). Se foloseşte programul gxsload. Se transportă cu mouse-ul fişierul de configurare (din fereastra de explorer) în fereastra FPGA/CPLD şi se porneşte încărcarea.

►Testarea circuitului S-au atribuit intrările decoder-ului pinilor care sunt conectaţi la portul paralel. Programul utilitar gxsport (de la firma Xess) permite controlarea valorilor acestor pini. Prin efectuarea mai multor combinaţii de intrare se vor observa afişările LED-ului de 7 segmente.

Dacă se setează Count fiecare click pe butonul Strobe incrementează valoarea de 8 biţi reprezentată de D7-D0. Acest lucru facilitează verificarea tuturor celor 16 combinaţii. NOTĂ: Bit-ul D7 al portului paralel controlează pinul de /PROGRAM al FPGA. Nu trebuie programat D7 la 0 deoarece va şterge configurarea FPGA şi va trebui ăa fie din nou înscris fişierul de configurare.

Concluzii:

Page 16: Lucrarea 1 Familiarizare cu programarea FPGAatm.neuro.pub.ro/radu_d/html/09_10/src2009/1/Lucrarea 1.pdf · Lucrarea 1 Familiarizare cu programarea FPGA Scopul lucrăriieste acela

Etapele prezentate mai sus au avut ca scop familiarizarea cu mediul de dezvoltare ISE WebPack de la Xilinx, cu placa de dezvoltare de la Xess XSA-50, pentru finalizarea unui proiect care sa folosească circuite de tip FPGA. Acelaşi proiect se poate implementa pentru placa de dezvoltare XSB-300. Puteţi parcurge etapele de la definire circuit in VHDL până la configurare şi testare. Se poate folosi fişierul în VHDL deja definit şi copia într-un nou proiect. Se va urmari realizarea fişierului de constrângeri conform specificaţiilor plăcii de dezvoltare şi se vor parcurge paşii descrişi mai sus până la testarea circuitului.