reg [3:0] in; output [3:0] shfta; assign shfta = {in
この場合 shfta
、4 ビット幅であるため、{in<<2} の値は 4 ビット以上になります。もし in = 4'b0100
、 場合 、 shfta = 4'b0000
.6 ビットシフトされた値の最も重要な 2 ビットは失われます。
次のコードでは、6 ビットシフトされた値が保持され shfta
、正しい値が割り当てられます。もし in=4'b0100
、 場合 、 shfta = 6'b010000
.
reg [3:0] in; output [5:0] shfta; assign shfta = {in<<2};
MAX PLUS II ソフトウェアは、割り当てステートメントの左側にある変数のサイズに応じて、シフト操作に適したサイズを推論します。次のコードを考慮してください。
reg [3:0] in; output [7:0] shfta; assign shfta = {in<<2} 7'h10;
8 shfta
ビット幅であるため、{in<<2} には 8 ビットが割り当てられます。>>オペレーターにも同様の規則が適用されます。しかし、>>演算子の性質上、結果はシフト演算子の実装の幅の影響を受けません。例えば in =4'b1000
、{in>>2} が 4'b0010
.シフトされたデータの左側にはゼロが表示されます。ここで最も重要なビットは失われることはありません。その代わり、幅に依存しないシフト演算のために、最下位ビットが失われます。
シフト演算子の実装。