數值種類

Verilog HDL 有下列四種基本的值來表示硬件電路中的電平邏輯:

  • 0:邏輯 0 或 "假"
  • 1:邏輯 1 或 "真"
  • x 或 X:未知
  • z 或 Z:高阻

x 意味著信號數值的不確定,即在實際電路裏,信號可能為 1,也可能為 0。

z 意味著信號處於高阻狀態,常見於信號(input, reg)沒有驅動時的邏輯結果。例如一個 pad 的 input 呈現高阻狀態時,其邏輯值和上下拉的狀態有關係。上拉則邏輯值為 1,下拉則為 0 。

整數數值表示方法

數字聲明時,合法的基數格式有 4 中,包括:十進製('d 或 'D),十六進製('h 或 'H),二進製('b 或 'B),八進製('o 或 'O)。數值可指明位寬,也可不指明位寬。

指明位寬:

實例

4'b1011         // 4bit 數值
32'h3022_c0de   // 32bit 的數值

其中,下劃線 _ 是為了增強代碼的可讀性。

不指明位寬:

一般直接寫數字時,默認為十進製表示,例如下麵的 3 種寫法是等效的:

實例

counter = 'd100 ; //一般會根據編譯器自動分頻位寬,常見的為32bit
counter = 100 ;
counter = 32'h64 ;

負數表示

通常在表示位寬的數字前麵加一個減號來表示負數。例如:

-6'd15  
-15

-15 在 5 位二進製中的形式為 5'b10001, 在 6 位二進製中的形式為 6'b11_0001。

需要注意的是,減號放在基數和數字之間是非法的,例如下麵的表示方法是錯誤的:

4'd-2 //非法說明

實數表示方法

實數表示方法主要有兩種方式:

十進製:

30.123
6.0
3.0
0.001

科學計數法:

1.2e4         //大小為12000
1_0001e4      //大小為100010000
1E-3          //大小為0.001

字符串表示方法

字符串是由雙引號包起來的字符隊列。字符串不能多行書寫,即字符串中不能包含回車符。Verilog 將字符串當做一係列的單字節 ASCII 字符隊列。例如,為存儲字符串 "rb.wikimirror.xyz", 需要 14*8bit 的存儲單元。例如:

實例

reg [0: 14*8-1]       str ;
initial begin
    str = "rb.wikimirror.xyz";
end