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 を作成するには次のようにします。
Altera® ブロックを 1 つのサブシステムにまとめ、そのアーキテクチャを "Module" (既定値) に設定します。
サブシステムの最上位に 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');