メインコンテンツ

HDL 互換 Simulink モデルの作成

この例では、HDL コード生成用の Simulink® モデルを作成する方法を説明します。HDL コード生成と互換性のある MATLAB® アルゴリズムを作成するには、効率的な HDL コードおよび HLS コードを生成するための MATLAB コードの記述に関するガイドラインを参照してください。

モデルは簡単な加算カウンター アルゴリズムであり、指定した上限に到達するとゼロに戻ります。この手順を実行しないでモデルを直接開くには、簡単なカウンター モデルを参照してください。

[空の DUT] テンプレートの使用

HDL と互換性のある Simulink モデルを作成するには、[空の DUT] テンプレートを使用します。テンプレートは関数 hdlsetup を使用して HDL コード生成用にあらかじめ構成されています。

  1. MATLAB ツールストリップで Simulink ボタンをクリックします。

  2. Simulink のスタート ページで [HDL Coder] セクションに移動し、[空の DUT] テンプレートを選択します。

  3. 書き込み可能な作業フォルダーに hdlcoder_simple_up_counter.slx のファイル名でモデルを保存します。

Simple counter model that has subsystem named HDL_DUT.

[空の DUT] テンプレートには、HDL コードを生成するテスト対象の設計 (DUT) に対応する HDL_DUT サブシステムがあります。DUT の機能を検証するため、テンプレートには HDL_DUT サブシステムの外に、DUT への入力を提供し、出力値をログ記録するテスト ベンチが含まれています。DUT およびテスト ベンチへのモデルの分割を参照してください。

HDL Coder ライブラリからのブロックの選択

カウンター アルゴリズムを設計するには、[HDL Coder] ブロック ライブラリのブロックを使用します。このライブラリに含まれるブロックは、HDL コード生成用に事前設定されています。HDL コード生成をサポートするブロック ライブラリを表示するために Simulink ライブラリ ブラウザーをフィルター処理するには、次のようにします。

  1. [アプリ] タブで、[HDL Coder] を選択します。

  2. [HDL コード] タブから [HDL ブロック プロパティ][HDL ブロック ライブラリを開く] を選択します。

あるいは、コマンド ラインで「hdllib」と入力します。

hdllib

Simulink Library Browser that shows the HDL Coder compatible blocks.

[HDL Coder] ライブラリのブロックは Simulink で使用できます。HDL Coder™ がない場合、モデル内のブロックのシミュレーションを実行できますが、HDL コードは生成できません。

次のブロック ライブラリ内には HDL でサポートされた追加のブロックがあります。

  • DSP System Toolbox HDL Support

  • Communications Toolbox HDL Support

  • Vision HDL Toolbox

  • Wireless HDL Toolbox

ライブラリ ブラウザーを既定のビューに戻すには、ライブラリ ブラウザーで、exit HDL-compatible blocks mode ボタンをクリックします。あるいは、コマンド ラインで次のように入力します。

hdllib('off')

DUT 向けのアルゴリズムの開発

  1. HDL_DUT サブシステムをダブルクリックします。[HDL Coder] ライブラリからモデルにブロックをドラッグします。次の表に、カウンターを設計するためにモデルに追加するブロックを示します。ブロックの動作について確認したり、そのブロックのブロック パラメーターを指定したりするには、ブロックをダブルクリックします。

    ブロックライブラリブロック数ブロック パラメーター
    ConstantSources2
    • 定数値: 1 と 0

    • 出力データ型: uint8

    SwitchSignal Routing21 番目の入力が通過する条件: u2 > しきい値
    DelayDiscrete2遅延の長さ: 1
    SumMath Operations1アキュムレータのデータ型: Inherit:1 番目の入力と同じ
    Relational OperatorLogic and Bit Operations1関係演算子: >
  2. 入力端子 In1In2 の名前をそれぞれ count_thresholdEnable に変更します。ブロックをモデルに配置して、それらを接続します。

    HDL_DUT Subsystem to model simple up counter. The subsystem has two input named, Enable and count_threshold.

Enable 信号は、カウンターが前の値から加算カウントするかどうかを指定します。Enable 信号が logical High である場合、カウンターはゼロから count_threshold 値まで加算カウントします。out の値が count_threshold 値と等しくなると、カウンターはゼロに戻り、再びカウントを開始します。Enable 信号が logical Low になると、カウンターは直前の値を保持します。

設計のためのテスト ベンチの作成

モデルの最上位レベルに移動して、入力設定を変更します。

  • count_threshold への Constant ブロック入力。この入力は、カウンターがカウントする最大値を示します。この例では、4 ビットの加算カウンターを設計する方法を示します。[定数値]15 (2^4 - 1) に設定して、[出力データ型]uint8 に設定します。

    すると、この Constant ブロックの出力データ型は HDL_DUT サブシステム内の Constant ブロックの出力データ型に一致します。

  • Enable への Counter Free-Running ブロック入力。Counter Free-Running ブロックを削除します。このブロックを、1 の値をもち、[出力データ型]boolean に設定されており、1[サンプル時間] をもつ Constant ブロックで置き換えます。

HDL_DUT subsystem with ports connected to inputs and display.

簡単なモデルの作成も参照してください。

前の節では、上記で説明した手順に従って作成した hdlcoder_simple_up_counter.slx モデルを示しています。モデルを MATLAB で開くには [モデルを開く] ボタンをクリックします。

簡単なカウンター モデル

このモデルを開いて、簡単なカウンターを表示します。モデルはゼロからしきい値までカウントし、ゼロに戻ります。しきい値は 15 に設定されています。しきい値を変更するには count_threshold 端子への入力の値を変更します。イネーブル信号は、カウンターが加算カウントするか、あるいは前の値を保持するかを指定します。1 の値は、カウンターが連続して加算カウントすることを示しています。

設計の機能のシミュレーションと検証

モデルの [終了時間]50 に設定します。 ボタンをクリックしてモデルのシミュレーションを行います。シミュレーション結果を確認するには、モデルの最上位レベルで Scope ブロックを開きます。

シミュレーション結果は、定数値 1 を生成している Enable 信号を表示します。out 信号は 0 から 15 までカウントし、ゼロに戻り、再び加算カウントします。

display of Ramp signal with uniform step increments.

Simulink モデルからの HDL コードの生成

HDL コードを生成する前に、モデル設定が HDL コード生成と互換性があることを検証できます。この例で使用したカウンター モデルは HDL コード生成と互換性があります。モデルについて HDL 互換性を検証し更新するには、HDL コード アドバイザーを使用します。HDL コード アドバイザーを使用した Simulink モデルの HDL 互換性のチェックを参照してください。

Simulink モデルからの HDL コードの生成を参照してください。

参考

| | |

トピック