Сдвиг
Выделяют два вида операторов сдвига:
Операторы логического сдвига:
<<
и>>
.Операторы арифметического сдвига:
<<<
и>>>
.
Пример
// <переменная> <оператор> <выражение>
module shift_operators_tb;
reg [3:0] a; int i;
initial begin
a = 8'h1; $display("a = 'd%0d ('b%0b)", a, a);
for (i = 0; i < 8; i +=1 ) begin
$display("a << %0d = 'b%b", i, a << i); // логический сдвиг влево
end
a = 8'h80; $display("a = 'd%0d ('b%0b)", a, a);
for (i = 0; i < 8; i +=1 ) begin
$display("a >> %0d = 'b%b", i, a >> i); // логический сдвиг вправо
end
a = 8'h1; $display("a >> 1 = 'b%b", a >> 1);
a = 8'h1; $display("a = 'd%0d ('b%0b)", a, a);
for (i = 0; i < 8; i +=1 ) begin
$display("a <<< %0d = 'b%b", i, a <<< i); // арифметический сдвиг влево
end
a = 8'h80; $display("a = 'd%0d ('b%0b)", a, a);
for (i = 0; i < 8; i +=1 ) begin
$display("a >>> %0d = 'b%b", i, a >>> i); // арифметический сдвиг вправо
end
end
endmodule
Результат исполнения
логический сдвиг
арифметический сдвиг
a = 'd1 ('b1)
a << 0 = 'b00000001
a << 1 = 'b00000010
a << 2 = 'b00000100
a << 3 = 'b00001000
a << 4 = 'b00010000
a << 5 = 'b00100000
a << 6 = 'b01000000
a << 7 = 'b10000000
a = 'd128 ('b10000000)
a >> 0 = 'b10000000
a >> 1 = 'b01000000
a >> 2 = 'b00100000
a >> 3 = 'b00010000
a >> 4 = 'b00001000
a >> 5 = 'b00000100
a >> 6 = 'b00000010
a >> 7 = 'b00000001
a >> 1 = 'b00000000
a = 'd1 ('b1)
a <<< 0 = 'b00000001
a <<< 1 = 'b00000010
a <<< 2 = 'b00000100
a <<< 3 = 'b00001000
a <<< 4 = 'b00010000
a <<< 5 = 'b00100000
a <<< 6 = 'b01000000
a <<< 7 = 'b10000000
a = 'd128 ('b10000000)
a >>> 0 = 'b10000000
a >>> 1 = 'b01000000
a >>> 2 = 'b00100000
a >>> 3 = 'b00010000
a >>> 4 = 'b00001000
a >>> 5 = 'b00000100
a >>> 6 = 'b00000010
a >>> 7 = 'b00000001
Last updated