Verilog 數(shù)據(jù)類型
Verilog中,數(shù)據(jù)類型主要分為兩類:物理數(shù)據(jù)類型(主要包括連線型和寄存器型)和抽象數(shù)據(jù)類型(主要包括:整型、時(shí)間型、實(shí)型和參數(shù)型)
物理數(shù)據(jù)類型與實(shí)際硬件電路的硬件關(guān)系比較明顯,抽象程度比較低
抽象數(shù)據(jù)類型是進(jìn)行輔助設(shè)計(jì)和驗(yàn)證的數(shù)據(jù)類型
1 物理數(shù)據(jù)類型
Verilog中主要的物理數(shù)據(jù)類型是:連線型、寄存器型、存儲(chǔ)器型
使用四種邏輯電平(0,1,x,z)和八種信號(hào)強(qiáng)度(strength)對(duì)實(shí)際的電路進(jìn)行建模
四種邏輯電平是對(duì)信號(hào)的抽象
信號(hào)強(qiáng)度表示數(shù)字電路中不同強(qiáng)度的驅(qū)動(dòng)源,用來解決不同驅(qū)動(dòng)強(qiáng)度下的賦值沖突,八種強(qiáng)度如下,自上往下,強(qiáng)度遞減
| 標(biāo)記符號(hào) | 名稱 | 類型 |
|---|---|---|
| supply | 電源級(jí)驅(qū)動(dòng) | 驅(qū)動(dòng) |
| strong | 強(qiáng)驅(qū)動(dòng) | 驅(qū)動(dòng) |
| pull | 上拉級(jí)驅(qū)動(dòng) | 驅(qū)動(dòng) |
| large | 大容性 | 存儲(chǔ) |
| weak | 弱驅(qū)動(dòng) | 驅(qū)動(dòng) |
| medium | 中性驅(qū)動(dòng) | 存儲(chǔ) |
| small | 小容性 | 存儲(chǔ) |
| highz | 高容性 | 高祖 |
1.1 連線型
連線表示邏輯單元的物理連接,可以對(duì)應(yīng)電路中的物理信號(hào)連線,這種變量不能保持電荷(trireg除外)
連線型變量必須要有驅(qū)動(dòng)源,一種是連接到一個(gè)門或者模塊的輸出端,另一種是用assign對(duì)它進(jìn)行賦值,若沒有驅(qū)動(dòng)源,將保持高阻態(tài)z
連線型有如下幾種:
| 連線型數(shù)據(jù)類型 | 功能說明 |
|---|---|
| wire,tri | 標(biāo)準(zhǔn)連線(缺省為該類型) |
| wor,trior | 多重驅(qū)動(dòng)時(shí),具有線或特性的連線型 |
| trireg | 具有電荷保持特性的連線型數(shù)據(jù) |
| tri1 | 上拉電阻 |
| tri0 | 下拉電阻 |
| supply0 | 電源線,用于對(duì)“地”建模,為低電平0 |
| supply1 | 電源線,用于對(duì)電源線建模,為高電平1 |
| wand, trand | 多重驅(qū)動(dòng)時(shí),具有線與特性的連線型 |
1.1.1 wire和tri
wire(連線)和tri(三態(tài)線)是最常見的,語法和語義是一致的。
不同之處如下:
wire型變量通常用來表示單個(gè)驅(qū)動(dòng)門或assign賦值語句的連線
-
tri型變量用來表示多驅(qū)動(dòng)器驅(qū)動(dòng)的連線型數(shù)據(jù),主要用于定義三態(tài)的線網(wǎng)
wire/tri 0 1 x z 0 0 x x 0 1 x 1 x 1 x x x x x z 0 1 x z 上述真值表是:同時(shí)有兩個(gè)驅(qū)動(dòng)強(qiáng)度相同的驅(qū)動(dòng)源來驅(qū)動(dòng)wire或tri變量時(shí)的輸出結(jié)果
注意:這里并非是與邏輯,可以理解為都想給線賦值,因此當(dāng)出現(xiàn)0和1同時(shí)賦值時(shí),由于驅(qū)動(dòng)強(qiáng)度相同,因此最終結(jié)果是不定值x
1.1.2 wor和trior
| wor/trior | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 0 | 1 | x | 0 |
| 1 | 1 | 1 | 1 | 1 |
| x | x | 1 | 1 | 1 |
| z | 0 | 1 | x | z |
1.1.3 wand和triand
| wand/triand | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | x | 1 |
| x | 0 | x | x | x |
| z | 0 | 1 | x | z |
wand和triand便是與邏輯,因此當(dāng)0和1同時(shí)出現(xiàn)時(shí),結(jié)果是0&1的結(jié)果
1.1.4 tri0和tri1
tri的特征是,若無驅(qū)動(dòng)源,其值為緊跟的數(shù)字
| tri0/tri1 | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 0 | x | x | 0 |
| 1 | x | 1 | x | 1 |
| x | x | x | x | x |
| z | 0 | 1 | x | 0/1 |
1.1.5 supply0和supply1
supply0表示GND,supply1表示VCC
1.1.6 trireg線網(wǎng)
trireg線網(wǎng)型可以存儲(chǔ)數(shù)值,類似于寄存器數(shù)據(jù)類型,用于電容節(jié)點(diǎn)的建模。
當(dāng)三態(tài)寄存器(trireg)的所有驅(qū)動(dòng)源都處于高阻態(tài)z時(shí),trireg保持作用在線網(wǎng)的最后一個(gè)邏輯值。
trireg的缺省初始值為x
存儲(chǔ)電荷強(qiáng)度有如下幾個(gè)關(guān)鍵字控制:
small、medium、large,默認(rèn)電荷強(qiáng)度為medium
對(duì)于trireg型數(shù)據(jù),仿真時(shí)其電荷衰減時(shí)間應(yīng)制定為延遲時(shí)間
1.2 寄存器型
reg型變量對(duì)應(yīng)的硬件電路元件具有狀態(tài)保持作用,能夠存儲(chǔ)數(shù)據(jù)
reg型變量常用于行為級(jí)描述,由過程賦值語句對(duì)其進(jìn)行賦值
reg和wire的區(qū)別:
- reg保持最后一次的賦值,wire需要持續(xù)的驅(qū)動(dòng)
- reg默認(rèn)初始值為不定值
x,wire默認(rèn)初始值為不定值z
reg型變量一般是無符號(hào)的,若將負(fù)數(shù)賦值給reg型變量,會(huì)自動(dòng)轉(zhuǎn)成其補(bǔ)碼形式
1.3 連線型和寄存器型數(shù)據(jù)聲明對(duì)比
1.3.1 連線型數(shù)據(jù)聲明
語法為<net_declaration><drive_strength><range><delay><list_of_variables>
drive_strength、range、delay是可選項(xiàng)目,list_of_variables為必選項(xiàng)
- net_declaration:數(shù)據(jù)的類型,可以是wire、tri、tri0、tri1、wand、triand、trior、wor、trireg中的任意一個(gè)
- drive_strength:驅(qū)動(dòng)強(qiáng)度
- range:用來指定數(shù)據(jù)位標(biāo)量或矢量。默認(rèn)表示數(shù)據(jù)類型為1bit的標(biāo)量,超過1bit就為矢量形式
- delay:指定仿真延遲時(shí)間
- list_of_variables:變量名稱
1.3.2 寄存器型數(shù)據(jù)聲明
語法為:reg <range><list_of_variables>
- range:可選項(xiàng),確定變量位寬
- list_of_variables:變量名稱
1.4 存儲(chǔ)器型
存儲(chǔ)器型本質(zhì)上是寄存器型變量的陣列,所以用reg型變量建立寄存器組實(shí)現(xiàn)存儲(chǔ)器功能。
存儲(chǔ)器變量聲明格式:reg<range1><name_of_list><range2>
其中,range1和range2是可選項(xiàng),缺省是都為1
說明:
- range1:表示存儲(chǔ)器中寄存器的位寬
- range2:表示寄存器的個(gè)數(shù)
例如:reg [7:0] mem [255:0]表示由256個(gè)位寬為8bit的寄存器組成的存儲(chǔ)器
2 抽象型數(shù)據(jù)類型
抽象型數(shù)據(jù)類型有:整型(integer)、時(shí)間型(time)、實(shí)型(real)和參數(shù)型(parameter)
2.1 整型
整型數(shù)據(jù)常用于對(duì)循環(huán)控制變量的說明,在算術(shù)運(yùn)算中被視為二進(jìn)制補(bǔ)碼形式的有符號(hào)數(shù)
整型數(shù)據(jù)默認(rèn)為32bit有符號(hào)數(shù)
2.2 時(shí)間型
時(shí)間型與整型數(shù)據(jù)類似,不過時(shí)間型是64bit無符號(hào)數(shù)
時(shí)間型數(shù)據(jù)主要用于對(duì)模擬時(shí)間的存儲(chǔ)與計(jì)算處理,常與系統(tǒng)函數(shù)$time一起使用
2.3 實(shí)型
Verilog支持實(shí)型常量與變量,實(shí)型數(shù)據(jù)在機(jī)器碼表示法中是浮點(diǎn)型數(shù)據(jù),可用于對(duì)延遲時(shí)間的計(jì)算
2.4 參數(shù)型
參數(shù)型數(shù)據(jù)屬于常量,在仿真開始之前就被賦值,并在仿真過程中保持不變
參數(shù)定義方法可以提高程序可可讀性和可維護(hù)性,常用來定義延遲時(shí)間和變量的位寬