Сдвиг

Выделяют два вида операторов сдвига:

  • Операторы логического сдвига: << и >>.

  • Операторы арифметического сдвига: <<< и >>>.

Пример

// <переменная> <оператор> <выражение> 
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

Результат исполнения

логический сдвиг
арифметический сдвиг

Last updated