Anexa Laborator2 ICI

35
Cum se porneste un proiect FPGA Cum se leaga un design de un anumit tip de circuit FPGA Cum se descrie un circuit logic folosind VHDL si/sau schematic Cum se detecteaza erorile sintactice Cum se sintetizeaza un netlist de la o descriere de circuit. Cum se potriveste netlist-ul intr-un FPGA. Cum se genereaza un bitstream Cum se descarca un bitstream intr-un FPGA Cum se testeaza FPGA-ul programat.

description

Anexa Laborator2 ICI

Transcript of Anexa Laborator2 ICI

  • Cum se porneste un proiect FPGACum se leaga un design de un anumit tip de circuit FPGA Cum se descrie un circuit logic folosind VHDL si/sau schematic Cum se detecteaza erorile sintactice Cum se sintetizeaza un netlist de la o descriere de circuit. Cum se potriveste netlist-ul intr-un FPGA. Cum se genereaza un bitstream Cum se descarca un bitstream intr-un FPGA Cum se testeaza FPGA-ul programat.

  • Programarea FPGA

    1. Descrierea circuitului logic folosind un limbaj de descriere hardware hardware description language (HDL) cum ar fi VHDL sau Verilog. De asemenea se poateintroduce si in schematic. 2. Se transforma HDL sau schema in netlist prin folosirea unui program care sintetizeaza logica (logic synthesizer). Netlist-ul este o descriere a portilor logice din design si modul de interconectare. 3. Se folosesc uneltele de implementare (implementation tools) pentru a realizamaparea portilor logice si interconexiunile din FPGA. FPGA-ul este constituit din blocurilogice configurabile (configurable logic blocks), care pot fi descompuse in tabele look-up tables care realizeaza operatiile logice. CLB si LUT sunt legate folosind diferite resursede rutare. Unealta de mapare colecteaza netlistul portilor intr-un grup care se potrivesteunui LUT si apoi se foloseste unealta de plasare si rutare (place & route tool) care atribuie grupul unui CLB specific prin inchiderea/deschiderea switch-urilor in matricea de rutare pentru a le conecta impreuna. 4. Dupa ce faza de implementare este completa, un alt program extrage starea switch-urilor din matricea de rutare si genereaza sirul de biti (bitstream) unde 1 si 0 corespund starii de deschis sau respectiv de inchis a comutatoarelor.5. Bitstream-ul este inscris in circuitul FPGA. XILINX ISE ofera editor HDL si schematic, logic synthesizer, fitter, si generator de bitstream. XSTOOLs de la XESS ofera utilitare de descarcare a bitstream in FPGA de pe placa de dezvoltare.

  • Primul design folosind placa de dezvoltare XSA-50Decodor pentru LED intrare de 4 biti si iesirea de 7 pentru a afisa cifre de la 0-F in hexadecimal

    Schema pentru decodorul de LED

  • Folosirea ISE XilinxSe poate folosi gratis ISE WebPACK descarcat de la adresa (nu inainte de a crea un user account cu parola):http://www.xilinx.com/ise/logic_design_prod/webpack.htm.Pentru a configura circuitul FPGA folosind una dintre placile de dezvoltare oferite de firma Xess, se vor descarca utilitarele XSTOOLS de la adresa: http://www.xess.com/ho07000.html.

    Afisare diferitemesaje

    Afisare procesepermise pentruun obiectselectat in panoul sursa.

    Organizarefisiere sursa in cadrul proiectului

    Editare HDL, scheme, diagrama de stari

  • Pentru a defini un design se creaza un proiect nou : File -> New Project itemSe introduc numele proiectului, locul unde se doreste a fi creat, circuitul folosit si limbajulin care se va face descrierea. La alegerea tipului de circuit se seteaza urmatoriiparametri Family, Device, Package si Speed

    Dupa definirea proiectului, se adauga fisierul sursa in VHDL/Verilog care va descriefunctionarea LED decoder-ului.

  • In fereastra Define Module se declara intrarile si iesirile circuitului. (in cazul nostru 4 intrari si 7 iesiri; 0-3 respectiv 0-6 biti.

  • In acest moment panoul de editare afiseaza un schelet al sursei in VHDL, urmand a fi completata partea care descrie efectiv circuitul dorit.

    Descrierea relatiilorintrare/iesire pentruLED decoder

    Descriere introdusa de wizard

  • library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.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 isbegin

    s

  • Verificarea sursei VHDL. Din panoul sursa se selecteaza fisierul cu extensia .vhd iar din panoul proceselor se alege Check Syntax si se face dublu click. In urma rularii, eventualele erori din codul sursa sunt semnalate. Dupa corectare se reia procesul de verificare.In acest moment design-ul are o sursa in VHDL care descrie circuitul decodorului care trebuie convertita in circuit logic. Se selecteaza in panoul proceselor Synthesize-XST sise face dublu click. Sintetizorul va citi sursa in VHDL si va converti codul intr-un netlistde porti. Se poate face dublu click pe View Synthesis Report pentru a vedea diferite optiuni ale sintetizorului, statistici ale timpilor etc. De asemenea, daca se face dublu click pe View RTL Schematic se poate vedea schema care corespunde codului sursa in VHDL.

    Implementare circuitului logic in FPGA

    Dupa sintetizarea circuitului, se trece la translatarea, maparea, plasarea si rutareaacestuia in resursele FPGA-ului. Pentru aceasta se face dublu click pe Implement Design process. Daca se expandeaza procesul Implement Design se observa subprocesele efectuate. Procesul de translatare Translate converteste netlist-ul intr-un format specific Xilinx sitine cont de toate constangerile aplicate. Procesul de mapare Map descompune netlist-ul si il rearanjeaza astfel incat sa se potriveasca cu elementele circuitelor FPGA. Plasarea si rutarea Place & Route mapeaza elementele in locatiile specifice si seteazaswitch-urile pentru a ruta semnalele logice intre ele.

  • Verificarea implementarii In acest moment, design-ul este potrivit in FPGA, dar dorimsa stim cat anume ocupa, care sunt pinii de intrare/iesire. Aceste informatii se afiseazafacand dublu click pe Place & Route Report si Pad Report din panoul proceselor. Pana acum am facut atribuirea pinilor in mod automat.Atribuirea pinilor folosind constrangeri. Se doreste atribuirea pinilor din FPGA astfel incat sa poata fi fortati sa fie high sau low pentru a putea testa comportamentul decodorului pentru toate combinatiile posibile de intrari. Iesirile trebuiesc conectate la un LED cu 7 segmente pentru a testa cu usurintacorectitudinea functionarii schemei. Programul utilitar GXSPORT permite setarea nivelului pentru 8 iesiri de date a portuluiparalel. In acest caz atribuim intrarile LED decoder-ului la 4 dintre acestea astfel incat sapoata fi controlate folosind GXSPORT. Pinii se preiau din documentul care contine hartapinilor placii de dezvoltare.

    Tot din acelasi document se extrag pinii FPGA corespunzatori LED-ului de 7 segmente.

  • Pentru a realiza acest pas de atribuire a pinilor se foloseste procesul de constrangereconstraints. Se creaza un fisier al constrangerilor se face click dreapta pe obiectul vhdldin panoul surselor si se selecteaza New Source din meniul the pop-up.

  • Dublu click Floorplan IO Pre-Synthesis si se incepe adaugarea constrangerilorpinilor.

    Se deschide fereastra Xilinx PACE. Se face click pe I/O Pins din Design Browser. In Design Object List I/O Pins se deschide o lista cu iesirile si intrarile curente ale decodorului. In acest moment se pot modifica atribuirile pinilor corespunzatorschemei dorite. Se salveaza modificarile si se reimplementeaza design-ul. In Pad Report se verifica pinii.

    Vizualizarea circuituluiDupa ce s-a incheiat procesul de implementare, se poate obtine o vedere a modului in

    care circuitul logic si I/O urile suntr atribuite CLB-urilor si pinilor FPGA. Pentruacesta se face dublu click pe procesul View/Edit Placed Design (FloorPlanner).

    Fereastra FloorPlanner va contine urmatoarele: 1. Design Hierarchy intrarile LED decoder, iesirile, LUT atribuite diferitelor CLB in

    FPGA. 2. Design Nets diferitele semnale in LED decoder 3. Placement aria de CLB in FPGA. 4. Editable Floorplan permite modificarea atribuirii pinilor catre semnalele I/O prin

    tragerea acestora catre diferitele locatii ale pinilor.

  • CLB-urile folosite de circuit sunt marcate cu verde. Se poate mari zona de interes pentrua putea fi mai bine vizualizata. Buton marire

  • Se pot afisa sau nu conexiunile dintre pinii I/O pins si CLB in modul urmator: Edit Preferences si bifare check box in tab-ul Ratsnest

    Prin click pe un CLB se vor observa conexiunile dintre intrari si iesiri.

  • In mod similar, se poate face click pe pinul de intrare pentru a vedea care CLB estedependent de acea intrare.

  • Pentru a vizualiza toate resursele FPGA disponibile (nu numai cele utilizate de design-ulimplementat), se selecteaza Edit Preferences si se selecteaza toate check box-urile in tab-ul Resources.

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

  • Generare Bitstream fisierul de configurareSe obtine cu ajutorul procesului Generate Programming File. Fisierul creat are extensia *.bit si este cel care se inscrie in FPGA. Acesta se poate face prin portul paralelsau prin USB daca se foloseste o interfata speciala XSUSB (paralel USB).Se foloseste programul gxsload. Se trage fisierul de configurare (din fereastra de explorer) in fereastra FPGA/CPLD si se porneste incarcarea.

  • Testarea circuituluiS-au atribuit intrarile decoder-ului pinilor care sunt conectati la portul paralel. Programulutilitar gxsport permite controlarea valorilor acestor pini. Prin efectuarea mai multorcombinatii de intrare se vor observa afisarile LED-ului de 7 segmente.

    Daca se seteaza Count fiecare click pe butonul Strobe incrementeaza valoare de 8 bitireprezentata de D7-D0. Acest lucru permite sa fie verificate toate cele 16 combinatii.

    NOTA: Bit-ul D7 al portului paralel controleaza pinul de /PROGRAM al FPGA. Nutrebuie programat D7 to 0 deoarece va sterge configurarea FPGA si va trebui sa fie din nou inscris fisierul de configurare.

  • Design ierarhic Cerinta este sa se implementeze un counter de 4 biti si valoareaacestuia la iesire sa se afiseze pe un LED cu 7 segmente. Numaratorul va incrementape frontul descrescator al ceasului.

    In acest caz se refoloseste modulul definit anterior pentru LED decoder si care se adauga noului proiect. In acet caz ramane de definit modulul counter care sa se adauge proiectului si apoi sa se stabileasca legatura intre cele doua. Acesta se poatedefini plecand de la bibliotecile ISE, si anume in momentul cand se creaza se definestede tip IP.

  • Configuratia initiala specifica este pentru un numarator de 16-biti. Se pot modifica multe dintretrasaturile acestui numarator. (Click View Data Sheet pentru a se vedea optiunile configurabile). Singura modificare necesara este aceea de a mari la 28 biti, desi sunt utilizati numai 4 bitisuperiori. Explicatia consta in cele ce urmeaza: numaratorul foloseste un semnal de ceas de la placa de dezvoltare care are frecventa de 50 MHz. Afisajul LED-ului se va schimba mult prearapid pentru a putea fi vazut. Prin conectarea decodorului la cei 4 biti superiori din cei 28 biti, afisajul se va schimba numai o singura data la fiecare 224 cicli de ceas astfel incat afisajul LED-ului se va schimba la fiecare 224 / (50 x 106) = 0.336 secunde ceea ce este suficient de incetpentru a putea fi citit.

  • Conectarea celor doua moduleAcest lucru se realizeaza prin conectarea numaratorului la LED decoder intr-o schema de nivel inalt. Inainte de aceasta va trebui sa fie creat simbolul schematic pentru modulul decodorului plecand de la sursa din VHDL. (Modulul conterului are deja un model schematic, deoarece a fost crest folosind Coregen.) Pentru a creasimbolul schematic se face dublu click pe procesul Create Schematic Symbol. In panoul Transcript apare mesajul pentru creare simbol schematic.Se defineste o schema care va contine ambele module cel al numaratorului si celal decodorului.

  • Click tab Symbols aflat in partea de jos a panoului Sources. Tab-ul Symbols contine o lista pe categorii a diferitelor circuite logice si elemente care se pot folosi in modulschematic.

  • Plasare fire intre module

    Design rule check

  • Daca se conecteaza direct cele doua module, la aplicarea butonului de Design Rule Check, va da o eroare de conectare pentrumodule de diferite dimensiuni.Se traseaza un bus de iesire de 28-biti conectat la numarator si corespunzator un al doilea la intrarea de 4 biti conectat la decodor. Se redenumeste bus-ul de la decodor.

    Aceasta va conecta intrarile decodorului la cei mai semnificativi 4 biti ai iesiriinumaratorului.

  • Se selecteaza din lista de simboluri un buffer cu o singura iesire (obuf) care se ataseazaLED decoder-ului. Apoi se ruleaza design-rule checker.

  • Optiunea design-rule checker va detecta o eroare deoarece un bufer cu o siguraiesire a fost conectat la decodorul care are 7 biti de iesire. Prin click dreapta la simbolul OBUF se selecteaza Object Properties din meniul pop-up. Se va expandaintr-o arie de 7 buffere, fiecare fiind conectat la cate un bit al decodorului.

    Se adauga un bus la iesirea OBUF si apoi markeri de I/O

  • La pasul urmator trebuie sa se atribuie pinii de intrare/iesire prin fisierul de constrangerisi se procedeaza ca la proiectul anterior.

    Se parcurg apoi totii pasii prezetati in detaliu de la primul exemplu, pana se creazafisierul bitstream si configureaza circuitul FPGA.Dupa ce circuitul s-a programat, LED-ul de 7 segmente trebuie sa numere de la 0 la F in mod continuu, cu un ciclu complet care dureaza 5.4 secunde.