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

climerecho發表於2021-11-28

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

對於原始碼模組的變數定義,何時定義為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訊號常常是暫存器、觸發器的輸出。

 

相關文章