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: 2016. április 7.
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 (ZyboAC97, Nexys-2 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
Nexys-2 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 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
Beágyazott rendszer kibővítése BRAM Utasítás ILMB BRAM vezérlő MicroBlaze DLMB BRAM vezérlő Adat B MDM UART A LEDs led_ip seg7_ip 7Segs PSBs DIPs GPIO GPIO EMC vezérlő PSDRAM Flash PLB Busz Új saját, a Xilinx IP katalógusban nem szereplő modul tervezése és integrálása: A.) led_ip: LED-ek vezérlésére(saját IP, nem GPIO modul) B.) seg7_ip: 7-szegmenses kijelző vezérlésére(digilent csomag) 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 (azaz a \LAB02 mappa 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 9
A.) LED IP Perifériatemplate generálása I. Az XPS/EDK-banindítsuk el: Hardware Create, or Import Peripherial Next 1 Next >> EDK-hozszükséges busz interfészek és könyvtár struktúra is fog generálódni. 2 10
Periféria template generálása II. * IP neve: csak kisbetűs! 1 2 3 PLB busz Big-Endian, azaz bitfordított formátumot definiál! 11
Periféria template generálása III. 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 - D:\vzsolt\Lab03_MyIP_Nexys2/pcores/led_ip_v1_00_a/hdl top entity : vhdl/led_ip.vhd user logic : vhdl/user_logic.vhd -XPS interface - D:\vzsolt\Lab03_MyIP_Nexys2/pcores/led_ip_v1_00_a/data mpd: led_ip_v2_1_0.mpd pao: led_ip_v2_1_0.pao -Miscfile - D:\vzsolt\Lab03_MyIP_Nexys2/pcores/led_ip_v1_00_a/devl help : README.txt option : ipwiz.opt log : ipwiz.log -Driver source - D:\vzsolt\Lab03_MyIP_Nexys2/drivers/led_ip_v1_00_a/src makefile : Makefile header : led_ip.h source : led_ip.c selftest : led_ip_selftest.c - Driver interface - D:\vzsolt\Lab03_MyIP_Nexys2/drivers/led_ip_v1_00_a/data mdd: led_ip_v2_1_0.mdd tcl: led_ip_v2_1_0.tcl FW források SW források, driverek 15
Periféria template generálása VI. 2 1 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 2 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: 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 ~147. sorától kezdve LED_PROC : process (Bus2IP_Clk) is begin if Bus2IP_Clk'event and Bus2IP_Clk = '1' then if Bus2IP_Reset = '1' then led_i <= (others => '0'); else if Bus2IP_WrCE(0) = '1' then led_i <= Bus2IP_Data(24 to 31); --big 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: HDL (.vhd) forráskódok szerkesztésére, és szintaxisának ellenőrzésére javasolt használni a Xilinx ISE fejlesztő környezetet (hiba előbb detektálható): Indítsuk el a <projectdir>/lab03/pcores/led_ip_v1_00_a/devl/projnav /led_ip.xise Szerkesszük, és ellenőrizzük a forrás fájlokat! 21
Módosítások frissítése Végül az IP katalógushoz szerkesztett saját IP periféria minden módosítása frissíthető:.ucf, VHDL források (led_ip.vhd, user_logic.vhd). 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 SPLB = mb_plb kiválasztása 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 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:= 0x8302_0000 Címtartomány mérete legyen: 64K 1 2 3 25
GPIO jelek FPGA lábakhoz rendelése II. Módosítani kell az.ucf file-t (\data\system.ucf alapértelmezett) 1 2 LED lábak: LVCMOS33! 26
.UCF hiba LED lábaknál XilinxPlanAhead: Memória IOSTANDARD-jével(LVCMOS 3.3V) ütközik a LED_GPIO IOSTRANDARD-je(2.5V)! Megoldás: LED IOSTANDARD = LVCMOS33 legyen. ütközések 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, FSL_x stb.) Ezután indítható el a Netlista, ill. Bitstream generálás. 28
LED_IP periféria SW alkalmazás A saját LED_IP periféria illesztése után a SW alkalmazás megírása történik: BER_07 fólia! 29