變量類型
verilog中有兩種變量類型。
-
線網型:表示電路間的連線。
-
寄存器型:verilog中一個抽象的存儲數據單元。
凡是在always或initial語句中賦值的變量,一定是寄存器變量;凡是在assign語句中賦值的變量,一定是線網變量。
線網類型
線網類型下又包括幾種子類型,它們具有線網的共性。
-
wire、tri:表示電路間的物理連線,tri主要用於多驅動源建模。
-
wor、trior:表示該連線具有“線或”功能。
-
wand、triand:表示該連線具有“線與”功能。
-
trireg:表示該連線具有總線保持功能。
-
tri1、tri0:表示當無驅動時,連線狀態為1(tri1)和0(tri0)。
-
supply1、supply0:分別表示電源和地信號。
在以上描述的線網類型中,除了trieg末初始化時的值為“X”以外,其余子類型未初始化時的值均為“Z”。
"X"與“Z”
我們都知道,數字電路中,只有0和1,而在verilog中,增加了“x”和“Z”。
- 當"X" 用作信號狀態時表示未知,當用作條件判斷時(在casex 或casez中)表示不關心;
- "Z" 表示高阻狀態,也就是沒有任何驅動,通常用來對三態總線進行建模。
- 但是在綜合工具中,或者說在實際實現的電路中,並沒有什么X值,只存在0、1和Z三種狀態。在實際電路中還可能出現亞穩態,它既不是0,也不是1,而是一種不穩定狀態,這種是要極力避免的。
線網類型主要用在連續賦值語句中,並可以作為模塊之間的互連信號。
寄存器類型
寄存器類型的變量在Verilog 語言中通常表示一個存儲數據的空間,在Verilog 仿真器中,寄存器類型的變量通常要占據一個仿真內存空間。
-
reg:是最常用的寄存器類型數據,可以是一位、多位或二維數組(存儲器)。
-
integer:整數型數據,存儲一個至少32 位的整數。
-
time: 時間類型,存儲一個至少64 位的時間值。
-
real 、realtime:實數和實數時間寄存器。
驅動和賦值
-
線網是被驅動的,該值不被存儲,在任意一個仿真步進上都需要重新計算。
-
寄存器是被賦值的,且該值將在仿真過程中被保存,直到再次對該變量進行賦值。
-
在敘述時為了簡單起見,常將"驅動"和"賦值"統一說成賦值,但是我們一定要清楚
其本質。
Question
這里提一個問題,verilog中的寄存器型一定對應電路中的寄存器嗎?