版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
編寫Testbench激勵與響應吳宗軍2003.092--WriteTestbench--可編程器件及IC驗證措施小規(guī)模設計的電路適用的驗證方法1、仿真2、PCB板上的物理測試;因規(guī)模小,時序和功能驗證不復雜,基本不需其它驗證措施。大規(guī)模設計的電路適用的驗證方法1、仿真2、物理測試3、一致性驗證4、靜態(tài)時序分析5、(IC用)DFT和ATPG3--WriteTestbench--一、編寫測試向量的目的RTL功能仿真;FPGA功能及時序仿真;ASIC后端流程的前/后仿真;ASIC樣片在測試機臺上的測試。*在所有階段,都要用到RTL設計者設計的測試向量,隨著ASIC流程的進行,該測試向量格式會發(fā)生變化。*在ASIC階段,還要用到DFT、MEMBIST生成的測試向量,由EDA工具生動生成。4--WriteTestbench--二、測試向量的簡要流程5--WriteTestbench--用HDL編寫測試向量和直接畫時序圖仿真方法的比較畫圖仿真方法優(yōu)點:直觀、簡單、方便。缺點:適用于信號數(shù)量不多、測試深度不長、簡單協(xié)議的仿真,波形的調整不方便,如想改變時鐘頻率,輸入信號的setup/holdtime都不方便;同時觀察仿真的結果正確與否需人工進行。HDL編寫的測試向量缺點:不夠簡單和方便,波形也不直觀。依據(jù)設計者的熟練程度而異。優(yōu)點:信號數(shù)量可以很多,測試深度任意,尤其適用于有復雜協(xié)議(如PCI、以太網(wǎng)、無線協(xié)議等)的仿真,仿真狀態(tài)的調整方便,甚至于仿真結果的分析都可由測試向量自動進行,可在整個設計流程中使用同一測試向量,自動檢測分析本流程的設計結果。一個優(yōu)秀的測試向量需要有一個同樣優(yōu)秀的設計相配合,它們之間是相互監(jiān)督的關系。6--WriteTestbench--三、ASIC前/后仿真及芯片測試機臺的測試向量通用格式要求有輸出檢測;測試向量中只能有一個主控時鐘;以主控時鐘的CYCLE寬度為測試周期,一個周期內輸入信號只能改變一次;輸入信號(包括雙向口處于非輸出模式時)必須確定,即不能為0或1以外的值;輸出信號盡量控制使其不要處在除0和1以外的其它狀態(tài);一般的測試機臺不能檢測輸出信號的高阻態(tài)輸出;7--WriteTestbench--四、推薦測試向量格式Inputdelay和outputstrobetime的值均可調節(jié)8--WriteTestbench--五、測試向量時鐘設計1、要求:因測試向量中只能有一個主控時鐘,所以要求RTL代碼中時鐘數(shù)(樹)盡可能少,不同時鐘之間最好要有同相,同頻,倍頻的關系,以免X狀態(tài)的傳遞導致整個仿真的崩潰。時鐘以高電平開始第一個CYCLE,這樣形成的第一個CYCLE是一個完整的CYCLE。2、實例:parameterPCY=40,PHC=20,SCY=20,SHC=10;initialbeginRX_ZT_PCLK<=1;forever#PHCRX_ZT_PCLK<=~RX_ZT_PCLK;end9--WriteTestbench--六、輸入信號處理要求:基于時鐘CYCLE,每個CYCLE僅可變化一次,按INPUTDELAY來調節(jié)輸入延遲,以達到在不同測試要求測試TSU,THD的需要,盡量不要用動態(tài)的數(shù)值來控制輸入延遲。原因:ASIC測試向量每一個輸入的INPUTDELAY在整個測試向量過程中不會改變。例: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--七、復位信號處理要求:復位信號按普通信號處理;復位信號能迅速控制整個芯片和所有輸出的狀態(tài),這是對RTL代碼設計者的要求,這主要是良好的電路結構的需要,附帶也會節(jié)省測試向量的工作;測試設備有可能將數(shù)個不足長的測試向量合并成一個測試向量,通過復位來分隔它們,如果復位不能清掉上次測試在芯片內部留下的狀態(tài)和輸出,則會影響到下一段測試向量。11--WriteTestbench--八、雙向信號處理要求:RTL代碼設計過程中,要分離出In,Out,Out_en三部分,一方面,ASIC芯片的雙向IO設計時需要這分離的三部分信號;另一方面,ASIC測試機臺無法自動決定雙向管腳何時該輸入,何時該輸出,它需要Out_en信號來控制輸入/輸出轉換;輸入端按輸入信號處理,在雙向口Out_en有效時輸入高阻電平“Z”,輸出端用Out_en來控制;例: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--九、仿真結果保留(二進制格式)測試向量穩(wěn)定后,可以將輸入向量、輸出結果保留,以進行對比測試,ASIC流程各階段的仿真,并監(jiān)測仿真結果。因為輸入和輸出信號在一個CYCLE內只變化一次,所以可在一個CYCLE的未期采樣輸入、輸出、三態(tài)使能信號存入文件中。時鐘信號無需保留,方便后續(xù)仿真自由決定時鐘頻率。例:#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--記得在仿真結束之前關閉文件
.
.
.
#(PCY*20)
$fclose(desc);
$stop;
$finish;
end
14--WriteTestbench--十、測試結果保留(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的,信號值一變動就會存入到文件中,它比前述二進制方式更精確,但對我們而言不實用。15--WriteTestbench--十一、對照仿真及ASIC流程各階段仿真測試數(shù)據(jù)從文件中讀取輸入信號按文件中讀出值在INPUT_DELAY的控制下加入文件中讀出的輸出信號用于和仿真出的輸出結果對照比較從文件中讀出的雙向信號值,在Out_en無效時作為輸入信號值加入,反之作為輸出對照值和仿真出的雙向口的輸出結果對照比較。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--例:輸出檢測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)成碰撞,處理更要留意,建議單獨用一個INITIAL,并重新安排一個INPUT_DELAY來處理。經(jīng)過這樣輸入輸出處理的對照仿真就和真實的芯片測試機臺仿真基本同了。18--WriteTestbench--initial$sdf_annotate("ZX2701B_PAD.sdf",U_ZT);十二、SDF文件讀取19--WriteTestbench--十三、跨越時鐘域的測試問題在跨越兩個時鐘邊界時易導致測試結果出錯,在測試機臺上判斷為廢片,但實際上芯片功能并沒有錯。20--WriteTestbench--原因原因:即使是從芯片外部同頻同相的兩個時鐘輸入,由于各自負載量不同,時鐘樹分布不同,測試機臺打入信號時的誤差,最終到達各自的DFF時已經(jīng)完全沒有同相關系了。影響:即使功能上是能夠容忍,但可能無法滿足測試向量要求每個CYCLE精確的輸出值的要求,導致將功能正確的芯片判斷為廢片。21--WriteTestbench--解決方法一、盡量減少時鐘數(shù)always@(posedgealeornegedgerst)if(!rst)dout<=0;elsedout<=din;always@(posedgeclkornegedgerst)if(!rst)…….Elseif(dout=xxxx)…….在CLK和ALE之間存在跨越兩個時鐘邊界的數(shù)據(jù)傳輸,這兩個時鐘之間無相位關系,仿真時可能出錯,但功能或許已經(jīng)通過其它手段得到保證不會出錯。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設計過程中,只用管腳提供的時鐘,不要派生出新的時鐘來,用到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]被派生出作為一個新的時鐘,一個跨越兩個時鐘邊界的數(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--解決方法三、在跨越兩個時鐘邊界的數(shù)據(jù)線上加上延時用BUFFER,來彌補HOLD時間。注、此種方法可能導致和FPGA的后仿真結果不一致,但通常應該和RTL代碼的純行為仿真是一致的,在測試向量中兩個時鐘相位一致的前提下。24--WriteTestbench--小結:測試向量和RTL的分別RTL:平面化的電路結構描述測試向量:時序化的過程描述RTL:主要由狀態(tài)機來描述,測試向量:軟件化的時序過程,可用流程圖的方式描述。謝謝!吳宗軍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--輸出驗證輸出驗證的手段響應的可視檢查產(chǎn)生仿真結果減小采樣觀察波形產(chǎn)生激勵只完成了一半的工作,實際上,只有差不多30%的工作,另外一部分工作就是驗證輸出是否期待的結果,而后者是更加耗時的和容易產(chǎn)生錯誤的。28--WriteTestbench--響應的可視檢查可視檢查的手段parameterINTERVAL=10alwaysbegin#(INTERVAL);$write(...);end按照一定的時間間隔打印信息29--WriteTestbench--響應的可視檢查always@(posedgeclk)$write(...);可視檢查的手段按照一定的時間間隔打印信息基于參考信號打印信息30--WriteTestbench--響應的可視檢查initialbegin$monitor("...",rst,d0,d1);end基于信號的變換打印信息可視檢查的手段按照一定的時間間隔打印信息基于參考信號打印信息31--WriteTestbench--響應的可視檢查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減小采樣,加速仿真基于信號的變換打印信息可視檢查的手段按照一定的時間間隔打印信息基于參考信號打印信息32--WriteTestbench--響應的可視檢查觀察波形減小采樣,加速仿真基于信號的變換打印信息可視檢查的手段按照一定的時間間隔打印信息基于參考信號打印信息33--WriteTestbench--當模型錯誤出現(xiàn)錯誤的時候,花多少時間可以診斷出錯誤,時間是否我們可以接受的?對于一個簡單的設計,一個較短的仿真周期,較少的信號變量,可視化的檢查非常有效!對于一個復雜點的設計,成百上千的時鐘周期,數(shù)百的輸入輸出信號變量,可視化的檢查方法是否還是適用?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輸出結果與期待值比較,只對不滿足條件的結果檢查優(yōu)點?35--WriteTestbench--完美向量(GoldenVector)(1)它是一套正確的參考仿真結果它不跟隨內部時序的改變而改變它具有很高的可維護性參考模型DUV輸出比較激勵的生成什么是完美向量?36--WriteTestbench--完美向量(GoldenVector)(2)直接將Testbench產(chǎn)生的文件和目標文件比較利用工具比較波形文件采用人工的方式監(jiān)視結果參考模型DUV輸出比較激勵的生成結果的比較?37--WriteTestbench--復雜的激勵激勵和設計之間的反饋從死鎖中恢復異步接口CPU操作可配置的操作38--WriteTestbench--激勵和設計之間的反饋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ān)視信號是否與協(xié)議符合39--WriteTestbench--從死鎖中恢復(1)反饋天生的風險:激勵依賴設計的完成情況。如果設計不能夠提供期待的反饋,激勵的成生將會被掛起,等待的情況將永遠不會發(fā)生。如果grt信號不為1,那么整個任務將會粘在while語句,不會結束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--從死鎖中恢復(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當遇到grt信號不在期待的時間響應的時候,如何避免死鎖?如何預測死鎖的發(fā)生?只要遇到反饋的情況,就必然有死鎖存在。如何解決死鎖的發(fā)生?信號在期待的周期內沒有發(fā)生,那么強行退出任務,報告錯誤,繼續(xù)完成其他的測試用例41--WriteTestbench--從死鎖中恢復(3)在測試用例中處理死鎖問題使得整個流程更有彈性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在期待的時間點等待信號事件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當仲裁器工作不正常的時候grt信號將不會按照協(xié)議正常的產(chǎn)生,此時不會在期待的時間點有grt的上升沿。因此必須首先驗證grt信號,然后才驗證req信號44--WriteTestbench--復雜的響應什么是復雜響應?處理未知的或者變化的延遲抽象輸出操作一般輸出監(jiān)視監(jiān)視多種可能的操作監(jiān)視雙向接口45--WriteTestbench--什么是復雜響應?我們已經(jīng)確信:即使是一個簡單的響應,可視監(jiān)視的驗證方式也不是一個可行的方法。而復雜的響應更加不能采用波形的監(jiān)視的方式來驗證。驗證輸出響應的處理應該是自動的。復雜響應=延遲+輸出協(xié)議46--WriteTestbench--一個簡單的說明-單個寫CPUI/FRS-232TxTxFIFOCPUWriteIntdelaySerialTxGapininputsequenceTimeCPU寫周期內部延遲事務結束47--WriteTestbench--一個簡單的說明-連續(xù)寫CPUI/FRS-232TxTxFIFOCPUWriteIntdelaySerialTxTimeCPU寫周期內部延遲事務結束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將任務封裝起來,同時輸入期待的值與實際值比較Self-checking49--WriteTestbench--處理未知的或者變化的延遲ConfigWriteConfigWriteIsIdle?DataOk?IsIdle?DataOk?InitStimulusResponseEnd上圖描述了UART發(fā)送路徑。指示了從配置,Idle檢查到激活數(shù)據(jù)發(fā)送的過程。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將任務封裝起來,同返回輸出值,能夠讓testbench靈活的使用!52--WriteTestbench--監(jiān)視多種可能的操作(1)loadA,R0loadB,R1addR0,R1,R2stor2,XloadC,R3addR0,R3,R4stoR4,YLocationAisreadbeforelocationXandYarewrittenLocationBisreadbeforelocationXiswrittenLocationCisreadbeforelocationYiswrittenLocationXmustbewrittenwiththevalueA+BLocationYmustbewrittenwiththevalueA+C或許存在這樣的情形,在輸出接口上不止發(fā)生一種類型的操作。你不能預測下一步是哪種指定的操作。例如:在處理器亂序執(zhí)行指令時,你不能預測(如果你沒有足夠的處理器結構知識)讀或者寫周期將會出現(xiàn)在數(shù)據(jù)存儲器接口上。這一功能的正確性決定于相關數(shù)據(jù)位置的訪問順序。53--WriteTestbench--監(jiān)視多種可能的操作(2)當不知道下一個操作是什么的時候,你如何寫一個封裝形式的輸出Monitor?你的Monitor必須在下一個周期開始時能夠識別出該周期類型。驗證所有操作前導(preamble),反饋識別信息給testbench,然后testbench調用適當?shù)娜蝿胀瓿刹僮鞯尿炞C。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類型判斷不同類型不同處理55--WriteTestbench--監(jiān)視雙向接口(1)如果一個任務或者過程發(fā)起操作,那么它就是激勵生成器,如果一個任務或者過程等待設計發(fā)起操作,那么它就是輸出監(jiān)視器。BridgeOn-ChipMasterPCISlaveon-chipbusPCIbus橋轉換一個私有on-chip總線和PCI總線協(xié)議。On-chip總線發(fā)起操作。如果地址屬于橋地址空間,橋轉換協(xié)議到PCI總線。橋允許on-chip總線到PCI總線上的從器件透明訪問。56--WriteTestbench--監(jiān)視雙向接口(2)BridgeOn-ChipMasterPCISlaveon-chipbusPCIbusBridgeOn-ChipGeneratorPCIMonitor為了驗證橋,你需要一個on-chip總線的產(chǎn)生器和PCI總線的監(jiān)視器,如上圖。例如可以采用一個存儲器模型來代替PCI監(jiān)視器,寫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024排水工程水質改善工程承包合同范本3篇
- 2025年度物聯(lián)網(wǎng)技術應用合同補充協(xié)議
- 2024無錫市房地產(chǎn)拍賣合同樣本3篇
- 2024影院線上線下活動策劃與執(zhí)行合同3篇
- 2025版金融公司出納會計職位聘用合同文本2篇
- 2024年版外賣平臺配送員合同2篇
- 2024某化妝品公司與某代言人關于產(chǎn)品代言之合同
- 2025年度家居建材銷售業(yè)務合同范本(定制服務)3篇
- 2025年度新型環(huán)保建材沙石材料購銷合同2篇
- 2024年版本:企業(yè)形象設計服務合同3篇
- 2024年中國大數(shù)據(jù)企業(yè)排行榜V9.0(大數(shù)據(jù)產(chǎn)業(yè)白皮書)-中國民營科技促進會
- 2025年統(tǒng)編版高考政治一輪復習:選擇性必修1、2、3共3冊必背考點知識點匯編
- 貨物交接單和交接合同
- 七年級語文下冊專項練習知識(對聯(lián))
- MOOC 知識圖譜導論-浙江大學 中國大學慕課答案
- 2016-2017學年天津市部分區(qū)九年級(上)期末化學試卷
- 培智五年級上次數(shù)學期末考試題
- 配電房施工組織設計方案(土建部分)
- 國家開放大學電大專科《英語教學法》2023-2024期末試題及答案(試卷代號:2145)
- 管樁水平承載力計算
- 事業(yè)單位領導班子考核測評表
評論
0/150
提交評論