verilog中的integer和reg的差別

2021-07-03 13:13:31 字數 2935 閱讀 1840

integer型別也是一種暫存器資料型別,integer型別的變數為有符號數,而reg型別的變數則為無符號數,除非特別宣告為有符號數,還有就是integer的位寬為宿主機的字的位數,但最小為32位,用integer的變數都可以用reg定義,只是對於用於計數更方便而已。reg,integer,real,time都是暫存器資料型別,定義在verilog中用來儲存數值的變數,和實際的硬體電路中的暫存器有區別

今天看**時遇到了integer,只知道這是個整數型別,可詳細的內容卻一竅不通,檢視了資料---《verilog數字vlsi設計教程》。其中是這麼寫到的:

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

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簡單得看為無符號的資料,並沒有像**中所說的結果一樣。但感覺書本中寫的其實挺有道理的,難道是軟體的不同,所以得到的結果不同??

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

更新部分:

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

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

Verilog中的函式

verilog中的函式 verilog hdl與大多數可程式語言一樣,將使用率很高的 按照軟體工程的思想,寫成函式,這樣,該函式可以被多次呼叫。verilog中函式常用語三種情況 verilog中的函式與c語言中的函式的主要不同之處是 在verilog中,呼叫函式時,需要將乙個或則多個自變數傳給函式...

verilog中的task用法

定義乙個任務。task task demo 任務定義結構開頭,命名為 task demo input 7 0 x,y 輸入埠說明 output 7 0 tmp 輸出埠說明 if x y 給出任務定義的描述語句 tmp x else tmp y endtask 上述 定義了乙個名為 task demo...

Verilog中generate的用法

一 generate verilog 2001新增了generate迴圈,允許產生module和primitive的多個例項化,同時也可以產生多個variable,net,task,function,continous assignment,initial和always。在generate語句中可以...