Forum: FPGA, VHDL & Co. ModelSim Altera: Script für Simulation


von Michael N. (much)


Angehängte Dateien:

Lesenswert?

Hallo,

wie ich begonnen habe mich mit VHDL zu beschäftigen habe ich GHDL 
verwendet. Um nicht ständig alle Befehle für die Simulation von Hand 
eingeben zu müssen habe ich mir damals das angehängte Makefile erstellt.

Jetzt möchte ich langsam beginnen mit FPGAs zu arbeiten. In letzter Zeit 
habe ich mich deshalb ein bisschen in Altera Quartus II (V.11.1) 
eingearbeitet. Zum simulieren habe ich mir ModelSim Altera Starter 
Edition (V.10.4b) installiert. Es funktioniert eigentlich auch, aber ich 
finde es etwas mühsam. Wenn ich eine Änderung am VHDL-Code vornehme muss 
ich immer unzählige Eingaben tätigen um die Simulation mit den aktuellen 
VHDL-Files neu zu starten.

Ich gehe jedes mal wie folgt vor:
- Sourcen "recompilieren"
- Simulation starten
- Dann muss ich jedes mal von neuem die Signale zum Waveform-Window 
hinzufügen
- Zum Schluss auf "Run" und erst dann habe ich die aktuellen Signale im 
Waveform-Window.

Kann man das irgendwie mit einem Makefile oder ähnlichen automatisieren?

lg michael

von user (Gast)


Lesenswert?

ja kann man, und ja man kann auch eine Makefile dazu benutzen

Zuerst alle Librearies anlegen mit

vlib work
vlib andereLibrary

Dateien lassen sich so in die library work kompilieren:

vcom datei.vhd

oder so in die library test

vcom -work test datei.vhd

Die Waveform lässt sich als do File abspeichern und beim Aufruf vom 
simulator wieder laden:

vsim mytoplevel -do "mytoplevel.do"

In meiner Makefile habe ich 2 targets 1.Bauen 2.Simulator starten

Wenn der Simulator schon läuft, lasse ich nur den Bauschritt laufen und 
gebe dann im Simulatorfenster folgendes ein: restart -f; run 100us
Das setzt den Simulator zurück, das Wavefenster bleibt so wie es ist, 
und die Simulation läuft von vorne 100us

von user (Gast)


Lesenswert?

Beispiel Makefile:

all:
        @vlib work 2>&1 > /dev/null
        vcom myvhdlfile.vhd
        vcom tb_myvhdlfile.vhd
sim:
        vsim -t ps tb_myvhdlfile -do "tb_myvhdlfile.do"

von Duke Scarring (Gast)


Lesenswert?

Noch als Ergänzung:
Wer ein größeres Projekt hat, möchte die Abhängigkeiten der VHDL-Dateien 
untereinander nicht mehr manuell auflösen.
Dafür gibt es ein nettes Tool: vmk

https://sourceforge.net/projects/vmk/

Duke

von Michael N. (much)


Lesenswert?

@user:
Ich hab deine Anleitung heute mal getestet. Funktioniert genau so wie 
ich mir das vorgestellt habe. vielen Dank dafür!

@ Duke Scarring:
Das Tool werde ich mir bei Bedarf auch mal anschauen. Danke auch 
hierfür!

von Mh. M. (mhm)


Lesenswert?

user schrieb:
> Beispiel Makefile:
>
> all:
>         @vlib work 2>&1 > /dev/null
>         vcom myvhdlfile.vhd
>         vcom tb_myvhdlfile.vhd
> sim:
>         vsim -t ps tb_myvhdlfile -do "tb_myvhdlfile.do"

Naja, also Make so zu verwenden ist imho ein wenig unnütz. Will heißen, 
da wird Make überhaupt nicht wirklich genutzt: Für die Verwendungsweise 
könnte man genauso gut ein Shellskript basteln.

Die Stärke von Make liegt ja darin, bestimmte Dinge während des 
Build-Prozesses in Abhängigkeit von gewissen Bedingungen auszuführen. 
Und nicht jedesmal einfach alles neu zu bauen. Ich gebe zu, bei 
VHDL-Projekten ist das ein wenig unschön, da hier keine genaue Zuordnung 
zwischen einem Eingabe- und einem Ausgabefile des Compilers hergestellt 
werden kann. Stattdessen wird alles in eine Library kompiliert. Also 
muss man diesen Zusammenhang manuell herstellen, zum Beispiel:
1
work/hdlfile.vhd.ts : hdlfile.vhd
2
   vcom $^
3
   date >> $@

So wird hdlfile.vhd nur dann neu compiliert, wenn es auch wirklich 
geändert wurde (mit Hilfe eines Timestamp-Files (.ts) im work-Ordner). 
Das Ganze kann man nun mit generischen Rules für bestimmte Filetypen und 
einem automatischen Abhängigkeitsgenerator, wie von Duke vorgeschlagen, 
aufhübschen und erhält so ein vollwertiges Buildsystem für 
VHDL-Projekte.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.