Testbench: Signal von Untermodul verwenden

OP #3022835
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
Moderator (Firma: Titel) Persönliche Seite #3022845
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.
OP #3022859
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?
Moderator (Firma: Titel) Persönliche Seite #3022875
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... ;-)
Persönliche Seite #3022936
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
OP #3022967
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
Persönliche Seite #3023010
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
OP #3023075
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?

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