基于FPGA的通用異步收發(fā)器設計(串口通信)_第1頁
基于FPGA的通用異步收發(fā)器設計(串口通信)_第2頁
基于FPGA的通用異步收發(fā)器設計(串口通信)_第3頁
基于FPGA的通用異步收發(fā)器設計(串口通信)_第4頁
基于FPGA的通用異步收發(fā)器設計(串口通信)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、FPGA串行通用異步收發(fā)器設計實驗目的:1、掌握QuartusII6.0等EDA工具軟件的基本使用; 2、熟悉VHDL硬件描述語言編程及其調(diào)試方法;3、學習用FPGA實現(xiàn)接口電路設計。實驗內(nèi)容: 本實驗目標是利用FPGA邏輯資源,編程設計實現(xiàn)一個串行通用異步收發(fā)器。實驗環(huán)境為EDA實驗箱。電路設計采用VHDL硬件描述語言編程實現(xiàn),開發(fā)軟件為QuartusII6.0。1、UART簡介 UART(Universal Asynchronous Receiver Transmitter通用異步收發(fā)器)是一種應用廣泛的短距離串行傳輸接口。常常用于短距離、低速、低成本的通訊中。8250、8251、NS16

2、450等芯片都是常見的UART器件?;镜腢ART通信只需要兩條信號線(RXD、TXD)就可以完成數(shù)據(jù)的相互通信,接收與發(fā)送是全雙工形式。TXD是UART發(fā)送端,為輸出;RXD是UART接收端,為輸入。UART的基本特點是:(1)在信號線上共有兩種狀態(tài),可分別用邏輯1(高電平)和邏輯0(低電平)來區(qū)分。在發(fā)送器空閑時,數(shù)據(jù)線應該保持在邏輯高電平狀態(tài)。(2)起始位(Start Bit):發(fā)送器是通過發(fā)送起始位而開始一個字符傳送,起始位使數(shù)據(jù)線處于邏輯0狀態(tài),提示接受器數(shù)據(jù)傳輸即將開始。(3)數(shù)據(jù)位(Data Bits):起始位之后就是傳送數(shù)據(jù)位。數(shù)據(jù)位一般為8位一個字節(jié)的數(shù)據(jù)(也有6位、7位的情

3、況),低位(LSB)在前,高位(MSB)在后。(4)校驗位(parity Bit):可以認為是一個特殊的數(shù)據(jù)位。校驗位一般用來判斷接收的數(shù)據(jù)位有無錯誤,一般是奇偶校驗。在使用中,該位常常取消。(5)停止位:停止位在最后,用以標志一個字符傳送的結(jié)束,它對應于邏輯1狀態(tài)。(6)位時間:即每個位的時間寬度。起始位、數(shù)據(jù)位、校驗位的位寬度是一致的,停止位有0.5位、1位、1.5位格式,一般為1位。(7)幀:從起始位開始到停止位結(jié)束的時間間隔稱之為一幀。(8)波特率:UART的傳送速率,用于說明數(shù)據(jù)傳送的快慢。在串行通信中,數(shù)據(jù)是按位進行傳送的,因此傳送速率用每秒鐘傳送數(shù)據(jù)位的數(shù)目來表示,稱之為波特率。

4、如波特率9600=9600bps(位/秒)。UART的數(shù)據(jù)幀格式為:STARTD0D1D2D3D4D5D6D7PSTOP起始位數(shù) 據(jù) 位校驗位停止位FPGA UART系統(tǒng)組成 :如下圖所示,F(xiàn)PGA UART由三個子模塊組成:波特率發(fā)生器;接收模塊;發(fā)送模塊;2、模塊設計:系統(tǒng)由四部部分組成:頂層模塊;波特率發(fā)生器;UART接收器; UART發(fā)送器1)頂層模塊 異步收發(fā)器的頂層模塊由波特率發(fā)生器、UART接收器和UART發(fā)送器構(gòu)成。UART發(fā)送器的用途是將準備輸出的并行數(shù)據(jù)按照基本UART幀格式轉(zhuǎn)為TXD信號串行輸出。UART接收器接收RXD串行信號,并將其轉(zhuǎn)化為并行數(shù)據(jù)。波特率發(fā)生器就是專門

5、產(chǎn)生一個遠遠高于波特率的本地時鐘信號對輸入RXD不斷采樣,使接收器與發(fā)送器保持同步。2)波特率發(fā)生器 波特率發(fā)生器實際上就是一個分頻器。可以根據(jù)給定的系統(tǒng)時鐘頻率(晶振時鐘)和要求的波特率算出波特率分頻因子,算出的波特率分頻因子作為分頻器的分頻數(shù)。波特率分頻因子可以根據(jù)不同的應用需要更改。3)UART接收器 由于串行數(shù)據(jù)幀和接收時鐘是異步的,由邏輯1轉(zhuǎn)為邏輯0可以被視為一個數(shù)據(jù)幀的起始位。然而,為了避免毛刺影響,能夠得到正確的起始位信號,必須要求接收到的起始位在波特率時鐘采樣的過程中至少有一半都是屬于邏輯0才可認定接收到的是起始位。由于內(nèi)部采樣時鐘bclk周期(由波特率發(fā)生器產(chǎn)生)是發(fā)送或接收

6、波特率時鐘頻率的16倍,所以起始位需要至少8個連續(xù)bclk周期的邏輯0被接收到,才認為起始位接收到,接著數(shù)據(jù)位和奇偶校驗位將每隔16個bclk周期被采樣一次(即每一個波特率時鐘被采樣一次)。如果起始位的確是16個bclk周期長,那么接下來的數(shù)據(jù)將在每個位的中點處被采樣。UART接收器的接收狀態(tài)機 接收狀態(tài)機一共有5個狀態(tài): R_START(等待起始位);R_CENTER(求中點);R_WAIT(等待采樣);R_SAMPLE(采樣);R_STOP(停止位接收)。 R_START狀態(tài) 當UART接收器復位后,接收狀態(tài)機將處于這一個狀態(tài)。在此狀態(tài),狀態(tài)機一直在等待RXD的電平跳轉(zhuǎn),從邏輯1變?yōu)檫壿?

7、,即起始位,這意味著新的一幀UART數(shù)據(jù)幀的開始,一旦起始位被確定,狀態(tài)機將轉(zhuǎn)入R_CENTER狀態(tài)。狀態(tài)圖中的RXD_SYNC信號是RXD的同步信號,因為在進行邏輯1或邏輯0判斷時,不希望檢測的信號是不穩(wěn)定的,所以不直接檢測RXD信號,而是檢測經(jīng)過同步后的RXD_SYNC信號。R_CENTER狀態(tài)對于異步串行信號,為了使每一次都檢測到正確的位信號,而且在較后的數(shù)據(jù)位檢測時累計誤差較小,顯然在每位的中點檢測是最為理想的。在本狀態(tài),就是由起始位求出每位的中點,通過對bclk的個數(shù)進行計數(shù)(RCNT16),但計數(shù)值不是想當然的“1000”,要考慮經(jīng)過一個狀態(tài),也即經(jīng)過了一個bclk周期,所希望得到

8、的是在采樣時1/2位。另外,可能在R_START狀態(tài)檢測到的起始位不是真正的起始位,可能是一個偶然出現(xiàn)的干擾尖脈沖(負脈沖)。這種干擾脈沖的周期是很短的,所以可以認為保持邏輯0超過1/4個位時間的信號一定是起始位。R_WAIT狀態(tài)當狀態(tài)機處于這一狀態(tài),等待計滿15個bclk,在第16個bclk是進入R_SAMPLE狀態(tài)進行數(shù)據(jù)位的采樣檢測,同時也判斷是否采集的數(shù)據(jù)位長度已達到數(shù)據(jù)幀的長度(FRAMELEN),如果到來,就說明停止位來臨了。FRAMELEN在設計時是可更改的(使用了Generic),在本設計中默認為8,即對應的UART工作在8位數(shù)據(jù)位、無校驗位格式。R_SAMPLE狀態(tài)即數(shù)據(jù)位采

9、樣檢測,完成后無條件狀態(tài)機轉(zhuǎn)入R_WAIT狀態(tài),等待下次數(shù)據(jù)位的到來。 R_STOP狀態(tài)無論停止位是1還是1.5位,或是2位,狀態(tài)機在R_STOP不具體檢測RXD,只是輸出幀接收完畢信號(REC_DONE=1),停止位后狀態(tài)機轉(zhuǎn)回到R_START狀態(tài),等待下一個幀的起始位。4)UART發(fā)送器 發(fā)送器只要每隔16個bclk周期輸出1個數(shù)據(jù)即可,次序遵循第1位是起始位,最后一位是停止位。在本設計中沒有校驗位,但只要改變Generic參數(shù)FrameLen,也可以加入校驗位,停止位是固定的1位格式。 發(fā)送狀態(tài)機的狀態(tài)圖 發(fā)送狀態(tài)機一共有5個狀態(tài):X_IDLE(空閑);X_START(起始位);X_WA

10、IT(移位等待);X_SHIFT(移位);X_STOP(停止位)。X_IDLE狀態(tài):當UART被復位信號復位后,狀態(tài)機將立刻進入這一狀態(tài)。在這個狀態(tài)下,UART的發(fā)送器一直在等待一個數(shù)據(jù)幀發(fā)送命令XMIT_CMD。XMIT_CMD_P信號是對XMIT_CMD的處理,XMIT_CMD_P是一個短脈沖信號。這時由于XMIT_CMD是一個外加信號,在FPGA之外,不可能對XMIT_CMD的脈沖寬度進行限制,如果XMIT_CMD有效在UART發(fā)完一個數(shù)據(jù)幀后仍然有效,那么就會錯誤地被認為,一個新的數(shù)據(jù)發(fā)送命令又到來了,UART發(fā)送器就會再次啟動UART幀的發(fā)送,顯然該幀的發(fā)送是錯誤的。在此對XMIT_

11、CMD進行了脈沖寬度的限定,XMIT_CMD_P就是一個處理后的信號。當XMIT_CMD_P=1,狀態(tài)機轉(zhuǎn)入X_START,準備發(fā)送起始位。X_START狀態(tài):在這個狀態(tài)下,UART的發(fā)送器一個位時間寬度的邏輯0信號至TXD,即起始位。緊接著狀態(tài)機轉(zhuǎn)入X_WAIT狀態(tài)。XCNT16是bclk的計數(shù)器X_WAIT狀態(tài)同UART接收狀態(tài)機中的R_WAIT狀態(tài)類似。 X_SHIFT狀態(tài)當狀態(tài)機處于這一狀態(tài)時,實現(xiàn)待發(fā)數(shù)據(jù)的并串轉(zhuǎn)換。轉(zhuǎn)換完成立即回到X_WAIT狀態(tài)。X_STOP停止位發(fā)送狀態(tài),當數(shù)據(jù)幀發(fā)送完畢,狀態(tài)機轉(zhuǎn)入該狀態(tài),并發(fā)送16個bclk周期的邏輯1信號,即1位停止位。狀態(tài)機送完停止位后回

12、到X_IDLE狀態(tài),并等待另一個數(shù)據(jù)幀的發(fā)送命令。實驗步驟:1、 創(chuàng)建工程文件按照Quartus軟件新建工程向?qū)Ы⒐こ?,工程名設為:uart_test(可自行命名)。2、 子模塊電路設計(包括各個模塊的功能仿真)1) 波特率發(fā)生器程序編寫:在“文件”菜單下選擇“New”,在彈出的窗口點擊“VHDL File”點擊“OK”打開vhdl編輯窗口。編輯輸入波特率發(fā)生器程序,編輯完畢后保存,文件名保存為“baud”(注:文件名必須與程序中實體名一致)選中“Add file to current project”選項,添加當前文件到項目。-文件名:baud.vhd.-功能:本實驗想要實現(xiàn)的波特率為:9

13、600,EDA實驗箱上晶振頻率為: 4MHZ,-波特率發(fā)生器的分頻數(shù)計算如下式:-/(16*9600)=26library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity baud is generic(framlenr:integer:=26); Port (clk,resetb:in std_logic; bclk :out std_logic);end baud;architecture Behavioral of baud is be

14、gin process(clk,resetb) variable cnt:integer; begin if resetb=1 then cnt:=0; bclk=framlenr then cnt:=0; bclk=1;-設置分頻系數(shù) else cnt:=cnt+1; bclk=0; end if; end if; end process;end Behavioral;文件編譯:保存文件后,選擇“Project”菜單,點擊“Set as Top-Level Entity”項,把當前文件設置為頂層實體。(注:Quartus環(huán)境下所有操作(綜合、編譯、仿真、下載等)都只對頂層實體進行,所以編譯任

15、何程序前,必須先設置該選項,把當前要編譯的文件設置為頂層實體后,才能對該文件進行編譯等操作)打開“Processing”菜單,點擊“Start Compilation”執(zhí)行完全編譯狀態(tài)窗口顯示編譯過程進度信息編譯結(jié)束,系統(tǒng)會彈出編譯結(jié)束窗口,報告錯誤與警告數(shù),點擊“確定”。編譯報告給出所有編譯結(jié)果信息,包括硬件信息、資源占用率等。錯誤修改: 如果程序中有錯誤,需要根據(jù)“Messages”消息欄給出的錯誤提示修改程序,保存后須再次編譯,直至所有錯誤均改正后,方可執(zhí)行下一步操作。警告信息可以忽略。波形仿真:1 建立波形圖文件關(guān)閉編譯報告窗口,在“文件”菜單下選擇“New”,選中“other fil

16、es”標簽頁,在彈出的窗口點擊“Vector Waveform File”點擊“OK” 打開波形編輯窗口。波形圖編輯窗口2 定義仿真觀測的輸入輸出節(jié)點在波形編輯窗口左側(cè)欄內(nèi)單擊鼠標右鍵,出現(xiàn)浮動菜單,選擇“Insert Note or Bus”出現(xiàn)“Insert Note or Bus”對話框,點擊“Node Finder”按鍵,出現(xiàn)“Node Finder”對話框,如下圖所示。在圖中“Filter:”選項下選擇管腳類型為“Pins:all”,然后單擊List按鈕,可在左下側(cè)區(qū)域看到設計項目中的輸入輸出信號,單擊按鈕“= ”,將這些信號選擇到“Selected Nodes”區(qū),表示對這些信號進

17、行觀測,單擊OK此時的波形編輯窗口如下圖所示。保存波形文件,文件名為uart_test.vwf(注:擴展名默認不填,文件名與項目名同名)3 為輸入信號賦值波形編輯器窗口左側(cè)為信號賦值工具條,根據(jù)實際要求點選工具按鈕對輸入信號賦值。1)為時鐘信號clk賦值:單擊clk,使其呈藍色即選中了clk,單擊為時鐘信號賦值工具按鈕,彈出Clock對話框,在Period框中輸入合適的時鐘周期數(shù),其它值按默認即可,點擊OK。2)為復位信號resetb賦值:選中resetb,單擊賦值0工具條按鈕,為期賦值為邏輯0。3)設置仿真時間選擇Edit菜單下的End Time選項,打開End Time對話框,在time框

18、內(nèi)入輸100單位為us。再次保存波形文件,窗口如下4 時序仿真選擇Processing菜單下的Begin Simulation選項,即開始波形仿真。狀態(tài)窗口會顯示出仿真進程,仿真結(jié)束后可以看到仿真結(jié)果波形,如下圖所示。觀察波形可用工具條上的放大縮小按鈕放大縮小波形圖,下圖即為已經(jīng)縮小了很多倍后的波形圖。結(jié)果分析:圖上可以觀察到輸出端bckl等間隔的有脈沖信號輸出,通過標尺可以計算出它的脈沖輸出頻率及其與clk輸入信號的關(guān)系。該程序?qū)崿F(xiàn)的是波特率發(fā)生器,輸出頻率為時鐘輸入頻率的1/26。生成符號文件:通過波形仿真可以確定程序功能是否正確后,就可以把該程序生成符號文件,以便在后面的程序中調(diào)用。具體

19、操作是:打開File文件菜單,選擇Creat/Updata菜單項,右側(cè)彈出子菜單再選擇Creat Symbol files for Current file把當前文件創(chuàng)建成符號文件。狀態(tài)窗口有進度信息顯示。生成的符號文件可以通過打開原理圖窗口調(diào)入,進行驗證。下圖為生成的波特率模塊。按照生成波特率模塊的步驟完成以下其它模塊的程序編寫,并進行仿真波形、功能驗證,仿真通過后生成各自的符號文件。這里只給出仿真得到的波形圖。 2) UART發(fā)送器UART發(fā)送器程序:-文件名:transfer.vhd-功能:UART發(fā)送器-說明:系統(tǒng)由五個狀態(tài)(x_idle,x_start,x_wait,x_shift,

20、x_stop)和一個進程構(gòu)成。library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity transfer is generic(framlent:integer:=8); -類屬說明 Port (bclkt,resett,xmit_cmd_p:in std_logic; -定義輸入輸出信號 txdbuf :in std_logic_vector(7 downto 0); txd ,txd_done :out std_logic);end

21、 transfer;architecture Behavioral of transfer istype states is (x_idle,x_start,x_wait,x_shift,x_stop); -定義5個子狀態(tài)signal state:states:=x_idle;signal tcnt:integer:=0; beginprocess(bclkt,resett,xmit_cmd_p,txdbuf) -主控時序進程variable xcnt16:std_logic_vector(4 downto 0):=00000; -定義中間變量variable xbitcnt:integer:

22、=0;variable txds:std_logic; begin if resett=1 then state=x_idle; -復位,txd輸出保持1 txd_done -狀態(tài)1,等待數(shù)據(jù)幀發(fā)送命令 if xmit_cmd_p=1 then state=x_start;txd_done=0; else state -狀態(tài)2,發(fā)送信號至起始位 if xcnt16=01111 then state=x_shift; xcnt16:=00000; else xcnt16:=xcnt16+1; txds:=0; state -狀態(tài)3,等待狀態(tài) if xcnt16=01110 then if xbi

23、tcnt=framlent then state=x_stop; xbitcnt:=0; xcnt16:=00000; else state=x_shift; end if; xcnt16:=00000; else xcnt16:=xcnt16+1; state -狀態(tài)4,將待發(fā)數(shù)據(jù)進行并串轉(zhuǎn)換 txds:=txdbuf(xbitcnt); xbitcnt:=xbitcnt+1; state -狀態(tài)5,停止位發(fā)送狀態(tài) if xcnt16=01111 then if xmit_cmd_p=0 then state=x_idle;-高電平保持時間應低于一個幀發(fā)送的時間xcnt16:=00000;

24、else xcnt16:=xcnt16; state=x_stop; end if; txd_done=1; else xcnt16:=xcnt16+1; txds:=1; statestate=x_idle; end case;end if; txd=txds;end process;end Behavioral;生成的模塊如下圖所示:仿真波形:說明:1)resett:為復位信號,高電平復位,初始時刻需要手動設置一段時間的高電平2)Bclkt為波特率發(fā)生信號,用時鐘信號定義,周期設為10ns。3)為了得到完整的仿真結(jié)果,仿真時間要設的長一些(100us)4)xmit_cmd_p:為發(fā)送控制信

25、號,開始時刻設置一段高電平5)txdbuf:為要發(fā)送的八位數(shù)據(jù),點擊“+”后,可對每一個位信號分別賦值,本波形設置為txdbuf7、5、3、1位置“1”,6、4、2、0位置“0” 6)txd:為發(fā)送器發(fā)出的串行信號7)txd_done:為發(fā)送結(jié)束信號,高電平有效3) UART接收器UART接收器程序:-文件名:reciever.vhd.-功能:UART接受器。-系統(tǒng)由五個狀態(tài)(r_start,r_center,r_wait,r_sample,r_stop)和兩個進程構(gòu)成library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARI

26、TH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity reciever is generic(framlenr:integer:=8); -傳送的數(shù)據(jù)位為8位 Port ( bclkr,resetr,rxdr:in std_logic; -定義輸入輸出信號 r_ready :out std_logic; rbuf :out std_logic_vector(7 downto 0) );end reciever;architecture Behavioral of reciever is type states is (r_start,r_center,r_

27、wait,r_sample,r_stop);-定義各子狀態(tài) signal state:states:=r_start; signal rxd_sync:std_logic; - rxd_sync內(nèi)部信號,接受rxd輸入begin pro1:process(rxdr) begin if rxdr=0 then rxd_sync=0; else rxd_sync=1; end if; end process; pro2:process(bclkr,resetr,rxd_sync) -主控時序、組合進程 variable count:std_logic_vector(3 downto 0); -定義

28、中間變量 variable rcnt:integer:=0; - rcnt為接收的數(shù)據(jù)位數(shù)計數(shù) variable rbufs:std_logic_vector(7 downto 0); begin if resetr=1 then state -狀態(tài)1,等待起始位 if rxd_sync=0 then state=r_center; r_ready=0; rcnt:=0; else state=r_start; r_ready -狀態(tài)2,求出每位的中點 if rxd_sync=0 then -每個數(shù)據(jù)位被分為16等分,中點為8 if count=0100 then state=r_wait;

29、count:=0000; else count:=count+1; state=r_center; end if; else state -狀態(tài)3,等待狀態(tài) if count=1110 then if rcnt=framlenr then state=r_stop; - rcnt=framlenr表示數(shù)據(jù)接收夠8位 else state=r_sample; end If; count:=0000; else count:=count+1; staterbufs(rcnt):=rxd_sync; -狀態(tài)4,數(shù)據(jù)位采樣檢測 rcnt:=rcnt+1; stater_ready=1; rbuf=rb

30、ufs; -狀態(tài)5,輸出幀接收完畢信號 statestate=r_start; end case; end if; end process;end Behavioral;生成的模塊:仿真波形:說明:1)resett:為復位信號,高電平復位,初始時刻需要手動設置一段時間的高電平2)Bclkt為波特率發(fā)生信號,用時鐘信號定義,周期設為10ns。3)為了得到完整的仿真結(jié)果,仿真時間要設的長一些(100us)4)rxdr:為預接收的串行信號,這里用周期信號模擬,周期設為50ns5)rbuf:為接收到的八位數(shù)據(jù) 6)rxd_ready:為接收器接收滿8位數(shù)據(jù)后發(fā)出的結(jié)束信號,高電平有效4) 其它功能模塊

31、 為了更直觀的反應串口通信的運行結(jié)果,本實驗還另外設計了兩個模塊,使得程序在做硬件功能驗證時更加直觀。A、 分頻器模塊實驗箱提供的晶振頻率為:4Mhz,實驗中需要較低的頻率信號驅(qū)動計數(shù)器計數(shù)和提供給發(fā)送器觸發(fā)信號(xmit_cmd_p),本實驗分頻器設置分頻數(shù)為,得到4hz脈沖輸出。分頻器程序:-文件名:clock_div.vhd.-功能:實驗開發(fā)板晶振頻率為:4MHZ,經(jīng)過分頻后得到4HZ脈沖頻率-分頻數(shù)計算:/4 = library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity clock_div is generic(framlenr:integer:=); Port (clk,resetb:in std_logic; bclk: inout std_logic);end clock_div;architecture Behavioral of clock_div is begin process(clk,resetb) variable cnt:integer; begin if resetb=1 then cnt:=0; bclk=framlenr then cnt:=0; bclk=framlenr/2 then

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論