Wie kann ich die internen Signale meines VHDL-Quellcodes in meine Testbench bringen, damit ich sie als Wellenformen anzeigen kann? Ich verwende Active HDL. Ich würde gerne wissen, ob es eine werkzeugunabhängige Methode gibt, um mein Ziel zu erreichen. Jede Hilfe ist willkommen.
Ich bekomme diesen Fehler jetzt.
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;
Was Sie suchen, wird in VHDL als externe Namen (oder hierarchische Namen) bezeichnet. Sie können verwendet werden, um die Sichtbarkeit von Bereichen/Hierarchien zu umgehen. Die Syntax ist wie im Beispiel unten.
<<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 des Namens angeben müssen. Absolute Pfade beginnen mit einem .
gefolgt vom Namen Ihrer obersten Ebene. Bei relativen Pfaden können Sie sich ^
mit in der Hierarchie nach oben bewegen. Wenn Sie Konstanten/Signale aus einigen Paketen verwenden, können Sie auch verwenden @
, um zu einer Bibliothek zu wechseln.
Ein Beispiel für einen absoluten Pfad ist
.tb_name.instance_label.sub_instance_label.signal_name
Um auf dasselbe Element aus der Testbench mit relativen Namen zuzugreifen, können Sie verwenden
instance_label.sub_instance_label.signal_name
Wenn Sie auf ein Testbench-Signal/eine Konstante von der sub_instance zugreifen möchten, die Sie verwenden können
^.^.constant_name
Um auf eine andere Konstante in einem Konfigurationspaket zuzugreifen, das sich in der Konfigurationsbibliothek befindet, 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, daher sollte sie von allen Tools unterstützt werden, die bereits VHDL-2008 unterstützen (einschließlich ActiveHDL, denke ich). Die meisten Simulatoren verwenden VHDL-2008 nicht standardmäßig, stellen jedoch ein Befehlszeilenargument oder eine Konfigurationsoption bereit, um es zu aktivieren.
alias
müssen Sie die Zuweisung in eine neue Anweisung schreiben. Der Vorteil ist, dass Sie anstelle des langen externen Namens den Aliasnamen verwenden können.Wie kann ich die internen Signale meines VHDL-Quellcodes in meine Testbench bringen, damit ich sie als Wellenformen anzeigen kann?
Ein Prüfstand impliziert eine Simulation – eine Entität ohne Ports ist im Allgemeinen nicht für eine Synthese geeignet.
Obwohl ich Active-HDL noch nie verwendet habe, verstehe ich, dass es einen Design-Browser hat, der es Ihnen ermöglichen sollte, Signale in Ihrer Hierarchie unten auszuwählen, um sie in Ihrer Wellenform anzuzeigen. Siehe Aldecs Compilation and Simulation -Video (5:02, Min:Sek).
Und jetzt habe ich den Eindruck, dass das Video vielleicht in diesem speziellen Fall Verwirrung stiften könnte.
Bei 2:22 vom Ende zeigt das Video eine Do-Datei (Makro), die die Simulation steuert:
Wo wir jedes Signal in der obersten Ebene des Designs sehen, wurde die Wellenformanzeige mit dem Wave-Befehl hinzugefügt. Es sollte auch möglich sein, ein Signal irgendwo in der Entwurfshierarchie zu spezifizieren.
Die Grundidee ist, dass viele Simulatoren es Ihnen ermöglichen, Signale (und einige erlauben Variablen) zu planen, die für die Wellenformanzeige gesammelt werden sollen.
Dieses kurze Video zeigt einfach keine Signale für untergeordnete Hierarchieebenen. (In einer kurzen Video-Präsentation steckt viel drin).
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 anzuzeigen.
Nun zu den schlechten Nachrichten – es gibt keine Standardisierung für Simulatorfunktionen oder -schnittstellen, Planungssignale für Wellenform-Dump usw. Diese sind alle implementierungsdefiniert.
Es ist so ziemlich garantiert, dass Sie Signale überall in einer Designhierarchie in einen Wellenform-Viewer oder eine Wellenform-Dump-Datei mit jeder simulierenden Implementierung ausgeben können. Die Methode dafür ist implementierungsdefiniert.
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önnten, indem sie eine gemeinsame Datenbank verwenden , die die funktionale Überprüfung auf mehreren Implementierungsplattformen beschreibt, und Unterschiede in Syntax und Semantik überwinden. Es gibt wahrscheinlich auch Unterschiede in der Syntax der Befehlszeilenschnittstelle zum programmgesteuerten Aufrufen der Tools.
Die Idee der Portabilität umfasst nicht mehrere GUIs elegant.
Tools wie xilinx haben 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.
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, ob Sie es korrekt instanziiert haben, indem Sie eine Entitäts-Instanziierungsanweisung oder eine Komponenten-Instanziierung verwenden. Stellen Sie sicher, dass die Signale in Ihrer Testbench mit der zu testenden Entität verbunden sind. Wenn das Problem dadurch nicht gelöst wird, posten Sie den Testbench-Code, damit wir Ihnen helfen können.
Thomas S.
Thomas S.
.tp_spi_dac.uut.ch1_byte_data_sent
.Suhasini