Verilog 文法小結
下面的内容是常用的Verilog文法小結。
資料類型文法小結
- wire型資料通常用assign關鍵字進行指派。wire隻能被assign連續指派,reg隻能在initial和always中指派。input端口隻能定義成wire型。如果端口沒有聲明,則預設是wire線網型,且輸入端口隻能是wire線網型。
- reg是寄存器資料類型的關鍵字。寄存器是資料存儲單元的抽象,通過指派語句可以改變寄存器存儲的值,相當于改變觸發器存儲的值。reg型常用來表示always子產品内的指定信号,代表觸發器。在always塊内被指派的每一個信号都必須定義為reg型,即指派操作符的左端變量必須是reg型。
- 所謂的always必須用reg的意思是always裡面的指派語句中的被指派變量為reg型,而不是說在always裡面出現的變量都為reg型。
- reg型與wire型的差別在于:reg型保持最後一次的指派,而wire型需要持續的驅動。
- memory型通過對reg型變量建立數組以對存儲器模組化。
的存儲器名reg [n-1:0]
定義了存儲器中每一個存儲單元的大小,即該存儲器單元是一個[m-1:0] reg [n-1:0]
位寬的寄存器,n
代表了存儲器的大小,即該存儲器中有多少個這樣的存儲器。[m-1:0]
- 一個n位寄存器可以在一條指派語句中直接指派,而一個完整的存儲器則不行,如果要對memory型存儲單元進行讀寫,則必須要指定位址。
- 用parameter定義常量。
數制表示文法小結
- 下劃線‘_’可以随意用在整數和實數中,沒有實際意義,隻是為了提高可讀性。例如
等效于56
;5\_6
- 整數負數使用補碼形式表示,而不能表示為諸如:
之類的形式。16'h-9
- 在進行基本算數運算時,如果某一操作數有不确定的值
,則運算結果也是不确定值X
。X
指派過程文法小結
- 連續指派語句隻能用來對線網型變量進行指派,而不能對寄存器變量進行指派。一個線網型變量一旦被連續指派語句指派之後,指派語句有段的指派表達式将持續對被指派的變量産生連續驅動。隻有右端表達式中任一操作數的值發生變化,就會立即觸發對被指派變量的更新操作。
- 過程指派主要用于兩種結構化模式(initial子產品和always子產品)中的指派語句。在過程塊中隻能使用過程指派語句(不能在過程塊中出現連續指派語句),同時過程指派語句也隻能用在過程指派子產品中。
- 過程指派語句隻能對寄存器類型的變量(reg、integer、real和time)進行操作,經過指派後,上面這些變量的取值将保持不變,直道另一條指派語句對變量重新指派為止。
- memory型隻能對制定位址單元的整個字進行指派,不能對其中的某些位單獨指派。
- 在關系運算符中,若某個操作數的值不定,則關系是模糊的,傳回的是不定值
。X
- 執行個體算子
和===
可以用于比較含有!==
,X
的操作數,在子產品的功能仿真中有着廣泛應用。Z
- 對組合邏輯模組化采用阻塞指派;對時序邏輯模組化采用非阻塞指派;用多個always塊分别對組合和時序邏輯模組化;盡量不要在同一個always塊内混合使用阻塞指派和非阻塞指派,如果在同一個always塊裡面既為組合邏輯,又為時序邏輯模組化,應使用非阻塞指派;不要在多個always塊中為同一個變量指派。
結構描述小結
- 一個程式可以有多個initial子產品、always子產品、task子產品和function子產品。initial子產品和always子產品都是同僚并行執行的,差別在于inital子產品隻執行一次,而always子產品則是不斷重複運作,task子產品和function子產品能被多次調用。initial子產品式面向仿真的,是不可綜合的。
- begin……end塊定義語句中的語句是串行執行的,而fork……join語句塊中的語句是并行執行的。
- 利用always實作組合邏輯時,要将所有的信号放進敏感清單中,而實作時序邏輯時卻不一定要将所有的結果放進敏感信号清單中。
- 延時控制隻能在仿真中使用,是不可綜合的,在綜合時,所有的延時控制都會被忽略。
- if語句中的else不能省,case語句的default分支雖然可以預設,但一般不要預設(這條與筆者的習慣不同,筆者習慣帶有預設)。
- case語句中的分支是并行執行的,各個分支沒有優先級,而if語句的選擇分支是串行執行的。
- forever循環語句用于連續執行過程語句,必須寫在initial子產品中。
- repeat循環語句執行指定循環數,如果循環計數表達式的值不确定,即為X或Z時,那麼循環次數按0處理。
Verilog實作相關小結
- 組合邏輯電路在邏輯功能上的特點是:任意時刻的輸出僅僅取決于該時刻的輸入,與電路原來的狀态無關。而時序邏輯電路在邏輯功能上的特點是:任意時刻的輸出不僅取決于當時的輸入信号,而且還取決與電路原來的狀态,或者說,還與以前的輸入有關。
- 狀态機一般包括組合邏輯和寄存器邏輯部兩部分。組合電路用于狀态譯碼和産生輸出信号,寄存器用于存儲狀态。
- 所謂高阻是輸出端屬于浮空狀态,隻有很小的漏電流流動,其電平随外部電平高低而定,門電平放棄對輸出電路的控制或者可以了解為輸出與電路是斷開的。雙向引腳的輸出就是在不使能情況下,輸出為高阻,而在使能情況下輸出為正常。
參考
本文主要内容來自《通信IC設計》,僅用于學習參考。
2021-04-13.