Forum: FPGA, VHDL & Co. Simulations-Modus im ModelSim erkennen


von Erik (Gast)


Lesenswert?

Hallo,

ich möchte gerne im Stimulus (VHDL) im ModelSim erkennen in welchen 
Simulations-Modus (Pre-Synthesis(Source-Code) // Post-Synthesis // 
Post-Layout) das ganze läuft.

Grüße und Danke im Vorraus.
Erik

von Klaus F. (kfalser)


Lesenswert?

Das geht nur mit Handarbeit, das musst Du dem Simulator bzw. der 
Testbench selber mitteilen
Für den Simulator gibt es keine verschiedenen Simulationsmodi und man 
kann in VHDL auch nicht abfragen, welches Modell hinter einem Modul 
(DUT) steckt.

von Rolf (Gast)


Lesenswert?

Mit einem Script/Pragma liesse sich schon rausbekommen, welche Bib er 
benutzt.

von Erik (Gast)


Lesenswert?

@Rolf

kannst Du das bitte etwas genauer formulieren?


Ich versuche zur Zeit ein eigenes .do-Script, zu dem automatisch 
generiertem (das will ich nicht verlieren), hinzuzufügen. Falls mir das 
gelingt hoffe ich darin irgend eine Form von "Umgebungsvariable" setzen 
zu können.
Könnte das mit der "Umgebungsvariable" klappen? Kann man sowas aus VHDL 
heraus lesen?


Grüße
Erik

von Erik (Gast)


Lesenswert?

Hallo,


ich hab es geschafft ein eigenes .do-Script einzufügen, nur leider 
schaffe ich es nicht daraus einen nutzen zu ziehen.  :-(


das automatisch erzeugte .do-Script :
1
quietly set ACTELLIBNAME proasic3e
2
quietly set PROJECT_DIR "C:/Actelprj/UltraSerial/ActelProjects/UltraSerial"
3
4
if {[file exists ../designer/impl1/simulation/postlayout/_info]} {
5
   puts "INFO: Simulation library ../designer/impl1/simulation/postlayout already exists"
6
} else {
7
   vlib ../designer/impl1/simulation/postlayout
8
}
9
vmap postlayout ../designer/impl1/simulation/postlayout
10
vmap proasic3e "C:/LIBERO~1/v8.3/Designer/lib/modelsim/precompiled/vhdl/proasic3e"
11
12
vcom -93 -explicit -work postlayout "${PROJECT_DIR}/designer/impl1/ULTRASERIAL_top_ba.vhd"
13
vcom -93 -explicit -work postlayout "${PROJECT_DIR}/stimulus/UltraSerial_top_tbench.vhd"
14
vcom -93 -explicit -work postlayout "C:/Actelprj/UltraSerial/Source.VHDL/LIB/PCI_STIMULUS_HELPER.vhd"
15
vcom -93 -explicit -work postlayout "C:/Actelprj/UltraSerial/Source.VHDL/Stimulus/stimulus_PCI.vhd"
16
17
vsim -L proasic3e -L postlayout  -t 1ps -sdfmax /L_ULTRASERIAL_top=${PROJECT_DIR}/designer/impl1/ULTRASERIAL_top_ba.sdf postlayout.testbench
18
do "${PROJECT_DIR}/simulation/spezial.do"
19
run 10us

In der vorletzten Zeile wird mein Script aufgerufen. Das "postlayout" 
ist in den anderen beiden Modi durch "presynthesis" oder "postsynthesis" 
ersetzt, auch die "vsim"-Parameter sind dann etwas weniger und für 
"vcom" sind andere Dateien (Source-Code oder Edif-Netzliste) zu 
bearbeiten.

Ich habe versucht die Einstellungen von "vlib" bzw. "vmap" in meinem 
.do-Script wieder auszulesen aber das gelingt mir nicht. Diese Kommandos 
scheinen nur zum setzen und nicht zum auslesen zu taugen.
Gibt es da einen anderen Weg? Oder kann ich das gar direkt aus VHDL 
abgreifen?
Gibt es eine ordentliche Dokumentation der ModelSim-Console?


Grüße
Erik

von Matthias F. (flint)


Lesenswert?

Es gibt eine Modelsim Reference und einen User Guide. Sind beide nicht 
schwer über google zu finden.


Vielleicht könnte man das SignalSpy für das was du vorhast 
zweckentfremden, damit kann man iirc Werte aus einem do-script setzen.

Ob es das bringt ist eine andere Frage, wenn da eh jeweils andere 
source-files dafür kompiliert werden könnte man doch auch für jeden 
Modus ein eigenes Package anlegen, das eine Konstante auf einen vom 
Modus abhängigen Wert setzt, die dann in der Simulation abgefragt wird.

von Erik (Gast)


Lesenswert?

> Es gibt eine Modelsim Reference und einen User Guide.

habs gefunden, sorry die dumme Frage


> Vielleicht könnte man das SignalSpy für das was du vorhast
> zweckentfremden, damit kann man iirc Werte aus einem do-script setzen.

Klingt interessant aber die Dokumentation gibt dazu nicht viel her. Ich 
hab nur Befehle zur Verwendung im HDL-Source-Code gefunden aber nichts 
was man in einem .do-Script verwenden kann. Was ist dieses "SignalSpy" 
eigentlich? Im 'modelsim_user.pdf' kommt das Wort nur ein mal vor und 
die Beschreibungen der zugehörigen HDL-Befehle beschreiben nur die 
Syntax aber sagen mir nicht was man mit dieser Technik grundsätzlich 
anfangen kann.

> ... wenn da eh jeweils andere source-files dafür kompiliert werden ...

Die Auswahl der Source-Files kann ich aber nicht beeinflussen. Die 
Netzliste bzw. die Layout-Daten sind generiert, da habe ich auch keinen 
Einfluss drauf. Und die Stimulus-Dateien sind immer die selben aber 
gerade in denen brauche ich die Information über den Modus.


Grüße
Erik

von Matthias F. (flint)


Lesenswert?

Schau dir mal in der Referenz den Befehl force an:

"The force command allows you to apply stimulus interactively to VHDL 
signals and Verilog
nets."


Das ist wahrscheinlich der direkteste Weg. Im Design ein Signal oder 
auch mehrere, die die Modi unterscheiden und in einem do-script werden 
am Anfang der Simulation mit force die Signale gesetzt.

SignalSpy wär ein Blödsinn, vergiss das.

von Erik (Gast)


Lesenswert?

Hallo Matthias F.,

> Schau dir mal in der Referenz den Befehl force an ...

Danke! Das funktioniert soweit ganz gut, die nötigen Änderungen im 
VHDL-Stimulus hab ich gemacht und kann die mit dem force-Befehl perfekt 
beeinflussen.

Jetzt muss ich im .do-Script nur noch den aktuellen Modus ermitteln.
Gibt es eine Möglichkeit die geladenen Bibliotheken/Verzeichnisse, also 
das was "vmap" und "vlib" vorgeben, zu bestimmen?
Kann man in so einem .do-Script Text-Dateien analysieren? In dem 
jeweiligen Work-Verzeichnis gibt es eine "_info" die eine Liste der 
geladenen Module enthält, wenn man darin z.B. den String "_ba.vhd" 
findet ist man wahrscheinlich im Post-Layout-Modus (sicher finde ich 
noch bessere Unterscheidungskriterien).


Grüße
Erik

von Klaus F. (kfalser)


Lesenswert?

Im Prinzip gibt es meiner Meinung nach keine richtig sichere Methode.
Wenn man vmap ohne Parameter aufruft, dann erhält man eine Liste der 
mappings. Diese könnte man parsen, und schauen worauf die work library 
zeigt.
In deinem Fall scheint aber erst beim Aufruf des Simulators angegeben zu 
werden, was simuliert wird, das mapping der work library dürfte gar 
nicht relevant sein.

Ich würde mir auf Basis der .do files 3 verschiedene Batchfiles 
schreiben, die je nach Simulationsmodus unterschiedliche testbenches 
aufrufen.

Klaus

von Erik (Gast)


Lesenswert?

Hallo,


> Wenn man vmap ohne Parameter aufruft, dann erhält man eine Liste
> der mappings. Diese könnte man parsen, und schauen worauf die
> work library zeigt.

Klingt interessant, dann muss ich mal schauen wie das mit dem parsen 
funktioniert.
Die Zeile 9 aus meinem obigen Listing hat je nach Modus die folgen 
Varianten :

<vmap presynth presynth>
<vmap postsynth postsynth>
<vmap postlayout ../designer/impl1/simulation/postlayout>

(die oben gepostete .do-Datei wird von meiner Entwicklungsumgebung vor 
jedem ModelSim-Aufruf dynamisch erzeugt)


> Ich würde mir auf Basis der .do files 3 verschiedene Batchfiles ...

Was meinst Du mit "auf Basis der .do files"? Es gibt nur 2 .do-Dateien. 
Eine dynamische (von der Entwicklungsumgebung) und meine, die immer 
gleich bleibt und den Modus zur Laufzeit ermitteln soll.


Grüße
Erik

von Klaus F. (kfalser)


Lesenswert?

Das dynamische do file wird in 3 verschiedenen Varianten erzeugt.
Es enthält nur Kommandos zum
a) Kompilieren der VHDL-Files,
b) zum Mapping und
c) zum Aufruf des Simulators
Die Libraries sind nach 1x Laufenlassen erzeugt, das vlib Kommando 
braucht es daher nicht mehr.

Daraus kann man 3 verschieden Batchfiles erzeugen, die man manuell, also 
von der Kommandozeile und nicht mehr von der GUI aus aufruft.
Diese müssen nicht unbedingt dynamisch erzeugt werden, da die zu 
kompilierenden Files meist gleich bleiben, das Mapping bleibt auch 
gleich (muss man eigentlich nicht einmal jedesmal machen), und der 
Aufruf des Simulators mit vsim ist auch immer gleich.
Die einzelnen Batchfiles kannst Du beliebig anpassen, also je nach Modus 
eine unterschiedliche Testbench aufrufen.

von Erik (Gast)


Lesenswert?

Hallo,


entschuldigt bitte das ich mich gestern Nachmittag nicht mehr gemeldet 
hab.


> Wenn man vmap ohne Parameter aufruft, dann erhält man eine Liste
> der mappings. Diese könnte man parsen, und schauen worauf die
> work library zeigt.

Aus dieser Ausgabe kann man aber nicht ermitteln worauf 'work' zeigt.
Kann man den prüfen ob bestimmte Komponenten in der work-Library drin 
sind? Im postsynth-Modus, mit der Edif-Netzliste vom Synplify, sind z.B. 
mehrfach instantiierte Komponenten auch mehrfach vorhanden (mit _1 , _2 
usw. im Namen) im presynth-Modus, mit den VHDL-Sourcen, dagegen nicht. 
Das könnte man sich vielleicht zu nutze machen. Der Mechanismus währe 
zwar nicht universell, sondern müsste von Projekt zu Projekt angepasst 
werden, würde aber wenigstens zuverlässig und automatisch arbeiten. Die 
Idee mit den Batch-Dateien klingt nach immer wiederkehrender und 
fehlerträchtiger Arbeit z.B. wenn ich neue Source-Code-Dateien oder 
Stimulus-Dateien hinzufüge, da das Projekt noch im entstehen ist kommt 
das sicher noch recht häufig vor. Ohne einen zwingenden Grund würde ich 
nur sehr ungern auf die Automatismen der GUI verzichten.


Grüße
Erik

von Klaus F. (kfalser)


Lesenswert?

Nein, wie ich schon geschrieben haben, wird bei deiner Simulation die 
work library auch gar nicht verwendet.
Das was effektiv simuliert wird, wird nur vom Aufruf von vsim bestimmt 
und VHDL hat keine Möglichkeit zur Laufzeit festzustellen mit welchem 
Model eine Entity instantiert ist, bzw. von welcher library das modell 
geladen wurde. Das ist gegen die Idee von VHDL. Die Bereitstellung der 
Simulationsumgebung (Mapping der libraries auf Dateien/Verzeichisse) und 
die Simulation sind 2 verschiedene Dinge.
Vielleicht kannst Du deine GUI dazu bringen, mehr als nur eine Testbench 
bereitzustellen. Dann kannst Du für die funktionale Simulation die eine 
aufrufen und für die post layout die andere.

von Erik (Gast)


Lesenswert?

Hallo,

> ... wird bei deiner Simulation die work library auch gar nicht verwendet.

Sicher? Ich kann doch im VHDL-Code, auch im Stimulus, packages aus 
"work." benutzen.

Nunja, mein Problem trifft nur die Post-Synthesis-Simulation und die 
benutze ich nicht ganz so oft. Daher kann ich es in Kauf nehmen in 
meinem manuellen .do-Script das Parameter hinter dem force-Befehl 
manuell zu ändern wenn ich es brauche.


Danke für Eure Hilfe!

Erik

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.