集成電路設計課件:9 testbench編寫_第1頁
集成電路設計課件:9 testbench編寫_第2頁
集成電路設計課件:9 testbench編寫_第3頁
集成電路設計課件:9 testbench編寫_第4頁
集成電路設計課件:9 testbench編寫_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、testbench編寫系統(tǒng)任務和函數(shù)Testbenchverilog對驗證的支持在數(shù)字電路的設計過程中,仿真與驗證是一個重要的環(huán)節(jié),它能檢查所設計的電路是否符合要求。Verilog提供系統(tǒng)任務和函數(shù)支持仿真與驗證。 在Verilog HDL語言中每個系統(tǒng)函數(shù)和任務前面都用一個標識符$來加以確認。這些系統(tǒng)函數(shù)和任務提供了非常強大的功能。1.仿真時間訪問仿真時間$time,$realtime,和$stime函數(shù)返回當前仿真時間。這些函數(shù)的返回值使用調(diào)用模塊中timescale定義的時間單位$time返回一個64位整數(shù)時間值。$stime返回一個32位整數(shù)時間值。$realtime返回一個實數(shù)時間值

2、。 $stime函數(shù)返回一個32位整數(shù)時間值。對大于232的時間,返回模232的值。使用它可以節(jié)省顯示及打印空間。 timescale 10ns / 100psmodule top; reg in1; not m1( o1, in1); initial begin $timeformat(-9, 2, ns, 10); in1 = 0; #8 in1 = 1; #10 $display(%t %b %b, $realtime, in1, o1); #10 $finish; endendmodule在這個例子中,顯示的時間為:180.00 nsunit:0到-15之間的整數(shù),表示時間度量(s,

3、fs),10-nprecision:要顯示的十進制小數(shù)位數(shù)。suffix:在時間值后顯示的字符串min_width:顯示前三項的最小寬度 若使用多個timescale,以最小的時間精度顯示時間值??捎孟到y(tǒng)任務$timeformat結合格式符%t全局控制時間顯示方式。$timeformat系統(tǒng)任務的語法為: $timeformat(,);輸出格式化時間信息timescale 1 ns / 10 psmodule top; reg in1; not #9.53 n1 (o1, in1); initial begin $display(time realtime stime t in1 t o1 )

4、; $timeformat(-9, 2, ns, 10); $monitor(%d %t %d t %b t %b, $time, $realtime, $stime, in1, o1); in1 = 0; #10 in1 = 1; #10 $finish; endendmoduletime realtime stime in1 o1 0 0.00ns 0 0 x10 9.53ns 10 0 110 10.00ns 10 1 120 19.53ns 20 1 0輸出格式化時間信息對#延遲,Verilog將延遲值舍入最近(四舍五入)時間精度值。例如,上面的例子修改為:timescale 1ns/

5、 100psnot #9.42 n1 (o1, in1);結果為:time realtime stime in1 o1 0 0.00ns 0 0 x 9 9.40ns 9 0 110 10.00ns 10 1 119 19.40ns 19 1 0timescale 1ns/ 100psnot #9.49 n1 (o1, in1);結果為:time realtime stime in1 o1 0 0.00ns 0 0 x 9 9.50ns 9 0 110 10.00ns 10 1 119 19.50ns 19 1 02. 顯示信號值 $display$display輸出參數(shù)列表中信號的當前值。

6、語法:$display(“ format_specifiers”, )$display輸出時自動換行。 $display ($ time, “%b t %h t %d t %o”, sig1, sig2, sig3, sig4); $display ($ time, “%b t”, sig1, “%h t”, sig2, “% d t”, sig3, “%o”, sig4);$display支持二進制、八進制、十進制和十六進制。缺省基數(shù)為十進制。 $display (sig1, sig2, sig3, sig4); $displayb (sig1, sig2, sig3, sig4); $di

7、splayo (sig1, sig2, sig3, sig4); $displayh (sig1, sig2, sig3, sig4); %h %o %d %b %c %s %v %m %t hex octal decimal binary ASCII string strength module time t n %0d tab 換行 反斜杠 雙引號 上述的ASCII表示 無前導0的十進制數(shù)格式符轉義符module disp;reg31:0 rval;pulldown (pd);initialbeginrval=101;$display(rval=%h hex %d decimal, rva

8、l, rval);$display(rval=%o otal %b binary, rval, rval);$display(rval has %c ascii character value,rval);$display(pd strength value is %v,pd);$display(current scope is %m);$display(%s is ascii value for 101,101);$display(simulation time is %t,$time);endendmodulerval=00000065 hex 101 decimalrval=000000

9、00145 octal 000000000000000000 00000001100101 binaryrval has e ascii character valuepd strength value is StXcurrent scope is dispe is ascii value for 101simulation time is 0顯示信號值$write和$strobe$write與$display相同,不同的是不會自動換行。 $write($time, “%b t %h t %d t %o t”, sig1, sig2, sig3, sig4); $strobe與$display

10、相同,不同的是在仿真時間前進之前的信號值。而$display和$write立即顯示信號值。也就是說$strobe顯示穩(wěn)定狀態(tài)信號值,而$display和$write可以顯示信號的中間狀態(tài)值。 $strobe($time, “%b t %h t %d t %o t”, sig1, sig2, sig3, sig4);$write和$strobe都支持多種數(shù)基,缺省為十進制。$writeb$strobeb $writeo$strobeo $writeh$strobeh下面是模塊textio仿真的輸出:$writeb輸出: 0 xxxxxxxx x 注意data是32位數(shù)據(jù),由8位十六進制數(shù)表示。時

11、間以沒有前導零的十進制形式輸出。 缺省情況下,值以十進制顯示,忽略前導零,與%0d格式符相同??梢栽谝粋€格式化符前插入一個0使Verilog忽略開頭的零。 $displayh: 00000000000000f 00000010 1 注意當前時間,一個64位量,需要16個十六進制的數(shù)。$display: 10 20$strobe: 10 30module textio; reg flag; reg 31: 0 data; initial begin $writeb(%d, $time, ,%h t, data, , flag, n); #15 flag = 1; data = 16; $disp

12、layh($time, ,data, , flag); end initial begin #10 data = 20; $strobe($time, , data); $display($time, , data); data = 30; endendmodule3.監(jiān)視信號值$monitor$monitor持續(xù)監(jiān)視參數(shù)列表中的變量。在一個時間片中,參數(shù)表中任何信號發(fā)生變化,$monitor將在仿真時間前進前顯示參數(shù)表的信號值。后面的$monitor將覆蓋前面的$monitor??梢杂孟到y(tǒng)任務$monitoron和$monitoroff控制持續(xù)監(jiān)視。$monitor支持多種基數(shù)。缺省為十進制

13、。 $monitor ($ time, “%b t %h t %d t %o”, sig1, sig2, sig3, sig4);$monitor是唯一的不斷輸出信號值的系統(tǒng)任務。其它系統(tǒng)任務在返回值之后就結束。$monitor和$strobe一樣,顯示參數(shù)列表中信號的穩(wěn)定狀態(tài)值,也就是在仿真時間前進之前顯示信號。在一個時間步中,參數(shù)列表中信號值的任何變化將觸發(fā)$monitor 。但$time,$stime,$realtime不能觸發(fā)。任何后續(xù)的$monitor覆蓋前面調(diào)用的$monitor。只有新的$monitor的參數(shù)列表中的信號被監(jiān)視,而前面的$monitor的參數(shù)則不被監(jiān)視。可以用$m

14、onitoron和$monitoroff系統(tǒng)任務控制持續(xù)監(jiān)視,使用戶可以在仿真時只監(jiān)視特定時間段的信號。$monitor參數(shù)列表的形式與$display相同。$monitor支持多種基數(shù)。缺省為十進制。$monitorb$monitoro$monitorh4.文件輸出$fopen打開一個文件并返回一個多通道描述符(MCD)。MCD是與文件唯一對應的32位無符號整數(shù)。如果文件不能打開并進行寫操作,MCD將等于0。如果文件成功打開,MCD中的一位將被置位。以$f開始的顯示系統(tǒng)任務將輸出寫入與MCD相對應的文件中。 . . .integer MCD1; MCD1 = $fopen(); $fdisp

15、lay( MCD1, P1, P2, ., Pn); $fwrite( MCD1, P1, P2, ., Pn); $fstrobe( MCD1, P1, P2, ., Pn); $fmonitor( MCD1, P1, P2, ., Pn); $fclose( MCD1);. . .$fopen打開參數(shù)中指定的文件并返回一個32位無符號 整數(shù)MCD,MCD是與文件一一對應的多通道描述符。如果文件不能打開并進行寫操作,它返回0。$fclose關閉MCD指定的通道。輸出信息到log文件和標準輸出的四個格式化顯示任務($display, $write, $monitor, $strobe)都有相對

16、應的任務用于向指定文件輸出。這些對應的任務($fdisplay,$fwrite,$fmonitor,$fstrobe)的參數(shù)形式與對應的任務相同,只有一個例外:第一個參數(shù)必須是一個指定向何哪個文件輸出的MCD。MCD可以是一個表達式,但其值必須是一個32位的無符號整數(shù)。這個值決定了該任務向哪個打開的文件寫入。MCD可以看作由32個標志構成的組,每個標志代表一個單一的輸出通道。. . .integer messages, broadcast, cpu_chann, alu_chann;initialbegin cpu_chann = $fopen( cpu.dat); if(! cpu_chan

17、n) $finish; alu_chann = $fopen( alu.dat); if(! alu_chann) $finish;/ channel to both cpu. dat and alu. dat messages = cpu_chann | alu_chann;/ channel to both files, standard out, and verilog. log broadcast = 1 | messages;endalways ( posedge clock) / print the following to alu. dat $fdisplay( alu_chan

18、n, acc= %h f=%h a=%h b=%h, acc, f, a, b);/* at every reset print a message to alu. dat, cpu. dat, standard output and the verilog. log file */always ( negedge reset) $fdisplay( broadcast, system reset at time %d, $time);. . .必須聲明為integer通道0(編號為1)為標準輸出及verilog.log5.文件輸入Verilog中有兩個系統(tǒng)任務可以將數(shù)據(jù)文件讀入寄存器組。一個

19、讀取二進制數(shù)據(jù),另一個讀取十六進制數(shù)據(jù):$readmemb $readmemb (file_name, ); $readmemb (file_name, , ); $readmemb (file_name, , , );$readmemh $readmemh ( file_name, ); $readmemh ( file_name, , ); $readmemh ( file_name, , , );系統(tǒng)任務$readmemb和$readmemh從一個文本文件讀取數(shù)據(jù)并寫入存儲器。如果數(shù)據(jù)為二進制,使用$readmemb;如果數(shù)據(jù)為十六進制,使用$readmemh。filename指定要調(diào)入

20、的文件。mem_name指定存儲器名。start和finish決定存儲器將被裝載的地址。Start為開始地址,finish為結束地址。如果不指定開始和結束地址,$readmem按從低端開始讀入數(shù)據(jù),與說明順序無關。$readmemb和$readmemh的文件格式 :$readmemb(mem_file. txt, mema);0000_00000110_0001 0011_0010/ 地址3255沒有定義100 / hex1111_1100/地址2571022沒有定義3FF1110_0010文本文件:mem_file.txt00000000001100001100110010231111110

21、02561110001010230 7聲明的存儲器組reg 0:7 mema0:1023module readmem;reg 0:7 mema 0:1023initial$readmemb(“mem_file.txt”, mema);endmodule$readmemb和$readmemh的文件格式 :$readmemb(mem_file. txt, mema);可以指定二進制(b)或十六進制(h)數(shù)用下劃線(_)提高可讀性??梢园瑔涡谢蚨嘈凶⑨尅?梢杂每崭窈蛽Q行區(qū)分存儲器字??梢越o后面的值設定一個特定的地址,格式為: (hex_address)十六進制地址的大小寫不敏感。在和數(shù)字之間不允許

22、有空格。 Verilog Test Bench使用簡介學習內(nèi)容:用一個復雜的test bench復習設計的組織與仿真建立test bench通常使用的編碼風格及方法test bench組織簡單的test bench向要驗證的設計提供向量,人工驗證輸出。復雜的test bench是自檢測的,其結果自動驗證。 stimulus要驗證的設計簡單的test bench復雜的test bench激勵驗證結果要驗證的設計DUT(Device under test)1.并行塊forkjoin塊在測試文件中很常用。他們的并行特性使用戶可以說明絕對時間,并且可以并行的執(zhí)行復雜的過程結構,如循環(huán)或任務。modul

23、e inline_ tb; reg 7: 0 data_ bus; / instance of DUT initial fork data_bus = 8b00; #10 data_bus = 8h45; #20 repeat (10) #10 data_bus = data_bus + 1; #25 repeat (5) #20 data_bus = data_bus 1; #140 data_bus = 8h0f; joinendmodule上面的兩個repeat循環(huán)從不同時間開始,并行執(zhí)行。象這樣的特殊的激勵集在單個的beginend塊中將很難實現(xiàn)。 Time | data_ bus 0

24、 | 8b0000_000010 | 8b0100_010130 | 8b0100_011040 | 8b0100_011145 | 8b1000_111050 | 8b1000_111160 | 8b1001_000065 | 8b0010_000070 | 8b0010_000180 | 8b0010_001085 | 8b0100_010090 | 8b0100_0101100 | 8b0100_0110105 | 8b1000_1100110 | 8b1000_1101120 | 8b1000_1110125 | 8b0001_1100140 | 8b0000_11112.包含文件包含

25、文件用于讀入代碼的重復部分或公共數(shù)據(jù)。 module clk_gen (clk);output clk; reg clk;include common.txtinitial begin while ($ time sim_end) begin clk = initial_clock; #(period/2) clk = !initial_clock; #(period/2); end $finish;endendmodule在上面的例子中,公共參數(shù)在一個獨立的文件中定義。此文件在不同的仿真中可被不同的測試文件調(diào)用。 / common. txt/ clock and simulator cons

26、tantsparameter initial_clock = 1;parameter period = 15;parameter max_cyc = 100;parameter sim_end = period * max_cyc3. 施加激勵產(chǎn)生激勵并加到設計有很多 種方法。一些常用的方法有:從一個initial塊中施加線激勵從一個循環(huán)或always塊施加激勵從一個向量或整數(shù)數(shù)組施加激勵記錄一個仿真過程,然后在另一個仿真中回放施加激勵a. 線性激勵線性激勵有以下特性:只有變量的值改變時才列出易于定義復雜的時序關系對一個復雜的測試,測試基準(test bench)可能非常大module inl

27、ine_ tb; reg 7: 0 data_ bus, addr; wire 7: 0 results; DUT u1 (results, data_ bus, addr); initial fork data_bus = 8h00; addr = 8h3f; #10 data_ bus = 8h45; #15 addr = 8hf0; #40 data_ bus = 8h0f; #60 $finish; joinendmoduleb.循環(huán)激勵從循環(huán)產(chǎn)生激勵有以下特性:在每一次循環(huán),修改同一組激勵變量時序關系規(guī)則代碼緊湊 module loop_tb; reg clk; reg 7:0 st

28、imulus; wire 7:0 results; integer i; DUT u1 (results, stimulus); always begin / clock generation clk = 1; #5 clk = 0; #5 end initial begin for (i = 0; i 1; i = i - 1) / 循環(huán) #50 stimulus = stim_arrayi ; #30 $finish; endendmoduled.矢量采樣在仿真過程中可以對激勵和響應矢量進行采樣,作為其它仿真的激勵和期望結果。module capture_tb; parameter per

29、iod = 20 reg 7:0 in_vec, out_vec; integer RESULTS, STIMULUS; DUT u1 (out_ vec, in_ vec); initial begin STIMULUS = $fopen(stimulus. txt) ; RESULTS = $fopen(results. txt) ; fork if (STIMULUS != 0 ) forever #( period/2) $fstrobeb (STIMULUS, %b, in_vec); if (RESULTS != 0 ) #( period/2) forever #( period

30、/2) $fstrobeb (RESULTS, %b, out_vec); join endendmodulee.矢量回放保存在文件中的矢量反過來可以作為激勵module read_file_tb; parameter num_vecs = 256; reg 7:0 data_bus; reg 7:0 stim num_vecs-1:0; integer i; DUT u1 (results, data_bus) initial begin / Vectors are loaded $readmemb (vec. txt, stim); for (i =0; i num_vecs ; i =

31、i + 1) #50 data_bus = stimi; endendmodule/ 激勵文件vec.txt001110000011100100111010001111000011000000101000000110000111100010111000.使用矢量文件輸入/輸出的優(yōu)點:激勵修改簡單設計反復驗證時直接使用工具比較矢量文件。4.錯誤及警告報告使用文本或文件輸出類的系統(tǒng)任務報告錯誤及警告always ( posedge par_err) $display ( error-bus parity errors detected);always ( posedge cor_err) $dis

32、play(warning-correctable error detected);一個更為復雜的test bench可以:不但能報告錯誤,而能進行一些動作,如取消一個激勵塊并跳轉到下一個激勵。在內(nèi)部保持錯誤跟蹤,并在每次測試結束時產(chǎn)生一個錯誤報告。5.強制激勵在過程塊中,可以用兩種持續(xù)賦值語句驅(qū)動一個值或表達式到一個信號。過程持續(xù)賦值通常不可綜合,所以它們通常用于測試基準描述。對每一種持續(xù)賦值,都有對應的命令停止信號賦值。不允許在賦值語句內(nèi)部出現(xiàn)時序控制。對一個寄存器使用assign和deassign,將覆蓋所有其他在該信號上的賦值。這個寄存器可以是RTL設計中的一個節(jié)點或測試基準中在多個地方

33、賦值的信號等。 initial begin #10 assign top.dut.fsm1.state_reg = init_state ; #20 deassign top.dut.fsm1.state_reg ; end在register和net上(例如一個門級掃描寄存器的輸出)使用force和release,將覆蓋該信號上的所有其他驅(qū)動。 initial begin #10 force top. dut. counter. scan_ reg. q = 0 ; #20 release top. dut. counter. scan_ reg. q ; end可以強制(force)并釋放一

34、個信號的指定位、部分位或連接,但位的指定不能是一個變量(例如out_veci)不能對register的一位或部分位使用assign和deassign對同一個信號,force覆蓋assign。后面的assign或force語句覆蓋以前相同類型的語句。如果對一個信號先assign然后force,它將保持force值。在對其進行release后,信號為assign值。如果在一個信號上force多個值,然后release該信號,則不出現(xiàn)任何force值。 在上面兩個例子中,在 net或register上所賦的常數(shù)值,覆蓋所有在時刻10和時刻20之間可能發(fā)生在該信號上的其他任何賦值或驅(qū)動。如果所賦值是一

35、個表達式,則該表達式將被持續(xù)計算。6.建立時鐘例1:雖然有時候在設計中給出時鐘,但通常時鐘是測試基準中建立。下面介紹如何產(chǎn)生不同的時鐘波形。同時給出用門級和行為級描述方法下面是一個簡單對稱時鐘的例子: reg ck;always begin #( period/2) ck = 0; #( period/2) ck = 1;endreg go; wire ck;nand #( period/2) u1 (ck, ck, go);initial begin go = 0; #( period/2) go = 1;end注意:在一些仿真器中,時鐘與設計使用相同的抽象級描述時,仿真性能會好一些。 產(chǎn)生

36、的波形(假定period為20)例2:有啟動延時的對稱時鐘的例子:reg ck;initial begin ck = 0; #( period) forever #( period/2) ck = !ck;endreg go; wire ck;nand #( period/2) u1 (ck, ck, go);initialbegin go = 0; #(period) go = 1;end注意:在行為描述中,在時間0將CK初始化為0;而在結構描述中,直到period/2才影響CK值。當go信號在時間0初始化時,CK值到period/2才變化。可以使用特殊命令force和release立即影響

37、CK值。產(chǎn)生的波形(假定period為20)例3:有不規(guī)則啟動延時的不對稱時鐘的例子:注意:在行為描述中,CK值立刻被影響;而在結構描述中,在傳播延時后才輸出正確波形。產(chǎn)生的波形(假定period為20)reg ck;initial begin #(period + 1) ck = 1; #(period/2 1) forever begin #(period/4) ck = 0; #(3*period/4) ck = 1; endendreg go; wire ck;nand #(3*period/4, period/4) u1(ck, ck, go);initial begin #(per

38、iod/4 + 1) go = 0; #(5*period/4 1) go = 1;endTestbench實例四位加法器數(shù)據(jù)流描述module adder4(cout,sum,ina,inb,cin);output3:0 sum;output cout;input 3:0 ina,inb;input cin;assign cout,sum=ina+inb+cin;endmodule四位加法器testbenchtimescale 1ns/1ns/include adder4.vmodule adder4_tb; reg 3:0 a,b; reg cin; wire 3:0 sum; wire

39、cout; integer i,j; adder4 adder(sum,cout,a,b,cin); always #5 cin=cin; initial begin a=0;b=0;cin=0; for (i=1;i16;i=i+1) begin #10 a=i; end endinitial begin for (j=1;j16;j=j+2) #10 b=j; end initial begin $monitor($time,%d + %d + %b=%b,%d,a,b,cin,cout,sum); #160 $finish; endendmodule 四位計數(shù)器描述module coun

40、t4(out,reset,clk);output3:0 out;input reset,clk;reg3:0 out;always (posedge clk)beginif (reset) out=0; /同步復位else out=out+1; /計數(shù)endendmodule四位計數(shù)器testbenchtimescale 1ns/1nsinclude count4.vmodule coun4_tb;reg clk,reset; /測試輸入信號為reg wire3:0 out; /測試輸出信號為wireparameter DELY=100;count4 mycount(out,reset,clk

41、); /調(diào)用測試對象always #(DELY/2) clk = clk; /產(chǎn)生時鐘initialbegin /激勵信號clk =0; reset=0;#DELY reset=1;#DELY reset=0;#(DELY*20) $finish;end/結果顯示格式initial $monitor($time,clk=%d reset=%d out=%d, clk, reset,out);endmodule6.3 存儲器建模學習內(nèi)容:如何描述存儲器如何描述雙向端口存儲器件建模描述存儲器必須做兩件事:說明一個適當容量的存儲器。提供內(nèi)容訪問的級別,例如:只讀讀和寫寫同時讀多個讀操作,同時進行單個

42、寫操作同時有多個讀和多個寫操作,有保證一致性的方法簡單ROM描述 下面的ROM描述中使用二維寄存器組定義了一個存儲器mem。ROM的數(shù)據(jù)單獨保存在文件my_rom_data中,如右邊所示。通常用這種方法使ROM數(shù)據(jù)獨立于ROM描述。timescale 1ns/10psmodule myrom (read_data, addr, read_en_); input read_en_; input 3:0 addr; output 3:0 read_data; reg 3:0 read_data; reg 3:0 mem 0:15; initial $readmemb (my_rom_data, m

43、em); always ( addr or read_en_) if (! read_en_) read_data = memaddr;endmodulemy_rom_data0000010111000011110100100011111110001001100000011101101000011101簡單的RAM描述 RAM描述比ROM略微復雜,因為必須既有讀功能又有寫功能,而讀寫通常使用同一數(shù)據(jù)總線。這要求使用新的處理雙向數(shù)據(jù)線的建模技術。在下面的例子中,若讀端口未使能,則模型不驅(qū)動數(shù)據(jù)總線;此時若數(shù)據(jù)總線沒有寫數(shù)據(jù)驅(qū)動,則總線為高阻態(tài)Z。這避免了RAM寫入時的沖突。timescale 1

44、ns /1nsmodule mymem (data, addr, read, write); inout 3:0 data; input 3:0 addr; input read, write; reg 3:0 memory 0:15; / 16*4/ 讀 assign data = read ? memoryaddr : 4bz;/ 寫 always ( posedge write) memoryaddr = data;endmodule 這個描述可綜合,但許多工具僅僅產(chǎn)生一個寄存器堆,因此與一個真正的存儲器相比耗費更多的面積。參數(shù)化存儲器描述 在下面的例子中,給出如何定義一個字長和地址均參

45、數(shù)化的只讀存儲器件。module scalable_ROM (mem_word, address); parameter addr_bits = 8; / 地址總線寬度 parameter wordsize = 8; / 字寬 parameter words = (1 addr_bits); / mem容量 output wordsize:1 mem_word; / 存儲器字 input addr_bits:1 address; / 地址總線 reg wordsize:1 mem 0 : words-1; / mem聲明/ 輸出存儲器的一個字 wire wordsize:1 mem_word = memaddress;endmodule 例中存儲器字范圍從0而不是1開始,因為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論