Sự khác biệt giữa >> và >>> trong phiên bản?


8

Sự khác biệt giữa >>>>>trong phiên bản verilog / hệ thống là gì? Tôi biết rằng ==các thử nghiệm chỉ cho 1 và 0, trong khi ===các thử nghiệm cho 1, 0, X, Z. Vậy nó giống với toán tử shift như thế nào?

Câu trả lời:


13

Nó không giống với ==/ ===, nếu toán hạng bên trái được ký thì >>>thực hiện mở rộng dấu.

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

Kết quả:

#a_signed   1111010101
#a_unsigned 0011010101

Ví dụ về Sân chơi EDA .


2
Wow, điều đó hoàn toàn trái ngược với ý nghĩa của Java >>và các >>>toán tử ... xấu xa.
Colin D Bennett

2
Verilog là 10 năm trước Java. : P
dave_59

1
@ dave_59, nhưng các giá trị đã ký (ngoài loại 32 bit integer) và các toán tử dịch chuyển số học chỉ được giới thiệu cho Verilog trong Verilog-2001.
Photon

1
Verilog đã có >>nghĩa là thay đổi logic vào năm 1985 (lấy từ Pascal, từ năm 1970). Vì vậy, nó đã phải sử dụng >>>để thay đổi số học.
dave_59

8

Theo IEEE1800-2012 >>là một sự thay đổi logic nhị phân, trong khi đó >>>là một sự thay đổi số học nhị phân.

Về cơ bản, sự thay đổi số học sử dụng bối cảnh để xác định các bit điền, vì vậy:

  • shift phải số học ( >>>) - dịch chuyển số bit được chỉ định bên phải, điền vào giá trị của bit dấu nếu biểu thức được ký , nếu không thì điền bằng 0,
  • số học shift trái ( <<<) - dịch chuyển số bit được chỉ định bên trái, điền vào số không.

Mặt khác, sự thay đổi logic ( <<, >>) luôn lấp đầy các vị trí bit bị bỏ trống bằng các số 0.

Ví dụ:

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

Kết quả của ví dụ này phụ thuộc vào tuyên bố c: nếu bạn sử dụng reg [4:0] c, bạn sẽ nhận được 5'b00101, không 5'b11101. Cập nhật ví dụ để làm rõ các loại sẽ hữu ích, tôi nghĩ vậy.
Clément
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.