UMEÅ UNIVERSITET Tillämpad fysik och elektronik Digitalteknik Håkan Joëlson 2003-09-15 v 2.1 DIGITALTEKNIK Laboration D163 Programmerbar logik (PLD) Programmeringsspråket VHDL Kombinatoriska funktioner i VHDL för PLD Sekvensfunktioner i VHDL för PLD Innehåll Kombinatoriska funktioner Uppgift 1...Introduktion/övning Uppgift 2...Heladderare Uppgift 3...Komparator Uppgift 4...Kodlås Sekvensfunktioner Uppgift 5... Övningsexempel Uppgift 6... Automat Namn... Personnummer... Studieprogram... Epostadress... Datum för visad koppling (signerad)... Datum för inlämning... LAB_D163.DOC
Inriktningen i denna laboration är att få en förståelse för hur mer eller mindre komplicerade digitala kretsar kan förverkligas genom att programmera generella icke funktionsbestämda digitala kretsar (Programmable Logic Devices - PLD). Programmeringsspråket som avses här är VHDL (Very high speed integrated circuit Hardware Definition Language). I laborationen ingår att programmera några olika typer av digitala funktioner. 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 man använder kan "förstå" den uppgift/funktion man vill ha utförd. Denna syntax är något man helt enkelt måste lära sig. Som förberedelse för denna laboration, läs om språket VHDL i häftet Grunderna i VHDL och om programvaran WARP i häftet Vägledning till Warp. Konsultera häftena vid behov i det fortsatta arbetet. I botten förutsätts också kännedom om vad vissa grundläggande begrepp inom digitaltekniken står för. Läs häftet Några centrala termer i digitaltekniken. Digitala logiska kretsar och nät delar man in i kombinatoriska kretsar/nät och sekvenskretsar/nät. Laboration D163 Kombinatoriska funktioner i VHDL 2
KOMBINATORISKA FUNKTIONER I VHDL Det som utmärker kombinatoriska kretsar och nät är att en viss utsignal alltid beror enbart av en viss specifik insignal. Uppgift 1 Introduktion/övning Använd en PLD (Programmable Logic Device) för att realisera en EXOR grind. Kommentar 1. Beskriv grinden med VHDL. (Använd kod från något av exemplena nedan om du vill.) 2. Simulera funktionen 3. Programmera en kapsel (PALCE 22V10-PC eller GAL22V10) 4. Koppla upp och testa funktionen. Uppgiften är mycket enkel, men är tänkt att ge grundkunskaper om VHDL och utvecklingsverktyget Warp. Följande exempel på lösning är ett typiskt exempel på VHDL-kod 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)); En annan lösning kunde kort och gott vara ARCHITECTURE beh_exor OF exor IS ut <= a XOR b; Uppgift 2 Heladderare Beskriv med VHDL-kod en enbits heladderare som har insignalerna a0, b0 och Cin samt utsignalerna sum och Cut. Laboration D163 Kombinatoriska funktioner i VHDL 3
Uppgift 3 Komparator Figuren visar en enbits komparator. Beskriv en sådan i VHDL-kod med 2 ingångar, a och b, och tre utgångar som visar resultatet av komparationen enl. diagrammet. (Bara en utgång kan bli aktiv åt gången.) a b a>b a=b a<b Uppgift 4 Kodlås Realisera sista uppgiften i laboration D161 med VHDL och enbart en PLD-kapsel. Bara vissa koder ska godkännas och ska resultera i angivna utsignaler. Alla andra inmatade koder ska generera 00 ut. Redovisa enligt examinationskraven för aktuell kurs, tex såsom specificerats på kursens hemsida. Om inget finns angivet, redovisa skriftligt med förarbete (något slags resonemang om avvägningar och beräkningar som ligger till grund för den lösning man väljer), VHDL-kod, simuleringsresultat, kopplingsschema praktiskt genom att visa upp fungerande koppling för laborationshandledare. Laboration D163 Kombinatoriska funktioner i VHDL 4
SEKVENSFUNKTIONER I VHDL Det som utmärker sekvens kretsar och sekvensnät är att utsignalerna beror både av kretsens/nätets tillstånd och av eventuella insignaler. Sekvensfunktioner är av två huvudtyper: Moore -maskiner - nätets utsignaler beror bara av nuvarande tillstånd Mealy-maskiner - nätets utsignaler beror både av nätets insignaler och av nuvarande tillstånd. Typisk VHDL-beskrivning av 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; END CASE; END PROCESS; 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; 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; Laboration D163 Sekvensfunktioner i VHDL 5
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; Kommentarer till VHDL-koden I ENTITY anges parametrar för in- och utgångar, vilket MODE ("typ") som gäller för dessa parametrar samt vilka värden de kan anta (bit - dvs värdena 0 och 1), ARCHITECTURE inleds med ett namn, beh_cnt_moore, och därefter den ENTITY, cnt_moore, vars funktion beskrivs. TYPE anger vilka värden en parameter kan anta. (Jämför ENTITY där i stället en MODE anges, IN, OUT e.t.c.) SIGNAL anger vilka interna parametrar som behövs för samverkan mellan processerna (nuv_tillst, nst_tillst) och vilken TYPE som parametrarna har. PROCESS är en viktig VHDL-beskrivning som kan jämföras med procedur, funktion och andra namn på sub-program i olika programmeringsspråk. En PROCESS exekveras bara om parametrar uppräknade i en sensivity list ändrar värden. Saknas sensivity list utförs aldrig programrutinen i PROCESS. P0: process(nuv_tillst,i) I processen med beteckningen P0 används en CASE-sats för att beskriva tillståndsmaskinen. Processen P0 är alltså den programdel som "översätter" tillståndsdiagrammet till VHDL-kod och kallas deklarations del. P1: process(clk) Processen beskriver när en ändring av tillstånd kan ske och kallas synkron del. I exemplet sker tillståndsändringar vid positiv klockpulsflank. P2: process(nuv_tillst) CASE-satsen i denna process används för att ange utsignalvärden vid respektive tillstånd. OBS! Här används en mera generell metod för att beskriva kombinatorisk logik. P2 kallas för kombinatorisk del. Studera koden som beskriver en MEALY-automat i häftet Grunderna i VHDL. I den sista processen kan Du se att utsignalen beror av både insignalen och det tillstånd som maskinen för nävarande befinner sig i. Laboration D163 Sekvensfunktioner i VHDL 6
Uppgift 5 Övningsexempel Starta Galaxy. Skapa ett nytt Projekt under din personliga mapp. Välj New för att börja skriva in en ny VHDL-fil. Skriv in VHDL-koden från typexemplet ovan. Kompilera och Simulera. Programmera en PLD-kapsel. Prova funktionen. Uppgift 6 Automat Realisera sista uppgiften i laboration D162 med VHDL och en PLD-kapsel. 00/00 01 01/10 11/11 10/01 00 00/00 10/01 11/11 11/01 01/00 10 10/11 01/00 11/01 01/10 11 00/10 10/11 00/10 Förutom vad som specificerats i tillståndsdiagrammet ovan, lägg även in en process som skickar aktuellt tillstånd till utgångar - även om specifikationen inte kräver det - så att du lättare kan kontrollera att tillståndsbytena sker på rätt sätt. Redovisa laborationen enl examinationskraven för aktuell kurs, tex såsom specificerats på kursens hemsida. Om inget finns angivet, redovisa skriftligt med förarbete (något slags resonemang om avvägningar och beräkningar som ligger till grund för den lösning man väljer - Obs! skriv inte bara "enl. noteringar i laboration d162" eller nåt annat i den stilen) inkl. kodning av in- och utsignaler, VHDL-kod, simuleringsresultat med ett urval intressanta sekvenser (bl.a. komplett uppräkning och komplett nedräkning), kopplingsschema praktiskt genom att visa upp fungerande koppling för laborationshandledare. Laboration D163 Sekvensfunktioner i VHDL 7