Ich habe folgendes VHDL-Problem: Ein von mir geschriebenes Modul besitzt ein Generic. Dieser (konstante) Wert wird verwendet um den Range diverser Vektoren an verschiedenen Ports und einiger interner Signale zu bestimmen. So weit ist das auch kein Problem und funktioniert auch bestimmungsgemäß. Jetzt möchte ich dieses Modul in ModelSim ausgiebig testen. Unter anderem möchte ich das Modul mit verschiedenen Werten des Generic testen. Ich habe aber keine Lust x-Beliebige Testbenches dafür aufzusetzen, oder aber das Modul x-Beliebige oft in meiner Testbench zu instantiieren. Schön wäre es wenn man zu Laufzeit der Simulation (etwa mit einer For-Schleife) diverse Werte für das Generic durchspielen könnte. Hat jemand eine Idee ob so was irgendwie lösbar ist?
Gast
#1648838
Generics kann man beim vsim aufruf setzen. Details stehen im manual.
-g<Name>=<Value>
Beispiel:
vsim -g/top/ram/u1/tpd_hl=10ns -gtpd_hl=15ns top
Generics kann man prinzipbedingt nicht zur laufzeit ändern.
Gast
#1648923
Hallo Es gibt natürlich die Möglichkeit das Ganze etwas aufwendiger zu machen. Normalerweise schreibt man ja eine Testbench hardcodiert als File in VHDL. Das stößt bei großen Projekten meist bald an seine Grenzen (wie simulier ich denn mit einer hardcodierten Testbench beispielsweise einen UMTS Handychipsatz wo zusätzlich eine Hardware Software Cosimulation notwendig ist?). Hier schreibt man nicht die Testbench selbst, sondern z.B. mit Hilfe von Scriptsprachen wie Perl oder Pyton erzeugt man dynamisch eine bestimmte Testbench. Der gesamte Simulationsablauf ist dann natürlich auch Scriptbasiert. Mit dieser Methode kann man auch das Fehlen von Befehlen für Usereingaben (scanf) in VHDL umgehen. Ich hab das selbst noch nie so machen müssen, weis aber dass das eine mögliche Art ist komplexere Verifications zu machen. Der Verification Engineer ist ein ziemlicher Spezialist welcher viel mehr mit Softwareentwicklung als mit Hardwareentwicklung zu tun hat. Gruß Bergvagabund
@ Ottmar: Vielen Dank für den Tip. Die Parameter habe ich mir soweit noch nicht näher angesehen. Die bringen nun die Lösung für mein Problem. In meinem .do-File mache ich das nun wie folgt und es funktioniert prima:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.