UMEÅ UNIVERSITET Tillämpad fysik och elektronik Digitalteknik Lars Wållberg/Håkan Joëlson 2001-03-01 v 1.5 ELEKTRONIK Digitalteknik Laboration D159 Sekvensnät beskrivna med VHDL och realiserade med PLD Namn: Datum: Epostadr: Kurs: Studieprogram: Innehåll Sidan Inledning 1 Tillståndsmaskin 1 MOORE-maskin 2 VHDL-beskrivning (typiskt kodexempel) 3 Kommentarer till VHDL-koden 4 Uppgifter 5
1 Inledning Digitala logiska kretsar och nät delar man in i kombinatoriska kretsar/nät och sekvenskretsar/nät. Det som utmärker de kombinatoriska är att en viss utsignal alltid beror enbart av en viss specifik insignal. Det som utmärker sekvenskretsar och sekvensnät är att utsignalerna beror både av kretsens/nätets tidigare tillstånd och av eventuella insignaler. Grundläggande sekvenskretsar är låskretsar och vippor. Det är en mycket viktig grupp av digitala kretsar. Allt från enkla låskretsar till komplicerade microprocessorkretsar hör till kategorien sekvenskretsar. Karakteristiskt för en grundläggande sekvenskrets (vippa) är att tillståndsändringar sker i samband med en klockpuls av något slag. Tillståndsmaskiner Sekvensnät kallas ofta automater eller tillståndsmaskiner. (eng. Finite State Machine, FSM). De kan indelas i två huvudgrupper, som skiljer sig åt genom vad som påverkar deras utsignaler: Mealy-maskiner Hos en Mealy-maskin beror utsignal både på insignal och tillstånd. Moore-maskiner Hos en Moore-maskin bestäms utsignal enbart av tillstånd. En Moore är ett specialfall av en Mealy. Båda dessa typer är synkrona, d.v.s en och samma klocksignal styr när tillstånd och utsignaler kan ändra värde.
2 MOORE-maskin. S0/ U0 S1/ i1 U1 i0 i0 i1 i1 i0 S2/ U2 Exempel på tillståndsdiagram som beskriver en MOORE-maskin Speciellt för en MOORE-maskin är alltså att utsignalen U endast beror av tillståndet. Det representeras i tillståndsdiagrammet genom att utsignalen skrivs tillsammans med tillståndet i tillståndscirkeln. OBS! Nätets utsignal kan ha samma beteckning (värden) som tillstånden (vippornas tillstånd) men är inte samma sak som tillstånden (själva vippornas utsignaler). clk in Kombinatorisk krets S + Vippor eller register Kombinatorisk krets Ut S S = nuvarande tillstånd (intern signal) S+ = nästa tillstånd (intern signal) In = insignaler Ut = utsignaler Clk = klocksignal Blockschema för MOORE-maskin
3 Typisk VHDL-beskrivning av MOORE-maskin. ENTITY cnt_moore IS PORT( i :IN bit; clk :IN bit; ut :OUT bit_vector(1 DOWNTO 0) ); END; 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; 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; END;
4 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 eller andra namn på sub-program i olika programmeringsspråk. En PROCESS exekveras bara om parametrar uppräknade i dess 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. MEALY-automat. 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.
5 Uppgift 1 Ö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. Kompilera och Simulera. Programmera en PLD-kapsel. Prova funktionen. Uppgift 2 Automat Realisera den sekvenskrets som beskrivs i den sista uppgiften i laboration D158. Redovisa skriftligt Förarbete (inkl. kodning av in- och utsignaler) VHDL-kod simuleringsresultat med ett urval intressanta sekvenser (bl.a. komplett uppräkning och komplett nedräkning) praktiskt fungerande uppkoppling (visa för labhandledare) Uppgift 3 Jeopardy (frivillig) Realisera en krets som håller reda på vem av två tävlande som först trycker på "sin" knapp. Tävlingsledaren har en nollställningsknapp (RESET). När den aktiveras släcks båda lagens lampor. När sedan någon av lagen trycker på sin knapp tänds en lampa som indikerar att det laget tryckt först. a Rita tillståndsdiagram. Visa upp för handledare. b Skriv VHDL-kod. c Kompilera, simulera och programmera en 22V10 krets. d Koppla upp Redovisa (även redovisning är frivillig naturligtvis) skriftligt VHDL-kod praktiskt fungerande uppkoppling (visa för lab.handledare och beundrande kurskamrater)