




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
編寫(xiě)Testbench激勵(lì)與響應(yīng)吳宗軍2003.092--WriteTestbench--可編程器件及IC驗(yàn)證措施小規(guī)模設(shè)計(jì)的電路適用的驗(yàn)證方法1、仿真2、PCB板上的物理測(cè)試;因規(guī)模小,時(shí)序和功能驗(yàn)證不復(fù)雜,基本不需其它驗(yàn)證措施。大規(guī)模設(shè)計(jì)的電路適用的驗(yàn)證方法1、仿真2、物理測(cè)試3、一致性驗(yàn)證4、靜態(tài)時(shí)序分析5、(IC用)DFT和ATPG3--WriteTestbench--一、編寫(xiě)測(cè)試向量的目的RTL功能仿真;FPGA功能及時(shí)序仿真;ASIC后端流程的前/后仿真;ASIC樣片在測(cè)試機(jī)臺(tái)上的測(cè)試。*在所有階段,都要用到RTL設(shè)計(jì)者設(shè)計(jì)的測(cè)試向量,隨著ASIC流程的進(jìn)行,該測(cè)試向量格式會(huì)發(fā)生變化。*在ASIC階段,還要用到DFT、MEMBIST生成的測(cè)試向量,由EDA工具生動(dòng)生成。4--WriteTestbench--二、測(cè)試向量的簡(jiǎn)要流程5--WriteTestbench--用HDL編寫(xiě)測(cè)試向量和直接畫(huà)時(shí)序圖仿真方法的比較畫(huà)圖仿真方法優(yōu)點(diǎn):直觀、簡(jiǎn)單、方便。缺點(diǎn):適用于信號(hào)數(shù)量不多、測(cè)試深度不長(zhǎng)、簡(jiǎn)單協(xié)議的仿真,波形的調(diào)整不方便,如想改變時(shí)鐘頻率,輸入信號(hào)的setup/holdtime都不方便;同時(shí)觀察仿真的結(jié)果正確與否需人工進(jìn)行。HDL編寫(xiě)的測(cè)試向量缺點(diǎn):不夠簡(jiǎn)單和方便,波形也不直觀。依據(jù)設(shè)計(jì)者的熟練程度而異。優(yōu)點(diǎn):信號(hào)數(shù)量可以很多,測(cè)試深度任意,尤其適用于有復(fù)雜協(xié)議(如PCI、以太網(wǎng)、無(wú)線協(xié)議等)的仿真,仿真狀態(tài)的調(diào)整方便,甚至于仿真結(jié)果的分析都可由測(cè)試向量自動(dòng)進(jìn)行,可在整個(gè)設(shè)計(jì)流程中使用同一測(cè)試向量,自動(dòng)檢測(cè)分析本流程的設(shè)計(jì)結(jié)果。一個(gè)優(yōu)秀的測(cè)試向量需要有一個(gè)同樣優(yōu)秀的設(shè)計(jì)相配合,它們之間是相互監(jiān)督的關(guān)系。6--WriteTestbench--三、ASIC前/后仿真及芯片測(cè)試機(jī)臺(tái)的測(cè)試向量通用格式要求有輸出檢測(cè);測(cè)試向量中只能有一個(gè)主控時(shí)鐘;以主控時(shí)鐘的CYCLE寬度為測(cè)試周期,一個(gè)周期內(nèi)輸入信號(hào)只能改變一次;輸入信號(hào)(包括雙向口處于非輸出模式時(shí))必須確定,即不能為0或1以外的值;輸出信號(hào)盡量控制使其不要處在除0和1以外的其它狀態(tài);一般的測(cè)試機(jī)臺(tái)不能檢測(cè)輸出信號(hào)的高阻態(tài)輸出;7--WriteTestbench--四、推薦測(cè)試向量格式Inputdelay和outputstrobetime的值均可調(diào)節(jié)8--WriteTestbench--五、測(cè)試向量時(shí)鐘設(shè)計(jì)1、要求:因測(cè)試向量中只能有一個(gè)主控時(shí)鐘,所以要求RTL代碼中時(shí)鐘數(shù)(樹(shù))盡可能少,不同時(shí)鐘之間最好要有同相,同頻,倍頻的關(guān)系,以免X狀態(tài)的傳遞導(dǎo)致整個(gè)仿真的崩潰。時(shí)鐘以高電平開(kāi)始第一個(gè)CYCLE,這樣形成的第一個(gè)CYCLE是一個(gè)完整的CYCLE。2、實(shí)例:parameterPCY=40,PHC=20,SCY=20,SHC=10;initialbeginRX_ZT_PCLK<=1;forever#PHCRX_ZT_PCLK<=~RX_ZT_PCLK;end9--WriteTestbench--六、輸入信號(hào)處理要求:基于時(shí)鐘CYCLE,每個(gè)CYCLE僅可變化一次,按INPUTDELAY來(lái)調(diào)節(jié)輸入延遲,以達(dá)到在不同測(cè)試要求測(cè)試TSU,THD的需要,盡量不要用動(dòng)態(tài)的數(shù)值來(lái)控制輸入延遲。原因:ASIC測(cè)試向量每一個(gè)輸入的INPUTDELAY在整個(gè)測(cè)試向量過(guò)程中不會(huì)改變。例:parameterPCY=40,PHC=20,indelay=2;#indelay;//initialinputdelay;RTX_ZT_PFRAME_tb<=0;RTX_ZT_PIRDY_tb<=0;RX_ZT_PIDSEL<=1;#PCY;RTX_ZT_PFRAME_tb<=1;RX_ZT_PIDSEL<=0;RTX_ZT_PCBE_tb<=4'b0000;//ALLBYTEENABLED;if(i==0)RTX_ZT_PAD_tb<=32'h55555555;//write;elseif(i==2)RTX_ZT_PAD_tb<=32'haaaaaaaa;//write;elseRTX_ZT_PAD_tb<=32'hZZZZZZZZ;//read;#(PCY*3-indelay);//rightattherisingedgeofclk;andwaitfortargetack;while(!PCI_DATA_TRANSFER)#PCY;#indelay;//2nsaftertherisisngedgeofclk;RTX_ZT_PIRDY_tb<=1;#(PCY*10);10--WriteTestbench--七、復(fù)位信號(hào)處理要求:復(fù)位信號(hào)按普通信號(hào)處理;復(fù)位信號(hào)能迅速控制整個(gè)芯片和所有輸出的狀態(tài),這是對(duì)RTL代碼設(shè)計(jì)者的要求,這主要是良好的電路結(jié)構(gòu)的需要,附帶也會(huì)節(jié)省測(cè)試向量的工作;測(cè)試設(shè)備有可能將數(shù)個(gè)不足長(zhǎng)的測(cè)試向量合并成一個(gè)測(cè)試向量,通過(guò)復(fù)位來(lái)分隔它們,如果復(fù)位不能清掉上次測(cè)試在芯片內(nèi)部留下的狀態(tài)和輸出,則會(huì)影響到下一段測(cè)試向量。11--WriteTestbench--八、雙向信號(hào)處理要求:RTL代碼設(shè)計(jì)過(guò)程中,要分離出In,Out,Out_en三部分,一方面,ASIC芯片的雙向IO設(shè)計(jì)時(shí)需要這分離的三部分信號(hào);另一方面,ASIC測(cè)試機(jī)臺(tái)無(wú)法自動(dòng)決定雙向管腳何時(shí)該輸入,何時(shí)該輸出,它需要Out_en信號(hào)來(lái)控制輸入/輸出轉(zhuǎn)換;輸入端按輸入信號(hào)處理,在雙向口Out_en有效時(shí)輸入高阻電平“Z”,輸出端用Out_en來(lái)控制;例:assignRTX_ZT_EDOUT=RTX_ZT_EDOUT_tb;initialbeginRX_ZT_EDEVICE_DIN<=1'b1;RTX_ZT_EDOUT_tb<=1;#(SCY+indelay);foreverif(TX_ZT_EDOUT_OEN_N)RTX_ZT_EDOUT_tb<=1;elseRTX_ZT_EDOUT_tb<=1'bz;#(SCY);endend12--WriteTestbench--九、仿真結(jié)果保留(二進(jìn)制格式)測(cè)試向量穩(wěn)定后,可以將輸入向量、輸出結(jié)果保留,以進(jìn)行對(duì)比測(cè)試,ASIC流程各階段的仿真,并監(jiān)測(cè)仿真結(jié)果。因?yàn)檩斎牒洼敵鲂盘?hào)在一個(gè)CYCLE內(nèi)只變化一次,所以可在一個(gè)CYCLE的未期采樣輸入、輸出、三態(tài)使能信號(hào)存入文件中。時(shí)鐘信號(hào)無(wú)需保留,方便后續(xù)仿真自由決定時(shí)鐘頻率。例:#definestrobe=1;initialbegindesc=$fopen("zx2701_ptarget.dat");#(SCY-strobe);//1nsbeforeclkrisingedge,foreverbegin$fwrite(desc,"%d",din);$fwrite(desc,"%d",dout);$fwrite(desc,"%d",dinout);$fwrite(desc,"%d",U_ENTITY.dinout_oen);$fwrite(desc,"\n");#(SCY);endend13--WriteTestbench--記得在仿真結(jié)束之前關(guān)閉文件
.
.
.
#(PCY*20)
$fclose(desc);
$stop;
$finish;
end
14--WriteTestbench--十、測(cè)試結(jié)果保留(VCD格式)initialbegin$dumpfile("testbench.vcd");$dumpvars(0,U_ZT.RX_ZT_PRST_N,U_ZT.RX_ZT_PCLK,
U_ZT.TX_ZT_PREQ_N,U_ZT.RX_ZT_PGNT_N,U_ZT.TX_ZT_EDOUT_OEN_N);end...$dumpfinish:VCD文件不是基于CYCLE的,信號(hào)值一變動(dòng)就會(huì)存入到文件中,它比前述二進(jìn)制方式更精確,但對(duì)我們而言不實(shí)用。15--WriteTestbench--十一、對(duì)照仿真及ASIC流程各階段仿真測(cè)試數(shù)據(jù)從文件中讀取輸入信號(hào)按文件中讀出值在INPUT_DELAY的控制下加入文件中讀出的輸出信號(hào)用于和仿真出的輸出結(jié)果對(duì)照比較從文件中讀出的雙向信號(hào)值,在Out_en無(wú)效時(shí)作為輸入信號(hào)值加入,反之作為輸出對(duì)照值和仿真出的雙向口的輸出結(jié)果對(duì)照比較。16--WriteTestbench--例:輸入部分initial//txttestbenchreader;begin$readmemb("zx2701_gports_fc.dat",mem_a);for(i=0;i<filelength;i++)beginone_line=mem_a[0];#indelay;RX_ZT_PRST_N<=one_line[0];TX_ZT_PREQ_N_tb<=one_line[1];RTX_ZT_PFRAME_tb<=one_line[2];TX_ZT_FRAME_OEN_N_tb<=one_line[3];#(SCY-indelay);//righttoclkrising_edge;end$stop;$finish;endassignRTX_ZT_PFRAME=(TX_ZT_FRAME_OEN_N_tb)?RTX_ZT_PFRAME_tb:1'bz;17--WriteTestbench--例:輸出檢測(cè)initialbeginresult=1;#(SCY-tstrobe);//2NSBEFORECLKRISINGEDGE;foreverbeginresult=(TX_ZT_PREQ_N_tb==TX_ZT_PREQ_N)&&(TX_ZT_FRAME_OEN_N_tb||(RTX_ZT_PFRAME_N==RTX_ZT_PFRAME_tb))#SCY;if(!result)$write("resulterror,yoursimulationmaymeetsomeerror,atcycle:%d\n",i);endend雙向口由于還有輸入部他分,易和輸出部分產(chǎn)成碰撞,處理更要留意,建議單獨(dú)用一個(gè)INITIAL,并重新安排一個(gè)INPUT_DELAY來(lái)處理。經(jīng)過(guò)這樣輸入輸出處理的對(duì)照仿真就和真實(shí)的芯片測(cè)試機(jī)臺(tái)仿真基本同了。18--WriteTestbench--initial$sdf_annotate("ZX2701B_PAD.sdf",U_ZT);十二、SDF文件讀取19--WriteTestbench--十三、跨越時(shí)鐘域的測(cè)試問(wèn)題在跨越兩個(gè)時(shí)鐘邊界時(shí)易導(dǎo)致測(cè)試結(jié)果出錯(cuò),在測(cè)試機(jī)臺(tái)上判斷為廢片,但實(shí)際上芯片功能并沒(méi)有錯(cuò)。20--WriteTestbench--原因原因:即使是從芯片外部同頻同相的兩個(gè)時(shí)鐘輸入,由于各自負(fù)載量不同,時(shí)鐘樹(shù)分布不同,測(cè)試機(jī)臺(tái)打入信號(hào)時(shí)的誤差,最終到達(dá)各自的DFF時(shí)已經(jīng)完全沒(méi)有同相關(guān)系了。影響:即使功能上是能夠容忍,但可能無(wú)法滿足測(cè)試向量要求每個(gè)CYCLE精確的輸出值的要求,導(dǎo)致將功能正確的芯片判斷為廢片。21--WriteTestbench--解決方法一、盡量減少時(shí)鐘數(shù)always@(posedgealeornegedgerst)if(!rst)dout<=0;elsedout<=din;always@(posedgeclkornegedgerst)if(!rst)…….Elseif(dout=xxxx)…….在CLK和ALE之間存在跨越兩個(gè)時(shí)鐘邊界的數(shù)據(jù)傳輸,這兩個(gè)時(shí)鐘之間無(wú)相位關(guān)系,仿真時(shí)可能出錯(cuò),但功能或許已經(jīng)通過(guò)其它手段得到保證不會(huì)出錯(cuò)。always@(posedgeclkornegedgerst)if(!rst)begindout<=0;din_reg<=0;endelsebegindin_reg<=din;ale_reg<=ale;if(ale&&!ale_reg)//alerisingdout<=din_reg;elsedout<=dout;end22--WriteTestbench--解決方法二、在RTL設(shè)計(jì)過(guò)程中,只用管腳提供的時(shí)鐘,不要派生出新的時(shí)鐘來(lái),用到DLL的情況例外。always@(posedgeclkornegedgerst)if(!rst)count<=0;elsecount<=count+1;always@(posedgecount[4]ornegedgerst)if(!rst)dout<=0;elsedout<=dina+dinb;always@(posedgeclkornegedgerst)if(!rst)…..elseif(dout==xxxx)…..count[4]被派生出作為一個(gè)新的時(shí)鐘,一個(gè)跨越兩個(gè)時(shí)鐘邊界的數(shù)據(jù)傳輸線出現(xiàn)了。always@(posedgeclkornegedgerst)if(!rst)begincount<=0;dout<=0;endelsebegincount<=count+1;if(count[4:0]==5'b11111)dout<=dina+dinb;elsedout<=dout;end23--WriteTestbench--解決方法三、在跨越兩個(gè)時(shí)鐘邊界的數(shù)據(jù)線上加上延時(shí)用BUFFER,來(lái)彌補(bǔ)HOLD時(shí)間。注、此種方法可能導(dǎo)致和FPGA的后仿真結(jié)果不一致,但通常應(yīng)該和RTL代碼的純行為仿真是一致的,在測(cè)試向量中兩個(gè)時(shí)鐘相位一致的前提下。24--WriteTestbench--小結(jié):測(cè)試向量和RTL的分別RTL:平面化的電路結(jié)構(gòu)描述測(cè)試向量:時(shí)序化的過(guò)程描述RTL:主要由狀態(tài)機(jī)來(lái)描述,測(cè)試向量:軟件化的時(shí)序過(guò)程,可用流程圖的方式描述。謝謝!吳宗軍2003.10.1526--WriteTestbench--抽象波形的生成(2)tasksync_resetbeginrst<=1’b1;d0<=1’b1;d1<=1’b0;sel<=$random;@(posedgeclk);#(Thodl);{rst,d0,d1,sel}<=4’bxxxx;#(cycle–Thold–Tsetup);endendtasktaskload_d0Inputdatabeginrst<=1’b0;d0<=data;d1<=~data;sel<=1’b0;@(posedgeclk);#(Thodl);{rst,d0,d1,sel}<=4’bxxxx;#(cycle–Thold–Tsetup);endendtaskInitialbeginsync_reset;load_d0(1’b1);sync_reset;load_d0(1’b1);load_d0(1’b1);load_d0(1’b1);end27--WriteTestbench--輸出驗(yàn)證輸出驗(yàn)證的手段響應(yīng)的可視檢查產(chǎn)生仿真結(jié)果減小采樣觀察波形產(chǎn)生激勵(lì)只完成了一半的工作,實(shí)際上,只有差不多30%的工作,另外一部分工作就是驗(yàn)證輸出是否期待的結(jié)果,而后者是更加耗時(shí)的和容易產(chǎn)生錯(cuò)誤的。28--WriteTestbench--響應(yīng)的可視檢查可視檢查的手段parameterINTERVAL=10alwaysbegin#(INTERVAL);$write(...);end按照一定的時(shí)間間隔打印信息29--WriteTestbench--響應(yīng)的可視檢查always@(posedgeclk)$write(...);可視檢查的手段按照一定的時(shí)間間隔打印信息基于參考信號(hào)打印信息30--WriteTestbench--響應(yīng)的可視檢查initialbegin$monitor("...",rst,d0,d1);end基于信號(hào)的變換打印信息可視檢查的手段按照一定的時(shí)間間隔打印信息基于參考信號(hào)打印信息31--WriteTestbench--響應(yīng)的可視檢查initialbegin$monitor("...",rst,d0,d1);$monitoroff;sync_reset;load_do(1’b1);sync_reset;$monitoron;$load_d1(1’b1);$load_d0(1’b0);$sync_reset;$monitoroff;end減小采樣,加速仿真基于信號(hào)的變換打印信息可視檢查的手段按照一定的時(shí)間間隔打印信息基于參考信號(hào)打印信息32--WriteTestbench--響應(yīng)的可視檢查觀察波形減小采樣,加速仿真基于信號(hào)的變換打印信息可視檢查的手段按照一定的時(shí)間間隔打印信息基于參考信號(hào)打印信息33--WriteTestbench--當(dāng)模型錯(cuò)誤出現(xiàn)錯(cuò)誤的時(shí)候,花多少時(shí)間可以診斷出錯(cuò)誤,時(shí)間是否我們可以接受的?對(duì)于一個(gè)簡(jiǎn)單的設(shè)計(jì),一個(gè)較短的仿真周期,較少的信號(hào)變量,可視化的檢查非常有效!對(duì)于一個(gè)復(fù)雜點(diǎn)的設(shè)計(jì),成百上千的時(shí)鐘周期,數(shù)百的輸入輸出信號(hào)變量,可視化的檢查方法是否還是適用?34--WriteTestbench--輸入輸出向量initialbegin//In:rst,d0,d1,sel//Out:q,qbapply_vector(4’b1110,2’b00);apply_vector(4’b0100,2’b10);apply_vector(4’b1111,2’b00);apply_vector(4’b0011,2’b10);apply_vector(4’b0010,2’b01);apply_vector(4’b0011,2’b10);apply_vector(4’b1111,2’b00);endTaskapply_vector;input[…]in_data;output[…]out_data;begininputs<=in_data;@(posedgeclk)forkbegin#(Thold);inputs<=…’bx;endbegin#(Td);if(outputs!=out_data)…endjoinend輸出結(jié)果與期待值比較,只對(duì)不滿足條件的結(jié)果檢查優(yōu)點(diǎn)?35--WriteTestbench--完美向量(GoldenVector)(1)它是一套正確的參考仿真結(jié)果它不跟隨內(nèi)部時(shí)序的改變而改變它具有很高的可維護(hù)性參考模型DUV輸出比較激勵(lì)的生成什么是完美向量?36--WriteTestbench--完美向量(GoldenVector)(2)直接將Testbench產(chǎn)生的文件和目標(biāo)文件比較利用工具比較波形文件采用人工的方式監(jiān)視結(jié)果參考模型DUV輸出比較激勵(lì)的生成結(jié)果的比較?37--WriteTestbench--復(fù)雜的激勵(lì)激勵(lì)和設(shè)計(jì)之間的反饋從死鎖中恢復(fù)異步接口CPU操作可配置的操作38--WriteTestbench--激勵(lì)和設(shè)計(jì)之間的反饋taskbus_request;integercycle_count=0;beginreq<=1;@(posedgeclk);while(grt==1'b0)begin@(posedgeclk);count=count+1;endif((count<6)|(count>0)$display("cycle_count=%h",cycle_count);endendtask在輸入和輸出向量中我們談到可以采用輸出結(jié)果與期待比較的驗(yàn)證方式,但是如果這個(gè)結(jié)果是一個(gè)范圍,那我們?cè)摬扇∈裁捶绞剑勘O(jiān)視信號(hào)是否與協(xié)議符合39--WriteTestbench--從死鎖中恢復(fù)(1)反饋天生的風(fēng)險(xiǎn):激勵(lì)依賴設(shè)計(jì)的完成情況。如果設(shè)計(jì)不能夠提供期待的反饋,激勵(lì)的成生將會(huì)被掛起,等待的情況將永遠(yuǎn)不會(huì)發(fā)生。如果grt信號(hào)不為1,那么整個(gè)任務(wù)將會(huì)粘在while語(yǔ)句,不會(huì)結(jié)束taskbus_request;integercount=0;beginreq<=1;@(posedgeclk);while(grt==1'b0)begin@(posedgeclk);count=count+1;endif((count<6)||(count>0)$display(“requestmeettheprotocol”);endendtask40--WriteTestbench--從死鎖中恢復(fù)(2)taskbus_request;integercount=0;integerloop=1;beginreq<=1;@(posedgeclk);while((grt==1'b0)&&(loop==1’b1))begin@(posedgeclk);count=count+1;if(count>50)beginloop=0;$display(“nogrant”);endendif((count<6)||(count>0)$display(“requestmeettheprotocol”);endendtask當(dāng)遇到grt信號(hào)不在期待的時(shí)間響應(yīng)的時(shí)候,如何避免死鎖?如何預(yù)測(cè)死鎖的發(fā)生?只要遇到反饋的情況,就必然有死鎖存在。如何解決死鎖的發(fā)生?信號(hào)在期待的周期內(nèi)沒(méi)有發(fā)生,那么強(qiáng)行退出任務(wù),報(bào)告錯(cuò)誤,繼續(xù)完成其他的測(cè)試用例41--WriteTestbench--從死鎖中恢復(fù)(3)在測(cè)試用例中處理死鎖問(wèn)題使得整個(gè)流程更有彈性taskbus_request;outputstatus;integercount=0;Integerloop=1;beginstatus=1’b1;req<=1;@(posedgeclk);while((grt==1'b0)&&(loop==1’b1))begin@(posedgeclk);count=count+1;if(count>50)beginloop=1’b0;status=1’b0;endendif((count<6)||(count>0)$display(“requestmeettheprotocol”);endendtasktasktestcase;reggranted;integerattempts;integerloop;beginattempts=0;loop=1;while(loop)beginbus_request(granted);if(granted!=1)beginattempts=attempts+1;if(attempts<5)$display(“nogrant”);loop=0;endloop=0;endendendtask42--WriteTestbench--異步接口(1)taskbus_request;outputgood;beginreq=1'b1;fork:wait_for_grt#60disablewait_for_grt;@(posedgegrt)disablewait_for_grt;jiongood=(grt==1'b1);endendtask在期待的時(shí)間點(diǎn)等待信號(hào)事件43--WriteTestbench--異步接口(2)taskbus_request;outputgood;begin:bus_request_taskif(grt==1’b1)begingood=1’b0;disablebus_request_taskendreq=1'b1;fork:wait_for_grt#60disablewait_for_grt;@(posedgegrt)disablewait_for_grt;jiongood=(grt==1'b1);endendtask當(dāng)仲裁器工作不正常的時(shí)候grt信號(hào)將不會(huì)按照協(xié)議正常的產(chǎn)生,此時(shí)不會(huì)在期待的時(shí)間點(diǎn)有g(shù)rt的上升沿。因此必須首先驗(yàn)證grt信號(hào),然后才驗(yàn)證req信號(hào)44--WriteTestbench--復(fù)雜的響應(yīng)什么是復(fù)雜響應(yīng)?處理未知的或者變化的延遲抽象輸出操作一般輸出監(jiān)視監(jiān)視多種可能的操作監(jiān)視雙向接口45--WriteTestbench--什么是復(fù)雜響應(yīng)?我們已經(jīng)確信:即使是一個(gè)簡(jiǎn)單的響應(yīng),可視監(jiān)視的驗(yàn)證方式也不是一個(gè)可行的方法。而復(fù)雜的響應(yīng)更加不能采用波形的監(jiān)視的方式來(lái)驗(yàn)證。驗(yàn)證輸出響應(yīng)的處理應(yīng)該是自動(dòng)的。復(fù)雜響應(yīng)=延遲+輸出協(xié)議46--WriteTestbench--一個(gè)簡(jiǎn)單的說(shuō)明-單個(gè)寫(xiě)CPUI/FRS-232TxTxFIFOCPUWriteIntdelaySerialTxGapininputsequenceTimeCPU寫(xiě)周期內(nèi)部延遲事務(wù)結(jié)束47--WriteTestbench--一個(gè)簡(jiǎn)單的說(shuō)明-連續(xù)寫(xiě)CPUI/FRS-232TxTxFIFOCPUWriteIntdelaySerialTxTimeCPU寫(xiě)周期內(nèi)部延遲事務(wù)結(jié)束48--WriteTestbench--抽象輸出操作taskrev;inputrx;input[7:0]expected;integerperiod;reg[7:0]data;beginperiod=100;wait(rx==1'b1);#(period/2);data[7]=0;for(i=0;i<8;i=i+1)begin#(100)ldata[i]=rx;end#periodrx=0;
if(expected!=data)$display(…);endendtask將任務(wù)封裝起來(lái),同時(shí)輸入期待的值與實(shí)際值比較Self-checking49--WriteTestbench--處理未知的或者變化的延遲ConfigWriteConfigWriteIsIdle?DataOk?IsIdle?DataOk?InitStimulusResponseEnd上圖描述了UART發(fā)送路徑。指示了從配置,Idle檢查到激活數(shù)據(jù)發(fā)送的過(guò)程。50--WriteTestbench--initialbegin...//initsimulationfork:config_phasebegin...//configdisableconfig_phaseendbegin...//checkoutputremainsidleendjoin
fork:data_phasebegin...//writedatatosendviaCPIi/fendbegin...//checkdatasentseriallyendjoin...//terminatesimulationendUART配置狀態(tài)是否Idle檢查發(fā)送數(shù)據(jù)串行數(shù)據(jù)協(xié)議檢查51--WriteTestbench--通用輸出監(jiān)視taskrev;inputrx;output[7:0]actual;integerperiod;reg[7:0]data;beginperiod=100;wait(rx==1'b1);#(period/2);data[7]=0;for(i=0;i<8;i=i+1)begin#(100)ldata[i]=rx;end#periodrx=0;actual=data;endendtask將任務(wù)封裝起來(lái),同返回輸出值,能夠讓testbench靈活的使用!52--WriteTestbench--監(jiān)視多種可能的操作(1)loadA,R0loadB,R1addR0,R1,R2stor2,XloadC,R3addR0,R3,R4stoR4,YLocationAisreadbeforelocationXandYarewrittenLocationBisreadbeforelocationXiswrittenLocationCisreadbeforelocationYiswrittenLocationXmustbewrittenwiththevalueA+BLocationYmustbewrittenwiththevalueA+C或許存在這樣的情形,在輸出接口上不止發(fā)生一種類(lèi)型的操作。你不能預(yù)測(cè)下一步是哪種指定的操作。例如:在處理器亂序執(zhí)行指令時(shí),你不能預(yù)測(cè)(如果你沒(méi)有足夠的處理器結(jié)構(gòu)知識(shí))讀或者寫(xiě)周期將會(huì)出現(xiàn)在數(shù)據(jù)存儲(chǔ)器接口上。這一功能的正確性決定于相關(guān)數(shù)據(jù)位置的訪問(wèn)順序。53--WriteTestbench--監(jiān)視多種可能的操作(2)當(dāng)不知道下一個(gè)操作是什么的時(shí)候,你如何寫(xiě)一個(gè)封裝形式的輸出Monitor?你的Monitor必須在下一個(gè)周期開(kāi)始時(shí)能夠識(shí)別出該周期類(lèi)型。驗(yàn)證所有操作前導(dǎo)(preamble),反饋?zhàn)R別信息給testbench,然后testbench調(diào)用適當(dāng)?shù)娜蝿?wù)完成操作的驗(yàn)證。54--WriteTestbench--監(jiān)視多種可能的操作(3)parameterREAD_CYCLE=0;WRITE_CYCLE=1;timelast_addr;tasknext_cycle_is;outputcycle_kind;output[23:0]address;begin@(negedgeale);address=addr;cycle_kind=(rw==1'b1)?READ_CYCLE:WRITE_CYCLE;#(Tahold);if($time-last_addr<Tahold-Tasetup)$write("Setup/Holdtimeviol.onaddr\n");endendtaskinitialbegin:test_procedureregcycle_kind;reg[23:0]addr;
next_cycle_is(cycle_kind,addr);case(cycle_kind)READ_CYCLE:read_cycle(addr);WRITE_CYCLE:write_cycle(addr);endcase...end類(lèi)型判斷不同類(lèi)型不同處理55--WriteTestbench--監(jiān)視雙向接口(1)如果一個(gè)任務(wù)或者過(guò)程發(fā)起操作,那么它就是激勵(lì)生成器,如果一個(gè)任務(wù)或者過(guò)程等待設(shè)計(jì)發(fā)起操作,那么它就是輸出監(jiān)視器。BridgeOn-ChipMasterPCISlaveon-chipbusPCIbus橋轉(zhuǎn)換一個(gè)私有on-chip總線和PCI總線協(xié)議。On-chip總線發(fā)起操作。如果地址屬于橋地址空間,橋轉(zhuǎn)換協(xié)議到PCI總線。橋允許on-chip總線到PCI總線上的從器件透明訪問(wèn)。56--WriteTestbench--監(jiān)視雙向接口(2)BridgeOn-ChipMasterPCISlaveon-chipbusPCIbusBridgeOn-ChipGeneratorPCIMonitor為了驗(yàn)證橋,你需要一個(gè)on-chip總線的產(chǎn)生器和PCI總線的監(jiān)視器,如上圖。例如可以采用一個(gè)存儲(chǔ)器模型來(lái)代替PCI監(jiān)視器,寫(xiě)
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 石油開(kāi)采中的社會(huì)責(zé)任與可持續(xù)性考核試卷
- 林業(yè)機(jī)械化林業(yè)機(jī)械研發(fā)與創(chuàng)新考核試卷
- 組織溝通藝術(shù)與團(tuán)隊(duì)協(xié)作考核試卷
- 喀什職業(yè)技術(shù)學(xué)院《建筑計(jì)劃》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東省梁山一中、嘉祥一中2024-2025學(xué)年高三下學(xué)期期末教學(xué)質(zhì)量檢測(cè)試題化學(xué)試題含解析
- 泉州幼兒師范高等專(zhuān)科學(xué)?!秷?zhí)業(yè)醫(yī)師考試實(shí)踐技能培訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 寧夏長(zhǎng)慶中學(xué)2025年高三下學(xué)期第二次摸底考試語(yǔ)文試題含解析
- 平?jīng)雎殬I(yè)技術(shù)學(xué)院《日語(yǔ)口語(yǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南昌醫(yī)學(xué)院《建筑遺產(chǎn)保護(hù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東省廣饒縣重點(diǎn)中學(xué)2025年初三物理試題9月25日第4周測(cè)試題含解析
- 電動(dòng)卷簾門(mén)合同協(xié)議
- 北京市朝陽(yáng)區(qū)區(qū)管企業(yè)年輕人才“培優(yōu)”計(jì)劃招聘筆試真題2024
- 2025-2030中國(guó)太陽(yáng)能電池板清潔系統(tǒng)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025年廣東省深圳高級(jí)中學(xué)高中園高考數(shù)學(xué)三模試卷(含答案)
- 上海2025年上海市衛(wèi)生健康技術(shù)評(píng)價(jià)中心上半年招聘16人筆試歷年參考題庫(kù)附帶答案詳解
- 建設(shè)分包合同保證金協(xié)議
- 2025年甘肅西北永新集團(tuán)招聘11人筆試參考題庫(kù)附帶答案詳解
- 江蘇省鎮(zhèn)江市2024-2025學(xué)年下學(xué)期七年級(jí)數(shù)學(xué)期中試卷(原卷版+解析版)
- 2023年江蘇省環(huán)保集團(tuán)有限公司長(zhǎng)期招聘筆試參考題庫(kù)附帶答案詳解
- GB/T 45369-2025吸收性衛(wèi)生用紙制品及原材料消臭效果評(píng)價(jià)方法
- 第一章+動(dòng)量守恒定律+章末復(fù)習(xí)高二上學(xué)期物理人教版(2019)選擇性必修第一冊(cè)
評(píng)論
0/150
提交評(píng)論