UMEÅ UNIVERSITET Tillämpad fysik och elektronik Digitalteknik Lars Wållberg/Håkan Joëlson 2000-01-28 v 1.0 Elektronik DIGITALTEKNIK Vägledning till Warp Utvecklingsprogram för att beskriva logiska funktioner med VHDL och realisera dem med PLD Innehåll Inledning Programmeringsspråk VHDL Utvecklingsprogramvaran Warp Galaxy... editor och syntetisator Active-HDL Sim... simulator Programmering av PLD-kapsel Uppkoppling Några filtyper som genereras av Warp Bilaga 1...Exempel på VHDL-kod Kombinatoriska nät Sekvensnät Bilaga 2... Utdrag ur manual till Active-HDL Sim Nyckelord (för sökning i databas) VHDL, kombinatoriska nät, sekvensnät, Jedec, PLD, PAL, GAL Warp_Inl.doc
Inledning Ända sedan den digitala teknikens begynnelse har logiska funktioner realiserats elektroniskt genom att koppla ihop enskilda grindar (NAND, AND, OR, NOR, INV, osv). Dessa logiska grundfunktioner tillverkas på en liten halvledarplatta, chip, som sedan kapslas i olika utföranden. Sådana kapslar kallas IC-kretsar (Integrated Circuit) och har kommit att tillverkas med en mängd olika logiska funktioner och elektriska egenskaper. (Även analoga IC-kretsar finn i en stor mångfald.) Under 1980-talet utvecklades en ny typ av IC-kretsar, där användaren själv kunde programmera in den logiska funktion man behövde. Den typen av kretsar kallas PLD (Programmable Logic Device). Programmeringsspråk För att beskriva logiska funktioner i IC-kretsar har flera olika språkverktyg utvecklats och använts. Under 1990-talet har VHDL (Very high speed integrated circuit Hardware Description Language) blivit en av de mest använda beskrivningsspråken. VHDL utvecklades från början för att beskriva och simulera digitala kretsar men används numera även för att realisera (förverkliga) de logiska funktionerna elektriskt. VHDL innehåller många instruktioner och språkkonstruktioner. En digital konstruktion kan därför beskrivas på flera olika sätt och ändå ge samma logiska funktion. Ett annat vanligt språk är Verilog. Verilog tas inte upp i kursen Digitalteknik I. Kursen Digitalteknik I vill ge de viktigaste grundkunskaperna för att kunna realisera enkla logiska nät beskrivna med VHDL, såväl kombinatoriska nät som sekvensnät. Boolesk algebra kan användas för att beskriva de kombinatoriska näten. Sekvensnät beskrivs i VHDL med en så kallad "three process state machine". VHDL I VHDL är ENTITY och ARCHITECTURE två viktiga begrepp. ENTITY betyder enhet, "helhet", och är den del i VHDL-koden som används för att beskriva en konstruktions in- och utgångar. ARCHITECTURE betyder utformning, och är den kod som beskriver enhetens [interna] logiska egenskaper, det vill säga hur ingångarna påverkar utgångrna. För kombinatoriska nät används det som i VHDL kallas CONCURRENT STATEMENTS. CONCURRENT STATEMENTS betyder "samtidiga uppgifter". I de flesta andra språkkonstruktioner utförs uppgifterna sekventiellt, det vill säga i en viss turordning. Allteftersom koden körs, uppdateras olika signaler. VHDL är ett parallellt språk där ordningen på instruktionerna inte spelar någon roll. Utsignalerna uppdateras inte förrän alla insignaler är stabila. Alla utsignalerna uppdateras därefter samtidigt. VHDL har en bestämd syntax, d.v.s. det finns fasta regler för hur man skriver VHDL-kod. Det finns en bestämd ordning för hur man ska skriva instruktionerna, så att programvaran kan "förstå" den uppgift/funktion man vill ha utförd. Denna syntax är något man måste lära sig. För mer information om VHDL, se häftet "Grunderna i VHDL". - 2 -
Utvecklingsprogramvaran Warp Warp är ett utvecklingsprogram som kan använda VHDL för att beskriva digitala konstruktioners funktion. (Warp hanterar faktiskt även Verilog.) Programvaran består av två huvudmoduler: Enl. Warps egen dokumentation: Galaxy is the Graphical User Interface (GUI) for the synthesis and fitting engine within Warp. Warp accepts either VHDL or Verilog source files as input. The primary output of a Warp run is a.jed file. The.jed file can be used as input to a PLD programmer. Galaxy för editering, syntaxkontroll och kompilering samt för generering av jedec-filer (ett filformat som används för programmering av PLD-kapslar). Galaxy har ett grafiskt användargränsnitt. Active-HDL Sim för att simulera och kontrollera konstruktionens funktion. Om Du inte använt programvaran tidigare, följ denna instruktion. Galaxy 1. Starta Galaxy, tex genom att dubbelklicka på programikonen. Definiera projekt 2. Man jobbar alltid med ett projekt. Ett projekt innehåller en eller flera källkodsfiler, plus en mängd andra filer. Först ska alltså ett projekt skapas eller öppnas. 2.1 Om det är första gången du använder Galaxy ska allra först en ny mapp skapas. Gå ut till Windows och skapa en mapp, gärna under Warp-katalogen (C:\Warp\...). Denna placering ger minst strul. Ge mappen ett namn som är personligt för just Dig. Om Galaxy har varit igång tidigare, öppnas ett fönster med det senaste projekt som bearbetats. Om du ska arbeta vidare med det projektet, kan du gå till punkt 3. 2.2 Välj File/New på menyraden. Ett nytt fönster visas. Välj Project [Target Device]. OK (Alternativet Text File kommer att förklaras senare.) 2.3 Ytterligare en dialogruta visas. Där ska först ett Project name anges. Välj t.ex. lab152_1. Under Project path ska mappadressen till mappen du just skapade (tex C:\warp\ny_mapp) anges. Använd gärna Browse (betyder ungefär "gå runt och titta") för att leta rätt på mappen och placera projektet där. Klicka på Slutför och svara Ja för att spara. Förlängningen.pfg läggs till projektfilens namn. I vänstra rutan, projektfönstret, står det nu Source Files - Project lab152_1 (eller vilket namn du nu valde). Editera källkod 3. I ditt projekt ska nu VHDL-kod skrivas in och editeras. 3.1 Välj File/New/Text File, OK. Markören hamnar i en texteditor. En bra egenskap hos denna editor är att den känner igen så kallade reserverade ord i VHDL och ger dessa ord en annan färg (Syntax Highlight). För att denna funktion ska "komma igång" måste filen först sparas en gång med filnamnstillägget.vhd (se 3.3 nedan). Texteditorn har de flesta egenskaper en standard Windowsanpassad editor brukar ha. 3.2 Skriv in din VHDL-kod i editorn. (Se tex kodexemplena i Bilaga 1.) 3.3 Spara filen (File/Save) tex med namnet exor.vhd. Förlängningen.vhd måste skrivas dit. Det läggs inte till automatiskt om man bara skriver filnamnet. - 3 -
3.4 För att koppla källkodsfilen till projektet, gå till Project/Add files och markera den fil du nyss sparade. Klicka på Add,sedan OK I projektfönstret adderas en ikon och ett filnamn. Bara de filer som finns i projektfönstret kan kompileras. Kompilering 4. Markera en fil i projektfönstret. Ikonen blir röd. 4.1 Innan kompilering kan ske, måste en kapsel (device) väljas, eftersom du valt Project [Target device]. Välj Project/Select Device. I dialogrutan som kommer upp, kan du välja mellan stora (CPLD (Complex PLDs)) och små kretsar (SPLD (Small PLDs)). Genom att klicka på plustecknet till vänster om SPLD, får du fram en lista på PLD-typer. Välj C22V10 som Device och PLAC22V10D.25PC som Package. 4.2 Nu kan kompilering av filen göras. Välj Compile/Selected File(s). Om du glömde att välja kapseltyp (device) tidigare, anmodas du först att göra det. (Se 4.1.) I meddelandefönstret (Output Window), flik Compiler, visas kompileringförloppet och eventuella felmeddelanden. Om koden är felfri fås meddelandet Warp done. Compilation successfull. I annat fall (vanligtvis) finns fel i koden och man får meddelandet compilation failed. Programmet ger ett felmeddelande och föreslår en åtgärd i fönstret Errors & Warnings. Tyvärr är felmeddelandena ibland svårtolkade och den föreslagna åtgärden inte alltid korrekt, men felet finns ofta i närheten av den rad och kolum som anges. Rätta felen, spara och kompilera igen tills Compilation successfull meddelas. Active-HDL sim Simulering 5. Om simulering ska göras, starta simulatorn från Windows. 5.1 Två fönster Waveform och Console öppnas. Med File/Open VHDL väljs nu den textfil/vhdlkod som ska simuleras. Koden kompileras än en gång, nu för att utfilerna ska passa simulatorn. 5.2 Välj Waveform/Add Signals. Ett fönster med de signaler som kan simuleras visas. Använd Ctrl och en tryckning med vänster musknapp i dialogrutans högra halva på de signaler som ska simuleras. Avsluta med Add. I den ordning som signalerna valts kommer de att visas i Waveformfönstret. Ordningsföjden kan även ändras i efterhand. (Klicka och dra.) 5.3 Markera en signal (t.ex. a) och gå till Waveform /Stimulators. Markera signalen a i den nya dialogruta som kommer upp, och klicka på listan Stimulator type. Välj Hot key. Gå till rutan Press new hotkey och tryck på den tangent du vill använda för att ge stimulus på a. Klicka på Apply. Gör på samma sätt med övriga signaler. Välj olika bokstäver som hotkeys. Stäng dialogrutan. 5.4 Välj Simulation/Initialize simulation. Nu startas simulatorn och signalerna ges startvärden. Med tangenterna A och B kan insignalvärdena ändras under simuleringen. Ändra tiden i rutan på övre funktionsremsan (t.hö. under Waveform) till 40 ns och klicka på knappen till vänster om tidsrutan (Run for). Ändra värden på insignalerna med hotkeytangenterna så att alla insignalskombinationer testas. Vid större konstruktioner, där det blir otympligt att genomföra alla insignaler, välj ett insignalmönster som ger möjlighet att kontrollera om utsignalerna blir såsom konstruktionen avsåg. Klicka på ikonen Whole Page (ikonen med med en turkos kvadrat i ett förstoringsglas). Simuleringen fyller hela det tillgängliga utrymmet i fönstret. 5.5 Markera alla signaler och tryck höger musknapp. Välj Properties. Markera: Bold/Height=40/Literal. Klicka OK. Se vad som händer när du väljer olika egenskaper. 5.6 För Utskrift, välj File/Print,OK. Välj utskrift på liggande A4. - 4 -
Programmering av PLD-kapsel 5. För att programmera en kapsel behövs en fil på s.k. Jedec-format. Jedec är namnet på ett filformat som kan användas just för sådan programmering. 5.1 Gå tillbaka till Galaxy. Gå in under Project. Välj Set Top. Ikonen ändras. Välj åter Compile/ Selected File(s). Är allt väl, slutar meddelandefönstret, flik Compile, med Done, och en jedec-fil har skapats: -./exor.jed Om du vill, kan du m.h.a. tex Windows Utforskaren själv kontrollera detta. 6.1 Kopiera din *.jed-fil till en diskett. 6.2 Ta med den till programmeraren. Följ anvisningarna som finns vid programmeraren. Uppkoppling 7. Koppla upp kretsen. Bennummer syns dels i simuleringen och dels i filen filnamn.rpt. Några filtyper som genereras av Warp:.vhd Källkod.pfg och.hie Projektfiler.rpt Rapportfiler, som bl.a. beskriver interna logiska funktioner benkonfiguration, mm..jed Datafil för kretsprogrammering. - 5 -
Bilaga 1. Exempel på VHDL-kod Kombinatoriskt nät Två exempel på 2-ingångars XOR med BOOLEAN EQUATIONS: ENTITY exor IS PORT( a,b :IN bit; ut :OUT bit); ARCHITECTURE beh_exor OF exor IS ut <= ((NOT b) AND a) or (b AND (NOT a)); ENTITY exor IS PORT( a,b :IN bit; ut :OUT bit); ARCHITECTURE beh_exor OF exor IS ut <= a XOR b; Sekvensnät Exempel på Moore-maskin. ENTITY cnt_moore IS PORT( i :IN bit; clk :IN bit; ut :OUT bit_vector(1 DOWNTO 0) ); ARCHITECTURE beh_cnt_moore 0F cnt_moore IS TYPE tillst IS (s0,s1,s2,s3); SIGNAL nuv_tillst, nst_tillst :tillst; P0: PROCESS(nuv_tillst,i) CASE nuv_tillst IS WHEN s0 => IF i='0' THEN nst_tillst <= s1; ELSE nst_tillst <= s3; WHEN s1 => IF i='0' THEN nst_tillst <= s2; ELSE nst_tillst <= s0; WHEN s2 => IF i='0' THEN nst_tillst <= s3; ELSE nst_tillst <= s1; - 6 -
END CASE; END PROCESS; WHEN s3 => IF i='0' THEN nst_tillst <= s0; ELSE nst_tillst <= s2; P1: PROCESS(clk) IF (clk'event AND clk='1 ) THEN nuv_tillst<=nst_tillst; END PROCESS; P2: PROCESS(nuv_tillst) CASE nuv_tillst IS WHEN s0 => ut <= "00"; WHEN s1 => ut <= "01"; WHEN s2 => ut <= "10"; WHEN s3 => ut <= "11"; END CASE; END PROCESS; - 7 -
Bilaga 2. Utdrag ur inbyggda Hjälp-dokumentationen till Active-HDL Sim Stimulators A stimulator is a user-defined virtual source of stimulus attached to a signal net. The definition of a stimulator specifies a waveform which is forced on the signal and its strength, that is, the way it contributes to the effective value of the signal net. There are six types of stimulators. They are briefly described below. Clock Stimulators A clock stimulator produces a rectangular wave defined by the following parameters: frequency /period initial offset time duty cycle initial value Typically, clock stimulators are used to drive clock signals. Custom Stimulators A custom stimulator produces a graphically defined waveform. You can create the waveform manually using editing features of Waveform Editor. More typically, custom stimulators use waveforms obtained in earlier simulation runs. For example, let's assume you were using a hotkey stimulator to create some waveform during a simulation run. To re-use so created waveform during subsequent simulation runs, after re-initialization you should change the type of the stimulator assigned to the signals from Hotkey to Custom. Formula Stimulators A formula stimulator produces a waveform defined by a textual formula based on a simple syntax. The waveform is defined as a sequence of value-time pairs. The time component of a pair determines the moment the stimulated signal assumes the value defined by the value component of the pair. In addition, a formula can include the repeat switch (-r) with cause that the sequence is repeated with the specified period. The syntax of formulas is as follows: <value> <time> [, <value> <time>... ] [ -r <period> ] Predefined Stimulators A predefined stimulator is either a clock or formula stimulator to which a unique name has been assigned. Since the stimulator is referenced by its name, you can easily assigned it to several signals without repeating each time its definition. Value Stimulators A value stimulator drives the signal with a constant value. If you advance simulation step by step, you can change the value between steps by redefining the stimulator. Hotkey Stimulators A hotkey stimulator is similar in concept to a value stimulator but it provides a convenient mechanism for changing the forced value. To change the stimulator value you have to simply press a specific key. Pressing the key usually toggles between two signal values, for example, '0' and '1'. However, you can define a longer list of values that will be cyclically switched by the hotkey. Stimulator Strength The strength determines the way the stimulator contributes to the effective value of the signal net. There are three strength types: Deposit The value(s) applied by the stimulator overrides the current signal value produced in the simulation model. The effect endures until there is a subsequent driver transaction (in the simulation model) or until the stimulator is removed or disabled. Drive The value(s) applied by the stimulator contributes to the current signal value as if an additional driver (corresponding to the stimulator) were attached to the signal net. The effect endures until there is a subsequent driver transaction (in the simulation model) or until the stimulator is removed or disabled. This option can be used only for resolved signals. Override The value(s) applied by the stimulator overrides the current signal value produced in the simulation model. The effect endures until the stimulator is removed or disabled. Applying Stimulators Active-HDL provides graphical interface for defining and applying stimulators. All stimulators are managed in the Stimulators dialog, invoked by the Waveform /Stimulators menu command. See related procedures for details. In addition, formula stimulators can be applied using the force and noforce macro commands. Copyright 1995 1998 ALDEC, Inc. - 8 -
Procedures Operations on stimulators Define a hotkey stimulator and assign it to a signal 1. Select the signal in the left panel of Waveform Editor window. To select more than one signal, hold down the Ctrl key while selecting. To select all signals, choose Select All from the Edit menu. 2. Click with the right mouse button and choose Stimulators from the shortcut menu. The Stimulators dialog box will open. Go to the Signals tab. The previously selected signals will be displayed in the Signals box. 3. In the Signals box, select the signal to which you want to assign the stimulator. You can select several signals if you want to assign the same stimulator to them. 4. Select Hotkey from the Stimulator type box. 5. Click within the Press new hotkey box. Next, press the desired key. Its name should appear in the box. 6. Select the stimulator strength from the Strength box. 7. To effectively assign the defined stimulator, click Apply. A check mark will appear in the check box located to the left of the signal name. The type of the assigned stimulator will appear to the right of the signal name in the Type column. 8. If needed, repeat steps 3 7 for other signals displayed in the Signals box. 9. Click Close to close the dialog box. NOTE: While the Stimulators dialog box is open, you can add other signals from the Waveform Editor window by clicking their names in this window. Copyright 1995 1998 ALDEC, Inc. Define a formula stimulator and assign it to a signal 1. Select the signal in the left panel of Waveform Editor window. To select more than one signal, hold down the Ctrl key while selecting. To select all signals, choose Select All from the Edit menu. 2. Click with the right mouse button and choose Stimulators from the shortcut menu. The Stimulators dialog box will open. Go to the Signals tab. The previously selected signals will be displayed in the Signals box. 3. In the Signals box, select the signal to which you want to assign the stimulator. You can select several signals if you want to assign the same stimulator to them. 4. Select Formula from the Stimulator type box. 5. Enter the desired formula in the Enter formula box. 6. Select the stimulator strength from the Strength box. 7. To effectively assign the defined stimulator, click Apply. A check mark will appear in the check box located to the left of the signal name. The type of the assigned stimulator will appear to the right of the signal name in the Type column. 8. If needed, repeat steps 3 7 for other signals displayed in the Signals box. 9. Click Close to close the dialog box. NOTE: While the Stimulators dialog box is open, you can add other signals from the Waveform Editor window by clicking their names in this window. Copyright 1995 1998 ALDEC, Inc. - 9 -