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
| Operator | Operasi | Deskripsi |
|---|---|---|
<< | Pergeseran logis ke kiri | Menggeser bit ke kiri, mengisi dengan nol |
>> | Pergeseran logis ke kanan | Menggeser bit ke kanan, mengisi dengan nol |
<<< | Pergeseran aritmetika ke kiri | Sama seperti pergeseran logis ke kiri |
>>> | Pergeseran aritmetika ke kanan | Menggeser bit ke kanan, mempertahankan bit tanda |
Cara Kerjanya
Geser ke Kiri (<<):
8'b00001010 << 2 = 8'b00101000Bit bergeser ke kiri. Nol mengisi sisi kanan.
Pergeseran Kanan (>>):
8'b00001010 >> 2 = 8'b00000010Bit 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
endmoduleKeluaran:
original = 00001010
<< 2 = 00101000
>> 2 = 00000010Arithmetic Right Shift (>>>)
Untuk bilangan bertanda, geser kanan aritmetis mempertahankan bit tanda:
reg signed [7:0] a;
a = -5; // 11111011
a >>> 2 = 11111110 // Still negativeLogical 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 8Bagi dengan pangkat 2 (geser ke kanan):
x >> 1 // Divide by 2
x >> 2 // Divide by 4
x >> 3 // Divide by 8Ekstrak sebuah field:
// Get bits 5-2 from an 8-bit value
field = (data >> 2) & 4'b1111;Tantangan
Tuliskan ekspresi pergeseran yang benar untuk setiap tugas.
Yang harus dilakukan:
- Geser
ake kiri sebanyak 3 bit dan simpan dileft_result - Geser
ake kanan sebanyak 1 bit dan simpan diright_result - Geser
bke kanan sebanyak 2 bit (aritmetis) dan simpan diarith_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
endmodulePelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
1Pengantar
Apa Itu VerilogPerangkat Keras vs Perangkat LunakModul PertamamuKomentarTingkat Abstraksi Desain4Operator Bagian 1
Operator AritmetikaOperator ModuloOperator PerbandinganUlasan, Matematika SederhanaOperator Bitwise7Penugasan dan Gerbang
Penugasan KontinuPenugasan dengan OperatorPrimitif Gerbang BawaanGerbang AND, OR, NOTGerbang XOR, XNORUlasan: Rangkaian Gerbang Logika10Pengambilan Keputusan
Pernyataan IfIf - ElseRangkuman: Komparator SederhanaPernyataan CaseCasex dan CasezRangkuman: Desain ALU5Operator Bagian 2
Operator LogikaOperator ReduksiOperator GeserOperator PenggabunganOperator KondisionalRangkuman, Tantangan Operator3Sistem Bilangan
Representasi BinerBilangan BerukuranBilangan Tanpa UkuranBilangan NegatifNilai Khusus X dan ZRingkasan: Format Bilangan6Modul
Struktur ModulPort Input dan OutputPort InoutInstansiasi ModulPemetaan Port Berdasarkan NamaPemetaan Port Berdasarkan UrutanRangkuman: Bangun Modul9Blok Prosedural
Blok alwaysBlok initialDaftar SensitivitasPenugasan BlockingPenugasan Non-BlockingRangkuman: always vs initial15Pengendali Lampu Lalu Lintas
Menentukan StatusLogika Mesin StatusLatihan sendiri: Compiler Verilog online