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

下載本文檔

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

文檔簡介

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

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

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

//施加激勵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é)果輸出第八頁,共29頁。系統(tǒng)任務與系統(tǒng)函數(shù)

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

利用UDP(UserDefinedPrimitives)用戶可以自己定義基本邏輯元件的功能,用戶可以象調(diào)用基本門元件一樣來調(diào)用這些自己定義的元件。UDP關(guān)鍵詞為primitive和endprimitive。與一般的模塊相比,UDP模塊具有下面一些特點:◆UDP的輸出端口只能有一個,且必須位于端口列表的第一項。只有輸出端口能被定義為reg類型?!鬠DP的輸入端口可有多個,一般時序電路UDP的輸入端口可多至9個,組合電路UDP的輸入端口可多至10個?!羲械亩丝谧兞勘仨毷?位標量。◆在table表項中,只能出現(xiàn)0、1、x三種狀態(tài),不能出現(xiàn)z狀態(tài)。第十七頁,共29頁。primitive元件名(輸出端口,輸入端口1,輸入端口2,…)output輸出端口名;input輸入端口1,輸入端口2,…;reg輸出端口名;initialbegin輸出端口或內(nèi)部寄存器賦初值(0,1或x);endtable//輸入1輸入2……:輸出真值列表endtableendprimitive定義UDP的語法第十八頁,共29頁。組合邏輯示例: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原語名輸出端口必須為第一個端口第十九頁,共29頁。注:在模塊外定義UDP。如果在表中沒有規(guī)定輸入組合,將輸出不確定邏輯值(x)。表的列中元素的順序應與端口列表中的一致。表中的?的意義是:重復的輸入0,1或任意不確定邏輯值(x)。表中開始兩行表示:當s等于1時,不管b邏輯值如何變化,輸出o將與輸入a保持一致。表中的下兩行表示:當s等于0時,不管a邏輯值如何變化,輸出o將與輸入b保持一致。表中的最后兩行使此器件的描述更加的全面、準確。它們表示:當輸入a和b的邏輯值相同時,如果sel邏輯值不確定,則輸出o的值將與輸入a和b的值相同。這種行為不能使用Verilog語言提供的基本原語元件進行建模。UDP將x作為實際的未知值,而不是Verilog語言邏輯值來進行處理,因此使其比Verilog語言提供的基本原語元件更加準確。舉例說明第二十頁,共29頁??梢灾皇褂脙蓚€UDP來描述全加器的邏輯功能。//全加器進位實現(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組合邏輯示例:全加器向上一級進位下一級來的進位第二十一頁,共29頁。//全加器求和實現(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組合邏輯示例:全加器第二十二頁,共29頁。若使用UDP設(shè)計全加器,僅需要兩個UDP;而使用Verilog原語元件,則需要5個Verilog語言提供的基本原語元件。當設(shè)計需要使用大量全加器時,采用UDP來表示全加器,將大大減少內(nèi)存的需要。事件的數(shù)目將大大降低。?表示邏輯值可以為0,1或x。組合邏輯示例:全加器第二十三頁,共29頁。primitivelatch(q,clock,data);outputq;regq;inputclock,data;initialq=1’b1;table//clockdatacurrentnext//statestate01:?1;00:?0;1?::-;endtableendprimitive電平敏感的時序邏輯示例:鎖存器注意此寄存器的用法,此寄存器用來存儲。輸出初始化為1‘b1.?表示無須考慮輸入和當前狀態(tài)的值第二十四頁,共29頁。注:鎖存器的動作行為如下:當時鐘信號為0時,輸入數(shù)據(jù)的值直接傳給輸出。當時鐘信號為1時,輸出保持當前狀態(tài)不變。nextstate欄中的“-”表示輸出保持不變。輸出必須定義為寄存器類型,用來保存前一個狀態(tài)。init

溫馨提示

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

評論

0/150

提交評論