上一篇介紹了組成verilog的主要架構-module以及他的端口,今天要來介紹的是verilog中的變數、資料型態及變數的宣告。
Verilog有好幾種的資料型態,每個資料都有四種狀態:
值 | 狀態 | 意思 |
---|---|---|
0 | 邏輯0(Low) | 信號處於低電平 |
1 | 邏輯1(High) | 信號處於高電平 |
X/x | 未知的值 | 信號狀態不確定,可能由於信號衝突、位初始化。 |
Z/z | 高阻抗 | 信號處於高阻抗狀態,常用於三太緩衝器、總線信號。 |
接下來就來列點介紹一些基本的data types~
他的宣告大概是這樣:
module newwork(A,B);
input A;
output B;
wire a,b; //net
reg c[3:0];
//使用
and( a, c[3], c[2], c[1] );
and( b, c[0], ~c[1] );
endmodule
跟Net的狀態差異很多吧~用register宣告的話:
reg a;
reg b[3:0];
always @(*) //賦予暫存器值
a = 10;
宣告的話跟C很像:
integer i;
i = 1;
宣告方式:
real num;
num = 3.2;
宣告方式:
parameter UPPER = 10;
宣告方式:
localparam MAX = 10;
宣告方式:
wire [3:0] data_1; //4-bit
reg [15:0] data_3; //16-bit
可以利用array來表示一組同個type的信號。
範例:
integer A[5:0]; //A為6個integer
wire [3:0] B[7:0]; //宣告8條4-bit連接線(B)
reg [15:0] C[3:0]; //C為4個16-bit register
//使用
A = 0; //清空A的全部內容
C[2][7] = 3;//[2]的第3個bit值設為3
也可以用array來定義二維暫存器。
reg A[3:0][7:0]; //A為4*8個1-bit register
//使用
A[2][1] = 5; //A陣列的[2][1]值為5
宣告他們:
time t; //64-bit
realtime t_t; //float
今天就先到這邊~第一次接觸這些時有點頭暈腦脹XD