1. vaja: osnovni sistem z LED in tipkami
|
|
Cilj laboratorijske vaje je izdelava vgrajenega sistema v čipu Zynq z oznako xc7z020clg484-1, ki je na razvojni plošči ZedBoard. Izvedli bomo preprosto aplikacijo, ki bere tipke in prižiga LED. Tipke bomo vezali na paralelna vrata procesorja EMIO GPIO, za LED pa bomo naredili nov paralelni vmesnik AXI GPIO.
|
Izdelava projekta z orodjem Vivado IP Integrator
1. Izdelava novega projekta
- Zaženi program Vivado 2013.2 in izberi Create New Project, ki odpre pomočnika (wizzard) za izdelavo projekta. Določi ime projekta, npr. sistem1, v naslednjem oknu pa vrsto: RTL Project.
- V naslednjem oknu nastavi privzet strojno-opisni jezik Target Language: VHDL. Zaenkrat ne bomo dodali nobenih izvornih datotek ali IP ali uporabniških zahtev, zato dvakrat izberi Next, v tretjem oknu (Add Constraints) pa klikni Add Files in izberi datoteko tipke.xdc.
- Nazadnje je potrebno izbrati čip ali ploščo: izberi specify: Boards, izberi Vendor: em.avnet.com, nato pa ploščo ZedBoard.
2. Risanje blokovnega diagrama
- 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 in izberi /processing_system7_0, da bo program sam naredil zunanje povezave: DDR in Fixed_IO.
- Odpri nastavitve gradnika z dvojnim klikom na simbol processing_system_7_0. Klikni na IO Peripherals ali pa izberi zavihek MIO Configuration, kjer bomo izbrali periferni enoti UART in GPIO, ter odstranili enote Enet 0, USB 0 in SD 0. Klikni na + GPIO in dodaj kljukico na EMIO GPIO, nastavi širino (Width) na 4 in na koncu potrdi z OK.
- Klikni z desnim gumbom na priključek GPIO_0 in izberi Make External, da se povežejo še GPIO signali na zunanje priključke, nato pa klikni na zunanji priključek (petkotnik) z levim gumbom in v okencu External Interface Properties spremeni ime priključka v: tipke
|
- Klikni z desnim gumbom na priključek GPIO_0 in izberi Make External, da se povežejo še GPIO signali na zunanje priključke, nato pa klikni na zunanji priključek (petkotnik) z levim gumbom in v okencu External Interface Properties spremeni ime priključka v: tipke
|
- Dodaj v blokovni diagram nov blok (Add IP) z imenom AXI GPIO. Z dvojnim klikom odpri nastavitve novega IP bloka, izberi opcijo Generate Board Based IO Constraints in pod Board Interfaces izberi LEDs 8bits. To so povezave na svetleče diode LD0…LD7 plošče Zedboard, ki so zapisane v projektu. Na podoben način bi lahko naredili povezave na stikala ali tipke na razvojni plošči.
- Zapri nastavitve in klikni Run Connection Automation in izberi: /axi_gpio_0/s_axi. Program bo avtomatsko dodal dva IP bloka, ki omogočata povezavo med GPIO in procesnim sistemom. Klikni še enkrat na Run Connection Automation za zunanje povezave na LEDs_8Bits.
- Preveri pravilnost diagrama z izbiro iz menija Tools > Validate Design, nato pa shrani blokovno shemo.
3. Prevajanje sistema
- Pred prevajanjem potrebujemo model celotnega sistema (top-level HDL). Klikni z desnim gumbom na system.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.
- Med prevajanjem v Vivado 2014.2 se pojavita dve kritični opozorili, Board part... not supported or invalid, ki ju lahko ignoriramo.
- Ko se odpre okno Implementation Completed, izberemo opcijo Generate Bitstream, kliknemo OK in počakamo da pripravi datoteko za programiranje FPGA.
- Izberi Open Implemented Design, nato pa iz menija File > Export > Export Hardware in klikni OK.
4. 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 in iz menija izberi Xilinx Tools > Program FPGA, ter naloži vezje s klikom na Program. Na plošči bo po končanem nalaganju zasvetila modra LED.
- Če je potrebno, prevedi program (Project > Build All) in ga zaženi na razvojni plošči (Run > Run As > Launch on Hardware). Program preko serijskega vmesnika UART na terminalu izpiše pozdravno sporočilo. Na terminalu mora biti nastavljen ustrezen serijski vmesnik (COM) in hitrost prenosa 115200.
- Sedaj bomo nadgradili osnovni program in preizkusili delovanje LED in tipk. Naprej dodajmo nekaj knjižnic in odstranimo deklaracijo funkcije print():
#include <stdio.h>
#include "platform.h"
#include "xil_io.h"// neposreden dostop do registrov
#include "xgpio.h"// gonilnik AXI GPIO (LED)
#include "xgpiops.h"// gonilnik za PS GPIO (tipke)
//void print(char *str);
- v funkcji main() deklarirajmo strukture za GPIO in naredimo inicializacijo gonilnikov:
XGpio led;
XGpioPs gp;
XGpioPs_Config *gpCfg;
int t;
// inicializacija PS GPIO
gpCfg = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
XGpioPs_CfgInitialize(&gp, gpCfg, gpCfg->BaseAddr);
// inicializiraj AXI GPIO za ledice
XGpio_Initialize(&led, XPAR_AXI_GPIO_0_DEVICE_ID);
- LED lahko prižigamo preko AXI GPIO gonilnika, ki mu podamo strukturo (&led), kanal (1) in vrednost:
XGpio_DiscreteWrite(&led, 1, 0xF0);
- ali pa neposredno s pisanjem v ustrezni register
Xil_Out8(XPAR_AXI_GPIO_0_BASEADDR, 0xF0);
- tipke beremo s funkcijo gonilnika, ki mu podamo strukturo gp in številko banke (2):
t = XGpioPs_Read(&gp, 2);
5. Naloga
- Naredi program, ki v zanki bere tipke in prikaže stanje tipk na LED, dokler ne pritisnemo tipke gor (BTNU).