不管是基于什么方法學(xué)Verilog或者SystemVerilog編寫測試平臺(tái),進(jìn)行仿真的時(shí)候都需要將設(shè)計(jì)代碼例化在頂層模塊(module)中,然后將頂層名指定在仿真命令中,但是從來沒有把頂層進(jìn)行例化。因?yàn)榭赡軙?huì)想如果頂層再例化就需要把頂層再例化到另一個(gè)module中,然后將這個(gè)module的名字再作為新的頂層。。。這樣下去就沒有窮盡了。其實(shí)在Verilog和SystemVerilog中,module的例化一般要么是在設(shè)計(jì)層次結(jié)構(gòu)中被例化,以形成整個(gè)層次化的設(shè)計(jì),要么就是作為整個(gè)仿真環(huán)境的頂層module出現(xiàn)進(jìn)行例化,并且此時(shí)給大家的假象是沒有例化。其中第一種例化方式就是“顯式例化”,后一種頂層module實(shí)際上是以一種“隱式例化”的方式存在的,那么“隱式例化”和“顯式例化”都有哪些特點(diǎn)和使用上的區(qū)別呢?本文將示例說明。
1 隱式例化
隱式例化常見的情況主要出現(xiàn)在頂層模塊在仿真時(shí),頂層模塊會(huì)被隱式的進(jìn)行一次例化,并且這個(gè)例化名與頂層module的名字,這樣的一個(gè)實(shí)例稱之為“頂層實(shí)例”,即頂層的“隱式例化”
【示例】
【仿真結(jié)果】
示例中,在頂層top_tb中例化了兩個(gè)module(h1和h2),例化名分別是top_tb和u2,其中h1中又例化了h2,也就是h2在頂層top_tb和h1中分別進(jìn)行了例化,在例化時(shí)分別傳遞了對應(yīng)的參數(shù)。其中h1和h2在各層次的例化屬于“顯式例化”,整個(gè)代碼的層次結(jié)構(gòu)如下圖所示。
示例中第8行通過層次化引用將u2中的datin的值傳遞給了頂層變量sig1,sig1的值來自于通過$root指向頂層例化名(top_tb,此時(shí)的top_tb就是頂層模塊top_tb的“隱式例化”名),在通過頂層top_tb引用其中u2(h2例化),從而實(shí)現(xiàn)了對于u2中datin的訪問,因?yàn)榇藭r(shí)datin的值來自于h2在頂層中例化時(shí)傳遞的參數(shù)“4’h1110”,所以此時(shí)sig1值為“4’h1110”;
示例中第9行,依然是通過層次化引用的方式將u2中的datin的值傳遞給了頂層變量sig2,但是此時(shí)需要注意的是這里的top_tb并不是頂層module名也不是頂層module的例化名,而是當(dāng)前作用域內(nèi)h1的例化名(top_tb),這里h1在頂層例化時(shí)傳入的參數(shù)為“4’h0001”該參數(shù)通過h1中h2例化的u2傳遞給了datin,此時(shí)datin的值為“4’h0010”,所以此時(shí)sig2獲得數(shù)值為“4’h0010”;
2顯式例化
除了頂層以外,其他模塊的使用都是建立在對應(yīng)module“顯式例化”的基礎(chǔ)之上,正是通過模塊之間的一次或者多次例化形成了層次化的設(shè)計(jì)。
【示例】
【仿真結(jié)果】
示例仿真結(jié)果可以看到,h1、h2、h3、h4分別在不同的模塊中進(jìn)行了例化,形成了層次化的結(jié)構(gòu),這幾個(gè)模塊的例化都屬于“顯式例化”。
通過上述示例,在IEEE1800目前版本的SystemVerilog中“隱式例化”主要是指頂層模塊的例化,不需要指明實(shí)例名,其實(shí)例名與模塊名相同,“顯式例化”則需要指明模塊名和實(shí)例名,主要用于模塊之間形成層次化結(jié)構(gòu)時(shí)各模塊之間的相互實(shí)例化。
審核編輯 :李倩
-
仿真
+關(guān)注
關(guān)注
50文章
4044瀏覽量
133426 -
Verilog
+關(guān)注
關(guān)注
28文章
1345瀏覽量
109989 -
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28330
原文標(biāo)題:仿真時(shí)為什么頂層不例化
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論