BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS É Ö É INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK
Rendszerarchitektúrák labor Rendszerarchitektúrák labor Xilinx EDK Xilinx EDK Raikovich Tamás BME MIT BME-MIT FPGA labor
Labor tematika (Xilinx Labor tematika ( (Xilinx EDK)) • 1 1. labor: labor: – A Xilinx EDK fejlesztői környezet ismertetése • 2. labor: – Egyszerű processzoros rendszer összeállítása Egyszerű processzoros rendszer összeállítása – Egyszerű szoftver alkalmazások készítése • 3. labor: – Saját periféria illesztése Saját periféria illes tése – Megszakításkezelés – Egyidejű HW/SW fejlesztés (debugger, ChipScope) BME-MIT FPGA labor
Témakörök • • • • • •
Beágyazott rendszerek Beágyazott rendszerek MicroBlaze processzor EDK alapok Gyári Gyári és saját IP Gyári és saját IP‐ és saját IP‐k hozzáadása k hozzáadása Szoftverfejlesztés HW és SW együttes fejlesztése
BME-MIT FPGA labor
Perifériák hozzáadása a rendszerhez Intellectual Property (IP) katalógus: (IP) katalógus: • • • •
Az elérhető IP modulok listája Bal oldalon az IP Catalog fül gy IP modulok Ingyenes Fizetős IP modulok: korlátozások – Időkorlátosan használható – Csak szimuláció megengedett – Stb. Sb • IP modul hozzáadása a rendszerhez – Jobb kattintás a modul nevén – Add IP menüpont p kiválasztása
BME-MIT FPGA labor
Perifériák hozzáadása a rendszerhez Az IP modul (pl. GPIO) csatlakoztatása a rendszerhez: Az IP modul (pl. GPIO) csatlakoztatása a rendszerhez: • Átnevezés: kattintsunk az IP modul nevére, majd írjuk át • Csatlakoztatás a buszra: Bus Interfaces fül – A legördülő menüből válasszuk ki a megfelelő buszt (mb_plb), vagy – Kattintsunk az IP modultól balra lévő üres körre
BME-MIT FPGA labor
Perifériák hozzáadása a rendszerhez Az IP modul (pl. GPIO) csatlakoztatása a rendszerhez: Az IP modul (pl. GPIO) csatlakoztatása a rendszerhez: • A portok bekötése: Ports fül – A legördülő menüből válasszuk ki a megfelelő elemet – No Connection: az adott port nincs bekötve – New Connection: adott portra csatlakozó új vonal létrehozása – Make External: az adott port kivezetése az FPGA I/O lábakra – Meglévő vonal kiválasztása
BME-MIT FPGA labor
Perifériák hozzáadása a rendszerhez Az IP modul (pl. GPIO) csatlakoztatása a rendszerhez: Az IP modul (pl. GPIO) csatlakoztatása a rendszerhez: • A portok bekötése: Ports fül – Make External: új elemmel bővül a külső portok listája – Átnevezés: kattintsunk a külső port nevére, majd írjuk át – Az UCF fájlban az itt megadott portneveket kell használni
BME-MIT FPGA labor
Perifériák hozzáadása a rendszerhez Megszakításkérő vonal bekötése a megszakítás vezérlőbe: Megszakításkérő vonal bekötése a megszakítás vezérlőbe: • Periféria megszakításkérő vonala: New Connection • Megszakítás vezérlő Intr portja: kattintsunk a gombra → ablak – Baloldali lista: a még nem csatlakoztatott IRQ vonalak – Jobboldali lista: a már csatlakoztatott IRQ vonalak – Megszakításkérő vonal csatlakoztatása – Megszakításkérő vonal eltávolítása – Megszakítások priorításának beállítása
BME-MIT FPGA labor
Perifériák hozzáadása a rendszerhez Az IP modul (pl. GPIO) csatlakoztatása a rendszerhez: Az IP modul (pl. GPIO) csatlakoztatása a rendszerhez: • Cím hozzárendelés: Addresses fül – Generate Addresses gomb: a címek újragenerálása gomb: a címek újragenerálása – A báziscím módosítása: kattintsunk rá és írjuk át – A címtartomány méretének módosítása: a legördülő menüből válasszuk ki az új méretet
BME-MIT FPGA labor
Perifériák hozzáadása a rendszerhez Az IP modul (pl. GPIO) konfigurálása: Az IP modul (pl. GPIO) konfigurálása: • A System Assembly nézet → jobb kattintás az IP nevén → menü – Az IP modul konfigurálása Az IP modul konfigurálása – Az IP modul leíró fájl megtekintése/szerkesztése – A változások megtekintése – Az IP modul adatlapjának megtekintése – A HDL forrásfájlok megtekintése/szerkesztése – Eszközmeghajtó E kö h jó • •
A meghajtó leíró fájl megtekintése/szerkesztése API dokumentáció
– Az IP modul törlése
BME-MIT FPGA labor
Perifériák hozzáadása a rendszerhez Az IP modul (pl. GPIO) konfigurálása: Configure IP… menüpont Az IP modul (pl. GPIO) konfigurálása: Configure Cím és busz b állí á k beállítások
A modul busz interfészei
Modul‐specifikus Modul specifikus beállítások
Az IP modul beállításai
BME-MIT FPGA labor
Perifériák hozzáadása a rendszerhez Az IP modul konfigurációs beállításai: Az IP modul konfigurációs beállításai: • A példában használt GPIO modul beállításai – Megszakítás engedélyezése – I/O csatornák száma: 1 vagy 2 • • • •
Szélesség: g 1 – 32 bit Az adatregiszter alapértelmezett értéke Az irányregiszter alapértelmezett értéke Kétirányú vagy csak bemenet
• Részletek az IP modulok adatlapjaiban BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • • • •
Hardware menü → Create or Import Peripheral… vagy A gomb a toolbar‐on Új periféria létrehozása A perifériát az XPS projekt könyvtárában tároljuk
BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • A periféria nevének, verziójának és leírásának megadása • Ab busz interfész fé kiválasztása: k ál á PLB v4.6 vagy FSL
BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral p p Wizard: •
•
IPIF slave szolgáltatások – Szoftveres reset – Regiszterek, R i t k memória ó i tartomány, t t á FIFO – Megszakítás vezérlő IPIF master szolgáltatások – Tipikusan összetett perifériák (pl. Ethernet) esetén, nem fogjuk használni
BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • Master/slave interfész teljesítménye: burst adatátvitel – Nagyteljesítményű perifériák (pl. memória vezérlő) esetén – Nem fogjuk használni • Adatbusz szélessége – Nem burst adatátvitel esetén: mindig 32 bit – Burst adatátvitel esetén: 32, 64 vagy 128 bit
BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • Slave szolgáltatások: FIFO – Pufferelés biztosítása a PLB busz és az IP modul között – Írás és olvasás a PLB IPIF regiszterein keresztül – Részletek az adatlapban • A FIFO‐k beállításai – Írási és olvasási FIFO engedélyezése – Csomag mód engedélyezése – Szabad helyek számának jelzése – FIFO mérete → LUT/BRAM
BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • Slave szolgáltatások: megszakítás vezérlő a perifériában – IP modul megszakítások → egy vonal a CPU vagy az INTC felé – Vezérlés a PLB IPIF regiszterein keresztül – Részletek az adatlapban • A megszakítás vezérlő beállításai A megszakítás vezérlő beállításai – Device Interrupt Source Controller: belső IPIF megszakítások kezelése – Prioritás enkóder: Device ISC megszakítások azonosítása – Felhasználói logika megszakítások száma – Felhasználói logika megszakítások feldolgozása • • •
Nincs feldolgozás: normál vagy invertált Nincs feldolgozás: normál vagy invertált Szint detektálás: alacsony aktív vagy magas aktív Él detektálás: felfutó vagy lefutó
• Egyszerű Egyszerű perifériák esetén: perifériák esetén: – Nincs szükség többszintű megszakítás rendszerre – Az IRQ vonala(ka)t közvetlenül a CPU‐ba vagy az INTC‐be ( ) gy vezetjük j BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • Slave szolgáltatások: megszakítás vezérlő
BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • Slave szolgáltatások: regiszterek – Regiszterekk száma: á 1 ‐ 4096 – Címdekódolás az IPIF‐ben: minden regiszterhez külön írás (B 2IP W CE) és (Bus2IP_WrCE) é olvasás l á (Bus2IP_RdCE) (B 2IP RdCE) engedélyező dél ő jel j l
BME-MIT FPGA labor
Saját periféria létrehozása j p Regiszter interfész: Regiszter interfész: • Jelek az IPIF‐től a felhasználói modul felé – Bus2IP_WrCE: B 2IP W CE írás í á engedélyező dél ő jel(ek) j l( k) – Bus2IP_RdCE: olvasás engedélyező jel(ek) – Bus2IP_BE: bájt bá engedélyező dél ő jelek l k – Bus2IP_Data: 32 bites írási adatbusz • Jelek a felhasználói modultól az IPIF felé – IP2Bus_Data: 32 bites olvasási adatbusz – IP2Bus_WrAck: írási műveletek nyugtázó jele – IP2Bus_RdAck: olvasási műveletek nyugtázó jele – IP2Bus_Error: hiba jelzése BME-MIT FPGA labor
Saját periféria létrehozása j p Regiszter interfész: írás és olvasás Regiszter interfész: írás és olvasás Bus2IP_Clk _ Bus2IP_WrCE[3] Bus2IP RdCE[1] Bus2IP_RdCE[1] Bus2IP_BE
XXXX
BE0
Bus2IP Data Bus2IP_Data
XXXX
6F4A
Regiszter 3 IP2Bus_Data
XXXX
BE1
XXXX
XXXX
FF56
6F4A 0
Reg. 1 értéke
0
IP2Bus_WrAck IP2Bus_RdAck IP2Bus_Error BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • Slave szolgáltatások: memória címtartomány – Címtartományok í á k száma: á 1–8 – Minden címtartományhoz külön kiválasztó jel (Bus2IP_CS)
BME-MIT FPGA labor
Saját periféria létrehozása j p Memória címtartományok: Memória címtartományok: • Jelek az IPIF‐től a felhasználói modul felé – Bus2IP_CS: Bus2IP CS: memória címtartomány kiválasztó jel(ek) – Bus2IP_RNW: írás (0) / olvasás (1) kiválasztó jel – Bus2IP_Addr: Bus2IP Addr: 32 bites címbusz – Bus2IP_BE: bájt engedélyező jelek – Bus2IP_Data: Bus2IP Data: 32 bites írási adatbusz • Jelek a felhasználói modultól az IPIF felé – IP2Bus_Data: IP2Bus Data: 32 bites olvasási adatbusz – IP2Bus_WrAck: írási műveletek nyugtázó jele – IP2Bus_RdAck: olvasási műveletek nyugtázó y g jjele – IP2Bus_Error: hiba jelzése BME-MIT FPGA labor
Saját periféria létrehozása j p Memória címtartományok: írás és olvasás Memória címtartományok: írás és olvasás Bus2IP_Clk Bus2IP_CS[0] Bus2IP_CS[1] Bus2IP_RNW Bus2IP_BE Bus2IP Addr Bus2IP_Addr Bus2IP_Data Mem0[Addr0] IP2Bus_Data IP2Bus WrAck IP2Bus_WrAck IP2Bus_RdAck IP2Bus_Error
XXXX
BE0
XXXX
BE1
XXXX
XXXX
Addr0
XXXX
Addr1
XXXX
XXXX
Data0
XXXX
0
Data0 0
Mem1
0
BME-MIT FPGA labor
Saját periféria létrehozása j p A bájt engedélyező jelek (Bus2IP BE) értelmezése: A bájt engedélyező jelek (Bus2IP_BE) értelmezése: • Big‐Endian formátum, fordított bit indexelés (MSb a 0. bit) • Szavas címzés → az alsó két címbitet (30. és 31.) nem vesszük figyelembe, helyettük vannak a bájt engedélyező jelek – Írásnál: értelmezés az alábbi táblázat szerint – Olvasásnál: nincs értelmezve, a processzor rendezi át a bájtokat
BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • IP Interconnect (IPIC) vonalak kiválasztása • Szimulációs modell generálása a perifériához (ModelSim)
BME-MIT FPGA labor
Saját periféria létrehozása j p Create and Import Peripheral and Import Peripheral Wizard: • Az user_logic modul HDL forráskódjának nyelve – VHDL (a periféria top top‐level level modulja mindig VHDL nyelvű) – Verilog • ISE projekt létrehozása a perifériához • Eszközmeghajtó sablon létrehozása a perifériához
• Összegzés a létrehozandó perifériáról BME-MIT FPGA labor
Saját periféria létrehozása j p A perifériákhoz tartozó könyvtárstruktúra: A perifériákhoz tartozó könyvtárstruktúra: pcores [periféria név]_[verzió] data .pao
devl
.mpd
hdl vhdl
verilog
.vhd
.v
BME-MIT FPGA labor
Saját periféria létrehozása j p Microprocesspr Peripheral Description (MPD) fájl: (MPD) fájl: • A periféria leírását tartalmazza – Paraméterek és alapértelmezett értékeik – Busz interfész(ek) ( ) – Portok • Számunkra lényeges – Paraméterek hozzáadása – Portok P k hozzáadása h á dá • Normál kimenet, bemenet • Háromállapotú á á ú kimenet, I/O / vonal • Megszakításkérő vonal BME-MIT FPGA labor
Saját periféria létrehozása j p Microprocesspr Peripheral Description (MPD) fájl: (MPD) fájl: • Részletes szintaxis: EDK\doc\usenglish\psf_rm.pdf • Paraméter hozzáadása: PARAMETER kulcsszó PARAMETER név = alapértelmezett_érték – Az egyes opciókat vesszővel kell elválasztani – Adattípus megadása Adattípus megadása DT = integer, real real, , string, string, stb. – Értéktartomány megadása Értéktartomány megadása • Tartomány: RANGE RANGE = (alsó érték:felső érték) • Felsorolás: RANGE Felsorolás: RANGE = (8,16,32,64) • Vegyes: RANGE RANGE = (1:4,8,16) → 1, 2, 3, 4, 8, 16 BME-MIT FPGA labor
Saját periféria létrehozása j p Microprocesspr Peripheral Description (MPD) fájl: (MPD) fájl: • Port hozzáadása: PORT kulcsszó PORT név = ”” – Az egyes opciókat vesszővel kell elválasztani – Irány megadása y g DIR = I, O vagy IO – Szélesség megadása (A és B: nemnegatív egészek) VEC = [A [A:B] B] – Megszakításkérő kimenet (1 bites kimeneti port esetén) SIGIS = INTERRUPT SENSITIVITY = EDGE_RISING, (felfutó élre) EDGE_FALLING, (lefutó élre) LEVEL_HIGH, ( (magas szintre) i ) LEVEL_LOW (alacsony szintre) BME-MIT FPGA labor
Saját periféria létrehozása j p Microprocesspr Peripheral Description (MPD) fájl: (MPD) fájl: • Port hozzáadása: PORT kulcsszó PORT név = ”” – Háromállapotú kimenet (kimeneti vagy I/O port esetén) THREE_STATE THREE STATE = TRUE • Közös kimenet engedélyező jel: ENABLE ENABLE = SINGLE • Egyedi kimenet engedélyező jel: ENABLE Egyedi kimenet engedélyező jel: ENABLE = MULTI
– Háromállapotú kimenet vagy I/O esetén a modul portjai • Kimenet: Kimenet: [port név] [port név]_O O • Bemenet: [port név]_I (csak I/O port esetén) • Kimenet engedélyezés: [port név]_T – ALACSONY AKTÍV JEL(EK)! – Közös: 1 bites – Egyedi: a port szélességével egyező vektor Egyedi: a port szélességével egyező vektor BME-MIT FPGA labor
Saját periféria létrehozása j p Microprocesspr Peripheral Description (MPD) fájl: (MPD) fájl: ## Saját paraméterek PARAMETER PORT_WIDTH PORT WIDTH = 8 8, DT = INTEGER INTEGER, RANGE = (1 (1:32) 32) PARAMETER CLK_FREQ = 50000000, DT = INTEGER g szélességű g I/O p port (egyedi gy kimenet engedélyezés) g y ## Megadható ## output wire [PORT_WIDTH-1:0] my_io_O ## input wire [PORT_WIDTH-1:0] my_io_I ## output wire [PORT_WIDTH-1:0] my_io_T PORT my_io my io = ””, DIR = O O, VEC = [(PORT [(PORT_WIDTH-1):0], WIDTH-1):0] THREE THREE_STATE STATE = TRUE TRUE, ENABLE = MULTI ## 4 bites normál bemenet ## input wire [0:3] my_input PORT my_input = ””, DIR = I, VEC = [0:3] ## Megszakításkérő kimenet (megszakítás felfutó élre) ## output wire my_irq PORT my_irq = ””, DIR = O, SIGIS = INTERRUPT, SENSITIVITY = EDGE_RISING
BME-MIT FPGA labor
Saját periféria létrehozása j p Peripheral Analyze Order (PAO) fájl: (PAO) fájl: • A szintézishez szükséges fájlok listáját tartalmazza • Saját HDL fájl hozzáadása Saját HDL fájl hozzáadása lib [könyvtár név] [fájl név] [nyelv] – Könyvtár név: esetünkben a periféria neve és verziója y p j – Fájl név: a HDL forrásfájl neve (a kiterjesztés opcionális) – Nyelv: vhdl y vagy verilog gy g lib plbv46_slave_single_v1_01_a plbv46_slave_single vhdl lib b my y_pe peripheral p e a _v1_00_a 00 a use user_logic og c verilog e og lib my_peripheral_v1_00_a my_peripheral vhdl ## Saját j HDL forrásfájlok j lib my_peripheral_v1_00_a fifo verilog lib my_peripheral_v1_00_a ps2_interface vhdl BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) GPIO periféria az alábbi paraméterekkel: GPIO periféria az alábbi paraméterekkel: • A port szélessége legyen paraméterben megadható – 1 és é 32 bit közötti kö ötti érték é ték • Az egyes bitekhez tartozó kimeneti meghajtók legyenek egyedileg engedélyezhetők, engedélyezhetők illetve tilthatók • Megszakításkérés, ha megváltozik egy bemenet értéke • Regiszterkészlet: R i t ké l t 32 bites bit regiszterek i t k Bázis + 0x00 Bázis 0x00
R/W
Adatregiszter: a kimeneten megjelenő adat kimeneten megjelenő adat
Bázis + 0x04
R/W
Irányregiszter: a kimenetek engedélyezése
Bázis + 0x08 Bázis + 0x08
R
Az I/O kábak I/O kábak aktuális értéke aktuális értéke
Bázis + 0x0C
R/W
Megszakítás engedélyező regiszter (bitenként)
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) A periféria generálása a varázslóval: A periféria generálása a varázslóval: • Beállítások – Slave szolgáltatások • • •
Regiszter: 4 darab regiszter szükséges A többi szolgáltatás (FIFO, memória, stb.) nem kell B t adatátvitelre Burst d tát it l nincs i szükség ük é
– Master szolgáltatások: nem kell – A user_logic user logic modul nyelve: Verilog • Adjuk hozzá a létrehozott perifériát a rendszerhez – Így szerkeszteni tudjuk a szükséges fájlokat az XPS‐ből. – A busz és a portok bekötése majd később • Módosítani kell – A user_logic.v l fá l fájlt – A [periféria név].vhd fájlt (top‐level modul) – A [periféria név]_v2_1_0.mpd név] v2 1 0 mpd fájlt
BME-MIT
FPGA labor
Saját periféria létrehozása (példa) j p (p ) A user logic v fájl módosítása: A user_logic.v fájl módosítása: • Jobb kattintás a periféria nevére → Browse HDL Sources… • Modul d l fejléc: f lé saját á portokk megadása dá module user_logic g ( // -- ADD USER PORTS BELOW THIS LINE --------------gpio_O, gpio_I, gpio T gpio_T, irq, // -- ADD USER PORTS ABOVE THIS LINE ---------------
• Saját paraméterek megadása // -- ADD USER PARAMETERS BELOW THIS LINE -----------parameter GPIO_WIDTH = 8; // -- ADD USER PARAMETERS ABOVE THIS LINE ------------
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) A user logic.v fájl módosítása: A user_logic.v fájl módosítása: • Saját portok típusának és szélességének definiálása // -- ADD USER PORTS BELOW THIS LINE ----------------output reg [GPIO_WIDTH-1:0] gpio_O; input wire [GPIO_WIDTH-1:0] gpio_I; output p reg g [GPIO_WIDTH-1:0] gp gpio_T; output wire irq; // -- ADD USER PORTS ABOVE THIS LINE -----------------
• A nyugtázó‐ á ó és é hibajelek hib j l k meghajtása: h j á nem kell k ll késleltetés ké l l é – A beírandó adatot azonnal be tudjuk írni a regiszterbe – A beolvasandó adat azonnal rendelkezésre áll (regiszter olvasás) //A nyugtázó- és hibajelek meghajtása. assign g IP2Bus_WrAck = |Bus2IP_WrCE; assign IP2Bus_RdAck = |Bus2IP_RdCE; assign IP2Bus_Error = 0;
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) A user logic.v fájl módosítása: A user_logic.v fájl módosítása: • Az írási adatbusz bit sorrendjének megfordítása – Célszerű a fordított bit indexelés miatt (MSb a 0. bit, LSb a 31. bit) //Az írási adatbusz bitjeinek megfordítása reg [C_SLV_DWIDTH-1:0] wr_data; integer g i; always @(*) for (i = 0; i < C_SLV_DWIDTH; i = i + 1) wr data[i] <= Bus2IP wr_data[i] Bus2IP_Data[C_SLV_DWIDTH-i-1]; Data[C SLV DWIDTH i 1];
• Az adatregiszter: a gpio_O port reg típusú, csak 32 bites írás //A GPIO port adatregisztere always @(posedge Bus2IP_Clk) if (Bus2IP_Reset) gpio O <= 0; gpio_O else if (Bus2IP_WrCE[0] && (Bus2IP_BE == 4’b1111)) gpio_O <= wr_data[GPIO_WIDTH-1:0];
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) A user logic.v fájl módosítása: A user_logic.v fájl módosítása: • Az irányregiszter: a gpio_T port reg típusú, csak 32 bites írás //A GPIO port irányregisztere (reset: minden vonal bemenet). always @(posedge Bus2IP_Clk) if (Bus2IP_Reset) gpio_T <= 32’hffffffff; else l if (Bus2IP_WrCE[1] && (Bus2IP_BE == 4’b1111)) gpio_T <= ~wr_data[GPIO_WIDTH-1:0];
• A megszakítás engedélyező regiszter: csak 32 bites írás //A megszakítás engedélyező regiszter. reg [GPIO_WIDTH-1:0] [GPIO WIDTH 1 0] irq_enable; i bl always @(posedge Bus2IP_Clk) if (Bus2IP_Reset) irq_enable <= 0; else if (Bus2IP_WrCE[3] && (Bus2IP_BE == 4’b1111)) irq enable <= wr_data[GPIO_WIDTH-1:0]; irq_enable wr data[GPIO WIDTH 1:0];
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) A user logic.v fájl módosítása: A user_logic.v fájl módosítása: • A bemenet szinkronizálása: mert aszinkron az órajelhez képest A megszakításkérő jelzés előállítása • A megszakításkérő jelzés előállítása – Az adott bit bemenet – Az adott bitre engedélyezve van a megszakítás – Az adott bit értéke megváltozott //A bemenet szinkronizálása (mert aszinkron az órajelhez képest). reg [GPIO_WIDTH-1:0] sample0, sample1, sample2; always @(posedge Bus2IP_Clk) if (Bus2IP_Reset) (Bus2IP Reset) {sample2, sample1, sample0} <= 0; else {sample2, sample1, sample0} <= {sample1, sample0, gpio_I}; //A megszakításkérő jelzés előállítása (megszakítás felfutó élre). assign irq = |((sample1 ^ sample2) & gpio_T & irq_enable);
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) A user logic.v fájl módosítása: A user_logic.v fájl módosítása: • Az olvasási adatbusz meghajtása: ha nincs olvasás, akkor értéke 0 //Az olvasási adatbusz meghajtása. reg [0:C_SLV_DWIDTH-1] rd_data; always l @(*) case (Bus2IP_RdCE) 4’b1000: rd_data 4’b0100: rd_data 4’b0010: rd_data 4’b0001: rd_data default: rd_data endcase
<= <= <= <= <=
gpio_O; ~gpio gp _T; ; sample1; irq_enable; 0;
assign IP2Bus_data = rd_data; endmodule
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) A top‐level A top level modul (VHDL fájl) módosítása: modul (VHDL fájl) módosítása: • Az alábbi módosításokat két helyen kell végrehajtani – entity [periféria név] is… – componenet user_logic is… • Paraméterek hozzáadása -- ADD USER GENERICS BELOW THIS LINE --------------GPIO_WIDTH : integer := 8; -- ADD USER GENERICS ABOVE THIS LINE ---------------
• Portok hozzáadása -- ADD gpio_O gpio_I gpio T gpio_T irq -- ADD
USER PORTS BELOW THIS LINE -----------------: out std_logic_vector(GPIO_WIDTH-1 downto 0); : in std_logic_vector(GPIO_WIDTH-1 downto 0); : out std_logic_vector(GPIO_WIDTH std logic vector(GPIO WIDTH-1 1 downto 0); : out std_logic; USER PORTS ABOVE THIS LINE ------------------
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) A top‐level A top level modul (VHDL fájl) módosítása: modul (VHDL fájl) módosítása: • Az alábbi módosításokat egy helyen kell végrehajtani – USER_LOGIC_I USER LOGIC I : component user_logic… user logic • Paraméterek leképzése -- MAP USER GENERICS BELOW THIS LINE --------------GPIO_WIDTH => GPIO_WIDTH, -- MAP USER GENERICS ABOVE THIS LINE ---------------
• Portok leképzése -- MAP gpio_O gpio_I gpio_T gp irq -- MAP
USER PORTS BELOW THIS LINE -----------------=> gpio_O, => gpio_I, => gp gpio_T, => irq, USER PORTS ABOVE THIS LINE ------------------
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) Az MPD fájl módosítása: Az MPD fájl módosítása: • Paraméterek hozzáadása – Közvetlenül a már meglévő paraméterek elé írjuk be ## Saját paraméterek PARAMETER GPIO_WIDTH = 8, DT = INTEGER, RANGE = (1:32)
• Portok hozzáadása – Közvetlenül Kö l ül a már á meglévő lé ő portokk elé lé írjuk í j k be b ## Saját portok PORT gpio i = ””, ”” DIR = IO IO, VEC = [(PORT [(PORT_WIDTH-1):0], WIDTH 1) 0] THREE THREE_STATE STATE = TRUE TRUE, ENABLE = MULTI PORT irq = ””, DIR = O, SIGIS = INTERRUPT, SENSITIVITY = EDGE_RISING
BME-MIT FPGA labor
Saját periféria létrehozása (példa) j p (p ) A saját periféria beillesztése a rendszerbe: A saját periféria beillesztése a rendszerbe: • A módosítások figyelembe vétele – Project P j t menü ü → Rescan R U Repositories User R it i vagy – A gomb a toolbar‐on • Ezután á a szokásos ká módon ód lehetséges: l h é – Paraméterek beállítása – Csatlakoztatás a buszra – Portok bekötése – Címek kiosztása
BME-MIT FPGA labor
Perifériák tesztelése Xilinx Microprocessor Debug (XMD) alkalmazás: (XMD) alkalmazás: • Alapfunkciók tesztelése: memória írás és olvasás • Az XMD indítása: – Debug g menü → Launch XMD… vagy gy – A gomb a toolbar‐on • Első indításnál: a debug opciók beállítása – Az alapértelmezett beállítások megfelelőek – Connection C i type: Hardware H d – JTAG Cable: Auto – Auto‐Discover JTAG Chain Definition: engedélyezve BME-MIT FPGA labor
Perifériák tesztelése Fontosabb Xilinx Microprocessor Debug (XMD) parancsok: Fontosabb Xilinx (XMD) parancsok: • Memória írása: mwr [cím] [adat] <w|h|b> – Adatformátum: w (32 bit, alapértelmezett), h (16 bit), b (8 bit) – A címet az adatformátumnak megfelelő határra kell igazítani • Memória olvasása: Memória olvasása: mrd [cím]
<w|h|b> – Az olvasások számának megadása nem kötelező – Több olvasásnál a cím növekszik az adatformátum szerint Több l á ál í ö k ik d tf át i t • Programkód letöltése: dow dow [elf elf_fájl_név] _fájl_név] g \ karakter helyett a / karakter kell y / – Az elérési út megadásakor a \ • A processzor elindítása: run run • A processzor leállítása: stop stop • A rendszer alapállapotba hozása: rst A d l áll tb h á rst t • Kilépés az XMD programból: exit exit BME-MIT FPGA labor