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++ コード生成でサポートされます。

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

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

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

  • 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 変数を見てください。

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

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

参考

関連するトピック