Introduktion till Xilinx CPLD och ISE WebPack 6.2 Version NV Introduktionen beskriver grunderna för att använda programvaran Xilinx ISE WebPack 6.2.03 tillsammans med en CPLD (Complex Programmable Logic Device). Beteckningen ISE (Integrated Software Environment) innebär att programvaran består av flera programmoduler och även helt olika program. Programvaran hanteras med en överordnad meny, Project Navigator, som gör det enkelt att använda de olika delarna av programvaran. Programvaran finns i flera olika versioner ISE WebPack, ISE BaseX, ISE Foundation och ISE Alliance där alla versioner styrs med ungefär samma menyhantering. WebPack är en fri version som kan hämtas via Internet och den har en del begränsningar men den är mycket användbar för små och medelstora konstruktioner. WebPack finns normalt installerad i L339 och L341. Programvaran uppdateras ofta men för närvarande behåller vi version 6 i labsalarna, den senaste versionen är 10.1 från mars 2008. Vid introduktionen används vhdl-moduler enligt beskrivningarna i texten. Modulerna simuleras och realiseras med CPLD-kretsen XC9572. Det första exemplet beskriver de logiska grundoperationerna och hur programvaran kan användas. De andra exemplet visar hur en adderare kan konstrueras i VHDL. Vid laborationstillfället används ett kopplingsdäck som är utrustat med en CPLD och alla externa kopplingar. 1. Skapa ett nytt projekt Starta Xilinx Project Navigator från startmenyn i en av datorerna i L341 Välj File/New Project Välj ett godtyckligt namn till projektet och se till att det placeras på en minnesarea som är skrivbar t.e.x. D:\temp eller på din egen användare. Fyll i värden enligt nedanstående: Device Family XC9500 Device XC9572 Package PC44 Speed Grade -15 Top-Level Module Type XST VHDL Synthesis Tool XST (VHDL/Verilog) Simulator Modelsim Generated Simulation Language VHDL Notera att fönstret Sources in Project visar projektets namn och den valda kretsen. Om något behöver ändras kan man dubbelklicka på respektive ikon. Resultatet av projektinitieringen kommer att sparas i en fil av typen <name.npl> som håller ordning på projektet i fortsättningen. Sid 1
2. Skapa en ny VHDL-modul, exempel gates_2 Ett program i VHDL är normalt uppbyggt av ett antal moduler som kopplas samman till den konstruktion som ska utföras. Modulerna kan konstrueras på olika sätt eller kopieras från andra konstruktioner. Nedanstående exempel skapar en modul med det godtyckliga namnet gates_2: Välj Project/New Source VHDL Module File Name <gates_2> Svara next och finish på övriga frågor. Observera att på bildskärmen visas ett fönster med som innehåller skalet till VHDL-modulen. I fönstret ska VHDL-koden skrivas in. Komplettera källkoden så att den innehåller nedanstående: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity gates_2 is Port (a,b: in STD_LOGIC; u1, u2, u3, u4 : out STD_LOGIC); end gates_2; architecture Behavioral of gates_2 is begin u1<= a and b; u2<= a or b; u3<= a nand b; u4<= a xor b; end Behavioral; Spara koden med File/Save. Markera gates_2 (gates_2.vhd) i fönstret för Sources in Project (vänsterklicka med musen) och notera hur fönstret för Processes for Current Source förändras. I fönstret visas alltid vilka processer som är möjliga att utföra med den utvalda filen (Source). När källkodsfilen är färdig skall den kompileras och i VHDLprogrammering säger man då att man syntetiserar (Syntesize) filen 3. Kompilering Syntetisering av exemplet gates_2 Dubbelklicka med vänster mustangent på Synthesize-XST och notera att någonting händer i fönstret Console längst ner på bildskärmen. En grön bock vid Synthesize markerar att syntetiseringen lyckades. Om det blir fel visas mindre trevliga symboler och koden måste rättas. Sid 2
4. Anslutning av stift till exemplet gates_2 I exemplet är kretsen XC9572 vald och för att kunna testa den i verkligheten måste in- och utsignalerna anslutas till pinnar på kretsen. För att det ska passa till den färdiga kopplingen ska följande placeringar väljas: Ingångar: a,b till stift 1, 2 Utgångarna: u1..u4 till stift 26, 27, 28, 29 För att definiera hur in och utgångarna ska anslutas måste ytterligare en källkodsfil, Constraint File <name.ucf>, skapas: Markera gates_2 (gates_2.vhd) Välj Project/New Source Implementation Constraint File File Name <gates_2_pins> Svara next och finish på övriga frågor. Markera gates_2_pins.ucf Välj Assign Package Pins (dubbelklicka) Instruktionerna innebär att programmodulen PACE startar och signalerna kan placeras på valfria stift: Välj en av signalerna genom att vänsterklicka och dra-släpp till rätt stift Misslyckade placeringar av signaler kan tas bort genom att vänsterklicka med musen + delete. Spara filen med File Save när alla signaler är utplacerade. Stäng därefter PACE. 5. Programmering av exemplet gates_2 Anslut programmeringssladden från parallellporten på datorn till CPLD-kretsen. OBS var noga med polariteten. Slå på spänningen till kretsen. Markera gates_2 (gates_2.vhd) Välj Configure Device (impact) (dubbelklicka) Svara Next Next Finish OK på de följande frågorna. Markera (dubbelklicka) filen gates_2.jed när den dyker upp och starta programmeringen genom att svara på några frågor. Efter en liten stund visas Programming Succeeded och kretsen startar omedelbart att exekvera programmet. Ibland uppstår det fel vid programmeringen. Det vanligaste är att spänningen till kretsen inte är påslagen, att fel programmeringsfil används att kretsen är trasig.. Kontrollera att kopplingen fungerar! Sid 3
6. Simulering av gates_2 Innan en krets programmeras ska funktionen simuleras.. Till programvaran ISE WebPack finns en simulator integrerad (ModelSimXE) men egentligen är den en helt separat programvara. Simulering: Markera gates_2(gates_2.vhd) Välj Project/New Source Test Bench Waveform File Name < gates_2_tbw> Svara next, finish, OK på övriga frågor tills ett vågformsfönster visas på bildskärmen. Vågformen visar insignalerna och man kan grafiskt ändra värden genom att klicka i de blå rutorna. Vänsterklicka i de blå rutorna och ändra insignalerna till de värden du vill simulera Högerklicka där du vill att simuleringen ska sluta och Set end of testbench Spara insignalerna med Save Waveform Stäng vågforms-editorn Markera gates_2_tbw.tbw Välj simulatorn Simulate Behavioral VHDL Model Simulering med Behavioral visar konstruktionens beteende utan att införa den valda kretsens (CPLD kretsen) tidsfördröjningar. Med Simulate Post-Fit VHDL Model erhålls kretsens (verkliga) fördröjningar Sid 4
7. Exempel: Skillnaden mellan och och + I VHDL är det mycket vanligt att man använder vektorer för att kunna arbeta med fler signaler på ett enkelt sätt. Naturligtvis är det speciellt viktigt när man konstruerar datorer eller andra bussorienterade system. Med vektorer kan man använda de logiska operatorerna enligt föregående exempel men det går också att använda de aritmetiska operationerna +, - och *. När man använder de aritmetiska operationerna görs mycket av konstruktionsarbetet av syntesverktyget och man behöver inte känna till hur man kan konstruera t.ex. en adderare med vanliga grindar. Logisk AND-operation med vektorer Välj Project/New Source VHDL Module File Name <and_v> Skriv in nedanstående kod: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity and_v is port (a, b: in std_logic_vector (3 downto 0); u : out std_logic_vector(3 downto 0)); end and_v; architecture Behavioral of and_v is begin u<= a and b; end Behavioral; Dubbelklicka med vänster mustangent på Synthesize-XST Anslutning, simulering och test av exemplet and_v Anslutningar: Ingångar: a(3..0) till stift 4, 3, 2, 1 Ingångar: b(3..0) till stift 14, 13, 12, 11 Utgångarna: u(3..0) till stift 26, 27, 28, 29 Markera and_v (and_v.vhd) Välj Project/New Source Implementation Constraint File File Name < and_v _pins> Svara next och finish på övriga frågor. Markera Välj and_v _pins.ucf Assign Package Pins (dubbelklicka) Välj en av signalerna genom att vänsterklicka och dra-släpp till rätt stift Simulering: Markera and_v (and_v.vhd) Välj Project/New Source Test Bench Waveform File Name < and_v_tbw> Svara next, finish tills ett vågformsfönstret visas Vänsterklicka i de blå rutorna och ändra insignalerna till de värden du vill simulera Sid 5
Högerklicka där du vill att simuleringen ska sluta och Set end of testbench Spara insignalerna med Save Waveform Stäng vågforms-editorn Markera and_v_tbw.tbw Välj simulatorn Simulate Behavioral VHDL Model Test: Markera and_v (and_v.vhd) Välj Configure Device (impact) (dubbelklicka) Svara Next Next Finish OK på de följande frågorna. Markera (dubbelklicka) filen and_v.jed Kontrollera att kopplingen fungerar! Aritmetisk + -operation med vektorer, addition Välj Project/New Source VHDL Module File Name <add_v> Skriv in nedanstående kod: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity add_v is port (a, b: in std_logic_vector (3 downto 0); u : out std_logic_vector(3 downto 0)); end add_v; architecture Behavioral of add_v is signal u_b: std_logic_vector(4 downto 0 begin u_b<= 0 &a + b; u<=u_b(3 downto 0); end Behavioral; Dubbelklicka med vänster mustangent på Synthesize-XST Anslutning, simulering och test av exemplet add_v Anslutning: Ingångar: a(3..0) till stift 1, 2, 3, 4 Ingångar: b(3..0) till stift 11, 12, 13, 14 Utgångarna: u(3..0) till stift 29, 28, 27, 26 Markera add_v (add_v.vhd) Välj Project/New Source Implementation Constraint File File Name < add_v _pins> Svara next och finish på övriga frågor. Markera Välj add_v _pins.ucf Assign Package Pins (dubbelklicka) Välj en av signalerna genom att vänsterklicka och dra-släpp till rätt stift Sid 6
Simulering: Markera add_v (add_v.vhd) Välj Project/New Source Test Bench Waveform File Name < add_v_tbw> Svara next, finish tills ett vågformsfönstret visas Vänsterklicka i de blå rutorna och ändra insignalerna till de värden du vill simulera Högerklicka där du vill att simuleringen ska sluta och Set end of testbench Spara insignalerna med Save Waveform Stäng vågforms-editorn Markera add_v_tbw.tbw Välj simulatorn Simulate Behavioral VHDL Model Test: Markera add_v (add_v.vhd) Välj Configure Device (impact) (dubbelklicka) Svara Next Next Finish OK på de följande frågorna. Markera (dubbelklicka) filen add_v.jed Kontrollera att kopplingen fungerar! Sid 7
8. Övrigt Det finns ytterligare ett antal programmoduler, Processes, som är mycket användbara både för att dokumentera konstruktionen och verifiera att den blev som det var tänkt. Studera processerna, glöm inte att markera den source som är aktuell. Det naturligaste är att välja topmodulen, men det går lika bra att studera de olika modulerna separat. Obs Med Edit/Preferences/General kan man välja utskriften i Text-format eller HTMLformat. Välj Text-format i första hand. Normalt brukar man använda nedanstående: View Synthesis Report Visar vilka olika optioner som har valts för syntetiseringen och diverse resultat. Mot slutet finns en Final Report som visar hur många grindar och vippor som har använts. View RTL Schematic Visar ett hierarkiskt schema för konstruktionen. Realiseringen kan studeras i detalj genom att markera ett av blocken och därefter högerklicka med musen och göra Push Into the Selected Instance. För att komma tillbaka gör man Pop to the Calling Schematic. Det går även att undersöka vhdl-koden genom View Source of the Selected Instance. Den här processen är mycket användbar för att till exempel undersöka hur vhdl-koden har realiserats. Ett vanligt fel är att D-vippor och D-latchar har införts på besynnerliga ställen. Om koden är riktigt skriven finns inga extra minneselement! Fitter Report Visar först en Resource Summary som bland annat visar hur många produkttermer och register som är använda. Längre ner i rapporten kan man se hur ekvationerna (Implemented Equations) är realiserade. I slutet av rapporten visas hur signalerna är anslutna (Device Pin Out) till kretsen. Rapporten är bra för att dokumentera hur konstruktion är realiserad. Timing Report Visar tidsfördröjningen för kretsen. Observera att här används data för den valda kretsen och den CPLD som är vald har Speed Grade 15 ns och är en av de långsammaste kretsarna från Xilinx. Rapporten är viktig för att bestämma den maximala frekvensen som kan användas. Sid 8