第10章 Verilog行為仿真_第1頁(yè)
第10章 Verilog行為仿真_第2頁(yè)
第10章 Verilog行為仿真_第3頁(yè)
第10章 Verilog行為仿真_第4頁(yè)
第10章 Verilog行為仿真_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第10章Verilog行為仿真測(cè)試程序TestBench一個(gè)完整的簡(jiǎn)單例子testfixture被測(cè)試器件DUT是一個(gè)二選一多路器。測(cè)試程序(testfixture)提供測(cè)試激勵(lì)及驗(yàn)證機(jī)制。Testfixture使用行為級(jí)描述,DUT采用門級(jí)描述。下面將給出Testfixture的描述、DUT的描述及如何進(jìn)行混合仿真。DUT被測(cè)器件(deviceundertest)moduleMUX2_1(outputwireout,inputwirea,b,sel);

//wiresel,a1,b1;//Thenetlist

not(sel_,sel);

and(a1,a,sel_);

and(b1,b,sel);

or(out,a1,b1);endmodule已定義的Verilog基本單元的實(shí)例a,b,sel是輸入端口,out是輸出端口。所有信號(hào)通過(guò)這些端口從模塊輸入/輸出。另一個(gè)模塊可以通過(guò)模塊名及端口說(shuō)明使用多路器。實(shí)例化多路器時(shí)不需要知道其實(shí)現(xiàn)細(xì)節(jié)。這正是自上而下設(shè)計(jì)方法的一個(gè)重要特點(diǎn)。模塊的實(shí)現(xiàn)可以是行為級(jí)也可以是門級(jí),但并不影響高層次模塊對(duì)它的使用。TestFixturetemplatemoduletestfixture;//Datatypedeclaration//Instantiatemodules//Applystimulus//Displayresultsendmodule為什么沒(méi)有端口?由于testfixture是最頂層模塊,不會(huì)被其它模塊實(shí)例化。因此不需要有端口。TestFixture—如何說(shuō)明實(shí)例moduletestfixture;//Datatypedeclaration//Instantiatemodules

MUX2_1

mux(o,a,b,s);//MUX2_1mux(.out(o),.a(a),.b(b),.sel(s));//Applystimulus//DisplayresultsendmodulemoduleMUX2_1(out,a,b,sel);//Portdeclarationsoutputout;inputa,b,sel;wireout,a,b,sel;wiresel_,a1,b1;//Thenetlist

not(sel_,sel);

and(a1,a,sel_);

and(b1,b,sel);

or(out,a1,b1);endmoduleMUX的實(shí)例化語(yǔ)句包括:模塊名稱:與引用模塊相同實(shí)例名稱:任意,但要符合標(biāo)記命名規(guī)則端口列表:與引用模塊的次序相同Testfixture激勵(lì)描述moduletestfixture;//Datatypedeclaration

rega,b,s;

wireo;

//MUXinstanceMUX2_1mux(o,a,b,s);//Applystimulusinitialbegin

a=0;b=1;s=0;#5b=0;#5b=1;s=1;#5a=1;#5$finish;end//DisplayresultsendmoduleTimeValues abs0 01050001001115111例子中,a,b,s說(shuō)明為reg類數(shù)據(jù)。reg類數(shù)據(jù)是寄存器類數(shù)據(jù)信號(hào),在重新賦值前一直保持當(dāng)前數(shù)據(jù)。#5用于指示等待5個(gè)時(shí)間單位。$finish是結(jié)束仿真的系統(tǒng)任務(wù)。完整的TestFixturemoduletestfixture;

//數(shù)據(jù)類型說(shuō)明rega,b,s;wireo;

//MUX實(shí)例化MUX2_1mux(o,a,b,s);

//施加激勵(lì)initialbegina=0;b=1;s=0;#5b=0;#5b=1;s=1;#5a=1;#5$finish;end//顯示結(jié)果initial$monitor($time,,"o=%ba=%bb=%bs=%b",o,a,b,s);endmodule0o=0a=0b=1s=05o=0a=0b=0s=010o=1a=0b=1s=115o=1a=1b=1s=1結(jié)果輸出系統(tǒng)任務(wù)與系統(tǒng)函數(shù)

◆系統(tǒng)任務(wù)和系統(tǒng)函數(shù)一般以符號(hào)“$”開頭。例如:$monitor,$finish等?!羰褂貌煌腣erilog仿真工具(如:VCS、Verilog-XL、ModelSim等)進(jìn)行仿真時(shí),這些系統(tǒng)任務(wù)和系統(tǒng)函數(shù)在使用方法上可能存在差異,應(yīng)根據(jù)使用手冊(cè)來(lái)使用?!粢话阍趇ntial或always過(guò)程塊中,調(diào)用系統(tǒng)任務(wù)和系統(tǒng)函數(shù)?!粲脩艨梢酝ㄟ^(guò)編程語(yǔ)言接口(PLI)將自己定義的系統(tǒng)任務(wù)和系統(tǒng)函數(shù)加到語(yǔ)言中,以進(jìn)行仿真和調(diào)試。$display和$write是兩個(gè)系統(tǒng)任務(wù),兩者的功能相同,都用于顯示模擬結(jié)果,其區(qū)別是$display在輸出結(jié)束后能自動(dòng)換行,而$write不能。$display和$write的使用格式為:$display(“格式控制符”,輸出變量名列表);$write(“格式控制符”,輸出變量名列表);1.$display與$write格式控制符說(shuō)明%h或%H以16進(jìn)制形式顯示%d或%D以10進(jìn)制形式顯示%o或%O以8進(jìn)制形式顯示%b或%B以2進(jìn)制形式顯示%c或%C以ASCII字符形式顯示%v或%V顯示net型數(shù)據(jù)的驅(qū)動(dòng)強(qiáng)度%m或%M顯示層次名%s或%S以字符串形式輸出%t或%T以當(dāng)前的時(shí)間格式顯示轉(zhuǎn)義字符說(shuō)明\n換行\(zhòng)tTAB鍵\\符號(hào)\\“符號(hào)“\ddd八進(jìn)制數(shù)ddd對(duì)應(yīng)的ASCII字符%%符號(hào)%格式控制符轉(zhuǎn)義字符$monitor、$strobe與$display、$write一樣也是屬于輸出控制類的系統(tǒng)任務(wù),$monitor與$strobe都提供了監(jiān)控和輸出參數(shù)列表中字符或變量的值的功能,其使用格式為:$monitor(“格式控制符”,輸出變量名列表);$strobe(“格式控制符”,輸出變量名列表);這里的格式控制符、輸出變量名列表與$display和$write中定義的完全相同。2.$monitor與$strobe$time、$realtime是屬于顯示仿真時(shí)間標(biāo)度的系統(tǒng)函數(shù)。這兩個(gè)函數(shù)被調(diào)用時(shí),都返回當(dāng)前時(shí)刻距離仿真開始時(shí)刻的時(shí)間量值。$time函數(shù)以64位整數(shù)值的形式返回模擬時(shí)間,$realtime函數(shù)則以實(shí)數(shù)型數(shù)據(jù)返回模擬時(shí)間。3.$time與$realtime系統(tǒng)任務(wù)$finish與$stop用于對(duì)仿真過(guò)程進(jìn)行控制,分別表示結(jié)束仿真和中斷仿真。$finish與$stop的使用格式如下:$stop;$stop(n);$finish;$finish(n);n是$finish和$stop的參數(shù),n可以是0、1、2等值,分別表示如下含義。0:不輸出任何信息;1:給出仿真時(shí)間和位置;2:給出仿真時(shí)間和位置,還有其他一些運(yùn)行統(tǒng)計(jì)數(shù)據(jù)。4.$finish與$stop$random:產(chǎn)生隨機(jī)數(shù)的系統(tǒng)函數(shù),每次調(diào)用該函數(shù)將返回一個(gè)32位的隨機(jī)數(shù),該隨機(jī)數(shù)是一個(gè)帶符號(hào)的整數(shù)。一般用法為:$random%b其中b>0,它給出了一個(gè)范圍在0~b-1之間的隨機(jī)數(shù)。$random%15,產(chǎn)生一個(gè)0~14之間的隨機(jī)數(shù)。6.$random和文件操作文件操作:與c語(yǔ)言類似,Verilog也提供了很多文件輸出類的系統(tǒng)任務(wù),可將結(jié)果輸出到文件中。這類任務(wù)有:$fopen用于打開某個(gè)文件并準(zhǔn)備寫操作,$fclose用于關(guān)閉文件,$fdisplay、$fwrite、$fmonitor等系統(tǒng)任務(wù)則用于把文本寫入文件。用戶定義的原語(yǔ)用戶自定義元件

利用UDP(UserDefinedPrimitives)用戶可以自己定義基本邏輯元件的功能,用戶可以象調(diào)用基本門元件一樣來(lái)調(diào)用這些自己定義的元件。UDP關(guān)鍵詞為primitive和endprimitive。與一般的模塊相比,UDP模塊具有下面一些特點(diǎn):◆UDP的輸出端口只能有一個(gè),且必須位于端口列表的第一項(xiàng)。只有輸出端口能被定義為reg類型?!鬠DP的輸入端口可有多個(gè),一般時(shí)序電路UDP的輸入端口可多至9個(gè),組合電路UDP的輸入端口可多至10個(gè)?!羲械亩丝谧兞勘仨毷?位標(biāo)量。◆在table表項(xiàng)中,只能出現(xiàn)0、1、x三種狀態(tài),不能出現(xiàn)z狀態(tài)。primitive元件名(輸出端口,輸入端口1,輸入端口2,…)output輸出端口名;input輸入端口1,輸入端口2,…;reg輸出端口名;initialbegin輸出端口或內(nèi)部寄存器賦初值(0,1或x);endtable//輸入1輸入2……:輸出真值列表endtableendprimitive定義UDP的語(yǔ)法組合邏輯示例:2-1多路器舉例說(shuō)明primitivemultiplexer(o,a,b,s);outputo;inputs,a,b;table//abs:o0?1:0;1?1:1;?00:0;?10:1;00x:0;11x:1;endtableendprimitive原語(yǔ)名輸出端口必須為第一個(gè)端口注:在模塊外定義UDP。如果在表中沒(méi)有規(guī)定輸入組合,將輸出不確定邏輯值(x)。表的列中元素的順序應(yīng)與端口列表中的一致。表中的?的意義是:重復(fù)的輸入0,1或任意不確定邏輯值(x)。表中開始兩行表示:當(dāng)s等于1時(shí),不管b邏輯值如何變化,輸出o將與輸入a保持一致。表中的下兩行表示:當(dāng)s等于0時(shí),不管a邏輯值如何變化,輸出o將與輸入b保持一致。表中的最后兩行使此器件的描述更加的全面、準(zhǔn)確。它們表示:當(dāng)輸入a和b的邏輯值相同時(shí),如果sel邏輯值不確定,則輸出o的值將與輸入a和b的值相同。這種行為不能使用Verilog語(yǔ)言提供的基本原語(yǔ)元件進(jìn)行建模。UDP將x作為實(shí)際的未知值,而不是Verilog語(yǔ)言邏輯值來(lái)進(jìn)行處理,因此使其比Verilog語(yǔ)言提供的基本原語(yǔ)元件更加準(zhǔn)確。舉例說(shuō)明可以只使用兩個(gè)UDP來(lái)描述全加器的邏輯功能。//全加器進(jìn)位實(shí)現(xiàn)部分primitiveU_ADDR2_C(CO,A,B,CI);outputCO;inputA,B,CI,table//ABCI:CO11?:1;1?1:1;?11:1;00?:0;0?0:0;?00:0;endtalbeendprimitive組合邏輯示例:全加器向上一級(jí)進(jìn)位下一級(jí)來(lái)的進(jìn)位//全加器求和實(shí)現(xiàn)部分primitiveU_ADDR2_S(S,A,B,CI);outputS;inputA,B,CI;table//ABCI:S000:0;001:1;010:1;011:0;100:1;101:0;110:0;111:1;endtableendprimitive組合邏輯示例:全加器若使用UDP設(shè)計(jì)全加器,僅需要兩個(gè)UDP;而使用Verilog原語(yǔ)元件,則需要5個(gè)Verilog語(yǔ)言提供的基本原語(yǔ)元件。當(dāng)設(shè)計(jì)需要使用大量全加器時(shí),采用UDP來(lái)表示全加器,將大大減少內(nèi)存的需要。事件的數(shù)目將大大降低。?表示邏輯值可以為0,1或x。組合邏輯示例:全加器primitivelatch(q,clock,data);outputq;regq;inputclock,data;initialq=1’b1;table//clockdatacurrentnext//statestate01:?1;00:?0;1?::-;endtableendprimitive電平敏感的時(shí)序邏輯示例:鎖存器注意此寄存器的用法,此寄存器用來(lái)存儲(chǔ)。輸出初始化為1‘b1.?表示無(wú)須考慮輸入和當(dāng)前狀態(tài)的值注:鎖存器的動(dòng)作行為如下:當(dāng)時(shí)鐘信號(hào)為0時(shí),輸入數(shù)據(jù)的值直接傳給輸出。當(dāng)時(shí)鐘信號(hào)為1時(shí),輸出保持當(dāng)前狀態(tài)不變。nextstate欄中的“-”表示輸出保持不變。輸出必須定義為寄存器類型,用來(lái)保存前一個(gè)狀態(tài)。initialq=1’b1;是時(shí)序UDP的初始化語(yǔ)句。使用此語(yǔ)句可以在仿真的開始對(duì)輸出進(jìn)行賦值。在實(shí)際的部件模型中,很少使用初始賦值。但在測(cè)試UDP的功能時(shí),初始賦值相當(dāng)有用。電平敏感的時(shí)序邏輯示例:鎖存器primitived_edge_ff(q,clk,data);outputq;inputclk,data;re

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論