天天看點

Verilog 文法小結Verilog 文法小結

Verilog 文法小結

下面的内容是常用的Verilog文法小結。

資料類型文法小結

  1. wire型資料通常用assign關鍵字進行指派。wire隻能被assign連續指派,reg隻能在initial和always中指派。input端口隻能定義成wire型。如果端口沒有聲明,則預設是wire線網型,且輸入端口隻能是wire線網型。
  2. reg是寄存器資料類型的關鍵字。寄存器是資料存儲單元的抽象,通過指派語句可以改變寄存器存儲的值,相當于改變觸發器存儲的值。reg型常用來表示always子產品内的指定信号,代表觸發器。在always塊内被指派的每一個信号都必須定義為reg型,即指派操作符的左端變量必須是reg型。
  3. 所謂的always必須用reg的意思是always裡面的指派語句中的被指派變量為reg型,而不是說在always裡面出現的變量都為reg型。
  4. reg型與wire型的差別在于:reg型保持最後一次的指派,而wire型需要持續的驅動。
  5. memory型通過對reg型變量建立數組以對存儲器模組化。

    reg [n-1:0]

    的存儲器名

    [m-1:0] reg [n-1:0]

    定義了存儲器中每一個存儲單元的大小,即該存儲器單元是一個

    n

    位寬的寄存器,

    [m-1:0]

    代表了存儲器的大小,即該存儲器中有多少個這樣的存儲器。
  6. 一個n位寄存器可以在一條指派語句中直接指派,而一個完整的存儲器則不行,如果要對memory型存儲單元進行讀寫,則必須要指定位址。
  7. 用parameter定義常量。

數制表示文法小結

  1. 下劃線‘_’可以随意用在整數和實數中,沒有實際意義,隻是為了提高可讀性。例如

    56

    等效于

    5\_6

  2. 整數負數使用補碼形式表示,而不能表示為諸如:

    16'h-9

    之類的形式。
  3. 在進行基本算數運算時,如果某一操作數有不确定的值

    X

    ,則運算結果也是不确定值

    X

指派過程文法小結

  1. 連續指派語句隻能用來對線網型變量進行指派,而不能對寄存器變量進行指派。一個線網型變量一旦被連續指派語句指派之後,指派語句有段的指派表達式将持續對被指派的變量産生連續驅動。隻有右端表達式中任一操作數的值發生變化,就會立即觸發對被指派變量的更新操作。
  2. 過程指派主要用于兩種結構化模式(initial子產品和always子產品)中的指派語句。在過程塊中隻能使用過程指派語句(不能在過程塊中出現連續指派語句),同時過程指派語句也隻能用在過程指派子產品中。
  3. 過程指派語句隻能對寄存器類型的變量(reg、integer、real和time)進行操作,經過指派後,上面這些變量的取值将保持不變,直道另一條指派語句對變量重新指派為止。
  4. memory型隻能對制定位址單元的整個字進行指派,不能對其中的某些位單獨指派。
  5. 在關系運算符中,若某個操作數的值不定,則關系是模糊的,傳回的是不定值

    X

  6. 執行個體算子

    ===

    !==

    可以用于比較含有

    X

    Z

    的操作數,在子產品的功能仿真中有着廣泛應用。
  7. 對組合邏輯模組化采用阻塞指派;對時序邏輯模組化采用非阻塞指派;用多個always塊分别對組合和時序邏輯模組化;盡量不要在同一個always塊内混合使用阻塞指派和非阻塞指派,如果在同一個always塊裡面既為組合邏輯,又為時序邏輯模組化,應使用非阻塞指派;不要在多個always塊中為同一個變量指派。

結構描述小結

  1. 一個程式可以有多個initial子產品、always子產品、task子產品和function子產品。initial子產品和always子產品都是同僚并行執行的,差別在于inital子產品隻執行一次,而always子產品則是不斷重複運作,task子產品和function子產品能被多次調用。initial子產品式面向仿真的,是不可綜合的。
  2. begin……end塊定義語句中的語句是串行執行的,而fork……join語句塊中的語句是并行執行的。
  3. 利用always實作組合邏輯時,要将所有的信号放進敏感清單中,而實作時序邏輯時卻不一定要将所有的結果放進敏感信号清單中。
  4. 延時控制隻能在仿真中使用,是不可綜合的,在綜合時,所有的延時控制都會被忽略。
  5. if語句中的else不能省,case語句的default分支雖然可以預設,但一般不要預設(這條與筆者的習慣不同,筆者習慣帶有預設)。
  6. case語句中的分支是并行執行的,各個分支沒有優先級,而if語句的選擇分支是串行執行的。
  7. forever循環語句用于連續執行過程語句,必須寫在initial子產品中。
  8. repeat循環語句執行指定循環數,如果循環計數表達式的值不确定,即為X或Z時,那麼循環次數按0處理。

Verilog實作相關小結

  1. 組合邏輯電路在邏輯功能上的特點是:任意時刻的輸出僅僅取決于該時刻的輸入,與電路原來的狀态無關。而時序邏輯電路在邏輯功能上的特點是:任意時刻的輸出不僅取決于當時的輸入信号,而且還取決與電路原來的狀态,或者說,還與以前的輸入有關。
  2. 狀态機一般包括組合邏輯和寄存器邏輯部兩部分。組合電路用于狀态譯碼和産生輸出信号,寄存器用于存儲狀态。
  3. 所謂高阻是輸出端屬于浮空狀态,隻有很小的漏電流流動,其電平随外部電平高低而定,門電平放棄對輸出電路的控制或者可以了解為輸出與電路是斷開的。雙向引腳的輸出就是在不使能情況下,輸出為高阻,而在使能情況下輸出為正常。

參考

本文主要内容來自《通信IC設計》,僅用于學習參考。

2021-04-13.