verilog中的integer和reg的差別


今天看代碼時遇到了integer,只知道這是個整數類型,可詳細的內容卻一竅不通,查看了資料---《verilog數字VLSI設計教程》。其中是這么寫到的:

大多數的矢量類型(reg或者net)都被默認當做無符號數。integer和real是個例外,它們被默認為當做有符號數。通常,real類型是不可綜合的。

假設在沒有溢出的情況下,不管是無符號數還是有符號數,它們都是二進制的一串數值而已;而當這個值被當做某種類型比較時:又符號數的MSB被用來表示這個數字的符號,而無符號數的MSB則是位權最高的那一位。無論采用什么樣的二進制格式,一個無符號數永遠也不能成為負值。

下面是一個和符號位有關的例子:

reg[31:0] A;
integer I;
...
A=-1;
I=-1;//both A and I hold 32'hffffffff
//
if(I>32'h0)
	$display("I is positive.")
else $display("I is not positive");//Prints "I is not positive"
if(A>32'h0)
	$display("A is positive");//Prints "A is positive"
else $display("I is not positive");

我用類似的方式在quartus II 中進行了仿真,但得到的結果都是A,這可以看出Q2在比較過程中將integer簡單得看為無符號的數據,並沒有像代碼中所說的結果一樣。但感覺書本中寫的其實挺有道理的,難道是軟件的不同,所以得到的結果不同??

先拋出這個問題吧,有機會下次再去驗證一下。

更新部分:

上次驗證沒成功,今天已驗證居然成功了,上次肯定是哪弄錯了,現在把代碼和圖貼上:

 
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

未命名1

對於關系算符,綜合會有不同的結果,這取決於被比較的是有符號還是無符號數,會綜合出無符號關系算符,或又符合關系算符.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM