




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
證本章介紹了如何編寫測(cè)試驗(yàn)證程序(testbench)。測(cè)試驗(yàn)證程序用于測(cè)試和驗(yàn)證設(shè)計(jì)的正確性。VerilogHDL提供強(qiáng)有力的結(jié)構(gòu)來(lái)說(shuō)明測(cè)試驗(yàn)證程序。產(chǎn)生模擬激勵(lì)(波形)VerilogHDL提供了大量的方法以編寫測(cè)試驗(yàn)證程序。在本章中,對(duì)其中的某些方moduleTest_BencLocal_reg_and_net_declarationGenerate_waveforms_using_initial_&_always_statementsInstantiate_module_under_testMonitor_output_and_compare_with_expected_value通常需要兩類波形。一類是具有重復(fù)模式的波形,例如時(shí)鐘波形,另一類是一組指定的值確定的波形。產(chǎn)生值序列的最佳方法是使用initial語(yǔ)句。例如begiReset=0;#100Reset=1;#80Reset=0;#30Reset=產(chǎn)生的波形如圖11-1所示。Initial Reset=Reset=#1001;Reset=#800;Reset=#301;圖11-1使用initial因?yàn)槭褂玫氖亲枞赃^(guò)程賦值,上面語(yǔ)句中的時(shí)延是相對(duì)時(shí)延。如果使用絕對(duì)時(shí)延,可用帶有語(yǔ)句內(nèi)時(shí)延的非阻塞性過(guò)程性賦值,例如,Reset<=Reset<=#1001;Reset<=#1800;Reset<=#210parameterREPEAT_DELAY=integerCoinValueCoinValue=#7CoinValue=25;#2CoinValue=5;#8CoinValue=10;#6CoinValue=5;#REPEAT_DELA;Y圖11-2使用alwaysassign#(PERI Clock=~Cloc但是這種做法并不完全正確。問(wèn)題在于Clock是一個(gè)線網(wǎng)(只有線網(wǎng)能夠在連續(xù)賦值中被賦值),它的初始值是z,并且,z等于x,~x等于x。因此Clock的值固定為值x。Clock=但是現(xiàn)在Clock必須是寄存器數(shù)據(jù)類型(因?yàn)橹挥屑拇嫫鲾?shù)據(jù)類型能夠在initial語(yǔ)句中被賦moduleGen_Clk_A(Clk_outputClk_regClk_AparametertPERIOD=Clk_A=#(tPERIOD/2)Clk_A=~Clk_圖11-3moduleGen_Clk_B(Clk_outputClk_regStartStart=#5Start=nor#2(Clk_B,Start,Clk_initial語(yǔ)句將Start置為1,這促使或非門的輸出為0(從x值中獲得)。5個(gè)時(shí)間單位后,在Start變?yōu)?時(shí),或非門反轉(zhuǎn)產(chǎn)生帶有周期為4個(gè)時(shí)間單位的時(shí)鐘波形。產(chǎn)生的波形如圖11-4所如果要產(chǎn)生高低電平持續(xù)時(shí)間不同的時(shí)鐘波形,可用moduleGen_Clk_C(Clk_parametertON=5,tOFF=outputClk_C regClk_C#t #t Clk_C=圖11-4因?yàn)橹?和1被顯式地賦值,在這種情況下不必使用initial語(yǔ)句。圖11-5顯示了這一模塊生圖11-5moduleGen_Clk_D(Clk_D);outputClk_DregClk_DparameterSTART_DELAY=5,LOW_TIME=2,HIGH_TIME=Clk_D=#START_DELA#LOW_TIMEClk_D=#HIGH_TIMClk_D=repeat循環(huán)語(yǔ)句。下面帶參數(shù)的時(shí)鐘模塊產(chǎn)生一定moduleGen_Clk_E(Clk_outputClk_EregClk_EparameterTburst=10,Ton=2,Toff=Clk_E=1'b0;repeat(Tburs#ToffClk_E=1'b1;#TonClk_E=1'b0;圖11-6moduleTeswireClk_Ea,Clk_Eb,Clk_EcGen_Clk_EG1(Clk_EGen_Clk #(5,1,3)(Clk_EGen_Clk #(25,8,10)C(lk_EClk_Eb的波形如圖11-7圖11-7 modulePhase(Master_Clk,Slave_CloutputMaster_Clk,Slave_ClkregMaster_Clk wireSlave_ClkparametertON=2,tOFF=3,tPHASE_DELAY=#tONMaster_Clk=0;#tOFFMaster_Clk=assign#tPHASE_DELAYSlave_Clk=Master_Cl圖11-8器下面是2-4器和它的測(cè)試驗(yàn)證程序。任何時(shí)候只輸入或輸出信號(hào)的值發(fā)生變化,輸出信號(hào)的值都會(huì)被顯示輸出。`timescale1ns/moduleDec2x4(A,B,EnableinputA,B,Enable;output[0:3]Z;wireAbar,Bbar;not#(1,V0(Abar,V1(Bar,B
nand#(4,N0(Z[0],Enable,Abar,Bba)rN1(Z[1],Enable,Abar,N2(Z[2],Enable,A,BbaN3(Z[3],Enable,A,moduleDec_Test;regDa,Db,Den;awire[0:3]Dz;Dec2x4D1(Da,Db,Dena,Dena=Da=Db=#10Dena=#10Da=#10Db=#10Da=#10Db=#10@(DenaorDaorDborD y("Attime%t,inputis%b%b%b,outputis%,b$time,Da,Db,Dena,At 4,inputis000,outputisinputoutputinputoutputinputoutputinputoutputinputoutputinputoutputinputoutputinputoutputinputoutputinputoutputinputoutputinputoutputmoduleMSDFF(D,C,Q,Qba)rinputD,outputQ,QbarNT1(NotD,D),NT2(NotC,C),NT3(NotY,YND1(D1,D,ND2(D2,C,NotND3(Y,D1,Yba)r ND4(Ybar,Y,ND5(Y1,Y,NotC),ND6(Y2,NotY,NotC),ND7(Q,Qbar,Y1),ND8(Qbar,Y2,moduleTest;regD,C;wireQ,Qb;MSDFFM1(D,C,Q,#5C=~D=C=#40D=#40D=#40D=#40D=$monitor("Time=%t::",t$ime,"C=%b,D=%b,Q=%b,Qb=%b",C,D,Q,Qb);在此測(cè)試驗(yàn)證模塊中,觸發(fā)器的兩個(gè)輸入和兩個(gè)輸出結(jié)果均設(shè)置了,故只要其中任何值發(fā)生變化就輸出指定變量的值。下面是執(zhí)行產(chǎn)生的輸出結(jié)果。Time=Time=Time=Time=Time=Time=Time=Time=Time= 70::C=0,D=1,Q=1, 75::C=1,D=1,Q=1, 80::C=0,D=0,Q=1,Time=100::Time=105::Time=110::Time=115::Time=120::Time=125::Time=130::Time=135::Time=140::Time=145::Time=150::Time=155::可用$readmemb系統(tǒng)任務(wù)從文本文件中向量(可能包含輸入激勵(lì)和輸出期望值)。下面為測(cè)試3位全加器電路的例子。假定文件“test.vec”包含如下兩個(gè)向量。向量的前三位對(duì)應(yīng)于輸入AB,再接下來(lái)的位是進(jìn)位,八到十位是期望的求和結(jié)果,最后一位是期望進(jìn)位值的輸出結(jié)果。下面是全加器模塊和相應(yīng)的測(cè)試驗(yàn)證程序。moduleAdder1Bit(A,B,Cin,Sum,CoinputA,B,CinoutputSum,CouassignSum=(A^B)^CinassignCout=(A^B)|(A&Cin)|(B&CinmoduleAdder3Bit(First,Second,Carry_In,Sum_Out,Carry_Oinput[0:2]First,SecinputCarry_In;outputCarry_Out;wire[0:1]Car;Adder1BiA1(First[2],Second[2],Carry_In,Sum_Out[2],CaA2(First[1],Second[1],Car[1],Sum_Out[1],CaA3(First[0],Second[0],Car[0],Sum_Out[0],Carry_OumoduleTestBenc parameterBITS=11,WORDS=reg[1:BITS]Vmem[1:WORDregCin,Cout_Ex;integerJ;wire[0:2]SuwireCouAdder3Bi F1(A,B,Cin,Sum,Co$readmemb("test.vec",Vmefor(J=1;J<=WORDS;J=J+{A,B,Cin,Sum_Ex,Cout_ExVmem[J];#5;//延遲5個(gè)時(shí)間單位等待電路穩(wěn)定。if((Sum!==Sum_Ex)||(Cout!==Cout_E y("****Mismatchonvector%b*****V"m,em[J y("Nomismatchonvector%b"V,mem[J測(cè)試模中首定義器Vmem,字長(zhǎng)對(duì)應(yīng)于每個(gè)量的位數(shù),器字?jǐn)?shù)對(duì)應(yīng)于文件中的向量數(shù)。系統(tǒng)任務(wù)$readmemb“test.vec中將向量讀入器Vmem中。for通過(guò)器中的每個(gè)字,即每個(gè)向量,將這些向量應(yīng)用于待測(cè)試的模塊,等待模塊穩(wěn)定并探測(cè)模塊輸出。條件語(yǔ)句用于比較期望輸出值和監(jiān)測(cè)到的輸出值。如果發(fā)生不匹配的情況,則輸出不匹配消息。下面是以上測(cè)試驗(yàn)證模塊模擬執(zhí)行時(shí)產(chǎn)生的輸出。因?yàn)槟P椭胁淮嬖阱e(cuò)誤,因此沒有報(bào)告不匹配情形。Nomismatchonvector01001001000Nomismatchonvector在上節(jié)的模擬驗(yàn)證模塊實(shí)例中,我們看到值如何被打印輸出。設(shè)計(jì)中的信號(hào)值也能通過(guò)如$fdisy、$fmonitor和$fstrobe等具有寫文件功能系統(tǒng)任務(wù)輸出到文件中。下面是與前一節(jié)中相同的測(cè)試驗(yàn)證模塊實(shí)例,本例中的驗(yàn)證模塊將所有輸入向量和觀察到的輸出結(jié)果輸出mon.Out”中。moduleF_Test_BencparameterBITS=11,WORDS=reg[1:BITS]Vmem[1:WORDreg[0:2]A,B,Sum_EregCin,Cout_EintegerJwire[0:2]SuwireCouAdder3Bi F1(A,B,Cin,Sum,Cobegin:INIT_LABLintegerMon_Out_FilMon_Out_File=$fopen("mon.out$readmemb("test.vec",Vmefor(J=1;J<=WORDS;J=J+{A,B,Cin,Sum_Ex,Cout_ExVmem[J];#5;//延遲5個(gè)時(shí)間單位,等待電路穩(wěn)定。if((Sum!==Sum_E)x||(Cout!==Cout_ y("****Mismatchonvector%b*****V"m,em[J y("Nomismatchonvector%b"V,mem[J//將輸入向量和輸出結(jié)果輸入到文件 y(Mon_Out_File,"Input=%b%b%b,Output=A,B,Cin,Sum,Co$fclose(Mon_Out_Filmon.outInput ,Output=Input ,Output=Div。輸出響應(yīng)寫入文件以moduleDiv(Ck,Reset,TestN,inputCk,Reset,TestoutputEnreg[0:3]Counter;@(posedgeCk)beginif(~Reset) Counter=if(~TestN)Counter=15;Counter=Counter+assignEna=(Counter==15)?1:moduleDiv_TintegerOut_FilregClock,Reset,TestwireEnablOut_File=$fopen#5Clock=0;#3Clock=DivD1(Clock,Reset,TestN,EnabReset=#50Reset=TestN=0;#100TestN=1;#50TestN=0;#50$fclose(Out_Fil $fmonitor(Out_File,"Enablechangedto%battime%t"E,nable,模擬執(zhí)行后,文件“Enablechangedtoxattime 0Enablechangedto0at Enablechangedto1at Enablechangedto0at Enablechangedto1at 11.6.2本例介紹產(chǎn)生輸入激勵(lì)的另式,在該方式中,根據(jù)待測(cè)模塊的狀態(tài)產(chǎn)生相應(yīng)的輸出激勵(lì)。該輸出激勵(lì)產(chǎn)生方式對(duì)有窮狀態(tài)自動(dòng)機(jī)(FSM)的模擬驗(yàn)證非常有效,因?yàn)闋顟B(tài)機(jī)的模擬驗(yàn)證需根據(jù)各個(gè)不同的狀態(tài)產(chǎn)生不同的輸入激勵(lì)。設(shè)想一個(gè)用于計(jì)算輸入數(shù)據(jù)階乘(factorial)的計(jì)。待測(cè)試模與測(cè)試驗(yàn)證模塊間的制如圖11-9示。器圖11-9測(cè)試驗(yàn)證模塊與待測(cè)試模塊間的握模塊的輸入信號(hào)ResetData后,Start信號(hào)被DoneFac_Out和Exp_Out上。階乘結(jié)果值為Fat_Out*2Ep_Out,測(cè)試驗(yàn)證模塊在Data上提供從值1開始遞增到20的輸入數(shù)據(jù)。測(cè)試驗(yàn)證模塊加載數(shù)據(jù),對(duì)Start信號(hào)置位并等待Done信號(hào)有效,然后加載于下一輸入數(shù)據(jù)。若輸出結(jié)果不正確,即打印錯(cuò)誤信息。階乘模塊及其測(cè)試驗(yàn)證模塊描述如下:`timescale1ns/moduleFACTORIAL(Reset,StartSig,Clk,Data,Done,FacOut,ExpOu)t;inputReset,StartSig,Clinput[4:0]DatoutputDonoutput[7:0]FacOut,ExpOutregStoreg[4:0]InLatcreg[7:0]Exponent,ResulintegerIinitialStop=@(posedgeClk)if((StartSig==1)&&(Stop==1)&&(Reset==Result=Exponent=InLatch=Dat Stop=if((InLatch>1)&&(Stop==Result=Result*InLatch;InLatch=InLatch-1;if(InLatch<Stop=for(I=1;I<=5;I=I+if
Result=Result/Exponent=Exponent+assignDone=Stop;assignFacOut=Result;assignExpOut=Exponent;moduleFAC_TparameterIN_MAX=5,OUT_MAX=parameterRESET_ST=0,START_ST=1,APPL_DATA_ST=regClk,Reset,StarwireDonreg[IN_MAX-1:0]Fac_Out,Exp_OuintegerNext_State;parameterMAX_APPLY=20;integerNum_Applied;Num_Applied=begin:CLK_#6Clk=#4Clk=@negedgeCl case(Next_StatReset=Start=Next_State=APPL_DATA_SData=Num_ApplieNext_State=START_SStart=Next_State=WAIT_RESULT_STWAIT_RESULT_Reset=Start=wait(Done==if(Num_Applied=Fac_Out*('h0001<<Exp_Ou$disy("Incorrectresultfromfactorial""modelforinputvalue%d",Dat)a;Num_Applied=Num_Applied+1;if(Num_Applied<MAX_APPLYNext_State=APPL_DATA_$disy("Testcompletedsuccessfull$finishNext_State=START_SFACRORIALF1(Reset,Start,Clk,Data,DoneFac_Out,Exp_Ou11.6.31的序列。在時(shí)鐘的每個(gè)下沿 moduleCount3_ls(Data,Clock,Detect3_linputData,Clock;outputDetect3_ls;integerCount;regDetect3_1Count=Detect3_ls=@(negedgeClock)beginif(Data==1)Count=Count+Count=if(Count>=Detect3_ls=Detect3_ls=moduleToregData,ClocintegerOut_FilCount3_l F1(Data,Clock,DetectClock=#5Clock=~ClocData=#5Data=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 借款合同范本中介版
- 云南購(gòu)房合同范本
- 從化學(xué)校食堂承包合同范本
- 保潔公司人員合同范本
- pu線條安裝合同范本
- fob合同范本日文
- 包架子合同范本
- 公司代管合同范本
- 共同經(jīng)營(yíng)餐廳合同范本
- 三方合作民宿協(xié)議合同范本
- 民間借貸利息計(jì)算表
- 2025屆江蘇省十三大市高三沖刺模擬歷史試卷含解析
- 小學(xué)數(shù)學(xué)二年級(jí)《數(shù)圖形》練習(xí)題
- 初中語(yǔ)文八年級(jí)下冊(cè) 4《燈籠》公開課一等獎(jiǎng)創(chuàng)新教案
- RBA商業(yè)道德程序文件(系列)
- 某山體滑坡綜合治理工程監(jiān)理規(guī)劃
- 遼寧省大連市2023-2024學(xué)年八年級(jí)下學(xué)期第一次月考語(yǔ)文試題(含答案解析)
- DataOps 實(shí)踐指南 2.0白皮書
- 供電所班組建設(shè)方案
- 委托處置不良資產(chǎn)協(xié)議(三篇)
- 胎膜早破的診斷與處理指南
評(píng)論
0/150
提交評(píng)論