Main Content

サポートされている MATLAB データ型、演算子、制御フロー ステートメント

MATLAB® アルゴリズムから HDL コードおよび HLS コードを生成するときは、HDL Coder™ がサポートしているデータ型、演算子、および制御フロー ステートメントを使用してください。

サポートされているデータ型

HDL Coder は、cell 配列と Inf データ型をサポートしません。この表は、サポートされている MATLAB データ型のサブセットを示しています。

タイプサポートされているデータ型制限
整数
  • uint8, uint16, uint32, uint64

  • int8, int16, int32, int64

Simulink®MATLAB Function ブロックの端子には、64 ビット データに対して数値型 sfix64 または ufix64 を使用しなければなりません。
実数
  • double

  • single

MATLAB コード内の double または single データ型で生成された HDL コードは、シミュレーションには使用できますが、合成はできません。Simulink モデル内でこれらのデータ型を使用する場合に、合成可能なコードを生成できます。詳細は、以下を参照してください。

文字char
論理

logical

固定小数点
  • スケーリングされた (2 進小数点のみ) 固定小数点数

  • カスタム整数 (ゼロ 2 進小数点)

勾配 (1.0 以外) とバイアス (0.0 以外) をもつ固定小数点数はサポートされていません。

固定小数点数の最大ワード サイズは 128 ビットです。

ベクトル
  • 順番付けなし {N}

  • {1, N}

  • {N, 1}

使用できるベクトル要素の最大数は 2^32 です。

変数に添字を使用する前に、変数を完全に定義しなければなりません。

行列

{N, M}

行列は設計アルゴリズムの本体および最上位の設計関数への入力として使用できます。

次の HDL ワークフローでは、行列はサポートされていません。

  • コシミュレーション モデルの生成

  • FPGA インザループ

  • IP コアの生成

構造体struct

構造体配列はサポートされていません。

IP コアの生成ワークフローについては、構造体は設計アルゴリズムの本体ではサポートされていますが、最上位の設計関数への入力としてはサポートされていません。

構造体は、HLS コード生成では、最上位 DUT の端子の入力および出力としてはサポートされていません。

列挙enumeration

ターゲット言語が Verilog® の場合は、すべての列挙型メンバーの名前が設計内で固有でなければなりません。

次のワークフローまたは検証メソッドでは、最上位 DUT の端子の列挙型はサポートされていません。

  • IP コアの生成ワークフロー

  • FPGA インザループ

  • HDL コシミュレーション

  • HLS コード生成ワークフロー

列挙は、HLS コード生成では、最上位 DUT の端子の入力および出力としてはサポートされていません。

グローバル変数は HDL コード生成および HLS コード生成ではサポートされていません。

サポートされる演算子

メモ

算術演算への大きなベクトル入力および行列入力に対して生成された HDL コードおよび HLS コードは非効率なコードになる場合があります。これらの演算子のコードは自動的にパイプライン化されません。

算術演算子

演算演算子の構文同等の関数制限
二項の加算 A+B plus(A,B) AB のいずれも logical データ型にすることはできません。
行列の乗算 A*B mtimes(A,B)

行列算術演算に対して生成された HDL コードはパイプライン化されず、非効率なコードになる場合があります。

配列の乗算 A.*B times(A,B) AB のいずれも logical データ型にすることはできません。
行列のべき乗 A^B mpower(A,B)

AB はスカラーでなければなりません。また、B は整数でなければなりません。

行列算術演算に対して生成された HDL コードはパイプライン化されず、非効率なコードになる場合があります。

配列のべき乗 A.^B power(A,B) AB はスカラーでなければなりません。また、B は整数でなければなりません。
複素数転置 A' ctranspose(A)
行列転置 A.' transpose(A)  
行列の連結 [A B] なし
行列のインデックスA(r c) なし変数を使用する前に、変数を完全に定義しなければなりません。

論理演算子

演算演算子の構文同等の M 関数メモ
論理 AND A&Band(A,B)
論理 OR A|Bor(A,B)
論理 XOR A xor Bxor(A,B)
論理 AND (ショートサーキット) A&&B

該当なし

条件にはショートサーキット論理演算子を使用します。
論理 OR (ショートサーキット) A||B

該当なし

条件にはショートサーキット論理演算子を使用します。
要素の補数 ~Anot(A)

関係演算子

関係演算子の構文同等の関数
より小さい A<B lt(A,B)
以下 A<=B le(A,B)
以上 A>=B ge(A,B)
より大きい A>B gt(A,B)
等しい A==B eq(A,B)
等しくない A~=B ne(A,B)

制御フロー ステートメント

HDL Coder では、次の制御フロー ステートメントや構成が制限付きでサポートされています。

制御フロー ステートメント 制限

for

for ループを使用する場合は、必ず静的限度を設定してください。for ループでは実行する反復回数が定数でなければならないため、for ループの反復回数を変更する条件情報に基づく breakreturn などの制御フロー ステートメントを含めることはできません。

& 演算子と | 演算子を for ステートメントの条件内で使用しないでください。代わりに、&& 演算子と || 演算子を使用します。

HDL Coder では、for ステートメントの条件に非スカラー式を使用することはできません。代わりに、関数 all または関数 any を使用して logical ベクトルをスカラーに変換します。

if

& 演算子と | 演算子を if ステートメントの条件内で使用しないでください。代わりに、&& 演算子と || 演算子を使用します。

HDL Coder では、if ステートメントの条件に非スカラー式を使用することはできません。代わりに、関数 all または関数 any を使用して logical ベクトルをスカラーに変換します。

switch

switch または case ステートメントの条件式には、次のデータしか使用できません。

  • uint8uint16uint32int8int16int32 のいずれかのデータ型

  • スカラー データ

複数の case ステートメントが同じ変数に対して代入を実行する場合、その変数に指定する数値型と fimath は、各 case ステートメントで同じにしなければなりません。

次の制御フロー ステートメントはサポートされていません。

  • while

  • break

  • continue

  • return

  • parfor

次のベクトル関数は使用しないでください。これらの関数により、break ステートメントを使用するループが生成される場合があります。

  • isequal

  • bitrevorder

参考

|

関連するトピック