ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Shift Arithmetic

信号のビットや 2 進数小数点をシフト

ライブラリ

Logic and Bit Operations

説明

サポートされるシフト演算

Shift Arithmetic ブロックでは、入力信号のビットまたは 2 進小数点あるいはその両方をシフトできます。

たとえば、データ型 sfix(8) の入力で 2 進小数点を右または左に 2 桁シフトした結果は以下の 10 進数の値になります。

シフト操作バイナリ値10 進数

シフトなし (元の番号)

11001.011

–6.625

2 進小数点を 右 に 2 桁シフトする

1100101.1

–26.5

2 進小数点を左に 2 桁シフトする

110.01011

–1.65625

このブロックは、符号付き数値の算術ビットシフトを実行します。したがって、ブロックは各ビット シフトの最上位ビットを再循環します。データ型 sfix(8) の入力でビットを右または左に 2 桁シフトした結果は以下の 10 進数の値となります。

シフト操作バイナリ値10 進数

シフトなし (元の番号)

11001.011

–6.625

右に 2 桁ビットシフトする

11110.010

–1.75

左 に 2 桁ビットシフトする

00101.100

5.5

サポートするデータ型

このブロックは、以下のデータ型の入力信号をサポートします。

入力信号サポートされているデータ型
u
  • 浮動小数点

  • 組み込み整数

  • 固定小数点

s
  • 浮動小数点

  • 組み込み整数

  • 固定小数点整数

次の規則によって出力データ型が決まります。

入力 u のデータ型出力データ型
浮動小数点入力と同じ]u
組み込みの整数または固定小数点
  • u の符号

  • u の語長

  • u * 2^(max(binary points to shift)) の勾配

  • u * 2^(max(binary points to shiftbits to shift)) のバイアス、方向が双方向または右であるビット シフトの場合

  • u * 2^(max(binary points to shift + bits to shift)) のバイアス、方向が左であるビット シフトの場合

ブロック パラメーターは、次のデータ型をサポートします。

パラメーターサポートされているデータ型
[シフトするビット:]、[数]
  • 組み込み整数

  • 固定小数点整数

[シフトする 2 進小数点]
  • 組み込み整数

  • 固定小数点整数

詳細は、Simulink® ドキュメンテーションの「 Simulink でサポートされているデータ型」を参照してください。

パラメーターとダイアログ ボックス

Shift Arithmetic ブロックのダイアログ ボックスは次のようになります。

[シフトするビット:]、[ソース]

シフトするビットをダイアログ ボックスに入力するか、入力端子から値を継承するかを指定します。

[シフトするビット:]、[方向]

ビットをシフトする方向を、左、右、または双方向のいずれかに指定します。

[シフトするビット:]、[数]

ビット シフト値のスカラー、ベクトル、または配列を指定します。このパラメーターは [シフトするビット:]、[ソース][ダイアログ] であるときに利用できます。

方向説明
または ビット シフトの指定には正の整数を使用します。
双方向右シフトには正の整数、左シフトには負の整数を使用します。

シフトする 2 進小数点

入力信号のバイナリ ポイントがシフトされる場所の整数を指定します。正の値は右シフトを示し、負の値は左シフトを示します。

範囲外シフト値の診断

ブロックに範囲外シフト値が含まれているとき、シミュレーション中に警告またはエラーを生成するかどうかを指定します。オプションは次のとおりです。

  • None — 警告またはエラーは表示されません。

  • Warning - MATLAB® コマンド ウィンドウに警告を表示し、シミュレーションを続けます。

  • Error — シミュレーションを停止し、シミュレーション診断ビューアーにエラーを表示します。

詳細は、「範囲外ビット シフト値に対するシミュレーションおよびアクセラレータ モード」を参照してください。

生成コードで範囲外の 'シフトするビット' をチェック

このチェック ボックスをオンにすると、範囲外のビット シフト値から保護するために生成コードに条件文を含めます。このチェック ボックスは [シフトするビット:]、[ソース][入力端子] であるときに利用できます。

詳細は、「範囲外ビット シフト値に対するコード生成」を参照してください。

範囲外ビット シフト

範囲外ビット シフトの定義

ここで WL は入力の語長とします。次の図における影の部分は、左および右シフトにおける範囲外ビット シフトの値を示しています。

同様に次の図における影の部分は、双方向シフトにおける範囲外ビット シフトの値を示しています。

範囲外ビットシフトの診断は、演算のモードによって以下のように応答します。

[モード][範囲外シフト値の診断]
なし警告エラー
シミュレーション警告およびエラーは表示しません。警告は報告しますがシミュレーションを続行します。エラーをレポートし、シミュレーションを停止します。
アクセラレータ モードおよびコード生成影響しません。

範囲外ビット シフト値に対するシミュレーションおよびアクセラレータ モード

ここで UWL をそれぞれ入力およびその語長、Yを出力とします。左シフトの範囲外ビット シフト値に対する出力は、次のとおりです。

同様に右シフトの範囲外ビット シフト値に対する出力は、次のとおりです。

双方向シフトの範囲外ビット シフト値に対する出力は、次のとおりです。

範囲外ビット シフト値に対するコード生成

コード生成における範囲外ビット シフトの取り扱いは [生成コードで範囲外の 'シフトするビット' をチェック] の設定に依存します。

チェック ボックスの設定生成コード生成コードと比較したシミュレーション結果

選択

範囲外ビット シフト値を防止する条件付きステートメントが含まれます。

シミュレーションおよびアクセラレータ モードの結果は、コード生成のものと一致します。

クリア

範囲外ビット シフト値の防止は行われません。

  • 範囲内の値については、シミュレーションおよびアクセラレータ モードの結果は、コード生成のものと一致する

  • 範囲外の値については、コード生成の結果はコンパイラ固有のものとなる

負の符号付き入力値に対する右シフトの場合、大部分の C コンパイラでは論理シフトではなく算術シフトが用いられます。Shift Arithmetic ブロックのコード生成は、このコンパイラ動作に依存します。

右ビットシフトのブロック出力

次のモデルモデルは、ダイアログ ボックスと入力端子を用いた右ビットシフトを比較したものです。

Constant ブロックの主要なブロック パラメーターは次のとおりです。

ブロックパラメーター設定
Constant および Constant1定数値124
出力データ型int8
Dynamic bit shift定数値2
出力データ型[継承: '定数値' からの継承]

Shift Arithmetic ブロックの主要なブロック パラメーターは次のとおりです。

ブロックパラメーター設定
Bit shift from dialog[シフトするビット:]、[ソース][ダイアログ]
[シフトするビット:]、[方向][右]
[シフトするビット:]、[数]2
Bit shift from input[シフトするビット:]、[ソース][入力端子]
[シフトするビット:]、[方向][右]

上部の Shift Arithmetic ブロックは 124 の入力がありますが、これはバイナリ (2 進数) 形式で 01111100 に相当します。ビット数を右方向へ 2 ビット分シフトさせた結果のバイナリは 00011111 です。よってこのブロック出力は 31 となります。

下部の Shift Arithmetic ブロックも、上部のブロックと同じ演算を行います。ただし、下のブロックはダイアログ ボックスの代わりに入力端子を通じてビット シフト値を受け取ります。この値を入力信号として供給する場合は、シフトするビット数をシミュレーション中に変更することが可能です。

2 進小数点シフトのブロック出力

次のモデルモデルは、2 進小数点シフトの効果を示しています。

Constant ブロックの主要なブロック パラメーターは次のとおりです。

ブロックパラメーター設定
Constant および Constant1定数値124
出力データ型int8

Shift Arithmetic ブロックの主要なブロック パラメーターは次のとおりです。

ブロックパラメーター設定
Shift binary point 3 places to the right[シフトするビット:]、[ソース]ダイアログ
[シフトするビット:]、[方向][双方向]
[シフトするビット:]、[数]0
[シフトする 2 進小数点][数]3
Shift binary point 3 places to the left[シフトするビット:]、[ソース]ダイアログ
[シフトするビット:]、[方向][双方向]
[シフトするビット:]、[数]0
[シフトする 2 進小数点][数]3

上部の Shift Arithmetic ブロックは 124 の入力がありますが、これはバイナリ (2 進数) 形式で 01111100 に相当します。これを右方向へ 2 進小数点を 3 つシフトさせた結果のバイナリは 01111100000 です。よって上部のブロックの出力は 995 となります。

下の Shift Arithmetic ブロックも 124 の入力があります。これを左方向に 2 進小数点を 3 つシフトさせるとバイナリ (2 進数) 形式で 01111.100 に相当します。よって下部のブロックの出力は 15.5 となります。

特性

直接フィードスルー

はい

サンプル時間

駆動ブロックから継承

スカラー拡張

あり

離散化

あり

多次元化

ビットシフト値の入力端子については、あり

ゼロクロッシング検出

いいえ

この情報は役に立ちましたか?