Forum: FPGA, VHDL & Co. String aus Datei lesen und zugehörige Constante verwenden


von Hannes K (Gast)


Lesenswert?

Hallo zusammen,

für eine Testbench habe ich ein Modell eine CPU Interfaces gebaut. Nun 
möchte ich verschiedene Befehle zu einem Testcase zusammenfassen und via 
Text IO meiner Testbench zufügen. Soweit kein Problem, auch wenn es noch 
nicht implementiert ist, habe ich eine klare Vorstellung, wie ich es 
implemenkann.

Nun zu meinem Problem. Im Design verwende ich ein Package, in welchem 
die entsprechenden Registeradressen als Constanten Hinterlegt sind, 
z.B.:
1
constant cFpgaIdAddr     : std_logic_vector(15 downto 0) := x"0000";
2
constant cFwVersAddr     : std_logic_vector(15 downto 0) := x"0001";
3
[...]
Diese Namen möchte ich auch in den Text Files verwenden, so dass dort 
beispielsweise folgene Zeilen enthalten sind:
rd cFwVersAddr        # read Firmware Version
wr cFpgaIdAddr 1234   # write 0x1234 in FPGA ID Register

Gibt es eine Möglichkeit, den Namen der Konstanten zu parsen (kein 
Problem) und anschließend diesen in den zugehörigen SLV zu wandeln (hier 
habe ich keine Idee, wie ich das realisieren soll)

Ich freue mich auf Eure sachdienlichen Hinweise.

Viele Grüße,
  Hannes

von P. K. (pek)


Lesenswert?

Fällt mir nicht ein, wie das direkt gehen könnte.

Möglicherweise hilft folgendes indirekte Vorgehen: Du übergibst den 
(Teil-)String, den Du aus dem File gelesen hast einer Funktion, welche 
eine Lookup-Table darstellt, wo mittels case-Statement der Wert der 
entsprechenden Konstante als Funktionsresultat zurückgegeben wird. 
Dieses Resultat schreibst Du dann z.B. in ein Signal. Ist dann nicht 
mehr konstant, aber als Adresse sicher zu gebrauchen.

Nachteil: Du musst das Mapping in der Funktion immer up-to-date halten. 
Ist aber nicht so schlimm, weil alles an einer Stelle ist.

von Hannes K (Gast)


Lesenswert?

Hallo Peter,

vielen Dank für die Info. Die Adressinformationen in der "Mapping 
Funktion" wären dann ja konstant zu meinem Package, somit eine weitere 
Stelle, wo durch die Redundanz inkonsistenzen zustande kommen könnten. 
Das möchte ich wenn möglich vermeiden.

Evtl. muss ich dann wohl doch bei meinem bisherigen Vorgehen bleiben und 
meine Testcases in VHDL Kompilieren. Dann habe ich verschiedene CPU IF 
VHDL Files, von denen jeweils eines in die Simulation einkompiliert 
wird. Im VHDL kann ich ja direkt auf mein Package zugreifen.

Viele Grüße,
Hannes

von Hannes K (Gast)


Lesenswert?

Hallo zusammen,

ich habe jetzt noch eine andere Idee, wie ich die Testcases 
zusammenstellen möchte. Ich kopiere zwei Teile zu einer VHD Datei 
zusammen. Die eine ist Testcase unabhängig (also die "Testbench"), die 
andere Testcase spezifisch (RD und WR Befehle). Kann mir einer von Euch 
einen Tip geben, wie ich das hinbekommen kann?

Auf der CMD kann ich es mit folgendem Befehl realisieren
copy ..\Testbench\Testbench.vhd+..\Testcase\Testcase.vhd 
..\AutoGen\AutoGeneratedTestbench.vhd

Leider funktioniert die Syntax auf der Modelsim Befehlszeile nicht und 
auhc mit file copy bin ich nicht weitergekommen.
Hat jemand einen alternativen Lösungsansatz für mich?

Viele Grüße,
  Hannes K.

von Hannes K (Gast)


Lesenswert?

Ach ja, noch ein kleiner Nachtrag, für den Fall, dass die Information 
notwendig ist. Ich möchte das ganze mit .do scripten realisieren.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hannes K schrieb:
> Die eine ist Testcase unabhängig (also die "Testbench"), die andere
> Testcase spezifisch (RD und WR Befehle). Kann mir einer von Euch
> einen Tip geben, wie ich das hinbekommen kann?
Binde den Testcase doch als Package in dein Projekt ein...
(obwohl das üblicherweise genau andersrum geht: ein Package ist eher 
statisch)

von Hannes K (Gast)


Lesenswert?

Hallo Lothar,

im Moment wüsste ich nicht, wie ich den Testcase in ein Package 
auslagern kann. Aktuell besteht meine Testbench aus einem Prozess mit 
den Prozeduren Read und Write (und einigen anderen). Der Eigentliche 
"Testcase" spieltz sich dann zwischen dem Begin und End des Prozesses ab 
und setzt sich aus verschiedenen Aufrufen der Prozeduren zusammen.

Hast Du eine Idee, wie ich das in ein Package auslagern kann, ohne die 
Prozeduren dann redundant zu halten? Falls die Prozeduren ebenfalls 
Bestandteil des Packages wären, könnte ich auch gleich verschiedene 
Architectures verwenden, die dann aber ebenfalls Redundanzen enthalten.

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.