天天看點

數字邏輯實踐5->Verilog文法 | wire 與 reg 的選擇與特性總結

Verilog中,定義一個資料變量,我們應該使用wire還是reg呢?它們分别有怎樣的特性和實體意義呢?

問題起因:最初學習數字邏輯設計理論的時候還沒有注意到,在實驗課上寫代碼的時候發現了一個問題:

對于源碼子產品的變量定義,何時定義為reg、何時定義為wire?它們各自又有什麼特性和實體意義?

wire是網絡資料類型的關鍵字。

網絡資料類型表示結構實體(例如門)之間的實體連接配接(線)。網絡類型的變量不能儲存值。

wire型資料常用來表示用于

結構化定義

assign為代表的連續指派描述

也叫資料流描述方式、RTL級描述方式

指定的組合邏輯信号。

程式子產品中,輸入輸出信号類型預設時,自動定義為wire型。

wire型信号可以用作任何表達式的輸入,也可以用作“assign”語句或執行個體元件的輸出。

示例:

表示線。

上面的

就表示一組編号從7到0的八條線。

從這個層次可以了解為什麼

都是符合定義不會報錯的;

也可以了解其可以作為任何表達式的輸入和輸出。

reg是寄存器資料類型的關鍵字。而寄存器是資料存儲單元的抽象。

reg型資料常用來表示用于always子產品内的指定信号,常代表觸發器。即常用在行為描述語句中。

在always塊内被指派的每一個信号都必須定義成reg型。

reg型資料可以賦正值,也可以賦負值。

表示類寄存器(registor)的存儲單元。

聯系上面的語言特性,指派語句的作用就是改變一組觸發器存儲的值。

另外強調一點:

reg型隻表示被定義的信号将用在always塊内,了解這一點很重要。并不是說reg型信号一定是寄存器或觸發器的輸出。雖然reg信号常常是寄存器、觸發器的輸出。