Wie werden interne Signale eines unteren Moduls an ein oberes Modul in VHDL übertragen?


11

Wie kann ich die internen Signale meines VHDL-Quellcodes auf meine Testbench übertragen, damit ich sie als Wellenformen anzeigen kann? Ich benutze Active HDL. Ich würde gerne wissen, ob es eine werkzeugunabhängige Methode gibt, um mein Ziel zu erreichen. Jede Hilfe wird geschätzt.

Ich bekomme diesen Fehler jetzt.Geben Sie hier die Bildbeschreibung ein

Mein Quellcode ist

entity SPI_DAC is
    Port ( 
    -- inputs and oututs
    )
end SPI_DAC;

architecture Behavioral of SPI_DAC is 
    --These are my internal signals 
    signal ch1_byte_data_sent       : STD_LOGIC_VECTOR(23 downto 0)     := x"000000"; 
    signal ch1_byte_cmd_sent        : STD_LOGIC_VECTOR(23 downto 0)     := x"000000";
    --and a few other signals
begin 
    --functionality 
end Behavioral;

Mein Testbench-Code ist

entity tb_spi_dac is
end tb_spi_dac;

architecture behavioral of tb_spi_dac is
    component spi_dac
    port(
    --declaration, inputs and outputs
    );
    end component;
begin
    uut: spi_dac port map(
    --map ports
    );
    --stimulus process
end;

Wenn Sie Ihre Simulation starten, wird Ihr Simulator alle Elemente ausarbeiten. Anschließend wird nach den Links gesucht, die Sie mithilfe externer Namen erstellt haben. Es scheint mir, dass Ihr Weg falsch ist. Ich habe meine Antwort bearbeitet, um mehr Details zum Aufbau von Pfaden zu erhalten. Ohne Wissen über Ihr Design kann ich nicht sagen, was mit Ihrem Weg falsch ist.
Thomas S.

Wie ich in meiner Antwort sagte, müssen Sie die Bezeichnung verwenden, nicht den Entitätsnamen. Der richtige Pfad sollte sein .tp_spi_dac.uut.ch1_byte_data_sent.
Thomas S.

Ihre Vorschläge haben mein Problem @ThomasS gelöst. Danke vielmals! Ich hatte ein Problem mit der Version von VHDL, das ich nach dem Ansehen des von David vorgeschlagenen Videos gelöst habe. Ich weiß, dass das Schreiben von Dankesnotizen nicht empfohlen wird, aber danke Thomas für die Korrektur meiner Bearbeitung (ich war wirklich verwirrt mit dieser Markdown-Formatierung).
Suhasini

Antworten:


11

Was Sie suchen, werden in VHDL als externe Namen (oder hierarchische Namen) bezeichnet. Sie können verwendet werden, um die Sichtbarkeit des Bereichs / der Hierarchie zu umgehen. Die Syntax entspricht dem folgenden Beispiel.

<<signal path_name : std_logic_vector(7 downto 0)>>

Sie können auch auf Konstanten und Variablen mit externen Namen zugreifen. Sie müssen jedoch den Typ im externen Typ ändern. Sie können externe Namen direkt für den Lese- / Schreibzugriff verwenden. Sie sollten jedoch Aliase verwenden, um die Lesbarkeit zu verbessern.

alias signal_name is 
    <<signal path_name : std_logic_vector(7 downto 0)>>;

Der externe Name muss den Pfad zu dem Element enthalten, auf das Sie zugreifen möchten. Der Pfad kann entweder absolut oder relativ sein. Die einzelnen Elemente in Ihrem Pfad sind durch Punkte getrennt. Beachten Sie, dass Sie die Bezeichnungen der Instanz / des Prozesses / der Entität / ... und nicht den Namen angeben müssen. Der absolute Pfad beginnt mit einem .gefolgt vom Namen Ihrer obersten Ebene. Für relative Pfade können Sie ^in der Hierarchie nach oben gehen. Wenn Sie Konstanten / Signale aus einem Paket verwenden, können Sie auch @in eine Bibliothek wechseln.

Ein Beispiel für einen absoluten Pfad ist

.tb_name.instance_label.sub_instance_label.signal_name

Um von der Testbench aus auf dasselbe Element mit relativen Namen zuzugreifen, können Sie verwenden

instance_label.sub_instance_label.signal_name

Wenn Sie über die Subinstanz, die Sie verwenden können, auf ein Testbench-Signal / eine Testbench-Konstante zugreifen möchten

^.^.constant_name

Um auf eine andere Konstante in einem Konfigurationspaket in der Konfigurationsbibliothek zuzugreifen, können Sie verwenden

@config.pkg_name.other_constant_name

Sie können den Design- / Bibliotheksbrowser Ihres Simulators verwenden, wie David darauf hingewiesen hat, um den richtigen Pfadnamen zu finden.

Diese Funktion wurde in VHDL-2008 hinzugefügt, sodass sie von allen Tools unterstützt werden sollte, die bereits VHDL-2008 unterstützen (einschließlich ActiveHDL, glaube ich). Die meisten Simulatoren verwenden standardmäßig nicht VHDL-2008, bieten jedoch ein Befehlszeilenargument oder eine Konfigurationsoption, um es zu aktivieren.


Ich habe versucht, was Sie vorgeschlagen haben. Der Alias ​​ch1_byte_data_sent ist das << Signal. TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (23 nach unten auf 0) >>: = x "000000"; Dabei wird der Fehler "Bezeichner oder Zeichenfolgenliteral erwartet" angezeigt. Irgendwelche Ideen, warum ich den Fehler bekomme? (Entschuldigung für Fehler mit dem Beitrag, mein erstes Mal hier!)
Suhasini

Meine Antwort könnte nicht klar genug sein. Bei Verwendung müssen aliasSie die Zuordnung in eine neue Anweisung schreiben. Der Vorteil ist, dass Sie den Aliasnamen anstelle des langen externen Namens verwenden können.
Thomas S.

1

Wie kann ich die internen Signale meines VHDL-Quellcodes auf meine Testbench übertragen, damit ich sie als Wellenformen anzeigen kann?

Ein Prüfstand impliziert eine Simulation - eine Entität ohne Ports ist im Allgemeinen nicht für die Synthese geeignet.

Obwohl ich Active-HDL noch nie verwendet habe, gibt es meines Erachtens einen Entwurfsbrowser, mit dem Sie Signale in Ihrer Hierarchie auswählen können, die in Ihrer Wellenform angezeigt werden sollen. Siehe Aldecs Zusammenstellungs- und Simulationsvideo (5:02, min: sec).

Und ungefähr jetzt habe ich den Eindruck, dass das Video Verwirrung stiften könnte, vielleicht in diesem speziellen Fall.

Um 2:22 Uhr ab Ende zeigt das Video eine do-Datei (Makro), die die Simulation steuert:

2:22 Datei machen

Wo wir sehen, wurde jedes Signal in der obersten Ebene des Entwurfs mit dem Wellenbefehl zur Wellenformanzeige hinzugefügt. Es sollte auch möglich sein, ein Signal an einer beliebigen Stelle in der Entwurfshierarchie anzugeben.

Die Grundidee ist, dass viele Simulatoren es Ihnen ermöglichen, die Planung von Signalen (und einigen Variablen) für die Wellenformanzeige zu planen.

Dieses kurze Video zeigt einfach keine Signale für untergeordnete Hierarchieebenen. (In einer kurzen Videopräsentation steckt viel voll).

Ich würde gerne wissen, ob es eine werkzeugunabhängige Methode gibt, um mein Ziel zu erreichen.

Wie oben erwähnt, scheint Ihr Ziel darin zu bestehen, interne Signale als Wellenformen zu betrachten.

Nun zu den schlechten Nachrichten: Es gibt keine Standardisierung für Simulatorfunktionen oder -schnittstellen, Planungssignale für den Wellenformspeicherauszug usw. Diese sind alle implementiert.

Es ist so gut wie garantiert, dass Sie Signale überall in einer Entwurfshierarchie an einen Wellenform-Viewer oder eine Wellenform-Dump-Datei mit jeder simulierten Implementierung ausgeben können. Die Methode hierfür ist die Implementierung definiert.

Die gute Nachricht ist, dass sie dazu neigen, Konzepte voneinander zu kopieren, z. B. do-Dateien, die Sie programmgesteuert für die Portabilität generieren können, indem Sie eine gemeinsame Datenbank verwenden , die die Funktionsüberprüfung auf mehreren Implementierungsplattformen beschreibt und Unterschiede in Syntax und Semantik überwindet. Es würde wahrscheinlich auch Unterschiede in der Syntax der Befehlszeilenschnittstelle zum programmgesteuerten Aufrufen der Tools geben.

Die Idee der Portabilität umfasst nicht mehrere GUIs.


0

Tools wie xilinx bieten die Möglichkeit, interne Signale anzuzeigen.

Eine einfache werkzeugunabhängige Methode besteht darin, separate Ausgangsleitungen zu deklarieren und die internen Signale mit diesen Leitungen zu verbinden.


Ich möchte mich nicht in meine Eingabe- und Ausgabeports einmischen. Daher können keine neuen Ausgabezeilen deklariert werden. Ich habe die Signale in meiner Testbench deklariert, kann jedoch keine Ausgabe auf der Wellenform sehen (zeigt nur meinen initialisierten Wert Null an, ohne die Funktion zu implementieren). Gibt es eine andere Möglichkeit, dies zu tun?
Suhasini

0

Wenn Sie die Signale in der Testbench deklariert haben, aber keine Ausgabe sehen können, liegt möglicherweise ein Problem in der Instanziierungsanweisung vor, in der Sie die zu testende Entität instanziieren. Überprüfen Sie mithilfe einer Entitätsinstanziierungsanweisung oder einer Komponenteninstanziierung, ob Sie sie korrekt instanziiert haben. Stellen Sie sicher, dass die Signale in Ihrer Testbench mit der zu testenden Entität verbunden sind. Wenn das Problem dadurch nicht behoben wird, veröffentlichen Sie den Testbench-Code, damit wir Ihnen helfen können.


Was Thomas gesagt hat, spricht mein Problem genau an. Ich habe den zuvor erwähnten Fehler behoben, der aufgetreten war, weil in Active-HDL, das mit der iCEcube2-Design-Software von Lattice geliefert wurde, standardmäßig VHDL 1993 festgelegt wurde. Jetzt tritt ein schwerwiegender Ausarbeitungsfehler auf, wenn ich versuche, die Simulation zu initialisieren. Ich versuche herauszufinden, warum dies auftritt. Ich hoffe, es handelt sich nicht um ein eingeschränktes Lizenzproblem.
Suhasini

Können Sie uns diese Nachricht zeigen?
Rick
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.