Simulering av VHDL: Difference between revisions
mNo edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
===Konstruksjon og simulering av VHDL-kode med | ===Konstruksjon og simulering av VHDL-kode med QuestaSim=== | ||
==Innledning== | ==Innledning== | ||
Line 9: | Line 9: | ||
* Eksempel 2: Signaler og variable | * Eksempel 2: Signaler og variable | ||
Et VHDL program består i hovedsak av ENTITY, som definerer tilkobling mellom programmet og omverden, og ARCHITECTURE, som definerer programmets funksjon. Den komplette VHDL-koden for eksempel 1 vist nederst på denne siden.Mentor Graphics har utviklet programvare (Modelsim//QuestaSim) som gjør det mulig å beskrivem, simulere og feilsøke VHDL-kode. Fremgangsmåten for skriving, kompilering og simulering av VHDL-kode finner du under. | |||
Mentor Graphics har utviklet programvare (Modelsim) som gjør det mulig å simulere og | |||
==Skriving av VHDL kode== | ==Skriving av VHDL kode== | ||
En ny VHDL kode (et design beskrevet med VHDL kode) påbegynnes med å starte emacs | En ny VHDL kode (et design beskrevet med VHDL kode) påbegynnes med å starte emacs eller den innebygde teksteditoren i QuestaSim.Det fine med emacs er at man kan velge VHDL-modus. Dette gjøres med å skrive ''M-x vhdl-mode'' (M står for ''Meta'' og er vanligvis definert som esc-knappen). I emacs har en menyer med alle valg oppe langs kanten som i andre teksteditorer, men programmet skiller seg litt ut med kommandolinjen nederst i vinduet. Når en f. eks. skal lagre filen en har skrevet blir denne kommandolinjen aktiv og en skriver inn sti og filnavn der. Når man lagrer er ikke navnet på kodefilen viktig, men det er fornuftig å kalle den det samme som ENTITY-delen, med ''.vhdl'' som "etternavn" (f. eks. sr_latch.vhdl). | ||
Det fine med emacs er at man kan velge VHDL-modus. Dette gjøres med å skrive ''M-x vhdl-mode'' (M står for ''Meta'' og er vanligvis definert som esc-knappen). I emacs har en menyer med alle valg oppe langs kanten som i andre teksteditorer, men programmet skiller seg litt ut med kommandolinjen nederst i vinduet. Når en f. eks. skal lagre filen en har skrevet blir denne kommandolinjen aktiv og en skriver inn sti og filnavn der. Når man lagrer er ikke navnet på kodefilen viktig, men det er fornuftig å kalle den det samme som ENTITY-delen, med ''.vhdl'' som "etternavn" | |||
==Kompilering av VHDL kode== | ==Kompilering av VHDL kode== | ||
Simuleringsverktøyet for VHDL (og verilog) heter | Simuleringsverktøyet for VHDL (og verilog) heter QuestaSim, og startes med kommandoen | ||
<pre> | <pre> | ||
Line 32: | Line 28: | ||
<pre> | <pre> | ||
File > New > Project | |||
</pre> | </pre> | ||
Line 40: | Line 36: | ||
<pre> | <pre> | ||
vlib work | |||
</pre> | </pre> | ||
Line 47: | Line 43: | ||
Kommandoen (aliaset) ''mentor'' sørger for velge riktige stier og miljøvariable. | Kommandoen (aliaset) ''mentor'' sørger for velge riktige stier og miljøvariable. | ||
Når dette er gjort kompileres koden ved | Når dette er gjort kompileres koden ved | ||
<pre> | <pre> | ||
vcom sr_latch.vhdl | |||
</pre> | </pre> | ||
Line 57: | Line 53: | ||
Merk at navnet til det kompilerte designet blir skrevet med små bokstaver, selv om du har brukt store bokstaver i ENTITY- eller ARCHITECTURE-navnet. Det kompilerte designet blir liggende i work-katalogen. | Merk at navnet til det kompilerte designet blir skrevet med små bokstaver, selv om du har brukt store bokstaver i ENTITY- eller ARCHITECTURE-navnet. Det kompilerte designet blir liggende i work-katalogen. | ||
==Simulering og debugging i | ==Simulering og debugging i QuestaSim== | ||
Når koden kompilerer feilfritt kan den simuleres i | Når koden kompilerer feilfritt kan den simuleres i QuestaSim. Dette startes med: | ||
<pre> | <pre> | ||
vsim & | |||
</pre> | </pre> | ||
QuestaSim bruker et standard X-basert vindusoppsett, og er derfor noen forskjellig fra de andre Mentor-programmene. Når du starter simulatoren åpnes det et vindu som vist i figur 1. Begynn med å åpne diverse vinduer: | |||
* View > Source | * View > Source | ||
Line 71: | Line 67: | ||
* View > Signals | * View > Signals | ||
Man kan også gi kommandoer i | Man kan også gi kommandoer i QuestaSim-vinduet. F.eks. | ||
<pre> | <pre> | ||
Wave * | |||
</pre> | </pre> | ||
Signalverdier settes med kommandoen 'force' eller med | Signalverdier settes med kommandoen 'force' eller med | ||
<pre> | <pre> | ||
Force > Force (i "Signals" vinduet) | |||
</pre> | </pre> | ||
Line 86: | Line 82: | ||
<pre> | <pre> | ||
Force > Clock (i "Signals" vinduet) | |||
</pre> | </pre> | ||
Line 92: | Line 88: | ||
===Signalflyt i en SR-lås=== | ===Signalflyt i en SR-lås=== | ||
Simuler SR-låsen. Begynn med å påtrykke stimuli til alle signaler ved tid 0 (t0). Bruk STEP-knappen for å simulere på delta-tid-nivå. (Om en holder musepekeren over knappene i | Simuler SR-låsen. Begynn med å påtrykke stimuli til alle signaler ved tid 0 (t0). Bruk STEP-knappen for å simulere på delta-tid-nivå. (Om en holder musepekeren over knappene i QuestaSim, kommer det en forklarende tekst opp.) Når verdiene er stabile kjører du i f.eks. 100 ns før du endrer stimuli (skriv ''run 100'' i et av vinduene). Tilsvarende kan du endre stimuli ved å skrive f.eks. ''force S 0'' i hoved-vinduet. Legg merke til den røde pilen som peker på den linjen som blir utført. | ||
Hvis du vil begynne på ny kan du velge | Hvis du vil begynne på ny kan du velge | ||
<pre> | <pre> | ||
File > Restart -f | |||
</pre> | </pre> | ||
Line 103: | Line 99: | ||
LIBRARY ieee; | LIBRARY ieee; | ||
USE ieee.std_logic_1164.ALL; | USE ieee.std_logic_1164.ALL; | ||
ENTITY SR_latch IS | ENTITY SR_latch IS | ||
PORT ( | |||
S,R : IN std_logic ; | |||
Q,QB : INOUT std_logic ); | |||
END SR_latch; | END SR_latch; | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
ARCHITECTURE behave OF SR_latch IS | ARCHITECTURE behave OF SR_latch IS | ||
BEGIN -- behave | BEGIN -- behave | ||
Q <= S nand QB; | |||
QB <= R nand Q; | |||
END behave; | END behave; | ||
</pre> | </pre> | ||
Line 130: | Line 126: | ||
LIBRARY ieee; | LIBRARY ieee; | ||
USE ieee.std_logic_1164.ALL; | USE ieee.std_logic_1164.ALL; | ||
ENTITY sign_var IS | ENTITY sign_var IS | ||
PORT (CLK : IN std_logic); | |||
END sign_var; | END sign_var; | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
ARCHITECTURE difference OF sign_var IS | ARCHITECTURE difference OF sign_var IS | ||
signal SA: bit := '0'; | |||
signal SB: bit := '1'; | |||
begin -- difference | begin -- difference | ||
process | |||
variable A: bit := '0'; | |||
variable B: bit := '1'; | |||
begin | |||
wait until rising_edge(clk); | |||
A := B; | |||
B := A; | |||
SA <= SB after 5 ns; | |||
SB <= SA after 5 ns; | |||
end process; | |||
END architecture difference; | END architecture difference; | ||
</pre> | </pre> |
Revision as of 08:02, 25 February 2009
Konstruksjon og simulering av VHDL-kode med QuestaSim
Innledning
Hensikten med denne oppgaven er å få et lite innblikk i bruk av høynivåspråk for simulering og uttesting av kretsløsninger. I denne oppgaven skal vi bruker VHDL (Very high speed integrated circuit Hardware Description Language), som er spesielt utviklet for elektronikk. VHDL er definert slik at det passer i en mengde sammenhenger, og er det vil derfor være uoverkommelig å gå inn på detaljer i denne oppgaven. Vi skal ta for oss noen eksempler:
- Eksempel 1: Signalflyt i en SR-lås
- Eksempel 2: Signaler og variable
Et VHDL program består i hovedsak av ENTITY, som definerer tilkobling mellom programmet og omverden, og ARCHITECTURE, som definerer programmets funksjon. Den komplette VHDL-koden for eksempel 1 vist nederst på denne siden.Mentor Graphics har utviklet programvare (Modelsim//QuestaSim) som gjør det mulig å beskrivem, simulere og feilsøke VHDL-kode. Fremgangsmåten for skriving, kompilering og simulering av VHDL-kode finner du under.
Skriving av VHDL kode
En ny VHDL kode (et design beskrevet med VHDL kode) påbegynnes med å starte emacs eller den innebygde teksteditoren i QuestaSim.Det fine med emacs er at man kan velge VHDL-modus. Dette gjøres med å skrive M-x vhdl-mode (M står for Meta og er vanligvis definert som esc-knappen). I emacs har en menyer med alle valg oppe langs kanten som i andre teksteditorer, men programmet skiller seg litt ut med kommandolinjen nederst i vinduet. Når en f. eks. skal lagre filen en har skrevet blir denne kommandolinjen aktiv og en skriver inn sti og filnavn der. Når man lagrer er ikke navnet på kodefilen viktig, men det er fornuftig å kalle den det samme som ENTITY-delen, med .vhdl som "etternavn" (f. eks. sr_latch.vhdl).
Kompilering av VHDL kode
Simuleringsverktøyet for VHDL (og verilog) heter QuestaSim, og startes med kommandoen
vsim &
kommandoen (aliaset) mentor sørger for velge riktige stier og miljøvariable.
Start et nytt prosjekt med
File > New > Project
Velg et fornuftig navn og katalog.
Før man kan kompilere koden må man sette mappen man ønsker at biblioteket av de kompilerte kodene skal ligge. Dette kan gjøres med:
vlib work
Mappen work blir da bibliotekmappen.
Kommandoen (aliaset) mentor sørger for velge riktige stier og miljøvariable.
Når dette er gjort kompileres koden ved
vcom sr_latch.vhdl
Hvis det er feil i koden vil disse listes opp. Feilmeldingen har en henvisning til linjenummer, som kan brukes til å lokalisere feilen i teksteditoren.
Merk at navnet til det kompilerte designet blir skrevet med små bokstaver, selv om du har brukt store bokstaver i ENTITY- eller ARCHITECTURE-navnet. Det kompilerte designet blir liggende i work-katalogen.
Simulering og debugging i QuestaSim
Når koden kompilerer feilfritt kan den simuleres i QuestaSim. Dette startes med:
vsim &
QuestaSim bruker et standard X-basert vindusoppsett, og er derfor noen forskjellig fra de andre Mentor-programmene. Når du starter simulatoren åpnes det et vindu som vist i figur 1. Begynn med å åpne diverse vinduer:
- View > Source
- View > Signals
Man kan også gi kommandoer i QuestaSim-vinduet. F.eks.
Wave *
Signalverdier settes med kommandoen 'force' eller med
Force > Force (i "Signals" vinduet)
Dersom et av signalene skal være klokkesignal, kan dette gjøres enkelt med
Force > Clock (i "Signals" vinduet)
Eksempler
Signalflyt i en SR-lås
Simuler SR-låsen. Begynn med å påtrykke stimuli til alle signaler ved tid 0 (t0). Bruk STEP-knappen for å simulere på delta-tid-nivå. (Om en holder musepekeren over knappene i QuestaSim, kommer det en forklarende tekst opp.) Når verdiene er stabile kjører du i f.eks. 100 ns før du endrer stimuli (skriv run 100 i et av vinduene). Tilsvarende kan du endre stimuli ved å skrive f.eks. force S 0 i hoved-vinduet. Legg merke til den røde pilen som peker på den linjen som blir utført.
Hvis du vil begynne på ny kan du velge
File > Restart -f
LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY SR_latch IS PORT ( S,R : IN std_logic ; Q,QB : INOUT std_logic ); END SR_latch; ------------------------------------------------------------------------------- ARCHITECTURE behave OF SR_latch IS BEGIN -- behave Q <= S nand QB; QB <= R nand Q; END behave;
Signaler og variable
Simuler VHDL-koden i eksempel 6.3 i kompendiet. Bruk Step eller Step Over for å følge prosedyrens utvikling linje for linje.
Bruk View > Variables for å kikke på innholdet i variablene. Forklar endringene i signaler og variable.
LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY sign_var IS PORT (CLK : IN std_logic); END sign_var; ------------------------------------------------------------------------------- ARCHITECTURE difference OF sign_var IS signal SA: bit := '0'; signal SB: bit := '1'; begin -- difference process variable A: bit := '0'; variable B: bit := '1'; begin wait until rising_edge(clk); A := B; B := A; SA <= SB after 5 ns; SB <= SA after 5 ns; end process; END architecture difference;