Pannon Egyetem, MIK-VIRT, Veszprém Dr. Vörösházi Zsolt voroshazi.zsolt@virt.uni-pannon.hu Tervezési módszerek programozható logikai eszközökkel 3. Xilinx ISE Design Suite integrált fejlesztő rendszer használata. ISim szimulációs eszköz használata Mérnöktovábbképző tanfolyam
2 Tárgyalt ismeretkörök 3. előadás I.) Xilinx ISE Design Suite fejlesztő környezet, II.) Xilinx ISim integrált szimulátor használata.
3 Bemutatás egyszerű példán keresztül I. XILINXISE DESIGN SUITE(14.7)
XilinxISE Design Suite14.7 Laborokon a XilinxISE Design Suite14.7 integrált fejlesztő keretrendszert használjuk! *ISE Project Navigator: integrált fejlesztő környezet, amelyből más program modulok indíthatók, mint pl: Core Generator IP magok paraméterezése Schematic Editor Kapcsolási rajz szerkesztő *ISim integrált szimulátor PlanAhead Teljes tervezési folyamat menedzselése Xilinx Platform Studio(XPS) = EDK + SDK Beágyazott rendszer firmware + szoftver együttes tervező / fejlesztő környezete Timing Analyzer Időzítési analizátor FPGA Editor (FPGA chip layout) *impact Bitstream(FPGA konfiguráció) letöltő program / debug ChipScope: logikai analizátor * Következő előadáson részletesen tárgyaljuk és használjuk 4
XilinxISE Project Navigator
6 XilinxCoreGenerator Paraméterezhető IP-k (Intellectual Property, azaz ún. Szellemi termékek ) adatbázisa, amelyeket kifejezette Xilinx FPGA eszközökre optimalizáltak. Különböző előre elkészített funkciók katalógusa, melyek paraméterei GUI-n keresztül konfigurálhatóak. Ezekből szimulálható, illetve szintetizálható, ált. titkosított (encrypted) forrásokat, leírókat generálhatunk, melyek beépíthetők a FW tervekbe. A generálható IP-k rendkívül sokoldalúak, komplexitásuk az egyszerű FIFO-tól egészen a memória vezérlőkig, szűrőkig terjedhet. Van közöttük: Legtöbb szabadon elérhető (freely available), mások Licensz kötelesek (licensed), de időkorláttal kipróbálhatóak* Low-level- alap blokkok/ funkciók: Komparátorok, számlálók, Shift Regiszterek, Ált. Regiszterek, Akkumulátorok FIFOs,(soft-core) Memória vezérlők High-level- rendszer szintű funkciók: Reed-Solomon Dekódoló Kódoló, FIR szűrő, FFT(DSP alkalmazásokhoz) Szabványos busz interfészek (PCI, PCI-X ) Hálózati interfészek, összeköttetések (Ethernet, SPI-4.2, PCI ) PCI EXPRESS mikroprocesszor interfészek
7 XilinxISE: Egyszerű példa Digilent Nexys-2 FPGA kártyán található LED-ek, illetve kapcsolók összekötése (egyelőre anélkül, hogy a VHDL nyelvi elemeit részletesen tárgyalnánk) Feladat: 8 kapcsoló (sw<7:0>) összekötése a 8 LED kijelzővel (led<7:0>) Főbb lépések a következők: 1. Projekt létrehozása (Create project). 2. HDL fileok létrehozása (újat) vagy hozzáadása (már meglévőt). 3. HDL nyelvi szintaxis ellenőrzése (Check HDL syntax). ISE Project Navigator indítása: Programok Xilinx ISE Design Suite 14.7 ISE Project Navigator
8 1.a.) Projekt létrehozása Egy ISE projekt alapvető információkat tartalmaz a forrás fileokról (pl. HDL, EDIF), illetve a használt FPGA eszközről (target device) a.) Project Navigator, File menü New Project (A New Project Wizard) New project ablaka jelenik meg. Adjuk meg a projekt nevét ( sw8toled8 ), és elérési útját. - Figyeljünk arra hogy az elérési út NE tartalmazzon ékezetet és white-space karaktereket! - A projekt neve, és majd a HDL forrás neve NE kezdődjön számmal, csak betűvel(de lehet bennük szám). - Lehetőség szerint a projekt neve és a forrás(ok) neve legyen eltérő, a későbbi hibaüzenetekben szereplő azonosítás végett. Ellenőrizze, hogy a Top-level típus, azaz a legfelső hierarchia szinten lévő forrás típusa a HDL (lehet még EDIF/Schematic/NGC/NGO formátumot is hozzárendelni a projekthez).
9 1.a.) Projekt létrehozása 1 2
10 1.b.) Projekt beállításai New Project Wizard - Device Properties ablak. Itt kell megadni a használt FPGA eszköz típusát. Ez a Digilent Nexys-2 kártya adatlapjában pontosan meg van adva, illetve ennek legtöbb paramétere az FPGA-s chip tokjáról is leolvasható. - Product Category: All - Family: Spartan3E -Device: XC3S1200E XC3S500E - Package: FG320 -Speed grade:-4 //(Nexys-2 1200K)#1-2. kártya //(Nexys-500K) #3-10. kártya, vagy Szükséges lehet azt is ellenőrizni, hogy a Xilinx XST szoftver van-e kiválasztva a szintézis eljáráshoz(mivel lehet külső gyártó szoftverét is alkalmazni) - Synthesis Tool: XST (VHDL/Verilog) //Xilinx Systhesis Tool for XST - Szimulátor: Isim(ISE beépített szimulátor modulja, később ModelSim XE-t használjuk) - Preferált nyelv: VHDL (lehetne akár verilog HDL is) Néhányszor Next -et kell nyomni a következő dialogus ablakokra majd Finish.
11 1.b.) Projekt beállításai!
12 2. Tervezői file (HDL) hozzáadása Itt kell hozzáadni a meglévő, vagy létrehozni egy HDL forrás filet. a.) Project menü + New Source. New Source Wizard - Select Source Type ablak jelenik meg. Itt a VHDL Module -t kell kiválasztani. A file neve legyen sw2led.vhd. NEXT. b.) A következő ablakban a port neveket lehet megadni, típusaikkal, illetve busz szélességükkel. Port Type/Name/Bus: Input sw busz típus (7:0) Port Type/Name/Bus: Output led busz típus (7:0) Architektúra neve maradhat alap Behavioral(azaz viselkedési). NEXT c.) Summaryablakra egy Finish után egy új HDL szöveges szerkesztő jelenik meg a workplace window-ban Az ISE szoftver automatikusan generálja le a HDL forrásfiletartalmát, amely a headert, library neveket, entitás deklarációkat és egy üres architektúra vázat tartalmaz d.) Alapértelmezettként, az ISE a következő libraryhozzárendeléseket generálja le: library IEEE; use IEEE.STD_LOGIC_1164.ALL; A fenti könyvtár IEEE szabvány, de lehet helyette még alkalmazni a IEEE.STD-LOGIC- ARITH.ALL, vagy a IEEE.STD-LOGIC-UNSIGNED.ALL könyvtárakat is. e.) a szöveges editor használható a VHDL forráskód szerkesztéséhez f.) Ha szükséges ezek a lépések megismételhetőek, amikor több forrásfiletis hozzá kell adni a projekthez
13 2.a.) HDL modul létrehozása 1 2
14 2.b.) Portok megadása 3
15 library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values -- use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. -- library UNISIM; -- use UNISIM.VComponents.all; entity sw2led is Port ( sw : in STD_LOGIC_VECTOR (7 downto 0); led : out STD_LOGIC_VECTOR (7 downto 0)); end sw2led; architecture Behavioral of sw2led is begin end Behavioral; 2.c.)-e.) Generált HDL forrásfile Ide kerülhetnek a felhasználói kódrészletek
3.) Szintaxis ellenőrzés Végül a HDL forrás(ok) szerkesztése után a Check Syntax segítségével lehet a nyelvi szintaxis ellenőrzést elvégezni a.) A kívánt HDL forrás kiválasztása a Sources ablakban. b.) Majd alatta a Processes ablakban, click [+] ikonon az XST Synthesize mellett, megjeleníthetők az egyes hierarchia szintek. c.) Double-click a Check Syntax process-en. A transcript ablak jeleníti meg az ellenőrzés eredményét (riportolja az esetleges hibákat, és figyelmeztetéseket stb.) Hiba/leáll a futtatás = vörös X, Figyelmeztetés/továbblép = sárga! Mindaddig amíg hiba van a forrásfile-ban (warning megengedhető), el kell végezni a korrekciót és a Szintaxis ellenőrzést. I.)Próbaképpen:abeginésendközöttirészreadjukmegelőször: sw <= led; output-ot, tehát a portok irányultságához képest ellentétesen van hajtva. II.)Majdpróbáljukki: led <= sw; // Ekkor OK. //Ekkor hibát kapunk mivel az inputhoz rendeltük az 16
3. a.) CheckSyntaxhiba 17
3. b.) CheckSyntaxOK. 18
ViewTechnologySchematic 19
20 Bemutatás egyszerű példán keresztül II. XILINXISIMINTEGRÁLT SZIMULÁTOR
21 Felhasznált irodalom: Xilinx ISim In-depth tutorial(ug682): www.xilinx.com/support/documentation/sw_manuals/xilinx14_3/ug682.pdf Xilinx ISimUser Guide(UG660): www.xilinx.com/support/documentation/sw_manuals/xilinx14_7/plugin_ism.pdf Digilent Nexys-2 reference manual: http://digilentinc.com/data/products/nexys2/nexys2_rm.pdf Digilent Adept Suite: http://www.digilentinc.com/products/detail.cfm?navpath=2,66,828&prod=adept2
XilinxISE + ISim Xilinx ISE Design Suite (14.7) Xilinx ISim integrált HDL szimulátor (14.7) Ez egy alternatív lehetőség a helyett, hogy a kereskedelmi forgalomban kapható, piacvezető professzionális Mentor ModelSim szimulátort használjuk, Létezik néhány ingyenes HDL szimulációs eszköz is, pl. Icarus Verilog, Verilator, GHDL, etc. On-line szimulátorok: http://www.edaplayground.com http://iverilog.com/ 22
Eml.: új ISE project létrehozása File -> New Project Projekt neve: myand2 Top-level forrás file típusa: HDL 23
ISE projekt beállításai Kiválasztani: Family: Spartan3E Device: XC3S500E / XC3S1200E Package: FG320 Speed-4 Synthesis tool: XST Simulator: ISim! Preferred Language: VHDL! 24
Új VHDL forrás létrehozása Project New Source VHDL Module kiválasztása File név ( myand2g ) 1 2 25
Modul (entitás) név, portlista Legyen két bemenete: (a,b) input irányultságú Legyen egy kimenete: (c) output irányultságú 26
VHDL forráskód: AND kapcsolat CTRL+S: VHDL forrásfile mentése (*) CheckSyntax: fontos a helyes VHDL szintaxis ellenőrzése tesztelés és fordítás (szintetizálás) előtt. 27
28 Testbench: tesztkörnyezet összeállítása myand2g Behavioral (myand2g.vhd) kijelölése a forrás ablakban. Project New Source 1VHDL Test Bench kiválasztása 2File név ( myand2g_tb ) Konvenció: <_tb> jelölje a testbench-et mindig. 2 1
29 Testbenchhozzárendelés 1
Testbenchfájl megnyitása 1 View: Simulation 2 [+] myand2g_tb megnyitása 3[+] ISim simulator megnyitása 1 2 3 30
Testbenchsablon módosítása ARCHITECTURE behavior OF myand2_tb IS BEGIN -- Component Declaration for the Unit Under Test (UUT) COMPONENT myand2g PORT( a : IN std_logic; b : IN std_logic; c : OUT std_logic ); END COMPONENT; --Inputs signal a : std_logic := '0'; signal b : std_logic := '0'; --Outputs signal c : std_logic; -- No clocks detected in port list. Replace <clock> below with appropriate port name -- Instantiate the Unit Under Test (UUT) uut: myand2g PORT MAP ( a => a, b => b, c => c ); -- Stimulus process stim_proc: process begin -- hold reset state for 100 ns. wait for 100 ns; -- insert stimulus here a <= '1'; wait for 10 ns; b <= '1'; wait for 5 ns; a <= '0'; wait for 20 ns; b <= '0'; wait for 10 ns; wait; end process; END; 31
ISimszimulátor beállításai Fontos: testbench kiválasztása Processesablak [-] ISimSimulator 1 Jobb klikk Simulate BehavioralModel, majd Process Properties 1! 32
ISimSimulationPropertiesbeállítások Display level: Advanced Simulation Runtime 200 ns Other Compiler Options: -timeprecision_vhdl 1ns 2 3 1
ISimszimulátor indítása SimulateBehavioral Model indításával Waveform ablak nyílik meg, melyben a gerjesztéseknek (stimulus) megfelelő kimeneti jelek vizsgálhatóak. 1! 34
ISimfelhasználói interfész: waveformablak 35
ISE szintézis / implementáció 1 Sourcesablak: Implementation kiválasztása myand2g Behavioral kiválasztása Processes ablak: dupla kattintás Synthesize XST 2 3 36
ViewRTL Schematic 37
ViewTechnologySchematic 38
UserConstraints: felhasználói megkötések Sourcesablak: myand2g Behavioral kiválasztása Project menü New Source Implementation Constraint File kiválasztása a listából (.ucf) File név (myand2g) Két megoldás is van az FPGA fizikai lábak hozzárendelésére (assign pin constraints): a.) text editor (ISE) b.) grafikus Floorpan IO Editor (Pin Planner) 39
a.) FPGA lábak: text editor Sourcesablak: [+] myand2g Behivioral myand2g.ucf kiválasztása Processes ablak: User Constraints Edit Constraints by text 40
41 a.) AssignPackagePins: myand2g.ucf Master UCF fileok megnyitása Nexys2 500K / 1200K: http://digilentinc.com/data/products/nexys2/nexys2_500general_ucf.zip http://digilentinc.com/data/products/nexys2/nexys2_1200general_ucf.zip #LEDs és #Switches szekciók átmásolása a myand2g.ucf fájlba: # Leds NET "Led<0>" LOC = "J14"; # Bank = 1, Pin name = IO_L14N_1/A3/RHCLK7, Type = RHCLK/DUAL, Sch name = JD10/LD0 # Switches NET "sw<0>" LOC = "G18"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = SW0 NET "sw<1>" LOC = "H18"; # Bank = 1, Pin name = IP/VREF_1, Type = VREF, Sch name = SW1 led<0> átnevezése c, sw<0> átnevezése b, sw<1> a. Végül: myand2g.ucf mentése.
b.) AssignPackagePins Sourcesablak: [+] myand2g Behivioral Processesablak: [+] Place& Route kiválasztása. FloorplanDesign kiválasztása 42
b.) AssignPackagePins Layoutmenü -> IO Planning Site-ok beállítása a: H18//SW1 b: G18//SW0 c: J14 //LED0 43
ImplementDesign Processesablak: Implement Design Placeand Route(PAR) Reportellenőrzése a Console-ban: LOCed IBUFs/IOBs. Design Summary Report: Number of External IOBs 3 out of 232 1% Number of External Input IOBs 2 Number of External Input IBUFs 2 Number of External Output IOBs 1 Number of External Output IOBs 1 Number of External Bidir IOBs 0 Number of Slices 1 out of 4656 1% Number of SLICEMs 0 out of 2328 0% 44
45 ProgrammingFile Properties Processes ablak: Generate ProgrammingFile -> Properties StartupOptions/ FPGA Start-UpClocktoJTAG Clock. OK. Start Generate Programming File
AdeptSuite FPGA konfigurálás lépései 1USB kábel csatlakoztatása Nexys2 kártyához. Kártya bekapcsolása. 2Digilent Adeptindítása 3Config Tab 4Initialize Chain 5Browse myand2g.bit FPGA konfigurációs file (bitstream) 6Program 2 3 4 1 46
Feladat 1.): teljes Design Flow Switch-Led feladat implementálása FPGA-n SW(7:0) összekapcsolása LED(7:0)-el, Check Syntax-> Synthesis ->Implementation ->Generate bitstream lépések végrehajtása, VHDL Testbench készítése ( sw8toled8_tb néven) és a.vhd forrásfile viselkedési szimulációja Xilinx ISim segítségével,.bit (bitstream) letöltése a Spartan-3E FPGA-ra(Nexys2) az Adept Suite segítségével. Ellenőrzés. 47
48 Feladat 2.) A képen látható kombinációs logikai hálózatmegtervezése és implementálása VHDL-ben ( multi_gates.vhd néven), amely a következő kapukat és összeköttetéseket tartalmazza: SW(1:0) port -> a és b bemenetekre LED(5:0) port -> az egyes <xyz>_gate(s) kezelésére Check Syntax-> Synthesis-> Implementation-> Generate bitstream VHDL Testbenchkészítése ( multi_gates_tb.vhd néven) és a.vhdforrásfile viselkedési szimulációjaxilinx ISimsegítségével.bit (bitstream) letöltése a Spartan-3E FPGA-ra (Nexys2) az Adept Suite segítségével. Ellenőrzés.
49 Feladat 2.) library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity multi_gates is port( a : in STD_LOGIC; b : in STD_LOGIC; and_gate : out STD_LOGIC; nand_gate : out STD_LOGIC; or_gate : out STD_LOGIC; nor_gate : out STD_LOGIC; xor_gate : out STD_LOGIC; ); end multi_gates; xnor_gate : out STD_LOGIC architecture Behavioural of multi_gates is begin and_gate <= a and b; nand_gate <= a nand b; or_gate <= a or b; nor_gate <= a nor b; xor_gate <= a xor b; xnor_gate <= a xnor b; end Behavioural;