Jawaban:
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 .
integer) dan operator pergeseran aritmatika hanya diperkenalkan ke Verilog di Verilog-2001.
>>berarti perubahan logis pada tahun 1985 (diambil dari Pascal, yaitu dari tahun 1970). Jadi itu harus digunakan >>>untuk perubahan aritmatika.
Menurut IEEE1800-2012 >>adalah pergeseran logis biner, sedangkan >>>pergeseran aritmatika biner.
Pada dasarnya, pergeseran aritmatika menggunakan konteks untuk menentukan bit pengisian, jadi:
>>>) - menggeser jumlah bit yang ditentukan, isi dengan nilai bit tanda jika ekspresi ditandatangani , jika tidak, isi dengan nol,<<<) - 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
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.
>>dan>>>operator ... jahat.