Verilog 數(shù)據(jù)類型
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)度遞減

1.1 連線型
連線表示邏輯單元的物理連接,可以對(duì)應(yīng)電路中的物理信號(hào)連線,這種變量不能保持電荷(trireg除外)
連線型變量必須要有驅(qū)動(dòng)源,一種是連接到一個(gè)門或者模塊的輸出端,另一種是用assign對(duì)它進(jìn)行賦值,若沒有驅(qū)動(dòng)源,將保持高阻態(tài)z
連線型有如下幾種:

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)

上述真值表是:同時(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

1.1.3 wand和triand

wand和triand便是與邏輯,因此當(dāng)0和1同時(shí)出現(xiàn)時(shí),結(jié)果是0&1
的結(jié)果
1.1.4 tri0和tri1
tri的特征是,若無驅(qū)動(dòng)源,其值為緊跟的數(shù)字

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í)間和變量的位寬