1. 程式人生 > 實用技巧 >Verilog語法(一)

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)