効率的な HDL コードおよび HLS コードを生成するための MATLAB コードの記述に関するガイドライン
HDL コード生成および HLS コード生成での MATLAB 設計要件
HDL コードまたは高位合成 (HLS) コードを MATLAB® 設計から生成する場合、アルゴリズムをハードウェア面積と速度の要件を満たすアーキテクチャに変換します。
MATLAB 設計には次の要件があります。
設計内の MATLAB コードが HDL コード生成または HLS コード生成でサポートされていなければなりません。
入力と出力は行列と構造体のいずれにもならないようにしなければなりません。
コマンド ラインでコードを生成する場合、次のコマンドを使用してコード生成の準備状態を確認します。
coder.screener('design_function_name')
Fixed-Point Designer™ からの関数のサポートなど、MATLAB 言語サポートのリファレンスについては、HDL コード生成および HLS コード生成でサポートされている関数を参照してください。
MATLAB コードの記述に関するガイドライン
より効率的で高速な HDL および HLS コードを生成するには、次のベスト プラクティスを使用して MATLAB コードを設計してください。
入力データと出力データを直列化します。並列データ処理構造の場合、より多くのハードウェア リソースとピン数が必要になります。
sine、divide、modulo などの関数を使用するアルゴリズムの代わりに、加算と減算のアルゴリズムを使用します。加算と減算では、使用するハードウェア リソースが少なくなります。
大規模な配列や行列の使用を避けてください。大規模な配列や行列を使用すると、ストレージのために多くのレジスタや多くの RAM が必要になります。大規模な配列のメモリを使用する必要がある場合は、それらのメモリを RAM マッピング最適化を使用して RAM にマッピングすることを検討してください。
コードを浮動小数点から固定小数点に変換します。浮動小数点データ型は、ハードウェアを効率よく実現するデータ型ではありません。HDL Coder™ には、浮動小数点を固定小数点に自動的に変換するワークフローがあります。
ループを展開すると、使用する面積が大きくなりますが、速度は向上します。HDL コード生成の場合、展開するループを少なくしてループ ストリーミングの最適化を有効にすると、使用する面積を抑えられますが、スループットが低下します。
変数を表すために使用されるビット数、つまり MATLAB コード内のオペランドのビット幅を減らして生成コードを最適化します。
ハードウェアとの親和性が高い丸めとオーバーフローの手法を使用します。これは、MATLAB コードで関数
hdlfimath
を使用して実現できます。function out = add(a,b) out = fi(a+b,1,12,4,hdlfimath); end
効率的な HLS コード生成のための追加のガイドラインを次に示します。
設計をサブ関数に可能な限りモジュール化します。これにより、コードが読みやすくなり、コードの特定の領域に
coder.hdl.constrainlatency
などの拘束を指定するのが簡単になります。MATLAB では 1 ベースのインデックスが使用されるため、0 ベースのインデックス方式に 1 を追加した配列アクセスを使用します。たとえば、
arrayVar(index)
の代わりにarrayVar(index+1)
を使用します。コード ジェネレーターで余分なインデックス ロジックを挿入する必要がないため、全体の面積が削減されます。