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 .シフトされたデータの左側にはゼロが表示されます。ここで最も重要なビットは失われることはありません。その代わり、幅に依存しないシフト演算のために、最下位ビットが失われます。
シフト演算子の実装。