單周期CPU設計_第1頁
單周期CPU設計_第2頁
單周期CPU設計_第3頁
單周期CPU設計_第4頁
單周期CPU設計_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、信息科學與工程學院課程設計報告 課程名稱: 計算機組成原理與結構 題目: 單周期CPU邏輯設計 年級/專業: XXXXXXXXXXXXXXX X 學生姓名: 王俠俠、李懷民 學號: XXXXXXXXXXXXXXXXXXX 指導老師: XXXX 開始時間:2016年9月15日結束時間:2016年11月15日目 錄摘 要一、 設計目的與目標1.1設計目的1.2設計目標二、 課程設計器材2.1 硬件平臺2.2 軟件平臺三、CPU邏輯設計總體方案3.1 指令模塊3.2 部件模塊四、模塊詳細設計4.1 指令設計模塊4.2 部件設計模塊五、實驗數據5.1 初始數據5.2 指令數據六、結論和體會七、參考文獻

2、摘 要本CPU設計實驗以Quartus II 9.0為軟件設計平臺,以Cyclone采III型號EP3C16F484C6為FPGA實測板。此CPU設計采用模塊化設計方案,首先設計指令格式模塊,此模塊決定CPU各個部件的接口數據容量及數量,再對CPU各個部件獨立設計實現,主要涉及的部件有:寄存器組、控制器、存儲器、PC計數器、數據選擇器、ALU單元以及擴展單元。分部件的設計通過軟件平臺模擬仿真各部件的功能,在確保各部件功能正確的情況下,將所有部件模塊整合在一起實現16位指令的CPU功能。再按照指令格式設計的要求,設計出一套能完整運行的指令,加載到指令存儲器中,最終通過在FPGA實測板上實現了加2

3、減1的循環運算效果,若要實現其他效果,也可更改指令存儲器或數據存儲器的數據而不需要對內部部件進行更改元件。關鍵詞:CPU設計、16位指令格式、模塊化設計、Quartus軟件、CPU各部件一、 設計目的與目標1.1 設計目的1) 了解Quartus II軟件的使用,學習軟件環境下設計CPU的基本過程;2) 在Quartus II平臺上完成各個單元的設計,加深對每個單元(控制器、寄存器、存儲器等)工作原理的理解;3) 對各個單元組合而成的CPU進行指令測試,配合使用模擬仿真,了解指令和數據在各個單元中的傳輸過程及方向。1.2 設計目標1) 設計一個單周期CPU,能實現基本的指令功能,如ADD,SU

4、B指令實現對操作數加減功能,LW,SW指令實現從存儲器取數和存數,J指令實現指令間的跳轉。2) 采用模塊化設計CPU,通過模擬仿真保證各模塊的正確性,以保證最終CPU功能的正確性,能正確地在FPGA板上完成指令設計的效果。3) 通過設計合理的16位指令,實現從存儲器取初始數和存數,對初始數進行加減操作,通過修改存儲器初始數據,實現FPGA上LED顯示無限加n減m的效果。二、 課程設計器材2.1 硬件平臺本實驗所需的硬件主要有:PC微型計算機和FPGA板-Cyclone III系列,型號EP3C16U484C6實驗開發板以及USB連接線。2.2 軟件平臺1) 操作系統:Win 7;2) 開發平臺

5、:Quartus II 9.0集成開發軟件;3) 編程語言:VerilogHDL硬件描述語言。三、 CPU邏輯設計總體方案單周期CPU設計方案從宏觀上把握主要分為器件模塊和指令/數據模塊這兩大模塊,器件模塊是指令模塊的載體,指令數據在器件上流動,指令數據的格式是器件模塊的主宰。所以當設計CPU時,我們采用模塊化設計,單獨對著兩模塊進行設計,考慮到指令數據模塊的格式決定指令器件模塊接口的數據容量大小,所以應先完成指令數據模塊的格式設計。圖1 CPU宏觀設計方案3.1 指令模塊3.1.1指令格式簡要設計本CPU實驗是針對16位指令數據設計的,所以應當合理劃分指令數據區間段的指令相應的功能。從下圖2

6、可以看出,16位指令數據劃分為5個區間段,指令的15-12位作為控制位傳入控制器產生控制信號,指令11-9位作為地址1從寄存器取數輸出數據到寄存器1號輸出口,指令8-6位作為地址2從寄存器取數輸出數據到寄存器2號輸出口,指令5-3位與指令8-6位作為數據選擇器選擇地址輸入寄存器寫地址口,指令5-0位作為擴展單元輸入,擴展數據成16位。另外指令11-0位作為擴展輸入,擴展成16位數據作為PC計數器的選擇器一端。圖2 指令格式簡要設計圖3.2 器件單元模塊此模塊的設計是CPU設計的核心部分,它主要涉及到CPU中多個器件的設計。我們依然采用模塊設計方案,把總體設計拆分成多個相互獨立的器件,再對每部分

7、器件單獨設計。在此模塊中包括:寄存器組、控制器、存儲器、PC計數器、數據選擇器、ALU單元這六大主要單元。如下圖2所示,展示出六大單元的設計方案以及六大單元之間的聯系。圖3 器件模塊設計方案圖從上圖我們可以看出各單元之間的聯系:初始數據從數據存儲器RAM中取出,通過兩種數據傳入方式:一種是不經過數據選擇器,另一種是經過數據選擇器,數據傳入到寄存器組中作為寄存器數據。而后當傳入的是地址 數據時,就從寄存器取出,經過ALU運算單元,將數據傳入寄存器組中保存或傳入數據存儲器中保存。在整個過程中,PC計數器自動加1作為地址去指令存儲器ROM中取指令作為此輪執行的指令數據,而控制器在整個過程中依據指令數

8、據的指令碼產生相應的控制信號(操作碼)控制器件的運作,從而完成整個CPU的執行功能。下面我們將對主要的單元進行簡要概述。3.1.1 寄存器組寄存器組是作為保存數據的器件,故應使用時鐘觸發的D觸發器(DFFE),等待一個時鐘到來將數據傳出去。本實驗設計為16位CPU,故每個寄存器應為16位,即每個寄存器是由16個D觸發器擴展而成??紤]到指令從寄存器取數位數為3位,所以可以設置8個寄存器用于保存數據,如果是寫地址的3位指令通過74138(3-8譯碼器)譯碼作為寄存器的有效EN使能端輸出數據;如果是讀地址的3位指令數據通過8位擴展數據選擇器(LPM-MUX)選擇數據輸出。3.1.2 控制器控制器是作

9、為CPU控制信號產生的器件,通過產生控制信號,使其他器件有效或無效,因此控制器的設計顯得尤為重要??刂破鞯脑O計主要如下:先必須自己設計好各功能指令的4位01碼(指令的15-12),然后針對某個控制信號,找出使其為1的功能指令,對每個功能指令的0位上取非,然后4位相與,之后將所有為1的功能指令相或,結果作為此控制信號。對每個控制信號執行重復操作,控制器也就是這些信號的組合。3.1.3 存儲器存儲器分為兩種類型:一種是數據存儲器RAM,另一種是地址存儲器ROM??紤]到設計的方便,否則使用寄存器設計存儲器也是可行的。3.1.3.1數據儲存器數據存儲器為RAM型,表示可讀可寫,所以數據儲存器有4個端口

10、,當寫信號有效時,應給出寫的地址及數據,再加上時鐘信號,這里的數據存儲器采用軟件封裝好的RAM-1-PORT存儲器。3.1.3.2指令存儲器指令存儲器為ROM型,表示只讀,所以地址存儲器有2個端口,應給出讀的地址信號以及時鐘信號這里的數據存儲器采用軟件封裝好的ROM-1-PORT存儲器。3.1.4 PC計數器PC計數器主要作為執行一條指令后,地址自動加1到指令存儲器中取16位指令作為此輪操作。故PC計數器應能等待一個時鐘后將加1后的數據送至指令存取器中,所以它應包括ALU累加器(一端為1)和寄存器(當一個時鐘信號到來,將數據輸出),書中還包括一個數據選擇器,用于設置PC的值,以至于不會無限增長

11、,實現J指令。3.1.5 數據選擇器數據選擇器主要是解決數據來源問題,通過控制信號使數據選擇器選擇的數據端口不同,此數據選擇器可選用軟件封裝的2選1選擇器。3.1.6 ALU單元ALU單元主要用于將輸入端的兩個數做加減操作,通過控制信號01的變化產生運算,該ALU可以使用軟件封裝的加減ALU(LPM-ADD-SUB),當控制信號為1時作加法,為0時作減法。3.1.7 符號擴展單元符號擴展單元主要用于將不夠16位的指令數據擴展成16位,作為輸入數據的一端參與數據選擇器運算,這里我們僅考慮最簡單的擴展方式:將不足16位的指令數據由高位向低位依次補0直至數據長度為16位。四、 模塊詳細設計4.1指令

12、設計模塊4.1.1 指令處理流程一般來說,CPU在處理指令時需要經過以下幾個過程:(1)取指令(IF):根據程序計數器PC中的指令地址,從指令存儲器中取出一條指令,同時PC根據指令字長度自動遞增產生下一條指令所需要的指令地址,但遇到“地址轉移”指令時,則控制器把“轉移地址”送入PC,當然得到的“地址”需要做些變換才送入PC。     (2)指令譯碼(ID):對取指令操作中得到的指令進行分析并譯碼,確定這條指令需要完成的操作,由指令的15-12位產生相應的操作控制信號,用于驅動執行狀態中的各種操作。 (3)指令執行(EXE):根據指令譯

13、碼得到的操作控制信號,具體地執行指令動作,然后轉移到結果寫回狀態。 (4)存儲器訪問(MEM):所有需要訪問存儲器的操作都將在這個步驟中執行,該步驟給出存儲器的數據地址,把數據寫入到存儲器中數據地址所指定的存儲單元或者從存儲器中得到數據地址單元中的數據。(5)結果寫回(WB):指令執行的結果或者訪問存儲器中得到的數據寫回相應的目的寄存器中。圖4 單周期CPU指令處理過程4.1.2 指令格式詳細設計本次CPU設計主要有5條功能指令,分別為ADD、SUB、LW、SW、J指令,對這5個功能指令的控制碼分別設定為0101/0110/1001/0001/1010,現對5條指令各自的指令格式進行

14、設計:(1) ADD指令0101(4位)rs(3位)rt(3位)rd(3位)reserved此ADD加法指令完成的功能是:將rs3位對應的寄存器的數和rt3位對應的寄存器的數相加,結果數據存放至rd3位對應的寄存器的位置,reserved作為保留位。(2) SUB指令0110(4位)rs(3位)rt(3位)rd(3位)reserved此SUB減法指令完成的功能是:將rs3位對應的寄存器的數和rt3位對應的寄存器的數相減,結果數據存放至rd3位對應的寄存器的位置,reserved作為保留位。(3) LW指令1001(4位)base(3位)rt(3位)offset(6位)此LW指令完成的功能是:將

15、base3位對應的寄存器的數和offset6位擴展成16位數據相加,結果作為數據存儲器地址,取出地址對應的數據存放到rt3位對應的寄存器中。(4) SW指令0001(4位)base(3位)rt(3位)offset(6位)此SW指令完成的功能是:將base3位對應的寄存器的數和offset6位擴展成16位數據相加,結果作為數據存儲器地址A,將rt3位對應的寄存器的數據取出來,存放到A地址對應的存儲器單元中。(5)J指令1010(4位)target(12位)此J指令完成的功能是:將12位地址零擴展成16位,作目標跳轉地址。4.2 器件單元模塊此模塊的設計是CPU設計的核心部分,它是將眾多模塊整合在

16、一起,在此模塊中主要包括:寄存器組、控制器、存儲器、PC計數器、數據選擇器、ALU單元這六大單元。如下圖5所示,展示出模塊間整合的總體效果,可以看出,每個模塊的功能還是顯而易見的,各模塊間通過命名一致達到數據雙向傳輸效果。圖5 CPU綜合模塊示意圖4.2.1寄存器組由上面總體設計方案中指出,每個寄存器應該由16個D觸發器構成,為了避免設計復雜,我們采用迭代的設計方法,即先由單個D觸發器設計成包含2個D觸發器模塊,圖6示出了由單個D觸發器構成2個D觸發器模塊。為了避免篇幅頗多,這僅展示由8個D觸發器構成最終16個D觸發器的示意圖,如圖7,以及最終16位D觸發器綜合模塊效果,如圖8。圖6 單個D觸

17、發器構成2個觸發器圖7 8個D觸發器構成16個D觸發器 圖8 16位D觸發器綜合模塊寄存器組作為數據保存的器件,當讀取寄存器中的數據時,涉及讀地址端口以及對應的輸出數據端口,故應該有兩個讀地址端口,兩個寫地址端口;當寫入寄存器數據時,涉及寫的信號、寫的地址以及寫的數據也應該準備好,故應有一個寫地址端口,一個數據準備端口以及一個寫信號,同時數據的傳送需要在一個時鐘信號到來的上升沿操作,故應有一個時鐘信號CLK,所以總共端口共有8個。在圖9中展示出寄存器組的綜合模塊。圖9 寄存器組綜合模塊下面我們來看寄存器組綜合模塊的詳細設計,如圖10所示。主要有3處值得注意:l 因為我們設計的從寄存器取數的指令

18、位數為3位,所以最多可尋8個寄存器,所以可看到圖中示出了8個16位D觸發器的綜合模塊。l 圖中還有一個74138譯碼器,G1端為WE寫信號,當要向寄存器存數時,應使寫信號有效,同時給出3位需要寫的地址,將要寫入的數據存至譯碼生成對應的寄存器中。l 同時圖中還有2個8位數據選擇器,主要是用于當讀取寄存器數據時,給出讀取寄存器的地址,對應8位數據選擇器輸出對應寄存器中的數據。圖10 寄存器組詳細設計4.2.2控制器控制器的設計是整個CPU的命脈,因為控制器產生的控制信號用于整個CPU運作,針對某條功能指令,控制信號要能準確控制器件的運作。因此必須明確各個控制信號的作用,如下表1所示以及控制信號和功

19、能指令之間的關系,如下表2所示:表1 控制信號的作用信號名無效時作用(0)有效時作用(1)RegDst寫寄存器在寄存器堆的地址來自于rt 字段寫寄存器在寄存器堆的地址來自于rd字段ALUSrcB寄存器堆Data2 輸出符號擴展的立即數ALUOp減法加法RegWrite無在時鐘上升沿,寫寄存器MemtoReg送往寄存器組寫數據輸入的值來自ALU送往寄存器組寫數據輸入的值來自存儲器MemWr無在時鐘上升沿,寫存儲器PCSourcePC+1擴展的立即數表2 控制信號和功能指令對應表控制信號ADDSUBLWSWJ功能操作碼01010110100100011010RegDst11000ALUSrcB00

20、110ALUOp10110RegWrite11100MemtoReg00100MemWr00010PCSource00001由上表所示,我們可以容易得到每個控制信號的邏輯表達式,方法如下:找出某個信號在所有功能指令中為1的量,對相應功能操作碼為0的位置改為非,再將4位相與,對不同的功能指令之間相或。假設功能操作碼的4位從左向右依次對應S3、S2、S1、S0,則可以得出所以控制信號表達式:RegDst=S3S2S1S0+S3S2S1S0;ALUSrcB=S3S2S1S0+S3S2S1S0;ALUOp=S3S2S1S0+ S3S2S1S0+S3S2S1S0;RegWrite=S3S2S1S0+S3

21、S2S1S0+ S3S2S1S0;MemtoReg= S3S2S1S0;MemWr=S3S2S1S0;PCSource=S3S2S1S0;對應的邏輯電路圖即是與非門的組合,如圖11,示出了ALUOp的電路圖實現,輸入指令15-12的4位,通過功能指令內的相與和功能指令間的相或得出最后控制信號ALUOp的值,對于其他信號的電路實現這里就不舉例了。圖11 ALUOp控制信號的電路實現按照上述示例對所有控制信號的電路都能實現,則需要將所有控制信號模塊整合在一起,因此可以得出如圖12的控制器詳細設計:輸入的是指令15-12的控制碼,輸出7個控制信號,從圖13可以看到控制器的綜合模塊接口。圖12 控制器

22、的信號組合圖13 控制器綜合模塊4.2.3存儲器為了省去不必要的設計,存儲器模塊我們采用的是軟件封裝好的Memory。本次設計將存儲器分為數據存儲器和指令存儲器:數據存儲器使用RAM-1-PORT,可讀可寫,主要用于存放數據,用于寄存器取數和存數;指令存儲器使用ROM-1-PORT,只讀,用于存放16位指令數據。4.2.3.1 數據存儲器從圖14可以看出,數據存儲器RAM有4個輸入端和1個輸出端,能夠實現將數據寫入存儲器操作,應該要有準備寫入的數據,要寫入的地址以及內存寫操作控制信號,同時應有時鐘信號控制,對應的輸出端即從內存取出的數據。圖14 數據存儲器RAM4.2.3.2 指令存儲器從圖1

23、5可以看出,指令存儲器ROM有2個輸入端和1個輸出端,能夠實現將指令數據從指令存儲器中取出,輸入端應有準備要取出指令的地址以及時鐘信號,輸出端即從指令存儲器中取出的16位指令。圖15 指令存儲器ROM4.2.4 PC計數器程序計數器是用于當每個時鐘的上升沿到來后,PC計數器就自增1從指令存儲器中取出對應增1的地址的指令數據,作為本輪運算的指令。所以PC計數器模塊應該由圖16所示的三部分組成:自增1的ALU單元、PC跳轉數據選擇器(主要用于實現J指令)以及暫存增1的指令數據的16位寄存器。從圖中可以看出,PC計數器只要在時鐘信號上升沿到來時就將增1的地址送入指令存儲器中,因為在暫存增1地址的寄存

24、器輸出端的16位地址,不經任何信號控制就送入ALU的一端,與1相加,在本次時鐘上升沿就能將結果送入暫存寄存器中,等待下次時鐘信號的到來,輸出去的是已經增1的地址了,或是由J指令直接指定的目標地址。圖16 PC計數器綜合模塊4.2.5數據選擇器數據選擇器主要用于根據控制信號,來選擇對應的數據端輸入,在本次設計中用到4處數據選擇器,其內部實現都是采用軟件封裝的2選1數據選擇器,在圖19中展示出PC數據選擇器具體實現方法,其他數據選擇武器實現類似。下面介紹4處數據選擇器,分別是:l 根據MemtoReg信號判斷寫入寄存器的數據是來自于ALU或是存儲器,如圖17所示;圖17 寫入寄存器數據選擇器l 根

25、據PCSource控制信號,判斷PC計數器的下一條地址是來自于PC+1還是來自于J指令指出的目標地址,主要用于J指令的跳轉,如圖18是PC數據選擇器的綜合模塊,圖19是其具體實現方案,主要采用2選1數據選擇器。圖18 PC數據選擇器圖19 PC數據選擇器內部實現l 根據RegDst信號確定寫入寄存器的地址是來自于指令數據的5-3位還是8-6位,如圖20所示。圖20 寫入寄存器地址數據選擇器l 根據ALUSrcB控制信號確定ALU單元的輸入B端的數據來源,主要用于LW指令中,判斷存儲器地址是由寄存器的1端和2端相加得到還是由寄存器的1端和指令后6位擴展成16位相加得到,如圖21所示。圖21 AL

26、U的B端數據選擇器4.2.6 ALU單元ALU單元主要用于將兩端輸入數據進行加或減操作,從圖22可以看到,ALU綜合模塊,有3個輸入端,分別是輸入數據A、B端和控制信號,對應輸出端是AB端加或減的結果。從圖23我們了解ALU模塊的內部實現,ALU的實現主要是應用軟件的ALU_ADD_SUB,器件做加或減的操作來自于ALUOp的控制,當ALUOp位1時,做加法;當為0時,做減法。圖22 ALU綜合模塊圖23 ALU模塊內部實現4.2.7 擴展單元擴展單元主要用于填補數據的不足,此次設計的擴展單元為最簡單的擴展,即對于輸入不足的數據,在其高位上依次補0直至湊夠16位數。設計中主要用到兩處擴展:l

27、當執行LW指令時,基址中的數據和指令后6位數據擴展成16位數據相加,結果作為存儲器的地址,從存儲器取數,如圖24所示。圖24 指令后6位擴展16位l 當執行J指令時,由J指令的后12位擴展成16位作為目標跳轉地址,如圖25所示。圖25 指令后12位擴展16位作為跳轉目標地址4.2.8 FPGA實驗板數碼管顯示此模塊主要解決結果輸出顯示在FPGA實驗板上的問題。設計的CPU位16位,但是FPGA實驗板的數碼管每個數字有8位,有4個數碼管,所以應該讓結果的4位對應數碼管的8位顯示,故需要使用Verilog語言按照引腳對應編寫,如下是4位結果對應數碼管8位顯示。圖26是對應策略的模塊,可以看到,使用

28、了4個此模塊,分別將結果數據的3-0、7-4、11-8、15-12對應顯示管的7-0、15-8、23-16、31-24。module changer(IN,OUT);input 3:0IN;output 7:0OUT;reg7:0 OUT;alwaysbegincase(IN)'b0000 : OUT = 'b11000000;'b0001 : OUT = 'b11111001;'b0010 : OUT = 'b10100100;'b0011 : OUT = 'b10110000;'b0100 : OUT = 'b

29、10011001;'b0101 : OUT = 'b10010010;'b0110 : OUT = 'b10000010;'b0111 : OUT = 'b11111000;'b1000 : OUT = 'b10000000;'b1001 : OUT = 'b10010000;'b1010 : OUT = 'b10001000;'b1011 : OUT = 'b10000011;'b1100 : OUT = 'b11000110;'b1101 : OUT =

30、'b10100001;'b1110 : OUT = 'b10000110;'b1111 : OUT = 'b10001110;endcaseendendmodule圖26 顯示對應模塊顯示還有一步驟是將上述總模塊編譯成功后,會有32個輸出端口,按照引腳對應接在如圖27的引腳圖上。圖27 實驗板引腳圖另外還有一個顯示問題是:時鐘信號太快,人肉眼來不及觀察,所以應將時鐘延長,所以采用如圖28所示的時鐘計數器,輸入的時鐘信號經過時鐘計數器產生24個時鐘信號,器件使用最高位時鐘信號,即C23,這樣相當于延長了時鐘信號,便于人眼觀察數碼管的顯示。圖28 時鐘計數器

31、五、 實驗數據實驗數據包括兩大部分:數據存儲器中存儲初始數據、指令存儲器中存儲指令數據,現分別對兩部分數據展示。5.1 數據存儲器初始數據數據存儲器中存放初始數據如表3,在數據存儲器中以二進制存在,這里表述使用16進制,表示的意思是:在數據存儲器中,地址0H,1H,2H,3H存放的初始數據是0002H,0001H,0003H,0004H。表3 數據存儲器數據表Address+00+01+10+110000000000000000100000000000000001000000000000001100000000000001005.2 指令存儲器指令數據指令存儲器中存放指令數據如表4,在指令存儲

32、器中以二進制存在。它表達的意思需要結合功能指令的格式進行分析。具體分析如下:表4 指令存儲器數據表Address+000+001+010+011+100+10100100100000100000010010000100000010101000001000000101000000000010001100000100000001010000000000010前兩條指令的前4位功能操作碼為1001,是LW指令。根據LW指令的格式,第一條指令將寄存器000中的數據和000000擴展成16位0000H相加結果為0000H(初始寄存器000數據為0000H)作為數據存儲器的地址(實驗中取結果的4-0位作為地址)0H號地址取出原始數據0002H,存放至寄存器001號中;第二條指令將寄存器000中的數據和000001擴展成16位0001H相加結果為0001H(初始寄存器000數據為0000H)作為數據存儲器的地址1H號地址取出原始數據0001H,存放至寄存器010號中;第三條指令的前4位功能操作碼為0101,是ADD指令。根據ADD指令的格式,將寄存器000號中的數據(初始還是0000H)和寄存器001號中的數據0002H(存儲器取出放至寄存器001中的)相加結果送入寄存器000號中。第四條指令的前4位功能操作碼為1010,是J指令。根

溫馨提示

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

評論

0/150

提交評論