2. vaja: sistem s kvadrirnikom
2.1 Sistem na čipu s kvadrirnikom
Kvadrirnik z vodilom AXI bomo vključili v sistem, ki je sestavljen in procesorskega dela in povezav (AXI Interconnect). Izdelavo blokovnega diagrama z vmesnikom AXI Lite v programu Vivado prikazuje video:
Naloga
- Uporabi pripravljen projekt: kvadWrap.zip, ki ga odpakiraj in odpri v programu Vivado.
Odpri in preglej izvorne datoteke (Design Sources) v projektu:
- kvadwrap.vhd povezuje dva gradnika: design_wrapper s procesorjem in kvadrirnik, ki ga bomo še dodali
- znotraj datoteke design_wrapper.vhd je blokovni diagram: design_1.bd, ki ga odpremo z dvoklikom
- blokovni diagram vsebuje tri komponente: Zynq procesorski sistem, logiko za reset in AXI povezave
- Dodaj v projekt (Add Sources) datoteki z opisom kvadrirnika in paralelnega vmesnika iz prejšnje vaje. Projekt je pripravljen tako, da je komponenta s kvadrirnikom že vključena - po potrebi spremeni ime komponente, če je drugačno kot je zapisano v datoteki kvadwrap.vhd.
- Naredi sintezo vezja in preglej predvideno zasedenost FPGA virov.
2.2 Grafični opis sistema
Izdelava komponente IP
Odpri projekt v katerem je kvadrirnik z vmesnikom AXI.
Tools > Create and Package IP, nato izberi Package your current project in pusti ostale nastavitve privzete.
V glavnem oknu programa so koraki izdelave oz. pakiranja nove komponente:
- Identification: ime komponente in verzija. Ob vsaki spremembi komponente IP je priporočljivo spremeniti verzijo, s pomočjo katere projekti v katere bo komponenta vključena sledijo izvorni komponenti. Če bo projekt zaznal, da se v repozitoriju nahaja komponenta z drugačno številko verzije, bo zahteval posodobitev.
- Compatibility: določa družino vezij FPGA za katere je komponenta pripravljena.
- File Gropus: določa katere izvorne datoteke so vključene za sintezo in simulacijo komponente.
- Customization parameters: generični parametri vezja.
- Ports and Interfaces: priključki in vmesniki vezja. Če priključki komponente sledijo standarnemu imenovanju signalolv AXI vmesnika, bo program avtomatsko določil komponenti ustrezen vmesnik, sicer pa vmesnike definiramo ročno.
- Addressing and Memory: določa naslovni prostor, ki ga zaseda komponenta z vmesnikom AXI.
- Customization GUI: grafični izgled komponente, kjer preverimo ali so vsi priključki in vmesniki na svojem mestu.
- Review and Package: preglejte nastavitve pakiranja (edit packaging settings) in naredite kljukico na Create archive of IP. Z gumbom Package IP potrdimo nastavitve in shranimo komponento na disk.
Celoten opis komponente se nahaja v zip datoteki v podmapi .srcs (npr. kvadrat\kvbadrat.srcs). To datoteko prenesemo v svojo mapo, kjer bomo imeli lastne komponente IP in jo odpakiramo.
Izdelava blokovnega diagrama
- V orodju Vivado naredi nov projekt vrste: RTL Project, brez izvornih datotek, komponent IP ali uporabniških zahtev in določi razvojno ploščo ZedBoard.
- Naredi nov blokovni diagram vgrajenega sistema s klikom na: Create Block Design, ter mu določi ime, npr. sistem
- Odpri katalog z gradniki IP s klikom na napis Add IP ali ikono ter izberi ZYNQ7 Processing System. Gradnik iz kataloga najhitreje najdeš tako, da napišeš nekaj črk oznake v okence, npr. Search: zyn
- Orodje IP integrator ponuja pomoč pri povezovanju, ki se prikaže na vrhu okna z diagramom. Klikni na Run Block Automation, da bo program samodejno naredil zunanje povezave: DDR in Fixed_IO.
- Odpri nastavitve gradnika z dvojnim klikom na simbol processing_system_7_0. Klikni na MIO Configuration, nato pa pri:
- +Memory Interfaces odstrani kljukico ob Quad SPI Flash,
- +IO Peripherals odstrani kljukice pri enotah USB 0 in SD 0, izbrana naj ostane le periferna enota UART1,
- +Application Processor Unit odstrani kljukico pri Timer 0 in
- na koncu potrdi vse spremembe z OK.
Vključitev komponente v diagram
|
- V zavihku na levi strani blokovnega diagrama klikni na ikono IP Settings. Odpre se okno v katerem bomo dodali novo komponento v katalog. S klikom na + (Add Repository) izberi mapo z opisom komponente kvadrat in komponenta se bo uvrstila v katalog.
- Dodaj komponento kvadrat na blokovno shemo (Add IP) in klikni Run Connection Automation. Program bo avtomatsko dodal dva IP bloka, ki omogočata povezavo med komponento z vmesnikom AXI in procesnim sistemom.
- Preveri pravilnost diagrama z izbiro iz menija Tools > Validate Design, nato pa shrani blokovno shemo.
|
Prevajanje sistema
- Pred prevajanjem potrebujemo model celotnega sistema (top-level HDL). Klikni z desnim gumbom na sistem.bd in izberi Create HDL Wrapper.
- Prevajanje, sintezo in implementacijo vezja poženi z ukazom Run Implementation.
- Prevajanje vključuje precej zahtevnih korakov: izdelavo izvornih datotek iz IP komponent, sintezo vezja in tehnološko preslikavo, zato traja kar nekaj minut.
- Ko se odpre okno Implementation Completed, izberemo opcijo Generate Bitstream, kliknemo OK in počakamo da pripravi datoteko za programiranje FPGA.
- Po končanem prevajanju izberi opcijo Open Implemented Design.
- Ko odpremo implementirano vezje se pokaže slika vezja Zynq, na kateri so označeni uporabljeni gradniki. V spodnjem oknu je kratek povzetek časovne analize, kjer vidimo ali bo vezje delovalo pri specificirani frekvenci ure (če nismo spreminjali frekvence, ima ura FCLK_CLK0 100 MHz).
- Podrobnejše podatke o zasedenosti vezja dobimo v zavihku Reports. Iz poročila postopa razmeščanja elementov (Place Design) bomo videli, da vezje zasede cca. 2% FPGA rezin (Slice), vsebuje čez 600 registrov (flip-flopov). Iz poročila o povezovanju (Route Design) pa razberemo, da ima naše vezje skoraj 3000 logičnih povezav.
- Zadnji korak je izvoz datoteke: File > Export > Export Hardware, naredimo kljukico na Include bitstream in OK.
2.3 Izdelava aplikacije
- Poženi orodje SDK iz menija File > Launch SDK
- Pripravili bomo novo aplikacijo: File > New > Application Project z imenom lab1, ki ga vnesemo v polje: Project Name, v naslednjem oknu pa potrdimo izbiro testne aplikacije z imenom Hello World.
- V oknu Project Explorer odpri lab1 > src > helloworld.c
|
|
- Priključi ZedBoard na napajanje, JTAG in UART USB konektorja in vklopi napajalno stikalo. Iz menija izberi Xilinx Tools > Program FPGA in naloži vezje s klikom na Program. Na plošči bo po končanem nalaganju zasvetila modra LED.
- Nastavi serijski terminal: v spodnjem zavihku Terminal klikni na Connect, izberi vrsto povezave: Serial, ustrezna vrata COM in hitrost prenosa 115200.
- V oknu Project Explorer klikni na aplikacijo (npr. lab1), nato pa jo poženi na razvojni plošči Run > Run As > 4 Launch on Hardware(GDB). V oknu terminala se mora pojaviti pozdrav: Hello World.
- Sedaj bomo nadgradili osnovni program in preizkusili komunikacijo s periferijo. Najprej dodajmo knjižnico za neposreden dostop do registrov periferije (xil_io.h) in pobrišimo deklaracijo funkcije print:
#include <stdio.h>
#include "platform.h"
#include "xil_io.h"// neposreden dostop do registrov
//void print(char *str);
- v funkcji main() dodajmo kodo za vpis podatkov v prva dva registra kvadrirnika:
Xil_Out8(XPAR_KVADRAT_0_BASEADDR, 2);
Xil_Out8(XPAR_KVADRAT_0_BASEADDR+4, 2);
- Dodajmo še izpis prebranih vrednosti:
printf("Prvi izhod: %d\n", Xil_In32(XPAR_KVADRAT_0_BASEADDR+8));
printf("Drugi izhod: %d\n", Xil_In32(XPAR_KVADRAT_0_BASEADDR+12));