在Verilog和SystemVerilog中經(jīng)常需要在使用變量或者線網(wǎng)之前,期望變量和線網(wǎng)有對(duì)應(yīng)的初始值,為此經(jīng)常會(huì)在過(guò)程塊或者連續(xù)賦值語(yǔ)句中對(duì)相關(guān)變量或者線網(wǎng)進(jìn)行初始化,這樣的初始化我們稱之為“顯式初始化”,其實(shí)除了這種初始化操作方式之外,也有人會(huì)在變量和線網(wǎng)聲明的同時(shí)進(jìn)行初始化,這種初始化方式成為“隱式初始化”,只不過(guò)在使用“隱式初始化”時(shí)經(jīng)常會(huì)出現(xiàn)一些不期望的結(jié)果,下面將通過(guò)示例對(duì)這些初始化操作進(jìn)行說(shuō)明。
1 線網(wǎng)初始化
【示例】
【仿真結(jié)果】
示例中,net1在聲明的同時(shí)進(jìn)行了賦值操作(初始化),同時(shí)在代碼中通過(guò)連續(xù)賦值語(yǔ)句對(duì)net1又進(jìn)行了賦值(與聲明時(shí)初始化的值不同),此時(shí)從仿真結(jié)果可以觀測(cè)到net1顯示結(jié)果為不定態(tài);net2在聲明時(shí)并沒有進(jìn)行賦值操作,對(duì)其的賦值操作發(fā)生在連續(xù)賦值語(yǔ)句中,從仿真結(jié)果可以看到net2并沒有出現(xiàn)不定態(tài),其獲得了確切的數(shù)值。
出現(xiàn)線網(wǎng)net1這種現(xiàn)象的主要是因?yàn)?strong>線網(wǎng)聲明時(shí)的“初始化”是一種“隱式的連續(xù)賦值語(yǔ)句”,并且在仿真過(guò)程中會(huì)一直保持,當(dāng)有其他語(yǔ)句驅(qū)動(dòng)該線網(wǎng)時(shí),此時(shí)相當(dāng)于對(duì)該線網(wǎng)進(jìn)行了多驅(qū)動(dòng),在仿真波形上就會(huì)表現(xiàn)出不定態(tài)。那么對(duì)于變量的初始化操作是否也會(huì)像示例中net1這樣的情況呢?請(qǐng)看下例。
2 變量初始化
【示例】
【仿真結(jié)果】
編譯報(bào)錯(cuò),從報(bào)錯(cuò)信息上可以知道,var1同時(shí)被過(guò)程塊代碼和結(jié)構(gòu)級(jí)代碼驅(qū)動(dòng),這主要是因?yàn)関ar1為變量,在聲明時(shí)進(jìn)行了初始化,同時(shí)又在連續(xù)賦值語(yǔ)句中也進(jìn)行了賦值,從而導(dǎo)致了編譯錯(cuò)誤,即錯(cuò)誤原因是變量聲明時(shí)進(jìn)行了初始化的話,那么該變量不能作為連續(xù)賦值語(yǔ)句的賦值對(duì)象進(jìn)行使用,即SystemVerilog中不允許對(duì)于同一變量在連續(xù)賦值語(yǔ)句和過(guò)程語(yǔ)句中同驅(qū)動(dòng)。對(duì)上述代碼進(jìn)行修改,如下。
【示例】
【仿真結(jié)果】
示例中,var1聲明時(shí)進(jìn)行了初始化,但是本例中并沒有其他連續(xù)賦值語(yǔ)句對(duì)該變量的值進(jìn)行修改驅(qū)動(dòng),所以此時(shí)var1中的值在仿真過(guò)程中一直保持,var2在聲明時(shí)沒有進(jìn)行初始化,其值由連續(xù)賦值語(yǔ)句驅(qū)動(dòng)為4’b0100,可見,SystemVerilog中變量可以用于連續(xù)賦值語(yǔ)句中,var3聲明時(shí)進(jìn)行了初始化,但在過(guò)程塊(initial)中對(duì)var3進(jìn)行了修改,此時(shí)var3的值更新為了過(guò)程塊中的值,由此我們可以看出,變量在聲明時(shí)的初始化先于過(guò)程塊的執(zhí)行,其次變量聲明時(shí)的初始化并不具有持續(xù)性,會(huì)被后續(xù)的賦值操作所更新,否則就會(huì)出現(xiàn)多驅(qū)動(dòng)情況,即并不具有“隱式連續(xù)賦值的特點(diǎn)”。
通過(guò)上述示例可以看到,線網(wǎng)聲明時(shí)的初始化實(shí)際上是一種“隱式連續(xù)賦值語(yǔ)句”,其“初始化”具有持續(xù)性,而變量聲明時(shí)的初始化會(huì)被后續(xù)的賦值操作更新,并不具有持續(xù)性,同時(shí)需要注意如果變量在聲明時(shí)進(jìn)行初始化,此時(shí)該變量不能同時(shí)被連續(xù)賦值語(yǔ)句驅(qū)動(dòng)。
審核編輯:劉清
-
仿真器
+關(guān)注
關(guān)注
14文章
1018瀏覽量
83746 -
VaR
+關(guān)注
關(guān)注
0文章
39瀏覽量
11341 -
Verilog語(yǔ)言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8235
原文標(biāo)題:verilog/systemverilog 中隱藏的初始化
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論