版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)通過這些端口從模塊輸入/輸出。另一個(gè)模塊可以通過模塊名及端口說明使用多路器。實(shí)例化多路器時(shí)不需要知道其實(shí)現(xiàn)細(xì)節(jié)。這正是自上而下設(shè)計(jì)方法的一個(gè)重要特點(diǎn)。模塊的實(shí)現(xiàn)可以是行為級(jí)也可以是門級(jí),但并不影響高層次模塊對(duì)它的使用。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ù)信號(hào),在重新賦值前一直保持當(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ù)一般以符號(hào)“$”開頭。例如:$monitor,$finish等?!羰褂貌煌腣erilog仿真工具(如:VCS、Verilog-XL、ModelSim等)進(jìn)行仿真時(shí),這些系統(tǒng)任務(wù)和系統(tǒng)函數(shù)在使用方法上可能存在差異,應(yīng)根據(jù)使用手冊(cè)來使用?!粢话阍趇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鍵\\符號(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ì)仿真過程進(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語言類似,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類型。◆UDP的輸入端口可有多個(gè),一般時(shí)序電路UDP的輸入端口可多至9個(gè),組合電路UDP的輸入端口可多至10個(gè)。◆所有的端口變量必須是1位標(biāo)量?!粼趖able表項(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í)進(jìn)位下一級(jí)來的進(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í)鐘信號(hào)為0時(shí),輸入數(shù)據(jù)的值直接傳給輸出。當(dāng)時(shí)鐘信號(hào)為1時(shí),輸出保持當(dāng)前狀態(tài)不變。nextstate欄中的“-”表示輸出保持不變。輸出必須定義為寄存器類型,用來保存前一個(gè)狀態(tài)。initialq=1’b1;是時(shí)序UDP的初始化語句。使用此語句可以在仿真的開始對(duì)輸出進(jìn)行賦值。在實(shí)際的部件模型中,很少使用初始賦值。但在測(cè)試UDP的功能時(shí),初始賦值相當(dāng)有用。電平敏感的時(shí)序邏輯示例:鎖存器primitived_edge_ff(q,clk,data);outputq;inputclk,data;re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年莆田市公安局面向社會(huì)及退役軍人公開招聘警務(wù)輔助人員148人備考題庫及1套參考答案詳解
- 2025年鈉離子電池電解液五年儲(chǔ)能應(yīng)用分析報(bào)告
- 2025重慶市黔江區(qū)婦幼保健院招聘編外1人備考核心題庫及答案解析
- 梓潼縣2025年下半年公開考核招聘衛(wèi)生專業(yè)技術(shù)人員(26人)筆試重點(diǎn)題庫及答案解析
- 2025陸軍軍醫(yī)大學(xué)西南醫(yī)院護(hù)士長(zhǎng)招聘9人考試核心題庫及答案解析
- 2025隴塬大數(shù)據(jù)服務(wù)(定西)有限公司招聘53人(甘肅)參考考試試題及答案解析
- 2025年兒童益智玩具創(chuàng)新趨勢(shì)與安全標(biāo)準(zhǔn)五年發(fā)展報(bào)告
- 2025福建廈門市集美區(qū)寧寶幼兒園非在編廚房人員招聘1人筆試重點(diǎn)試題及答案解析
- 跨境電商平臺(tái)2025年跨境電商支付:構(gòu)建與便捷交易報(bào)告
- 2025錦州市部分事業(yè)單位赴高校公開招聘2026年應(yīng)屆畢業(yè)生(第二批)考試重點(diǎn)試題及答案解析
- 護(hù)膚銷售技巧培訓(xùn)大綱
- 土地改良合同范本
- 煤礦安全隱患排查及整改措施
- 2025年懷集縣事業(yè)單位聯(lián)考招聘考試真題匯編附答案
- 房開裝潢合同范本
- GJB1406A-2021產(chǎn)品質(zhì)量保證大綱要求
- 安徽省水環(huán)境綜合治理工程計(jì)價(jià)定額2025
- 運(yùn)動(dòng)素質(zhì)知到課后答案智慧樹章節(jié)測(cè)試答案2025年春浙江大學(xué)
- 駕照體檢表完整版本
- 箱包生產(chǎn)車間管理制度
- 赫茲伯格-雙因素理論
評(píng)論
0/150
提交評(píng)論