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


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

對於源碼模塊的變量定義,何時定義為reg、何時定義為wire?它們各自又有什么特性和物理意義?

1. wire

wire是網絡數據類型的關鍵字。

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

語言特性

wire型數據常用來表示用於

  • 結構化定義

  • assign為代表的連續賦值描述

    也叫數據流描述方式、RTL級描述方式

指定的組合邏輯信號。

程序模塊中,輸入輸出信號類型缺省時,自動定義為wire型。

wire型信號可以用作任何表達式的輸入,也可以用作“assign”語句或實例元件的輸出。

示例:

1 wire a; 
2 //定義了一個一位的wire型數據 
3 wire [7:0] b; 
4 //定義了一個八位的wire型數據 
5 wire [4:1] c, d;
6 //定義了兩個四位的wire型數據
7 //注意是兩個

物理意義

表示線。

上面的

 wire [7:0] b;  

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

從這個層次可以理解為什么

1 wire [0:7] b;
2 3 wire [1:8] b;
4 5 wire [8:1] b;

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

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

2. reg

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

語言特性

reg型數據常用來表示用於always模塊內的指定信號,常代表觸發器。即常用在行為描述語句中。

在always塊內被賦值的每一個信號都必須定義成reg型。

示例:

1 reg rega; 
2 //定義了一個一位的名為rega的reg型數據 
3 reg [3:0] regb; 
4 //定義了一個四位的名為regb的reg型數據 
5 reg [4:1] regc, regd; 
6 //定義了兩個四位的名為regc和regd的reg型數據

reg型數據可以賦正值,也可以賦負值。

物理意義

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

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

另外強調一點:

reg型只表示被定義的信號將用在always塊內,理解這一點很重要。並不是說reg型信號一定是寄存器或觸發器的輸出。雖然reg信號常常是寄存器、觸發器的輸出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM