Verilog語法(一)
1.memory型
reg[7:0] mema[255:0]; //定義一個名為mema的儲存器,該儲存器有256個8位的儲存器,該儲存器的地址範圍是:0~255.
注:一個由n個1位暫存器構成的儲存器組和一個n位暫存器是不同的:
reg[n-1;0] rega; //一個n位的暫存器
reg mema[n-1:0]; //一個由n個1位暫存器構成的儲存器組
rega=0; //合法賦值語句
mema=0; //非法賦值語句
mema[3]=0; //合法賦值語句
2.位運算子
~ //取反
& //按位與
| //按位或
^ //按位異或
^~ //按位同或(異或非)
3.邏輯運算子
&& //邏輯與
|| //邏輯或
! //邏輯非
注:按位運算與邏輯運算的區別:
邏輯運算是指表示式返回值的運算,這裡的值只有真與假;
按位運算是指數值轉換為二進位制後的位運算,每位是0或1
真 邏輯與 真 結果為真
真 邏輯與 假 結果為假
1 按位與 1 結果為1
1 按位與 0 結果為0
4.等式運算子
(1)==
(2)!=
(3)===
(4)!==
注:
==邏輯相等:
兩個運算元逐位比較,不識別不定態‘x’或者高阻態’z’:
1 $displayb ( 4’b0011 == 4’b1010 ); // 0 2$displayb ( 4’b0011 == 4’b0011 ); // 1 3 4 5 $displayb ( 4’b1010 == 4’b1x10 ); // x 6 $displayb ( 4’b0x10 == 4’b1x10 ); // 0 7 $displayb ( 4’b1z10 == 4’b1z10 ); // x 8 9 $displayb ( 4’b0011 != 4’b1x10 ); // 1 10 $displayb ( 4’b1x10 != 4’b1x10 ); // x
===邏輯全等:
1 $displayb ( 4’b01zx === 4’b01zx ); // 1 2 $displayb ( 4’b01zx !== 4’b01zx ); // 0 3 $displayb ( 4’b01zx === 4’b00zx ); // 0 4 $displayb ( 4’b01zx !== 4’b11zx ); // 1
5.移位運算子
a>>n; // 將a右移n位(用0來填補移出的空位)
a<<n; // 將a左移n位(用0來填補移出的空位)
6.迴圈語句
6.1 forever語句
格式:
forever begin
end
注:1.memory型
reg[7:0] mema[255:0]; //定義一個名為mema的儲存器,該儲存器有256個8位的儲存器,該儲存器的地址範圍是:0~255.
注:一個由n個1位暫存器構成的儲存器組和一個n位暫存器是不同的:
reg[n-1;0] rega; //一個n位的暫存器
reg mema[n-1:0]; //一個由n個1位暫存器構成的儲存器組
rega=0; //合法賦值語句
mema=0; //非法賦值語句
mema[3]=0; //合法賦值語句
2.位運算子
~ //取反
& //按位與
| //按位或
^ //按位異或
^~ //按位同或(異或非)
3.邏輯運算子
&& //邏輯與
|| //邏輯或
! //邏輯非
注:按位運算與邏輯運算的區別:
邏輯運算是指表示式返回值的運算,這裡的值只有真與假;
按位運算是指數值轉換為二進位制後的位運算,每位是0或1
真 邏輯與 真 結果為真
真 邏輯與 假 結果為假
1 按位與 1 結果為1
1 按位與 0 結果為0
4.等式運算子
(1)==
(2)!=
(3)===
(4)!==
注:
==邏輯相等:
兩個運算元逐位比較,不識別不定態‘x’或者高阻態’z’:
1 $displayb ( 4’b0011 == 4’b1010 ); // 0
2 $displayb ( 4’b0011 == 4’b0011 ); // 1
3
4
5 $displayb ( 4’b1010 == 4’b1x10 ); // x
6 $displayb ( 4’b0x10 == 4’b1x10 ); // 0
7 $displayb ( 4’b1z10 == 4’b1z10 ); // x
8
9 $displayb ( 4’b0011 != 4’b1x10 ); // 1
10 $displayb ( 4’b1x10 != 4’b1x10 ); // x
===邏輯全等:
1 $displayb ( 4’b01zx === 4’b01zx ); // 1
2 $displayb ( 4’b01zx !== 4’b01zx ); // 0
3 $displayb ( 4’b01zx === 4’b00zx ); // 0
4 $displayb ( 4’b01zx !== 4’b11zx ); // 1
5.移位運算子
a>>n; // 將a右移n位(用0來填補移出的空位)
a<<n; // 將a左移n位(用0來填補移出的空位)
6.迴圈語句
6.1 forever語句
格式:
forever begin
end
注:它與always語句不同之處在於forever不能獨立寫在程式中,而必須寫在initial塊中。
6.2 repeat語句
格式:
repeat(迴圈次數) begin
end
6.3 while語句
格式:
while(表示式) begin
end
6.4 for語句
格式:
for(表示式1;表示式2;表示式3)