Till KTH:s startsida Till KTH:s startsida

Ändringar mellan två versioner

Här visas ändringar i "Simulera med ModelSim (sw)" mellan 2015-10-05 10:33 av William Sandqvist och 2016-10-12 13:59 av William Sandqvist.

Visa < föregående ändring.

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

I 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. Add, Cursor.

addcursor.gif

En Cursor kan användas tillsammans med funktionen Edit, Wave 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!