Menu
CoddyTech

Operator Geser

Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 26 dari 90.

Operator shift menggeser bit ke kiri atau ke kanan dalam sebuah vektor.

Operator Shift yang Tersedia

OperatorOperasiDeskripsi
<<Pergeseran logis ke kiriMenggeser bit ke kiri, mengisi dengan nol
>>Pergeseran logis ke kananMenggeser bit ke kanan, mengisi dengan nol
<<<Pergeseran aritmetika ke kiriSama seperti pergeseran logis ke kiri
>>>Pergeseran aritmetika ke kananMenggeser bit ke kanan, mempertahankan bit tanda

Cara Kerjanya

Geser ke Kiri (<<):

8'b00001010 << 2 = 8'b00101000

Bit bergeser ke kiri. Nol mengisi sisi kanan.

Pergeseran Kanan (>>):

8'b00001010 >> 2 = 8'b00000010

Bit bergerak ke kanan. Nol mengisi sisi kiri.

Contoh Kode

module shift_demo;
  reg [7:0] original, left_shift, right_shift;
  
  initial begin
    original = 8'b00001010;
    
    left_shift  = original << 2;   // 00001010 → 00101000
    right_shift = original >> 2;   // 00001010 → 00000010
    
    $display("original   = %b", original);
    $display("<< 2       = %b", left_shift);
    $display(">> 2       = %b", right_shift);
    $finish;
  end
endmodule

Keluaran:

original   = 00001010
<< 2       = 00101000
>> 2       = 00000010

Arithmetic Right Shift (>>>)

Untuk bilangan bertanda, geser kanan aritmetis mempertahankan bit tanda:

reg signed [7:0] a;
a = -5;                // 11111011
a >>> 2 = 11111110     // Still negative

Logical shift (>>) akan mengisi dengan nol dan menghilangkan tanda.

Penggunaan Umum

Kalikan dengan pangkat 2 (geser ke kiri):

x << 1    // Multiply by 2
x << 2    // Multiply by 4
x << 3    // Multiply by 8

Bagi dengan pangkat 2 (geser ke kanan):

x >> 1    // Divide by 2
x >> 2    // Divide by 4
x >> 3    // Divide by 8

Ekstrak sebuah field:

// Get bits 5-2 from an 8-bit value
field = (data >> 2) & 4'b1111;
challenge icon

Tantangan

Tuliskan ekspresi pergeseran yang benar untuk setiap tugas.

Yang harus dilakukan:

  1. Geser a ke kiri sebanyak 3 bit dan simpan di left_result
  2. Geser a ke kanan sebanyak 1 bit dan simpan di right_result
  3. Geser b ke kanan sebanyak 2 bit (aritmetis) dan simpan di arith_result

Coba sendiri

module shift_challenge;
  reg [7:0] a;
  reg signed [7:0] b;
  reg [7:0] left_result, right_result;
  reg signed [7:0] arith_result;
  
  initial begin
    a = 8'b00010001;
    b = -8'sd16;       // 11110000 dalam biner
    
    left_result  = ______;   // Geser a ke kiri sebanyak 3 bit
    right_result = ______;   // Geser a ke kanan sebanyak 1 bit
    arith_result = ______;   // Geser b ke kanan sebanyak 2 bit (aritmetis)
    
    $display("a = %b", a);
    $display("a << 3 = %b", left_result);
    $display("a >> 1 = %b", right_result);
    $display("b = %b", b);
    $display("b >>> 2 = %b", arith_result);
    $finish;
  end
endmodule
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online