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

下載本文檔

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

文檔簡介

第10章Verilog行為仿真測試程序TestBench一個(gè)完整的簡單例子testfixture被測試器件DUT是一個(gè)二選一多路器。測試程序(testfixture)提供測試激勵(lì)及驗(yàn)證機(jī)制。Testfixture使用行為級描述,DUT采用門級描述。下面將給出Testfixture的描述、DUT的描述及如何進(jìn)行混合仿真。DUT被測器件(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是輸出端口。所有信號通過這些端口從模塊輸入/輸出。另一個(gè)模塊可以通過模塊名及端口說明使用多路器。實(shí)例化多路器時(shí)不需要知道其實(shí)現(xiàn)細(xì)節(jié)。這正是自上而下設(shè)計(jì)方法的一個(gè)重要特點(diǎn)。模塊的實(shí)現(xiàn)可以是行為級也可以是門級,但并不影響高層次模塊對它的使用。TestFixturetemplatemoduletestfixture;//Datatypedeclaration//Instantiatemodules//Applystimulus//Displayresultsendmodule為什么沒有端口?由于testfixture是最頂層模塊,不會(huì)被其它模塊實(shí)例化。因此不需要有端口。TestFixture—如何說明實(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í)例化語句包括:模塊名稱:與引用模塊相同實(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說明為reg類數(shù)據(jù)。reg類數(shù)據(jù)是寄存器類數(shù)據(jù)信號,在重新賦值前一直保持當(dāng)前數(shù)據(jù)。#5用于指示等待5個(gè)時(shí)間單位。$finish是結(jié)束仿真的系統(tǒng)任務(wù)。完整的TestFixturemoduletestfixture;

//數(shù)據(jù)類型說明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ù)一般以符號“$”開頭。例如:$monitor,$finish等?!羰褂貌煌腣erilog仿真工具(如:VCS、Verilog-XL、ModelSim等)進(jìn)行仿真時(shí),這些系統(tǒng)任務(wù)和系統(tǒng)函數(shù)在使用方法上可能存在差異,應(yīng)根據(jù)使用手冊來使用?!粢话阍趇ntial或always過程塊中,調(diào)用系統(tǒng)任務(wù)和系統(tǒng)函數(shù)?!粲脩艨梢酝ㄟ^編程語言接口(PLI)將自己定義的系統(tǒng)任務(wù)和系統(tǒng)函數(shù)加到語言中,以進(jìn)行仿真和調(diào)試。$display和$write是兩個(gè)系統(tǒng)任務(wù),兩者的功能相同,都用于顯示模擬結(jié)果,其區(qū)別是$display在輸出結(jié)束后能自動(dòng)換行,而$write不能。$display和$write的使用格式為:$display(“格式控制符”,輸出變量名列表);$write(“格式控制符”,輸出變量名列表);1.$display與$write格式控制符說明%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)義字符說明\n換行\(zhòng)tTAB鍵\\符號\\“符號“\ddd八進(jìn)制數(shù)ddd對應(yīng)的ASCII字符%%符號%格式控制符轉(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用于對仿真過程進(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è)帶符號的整數(shù)。一般用法為:$random%b其中b>0,它給出了一個(gè)范圍在0~b-1之間的隨機(jī)數(shù)。$random%15,產(chǎn)生一個(gè)0~14之間的隨機(jī)數(shù)。6.$random和文件操作文件操作:與c語言類似,Verilog也提供了很多文件輸出類的系統(tǒng)任務(wù),可將結(jié)果輸出到文件中。這類任務(wù)有:$fopen用于打開某個(gè)文件并準(zhǔn)備寫操作,$fclose用于關(guān)閉文件,$fdisplay、$fwrite、$fmonitor等系統(tǒng)任務(wù)則用于把文本寫入文件。用戶定義的原語用戶自定義元件

利用UDP(UserDefinedPrimitives)用戶可以自己定義基本邏輯元件的功能,用戶可以象調(diào)用基本門元件一樣來調(diào)用這些自己定義的元件。UDP關(guān)鍵詞為primitive和endprimitive。與一般的模塊相比,UDP模塊具有下面一些特點(diǎn):◆UDP的輸出端口只能有一個(gè),且必須位于端口列表的第一項(xiàng)。只有輸出端口能被定義為reg類型?!鬠DP的輸入端口可有多個(gè),一般時(shí)序電路UDP的輸入端口可多至9個(gè),組合電路UDP的輸入端口可多至10個(gè)。◆所有的端口變量必須是1位標(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的語法組合邏輯示例:2-1多路器舉例說明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原語名輸出端口必須為第一個(gè)端口注:在模塊外定義UDP。如果在表中沒有規(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語言提供的基本原語元件進(jìn)行建模。UDP將x作為實(shí)際的未知值,而不是Verilog語言邏輯值來進(jìn)行處理,因此使其比Verilog語言提供的基本原語元件更加準(zhǔn)確。舉例說明可以只使用兩個(gè)UDP來描述全加器的邏輯功能。//全加器進(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ìn)位下一級來的進(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原語元件,則需要5個(gè)Verilog語言提供的基本原語元件。當(dāng)設(shè)計(jì)需要使用大量全加器時(shí),采用UDP來表示全加器,將大大減少內(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í)序邏輯示例:鎖存器注意此寄存器的用法,此寄存器用來存儲(chǔ)。輸出初始化為1‘b1.?表示無須考慮輸入和當(dāng)前狀態(tài)的值注:鎖存器的動(dòng)作行為如下:當(dāng)時(shí)鐘信號為0時(shí),輸入數(shù)據(jù)的值直接傳給輸出。當(dāng)時(shí)鐘信號為1時(shí),輸出保持當(dāng)前狀態(tài)不變。nextstate欄中的“-”表示輸出保持不變。輸出必須定義為寄存器類型,用來保存前一個(gè)狀態(tài)。initialq=1’b1;是時(shí)序UDP的初始化語句。使用此語句可以在仿真的開始對輸出進(jìn)行賦值。在實(shí)際的部件模型中,很少使用初始賦值。但在測試UDP的功能時(shí),初始賦值相當(dāng)有用。電平敏感的時(shí)序邏輯示例:鎖存器primitived_edge_ff(q,clk,data);outputq;inputclk,data;re

溫馨提示

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

評論

0/150

提交評論