« Prev | Next » Riviera-PROによるSimulink®インターフェース はじめに Riviera-PROにビルト・インされたSimulinkインターフェースは、FPGAやASIC設計のために、MathWorksのシミュレーション・ツールとAldecのHDLベースのシミュレーション環境のインテグレーションを提供します。インターフェースは、設計者が数式で記述されたファンクション・ブロックとVHDLエンティティ、Verilogモジュール、EDIFセル、さらにSystemCモジュールも協調シミュレーションすることができ、Simulink環境内においての検証を実行する際にブラックボックスとして使用されます。 インターフェースの仕様 ソフトウェア要求 MATLAB® 2011bまたはそれよりも新しい Riviera-PRO2012.02またはそれよりも新しい HDLブロックのポート・タイプ 通常のHDLブラックボックス: DOUBLE, SINGLE, Int8, uInt8, Int16, uInt16, Int32, uInt32, Fix and uFix up to 128 bits 変換オプション 入力ポートのキャスト: Signed (2's comp), Unsigned, Boolean 出力ポートのキャスト: Signed (2's comp), Unsigned, Boolean, Int8, uInt8, Int16, uInt16, Int32, uInt32, Fix, uFix ベクタ幅: 1~256の整数値、ジェネリックの使用が可能 小数点の位置(小数部): 無制限 量子化(HDLブラックボックスの入力のみ): 切り捨て、丸め オーバーフロー(HDLブラックボックスの入力のみ): 飽和、不飽和、エラー Simulinkインターフェースのセットアップ ステップ1 Riviera-PROセットアップ・プログラムの実行 Simulinkとの協調シミュレーション・インターフェースを設定するため以下の手順を実行します: MATALBを起動します。 MATLABウィンドウで現在のフォルダを$ALDEC\interfaces\matlabディレクトリに変更します。 MATLABコマンドウィンドウでsetupコマンドを入力しEnterキーを押します。MATLABにインストールされた以前のバージョンのRiviera-PROブロックセットを誤って削除しないために、警告のダイアログ・ボックスが表示されます。 Yesを押すとセットアップが実行され、次のメッセージがコマンドウィンドウに表示されます。 図1 セットアップの実行 セットアップが完了するとすぐに、Riviera-PROのブロックセットを使用することができます。Simulinkライブラリブラウザーまたはヘルプウィンドウが既に開いている場合には、変更を有効にするためMATLABを再起動する必要があります。 コマンドウィンドウでsimulinkと入力するかSimulinkツールバー・ボタンをクリックしてSimulinkライブラリブラウザーを表示すると、左側の部分にRiviera-PROのブロックセットが表示されます。 図2 Simulinkライブラリブラウザー 注意: プラットフォーム固有の問題のためにセットアップ実行中に問題が発生した場合は、インターフェースをマニュアルで設定する必要があります。詳細な手順については、Riviera-PRO User's Guideを参照してください。 ステップ2(オプション): 既存のダイアグラムのアップデート Riviera-PROブロックセットの新しいバージョンをインストールした後、以前のバージョンのRiviera-PROブロックセットを使用したブロックはアップデートする必要があります。アップデートのプロセスを自動化するためにriv_UpdateModel関数が提供されています。コマンドの引数無しで現在開いているモデルをアップデートするか、riv_UpdateModel('model_name')のようにコマンドを使用して特定のモデルをアップデートします。 ステップ3(オプション): Riviera-PROブロックセットに関する情報の所得 Simulinkインターフェースのブロック記述ファイルの生成 HDLユニットを協調シミュレーションする前に、そのユニットのインターフェース記述ファイル(Mファイル)を生成する必要があります。VHDLエンティティ/アーキテクチャ、Verilogモジュール、EDIFセルのインターフェース記述ファイルは、Riviera-PROのGUIまたはコマンドラインを使用して生成することができます。 Riviera-PROでMファイルを生成する ワークスペースを開いて、協調シミュレーションするユニットが含まれるアクティブなデザインを設定します。注意:ワークスペースとデザインの使用は必須ではありませんが、便利なデザイン管理機能を提供するので強く推奨します。 Simulinkでブラックボックスとして使用されるデザインユニットを記述し、ソースファイルをコンパイルします。 Library Managerでライブラリ・ユニットを選択し、右クリックメニューからGenerate Block for Simulinkを選択します。 図3 Library Manager Generate Block for Simulinkのダイアログ・ボックスが表示され、生成するブロック記述ファイルの場所を確認し、保存をクリックしてウィンドウを閉じます。 図4 Generating Block for Simulink 別の方法として、Consoleウィンドウでsimulinkgenmodコマンドを使用して、コマンドラインからMファイルを生成することもできます。 simulinkgenmod -overwrite -o $dsn/../Simulink/top_fft.m top_fft 注意: Simulinkのダイアグラム上で複数のHDLエンティティをシミュレーションする場合は、各ブロックの記述を生成する必要があります(各エンティティ/アーキテクチャのペアごとに.mファイルを作成)。Simulinkとの協調シミュレーションを行う際には、MATLAB Simulinkでシミュレーションする全てのHDLコンポーネントの出力ディレクトリが同じパスになっていることを確認ください。 SimulinkダイアグラムでRiviera-PROブロックセットを使用する Simulinkで協調シミュレーションを実行する前に、SimulinkモデルのウィンドウでRiviera-PROツール・ボックスが利用できるようにブロックをインスタンスする必要があります。また、それらのパラメータを変更することもできます。 MATLABを起動し、現在のフォルダーをRiviera-PROで作成したブラックボックスのライブラリを格納したsimulink/ディレクトリ(Generate Block for Simulinkダイアログ・ボックスで指定)に設定します。 MATLABのメイン・ツールバーからSimulinkアイコンをクリックするか、MATLABのコマンドウィンドウでsimulinkとタイプしてSimulinkライブラリブラウザーのウィンドウを開きます。 Simulinkライブラリブラウザーの左側の部分にRiviera-PROブロックセットが表示されます。ブロックセットの内容が右側の部分に表示されます。このバージョンのブロックセットには以下のブロックが含まれます: Riviera-PRO Co-Sim HDL Black-Box HDL Black-Box Manager for System Generator 8.x HDL Black-Box for Synplify DSP 現在のモデルに追加するコマンドまたはドラック&ドロップを使用してRiviera-PRO Co-Simブロックをモデル・ウィンドウに追加します。 図5 Simulinkライブラリブラウザー: モデルの追加 HDL Black-Boxを選択し、同じSimulinkモデル・ウィンドウに追加します。Simulinkライブラリブラウザーのウィンドウからモデル・ウィンドウにブロック・テンプレートをドラッグ&ドロップすると、Select HDL Black-Box Comfigurationダイアログ・ボックスが表示されます。そこで、ブラックボックスのコンフィギュレーション・ファイルを選択し、機能と関連付ける生成したHDLモデル(.mファイルのブロック記述)を指定します。 HDL Black-Box Parameterウィンドウを使用して、波形表示、ステミュラスやブレイクポイント等のRiviera-PROの機能をコントロールすることができます。 Riviera-PROとSimulink間のタイミング依存関係の設定 協調シミュレーションにおける2つのシミュレータ間の最も重要な問題の1つは、2つのシミュレーション実行のタイム・ドメインを同期させることです。以下の状況を協調シミュレーションの設定を成功させるために適切に考慮する必要があります: ・シミュレータ間のタイム・ドメインの関係 ・Simulinkモデルでインスタンスされる全てのHDL Black-Boxのポート間のサンプリング・ピリオドの関係 ・HDL Black-Boxのクロック・ポートの設定 Riviera-PROツール・ボックスはフレキシブルにシミュレータの同期を処理するのに必要な全ての機能を提供し、両方のシミュレータでHDLブラックボックスのポートのタイム・パラメータを設定します。これらのタイミングに関連する依存関係は、Riviera-PRO Co-SimブロックまたはHDL Black-Box Parametersダイアログボックスのどちらかで設定されます。以下の重要なタイミングに関連する依存関係を設定することができます: ・シミュレータ間のタイム・ドメインの関係を設定する ・基準の周期を選択する ・HDL Black-Boxポートのサンプリング周期を設定する ・HDL Black-Boxのクロック・ポート設定 ・追加の同期信号を使用 Riviera-PROダイアログ・ボックス Riviera-PRO Co-Simブロック をダブルクリックして、Riviera-PRO Co-Simダイアログ・ボックスを開きます。ここでは一般的な協調シミュレーションの設定だけでなく、サンプリング周期やRiviera-PROとSimulink間のタイム・ドメインの関係を設定することができます。 新しい設定を行ったら、OKボタンをクリックして変更を有効にします。このダイアログ・ボックスにはイニシャライズ前やイニシャライズ後に必要な様々な設定が用意されています。協調シミュレーションのパラメータを設定するために、以下のようなRiviera-PRO Co-Simダイアログ・ボックスのタブを使用することができます: General タブ: Parameter Reference Period Riviera-PROとSimulinkタイム・ドメイン間の関係を定義し、全てのHDLブラックボックスの基本サンプリングレートを設定します。以下の図ではHDL Simulatorに176kHzの周波数が与えられているので、サンプリング周期には入力された値の逆数が計算されます。 Enable Debug Mode デバッグモードに設定し、協調シミュレーションを特別な診断モードで実行することができます。このモードでは、イニシャライズが行われた後にシミュレーションが一時停止して、ブレイクポイントの設定、観測する信号の選択、Riviera-PROでのHDLソースコードのトレースが可能となります。 Start simulation in console mode コンソール・モードでのシミュレーションの実行。 Metavalue HDLのメタ値(U, X, Z, W)が出力される際に変換の動作を設定 注意: 周波数単位を使用して周期を設定する際に丸めエラーに注意してください。生じた周期の小数部分は3桁に丸められます。時間を設定する全てのパラメータは基準時間(Reference Period)に関係した整数で定義されます。 図6.1 Riviera-PRO Co-Sim ダイアログ・ボックス(Generalタブ) Advanced tab: 協調シミュレーションの結果を表示する波形ファイル名を設定します。それはSimulinkデザインの一部であるHDL部分のテストベクタとして保存することができ、後でSimulinkを使用せずにスタンドアロンでのシミュレーションで駆動と応答の両方のファイルとして使用できます。 Script Commands tab: (図6.2を参照)イニシャライズの前後およびシミュレーション完了後のコマンドを設定できます。また、asimコマンドに異なる引数(スイッチ)を設定できます。以下の図ではIEEEのワーニングを抑制し、アドバンスド・データフローを有効にするasimスイッチを示しています。コードの異なるカバレッジを有効にするようなイニシャライズ後のコマンドを設定することもできます。シミュレーション完了後のコマンドには、現在のビューのウィンドウに合わせるような、様々な波形表示に関するコマンドを設定できます。 図6.2 Riviera-PRO Co-Sim ダイアログ・ボックス(Script commandsタブ) HDL Project Settings タブ: 協調シミュレーションのためのHDLワークスペース・ファイルを設定できます。シミュレータのパスも設定可能です。 Macro file タブ: Use macro 協調シミュレーションを実行する前に、Riviera-PROで実行するマクロ・ファイルを指定できます。ここではデバッグやインクリメンタルなオプション(スイッチ)のように、デザインのコンパイルに必要な異なるコンパイル・オプションを設定することができます。 Use macro typed below Riviera-PROのコンパイル中に実行されるコマンドを下部にあるテキスト・ボックスに設定することができます。 HDL Black-Box Parametersの設定 設定の編集を行うブラックボックス(VHDLモデル)のシンボルをダブルクリックします。HDL Black-Box Parameters ダイアログ・ボックスが表示されます。ダイアログ・ボックスには、以下のカテゴリに分類されるブロック固有のオプション(ブロック・タイプに依存)があります: Input および Output Ports: 協調シミュレーションの際にシミュレーションまたは観測される全てのオブジェクトがリストされます。 Mode: データの転送方向や特別な信号のモードを示しています。Stimulatorsタブで信号が追加されると、Stimモードが表示されます。Clockタブで信号が追加されると、ClockおよびSyncが表示されます。 Period: この列は重要です。入力および出力が更新されるレートを設定します。図7.1のようにサンプリング周期が1に設定されると、SimulinkとHDLブロック間のデータが基準時間(Riviera-PRO Co-Simブロックで176kHz)と等しい時間間隔で交換されることを意味しています。例えば、周期が2に設定されている場合は、更新の割合は基準時間を2で割った値(88kHz)となります。 Point: ベクタの小数点の位置を指定できます。HDLブラックボックスでは、浮動および固定小数点の入力データ型を受けられるように、2つのオプションが提供されています: Point (Float) - Simulinkのdouble数を2の補数表現でバイナリに変換する。2の乗数で位置を指定。 Point (Fix) - 固定小数点の入力から小数点の位置を継承(範囲(Rand)または精度(Accuracy)を維持)するか、個別に設定します(As For Float: Point(Float)列で設定した小数点の位置に設定)。 Parameters: ブラックボックスのインターフェースで定義されているgeneric/parameterポートが表示されます。必要に応じて、generic/parameterの実際の値を変更することができます。詳細はParametersを参照してください。 図7.1 HDL Black-Box Parameters(Input Portsタブ) Clocks: (図7.2を参照)モデルを同期させるクロックやクロック・イネーブルまたは他の同期信号のような明確な仕様を与えます。エンテイティが異なる動作周波数の場合は、サンプリング周期を2つの方法で行うことができます:全てのHDLブラックボックスに1つのクロック周波数を使用して有効なブロックに同期信号を追加する、または直接複数のクロック周波数を使用する。クロック周期は基準時間の積で、'Period'欄に指定した整数値で与えられます。オプションの同期信号でイネーブル('ce')信号を使用があり、他のHDLブラックボックスよりも遅く活性化するようなHDLブラックボックスが使用できます。 クロック信号として選択されたclkポートの設定: Period: 2 - クロック周期は11.36us(88kHzに相当、指定した整数で基準時間を割った値) Sync信号として選択されたceポートの設定: Reference Clock: clk - 参照されるクロック Clk per Sync: 4 - ceポートが4クロック周期ごとにアクティブとなる、ブロックがアクティブになる周期は45.45usとなる(22kHzに相当) 図7.2 HDL Black-Box Parameters(Clocksタブ) Stimulators: ユーザ定義の数式(HDLシミュレータの'force'コマンドと互換性のある形式)を入力することができます。Clocksタブで選択していない入力に対してステミュラスを定義します。 Port Settings: 各ポートに対してWave欄をクリックして波形に表示したいポートを選択し、信号特性(例:基数や表記)を変更できます。また、'Break'欄でブレイクポイントも設定できます。 HDL Black-Box Parametersの設定を行ったらOKをクリックします。 注意: 次のステップに進む前に、別のコンポーネント(biquad_iir)のHDL Black-Box Parametersを変更するために同様な手順を実行する必要があります。 協調シミュレーションの実行 図9に示すように、設計要求に従って異なるHDLブラックボックスを他のSimulinkコンポーネントに接続することによりSimulinkダイアグラムを完成させることができます。 協調シミュレーションに対するRiviera-PROの準備 協調シミュレーションを行うには、Riviera-PROをHDLシミュレーション・サーバーとして設定し、シミュレーションをシミュレーション・サーバー・モードに切り替える必要があります。デフォルトではRiviera-PROはシミュレーション・サーバーとしては動作していません。Riviera-PROをシミュレーション・サーバーに設定するには2つの方法があります: ・起動している1つのRiviera-PROをシミュレーション・サーバー・モードに切り替えて、全ての協調シミュレーションのセッションで使用する。 ・Riviera-PROの新しい起動が自動的に最初のシミュレーション時に開始され、その後のセッションで再利用される。 Riviera-PROの起動が既に実行されている場合は、コンソール・ウィンドウで以下のコマンドを実行することでサーバーモードに切り替えることができます: rc.open -xml -socket <port_number> これで、Riviera-PROはSimulinkから発行されるコマンドの応答を開始します。つまり、Simulinkのシミュレーション・サーバーとして機能します。 協調シミュレーションの開始 モデルのシミュレーションを開始するには、Simulinkモデルのウィンドウのシミュレーション・メニューから実行を選択するか、実行ボタンをクリックします。Simulink環境の協調シミュレーションが初期化されると、新しいデザイン(band_pass_filter_cosim)が作成されワークスペース(matlab_cosim)に追加されます。Riviera-PROは新しいワークスペースをロードし、以前のブロック記述ファイル(*.m)の生成で使用したデザインが含まれます。自動的に生成されたmatlab_cosimワークスペースを図8に示します。 図8 band_pass_filter_cosimデザインを含む自動的に生成されたmatlab_cosimワークスペース 図9に示すように$wsp/band_pass_filter_cosimデザインは、SimulinkモデルにインスタンスしたHDLブラックボックスの協調シミュレーションに必要な全てのHDLコンポーネント/モジュールがバインドされ、自動的に生成したラッパーが含まれています。図9にある赤の四角はRiviera-PROで生成されたVHDLモジュール(Simulinkのブラックボックス)で、青の四角はインターフェースに関する全てのパラメータの詳細を取り扱うインターフェース・モジュールです。他のモジュールはSimulinkのネイティブ・モジュールです。 図9 モデル・ウィンドウの例 ワークスペースが生成され、協調シミュレーションがイニシャライズする際に、デザインはコンパイルされ、次にHDLシミュレーション・セッションが開始されます。全体のプロセスが実行され、協調シミュレーション・インターフェースを通して、SimulinkからRiviera-PROにコマンドが渡されます。コマンドの実行はコンソール・ウィンドウで確認することができます: #workspace.design.create {band_pass_filter_cosim} {C:\Aldec\Riviera-PRO\examples\tools\simulink\simulink_band_pass_filter\simulink\mlab_cosim} # workspace.design.setactive {band_pass_filter_cosim} ... ... # asim ... # ELBREAD: Elaboration process. # KERNEL: Main thread initiated. ... # ELAB2: Elaboration final pass... # ELAB2: Create instances ... # KERNEL: PLI/VHPI kernel's engine initialization done. # PLI: Loading library 'C:\Aldec\Riviera-PRO\bin\systf.dll' # VHPI: Loading library 'C:\Aldec\Riviera-PRO\interfaces\simulink\riv_simulink_pipe.dll' # VHPI: Interprocess communication system loaded. # ELAB2: Create instances complete. ... # KERNEL: Kernel process initialization done. 注意: 各協調シミュレーションのユニットに対し、1つのRiviera-PRO Co-SimブロックをSimulinkモデル・ウィンドウに追加する必要があります。 ブロック定義ファイルの名前はSimulink関数と同じ名前にすることはできません。関数の完全なリストについてはSimulinkドキュメンテーションの"Functions - By Category"を参照ください。 シミュレーションの結果 シミュレーションが終了したら、Riviera-PROの波形ウィンドウに異なる波形が取り込まれます。 信号を表示している波形をアナログ表示に変更したり、これらの波形をSimulinkで生成した波形と比較して結果を分析することができます。 特定の信号をアナログ表示の波形表示に変更するには以下の2つの方法があります: 波形で信号を選択し、右クリックからPropertiesを選択し、DisplayタブでAnalogを選択します。 waveコマンドをSimulinkにあるRiviera-PRO So-SimブロックのPost-Simulation commandsテキストボックスに記述する。このトレーニング・チュートリアル(図7.2)の‘Riviera-PRO Co-Sim Block’セクションを参照ください。 wave -height 200 -analog -analog-interpolated {/Hierarchy path/\yout} 以下のような結果を観測することができます。両方の図で赤くハイライトしている波形は同じ'yout'信号です。 図10 Riviera-PROの波形 図11 MATLABの波形 Previous article Next article