




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第11章仿真◆系統(tǒng)任務與系統(tǒng)函數(shù)◆用戶自定義元件◆延時模型的表示◆數(shù)字電路的仿真內(nèi)容第11章仿真11.1系統(tǒng)任務與系統(tǒng)函數(shù)
概述1)系統(tǒng)任務和系統(tǒng)函數(shù)主要是用于仿真的;2)系統(tǒng)任務和系統(tǒng)函數(shù)一般以符號“$”開頭。例如:
$monitor,$readmemh等。3)使用不同的Verilog仿真工具(如:VCS、Verilog-XL、
ModelSim等)進行仿真時,這些系統(tǒng)任務和系統(tǒng)函數(shù)在使用方法上可能存在差異,應根據(jù)使用手冊來使用。4)一般在intial或always過程塊中,調(diào)用系統(tǒng)任務和系統(tǒng)函數(shù)。5)用戶可以通過編程語言接口(PLI)將自己定義的系統(tǒng)任務和系統(tǒng)函數(shù)加到語言中,以進行仿真和調(diào)試。$display和$write是兩個系統(tǒng)任務,兩者的功能相同,都用于顯示仿真結(jié)果,其區(qū)別是$display在輸出結(jié)束后能自動換行,而$write不能。$display和$write的使用格式為:$display(“格式控制符”,輸出變量名列表);$write(“格式控制符”,輸出變量名列表);格式控制符:控制顯示信號的格式輸出變量名列表:要顯示的信號的名稱。1.$display與$write格式控制符說明%h或%H以16進制形式顯示%d或%D以10進制形式顯示%o或%O以8進制形式顯示%b或%B以2進制形式顯示%c或%C以ASCII字符形式顯示%v或%V顯示net型數(shù)據(jù)的驅(qū)動強度%m或%M顯示層次名%s或%S以字符串形式輸出%t或%T以當前的時間格式顯示轉(zhuǎn)義字符說明\n換行\(zhòng)tTAB鍵\\符號\\“符號“\ddd
八進制數(shù)ddd對應的ASCII字符%%符號%格式控制符轉(zhuǎn)義字符1.$display與$write1)用于仿真結(jié)果的輸出`timescale1ns/1nsmodulewytest;reg
a,b,c;initialbegina=0;b=1;c=0;#100c=1;
$display($time,,,"a=%db=%dc=%d",a,b,c);b=0;
$display($time,,,"a=%db=%dc=%d",a,b,c);#100a=1;b=1;endendmodule100a=0b=1c=1100a=0b=0c=1
$write($time,,,"a=%db=%dc=%d",a,b,c);
$write($time,,,"a=%db=%dc=%d",a,b,c);
100a=0b=1c=1100a=0b=0c=1賦值方式都改為非阻塞型賦值`timescale1ns/1nsmodulewytest;reg
a,b,c;initialbegina<=0;b<=1;c<=0;#100c<=1;
$display($time,,,"a=%db=%dc=%d",a,b,c);b<=0;
$display($time,,,"a=%db=%dc=%d",a,b,c);#100a<=1;b<=1;endendmodule100a=0b=1c=0100a=0b=1c=0
2)用display可以顯示字符串
$display(“itisaexamplefordisplay!\n”)轉(zhuǎn)義字符的顯示:moduledisp;initialbegin
$display(“\\\t\\\n\”\123”);end顯示結(jié)果:\\“s//八進制數(shù)123對應的ASCII的字符為S$monitor、$strobe與$display、$write一樣也是屬于輸出控制類的系統(tǒng)任務,$monitor與$strobe都提供了監(jiān)控和輸出參數(shù)列表中字符或變量的值的功能.使用格式為:$monitor(“格式控制符”,輸出變量名列表);$strobe(“格式控制符”,輸出變量名列表);
這里的格式控制符、輸出變量名列表與$display和$write中定義的完全相同。運行機制:$monitor:相當于一個實時監(jiān)控器,只要輸出變量列表中的任何變量發(fā)生了變化,則系統(tǒng)按$monitor中指定的格式將結(jié)果輸出一次。$strobe:只有當仿真模擬時間發(fā)生變化時,并且在該時刻的所有事件都處理完成了,才輸出結(jié)果2.$monitor與$strobe0a=0b=1c=0100a=1b=1c=1200a=1b=0c=1300a=0b=1c=0400a=1b=0c=1`timescale1ns/1nsmodulewytest;reg
a,b,c;initialbegina<=0;b<=1;c<=0;#100a<=1;b<=1;c<=1;#100a<=1;b<=0;c<=1;#100a<=0;b<=1;c<=0;#100a<=1;b<=0;c<=1;endinitialbegin$monitor($time,,,"a=%db=%dc=%d",a,b,c);endendmodule`timescale1ns/1nsmodulewytest;reg
a,b,c;initialbegina=0;b=1;c=0;#100a=1;
$strobe($time,,,"a=%db=%dc=%d",a,b,c);b=1;c=1;#100a=1;b=0;
$strobe($time,,,"a=%db=%dc=%d",a,b,c);c=1;endendmodule100a=1b=1c=1200a=1b=0c=1100a=1b=1c=0200a=1b=0c=1
$display($time,,,"a=%db=%dc=%d",a,b,c);
$display($time,,,"a=%db=%dc=%d",a,b,c);
`timescale1ns/1nsmodulewytest;reg
a,b,c;initialbegina<=0;b<=1;c<=0;#100a<=1;b<=1;c<=1;
$strobe($time,,,"a=%db=%dc=%d",a,b,c);
#100a<=1;b<=0;c<=1;
$strobe($time,,,"a=%db=%dc=%d",a,b,c);
endendmodule#100a=1b=1c=1#200a=1b=0c=1
$display($time,,,"a=%db=%dc=%d",a,b,c);
$display($time,,,"a=%db=%dc=%d",a,b,c);
#100a=0b=1c=0#200a=1b=1c=1$time、$realtime是屬于顯示仿真時間標度的系統(tǒng)函數(shù)。這兩個函數(shù)被調(diào)用時,都返回當前時刻距離仿真開始時刻的時間量值,$time函數(shù)以64位整數(shù)值的形式返回模擬時間(基本仿真時間的個數(shù),而不是絕對的時間值);$realtime
函數(shù)則以實數(shù)型數(shù)據(jù)返回模擬時間(基本仿真時間的個數(shù),而不是絕對的時間值)。
3.$time與$realtime`timescale10ns/1nsmodulewytest;reg
ts;parameterdelay=2.6;initialbegin#delayts=1;#delayts=0;#delayts=1;#delayts=0;endinitial$monitor($time,,,"ts=%b",ts);endmodule3.$time與$realtime#0ts=x#3ts=1#5ts=0#8ts=1#10ts=0($realtime,,,"ts=%b",ts);#0ts=x#2.6ts=1#5.2ts=0#7.8ts=1#10.4ts=0系統(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ù)。$stop、$finish不帶參數(shù),則默認參數(shù)值為1.4.$finish與$stop4.$finish與$stop`timescale10ns/1nsmodulewytest;reg
ts;parameterdelay=2.6;initialbegin#delayts=1;#delayts=0;#delayts=1;#delayts=0;#delay$stop(2);endinitial$monitor($realtime,,,"ts=%b",ts);endmodule#$stop:C:/modeltech_6.5/examples/wytest.v(11)#Time:130nsIteration:0Instance:/wytest#BreakinModulewytestatC:/modeltech_6.5/examples/wytest.vline11vsim28>quit作用:$readmemh與$readmemb是屬于文件讀寫控制的系統(tǒng)任務,其都是從外部文件中讀取數(shù)據(jù)并
放入存儲器中。區(qū)別:讀取數(shù)據(jù)的格式不同,$readmemh為讀取十六進制數(shù)據(jù),而$readmemb為讀取二進制數(shù)據(jù)。使用格式:$readmemh("數(shù)據(jù)文件名",存儲器名,起始地址,結(jié)束地址);$readmemb("數(shù)據(jù)文件名",存儲器名,起始地址,結(jié)束地址);其中,起始地址和結(jié)束地址均可以缺省,如果缺省起始地址,表示從存儲器的首地址開始存儲;如果缺省結(jié)束地址,表示一直存儲到存儲器的結(jié)束地址。5.$readmemh與$readmembreg[7:0]my_mem[0:255];//定義一個256個地址的存儲器initialbegin$readmemh(“mem.hex”,my_mem);end//將mem.hex的數(shù)據(jù)裝載到存儲器my_mem,從起始地址0
一直裝到存儲器結(jié)束地址。initialbegin$readmemh(“mem.hex”,my_mem,80);end//將mem.hex的數(shù)據(jù)裝載到存儲器my_mem,從起始地址80
一直裝到存儲器結(jié)束地址。5.$readmemh與$readmemb$random是產(chǎn)生隨機數(shù)的系統(tǒng)函數(shù),每次調(diào)用該函數(shù)將返回一個32位的隨機數(shù),該隨機數(shù)是一個帶符號的整數(shù)。6.$random#10data=00010010000101010011010100100100#20data=11000000100010010101111010000001#30data=10000100100001001101011000001001#40data=10110001111100000101011001100011#50data=00000110101110010111101100001101#60data=01000110110111111001100110001101`timescale10ns/1nsmodulewytest;integerdata;integeri;parameterdelay=10;initialbegin$monitor($time,,,"data=%b",data);endinitialbegin
for(i=0;i<=5;i=i+1)#delaydata=$random;endendmodule與c語言類似,Verilog也提供了很多文件輸出類的系統(tǒng)任務,可將結(jié)果輸出到文件中。這類任務有:$fdisplay、$fwrite、$fmonitor、$fstrobe、$fopen和$fclose等。$fopen用于打開某個文件并準備寫操作,$fclose用于關(guān)閉文件,$fdisplay、$fwrite、$fmonitor等系統(tǒng)任務則用于把文本寫入文件。7.文件輸出11.3延時模型的表示
延時:包括門延時、assign賦值延時和連線延時等。門延時:門輸入端發(fā)生變化到輸出端發(fā)生變化的延遲時間;assign賦值延時:等號右端某個值發(fā)生變化到等號左端發(fā)生相應變化的延遲時間;連線延時:信號在連線上的傳輸延時。如果沒有定義時延值,缺省時延為0。11.3.1時間標尺定義’timescale
`timescale語句用途:用于定義模塊的時間單位和時間精度。使用格式:
`timescale<時間單位>/<時間精度>
其中用來表示時間度量的符號有:
smsusnsps
fs
秒10-3秒10-6秒10-9秒10-12秒10-15秒例如:`timescale1ns/100ps
表示延時單位為1ns,時延精度為100ps(即精確到0.1ns)。
`timescale編譯器指令在模塊說明外部出現(xiàn),并且影響后面所有的時延值。11.3.1時間標尺定義’timescale
例:`timescale1ns/1nsmodulewytest;reg
a,b,c;initialbegina<=0;b<=1;c<=0;#50.8a<=1;b<=1;c<=1;#100.4a<=1;b<=0;c<=1;endendmodule#50.851ns#100.4100ns1ns/100ps#50.850.8ns#100.4100.4ns11.3.2延時的表示與延時說明塊
1.延時的表示方法延時的表示方法有下面幾種:
#delaytime#(d1,d2)#(d1,d2,d3)
#delaytime表示延遲時間為delaytime,,為一個常數(shù)。
d1表示上升延遲,d2表示下降延遲,d3則表示轉(zhuǎn)換到高阻態(tài)z的延遲,這些延遲的具體時間由時間定義語句‘timescale規(guī)定的時間刻度所決定。
如果沒有定義時延值,缺省時延為0。例:
not#4gate1(out,in);//延時時間為4的非門
and#(5,7)gate2(out,a,b)//與門的上升延時為5,下降延時為7or#5gate3(out,a,b)//或門的上升、下降延時都為5
bufif0#(3,4,6)gate(out,in,enable)
//三態(tài)門的上升時延為3,下降時延為4,高阻時延為6
assign#(50)out=a+b;//a或b發(fā)生變化,到out發(fā)生變化的時間為5011.3.2延時的表示與延時說明塊
Verilog可對程序模塊中某一指定的路徑進行延遲定義。
這一路徑連接模塊的輸入端口(或inout端口)與輸出端口(或inout端口)。在延遲定義塊中要描述模塊中的不同路徑并給這些路徑賦值。延遲定義塊的內(nèi)容應放在關(guān)鍵字specify與endspecify之間,且必須放在一個模塊中。2.延時說明塊(specify塊)例:moduledelay(out,a,b,c);inputa,b,c;outputout;anda1(n1,a,b);oro1(out,c,n1);
specify(a=>out)=2;(b=>out)=3;(c=>out)=1;
endspecify
endmodule
2.延時說明塊(specify塊)cabout11.4數(shù)字電路的仿真
11.4.1測試平臺(TestBanch)1.概念
為測試或仿真一個verilog程序而搭建的一個平臺。平臺的核心是一個用于產(chǎn)生仿真激勵信號給被測程序模塊,同時調(diào)用系統(tǒng)函數(shù)顯示仿真結(jié)果的verilog仿真測試程序。配合仿真軟件提供的環(huán)境和其他工具,構(gòu)成一個仿真測試的平臺。11.4.1測試平臺(TestBanch)測試平臺仿真程序被測模塊激勵信號(reg)激勵向量輸入端口輸出端口顯示信號(wire)輸出顯示波形或打印顯示2.仿真測試程序的特點及要求◆測試模塊只有模塊名字,沒有端口列表;◆輸入信號(激勵信號)必須定義為reg型,以保持信號值;輸出信號(顯示信號)必須定義為wire型;◆在測試模塊中調(diào)用被測試模塊,在調(diào)用時,應注意端口排列的順序與模塊定義時一致;◆一般用initial、always過程塊來定義激勵信號波形;使用系統(tǒng)任務和系統(tǒng)函數(shù)來定義輸出顯示格式;◆在激勵信號的定義中,可使用如下一些控制語句:
if-else,for,forever,case,while,repeat,
wait,disable,force,release,begin-end,
fork-join等,這些控制語句一般只用在always、
initial、function、task等過程塊中。
11.4.1測試平臺(TestBanch)11.4.1測試平臺(TestBench)測試程序的一般結(jié)構(gòu)數(shù)據(jù)類型說明//激勵信號reg型//輸出顯示信號wire型intergerparameter調(diào)用被測試模塊激勵信號定義(always、initial等)顯示格式定義($monitor等)module仿真模塊名//無端口列表激勵波形的產(chǎn)生例11.13用initial語句產(chǎn)生激勵波形`timescale1ns/1nsmodulewytest;reg
a,b,c;initialbegina=0;b=1;c=0;#100c=1;#100a=1;b=0;#100a=0;#100c=0;#100$finish;endinitial$monitor($time,,,"a=%db=%dc=%d",a,b,c);endmodule例11.14用always語句產(chǎn)生時鐘波形激勵波形的產(chǎn)生`timescale1ns/1nsmodulewytest;reg
clk;parameterCYCLE=100;always#(CYCLE/2)clk=~clk;initialclk=1;endmodule11.4.2組合電路的仿真
`timescale10ns/1nsmodulemult_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;end
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國鋁包木門窗行業(yè)運行現(xiàn)狀及發(fā)展前景分析報告
- 2025-2030年中國金融資產(chǎn)交易所行業(yè)發(fā)展趨勢規(guī)劃研究報告
- 2025-2030年中國葡萄及深加工行業(yè)發(fā)展狀況及營銷戰(zhàn)略研究報告
- 2025-2030年中國色紡紗市場運行動態(tài)及發(fā)展趨勢預測報告
- 2025-2030年中國羊絨產(chǎn)業(yè)運行態(tài)勢及投資戰(zhàn)略研究報告
- 2025-2030年中國程控交換機行業(yè)發(fā)展現(xiàn)狀及前景趨勢分析報告
- 2025遼寧省安全員C證考試(專職安全員)題庫附答案
- 2025廣東省安全員《C證》考試題庫及答案
- 寧夏工商職業(yè)技術(shù)學院《醫(yī)學實驗儀器學》2023-2024學年第二學期期末試卷
- 申論公務員考試試題與參考答案(2024年)
- 《幼兒行為觀察與分析案例教程》教學教案
- 小學科學教育課程實施方案
- DB11T 1035-2013 城市軌道交通能源消耗評價方法
- 2024新能源光伏電站運行規(guī)程和檢修規(guī)程
- 供應室課件大全
- 銀行存管三方協(xié)議書
- 2024義務教育道德與法治課程標準(2022版)
- 2024年新人教版化學九年級上冊全冊課件(新版教材)
- 部編四下語文《口語交際:轉(zhuǎn)述》公開課教案教學設(shè)計【一等獎】
- 智能體脂秤市場洞察報告
評論
0/150
提交評論