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

ライブラリ:
Simulink /
Logic and Bit Operations
HDL Coder /
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 |
例
次の例は、2 進小数点シフトの効果を示しています。
model='ex_shift_arithmetic_block_binary_point_shifts';
open_system(model)
この例では、ダイアログ ボックスとブロック入力端子を用いた右ビット シフトの動作の比較を示します。
model='ex_shift_arithmetic_block_right_bit_shifts';
open_system(model)
端子
入力
演算される数値。スカラー、ベクトル、または配列として指定します。
データ型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
シフトするビット数。スカラーとして指定します。
データ型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
出力
演算の結果。スカラー、ベクトル、または配列として返されます。
データ型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
パラメーター
シフトするビットをダイアログ ボックスに入力するか、入力端子から値を継承するかを指定します。
調整可能: No
プログラムでの使用
ブロック パラメーター: BitShiftNumberSource |
型: 文字ベクトル、string |
値: 'Dialog' | 'Input port' |
既定の設定: 'Dialog' |
ビットをシフトする方向を、左、右、または双方向のいずれかに指定します。
調整可能: No
プログラムでの使用
ブロック パラメーター: BitShiftDirection |
型: 文字ベクトル、string |
値: 'Left' | 'Right' | 'Bidirectional' |
既定の設定: 'Bidirectional' |
ビット シフト値のスカラー、ベクトル、または配列を指定します。
方向 | 説明 |
---|---|
左 または 右 | ビット シフトの指定には正の整数を使用します。 |
双方向 | 右シフトには正の整数、左シフトには負の整数を使用します。 |
調整可能: No
依存関係
このパラメーターを有効にするには、[シフトするビット:]、[ソース] を [ダイアログ]
。
プログラムでの使用
ブロック パラメーター: BitShiftNumber |
型: 文字ベクトル、string |
値: スカラー | ベクトル | 配列 |
既定の設定: '8' |
入力信号のバイナリ ポイントがシフトされる場所の整数を指定します。正の値は右シフトを示し、負の値は左シフトを示します。
調整可能: No
プログラムでの使用
ブロック パラメーター: BinPtShiftNumber |
型: 文字ベクトル、string |
値: スカラー |
既定の設定: '0' |
ブロックに範囲外シフト値が含まれているとき、シミュレーション中に警告またはエラーを生成するかどうかを指定します。オプションは次のとおりです。
None
— 何のアクションも実行されません。Warning
— 警告が表示され、シミュレーションは続行されます。Error
— シミュレーションが終了し、エラーが表示されます。
詳細については、範囲外ビット シフト値のシミュレーションおよびアクセラレータ モードを参照してください。
プログラムでの使用
ブロック パラメーター: DiagnosticForOORShift |
型: 文字ベクトル、string |
値: 'None' | 'Warning' | 'Error' |
既定の設定: 'None' |
このチェック ボックスをオンにすると、範囲外のビット シフト値から保護するために生成コードに条件文を含めます。このチェック ボックスは [シフトするビット:]、[ソース] が [入力端子]
であるときに利用できます。
詳細については、範囲外ビット シフト値に対するコード生成を参照してください。
プログラムでの使用
ブロック パラメーター: CheckOORBitShift |
型: 文字ベクトル、string |
値: 'on' | 'off' |
既定の設定: 'off' |
ブロックの特性
データ型 |
|
直達 |
|
多次元信号 |
|
可変サイズの信号 |
|
ゼロクロッシング検出 |
|
詳細
Shift Arithmetic ブロック アイコンには、次の変数を使用してブロック動作が表示されます。
Q
— 格納整数値V
— 実際値E
— 指数Qy
— 出力の格納整数値Qu
— 入力の格納整数値Vy
— 出力の値Vu
— 入力の値Ey
— 出力の指数Eu
— 入力の指数
右ビット シフトの動作の例は、ダイアログ ボックスとブロック入力端子を用いた右ビットシフトを比較したものです。
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 block も、上部のブロックと同じ演算を行います。ただし、下のブロックはダイアログ ボックスの代わりに入力端子を通じてビット シフト値を受け取ります。この値を入力信号として供給する場合は、シフトするビット数をシミュレーション中に変更することが可能です。
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 となります。
アルゴリズム
ここで WL
は入力の語長とします。次の図における影の部分は、左および右シフトにおける範囲外ビット シフトの値を示しています。
同様に次の図における影の部分は、双方向シフトにおける範囲外ビット シフトの値を示しています。
範囲外ビットシフトの診断は、演算のモードによって以下のように応答します。
モード | 範囲外シフト値の診断 | ||
---|---|---|---|
なし | 警告 | エラー | |
シミュレーション モード | 警告およびエラーは表示しません。 | 警告は報告しますがシミュレーションを続行します。 | エラーをレポートし、シミュレーションを停止します。 |
コード生成 | 影響しません。 |
ここで U
と WL
をそれぞれ入力およびその語長、Y
を出力とします。左シフトの場合の範囲外ビット シフト値の出力は、次のとおりです。
同様に右シフトの場合の範囲外ビット シフト値の出力は、次のとおりです。
双方向シフトの場合の範囲外ビット シフト値の出力は、次のとおりです。
コード生成における範囲外ビット シフトの取り扱いは [生成コードで範囲外の 'シフトするビット' をチェック] の設定に依存します。
チェック ボックスの設定 | 生成コード | 生成コードと比較したシミュレーション結果 |
---|---|---|
選択 | 範囲外ビット シフト値を防止する条件付きステートメントが含まれます。 | シミュレーションおよびアクセラレータ モードの結果は、コード生成のものと一致します。 |
クリア | 範囲外ビット シフト値の防止は行われません。 |
|
負の符号付き入力値に対する右シフトの場合、大部分の C コンパイラでは論理シフトではなく算術シフトが用いられます。Shift Arithmetic ブロックのコード生成は、このコンパイラ動作に依存します。
拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
HDL Coder™ には、HDL の実装および合成されたロジックに影響する追加のコンフィギュレーション オプションがあります。
HDL コードを生成できるのは、[シフトするビット:]、[ソース] が [ダイアログ] または [入力端子] の場合です。
生成された VHDL コードは関数 shift_right
と sll
演算子を使用します。
生成された Verilog コードは >>>
および <<<
シフト演算子。
ConstrainedOutputPipeline | 既存の遅延を設計内で移動することによって出力に配置するレジスタの数。分散型パイプラインではこれらのレジスタは再分散されません。既定の設定は |
InputPipeline | 生成されたコードに挿入する入力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
OutputPipeline | 生成されたコードに挿入する出力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
このブロックは、複素信号のコード生成をサポートしています。
[シフトするビット:]、[ソース] が [入力端子] の場合、2 進小数点シフトはサポートされません。
PLC コード生成
Simulink® PLC Coder™ を使用して構造化テキスト コードを生成します。
固定小数点の変換
Fixed-Point Designer™ を使用して固定小数点システムの設計とシミュレーションを行います。
バージョン履歴
R2006a より前に導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)