Forum: FPGA, VHDL & Co. Zugriff über Testpattern auf Konstanten einer Library


von Matthias G. (mgottke)


Lesenswert?

Hallo Zusammen,

aus einem komplexen Design möchte ich in einer Testbench über 
Testpattern ein VHDL-Modul testen. Das Modul enthält mehrere 
Daten-Adress-Bus Interface die zu stimulieren sind. Nun sind dazu in 
einer Projekt-Library Konstanten für die Adressen definiert, welche in 
dem Modul verwendet werden. Z.B.:
1
   constant ADDR_SET_MINTIME   : std_logic_vector(15 downto 0) := x"0004";  
2
   constant ADDR_SET_MAXTIME   : std_logic_vector(15 downto 0) := x"0008";
In der Testbench werden dazu aus einem Textfile Testpattern gelesen. Da 
die Konstanten sich im Laufe der Entwicklung hin und wieder nochmal 
ändern, würde ich ungern auf die meinen Testpattern die Adresse absolut 
eingeben sondern mit dem Konstanten-Namen. Z.B.:
1
   wr   ADDR_SET_MINTIME   56
2
   rd   ADDR_SET_MAXTIME
anstelle von
1
   wr   4   56
2
   rd   8
Hat jemand ne Idee - oder besser sogar noch eine Lösung - für das 
Problem?

von Der Besucher (Gast)


Lesenswert?

Warum benutzt du denn nicht einfach die Library in deiner Testbench und 
greifst auf die Konstanten zu?

Der Besucher

von Matthias G. (mgottke)


Lesenswert?

>> Warum benutzt du denn nicht einfach die Library in deiner Testbench und
greifst auf die Konstanten zu?

Dann müsste ich die Testpattern quasi in der Testbench unterbringen, das 
ist bei sehr langen und variablen Testpattern nicht praktikabel.

Man könnte höchstens den Konstantennamen aus den Testpattern auslesen, 
diesen als String in einer Caseanweisung plazieren und dort dann die 
eigentliche Konstante einer Adressvariablen (oder einem Signal) 
zuweisen. Dafür müsste man aber in jeder Testbench die ganzen Kontanten 
nochmals eintippen und vor allem parallel zur Library warten. Z.B.:
1
case tp_string is
2
   when "ADDR_SET_MINTIME" => tp_addr := ADDR_SET_MINTIME;     
3
   when "ADDR_SET_MAXTIME" => tp_addr := ADDR_SET_MAXTIME; 
4
   ... 
5
   when others             => tp_addr := x"0000";
6
end case;
Bei sehr vielen Konstanten und vielen Modulen ist das sehr aufwendig.

von Der Besucher (Gast)


Lesenswert?

Wie wäre es mit einem kleinen Script (z.B in Perl) das dir die 
gewünschten Konstanten aus der Library liest und aus deinen Testpattern 
(mit Konstanten) eine neue Datei erzeugt, in denen die Konstanten mit 
den gelesenen Werten ersetzt wurden. Sowas ist auch recht einfach.

Der Besucher

von Matthias G. (mgottke)


Lesenswert?

Wäre eine Möglichkeit. Schöner wäre es allerdings die VHDL-Ebene nicht 
verlassen zu müssen. Man könnte das Script ja auch in VHDL-Schreiben und 
in einer Funktion aufrufen. Vielleicht ist das ja auch keine so gute 
Idee. Oder freiwillige vor!

von Der Besucher (Gast)


Lesenswert?

Stimmt, du kannst natürlich auch in VHDL einen Textparser schreiben, der 
dir die Testpattern beim einlesen "übersetzt". Mit Perl geht sowas 
sicherlich einfacher, aber mit VHDL ist es auch möglich!

Der Besucher

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.