Till KTH:s startsida Till KTH:s startsida

Ändringar mellan två versioner

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

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

Simulate with ModelSim (en)

en Simulera medate with ModelSim

ModelSim - simuleringsprogramvation softwarae pdf MSimTutor_eng.pdf

ModelSim kcan användas till attbe used to simuleraate VHDL-kcode, för att avgöra om den ärto determine whether it is "rätight" tänkt.hinking. The Alteras version avof ModelSim är också kopplad till enis also integrated with a "database" 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ålkretsenwith facts about Altera-chips, eg. MAX-chips, so one can also do simulations that take into account the "time delay" and other phenomena within the intended target circuit. ( As läonge som målkretsen är av as the target circuit is of Altera's fabrikatbrand ... ).

modelsimaltera.gif

Välj rätt programSelect the correct software version - in skolan finns flera olika installerade under school there are several versions installed in the Start menynu!

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!
n the window "important information" you click on Jumpstart to get help with setting up a project.¶

jumpstartcreate.png¶

Then you click on "Create a Project" in the welcome window.¶

mscreateproject.png¶

Create a project.¶

Project NameMAXsim can be a suitable nameProject locationH:/MAXwork browse to the same folder you used for Quartus.Default Library Namework keep the suggested name, it's the standard at VHDL-simulation¶



Click on OK.¶

addtoproject.bmp¶

We choose "Add Existing File" to add a VHDL-file to the project. "Browse" to the file codelock.vhd that we created earlier with Quartus.¶

Click on OK. Then clic on Close.¶

Codelock code in ModelSim statusunknown.bmp¶

ModelSim has a own compiler to produce the code for simulation. Though we have compiled the VHDL code in Quartus we must now compile it again for ModelSim.¶

notcompiled.gif¶

Choose Compile menu, alternative Compile All.¶

compiled.gif¶

Now the VHDL-code is also compiled for Modelsim. Status symbol changes from a blue question mark to a green check!¶

Simulate codelock-template! SimpleLockStatechart.bmp¶

We simulate by giving different commands in the Transcript-window, and then follow some selected signals in the window Wave.¶

Transcript-window is a terminal window where you enter commands, but you can also give most commands by menu selection, or by clicking on buttons. Commands are always written in the Transcript-window, regardless of how they are given.¶

Load the Design to simulator.. Choose the tab Library, and open the folder work. Doubleclick on "Entity" codelock. A series of commands are now executed resulting in that the design is loaded into the simulator.¶

load.gif¶

In the Transcript-window you can follow the commands executed.¶

transcriptload.gif¶

Prepare simulation ¶

We need to have a number of windows open in order to follow the simulation.¶



Give thees commands in Transcript-window or check in the View-menu. VSIM> view objects VSIM> view locals VSIM> view source VSIM> view wave -undock view.gif ¶

undock.gif Modelsim consists of "windows". It can be hard to see everything at the same time. With the button Zoom/Unzoom you can enlarge the window. With the button Dock/Undockthe window can be moved to any location, it is that alternative we choose for Wave-window. With the button Close those windows not needed for the time can be closed.¶

Signals in Wave window If you have many signals, it is a good idea to select the signals you are interested to follow in Wave-window, but this time we choose to follow them all:¶

add wave *¶

There are several ways to add signals to the Wave-window:¶


* Select signals in Object-window (Shift+Left Button) and "drag and drop" the selection to Wave-window.
* Right-click in the Object-window and choose Add to Wave.
* A Add to Wave dialoge-window is reachable from the menu, Add.


addtowave.gif¶

Format, Radix, Hexadecimal¶

radix.png¶

The state variable q has 32 different states, such a variable is easier to follow if it is presented as a hexa-decimal number, 00 ... 1F instead of a binary number. We therefore suggest that you check the variable and change the presentation to hexadecimal. UUUUU is exchanged to XX in the Wave-window. Other variables are best suited to be presented as binary numbers.¶

Create stimuli¶

transcript.png¶

The default time resolution in Wave is nanoseconds, ns. A suitable clock frequency for a code lock may however be as low as 5 Hz, or a period time of 0.2 sec. The easiest way, of not having to make extensive adjustments of the program, is to "scale" our problem to a higher clock speed with a period of 20 ns. We then has to imagine that there are fast fingers that press the keys!¶

clkfreq.gif¶

Stimuli, Inputsignals as clock pulses or key-presses, are created with the command force in the Transcript-window.¶

force codelock/clk 1 0ns, 0 10ns -repeat 20ns Generates clockpulses for ever. force codelock/k 000 force codelock/r 0000 Initiates variables r and k. run 100ns Runs the simulation in 100 ns, which is five clock cycles.¶

Simulate keypresses¶

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) means that the keypress is certain be in the gap between the clock edges. The full simulationtime 100 ns +30ns + 800 ns = 930 ns corresponds to 46.5 clock pulse periods. This is enough to show the lock's entire opening sequence.¶

Do-file¶

Instead of writing single commands in Transcript-window, you can run many commands in sequence from a Do-file. Alternatively, you can copy the text in Windows (Ctrl-C) and paste it (Ctrl-V) in 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¶

This is how to create a Do-file. Paste text commands above in the file. Then save it among the other files (in MAXwork) with extension .do.¶

You run a Do-file with these commands (in Transcript): restart -f do lock.do¶

Find in the Wave window¶

waves.bmp¶

It can be difficult to find what you are looking for in the Wave window. Therefore, there is a whole series of tools like Zoom, Expanded time, Cursors ... Add, Cursor.¶

addcursor.gif¶

A Cursor can be used together with the function Edit, Wave Signal Search.¶



signalsearch.png signalsearchforward.bmp ¶

searchdone.gif¶

Now the Cursor points what happens (this time nothing special!) when q has the state 07.¶

Spend a little time now to try different tools available for orientation in Wave Window!¶

The simulation has shown that the lock opens to the intended key-press, but this is not enough - There is need for more "testing" before one can trust the construction! ¶