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
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.
Mit einem Script/Pragma liesse sich schon rausbekommen, welche Bib er benutzt.
@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
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
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.
> 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
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.
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
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
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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.