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 rendszerek tervezése Dr. Kincses Zoltán, Dr. Vörösházi Zsolt 6. Saját periféria hozzáadása az összeállított beágyazott alaprendszerhez
Tárgyalt ismeretkörök 1. 2. 3.
Bevezetés – Beágyazott rendszerek FPGA-k, Digilent Nexys-2 és ZyBo fejlesztő kártyák és eszközök 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 AC97, 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át periféria készítése – HDL modul tervezése (VHDL v. Verilog forrásból)
• 2.) Saját periféria hozzáadása a beágyazott rendszerhez Xilinx EDK-ban • 3.) Lábkiosztás (Pin-out) hozzárendelések megadása (.UCF constraints) • 4.) Bitstream generálása és letöltése • 5.) SW teszt alkalmazás elké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 segítségével a Xilinx EDK-ban, • Saját IP Periféria létrehozása:
IP
template
– A.) led_ip: LED, – B.) seg7_ip: 7-segmenses kijelző
• Elkészült IP periféria hozzáadása összekapcsolása a beágyazott rendszerrel.
és
7
Beágyazott rendszer kibővítése BRAM DLMB BRAM vezérlő
ILMB BRAM vezérlő Utasítás
MDM
B
Adat
MicroBlaze
LEDs
led_ip
PSBs
GPIO
DIPs
GPIO
UART seg7_ip
EMC vezérlő
A 7Segs
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 → Xilinx Design Tools → ISE Design Suite 14.7 → EDK → Xilinx Platform Studio
• File → Open Project → <projectdir>/LAB03/system.xmp → Open
9
A.) LED IP Periféria template generálása I. • Az XPS/EDK-ban indítsuk el: Hardware → → Create, or Import Peripherial… → Next 1
Next >>
EDK-hoz szü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
PLB busz Big-Endian, azaz bitfordított formátumot definiál! 3
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
FW források
- Misc file – 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 -
SW források, driverek
– 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 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/data mappábból, vagy – már a hozzáadott LED_IP-n jobb gomb, majd a legördülő listából „View MPD”
• MPD = Microprocessor Peripheral Desciptor (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.vhd fá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 → Rescan User Repositories
22
Periféria hozzáadása és összekapcsolása a rendszerrel I.
• Hozzáadott kapcsolása
saját
LED_IP
periféria
buszrendszerhez
– 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 • Xilinx PlanAhead: 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ől generá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