Forum: FPGA, VHDL & Co. Generic in Simulation variabel handhaben?


von Matthias G. (mgottke)


Lesenswert?

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?

von Ottmar (Gast)


Lesenswert?

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.

von Bergvagabund (Gast)


Lesenswert?

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

von Matthias G. (mgottke)


Lesenswert?

@ 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
vlib work
2
vmap work work
3
vcom -explicit  -93 "my_module.vhd"
4
vcom -explicit  -93 "my_module_tb.vhd"
5
for {set x 1} {$x <= 11} {incr x} 
6
{  vsim -gMY_GENEIC_VALUE=$x -t 1fs -lib work my_module_tb
7
   ...
8
   run 1 us
9
}

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.