Uppgift 4 Kodlås
Realisera sista uppgiften i laboration D161 med VHDL och enbart en 22V10-kapsel.
Bara vissa koder ska godkännas och ska resultera i angivna utsignaler. Alla andra inmatade koder ska generera 00 ut.
Redovisning skriftligt och praktiskt enligt examinationskraven för aktuell kurs, tex såsom specificerat på kursens hemsida.
Normalt ska skriftlig redovisning innehålla:
förarbete (nåt slags resonemang om avvägningar och beräkningar som ligger till grund för den lösning man väljer)
VHDL-kod
simuleringsresultat
och praktisk redovisning bestå av att visa upp en fungerande koppling för labhandledare.
I slutänden är det examinationsvillkoren för aktuell kurs som har sista avgörandet.
Sekvensfunktioner i VHDL
Det som utmärker sekvenskretsar och sekvensnät är att utsignalerna beror både av kretsens/nätets 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.
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.
MOORE-maskin
Exempel på tillståndsdiagram som beskriver en MOORE-maskin
Det som är speciellt för en MOORE-maskin är att utsignalen U endast beror av tillståndet.
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).
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;
BEGIN
P0: PROCESS(nuv_tillst,i)
BEGIN
CASE nuv_tillst IS
WHEN s0 =>
IF i='0' THEN nst_tillst <= s1;
ELSE nst_tillst <= s3;
END IF;
WHEN s1 =>
IF i='0' THEN nst_tillst <= s2;
ELSE nst_tillst <= s0;
END IF;
WHEN s2 =>
IF i='0' THEN nst_tillst <= s3;
ELSE nst_tillst <= s1;
END IF;
WHEN s3 =>
IF i='0' THEN nst_tillst <= s0;
ELSE nst_tillst <= s2;
END IF;
END CASE;
END PROCESS;
P1: PROCESS(clk)
BEGIN
IF (clk'event AND clk='1') THEN nuv_tillst<=nst_tillst;
END IF;
END PROCESS;
P2: PROCESS(nuv_tillst)
BEGIN
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;
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.
|