Dr. Kincses Zoltán, Dr. Vörösházi Zsolt: FPGA-alapú beágyazott rendszerek tervezése A felsőfokú informatikai oktatás minőségének fejlesztése, modernizációja TÁMOP-4.1.2.A/1-11/1-2011-0104 Főkedvezményezett: Pannon Egyetem 8200 Veszprém Egyetem u. 10. Kedvezményezett: Szegedi Tudományegyetem 6720 Szeged Dugonics tér 13. 2014 Frissítve: 2017. május 10.
FPGA-alapúbeágyazott rendszerektervezése Dr. Kincses Zoltán, Dr. VörösháziZsolt 6. Saját periféria hozzáadása az összeállított beágyazott alaprendszerhez
Tárgyalt ismeretkörök 1. Bevezetés Beágyazott rendszerek 2. FPGA-k, Digilent Nexys-2 és ZyBo fejlesztő kártyák és eszközök 3. Beágyazott Rendszer fejlesztő szoftverkörnyezet (Xilinx EDK Embedded Development Kit/XPS Xilinx Platform Studio) áttekintése 4. Beágyazott alap tesztrendszer (BSB - Base System Builder and Board Bring-Up) összeállítása XPS-ben 5. Perifériák hozzáadása (IP adatbázisból) az összeállított beágyazott alaprendszerhez 6. Saját periféria hozzáadása az összeállított beágyazott alaprendszerhez 7. Szoftver alkalmazások fejlesztése, tesztelése, hibakeresése (debug) Xilinx SDK használatával (Software Development Kit) 8. HW-SW rendszerek együttes tesztelése(xilinx ChipScope) 9. Beágyazott Linux operációs rendszer I.: a MicroBlaze szoft-processzoron Linux rendszer beállítása és indítása 10. Beágyazott Linux operációs rendszer II.: Alkalmazás fejlesztés, tesztelés, meghajtóprogramok, és boot-olás 11. Egyedi hardver szellemi termékek fejlesztése és tesztelése (ZYBO videoaudio, Nexys VGA vezérlő) 3
Xilinx EDK használata SAJÁT IP PERIFÉRIA HOZZÁADÁSA A BEÁGYAZOTT RENDSZERHEZ 4
Feladat Lépések: 1.)Sajátperifériakészítése HDL modul tervezése(vhdl v. Verilog forrásból) 2.) Saját periféria hozzáadása a beágyazott rendszerhezxilinxedk-ban 3.) Lábkiosztás (Pin-out) hozzárendelések megadása(.ucfconstraints) 4.)Bitstreamgenerálásaésletöltése 5.)SWtesztalkalmazáselkészítése Hardver/Szoftver teszt verifikáció 5
ZyBo Xilinx EDK használata BEÁGYAZOTT RENDSZER ÖSSZEÁLLÍTÁSA 6
A feladat megoldásának lépései Az előző (5.) ismeretkör elsajátítása során létrehozott projekt archiválása, és megnyitása: LAB02_C LAB03 (megnyitás) Saját Periféria generálása IP template segítségével a Xilinx EDK-ban, Saját IP Periféria létrehozása: A.)led_ip:LED B.) seg7_ip: 7-segmenses kijelző Elkészült IP periféria hozzáadása és összekapcsolása a beágyazott rendszerrel. 7
A bővítendő tesztrendszer Memory DDR3 Memory Controller M_AXI_G P1 AXI4 AXI Interconnect Block AXI4 AXI-BRAM Controller BRAM PL RS232 I2C0 UART I2C ARM Cortex-A9 AXI4- Lite I2C PMOD_TMP2 Timer M_AXI_G P0 AXI4- Lite AXI Interconnect Block AXI4- Lite AXI4- Lite LED_IP GPIO LED Push-Buttons A PS AXI4- Lite GPIO DIP Switches PS oldal: ARM hard-processzor mag belső OnChip-RAM vezérlő RS232 soros interfész külső DDR3 memória vezérlő I2C vezérlő PL oldal: A:sajátLEDvezérlőIP 8
Korábbi projekt archiválása és megnyitása Hozzunk létre egy új mappát, legyen a neve \LAB03 Másoljuk át az előző ismeretkör (5) elsajátításakor létrehozott projektet (célszerűen a \LAB02_Cmappa tartalmát) Indítsuk el az XPS\EDK szoftvert: Start Programok XilinxDesign Tools ISE Design Suite14.7 EDK Xilinx Platform Studio File Open Project <projectdir>/lab03/system.xmp Open FONTOS : Töröljük ki a korábbi LEDs_4Bits nevű Xilinx GPIO perifériát a LAB03-as rendszer tervből! 9
A.) LED IP Perifériatemplate generálása I. Az XPS/EDK-banindítsuk el: Hardware Create, or Import Peripherial Next 1 EDK-hozszükséges busz interfészek és könyvtár struktúra is fog generálódni. 2 Next >> 10
Periféria template generálása II/a. * IP neve: csak kisbetűs legyen! 1 2 3 Next >> AXI interfész Little-Endian, azaz hagyományos formátumot definiál! 11
Periféria template generálása III. S/W regiszterek: Next >> Next >> 12
Periféria template generálása IV. 13
Periféria template generálása V. 1 2 3 14
IP periféria generált komponensei -HDL source - <proj_dir>/lab03/pcores/led_ip_v1_00_a/hdl top entity : vhdl/led_ip.vhd user logic : vhdl/user_logic.vhd -XPS interface - <proj_dir>/lab03 /pcores/led_ip_v1_00_a/data mpd: led_ip_v2_1_0.mpd pao: led_ip_v2_1_0.pao -Miscfile - <proj_dir>/lab03 /pcores/led_ip_v1_00_a/devl help : README.txt /Bfmsim: Bus Functional Simulation források /projnav: ISE projekt a HDL források megírásához -Driver source - <proj_dir>/lab03 /drivers/led_ip_v1_00_a/src makefile : Makefile header : led_ip.h source : led_ip.c selftest: led_ip_selftest.c - Driver interface - <proj_dir>/lab03 /drivers/led_ip_v1_00_a/data mdd: led_ip_v2_1_0.mdd tcl: led_ip_v2_1_0.tcl FW források led_ip_v1_00_a SW források, driverek 15
Periféria template generálása VI. 2 1 \projnav \BFMsim 16
Periféria hozzáadása I. Adjuk hozzá a LED_IP perifériát a USER IP katalógusból a rendszerünkhöz: 1 Nyissuk meg a led_ip_v2_1_0.mpd fájlt a <projectdir>/led_03/pcores/led_ip_v1_00_a/datamappábból, VAGY már a hozzáadott LED_IP-n jobb gomb, majd a legördülő listából View MPD MPD= MicroprocessorPeripheralDesciptor(egy IP periféria portjainak, busz interfészeinek és paramétereinek alapbeállításait tartalmazza) Adjuk hozzá a fájlhoz az alábbi sort, majd Save -el mentsük is el: 2 3 17
Periféria létrehozása II. -HDL Nyissuk meg a user_logic.vhdfájlt (felhasználói rész) a <projectdir>/lab03/pcores/led_ip_v1_00_a/hdl/vhdl mappában, vagy már hozzáadott LED_IP-n jobb gomb és a legördülő listából Browse HDL sources Adjuk hozzá a file-hoz az alábbi sorokat: 1 2 3 18
VHDL kódrészlet: LED_PROC process() --USER logic implementation added here -- azaz a user_logic.vhd-ben itt kell a saját forráskódot megírni ~151. sorától kezdve LED_PROC : process (Bus2IP_Clk) is begin if Bus2IP_Clk'event and Bus2IP_Clk = '1' then if Bus2IP_Resetn = '0' then led_i <= (others => '0'); else if Bus2IP_WrCE(0) = '1' then led_i <= Bus2IP_Data(3 downto 0); --little endian end if; end if; end if; end process LED_PROC; LED <= led_i; 19
Periféria létrehozása III. -HDL Majd nyissuk meg a led_ip.vhd fájlt a <projectdir>/lab03/pcores/led_ip_v1_00_a/hdl/vhdl mappából, vagy már hozzáadott LED_IP-n jobb gomb és a legördülő listából Browse HDL sources Adjuk hozzá a fájlhoz az alábbi sorokat: PORT-okhoz(felhasználói rész): 1 PORT MAPhez (felhasználói rész): 2 20
Alternatív megoldás (ISE): HDL (.vhd) forráskódok szerkesztésére, és szintaxisának ellenőrzésére javasolt használni a Xilinx ISE fejlesztő környezetet (korai hiba elemzés): Nyissuk meg a XilinxISE project filet <projectdir>/lab03/pcores/led_ip_v1_00_a/devl/projnav /led_ip.xise ISE-ben: szerkesszük, és ellenőrizzük a forrás fájlokat! 21
Módosítások frissítése FONTOS! Végül a saját IP periféria minden módosításának érvényre jutásához, frissíteni kell az IP katalógust: VHDL források (led_ip.vhd, user_logic.vhd)..mpd,.pao, stb. Katalógus frissítése: Project RescanUser Repositories 22
Periféria hozzáadása és összekapcsolása a rendszerrel I. Hozzáadott saját LED_IP periféria buszrendszerhez kapcsolása Bus Interfész nézet S_AXI = axi4lite kiválasztás/ellenőrzése 1 2 23
Periféria hozzáadása és összekapcsolása a rendszerrel II. System Assembly View Ports nézet A LED port-ot alakítsuk külső porttá(make External) 1 2 3 24
Periféria hozzáadása és összekapcsolása a rendszerrel III. System Assembly View Addresses nézet ellenőrizzük a Base/High Address értékeket Unmapped memória címtartomány beállítása Kezdőcíme legyen:= 0x4126_0000 Címtartomány mérete legyen: 64K 1 2 25
GPIO jelek FPGA lábakhoz rendelése II. Módosítani kell az.ucf file-t (\data\system.ucf alapértelmezett) 1 LED lábak: LVCMOS33 2 26
LED IP clock PL I/O órajelek Zynq-> ClockGenerator(Wizard) FCLK_CLK0:= 125 MHz 2 1 3 27
DRC ellenőrzés futtatása Project menü Design Rule Check Módosított, vagy nem BSB-bőlgenerált beágyazott rendszer esetén érdemes DRC (Design Rule Checking) ellenőrzést is futtatni. Kiszűri az esetleges elkötéseket, hibákat Figyelmeztető (warning) jellegű üzenetek megengedettek (szintetizálható a terv) Legtöbb lebegő (floating) vezetékkel sem kell foglalkozni (pl. Peripheral Reset, FCLK_x stb.) Ezután indítható el a Netlista, ill. Bitstream generálás. 28
Xilinx SDK használata SAJÁT IP PERIFÉRIA SZOFTVER ALKALMAZÁS 29
SDK szoftver projekt System.xml 30
SDK szoftver projekt létrehozása I./a File New Application Project (sw alk. neve legyen led_ip_test_app) 31
SDK -BSP létrehozása I./b 32
SDK szoftver projekt létrehozása I./c SDK: Válasszuk ki a system.mss fület Vizsgáljuk meg az Overview, ill. Source nézeteket! 33
C forráskód létrehozása File New C SourceFile (neve legyen lab4_led_ip.c) 34
SDK szoftver projekt létrehozása II. Vizsgáljuk meg a GPIO-hozrendelt különböző.c forrás, és.h headerfile-okat File link az oldal tetején,vagy <Driver>\Xilinx\14.X\ISE_DS\EDK\sw\XilinxProcessorIP Lib\drivers\gpio_v3_01_a Vizsgáljuk meg a xgpio.h header file-t(\src\)! A GIPO-ról való olvasáshoz az alábbi lépéseket kell elvégezni GPIO inicializálása XGpio_Initialize(XGpio *InstancePtr, u16 DeviceId) Adatátviteli irány beállítása XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel, u32 DirectionMask) Adat olvasása XGpio_DiscreteRead(XGpio *InstancePtr, unsigned channel) 35
SDK szoftver projekt létrehozása III. Project Explorer Dupla kavntás a lab4_led_ip.c-re Megjelenik az Outlinefül Dupla kavntás az xparameters.h-ra(bsp fordítása során generálódik!) #define XPAR_DIP_DEVICE_ID 0 sorban található #define azonosítja a dip nevű GPIO perifériát Ez a #definehasználható pl. az Xgpio_Initialize() függvény hívásakor. 36
SDK szoftver projekt létrehozása IV. A készítendő C programnak: 1.) Be kell olvasni a dip kapcsolók aktuális állását (végtelen ciklusban) 2.) Megjeleníteni ezt a LED-eken a korábban létrehozott led_ip segítségével (lásd \LAB03) 37
SDK szoftver projekt (led_ip.h) 38
SDK szoftver projekt létrehozása V. Xilinx Tools Repositories New 3 2 1 4 39
SDK szoftver projekt létrehozása VI. Project Explorer Jobb kavntás a led_ip_test_app_bsp Board Support Package Settings 1 2 3 40
SDK szoftver projekt létrehozása VII. BSP fordítása során még az alábbi hibaüzenetet kaphatjuk: File Open File <projektdir>/lab4/drivers/led_ip_v1_00_a/src/led_ip_selftest.c Open Egyrészt adjuk hozzá az alábbi kódrészletet, amely meghatározza a felhasználó által az led_ip 1.00 IP-ben elérhető regiszterek számát Megj: Emlékezzünk vissza, hogy korábban 1 Slave regisztert állítottunk be az EDK-ban a saját IP periféria létrehozásakor Másrészt töröljük ki az alábbi define-t (xio.h), majd mentsük el! 41
SDK szoftver projekt létrehozása VIII. File Open File <projektdir>/lab4/drivers/led_ip_v1_00_a/ src/led_ip_selftest.c Open Adjuk hozzá az alábbi kódrészletet, amely meghatározza a felhasználó által az led_ip1.00 IP-ben elérhető regiszterek számát Megj: Emlékezzünk vissza, hogy korábban 1 Slave regisztert állítottunk be az EDK-ban a saját IP periféria létrehozásakor Mentsük el, és zárjuk is be a fájlt (CTRL+S). 42