Main Content

Simulink の半精度データ型

信号およびブロックの出力で、半精度データ型を指定できます。半精度データ型は、パラメーターおよびブロックのサブセットのシミュレーションとコード生成でサポートされます。

半精度の算術演算

Simulink® では、算術演算、関係演算、二項演算を行うブロックに対する半精度入力は常に単精度にキャストされ、演算は単精度で実行されます。ブロックの出力データ型が half に設定されている場合、ブロックの出力は半精度データ型にキャストし直されます。

しかし、MATLAB® では、半精度の浮動小数点演算をエミュレートすることにより、算術演算を半精度入力で行う関数も存在します。たとえば、MATLAB では、次のコードは半精度浮動小数点演算を使用して実行されます。

y = mod(half(u1), half(u2))

Simulink では、Math Function ブロックの関数 mod を使用し、入力を単精度にキャストして単精度浮動小数点演算を行うことで、同じ演算が実行されます。算術演算の結果は、半精度にキャストし直されます。

y = half(mod(single(half(u1)), single(half(u2))))

半精度がサポートされるソフトウェア機能

  • 半精度データ型は、ノーマル モード、アクセラレータ モード、およびラピッド アクセラレータ モードのシミュレーションでサポートされます。半精度データ型は、SIL モード、PIL モード、およびエクスターナル モードでもサポートされます。

  • 半精度は .ert ターゲットの C/C++ コード生成でサポートされます。

    生成コード内で、半精度の変数は、値のビット パターンをエミュレートするクラスに格納されます。

  • 半精度の特殊な型をネイティブにサポートする組み込みハードウェア ターゲットでは、ネイティブ半精度 C コードの生成がサポートされます。詳細については、Generate Native Half-Precision C Code from Simulink Modelsを参照してください。

  • HDL Coder™ を使用した HDL コード生成。

    詳細については、HDL Coder のネイティブ浮動小数点サポート入門 (HDL Coder)を参照してください。

  • MATLAB Systemブロックでは実数値をもつ半精度データ型がサポートされます。

  • Simulink では、半精度データ型でサポートされるのは実数値のみです。複素数値を半精度データ型にすることはできません。

半精度がサポートされるブロック

半精度をサポートするブロックを表示するには、コマンド ラインで次のように入力します。

showblockdatatypetable

半精度をサポートするブロックは、[Half] というラベルの列に X と表示されます。

半精度システムのコード生成

Simulink モデルの .ert ターゲット向けの C コードを半精度データ型を使用して生成できます。.ert ターゲットのコード生成には Embedded Coder® のライセンスが必要です。

ex_half_arithmetic モデルを開きます。モデルは、いくつかの算術演算を行います。すべてのパラメーター値と出力データ型に、半精度データ型が指定されています。

open_system('ex_half_arithmetic');

モデルの C コードを生成するため、Ctrl + B を押します。コード生成レポートで、ex_half_arithmetic.c ファイルを開きます。半精度の変数は、生成コード内では real16_T の型です。たとえば、rtb_Gain 変数を見てください。

生成コード内で、半精度の変数は、値のビット パターンをエミュレートする struct に格納されます。

算術演算に対する半精度入力変数は単精度にキャストされ、単精度で算術演算が行われます。ブロックの出力データ型が half に設定されている場合、演算結果は半精度データ型にキャストし直されます。たとえば、Gain ブロックの出力を計算するコードを確認します。

参考

関連するトピック