第五章、基于Verilog的CPU設(shè)計_第1頁
第五章、基于Verilog的CPU設(shè)計_第2頁
第五章、基于Verilog的CPU設(shè)計_第3頁
第五章、基于Verilog的CPU設(shè)計_第4頁
第五章、基于Verilog的CPU設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、作為電子或計算機專業(yè)的學(xué)生,電腦(計算機)對于大家已經(jīng)不再是什么新鮮的東西了。大家都知道,計算機可以為我們做很多的事情,替我們節(jié)約很多時間,為我們計算各種復(fù)雜的數(shù)據(jù)并且準且無誤。那么,計算機為什么能夠做這些事情呢?計算機內(nèi)部到底是怎么工作的呢?本章將為你展示計算機的主要部件的設(shè)計過程。計算機最核心的部分叫做中央處理器,也就是我們常說的CPU,計算機所做的工作都是由CPU來完成的。當然,作為學(xué)習(xí),我們不能夠設(shè)計出類似奔騰處理器(Pentium microprocessor)的CPU,我們用一個能夠完成簡單功能的簡單的CPU作為講解,麻雀雖小,五臟俱全,這個簡單的cpu具有一般CPU的全部基本特征

2、。CPU概覽眾所周知,cpu只能識別二進制數(shù)據(jù),也就是機器碼。所以,在CPU內(nèi)部靠不同的二進制序列來區(qū)別不同的機器碼。我們把這些機器碼存儲在一個存儲器中,共CPU讀取使用。同時,為了用戶和程序員能夠更好的記住機器碼的含義,采用相應(yīng)的助記符來表示這些機器碼,如:用LDA表示二進制的000等。這些助記符通常被稱為匯編語言,不同架構(gòu)的計算機的匯編語言通常都是各不相同的。CPU的內(nèi)部框架下圖是本章準備設(shè)計的一個CPU內(nèi)部結(jié)構(gòu)框架。存儲器ALU控制器指令解碼器PCCPU的內(nèi)部工作原理不同架構(gòu)的計算機工作原理也是不同的,此處僅以本課本中講授的CPU工作原理為例講解。首先,CPU的指令是存儲在存儲器中的,所

3、以cpu執(zhí)行指令的第一步是從存儲器中取出(fetch)指令,第二步,將取出的指令解碼,第三步,根據(jù)指令解碼出的功能決定是否再從存儲器中取出需要處理的數(shù)據(jù),第四步,根據(jù)解碼出的指令決定進行相應(yīng)的計算,這由(ALU)完成。第五步,根據(jù)解碼出的指令決定是否將計算結(jié)果存入存儲器,第六步,修改PC指針,為下一次取指令做準備。整個執(zhí)行過程由控制器控制。在介紹具體的CPU硬件架構(gòu)之前,我們先確定一些CPU能夠執(zhí)行的指令,在這里,為了教學(xué)演示,我們設(shè)定6個計算機指令,分別為:LDA指令、STA指令、ADD指令、SUB指令、AND指令和HLT指令。指令集表示的含義見下表:操作碼助記符執(zhí)行的功能000LDA ad

4、dr將地址為addr處的存儲器中的內(nèi)容裝載到A寄存器001STA addr將A寄存器的內(nèi)容存儲到存儲器中的addr地址處010ADD addr將A寄存器的內(nèi)容加上存儲器中的addr地址處的內(nèi)容011SUB addr將A寄存器的內(nèi)容減去存儲器中的addr地址處的內(nèi)容100AND addr將A寄存器的內(nèi)容與上存儲器中的addr地址處的內(nèi)容101HLT停止指令的執(zhí)行前兩條指令,“LDA”和“STA”是數(shù)據(jù)傳輸指令,就像助記符表示的那樣,這些指令在A寄存器和存儲器之間傳送數(shù)據(jù)。對于LDA指令,“源”數(shù)據(jù)是存儲器的addr地址處的值(也稱為內(nèi)容),目的寄存器是A寄存器;對于STA指令,“源”數(shù)據(jù)是A寄存

5、器,目的寄存器是存儲器的addr地址處的存儲空間。這里為了以后的表達方便,我們采用一種簡單的方式來表示上述指令的功能,如:表示LDA addr指令可以用Aß(addr),而STA addr可以用(addr)ßA來表示。同樣,加法指令A(yù)DD addr用AßA+(addr)表示,減法指令SUB addr用AßA (addr)表示?!癆ND addr”用AßA & (addr)表示。注意,由于這里涉及到計算的結(jié)果,我們設(shè)置了一些標志用來標識結(jié)果的特殊性,如:(零標志),標識運算的結(jié)果中為;(負數(shù)標志),標識運算的結(jié)果中小于;(溢出標志),標識

6、運算的結(jié)果溢出;(進位標志),標識運算的結(jié)果中產(chǎn)生了進位;值得一提的是位的處理,加法和減法對于的處理是不一樣的。對于,進位標志是中的最高位產(chǎn)生了進位;對于減法,最高位產(chǎn)生借位將為置。為了能夠更好的理解CPU的運行,我們以一個簡單的匯編程序的執(zhí)行來講解。這個程序?qū)⑹褂靡陨系娜恐噶?。在這里,我們使用助記符的方式寫匯編程序,實際在,在存儲器內(nèi)部是以二進制碼來存儲的,例如:第一行“LDA 01011”在存儲器中為00001011。LDA 01011 Aß(01011)ADD 01100 AßA+(01100)STA 01101 (01100)ßALDA 01011 A&

7、#223;(01011)AND 01100 AßA & (01100)STA 01110 (01110)ßALDA 01011 Aß(01011)SUB 01100 AßA(01100)STA 01111 (01111)ßAHLT halt the computer我們把這段程序放在存儲器的開始(更方便程序的啟動)。由于在代碼中我們用到了存儲器地址為01011和01100中的數(shù)據(jù),所以我們可以在那兩個位置放置一些要處理的數(shù)據(jù)。存儲器中的詳細內(nèi)容參見下表。存儲器地址內(nèi)容(指令或者數(shù)據(jù))000000000101100001010011000

8、00100010110100011000010110010010001100001010010111000110000010110011101101100010000010111101001101000000101001011101010100110001010101011010111001111現(xiàn)在,我們逐步分析匯編程序的執(zhí)行情況,根據(jù)上表,我們看到,前三條指令的目的是將01011地址處對應(yīng)的數(shù)據(jù)和01100處對應(yīng)的數(shù)據(jù)進行相加,并且把結(jié)果存儲到地址01101處。見下表陰影處。由于計算結(jié)果為11111111,所以,影響標志位NF。存儲器地址內(nèi)容(指令或者數(shù)據(jù))00000ADD:1010101

9、0+ 01010101 1111111100001011000010100110000010001011010001100001011001001000110000101CF = 0NF = 1VF = 0ZF = 000101110001100000101100111011011000100000101111010011010000001010010111010101001100ADD0101010101101111111110111001111第3,4,5條指令是將01011地址處對應(yīng)的數(shù)據(jù)和01100處對應(yīng)的數(shù)據(jù)進行相“與”,并且把結(jié)果存儲到地址01110處。此時,與運算的結(jié)果為0000

10、0000,所以影響標志位ZF,同時將NF標志清0。存儲器地址內(nèi)容(指令或者數(shù)據(jù))00000AND:10101010& 01010101 0000000000001011000010100110000010001011010001100001011001001000110000101001011100011000001011001110110110001000001011110100110100000010100101110101010011000101010101101AND11111111011100000000001111CF不受影響NF = 0VF不受影響ZF = 1接下來的3條

11、指令是將01011地址處對應(yīng)的數(shù)據(jù)和01100處對應(yīng)的數(shù)據(jù)進行相“減”,并且把結(jié)果存儲到地址01110處。此時,相減運算的結(jié)果為00000000,所以影響標志位ZF,同時將NF標志清0。存儲器地址內(nèi)容(指令或者數(shù)據(jù))00000SUB:0000101100001101010100100110000010 11111111 0101010100101101000110000101100100ADD:1000110000101 10101010101010100010111000110+ 10000101100111 1)010101010110110001000結(jié)果溢出!0010111101001

12、101000000101001011101010100110001010101011011111111101110SUB000000000111101010101CF = 0NF = 0VF = 1ZF = 0最后一條指令(地址01001處)是告訴計算機停止執(zhí)行任何指令,計算機停在那里。計算機各個組成模塊的設(shè)計在前面的CPU內(nèi)部結(jié)構(gòu)框架圖中,由于部分總線使用的雙向總線,為了簡化設(shè)計,我們將其修改為單向總線,見下圖:存儲器ALU控制器指令解碼器PC數(shù)據(jù)出數(shù)據(jù)入下面我們將對計算機的各個組成部分分別用HDL的方式將其描述出來。為了能夠?qū)Ω鱾€部分靈活的控制,我們建議,對于時序電路,一般設(shè)有時鐘端、同步

13、或者異步復(fù)位端、使能端,對于組合邏輯電路,至少要有使能端,且設(shè)計的電路要盡可能有擴展性和可控制性。PC部分PC(程序計數(shù)器)負責生成存儲器的地址值(在下一步驟中會將對應(yīng)地址的存儲器中的指令取出),然后將自身+1,使其指向下一條將要執(zhí)行的指令,為取下一條指令的執(zhí)行做好準備。根據(jù)這些,我們設(shè)計的PC端口有以下時鐘端 clock:異步復(fù)位端reset,也可以設(shè)計成同步復(fù)位 En,使能端,當en為高電平的時候,允許pc工作Pc,當前程序計數(shù)器的值,此處擬設(shè)計的計算機可以尋址32個字節(jié),故pc是一個5位寬總線在模塊內(nèi)部有pc_next,指向下一個pc(即:pc + 1),五位寬。在下一個時鐘信號上升沿的

14、時候?qū)c + 1賦值給pc。PCPC模塊clockresetpcenpc的頂層模塊應(yīng)該如下圖module pc(clock,reset,en,pc);input clock,reset, en;output reg 4:0 pc;reg 4:0 pc_next; (內(nèi)部的一個值)always(posedge clock or posedge reset)begin if(reset) pc <= 0; else if(en) pc <= pc_next; else pc <= pc;end/*always(posedge clock or posedge reset)beg

15、in if(reset) pc_next <= 0; else if(en) pc_next <= pc + 1; else pc_next <= pc_next ;end*/Assign pc_next=pc+1;endmodule這里使用了兩個always進程塊(或者是一個always,一個assign),根據(jù)HDL特點,這兩個進程同時執(zhí)行;第一個進程在clock上升沿的時候?qū)c_next賦值給pc,第二個進程在clock上升沿的時候?qū)崿F(xiàn)pc_next+1的操作此時刻異步復(fù)位,pc為5h00以下為pc的仿真結(jié)果。實際生成的RTL級電路圖如下: 存儲器的設(shè)計根據(jù)實際應(yīng)用

16、進行簡化,實際的存儲器一般有數(shù)據(jù)線口(雙向的),地址線,讀使能、寫使能和片選信號線等,此處由于雙向信號線處理起來比較煩瑣,擬使用兩組數(shù)據(jù)線,一組為輸入數(shù)據(jù)線,一組為輸出數(shù)據(jù)線,當需要將數(shù)據(jù)存儲到存儲器的時候,數(shù)據(jù)由輸入總線輸入,當需要從存儲器讀取數(shù)據(jù)的時候,數(shù)據(jù)由輸出總線輸出。另外,增加異步復(fù)位和時鐘端,使數(shù)據(jù)的存取進行同步。實際用到的端口如下:clock:時鐘信號線reset:復(fù)位信號,高電平有效。addr:存儲器地址線,5位寬din:數(shù)據(jù)線輸入dout:數(shù)據(jù)線輸出wr:寫使能端,高電平有效rd:讀使能端,高電平有效模塊的原理圖如下:存儲器存的是指令,通過地址找到相應(yīng)指令Memory模塊 c

17、lockresetrdwrdin 8dout 8addr 5 實現(xiàn)的源代碼為:module memory(clock,/:時鐘信號線reset,/:復(fù)位信號,高電平有效。addr,din,/:數(shù)據(jù)線輸入dout,/:數(shù)據(jù)線輸出wr,/:寫使能端,高電平有效rd /:讀使能端,高電平有效);inputclock;/:時鐘信號線inputreset;/:復(fù)位信號,高電平有效。input4:0 addr;/存儲器地址input7:0din;/:數(shù)據(jù)線輸入output7:0dout; reg7:0dout;/數(shù)據(jù)線輸出/:數(shù)據(jù)線輸出inputwr;/:寫使能端,高電平有效inputrd;/:讀使能端,

18、高電平有效reg7:0 mem0:31;always(posedge clock or posedge reset)beginif(reset) begin 指定mem每一個地址存的是什么指令想到RAM的結(jié)構(gòu) mem0 <= 'b00001011;/ LDA 01011 Aß(01011)mem1 <= 'b01001100;/ ADD 01100 AßA+(01100)mem2 <= 'b00101101; /STA 01101 (01100)ßAmem3 <= 'b00001011;/ LDA 01011

19、 Aß(01011)mem4 <= 'b10001100;/ AND 01100 AßA & (01100)mem5 <= 'b00101110;/ STA 01110 (01110)ßAmem6 <='b00001011;/ LDA 01011 Aß(01011)mem7 <='b01101100;/ SUB 01100 AßA(01100)mem8 <='b00101111;/ STA 01111 (01111)ßAmem9 <='b101

20、00000;/ HLT halt the computermem10<='b00000000;/mem11<='b10101010;/haamem12<='b01010101;/h55mem13<='b00000000;mem14<='b00000000;mem15<='b00000000;mem16<='b00000000;mem17<='b00000000;mem18<='b00000000;mem19<='b00000000;mem20<=&#

21、39;b00000000;mem21<='b00000000;mem22<='b00000000;mem23<='b00000000;mem24<='b00000000;mem25<='b00000000;mem26<='b00000000;mem27<='b00000000;mem28<='b00000000;mem29<='b00000000;mem30<='b00000000;mem31<='b00000000; endelse beg

22、in if(wr) memaddr <= din; if(rd) dout <= memaddr; end endendmodule此模塊的仿真電路如下:指令解碼器的設(shè)計指令解碼器的作用就是將從指令存儲器中讀出的指令進行翻譯,是cpu能夠根據(jù)翻譯后的代碼執(zhí)行不同的操作。這里擬將指令分成兩個組成部分:第一部分為操作碼部分,由指令中的高三位組成,第二部分為存儲器的地址,由指令的低五位組成。D7D6D5D4D3D2D1D0操作碼操作數(shù)的地址從存儲中取出的指令根據(jù)前面的已經(jīng)設(shè)置好的操作碼和助記符的關(guān)系,可以使用if語句或者case語句來表述:例如:(用if語句描述) if(instruct

23、ion7:5 = 3b000) /LDA指令 else if(instruction7:5 = 3b001) /STA指令 用case語句描述 case(instruction7:5) 3b000: /LDA指令 3b001: /STA指令endcase根據(jù)以上,設(shè)置指令譯碼器主要有以下一些端口clock時鐘端口reset 復(fù)位端口en 譯碼使能端instruction 指令輸入端口opcode 操作碼輸出端口addr 存儲器地址輸出端口模塊對應(yīng)的符號如下:仿真波形圖如下:算數(shù)邏輯單元(ALU)算數(shù)邏輯單元完成各種運算功能,此處設(shè)計的alu具有一個寄存器A(通常稱作累加器),alu具有一個輸入

24、端口,使用累加器A和這個輸入端口作為兩個運算數(shù)據(jù)的輸入,并將運算結(jié)果存放在累加器A中。為了使所有的單元都受控制器的控制,使設(shè)計簡單化,分別設(shè)置幾個運算控制使能端,完成不同的運算使能。另外,為了能夠監(jiān)測運算結(jié)果的特殊性,設(shè)置以下相應(yīng)的標志位,如進位位、溢出位、零標志位和負數(shù)標志位。本算數(shù)邏輯運算單元擬設(shè)計的端口有幾下幾種clock時鐘reset復(fù)位端en使能ALUa累加器輸出寄存器din操作數(shù)1輸入n輸出負標志z輸出0標志c輸出進位標志v輸出溢出標志add_en使能加法運算sub_en使能減法運算pass_en使din直通至累加器A,部分指令需要and_en使能“與”運算模塊圖如下:實現(xiàn)的源代碼

25、為:module alu(clk,reset,en, a,din,n,z,c,v,add_en,sub_en,and_en,pass_en);input clk,reset,en,add_en,sub_en,and_en,pass_en;input 7:0 din;output n,z,c,v;output reg 7:0 a;reg c;always(posedge clk or posedge reset)if(reset) begina<=0;c<=0;endelse begin if(en) beginif(add_en)c,a<=a7:0+din;else if(s

26、ub_en)c,a<=a7:0-din;else if(and_en)a<=a&din;else if(pass_en)a<=din;endendassign z=(a=8'b0)?1:0;assign n=(c=1)?1:0;assign v=(a>127)|(a<-128)?1:0;endmodule仿真波形如下圖:控制單元接下來就是控制單元的設(shè)計了??刂茊卧枰鲆韵乱恍┦虑椋?) 給出操作時序。上述的單元模塊必須在一定的順序下工作,從存儲器中取指令->譯碼->根據(jù)操作碼決定是否從存儲器中取數(shù)據(jù)->確定ALU的運算。此工作可

27、以通過設(shè)置一些時能端口,如:按照一定的順序使能相應(yīng)的模塊即可。2) 控制器必須能夠識別譯碼器輸出的指令,并且根據(jù)指令發(fā)出不同的命令信號,故需要有一個指令輸入端口,opcode2:0 3) 如果需要做ALU運算的話,給出需要做相應(yīng)運算的使能。如:給出使能加法運算信號instr_add使能 add_en4) 在一條指令中,如果即需要從存儲器中取指令,又需要從存儲器中取數(shù)據(jù)的話,則,需要在不同的階段選擇不同的存儲器地址輸入。故:需要一個地址選擇端口。所以控制單元應(yīng)有以下一些端口Clock:時鐘端口Reset:異步復(fù)位端口s0s5:分別用作各個階段的使能信號端口Addrsel:選擇程序的地址或者是數(shù)據(jù)

28、的地址Instr_add:給alu的加法運算使能Instr_sub:給alu的減法運算使能Instr_and:給alu的 “與” 運算使能Instr_pass:給alu的直通運算使能,即不做運算opcode2:0 :解碼器解碼后的指令輸出給控制器模塊圖如下:實現(xiàn)的源代碼為:module control(input clock,input reset,output reg s0, / fetch instruction (各個指令)output reg s1, / decodeoutput reg s2, / read memory data for processoutput reg s3,

29、/ enable alu to computeoutput reg s4, / write to memory if nessaryoutput reg s5, / increase pcoutput reg addrsel,output reg instr_add,output reg instr_sub,output reg instr_and,output reg instr_pass,input 2:0 opcode);(控制它輸出是哪個指令)parameter LDA=3'b000,STA=3'b001,ADD=3'b010, SUB=3'b011,A

30、ND=3'b100,HLT=3'b101;/ JMP=3'b110, JZF=3'b111;reg 2:0 cnt; /*mem2 <= 'b00101101; /STA 01101 (01100)ßAmem3 <= 'b00001011;/ LDA 01011 Aß(01011)mem4 <= 'b10001100;/ AND 01100 AßA & (01100)mem5 <= 'b00101110;/ STA 01110 (01110)ßAmem6 &l

31、t;='b00001011;/ LDA 01011 Aß(01011)mem7 <='b01101100;/ SUB 01100 AßA(01100)mem8 <='b00101111;/ STA 01111 (01111)ßAmem9 <='b10100000;/ HLT halt the computermem10<='b00000000;/mem11<='b10101010;/haamem12<='b01010101;/h55 */(注釋掉的)always(posed

32、ge clock or posedge reset)if(reset)cnt <= 0;elseif(cnt = 5) cnt <= 0;else cnt <= cnt +1;always*begincase(cnt)0:begin/ fetch instructions0 <=1;s1<=0;s2<=0;s3<=0;s4<=0;s5<=0;/mem0 <= 'b00001011;/ LDA 01011 Aß(01011)addrsel<=0; end1:begin/ decodes0 <=0;s1<

33、;=1;s2<=0;s3<=0;s4<=0;s5<=0;/ mem1 <= 'b01001100;/ ADD 01100 AßA+(01100)addrsel<=0;end2:begin/ read memory data for process if nessary s0 <=0;s1<=0;/*s2=1;*/s3<=0;s4<=0;s5<=0; addrsel<=1;if(opcode = LDA )|(opcode = ADD)|(opcode = SUB)|(opcode = AND)s2<

34、=1;elses2<=0;end3:begin /enable ALU to computes0 <=0;s1<=0;s2<=0;s3<=1;s4<=0;s5<=0; addrsel<=1; if(opcode = LDA) begin instr_add <=0;instr_sub <=0;instr_and <=0; instr_pass<=1; endelse if(opcode = ADD) begin instr_add <=1;instr_sub <=0;instr_and <=0; inst

35、r_pass<=0; endelse if(opcode = SUB) begin instr_add <=0;instr_sub <=1;instr_and <=0; instr_pass<=0; endelse if(opcode = AND) begin instr_add <=0;instr_sub <=0;instr_and <=1; instr_pass<=0; endelse if(opcode = STA) begin instr_add <=0;instr_sub <=0;instr_and <=0; i

36、nstr_pass<=0; endelse begin instr_add <=0;instr_sub <=0;instr_and <=0; instr_pass<=0; endend4:begin/ write to memory if nessarys0 <=0;s1<=0;s2<=0;s3<=0;/*s4<=1;*/s5<=0; addrsel<=1;if(opcode = STA) s4<=1;else s4<=0;end5:begin s0 <=0;s1<=0;s2<=0;s3<

37、;=0;s4<=0;s5<=1;addrsel<=1; endendcaseendendmodule仿真圖如下:其中opcode代表著不同的操作,在不同的操作下,使能各個部件的s*端口有效與否也是不一樣的。Cpu頂層設(shè)計將各個單元模塊生成符號,并且在圖形輸入中進行調(diào)用和連接,就可以進行cpu的仿真了。頂層原理圖如下:其中sel2_1的代碼如下:module sel2_1(input 4:0 a,input 4:0 b,input sel,output 4:0 c);assign c=sel?a:b;endmodule用于選擇memory的地址。當取指令時,將pc連接到memo

38、ry地址線上。當從存儲器中取操作數(shù)時,將解碼后的地址連接到memory的地址線上。以下是cpu頂層設(shè)計的仿真時序圖:第3條指令執(zhí)行結(jié)果第1條指令第2條指令第6條指令執(zhí)行結(jié)果第2條指令從仿真結(jié)果來看,該cpu實現(xiàn)了相應(yīng)指令功能。下面給本CPU增加輸入和輸出端口,根據(jù)微機原理相關(guān)知識。輸入輸出口(即IO口)有兩種編址方式,一種是獨立編址,一種是統(tǒng)一編址。此處為了設(shè)計的簡便,采用統(tǒng)一編址的方式進行cpu的修改。本設(shè)計中CPU的尋址空間是32字節(jié)。將IO加在存儲器空間的最高位地址,即:從mem31讀數(shù)改為從輸入端口讀數(shù),這樣就可以將輸入端口(可以用鍵盤)的數(shù)據(jù)讀入累加器A了;向mem31寫數(shù)據(jù)改為向輸

39、出端口寫數(shù)據(jù),這樣就可以將累加器A中的值寫到端口了(可以用來驅(qū)動LED的哦)。修改memory中的代碼:module memory(clock,reset,addr,din,dout,rd,wr,IN,OUT);input clock,reset;input 7:0 din;input 4:0 addr;output reg 7:0 dout;input rd,wr; input 7:0 IN; /修改的部分 output reg 7:0 OUT; /修改的部分 /reg7:0 mem31:0;reg7:0 mem30:0;always(posedge clock or posedge res

40、et)if(reset)beginmem0 <='b00001011; /LDA 11mem1 <='b01001100; /ADD 12mem2 <='b00101101; /STA 13/mem3 <='b00001011; /LDA 11mem3 <='b00011111; /LDA 31 /修改的部分mem4 <='b10001100; /AND 12/mem5 <='b00101110; /STA 14mem5 <='b00111111; /STA 31 /修改的部分mem6 <='b00001011; /LDA 11mem7 <='b01101100; /SUB 12mem8 <='b00101111; /STA 15mem9 <='b10100000; /HLTmem10<='b1;mem11<='b10101010;mem12<='b01010101;mem13<='b1;mem14<='b1;mem15<='b1;mem16<='b1;m

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論