Main Content

HDL Coder での Altera DSP Builder Advanced Blockset の使用

この例では、HDL Coder™ での Altera® DSP Builder Advanced Blockset の使用方法を示します。

はじめに

Altera® DSP Builder Advanced Blockset Subsystem ブロック (DSPBA Subsystem ブロック) を使用すると、Simulink® と Altera® の両方のブロックを使用した設計をモデル化し、統合された HDL コードを自動的に生成できます。HDL Coder™ で、Simulink® ブロックから HDL コードが生成され、さらに Altera® DSP Builder を使用して DSPBA Subsystem ブロックから HDL コードが生成されます。

この例の設計 (コード生成サブシステム) には、Simulink® ネイティブ ブロックで構成される部分と Altera® DSP Builder Advanced ブロックで構成される部分の 2 つの部分があります。Altera® ブロックは DSPBA Subsystem (hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem) にまとめられています。これらの Altera® FPGA のブロックは、Altera® DSP Builder で最適化されます。設計の残りの部分については、Simulink® ブロックと HDL Coder™ で提供されるモデルベース デザインの各種機能 (分散型パイプラインや遅延の均衡化など) により、モデルレベルの最適化が実行されます。

open_system('hdlcoder_sldspba');
open_system('hdlcoder_sldspba/SLandDSPBA');

Altera® DSP Builder Advanced Blockset のセットアップ

Altera® DSP Builder Advanced Blockset Subsystem ブロックを使用するには、Altera® Quartus II を Simulink® でセットアップしなければなりません。バージョンの互換性については、HDL の言語サポートおよびサポートされるサードパーティ製ツールとハードウェアを参照してください。

Altera® DSP Builder Advanced Blockset Subsystem の作成

DSPBA Subsystem を作成するには次のようにします。

  1. Altera® ブロックを 1 つのサブシステムにまとめ、そのアーキテクチャを "Module" (既定値) に設定します。

  2. サブシステムの最上位に Device ブロックを配置します。DSPBA Subsystem 内にサブシステムの階層構造を含めることができますが、階層構造の最上位に Device ブロックが存在しなければなりません。

open_system('hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem');

Simulink® コンポーネント

この例では、Stateflow チャートで DSPBA Subsystem を駆動するためのチャネルと Valid 信号を生成します。

open_system('hdlcoder_sldspba/SLandDSPBA/Simulink Subsystem');

HDL コードの生成

HDL コードは、コマンド ラインで makehdl を使用するか HDL ワークフロー アドバイザーを使用して生成できます。makehdl を使用する場合は次のようにします。

makehdl('hdlcoder_sldspba/SLandDSPBA');

他のモデルと同じように、テストベンチを生成して設計のシミュレーションや合成も可能です。

Valid 信号がアサートされない場合のシミュレーションの不一致の処理

DSPBA Subsystem のシミュレーションは、hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem/ChannelIn と hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem/ChannelOut の両方で折りたたみオプションがオンになっている場合など、Valid 信号がアサートされない特定の状況において、生成されるコードの動作と一致しないことがあります。不一致は下流の Simulink 設計に影響し、テスト ベンチ シミュレーションの失敗の原因となります。

不一致を調べるには、ChannelIn ブロックと ChannelOut ブロックで折りたたみ設定をオンにします。

set_param('hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem/ChannelIn', 'FoldingEnabled', 1);
set_param('hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem/ChannelOut', 'FoldingEnabled', 1);

その後、HDL コードとテスト ベンチを再度生成します。

makehdl('hdlcoder_sldspba/SLandDSPBA');
makehdltb('hdlcoder_sldspba/SLandDSPBA');

生成されたコードとテスト ベンチでシミュレーションを実行すると、Valid 信号がアサートされている場合にのみ HDL Coder からの出力が参照データと一致していることがわかります。

テスト ベンチからのメッセージに示されているように、不一致が予想されます。

このシミュレーションの不一致を回避するには、DSPBA Subsystem の出力信号がユーザー設計の Simulink の部分または設計全体の出力端子に到達する前に Enabled Subsystem を挿入します。次のサブシステムは、信号を Enabled Subsystem に接続する方法を示しています。

open_system('hdlcoder_sldspba/SLandDSPBA2');