Till KTH:s startsida Till KTH:s startsida

Ändringar mellan två versioner

Här visas ändringar i "Simulate with ModelSim (en)" mellan 2014-11-04 21:04 av William Sandqvist och 2014-11-05 13:33 av William Sandqvist.

Visa < föregående | nästa > ändring.

Simulate with ModelSim (en)

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 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!