Ändringar mellan två versioner
Här visas ändringar i "Simulera med ModelSim (sw)" mellan 2014-11-05 13:22 av William Sandqvist och 2014-11-05 13:31 av William Sandqvist.
Visa < föregående | nästa > ä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
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 ¶ [IMAGE] lock.do ( bat.gif lock.do ( text.gif lock.txt )
[IMAGE]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
[IMAGE]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.
[IMAGE]addcursor.gif
En Cursor kan användas tillsammans med funktionen Edit, Wave Signal Search.
[IMAGE] [IMAGE] ¶ [IMAGE]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! ¶