下位モジュールの内部信号をVHDLの上位モジュールに引き出す方法は?


11

VHDLソースコードの内部信号をテストベンチに引き出して、波形として表示するにはどうすればよいですか?Active HDLを使用しています。目的を達成するためのツールに依存しない方法があるかどうか知りたいのですが。どんな助けでもありがたいです。

このエラーが発生しました。ここに画像の説明を入力してください

私のソースコードは

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;

私のテストベンチコードは

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;

シミュレーションを開始すると、シミュレータはすべての要素を詳しく説明します。その後、外部名を使用して作成したリンクを探します。あなたの道は間違っているようです。パスの構成について詳しく説明するために、回答を編集しました。あなたのデザインについての知識がなければ、私はあなたの道のどこが悪いのか言うことはできません。
トーマスS.

私の回答で言ったように、エンティティ名ではなくラベルを使用する必要があります。正しいパスはです.tp_spi_dac.uut.ch1_byte_data_sent
トーマスS.

あなたの提案は私の問題@ThomasSを解決しました。どうもありがとう!VHDLのバージョンに問題があり、Davidの提案に従ってビデオを見た後で解決しました。お礼状を書くことはお勧めできませんが、編集を修正してくれたThomasに感謝します(このマークダウンの書式設定には本当に戸惑いました)。
Suhasini 2014

回答:


11

探しているのは、VHDLでは外部名(または階層名)です。スコープ/階層の可視性を回避するために使用できます。構文は以下の例のようになります。

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

外部名で定数と変数にアクセスすることもできます。ただし、外部型の型を変更する必要があります。読み取り/書き込みアクセスに外部名を直接使用できます。ただし、読みやすくするためにエイリアスを使用する必要があります。

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

外部名には、アクセスする要素へのパスを含める必要があります。パスは絶対パスでも相対パスでもかまいません。パス内の個々の要素は、ドットで区切られています。名前ではなく、インスタンス/プロセス/エンティティ/ ...のラベルを指定する必要があることに注意してください。絶対パスは、で始まり、.その後にトップレベルの名前が続きます。相対パスの場合^、階層を上に移動するために使用できます。一部のパッケージの定数/信号を使用@する場合、ライブラリへの移動にも使用できます。

絶対パスの例は

.tb_name.instance_label.sub_instance_label.signal_name

使用できる相対名でテストベンチから同じ要素にアクセスするには

instance_label.sub_instance_label.signal_name

あなたが使用できるsub_instanceからいくつかのテストベンチ信号/定数にアクセスしたい場合

^.^.constant_name

使用できる構成ライブラリにある構成パッケージ内の他の定数にアクセスするには

@config.pkg_name.other_constant_name

Davidが指摘したように、シミュレーターの設計/ライブラリブラウザーを使用して正しいパス名を見つけることができます。

この機能はVHDL-2008で追加されたため、すでにVHDL-2008をサポートしているすべてのツールでサポートされるはずです(ActiveHDLを含むと思います)。ほとんどのシミュレータはデフォルトでVHDL-2008を使用しませんが、それを有効にするコマンドライン引数または構成オプションを提供します。


私はあなたが提案したものを試しました。エイリアスch1_byte_data_sent is << signal .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent:STD_LOGIC_VECTOR(23 downto 0)>>:= x "000000"; これを行うと、「識別子または文字列リテラルが必要です」というエラーが表示されます。エラーが発生する理由は何ですか?(投稿に間違いがあって申し訳ありません、初めてここに!)
Suhasini

私の答えは十分に明確ではないかもしれません。使用aliasする場合は、新しいステートメントで割り当てを記述する必要があります。利点は、長い外部名の代わりにエイリアス名を使用できることです。
トーマスS.

1

VHDLソースコードの内部信号をテストベンチに引き出して、波形として表示するにはどうすればよいですか?

テストベンチはシミュレーションを意味します-ポートのないエンティティは通常、合成に適していません。

Active-HDLを使用したことがないのですが、階層内の信号を選択して波形に表示できるデザインブラウザーがあることを理解しています。Aldecのコンパイルとシミュレーションのビデオ(5:02、分:秒)を参照してください。

そして今、私はおそらくこの特定のケースで、ビデオが混乱を引き起こすかもしれないという印象を受けました。

最後から2:22に、ビデオはシミュレーションを制御するdoファイル(マクロ)を示しています。

2:22 doファイル

デザインのトップレベルのすべての信号が表示されているところに、waveコマンドを使用して波形表示に追加されています。また、デザイン階層のどこにでも信号を指定できるようにする必要があります。

基本的な考え方は、多くのシミュレーターで、波形表示のために収集する信号(および一部の変数を許可)をスケジュールできるようにすることです。

この短いビデオでは、補助的な階層レベルの信号は表示されていません。(短いビデオプレゼンテーションにはたくさん詰め込まれています)。

目的を達成するためのツールに依存しない方法があるかどうか知りたいのですが。

上記のように、内部信号を波形として表示することが目的のようです。

悪い知らせですが、シミュレータの機能やインターフェース、波形ダンプのスケジューリング信号などの標準化はありません。これらはすべて実装定義です。

シミュレーションする任意の実装を使用して、デザイン階層の任意の場所にある信号を波形ビューアーまたは波形ダンプファイルにダンプできることがほぼ保証されています。その方法は実装によって定義されます。

良いニュースは、 複数の実装プラットフォームでの機能検証を記述した共通データベースを使用して、構文とセマンティクスの違いを克服し、移植性のためにプログラムで生成できるdoファイルなどの概念を相互にコピーする傾向があることです。また、プログラムからツールを呼び出すコマンドラインインターフェイスの構文にも違いがあるでしょう。

複数のGUIを適切に採用しない移植性のアイデア。


0

ザイリンクスのようなツールには、内部信号を表示するオプションがあります。

簡単なツールに依存しない方法は、個別の出力ラインを宣言し、内部信号をこれらのラインに接続することです。


入力ポートと出力ポートをいじりたくありません。したがって、新しい出力行を宣言することはできません。テストベンチで信号を宣言しましたが、波形に出力を表示できません(機能を実装せずに、初期化されたゼロの値のみを表示しています)。それを行う他の方法はありますか?
Suhasini、2014

0

テストベンチで信号を宣言したが、出力を表示できない場合は、テストするエンティティをインスタンス化するインスタンス化ステートメントに問題がある可能性があります。エンティティのインスタンス化ステートメントまたはコンポーネントのインスタンス化を使用して、正しくインスタンス化されたかどうかを確認します。テストベンチの信号がテスト対象のエンティティに接続されていることを確認してください。それでも問題が解決しない場合は、テストベンチコードを投稿してください。


トーマスが言ったことは、私の問題に正確に対処します。ラティスのiCEcube2設計ソフトウェアで提供されるActive-HDLでデフォルトがVHDL 1993に設定されているために発生した、前述のエラーを解決しました。シミュレーションを初期化しようとすると、致命的な詳細エラーが発生します。これが発生する理由を見つけようとしています。これが制限付きライセンスの問題ではないことを願っています。
Suhasini、2014

そのメッセージを見せていただけますか?
リック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.