Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

効率的な HDL コードおよび SystemC コードを生成するための MATLAB コードの記述に関するガイドライン

HDL コード生成および SystemC コード生成での MATLAB 設計要件

HDL コードまたは SystemC コードを MATLAB® 設計から生成する場合、アルゴリズムをハードウェア面積と速度の要件を満たすアーキテクチャに変換します。

MATLAB 設計には次の要件があります。

  • 設計内の MATLAB コードが HDL コード生成または SystemC コード生成でサポートされていなければなりません。

  • 入力と出力は行列と構造体のいずれにもならないようにしなければなりません。

コマンド ラインでコードを生成する場合、次のコマンドを使用してコード生成の準備状態を確認します。

coder.screener('design_function_name')
HDL ワークフロー アドバイザーを使用してコードを生成する場合、このチェックは自動的に実行されます。

Fixed-Point Designer™ からの関数のサポートなど、MATLAB 言語サポートのリファレンスについては、HDL コード生成および SystemC コード生成でサポートされている関数を参照してください。

MATLAB コードの記述に関するガイドライン

より効率的な HDL コードを迅速に生成するためには、次のベスト プラクティスを使用して MATLAB コードを設計してください。

  • 入力データと出力データを直列化します。並列データ処理構造の場合、より多くのハードウェア リソースとピン数が必要になります。

  • sine、divide、modulo などの関数を使用するアルゴリズムの代わりに、加算と減算のアルゴリズムを使用します。加算と減算では、使用するハードウェア リソースが少なくなります。

  • 大規模な配列や行列の使用を避けてください。大規模な配列や行列を使用すると、ストレージのために多くのレジスタや多くの RAM が必要になります。

  • コードを浮動小数点から固定小数点に変換します。浮動小数点データ型は、ハードウェアを効率よく実現するデータ型ではありません。HDL Coder™ には、浮動小数点を固定小数点に自動的に変換するワークフローがあります。

  • ループを展開すると、使用する面積が大きくなりますが、速度は向上します。展開するループを少なくしてループ ストリーミングの最適化を有効にすると、使用する面積を抑えられますが、スループットが低下します。

より効率的な SystemC コードを迅速に生成するためには、次のベスト プラクティスに従って MATLAB コードを設計してください。

  • 入力データと出力データを直列化します。並列データ処理構造の場合、より多くのハードウェア リソースとピン数が必要になります。

  • sine、divide、modulo などの関数を使用するアルゴリズムの代わりに、加算と減算のアルゴリズムを使用します。加算と減算では、使用するハードウェア リソースが少なくなります。

  • 大規模な配列や行列の使用を避けてください。大規模な配列や行列を使用すると、ストレージのために多くのレジスタや RAM が必要になります。大規模な配列のメモリを使用する必要がある場合は、それらのメモリを RAM マッピング最適化を使用して RAM にマッピングすることを検討してください。

  • コードを浮動小数点から固定小数点に変換します。浮動小数点データ型は、ハードウェアを効率よく実現するデータ型ではありません。HDL Coder には、浮動小数点を固定小数点に自動的に変換するワークフローがあります。

  • ループを展開すると、使用する面積が大きくなりますが、速度は向上します。

  • 設計をサブ関数に可能な限りモジュール化します。これにより、コードが読みやすくなり、コードの特定の領域に coder.hdl.constrainlatency などの拘束を指定するのが簡単になります。

  • MATLAB では 1 ベースのインデックスが使用されるため、0 ベースのインデックス方式に 1 を追加した配列アクセスを使用します。たとえば、arrayVar(index) の代わりに arrayVar(index+1) を使用します。コード ジェネレーターで余分なインデックス ロジックを挿入する必要がないため、全体の面積が削減されます。

参考

アプリ

オブジェクト

関数

関連するトピック