既然 Verilog 是硬體描述語言,那麼其中的組成肯定不是單純的變數,如:整數、浮點數、字串等。
Verilog 中最重要的變數是 wire
,翻成中文就是線路!這是 Verilog 中的預設型別。
既然他是變數,那麼裡頭就會儲存一些資料嘛。因為是線路,所以基本的數值就是高電位 (1) 與低電位 (0) 。為什麼說是基本的數值呢?因為 wire 還有支援兩種特殊的數值 x
和 z
。
x
代表的是未知的數值,或是說 x
有機會成為任何數值。如果學過卡諾圖的布林代數化簡,我們會以 x
來表示 don't care ,和這個 x
代表的意義是相近的。
z
代表的是高電阻 (High Impendence),同時也是 wire
的預設數值。高電阻是什麼呢?基本上就是斷路啦!因此這個值當做線路的預設值再合理不過了。
如果不知道為什麼高電阻代表的是斷路,可以聽聽這個比喻:
假設前方有兩條路(A, B)讓你選擇,且兩條路的目的地和所需時間都是相同的 。
A 路線會先爬到海拔 3000 公尺,再向下走到目的地。
B 路線則會繞過高山,走一條很平坦的路到達目的地。
電流的想法跟正常人一樣,能輕鬆地到達,就選輕鬆的路,因此 A 路線是不會有人去選擇的。
既然沒有電流流經,那麼那條路就是斷路!
wire 的數值共分成三個部分:<size>'<base format><number>
b
或 B
表示,八進位 (octal) 會以 o
或 O
表示,十進位 (decimal) 會以 d
或 D
表示,十六進位 (hexadecimal) 會以 h
或 H
表示wire 的賦值需要借用關鍵字 assign
。
// 宣告
wire a, b, c, d;
// 賦值
assign a = 1'b1;
assign b = 1'o1;
assign c = 1'd1;
assign d = 1'h1;
// 上述的例子中, a, b, c, d 代表的數值其實是相等的,都是 1