Simulera med ModelSim (sw)

 sw Simulera med ModelSim   

ModelSim - simuleringsprogramvara

pdf  MSimTutor.pdf  

ModelSim kan användas till att simulera VHDL-kod, för att avgöra om den är "rätt" tänkt. Alteras version av ModelSim är också kopplad till en "databas" med fakta om Altera-kretsar, tex. MAX-kretsarna, så man kan också göra simuleringar som tar hänsyn till "tidsfördröjningar" och andra fenomen inuti den tänkta målkretsen. ( Så länge som målkretsen är av Altera's fabrikat ... ).

modelsimaltera.gif

Välj rätt programversion - i skolan finns flera olika installerade under startmenyn!

Altera 13.0.1.232 Web edition\
    ModelSim-Altera Starter Edition 13.0.1.232\
          ModelSim-Altera 10.1d(Quartus II 13.0sp1)  

Starta ModelSim.

welcomewindow.bmp

I fönstret "important information" klickar man på Jumpstart för att få hjälp med att sätta upp ett projekt.

jumpstartcreate.png

Därefter klickar man på länken "Create a Project" i välkomstfönstret.


mscreateproject.png

Skapa ett projekt.

Project NameMAXsim   kan vara ett lämpligt namnProject locationH:/MAXwork   bläddra dig fram till samma arbetsmapp som Du använde för QuartusDefault Library Namework   behåll det föreslagna namnet, det är standard vid VHDL-simulering

Klicka på OK.


addtoproject.bmp

Vi väljer "Add Existing File" för att lägga till en VHDL-fil till projektet. 
"Bläddra" fram till filen  codelock.vhd  som vi tidigare skapade med Quartus.

Klicka på OK. Därefter klicka på Close.


Kodlåskoden i ModelSim

statusunknown.bmp

ModelSim har en  egen  kompilator för att ta fram simuleringen ur VHDL-koden. Fast vi har kompilerat VHDL-koden i Quartus måste vi trots det kompilera den igen förModelSim.

notcompiled.gif

Välj Compile menyn, alternativet Compile All.

compiled.gif

Nu är VHDL-koden också kompilerad för Modelsim
Statussymbolen ändras från ett blått frågetecken till en grön bock!



Simulera kodlås-mallen!

SimpleLockStatechart.bmp

Simuleringen går till så att vi ger olika komandon i Transcript-fönstret, och sedan följer ett utvalt antal signaler i fönstret Wave.

Transcript-fönstret är ett klassiskt teckenbaserat terminalfönster där man ger kommandon, men man kan även ge de flesta kommandon genom menyval, eller genom att klicka på knappar. Kommandon skrivs dock ut i ut Transcript-fönstret, oavsett hur dom givits.

Ladda Designen till simulatorn
Välj fliken Library, och öppna mappen work. Dubbelklicka på "Entity" codelock. En serie kommandon utförs nu som resulterar i att designen laddats in till simulatorn.

load.gif

Transcript-fönstret kan man följa vilka kommandon det är som utförts.

transcriptload.gif


Förberedelser inför simuleringen 

Vi behöver ha ett antal fönster öppna för att kunna följa simuleringen.

Ge komnmandon i Transcript-fönstret 
eller klicka för i View-menyn.
VSIM> view objects
VSIM> view locals
VSIM> view source
VSIM> view wave -undock
 view.gif

undock.gif 
Modelsim består av ett otal "fönster". Det kan vara svårt att se allt på en gång. Med knappen Zoom/Unzoom förstorar man fönstret (på andra fönsters bekostnad). Med knappenDock/Undock kan fönstret flyttas till valfri plats, det alternativet valde vi för Wave-fönstret. Med knappen Close kan man stänga fönster som inte behövs för tillfället.


Signaler i Wave 
Nästa steg är att ange för simulatorn vilka signaler Du vill följa i Wave-fönstret. Har man många signaler är det en bra idé att välja ut de signaler man är intresserad av, men här väljer vi att följa alla:

add wave *

Det finns flera alternativa sätt att lägga till signaler till Wave-fönstret:

  • Välj signaler i Object-fönstret (Shift+Vänster Musknapp) och "dra och släpp" urvalet till Wave-fönstret.
  • Högerklicka i Object-fönstret och välj Add to Wave.
  • Ett Add to Wave dialog-fönster nås från menyraden under Add.

addtowave.gif


Format,  Radix,  Hexadecimal

radix.png

Tillståndsvariabeln q har 32 olika tillstånd, en sådan variabel är lättare att följa om den anges som en hexadecimal siffra,  00 ... 1F  i stället för som ett femsiffrigt binärtal. Vi föreslår därför att Du markerar den variabeln och byter den till Hexadecimal. UUUUU byts mot XX i Wave-fönstret. Övriga variabler passar bäst som binärtal.


Skapa stimuli

transcript.png

Den förinställda tidsupplösningen i Wave är nanosekunder, ns. En lämplig klockfrekvens för ett kodlås kan däremot vara så låg som 5 Hz, dvs. en periodtid om 0,2 sek. 
Enklast, för att inte behöva göra omfattande omställningar av programmet, är att "skala" om problemet till en högre klockfrekvens med periodtiden 20 ns. Vi får i så fall då också tänka oss att det är "flinka" fingrar som trycker på knapparna.

clkfreq.gif

Stimuli, dvs. insignaler som klockpulser eller knapptryckningar, kan skapas med kommandot  force  i Transcript-fönstret.

force codelock/clk 1 0ns, 0 10ns -repeat 20ns 
Genererar klockpulser för evigt.

force codelock/k 000 
force codelock/r 0000 
Initierar variablerna r och k.

run 100ns 
Kör simuleringen i 100 ns, dvs. fem hela perioder.

Simulera knapptryckningen

action.bmp

Man kan Zooma i Wave-fönstret. Välj tex. View, Zoom, och Zoom Full eller Zoom Last.

force codelock/k 001
force codelock/r 0001
run 30ns
force codelock/k 000
force codelock/r 0000
run 800ns

30 ns (20+10) innebär att knapptryckningen med säkerhet kommer i mellanrummet mellan klockflankerna. Hela simuleringstiden 100 ns +30ns + 800 ns = 930 ns motsvarar 46,5 klockpulsperioder. Detta räcker för att visa låsets hela öppningsförlopp.


Do-file

I stället för att skriva kommandon direkt i Transcript-fönstret, kan man köra många kommandon i följd som står i en sk. Do-file. 
Alternativt kan man i Windows kopiera text (Ctrl-C) och klistra in den (Ctrl-V) i Transcript.

delete wave * 
add wave codelock/clk
add wave codelock/k
add wave codelock/r
add wave codelock/q
add wave codelock/unlock 
force codelock/clk 1 0ns, 0 10ns -repeat 20ns
force codelock/k 000
force codelock/r 0000
run 100ns
force codelock/k 001
force codelock/r 0001
run 30ns
force codelock/k 000
force codelock/r 0000
run 800ns

  bat.gif lock.do   ( text.gif lock.txt )

dofile.png

Så här skapar man en Do-file. Klistra in textkommandona ovan i filen. Spara den sedan bland de övriga filerna (i MAXwork) med filnamnstillägget  .do.

Du kör sedan en Do-file med dessa kommandon (i Transcript): 
restart -f 
do lock.do


Hitta i Wave-fönstret

waves.bmp

Det kan vara svårt att hitta det man söker efter i Wavefönstret. Det finns därför en hel rad med hjälpverktyg som Zoom, Expanded time, Cursors mm. 
AddCursor.

addcursor.gif

En Cursor kan användas tillsammans med funktionen EditWave Signal Search.

signalsearch.png   signalsearchforward.bmp

searchdone.gif

Nu pekar Cursorn ut vad som händer (tydligen inget speciellt!) när q har tillståndet 07.

Ägna nu lite tid åt att prova olika verktyg som finns för att orientera sig i Wavefönstret!

Simuleringen har visat att låset öppnar för den tilltänkta knapptryckningen, men detta är inte tillräckligt - det behövs mycket mer "testande" innan man törs lita på konstruktionen!

William Sandqvist skapade sidan 4 november 2014

kommenterade 1 december 2016

När jag simulerar lockmall.vhd på skolans datorer kommer det här meddelandet i Transcript-fönstret:

vsim work.codelock
# vsim work.codelock
# ** Error: Failure to obtain a VHDL simulation license. Unable to checkout alteramtivsim license feature.
# Error loading design

Efter att jag försöker ladda ner designen från biblioteket i ModelSim. När jag gör det på min egna dator fungerar det. Vad kan jag göra för att lösa problemet?

Lärare kommenterade 1 december 2016

Har Du startat rätt version av Quartus? Vi behöver ingen licens för det vi gör.

/william

kommenterade 5 december 2016

Vi har testat att starta både 32-bitars versionen och 64-bitars versionen och gjort om allt från början på båda, men vi får fortfarande samma simulationsfel. Något förslag?

Lärare kommenterade 5 december 2016

Starta rätt version - se kurswebben. Från startmenyn.

/william

Feedback Nyheter