2017-07-05 16 views
1

私は、テストベンチ階層で信号を強制的に強制的に強制したいと思っています。ここで私がテストベンチでこれをやってきた方法を示す簡単な例があります。これはdouble_inverterインスタンスではModelSim 10.4bすなわち信号bで動作VHDL-2008は外部名を継続的に強制します

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

entity double_inverter is 
port(
    a : in std_logic; 
    z : out std_logic 
); 
end double_inverter; 

architecture x of double_inverter is 
signal b : std_logic; 
begin 

    b <= not a; 
    z <= not b; 

end architecture x; 


library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

entity inverter_tb is 
end inverter_tb; 

architecture y of inverter_tb is 
    signal z : std_logic; 
    signal clk : std_logic := '0'; 
begin 

    clk <= not clk after 5 ns; 

    dut : entity work.double_inverter 
    port map(
    a => '0', 
    z => z 
); 

    continuous_stim : process(clk) 
    begin 

    << signal dut.b : std_logic >> <= force clk; 

    end process; 

end architecture y; 

は、CLKによって設定されていない信号が、外部名信号を制御するためのより良い方法があるでしょうか?

ありがとうございました。あなたが使用できるいくつかの状況では

+0

* ...より良い方法がありますか?*どのように改善されましたか? VHDLドライバの強制および外部名は、VHPI/VPI/PLI/DLIに応じてコンソールコマンドまたはスクリプトを実行することによって、シミュレータで使用されるメカニズムを明らかにします。理論的には、VHPなどを使用した「他の言語ソリューション」の成長する面でシミュレータプラットフォームスクリプトではなく、テストベンチに応じて検証構造体の移植性を向上させます。VHDLテストベンチプログラムを書くか、他の検証ソリューションを使用しますか?単純な例では選択肢が動かないかもしれないが、あなたは意見を求めている。 – user1155120

+0

VHDL-2008でこれを行うより良い方法はありますか?時には、私はテストベンチ階層の信号を、この例の "clk"のような別の信号に強制することができるようにしたいという状況があります。 VHDL-2008では、外部の名前を使用して階層構造の詳細を確認することができます。テストベンチでこれらの外部名を他の信号で駆動する方法を知りたかったのですが、LRMとWeb上の唯一の例は、明示的な信号ではなく、外部名が '1'または '0'によって駆動されることを示していました。私はちょうど何かを試して、それは動作しますが、それを行うのは良い、または許容可能な方法ですか?ありがとう。 –

+0

式としてのプライマリ(ここでは名前付きオブジェクト)は、代入の値を提供できます。例はすべてを網羅しているわけではありません。シグナルについては、IEEE Std 1076-2008 10.5.2.2単純な代入文の実行、9.式、9.1一般(第1項および第3項のEBNF)を参照してください。 – user1155120

答えて

3

は、外部名の別名である:

alias dut_b is <<signal dut.b : std_logic >> ; 

我々はアーキテクチャの中で宣言された信号と思うので、私たちの本能はアーキテクチャにエイリアスを置くことです。しかし、このような状況では、DUTは未だに詳述されていないため、許可されていない。

あなたはプロセスにそれを置くことが許されるかもしれません - 私は言語がこれを可能にするかどうかを調べるためにいくつかの調査をしなければならないでしょう。私の懸念は、プロセスはシグナル宣言を許可しないということです。プロセス内のシグナルに別名を付けることはできないと確信しています。

一般的に、私はこのようなものを使用しているときに、テストケースを作成し、テストベンチによってインスタンス化されたコンポーネントのアーキテクチャ宣言領域に置きます。精緻化問題の問題を避けるために、まずテストベンチでDUTをインスタンス化し、通常はテストケースを最後に生成するコンポーネント(途中でトランザクションベースのモデルを使用)を作成します.HDDLは、インスタンス化された順番でデザインを精緻化します。

+0

あなたの答えをありがとう、ジム。エイリアスをプロセス領域に配置するようにあなたの提案を試してみました。また、気になる人のために、Modelsimは実際に、トップテストベンチ・アーキテクチャの宣言的な領域に外部名にエイリアスを置くことを許可しますが、dutオブジェクトがまだ精巧化されていないという警告を送信します。しかし、おそらく最もきれいなことではないでしょう... –

+0

IEEE Std 1076-2008を参照してください。8.名前、8.1一般的なパラグラフ6と7、外部名はローカルには静的ではありません。外部名は、エイリアス宣言(14.4.2.6エイリアス宣言および6.6.2オブジェクトエイリアス、14.2設計階層のエラボレーション、15章参照)の精緻化中に評価することができる。8.7外部名称パラ3 b)および5項を参照。備考、14.4.1)。 Modelsimは、新しい機能を提唱しているが、現在のところ標準的な改訂プロセスに参加していないが、非移植性について歴史的に警告している。 – user1155120

関連する問題