このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 進小数点シフトの効果
次の例は、2 進小数点シフトの効果を示しています。
model='ex_shift_arithmetic_block_binary_point_shifts';
open_system(model)
右ビット シフトの動作
この例では、ダイアログ ボックスとブロック入力端子を用いた右ビット シフトの動作の比較を示します。
model='ex_shift_arithmetic_block_right_bit_shifts';
open_system(model)
端子
入力
u — 演算される数値
スカラー | ベクトル | 配列
演算される数値。スカラー、ベクトル、または配列として指定します。
データ型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
s — シフトするビット数
スカラー
シフトするビット数。スカラーとして指定します。
データ型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
出力
Port_1 — 演算の結果
スカラー | ベクトル | 配列
演算の結果。スカラー、ベクトル、または配列として返されます。
データ型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
パラメーター
[シフトするビット:]、[ソース] — シフトするビットのソース
ダイアログ
(既定値) | 入力端子
シフトするビットをダイアログ ボックスに入力するか、入力端子から値を継承するかを指定します。
調整可能: No
プログラムでの使用
ブロック パラメーター: BitShiftNumberSource |
型: 文字ベクトル、string |
値: 'Dialog' | 'Input port' |
既定の設定: 'Dialog' |
[シフトするビット:]、[数] — シフトするビット
8 (既定値) | スカラー
ビット シフト値のスカラー、ベクトル、または配列を指定します。このパラメーターは [シフトするビット:]、[ソース] が [ダイアログ]
であるときに利用できます。
方向 | 説明 |
---|---|
左 または 右 | ビット シフトの指定には正の整数を使用します。 |
双方向 | 右シフトには正の整数、左シフトには負の整数を使用します。 |
調整可能: No
プログラムでの使用
ブロック パラメーター: BitShiftNumber |
型: 文字ベクトル、string |
値: scalar |
既定の設定: '9' |
[シフトするビット:]、[方向] — ビットをシフトする方向
左
(既定値) | 右
| 双方向
ビットをシフトする方向を、左、右、または双方向のいずれかに指定します。
調整可能: No
プログラムでの使用
ブロック パラメーター: BitShiftDirection |
型: 文字ベクトル、string |
値: 'Left' | 'Right' | 'Bidrectional' |
既定の設定: 'Bidrectional' |
[シフトする 2 進小数点:]、[数] — バイナリ ポイントがシフトされる場所の数
0
(既定値) | scalar
入力信号のバイナリ ポイントがシフトされる場所の整数を指定します。正の値は右シフトを示し、負の値は左シフトを示します。
調整可能: No
プログラムでの使用
ブロック パラメーター: BinPtShiftNumber |
型: 文字ベクトル、string |
値: 'Dialog' | 'Input port' |
既定の設定: 'Dialog' |
範囲外シフト値の診断 — 診断アクション
なし
(既定値) | 警告
| エラー
ブロックに範囲外シフト値が含まれているとき、シミュレーション中に警告またはエラーを生成するかどうかを指定します。オプションは次のとおりです。
None
— Simulink® は何のアクションも実行しません。Warning
— Simulink で警告が表示され、シミュレーションは続行されます。Error
— Simulink ではシミュレーションが終了し、エラーが表示されます。
詳細については、範囲外ビット シフト値のシミュレーションおよびアクセラレータ モードを参照してください。
プログラムでの使用
ブロック パラメーター: DiagnosticForOORShift |
型: 文字ベクトル、string |
値: 'None' | 'Warning' | 'Error' |
既定の設定: 'None' |
生成コードで範囲外の 'シフトするビット' をチェック — 生成コードで範囲外の 'シフトするビット' をチェック
off
(既定値) | on
このチェック ボックスをオンにすると、範囲外のビット シフト値から保護するために生成コードに条件文を含めます。このチェック ボックスは [シフトするビット:]、[ソース] が [入力端子]
であるときに利用できます。
詳細については、範囲外ビット シフト値に対するコード生成を参照してください。
プログラムでの使用
ブロック パラメーター: 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 進小数点シフトの効果の例は、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 コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
HDL Coder™ には、HDL の実装および合成されたロジックに影響する追加のコンフィギュレーション オプションがあります。
HDL コードを生成できるのは、[シフトするビット:]、[ソース] が [ダイアログ] または [入力端子] の場合です。
生成された VHDL コードは関数 shift_right
と sll
演算子を使用します。
生成された Verilog コードは >>>
および <<<
シフト演算子。
ConstrainedOutputPipeline | 既存の遅延を設計内で移動することによって出力に配置するレジスタの数。分散型パイプラインではこれらのレジスタは再分散されません。既定の設定は |
InputPipeline | 生成されたコードに挿入する入力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
OutputPipeline | 生成されたコードに挿入する出力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
このブロックは、複素信号のコード生成をサポートしています。
[シフトするビット:]、[ソース] が [入力端子] の場合、2 進小数点シフトはサポートされません。
PLC コード生成
Simulink® PLC Coder™ を使用して構造化テキスト コードを生成します。
固定小数点の変換
Fixed-Point Designer™ を使用して固定小数点システムの設計とシミュレーションを行います。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)