工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> VHDL

VHDL でポート マップのインスタンス化を使用する方法

モジュールは、VHDL コードの自己完結型ユニットです。モジュールはエンティティを通じて外界と通信します . 港マップ モジュールのインスタンス化の一部であり、モジュールの入力と出力が接続されるローカル信号を宣言します。

このシリーズの以前のチュートリアルでは、すべてのコードをメインの VHDL ファイルに記述しましたが、通常はそうしません。シミュレーター用ではなく、FPGA または ASIC 設計で使用する目的でロジックを作成します。

シミュレータで実行するために作成された VHDL モジュールには、通常、入力信号も出力信号もありません。それは完全に自己完結型です。だからこそ、私たちのデザインの実体は空でした。 entity の間には何もありませんでした タグと end entity; タグ。

このブログ投稿は、基本的な VHDL チュートリアル シリーズの一部です。

入力信号または出力信号のないモジュールは、実際の設計では使用できません。その唯一の目的は、シミュレーターで VHDL コードを実行できるようにすることです。したがって、テストベンチと呼ばれます。 .入力信号と出力信号でモジュールをシミュレートするには、インスタンス化する必要があります テストベンチで。

多くの場合、モジュールとテストベンチはペアで提供され、別のファイルに保存されます。一般的な命名スキームは、テストベンチをモジュール名に「Tb」を追加して呼び出し、アーキテクチャを「sim」と命名することです。モジュールが「MyModule」と呼ばれる場合、テストベンチは「MyModuleTb」と呼ばれます。その結果、ファイル名は「MyModuleTb.vhd」および「MyModule.vhd」になります。

テストベンチ コードを使用して、モジュールがシミュレーション環境で正しく動作していることを確認できます。テスト対象のモジュールは、一般的に テスト対象のデバイス と呼ばれます。 (DUT).

モジュールは、他のモジュール内でインスタンス化することもできます。コードをモジュールに分割すると、複数回インスタンス化できます。同じ設計内でモジュールの複数のインスタンスを作成でき、多くの設計で再利用できます。

VHDL のポートを持つエンティティの構文は次のとおりです。
entity <entity_name> is
port(
    <entity_signal_name> : in|out|inout <signal_type>;
    ...
);
end entity;

このようなモジュールを別の VHDL ファイルでインスタンス化するための構文は次のとおりです。
<label> : entity <library_name>.<entity_name>(<architecture_name>) port map(
    <entity_signal_name> => <local_signal_name>,
    ...
);

<label> 任意の名前にすることができ、ModelSim の階層ウィンドウに表示されます。 <library_name> モジュールは、VHDL コードではなく、シミュレーターで設定されます。デフォルトでは、すべてのモジュールは work にコンパイルされます 図書館。 <entity_name> そして <architecture_name> インスタンスを作成しているモジュールと一致する必要があります。最後に、各エンティティ シグナルをローカル シグナル名にマッピングする必要があります。

VHDL でモジュールをインスタンス化する方法は他にもありますが、これは明示的なインスタンス化の基本的な構文です。

エクササイズ

このビデオ チュートリアルでは、VHDL でモジュールを作成してインスタンス化する方法を学習します。

MUX テストベンチの最終的なコード :

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

entity T15_PortMapTb is
end entity;

architecture sim of T15_PortMapTb is

    signal Sig1 : unsigned(7 downto 0) := x"AA";
    signal Sig2 : unsigned(7 downto 0) := x"BB";
    signal Sig3 : unsigned(7 downto 0) := x"CC";
    signal Sig4 : unsigned(7 downto 0) := x"DD";

    signal Sel : unsigned(1 downto 0) := (others => '0');

    signal Output : unsigned(7 downto 0);

begin

    -- An instance of T15_Mux with architecture rtl
    i_Mux1 : entity work.T15_Mux(rtl) port map(
        Sel    => Sel,
        Sig1   => Sig1,
        Sig2   => Sig2,
        Sig3   => Sig3,
        Sig4   => Sig4,
        Output => Output);

    -- Testbench process
    process is
    begin
        wait for 10 ns;
        Sel <= Sel + 1;
        wait for 10 ns;
        Sel <= Sel + 1;
        wait for 10 ns;
        Sel <= Sel + 1;
        wait for 10 ns;
        Sel <= Sel + 1;
        wait for 10 ns;
        Sel <= "UU";
        wait;
    end process;

end architecture;

MUX モジュールの最終的なコード :

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

entity T15_Mux is
port(
    -- Inputs
    Sig1 : in unsigned(7 downto 0);
    Sig2 : in unsigned(7 downto 0);
    Sig3 : in unsigned(7 downto 0);
    Sig4 : in unsigned(7 downto 0);

    Sel  : in unsigned(1 downto 0);

    -- Outputs
    Output : out unsigned(7 downto 0));
end entity;

architecture rtl of T15_Mux is
begin

    process(Sel, Sig1, Sig2, Sig3, Sig4) is
    begin

        case Sel is
            when "00" =>
                Output <= Sig1;
            when "01" =>
                Output <= Sig2;
            when "10" =>
                Output <= Sig3;
            when "11" =>
                Output <= Sig4;
            when others => -- 'U', 'X', '-', etc.
                Output <= (others => 'X');
        end case;

    end process;

end architecture;

[実行] を押してタイムラインを拡大した後の ModelSim の波形ウィンドウ:

分析

波形からわかるように、マルチプレクサ (MUX) モジュールは期待どおりに動作します。波形は、モジュールを使用せずに作成した前のチュートリアルのものと同じです。

これで、デザイン モジュールとテストベンチが明確に分離されました。 MUX を含むモジュールは設計で使用するものであり、テストベンチの唯一の目的はシミュレータで実行できるようにすることです。テストベンチに wait を使用するプロセスがあります シミュレーションで人為的な時間遅延を作成するためのステートメント。設計モジュールには時間の概念がなく、外部刺激にのみ反応します。

テストベンチのアーキテクチャに sim という名前を付けました 、シミュレーション用。デザイン モジュールのアーキテクチャは rtl と名付けられました 、レジスタ転送レベルを表します。これらは単なる命名規則です。このような名前のファイルを見ると、それがテストベンチなのか設計モジュールなのかすぐにわかります。会社によって命名規則が異なる場合があります。

テイクアウト

次のチュートリアルに進む »


VHDL

  1. モリブデンはどのように使用しますか?
  2. VHDL で文字列のリストを作成する方法
  3. VHDL コード ロック モジュール用の Tcl 駆動型テストベンチを作成する方法
  4. VHDL テストベンチでシミュレーションを停止する方法
  5. VHDL で PWM コントローラーを作成する方法
  6. VHDL で乱数を生成する方法
  7. VHDL のプロセスでプロシージャを使用する方法
  8. VHDL で不純な関数を使用する方法
  9. VHDL で関数を使用する方法
  10. VHDL で有限ステート マシンを作成する方法
  11. カッターグラインダーの使い方