String aus Datei lesen und zugehörige Constante verwenden

Gast #2771396
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
#2771628
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.
Gast #2771662
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
Gast #2774568
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.
Moderator (Firma: Titel) Persönliche Seite #2774663
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)
Gast #2774684
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren