Perbedaan antara >> dan >>> di Verilog?


8

Apa perbedaan antara >>dan >>>di Verilog / sistem Verilog? Saya tahu ==tes hanya untuk 1 dan 0, sedangkan ===tes untuk 1, 0, X, Z. Jadi bagaimana itu mirip dengan operator shift?

Jawaban:


13

Ini tidak mirip dengan ==/ ===, jika operan tangan kiri ditandatangani kemudian >>>melakukan ekstensi tanda.

reg signed [9:0] b = 10'sb11_0101_0101;
reg signed [9:0] a_signed;
reg        [9:0] a_unsigned; 

always_comb begin
  a_signed   = b >>> 2;
  a_unsigned = b >>  2;
end

Hasil:

#a_signed   1111010101
#a_unsigned 0011010101

Contoh tentang EDA Playground .


2
Wow, itu persis kebalikan dari makna Java >>dan >>>operator ... jahat.
Colin D Bennett

2
Verilog adalah 10 tahun sebelum Jawa. : P
dave_59

1
@ dave_59, tetapi nilai yang ditandatangani (selain dari tipe 32-bit integer) dan operator pergeseran aritmatika hanya diperkenalkan ke Verilog di Verilog-2001.
The Photon

1
Verilog sudah harus >>berarti perubahan logis pada tahun 1985 (diambil dari Pascal, yaitu dari tahun 1970). Jadi itu harus digunakan >>>untuk perubahan aritmatika.
dave_59

8

Menurut IEEE1800-2012 >>adalah pergeseran logis biner, sedangkan >>>pergeseran aritmatika biner.

Pada dasarnya, pergeseran aritmatika menggunakan konteks untuk menentukan bit pengisian, jadi:

  • arithmetic right shift ( >>>) - menggeser jumlah bit yang ditentukan, isi dengan nilai bit tanda jika ekspresi ditandatangani , jika tidak, isi dengan nol,
  • arithmetic left shift ( <<<) - menggeser jumlah bit yang ditentukan ke kiri, isi dengan nol.

Di sisi lain, shift logis ( <<, >>) selalu mengisi posisi bit yang kosong dengan nol.

Sebagai contoh:

a = 5'b10100;
b = a <<< 2; //b == 5'b10000
c = a >>> 2; //c == 5'b11101, 'cause sign bit was `1`
d = a <<  2; //d == 5'b10000
e = a >>  2; //e == 5'b00101

Hasil dari contoh ini bergantung pada pernyataan c: jika Anda menggunakan reg [4:0] c, Anda akan mendapatkannya 5'b00101, tidak 5'b11101. Memperbarui contoh untuk memperjelas jenisnya akan bermanfaat, saya pikir.
Clément
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.