版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第11章
Verilog仿真與驗證11.1系統(tǒng)任務(wù)與系統(tǒng)函數(shù)11.2用戶自定義元件(UDP)11.3延時模型的表示11.4測試平臺11.5ModelSim仿真實例11.6數(shù)字電路的仿真內(nèi)容第11章Verilog仿真與驗證11.1系統(tǒng)任務(wù)與系統(tǒng)函數(shù)
◆系統(tǒng)任務(wù)和系統(tǒng)函數(shù)一般以符號“$”開頭。例如:$monitor,$readmemh等?!羰褂貌煌腣erilog仿真工具(如:VCS、Verilog-XL、ModelSim等)進(jìn)行仿真時,這些系統(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是兩個系統(tǒng)任務(wù),兩者的功能相同,都用于顯示模擬結(jié)果,其區(qū)別是$display在輸出結(jié)束后能自動換行,而$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ū)動強(qiáng)度%m或%M顯示層次名%s或%S以字符串形式輸出%t或%T以當(dāng)前的時間格式顯示轉(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是屬于顯示仿真時間標(biāo)度的系統(tǒng)函數(shù)。這兩個函數(shù)被調(diào)用時,都返回當(dāng)前時刻距離仿真開始時刻的時間量值,所不同的是,$time函數(shù)以64位整數(shù)值的形式返回模擬時間,$realtime函數(shù)則以實數(shù)型數(shù)據(jù)返回模擬時間。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:給出仿真時間和位置;2:給出仿真時間和位置,還有其他一些運(yùn)行統(tǒng)計數(shù)據(jù)。4.$finish與$stop$readmemh與$readmemb是屬于文件讀寫控制的系統(tǒng)任務(wù),其作用都是從外部文件中讀取數(shù)據(jù)并放入存儲器中。兩者的區(qū)別在于讀取數(shù)據(jù)的格式不同,$readmemh為讀取十六進(jìn)制數(shù)據(jù),而$readmemb為讀取二進(jìn)制數(shù)據(jù)。$readmemh與$readmemb的使用格式為:$readmemh("數(shù)據(jù)文件名",存儲器名,起始地址,結(jié)束地址);$readmemb("數(shù)據(jù)文件名",存儲器名,起始地址,結(jié)束地址);其中,起始地址和結(jié)束地址均可以缺省,如果缺省起始地址,表示從存儲器的首地址開始存儲;如果缺省結(jié)束地址,表示一直存儲到存儲器的結(jié)束地址。5.$readmemh與$readmemb$random是產(chǎn)生隨機(jī)數(shù)的系統(tǒng)函數(shù),每次調(diào)用該函數(shù)將返回一個32位的隨機(jī)數(shù),該隨機(jī)數(shù)是一個帶符號的整數(shù)。6.$random與c語言類似,Verilog也提供了很多文件輸出類的系統(tǒng)任務(wù),可將結(jié)果輸出到文件中。這類任務(wù)有:$fdisplay、$fwrite、$fmonitor、$fstrobe、$fopen和$fclose等。$fopen用于打開某個文件并準(zhǔn)備寫操作,$fclose用于關(guān)閉文件,而$fdisplay、$fwrite、$fmonitor等系統(tǒng)任務(wù)則用于把文本寫入文件。7.文件輸出11.2用戶自定義元件(UDP)
利用UDP(UserDefinedPrimitives)用戶可以自己定義基本邏輯元件的功能,用戶可以象調(diào)用基本門元件一樣來調(diào)用這些自己定義的元件。UDP關(guān)鍵詞為primitive和endprimitive。與一般的模塊相比,UDP模塊具有下面一些特點(diǎn):◆UDP的輸出端口只能有一個,且必須位于端口列表的第一項。只有輸出端口能被定義為reg類型?!鬠DP的輸入端口可有多個,一般時序電路UDP的輸入端口可多至9個,組合電路UDP的輸入端口可多至10個。◆所有的端口變量必須是1位標(biāo)量。◆在table表項中,只能出現(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的語法1、組合電路UDP元件primitivecarry_udp(cout,cin,a,b);inputcin,a,b;outputcout;table//cinab:cout//真值表000:0;010:0;001:0;011:1;100:0;101:1;110:1;111:1;endtableendprimitive
【例11.3】1位全加器進(jìn)位輸出UDP元件1、組合電路UDP元件primitivecarry_udpx(cout,cin,a,b);inputcin,a,b;outputcout;table//cinab:cout//真值表000:0;010:0;001:0;011:1;100:0;101:1;110:1;111:1;00x:0;0x0:0;x00:0;11x:1;1x1:1;x11:1;endtableendprimitive
【例11.4】包含x態(tài)輸入的1位全加器進(jìn)位輸出UDP元件primitivecarry_udpx(cout,cin,a,b);inputcin,a,b;outputcout;table//cinab:cout //真值表?00:0;//只要有兩個輸入為0,則進(jìn)位輸出肯定為00?0:0;00?:0;?11:1;//只要有兩個輸入為1,則進(jìn)位輸出肯定為11?1:1;11?:1;endtableendprimitive【例11.5】用簡縮符“?”表述的1位全加器進(jìn)位輸出UDP元件1、組合電路UDP元件2、時序邏輯UDP元件primitivelatch(Q,clk,reset,D);inputclk,reset,D;outputQ;regQ;initialQ=1'b1; //初始化table//clkresetD:state:Q?1?:?:0; 000:?:0; 001:?:1;10?:?:-; endtableendprimitive【例11.7】電平敏感的1位數(shù)據(jù)鎖存器UDP元件primitiveDFF(Q,D,clk);inputD,clk;outputQ;regQ;table//clkD:state:Q(01)0:?:0; //上升沿到來,輸出Q=D(01)1:?:1;(0x)1:1:1;(0x)0:0:0;(?0)?:?:-; //沒有上升沿到來,輸出Q保持原值?(??):?:-; //時鐘不變,輸出也不變endtableendprimitive【例11.8】上升沿觸發(fā)的D觸發(fā)器UDP元件2、時序邏輯UDP元件縮記符含義說明x不定態(tài)?0、1或x只能表示輸入b0或1只能表示輸入-保持不變只用于時序元件的輸出(vy)代表(01),(10),(0x),(1x),(x1),(x0),(?1)等從邏輯v到邏輯y的轉(zhuǎn)變*同(??)表示輸入端有任何變化R或r同(01)表示上升沿F或f同(10)表示下降沿P或p(01),(0x)或(x1)包含x態(tài)的上升沿跳變N或n(10),(1x)或(x0)包含x態(tài)的下降沿跳變UDP中的縮記符11.3延時模型的表示
延時包括門延時、assign賦值延時和連線延時等。門延時是從門輸入端發(fā)生變化到輸出端發(fā)生變化的延遲時間;
assign賦值延時指等號右端某個值發(fā)生變化到等號左端發(fā)生相應(yīng)變化的延遲時間;連線延時則體現(xiàn)了信號在連線上的傳輸延時。如果沒有定義時延值,缺省時延為0。1、時間標(biāo)尺定義`timescale
`timescale語句用于定義模塊的時間單位和時間精度,其使用格式如下:`timescale<time_unit>/<time_precision>`timescale<時間單位>/<時間精度>其中用來表示時間度量的符號有:s、ms、us、ns、ps和fs。例如:`timescale1ns/100ps上面的語句表示時延單位為1ns,時延精度為100ps(即精確到0.1ns)。`timescale編譯器指令在模塊說明外部出現(xiàn),并且影響后面所有的時延值。2、延時的表示與延時說明塊1.延時的表示方法延時的表示方法有下面幾種:#delaytime#(d1,d2)#(d1,d2,d3)#delaytime表示延遲時間為delaytime,d1表示上升延遲,d2表示下降延遲,d3則表示轉(zhuǎn)換到高阻態(tài)z的延遲,這些延遲的具體時間由時間定義語句'timescale確定。時延定義了右邊表達(dá)式操作數(shù)變化與賦值給左邊表達(dá)式之間的持續(xù)時間。如果沒有定義時延值,缺省時延為0。Verilog可對模塊中某一指定的路徑進(jìn)行延遲定義,這一路徑連接模塊的輸入端口(或inout端口)與輸出端口(或inout端口),利用延遲定義塊在一個獨(dú)立的塊結(jié)構(gòu)中定義模塊的延時。在延遲定義塊中要描述模塊中的不同路徑并給這些路徑賦值。延遲定義塊的內(nèi)容應(yīng)放在關(guān)鍵字specify與endspecify之間,且必須放在一個模塊中,還可以使用specparam關(guān)鍵字定義參數(shù)
3.延時說明塊(specify塊)11.4測試平臺
測試平臺(TestBanch)
◆測試模塊只有模塊名字,沒有端口列表;◆輸入信號(激勵信號)必須定義為reg型,以保持信號值;輸出信號(顯示信號)必須定義為wire型;◆在測試模塊中調(diào)用被測試模塊,在調(diào)用時,應(yīng)注意端口排列的順序與模塊定義時一致;◆一般用initial、always過程塊來定義激勵信號波形;使用系統(tǒng)任務(wù)和系統(tǒng)函數(shù)來定義輸出顯示格式;◆在激勵信號的定義中,可使用如下一些控制語句:if-else,for,forever,case,while,begin-end,fork-join等,這些控制語句一般只用在always、initial、function、task等過程塊中。【例11.13】激勵波形的描述`timescale1ns/1nsmoduletest1;rega,b,c;initialbegina=0;b=1;c=0; #100c=1; #100a=1;b=0; #100a=0; #100c=0;#100$stop;endinitial$monitor($time,,,"a=%db=%dc=%d",a,b,c);//顯示endmodule11.4測試平臺
【例11.14】always語句用于時鐘波形的描述`timescale1ns/1ns……regclk;parameterCYCLE=100; //一個時鐘周期100nsalways#(CYCLE/2)clk=~clk; //always語句產(chǎn)生時鐘波形intialclk=1;……11.4測試平臺
11.5ModelSim仿真實例
加法器仿真的示意圖
ModelSim工作界面新建工程項目
填加仿真文件新建仿真文件輸入仿真文件代碼并編譯編譯文件到work工作庫并加載
編譯文件到work工作庫并加載
輸出波形顯示和命令行窗口結(jié)果顯示`timescale10ns/1nsmodulemult8_tp;//測試模塊的名字reg[7:0]a,b; //測試輸入信號定義為reg型wire[15:0]out;//測試輸出信號定義為wire型integeri,j;mult8m1(out,a,b); //調(diào)用測試對象initial //激勵波形設(shè)定begin a=0;b=0;for(i=1;i<255;i=i+1)#10a=i;endinitialbeginfor(j=1;j<255;j=j+1)#10b=j;end11.6數(shù)字電路的仿真
8位乘法器的仿真initialbegin //定義結(jié)果顯示格式$monitor($time,,,"%d*%d=%d",a,b,out);#2560$finish;endendmodulemodulemult8(out,a,b);//8位乘法器源代碼parametersize=8;input[size:1]a,b; //兩個操作數(shù)output[2*size:1]out;//結(jié)果assignout=a*b;//乘法運(yùn)算符endmodule8位乘法器的仿真8位乘法器的功能仿真波形圖(ModelSim)
仿真結(jié)果11.4.3時序電路的仿真`timescale10ns/1nsmodulecount8_tp;regclk,reset; //輸入激勵信號定義為reg型wire[7:0]qout; //輸出信號定義為wire
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年楊梅油香精項目投資價值分析報告
- PACS系統(tǒng)的未來發(fā)展趨勢分析
- 人工智能在數(shù)字內(nèi)容推系統(tǒng)中的應(yīng)用
- 2024年陰離子加脂劑項目可行性研究報告
- 2024年豪華高爾夫球車項目可行性研究報告
- 2024年中國粘硅膠導(dǎo)電膜市場調(diào)查研究報告
- 2024年中國渦洗式洗砂機(jī)市場調(diào)查研究報告
- 中國互聯(lián)網(wǎng)行業(yè)趨勢分析匯報
- CYP51-IN-6-生命科學(xué)試劑-MCE
- cis-6-9-12-Hexadecatrienoic-acid-生命科學(xué)試劑-MCE
- 廣東省肇慶市2023-2024學(xué)年高二上學(xué)期期末教學(xué)質(zhì)量檢測試題 化學(xué) 含解析
- 2021年質(zhì)量、環(huán)境和職業(yè)健康安全三體系相關(guān)方需求和期望分析表及組織環(huán)境分析報告
- 護(hù)理課件題目教學(xué)課件
- 國有企業(yè)重組整合研究-以A集團(tuán)與B公司重組為例
- 日本近現(xiàn)代文學(xué)選讀學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 云桌面軟件項目投標(biāo)技術(shù)方案(純方案-)
- 普通心理學(xué)考試題及答案
- 教科版二年級上冊科學(xué)期末試卷及答案
- 人教版(2024新版)七年級上冊生物全冊5套綜合測試卷匯編(含答案)
- 2024北京海淀區(qū)高三二模語文試題及答案
- 寫作《記述與動物的相處》同步課件 2024-2025學(xué)年七年級語文上冊(統(tǒng)編版2024)
評論
0/150
提交評論