Till KTH:s startsida Till KTH:s startsida

Ändringar mellan två versioner

Här visas ändringar i "Simulera med ModelSim (sw)" mellan 2014-11-05 12:52 av William Sandqvist och 2014-11-05 12:53 av William Sandqvist.

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

Simulera med ModelSim (sw)

Simulera med ModelSim

sw pdf ModelSim - simuleringsprogramvara [IMAGE] 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 ... ).

[IMAGE]

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.

[IMAGE]

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

[IMAGE]

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

[IMAGE]

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.

[IMAGE]

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 [IMAGE]

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.

[IMAGE]

Välj Compile menyn, alternativet Compile All.

[IMAGE]

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! [IMAGE]

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.

[IMAGE]

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

[IMAGE]

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 [IMAGE]

[IMAGE] 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.

[IMAGE]

Format, Radix, Hexadecimal

[IMAGE]

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

[IMAGE]

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.

[IMAGE]

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

[IMAGE]

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 (lock.txt)

[IMAGE]

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]

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]

En Cursor kan användas tillsammans med funktionen Edit, Wave Signal Search.

[IMAGE] [IMAGE]

[IMAGE]

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!