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信号常常是寄存器、觸發器的輸出。