今天看代碼時遇到了integer,只知道這是個整數類型,可詳細的內容卻一竅不通,查看了資料---《verilog數字VLSI設計教程》。其中是這么寫到的:
大多數的矢量類型(reg或者net)都被默認當做無符號數。integer和real是個例外,它們被默認為當做有符號數。通常,real類型是不可綜合的。
假設在沒有溢出的情況下,不管是無符號數還是有符號數,它們都是二進制的一串數值而已;而當這個值被當做某種類型比較時:又符號數的MSB被用來表示這個數字的符號,而無符號數的MSB則是位權最高的那一位。無論采用什么樣的二進制格式,一個無符號數永遠也不能成為負值。
下面是一個和符號位有關的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
module integer_reg(clk,negA,negI);
input clk;
wire[31:0]A;
integer I;
output reg negA;
output reg negI;
assign A=-3;
always @(posedge clk)
begin
I=-3;
if
(A<0)
negA<=1;
else
negA<=0;
if
(I<0)
negI<=1;
else
negI<=0;
end
endmodule
|
對於關系算符,綜合會有不同的結果,這取決於被比較的是有符號還是無符號數,會綜合出無符號關系算符,或又符合關系算符.