Forum: FPGA, VHDL & Co. Testbench: Signal von Untermodul verwenden


von Rita P. (rita2)


Lesenswert?

Hallo,

Ich habe in meiner Testbench (entity TB) die eigentliche Schaltung als 
component deklariert. Ich instantiieren die Schaltung mit
   uut : schaltung
In der Entity Schaltung gibt es das Signal Din_req. Dieses Signal möchte 
ich gerne in der Testbench verwenden.
   wait until rising_edge (/TB/uut/Din_req);
Ich hätte erwartet, daß das funktioniert, da genau diese Syntax bei 
Modelsim funtkioniert um mit add wave diese Signal id der  Waveform 
anzuzeigen. Aber es kommt immer illegal expression oder Syntax error 
auch bei allen mir sonst einfallenden Ausdrucksweisen für in die 
Klammer.

Ich bin der Meinung das das gehen müßte, daß man ein Signal eines 
Untermoduls für die Testbench verwendet.

Kann mir jemand helfen, wie es richtig heißen müßte.

Danke
Rita

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


Lesenswert?

Rita Szasz schrieb:
> Ich bin der Meinung das das gehen müßte, daß man ein Signal eines
> Untermoduls für die Testbench verwendet.
Worauf basiert diese Meinung?

In VHDL gibt es erst mal nur den Port als Schnittstelle zur 
Aussenwelt. Was dir der Simulator sonst noch an Hilfsmittel zur 
Verfügung stellt, hat mit VHDL in nichts zu tun. So sind z.B. Variablen 
in Prozessen auch nur für den Simulator sichtbar.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Rita P. schrieb:
> Ich bin der Meinung das das gehen müßte, daß man ein Signal eines
> Untermoduls für die Testbench verwendet.

Hier findest Du ein paar Beispiele:
http://www.doulos.com/knowhow/vhdl_designers_guide/vhdl_2008/vhdl_200x_ease/#hierarchicalnames

--
Marcus

von Rita P. (rita2)


Lesenswert?

Lothar Miller schrieb:
> Rita Szasz schrieb:
>> Ich bin der Meinung das das gehen müßte, daß man ein Signal eines
>> Untermoduls für die Testbench verwendet.
> Worauf basiert diese Meinung?

Ich bin der Meinung dieses in meinem VHDL Kurs der leider schon 2 Jahre 
her ist, verwendet zu haben. Seitdem habe ich zwar einige VHDL Projekte 
getestet, aber immer nur mit TCL Skripts. Im jetzigen Projekt muß ich 
aber eine VHDL Testbench verwenden. Ich benutze die Testumgebung eines 
anderen Projektes und möchte die nicht komplett umschreiben müssen. Dort 
ist das Signal Din_req auf dem Toplevel vorhanden, bei mir leider nicht 
und ich möchte aber auch das Signal nicht auf den Toplevel legen, denn 
dann würde ich ja später einen Pin dafür brauchen.

Hast du einen guten Vorschlag wie ich es lösen kann, wenn man nicht auf 
ein signal eines Untermoduls abfragen kann?

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


Lesenswert?

Rita P. schrieb:
> und ich möchte aber auch das Signal nicht auf den Toplevel legen, denn
> dann würde ich ja später einen Pin dafür brauchen.
Such mal nach translate_off und translate_on in Verbindung mit 
pragma oder synthesis oder synopsys im Handbuch für deinen 
Synthesizer.
Siehe z.B. den Beitrag "Re: Simulation oder Synthese?"

Oder nimm einen VHDL-2008 Simulator, richtig... ;-)

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Rita P. schrieb:
> Hast du einen guten Vorschlag wie ich es lösen kann, wenn man nicht auf
> ein signal eines Untermoduls abfragen kann?

Dass man das kann, ist doch in dem Beispiel beschrieben. Voraussetzung 
ist eben entweder ein VHDL-2008 Simulator, oder ein 
herstellerspezifisches package, dass einen auf hierarchische Namen 
zugreifen lässt.

--
Marcus

von Rita P. (rita2)


Lesenswert?

@Marcus:
Deine erster Beitrag hat sich mit meiner Antwort die du zitierst 
überschnitten. Ich habe deine Antwort noch nicht gesehen gehabt, als ich 
meine Antwort geschrieben habe.
Leider nutzt mir das nichts direkt, da ich VHDL2008 nicht verwenden 
darf, Firmenvorgabe.

Deine Antwort hat mir trotzdem genutzt, da ich mit dem Begriff 
hierarchical names über google diesen Link 
(http://www.fpgarelated.com/usenet/fpga/show/96143-1.php) gefunden habe. 
Mit Global signal über ein Global Package habe ich jetzt mein Problem 
gelöst. Zudem weiß ich jetzt, daß das was ich wollte in Verilog einfach 
geht. Daher war mein Gefühl das es gehen müßte, nicht so falsch. Es war 
nur die falsche Sprache. Ich habe mal Anfang 2000 etwas mit Verilog 
gearbeitet.

Besten Dank, auch an Lothar
Rita

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Rita P. schrieb:
> Leider nutzt mir das nichts direkt, da ich VHDL2008 nicht verwenden
> darf, Firmenvorgabe.

Ja, das ist die traurige Realität. Ich kann das ja für den 
synthetisierbaren Teil sogar noch nachvollziehen, aber die Testbench? 
Mit dieser Firmenvorgabe und Deinem unter diesen Bedingungen notwendigen 
Workaround hat sich die Firma leider einen Bock geschossen. Jetzt musst 
Du nämlich möglicherweise getesteten und abgesegneten Quellcode ändern, 
um auf das globale Signal zugreifen zu können. Ich würde daher 
empfehlen, die von Lothar vorgeschlagene Kapselung zu verwenden, oder 
eben herstellerspezifische packages zu nehmen. Wenn Du nicht mit 
unzähligen verschiedenen Tools arbeitest ist das die elegantere Methode, 
da Du in dem Fall gleich siehst, woher die Signale kommen.

--
Marcus

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


Lesenswert?

Marcus Harnisch schrieb:
> Wenn Du nicht mit unzähligen verschiedenen Tools arbeitest
> ist das die elegantere Methode
Richtig, denn elegant oder gar übersichtlich ist das Herumgewürge 
mit den Pragmas nun wirklich nicht...

von Rita P. (rita2)


Lesenswert?

Da ich es auch nicht so toll fand, etwas im eigentlich Code ändern zu 
müssen, auch wenn der Compiler die Zeile rausschmeisen sollte, habe ich 
noch etwas rumgesucht. Dabei bin ich auf die Funktion init_signal_spy 
von ModelSim gestoßen. Dies ist auch in dem Link den ich eingestellt 
habe, man muß nur etwas weiter runterscrollen. Im Usermanual von 
Modelsim ist die Funktion gut beschrieben. Diese Funktion legt ein 
beliebiges hierarchisches Signal auf ein anderes beliebiges Signal.
Die Actel-Software meldet zwar einen Fehler bei check HDL file, aber 
Modelsim versteht es richtig. Damit kann ich jetzt ganz gut leben, da 
ich immer Modelsim zum simulieren benutzte.

@Markus:
was sind herstellerspezifische packages? Etwas von Actel oder Xilinxs 
würde mir da ja nichts nützen. Oder meinst du soetwas wie das 
init_signal_spy aus der Modelsim_lib?

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


Lesenswert?

Rita P. schrieb:
> was sind herstellerspezifische packages?
Das da ist sowas:
> Dabei bin ich auf die Funktion init_signal_spy von ModelSim gestoßen.
Denn so eine Funktion findest du bei einem anderen Simulator nicht.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Rita P. schrieb:
> Oder meinst du soetwas wie das init_signal_spy aus der Modelsim_lib?

Genau das.

--
Marcus

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.