基于FPGA的視頻采集與顯示模塊設(shè)計(jì)_第1頁
基于FPGA的視頻采集與顯示模塊設(shè)計(jì)_第2頁
基于FPGA的視頻采集與顯示模塊設(shè)計(jì)_第3頁
基于FPGA的視頻采集與顯示模塊設(shè)計(jì)_第4頁
基于FPGA的視頻采集與顯示模塊設(shè)計(jì)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于FPGA的視頻采集與顯示模塊設(shè)計(jì)摘要視頻監(jiān)控是一種可以執(zhí)行視頻采集并實(shí)時顯示的電路系統(tǒng),我們可以根據(jù)需求設(shè)計(jì)不同的監(jiān)控系統(tǒng),在實(shí)際應(yīng)用中較為普遍,可見對于視頻監(jiān)控值得去探索學(xué)習(xí)。設(shè)計(jì)所采用的芯片是FPGA,F(xiàn)PGA如同一張白紙,我們可以通過硬件描述語言自由的設(shè)計(jì)。通過軟件仿真,我們可以事先驗(yàn)證設(shè)計(jì)的正確性,使用FPGA來開發(fā)數(shù)字電路,可以大大縮短設(shè)計(jì)時間,提高系統(tǒng)的可靠性。本文對視頻采集、存儲、顯示的設(shè)計(jì)進(jìn)行闡述。在這次的課題設(shè)計(jì)中其具體的操作流程為:借助于OfficeVisio軟件完成了相應(yīng)框圖、流程圖的設(shè)計(jì),UltraEdit軟件完成了RTL代碼的編輯,Modelsim軟件完成了RTL代碼的仿真,Quartus軟件完成了代碼的綜合以及板級調(diào)試等。本次設(shè)計(jì)通過簡單的方式實(shí)現(xiàn)電路模塊的設(shè)計(jì),經(jīng)過板級調(diào)試成功后。將手機(jī)上的鐘點(diǎn)放到攝像頭前,這時在CRT顯示器上就會顯示攝像頭采集到的手機(jī)鐘點(diǎn)信息。關(guān)鍵詞:FPGA;OV7670;異步RAM;VGADesignofVedioCollectandDisplayModulesBasedonFPGAAbstractThevediosurveillanceisacircuitsystemcanperformvedioacquisitionandvediodisplaywhichrealtime,wecandesigndifferentmonitoringsystemaccordingtotherequirement,infactitisuniversalforwetouse,soitisworthtolearningvideosurveillance.ThechipusedinthedesignisFPGA,F(xiàn)PGAislikeablankpaper,wecanfreetodesignbyusinghardwaredescriptionlanguage,wecansimulatebysomesoftware,Wecanjudgethecorrectnessofthedesigninadvance,useFPGAtodevelopdigitalcircuits,wecangreatlyshortenthedesigntime,makethesystemismoresafer.Thispaperdescribesthedesignofvideocapture,storageanddisplay.thespecificoperationprocess:thecorrespondingblockdiagramandflowchartaredesignedwiththeaidofVisioOfficesoftware.UltraEditsoftwaretocompletetheRTLcodeeditor,Wecandesigndifferentmonitoringsystemaccordingtotherequirement.thecorrespondingblockdiagramandflowchartaredesignedwiththeaidofVisioOfficesoftware.ModelsimsoftwaretocompletethesimulationoftheRTLcode,Quartussoftwarecompletedthecodeintegratedandboardleveldebugging,etc.Thisdesignthroughasimplewaytoachievethedesignofthecircuitmodule,afterthesuccessofboardleveldebugging.wecanplacecellphoneinthefrontofthecamera,meanwhiletheCRTdisplaywillshowhourofthecameratocapturethephoneinformation.Keywords:FPGA,OV7670,Asynchronousram,VGA目錄摘要 IAbstract II1緒論 11.1研究背景及目的 11.2設(shè)計(jì)創(chuàng)新點(diǎn) 11.3開發(fā)軟件簡介 22選型分析 32.1視頻采集器件簡介 32.2FPGA芯片及開發(fā)板簡介 32.3視頻顯示器簡介 43整體方案設(shè)計(jì) 64視頻信號的采集 74.1SCCB_CTRL模塊介紹 74.1.1SCCB協(xié)議簡要說明 74.1.2SCCB_CTRL模塊操作時序說明 74.1.3SCCB_CTRL模塊流程說明 74.1.4SCCB_CTRL模塊結(jié)構(gòu)框圖 84.1.5SCCB_CTRL模塊接口信號 94.1.6SCCB_CTRL模塊仿真波形 94.2OV7670模塊介紹 94.2.1OV7670模塊操作時序說明 94.2.2OV7670模塊結(jié)構(gòu)框圖 104.2.3OV7670模塊接口信號 104.2.4OV7670模塊仿真波形 104.2.5OV7670模塊輸出數(shù)據(jù)結(jié)構(gòu) 115視頻信號存儲 125.1ASYN_RAM模塊結(jié)構(gòu)框圖 125.2ASYN_RAM模塊操作流程 125.3ASYN_RAM模塊接口信號 125.4ASYN_RAM模塊仿真波形 136視頻顯示說明 146.1顏色空間的認(rèn)識 146.2RGB顏色空間 146.3YUV顏色空間 156.4VGA時序圖 156.5VGA接口介紹 166.6VGA模塊接口框圖 166.7VGA模塊接口信號 176.8VGA模塊仿真波形 177開發(fā)板調(diào)試 188總結(jié) 19參考文獻(xiàn) 20致謝 21附錄 22SCCB_CTRL模塊代碼代碼 22AUTO_CFG_OV7670模塊代碼代碼 28OV7670_SCCB模塊代碼代碼 31CLK_GEN模塊代碼代碼 32OV7670模塊代碼代碼 33VGA模塊代碼代碼 341緒論1.1研究背景及目的隨著科技的不斷進(jìn)步,人們的生活水平也得到了提高,生活質(zhì)量有了相當(dāng)大的進(jìn)步。當(dāng)然,人們生活水平和質(zhì)量提高后,人們開始渴望精神生活改善,比如,娛樂、健身消費(fèi)開始成為越來越多的人的青睞。能夠確保人們的財(cái)產(chǎn)生命安全成了各商家、企業(yè)關(guān)注的焦點(diǎn)。因此,越來越多的商家、企業(yè)都裝上了視頻監(jiān)控系統(tǒng),以便盡量確保人們的生命和財(cái)產(chǎn)的安全。可以說,視頻監(jiān)控設(shè)備對一個國家的國防安全、社會安全起到了一個至關(guān)重要的作用。本文旨在研究一種基于FPGA視頻采集與顯示模塊的設(shè)計(jì)方法,采用Verilog硬件描述語言設(shè)計(jì)并驗(yàn)證了系統(tǒng)中的OV7670視頻信息采集模塊、視頻信息緩存模塊、視頻信息顯示模塊。通過模塊的設(shè)計(jì),完成了通過OV7670實(shí)現(xiàn)對外界模擬視頻信息的采集(A/D轉(zhuǎn)換)、并能夠通過VGA接口實(shí)現(xiàn)在顯示器上進(jìn)行實(shí)時的顯示?;贔PGA的設(shè)計(jì)為視頻采集與顯示提供了更加靈活高效的實(shí)現(xiàn)可能性,該設(shè)計(jì)模塊具有體積比較小、效率較高等優(yōu)點(diǎn),在視頻處理、安防監(jiān)控、視頻傳輸?shù)扔袕V泛的應(yīng)用。1.2設(shè)計(jì)創(chuàng)新點(diǎn)1.設(shè)計(jì)的實(shí)用性。視頻采集并顯示模塊是一種可以采集并顯示視頻的方案,也是現(xiàn)在視頻監(jiān)控設(shè)備的核心基礎(chǔ)。除此之外,此方案如果加上算法級處理后,便可以監(jiān)控移動的物體、進(jìn)行人臉識別等??梢妼σ曨l采集和顯示模塊的研究具有實(shí)用性。2.設(shè)計(jì)標(biāo)準(zhǔn)化。模塊化設(shè)計(jì)在本次課題設(shè)計(jì)中被普遍采用,它貫穿整個設(shè)計(jì)系統(tǒng)。使各個模塊功能相互獨(dú)立。增加了代碼的易讀性,使設(shè)計(jì)標(biāo)準(zhǔn)化。3.設(shè)計(jì)顯示的多元化。設(shè)計(jì)要求是OV7670采集數(shù)據(jù)并在VGA顯示器上將其顯示出來,由于視頻的存儲采用了異步RAM存儲器,因此,如果添加一個TFT彩屏控制器,那么這個系統(tǒng)就可以使視頻信息在TFT彩屏上顯示,使顯示多元化。1.3開發(fā)軟件簡介完成視頻采集與顯示模塊設(shè)計(jì)所需要的軟件如表1-1所示。表1-1開發(fā)軟件及功能軟件功能OfficeVisio畫框圖、流程圖等UltraEdit編輯verilog代碼Modelsim仿真代碼Quartus對代碼進(jìn)行綜合、板級調(diào)試等2選型分析2.1視頻采集器件簡介圖2-1OV7670實(shí)物圖OV7670圖像傳感器是一種將A/D轉(zhuǎn)換器,它將外界的模擬圖像信號進(jìn)過A/D轉(zhuǎn)換為數(shù)字信號。OV7670具有體積小、工作電壓低、價格便宜等特點(diǎn),還支持輸出圖像的調(diào)節(jié)功能。使用者可以通過FPGA對OV7670進(jìn)行配置(通過SCCB總線進(jìn)行配置),從而使OV7670可以以整幀方式輸出8位數(shù)據(jù)、子采樣方式輸出8位數(shù)據(jù)、取窗口方式輸出8位數(shù)據(jù)[1]。該產(chǎn)品的圖像刷新頻率最高達(dá)到30幀/秒。所有圖像的處理方式包括伽瑪曲線處理方式、白平衡處理方式、飽和度處理方式、色度處理方式等都可以通過SCCB接口編程配置[2]。OV7670圖像傳感器應(yīng)用獨(dú)有的傳感器技術(shù),通過采用先進(jìn)的固定圖案降噪技術(shù)、浮散處理技術(shù)等,降低了圖像的不穩(wěn)定,提高圖像質(zhì)量,從而能夠得到用戶想要的清晰地穩(wěn)定的彩色圖像。OV7670實(shí)物如圖2-1所示。2.2FPGA芯片及開發(fā)板簡介該FPGA的型號是CycloneII系列的EP4CE10C8,此款FPGA內(nèi)部擁有4608個LES,RAM資源共計(jì)119808bits,18*18硬件乘法器總共有13個、高性能PLL有兩個、自定義IO多達(dá)142個。開發(fā)板上提供了大容量片上RAM,如:SDRAM和FlashROM等存儲器件。為用戶提供了標(biāo)準(zhǔn)的2.54mm間距的擴(kuò)展插座,只需要外接5V電源即可。FPGA芯片介紹如表2-1、表2-2所示。表2-1EP4CE10硬件邏輯資源情況ResourcesEP4CE6EP4CE10EP4CE10LEs62721032015408PLLs224Glockclk101020I/OBank888UsersI/O179179343表2-2EP4CE10硬件管腳封裝兼容升級設(shè)計(jì)PackageU256F256F324Size(mm)14*1417*1719*19DeviceI/OLVDSI/OLVDSI/OLVDSEp4ce61796617966--Ep4ce101796617966--Ep4ce151655316553--Ep4ce221535215352--Ep4ce3019368Ep4ce40193682.3視頻顯示器簡介圖2-2VGA顯示器實(shí)物圖顯示器采用CRT顯示器,CRT顯示器是一種常見的彩色顯示器,RGB(綠Green紅Red藍(lán)Blue)三基色按照不同比例的混合可以使CRT顯示器顯示不同的顏色。通常CRT顯示器的掃描方式是逐行掃描的方式(有的是隔行進(jìn)行掃描),CRT顯示器內(nèi)的陰極射線槍發(fā)出電子束,這些電子束便會打在涂有螢光粉的熒光屏上,產(chǎn)生了RGB三基色,然后再通過RGB三基色合成一個彩色像素[3]。電子束從屏幕左上方開始掃描,從左到右,從上到下,逐行進(jìn)行掃描,當(dāng)電子束掃描完一行后,電子束便重新回到下一行的起始位置(屏幕的左邊),在這段時間內(nèi),CRT對電子束進(jìn)行消隱,當(dāng)掃描完一行時,行同步信號進(jìn)行行同步[4];當(dāng)掃描完所有行時,場同步信號進(jìn)行場同步,并使掃描重新回到屏幕的左上方,同時進(jìn)行場消隱,預(yù)備下一場的掃描[5]。VGA顯示器如圖2-2所示。3整體方案設(shè)計(jì)圖3-1整體結(jié)構(gòu)圖視頻采集與顯示模塊是基于FPGA進(jìn)行實(shí)現(xiàn)的,該系統(tǒng)通過OV7670(攝像頭)將外界視頻信號采集過來并對其進(jìn)行A/D轉(zhuǎn)換,然后通過內(nèi)部控制邏輯將其存放帶片內(nèi)的異步RAM里,VGA顯示模塊當(dāng)行、場信號都有效的情況下將數(shù)據(jù)從內(nèi)部的異步RAM里取出來,從而保證視頻的實(shí)時顯示。整體框圖如圖3-1所示。4視頻信號的采集4.1SCCB_CTRL模塊介紹4.1.1SCCB協(xié)議簡要說明SCCB總線協(xié)議規(guī)定SCCB總線是由數(shù)據(jù)線SIO_D和時鐘SIO_C構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù),在主機(jī)與從機(jī)之間最高傳送速率400kbps。在SCCB總線上可以掛多個從機(jī),各個從機(jī)都是并聯(lián)在SCCB總線上,每個從機(jī)都有唯一的地址(器件地址)[6],在主機(jī)與從機(jī)進(jìn)行信息的傳輸過程中,SCCB總線上并接的每一模塊電路既是主機(jī)又是從機(jī),這是因?yàn)橹鳈C(jī)要想與特定從機(jī)進(jìn)行數(shù)據(jù)的傳輸,主機(jī)首先需要向總線發(fā)送該從機(jī)的器件地址以及控制信息,從機(jī)需要向主機(jī)發(fā)送相應(yīng)信號,當(dāng)從機(jī)將自己的數(shù)據(jù)送給主機(jī)時,這時候從機(jī)需要主機(jī)給的響應(yīng)信號,那么這個時候主機(jī)就成了從機(jī),從機(jī)也就變成了主機(jī)。由于通過地址選擇,即使有多個從機(jī)掛在同一條總線上,卻彼此獨(dú)立,互不影響。4.1.2SCCB_CTRL模塊操作時序說明圖4-1SCCB時序圖當(dāng)SIO_C信號為高電平,SIO_D信號由高電平變?yōu)榈碗娖綍r,表示一個傳輸即將開始。SIO_C在低電平的時候,SIO_D信號發(fā)生變化,SIO_C為高電平的時候,將SIO_D數(shù)據(jù)送出去(或接收SIO_D數(shù)據(jù))。在第九個時鐘周期的時候判斷SIO_D是否為低電平,如果是低電平,說明從機(jī)有應(yīng)答,一個字節(jié)傳輸完成,否則,傳輸失敗。當(dāng)SIO_C信號為高電平時,SIO_D信號由低電平轉(zhuǎn)為高電平時,表示此次傳輸結(jié)束。SCCB時序圖如圖4-1所示。4.1.3SCCB_CTRL模塊流程說明在字節(jié)寫模式下,主機(jī)通過SCCB_CTRL模塊發(fā)送起始命令和OV7670地址信給OV7670,OV7670在接收到這個地址信息后,OV7670開始發(fā)送第一次應(yīng)答信號;主器件在接收到OV7670產(chǎn)生的應(yīng)答信號后,發(fā)送1個字節(jié)地址給OV7670,作為數(shù)據(jù)將要寫入的地址單元,OV7670接收到這個地址后,OV7670開始發(fā)送第二個應(yīng)答信號;主器件接收到應(yīng)答后,發(fā)送待寫入數(shù)據(jù)給OV7670,OV7670接收到后數(shù)據(jù)后,OV7670開始發(fā)送第三次應(yīng)答信號;然后主器件發(fā)送停止信號,OV7670接收到該停止信號后開始內(nèi)部數(shù)據(jù)配置,在內(nèi)部數(shù)據(jù)配置過程中,OV7670不再響應(yīng)主器件的任何請求。SCCB_CTRL模塊流程圖如圖4-2所示。圖4-2SCCB流程圖4.1.4SCCB_CTRL模塊結(jié)構(gòu)框圖該模塊名稱是SCCB_CTRL,主要負(fù)責(zé)對OV7670進(jìn)行配置。來保證OV7670輸出正確格式的數(shù)據(jù)。SCCB_CTRL結(jié)構(gòu)框圖如圖4-3所示。圖4-3SCCB_CTRL模塊結(jié)構(gòu)框圖4.1.5SCCB_CTRL模塊接口信號表4-1SCCB_CTRL模塊接口信號表信號名位寬(BITS)IO說明rst1I系統(tǒng)上電復(fù)位信號clk1I系統(tǒng)時鐘50MHZsio_c1OSCCB協(xié)議時鐘信號200KHZsio_d1INOUTSCCB協(xié)議數(shù)據(jù)信號4.1.6SCCB_CTRL模塊仿真波形圖4-4SCCB_CTRL模塊仿真波形波形分析:由圖4-4可知當(dāng)SIO_C為電平時改變SIO_D的值,在SIO_C為高電平時將數(shù)據(jù)發(fā)送出去,在第九個時鐘周期的時候?qū)IO_D釋放為高阻態(tài)‘Z’,檢測到SIO_D為低電平。對OV7670配置成功。4.2OV7670模塊介紹4.2.1OV7670模塊操作時序說明由圖4-5可知當(dāng)VSYNC信號處于有效階段并且HREF信號為高電平的時候,從OV7670輸出的數(shù)據(jù)是有效的,當(dāng)HREF信號為低電平的時候數(shù)據(jù)輸出無效。我們可以在HREF為高電平時來采樣數(shù)據(jù)。圖4-5OV7670操作時序圖4.2.2OV7670模塊結(jié)構(gòu)框圖圖4-6OV7670模塊結(jié)構(gòu)框圖該模塊名稱是OV7670,主要負(fù)責(zé)將外界的視頻信息(模擬信息)經(jīng)過適當(dāng)配置后轉(zhuǎn)為我們所需要的視頻信息(數(shù)字信息),并將轉(zhuǎn)換后的視頻信息存儲到異步RAM中。因此,通過SCCB配置模塊初始化完成后,OV7670將從外界采集到的模擬視頻信號轉(zhuǎn)化為數(shù)字信號送出去。一個像素點(diǎn)為轉(zhuǎn)化為數(shù)字信號需要16bits,而實(shí)際上OV7670模塊數(shù)據(jù)信號部分只有8bits,因此,OV7670要將一個像素點(diǎn)的數(shù)據(jù)送出去需要兩個時鐘周期(第一個時鐘周期發(fā)送像素點(diǎn)的低8位數(shù)據(jù),第二個周期將發(fā)送此像素點(diǎn)的高8位數(shù)據(jù))。經(jīng)過SCCB模塊配置成功后,OV7670輸出的視頻格式將是RGB565格式(RGB555、RGB888等格式都可以通過SCCB模塊來配置)、像素點(diǎn)的個數(shù)為320*240個。OV7670模塊結(jié)構(gòu)框圖如圖4-6所示。4.2.3OV7670模塊接口信號表4-2OV7670模塊接口信號表信號名位寬(BITS)IO說明rst1I復(fù)位信號pclk1IOV7670輸入時鐘50MHZvsync1IOV7670模塊場同步信號href1IOV7670模塊行同步信號data8IOV7670數(shù)據(jù)輸入ram_wren1O數(shù)據(jù)輸出使能位data_ram8O數(shù)據(jù)輸出4.2.4OV7670模塊仿真波形圖4-7OV7670模塊仿真波形波形分析:由圖4-7可知OV7670的行、場信號分別是通過行計(jì)數(shù)器和場計(jì)數(shù)器控制的。當(dāng)OV7670的場同步信號處于場有效狀態(tài)并且OV7670的行同步信號為高電平的時候,OV7670開始將轉(zhuǎn)換好的數(shù)字圖像信息送出來。與此同時,內(nèi)部的邏輯會將RAM_WREN信號拉為高電平,從而保證了OV7670模塊實(shí)時的將數(shù)字圖像信息寫到異步RAM中。4.2.5OV7670模塊輸出數(shù)據(jù)結(jié)構(gòu)圖4-8OV7670輸出數(shù)據(jù)結(jié)構(gòu)說明:由圖4-8可知OV7670的數(shù)據(jù)輸出位寬是8位的,一個像素由16bits構(gòu)成(RGB565格式),因此,得到一個像素的數(shù)據(jù)需要OV7670兩個時鐘周期,第一個時鐘周期送出數(shù)據(jù)的低8位,低二個時鐘周期送出數(shù)據(jù)的高8位,兩個時鐘數(shù)據(jù)的結(jié)合就構(gòu)成一個像素點(diǎn)的數(shù)據(jù)。5視頻信號存儲5.1ASYN_RAM模塊結(jié)構(gòu)框圖圖5-1ASYN_RAM模塊結(jié)構(gòu)框圖該模塊名稱是ASYN_RAM,負(fù)責(zé)視頻數(shù)據(jù)的存儲和數(shù)據(jù)的合并。本次設(shè)計(jì)中,OV7670圖像的像素位寬為16bits。然而OV7670模塊的數(shù)據(jù)位寬是8bits,F(xiàn)PGA采集一個像素點(diǎn)的視頻數(shù)據(jù)將被分為低8位和高8位。實(shí)時顯示CRT顯示器的VGA模塊數(shù)據(jù)的輸入位寬是16bits,所以CRT顯示器的顯示每個時鐘周期需要16bits的數(shù)據(jù)位寬(即一個像素點(diǎn)的數(shù)據(jù))。這時我們需要將OV7670模塊低8位數(shù)據(jù)和高8位數(shù)據(jù)合并(即一個像素點(diǎn)的數(shù)據(jù))。當(dāng)傳輸開始時,ASYN_RAM首先對OV7670出來的低8為數(shù)據(jù)進(jìn)行緩存,然后再對OV7670出來的高8位數(shù)據(jù)進(jìn)行緩存,結(jié)合低8位和高8位數(shù)據(jù),根據(jù)CRT顯示器的VGA模塊數(shù)據(jù)輸入格式將數(shù)據(jù)送出去。ASYN_RAM模塊結(jié)構(gòu)框圖如圖5-1所示。5.2ASYN_RAM模塊操作流程寫數(shù)據(jù)時,將寫使能拉為高電平(讀使能為低電平),與此同時CPU送出要寫的地址和數(shù)據(jù)信息;讀數(shù)據(jù)時,將讀使能拉為高電平(寫使能為低電平),與此同時CPU送出要寫的地址信息。5.3ASYN_RAM模塊接口信號表5-1ASYN_RAM模塊接口信號表信號名位寬(BITS)IO說明wrclock1I寫時鐘wren1I輸入使能wraddress13I寫地址data8I數(shù)據(jù)位輸入rdclock1I讀時鐘rden1I讀使能rdaddress12I讀地址q16O數(shù)據(jù)位輸出5.4ASYN_RAM模塊仿真波形圖5-2ASYN_RAM模塊仿真波形波形分析:由圖5-2可知當(dāng)WREN為高電平的時候,開始向ASYN_RAM寫數(shù)據(jù),當(dāng)RDEN為高的時候開始從ASYN_RAM將視頻數(shù)據(jù)讀出來。當(dāng)兩者同時為高時,讀寫數(shù)據(jù)就會同時進(jìn)行。6視頻顯示說明6.1顏色空間的認(rèn)識人們?yōu)榱嗣枋龃笞匀坏念伾?,通常將顏色用三個相對獨(dú)立的屬性來描述,這三個獨(dú)立的屬性綜合作用后,構(gòu)成了一個如同x、y、z軸的空間坐標(biāo),而空間坐標(biāo)的x、y、z就好比顏色空間的R、G、B信號分量(當(dāng)然也可以其他表示),每一點(diǎn)對應(yīng)不同的顏色,而這就是顏色空間[7]。顏色空間也稱彩色模型(又稱彩色空間或彩色系統(tǒng))。顏色空間按照基本結(jié)構(gòu)可以分兩大類:基色顏色空間和色、亮分離顏色空間。前者的典型是RGB顏色空間;后者包括YUV、以及一批‘色相類顏色空間’。6.2RGB顏色空間圖6-1RGB顏色空間圖RGB顏色空間是通過對紅(R)、綠(G)、藍(lán)(B)三個顏色通道的變化以及它們相互疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍(lán)三個通道的顏色[8],這個標(biāo)準(zhǔn)幾乎包括了人類視力所能感知的所有顏色,是目前運(yùn)用最廣的顏色系統(tǒng)之一。RGB格式分為RGB555、RGB565、RGB888等。6.3YUV顏色空間人眼對亮度比較敏感,而對色差不是特別的敏感,因此人們根據(jù)這一特性,將顏色空間的亮度和色差分離出來,即這就是我們所說的YUV顏色空間[9]。YUV是一種基本色彩空間,被歐洲的電視系統(tǒng)所采用。它被PAL,NTSC和SECAM用作復(fù)合色彩視頻標(biāo)準(zhǔn)。其中“Y”指顏色的透明度即亮度,其實(shí)“Y”就是圖像的灰度值;而“U”和“V”則是指色調(diào),即描述圖像色彩及飽和度的屬性。圖6-2Y、UV采樣方式說明:由圖6-2可知YUV444格式,每一個Y分量對應(yīng)一組UV分量;YUV422格式,每兩個Y分量對應(yīng)一組UV分量;YUV420格式,每四個Y分量對應(yīng)一組UV分量[10]。6.4VGA時序圖圖6-3VGA行時序圖說明:由圖6-3可知VGA時序分為行同步信號和場同步信號,行同步信號分為四個階段,它們分別是(a)行同步階段、(b)行后沿階段、(c)行有效階段、(d)行前沿階段。其中數(shù)據(jù)部分黑色表示數(shù)據(jù)處于無效狀態(tài),數(shù)據(jù)部分白色表示數(shù)據(jù)處于有效狀態(tài)。說明:由圖6-4可知VGA時序分為行同步信號和場同步信號,場同步信號分為四個階段,它們分別是(a')場同步階段、(b')場后沿階段、(c')場有效階段、(d')場前沿階段。其中數(shù)據(jù)部分黑色表示數(shù)據(jù)處于無效狀態(tài),數(shù)據(jù)部分白色表示數(shù)據(jù)處于有效狀態(tài)。圖6-4VGA場時序圖6.5VGA接口介紹圖6-5VGA接口VGA接口是一種D型接口,共有15個針孔,每排五個。是顯卡上應(yīng)用最為廣泛的接口類型,絕大多數(shù)顯卡都帶這種接口。其中,5個信號比較重要,它們分別是紅色分量信號、綠色分量信號、藍(lán)色分量信號、水平同步信號和垂直同步信號。VGA接口如圖6-5所示。6.6VGA模塊接口框圖該模塊名稱是VGA,主要負(fù)責(zé)將OV7670采集并存放在異步RAM里的視頻數(shù)據(jù)取出來并通過CRT顯示器顯示出來。因此,VGA模塊從異步RAM中讀出合并好的數(shù)據(jù)以后,按照VGA接口的時序送到CRT顯示器。VGA模塊接口框圖如圖6-6所示。圖6-6VGA模塊接口框圖6.7VGA模塊接口信號表6-1VGA模塊接口信號表信號名位寬(BITS)IO說明clk1IVGA時鐘信號rst1IVGA復(fù)位信號hsync1Ohorizontalsynchronizationpulsevsync1Overticalsynchronizationpulser5Oredcolordatag6Ogreencolordatab5Obluecolordataram_rden1OVGA數(shù)據(jù)讀RAM使能信號rd_data16IVGA模塊從RAM讀取的RGB數(shù)據(jù)6.8VGA模塊仿真波形圖6-7VGA模塊仿真波形波形分析:由圖6-7可知VGA的行場信號分別由行場計(jì)數(shù)器控制,當(dāng)行信號屬于行有效階段并且場信號屬于場有效階段,這個時候VGA模塊開始將使能信號拉高,r、g、b信號開始輸出有效數(shù)據(jù)。7開發(fā)板調(diào)試圖7-1調(diào)試現(xiàn)象說明:如圖7-1所示。打開開發(fā)板,開發(fā)板上面的燈就會亮起,我們用電腦將RTL代碼下載到開發(fā)板后,在CRT顯示器上就會顯示攝像頭采集的視頻信息。圖7-2調(diào)試現(xiàn)象說明:如圖7-2所示。將手機(jī)放在攝像頭前,攝像頭采集到手機(jī)上的鐘點(diǎn)信息,CRT顯示器顯示“24”字樣。8總結(jié)通過本次設(shè)計(jì)我們可以得到以下收獲,由于受開發(fā)板上FPGA芯片EP4CE10C8的約束。按照正常的時序來說,在VGA顯示器上最大只能顯示160*120的視頻圖像信息。然而,實(shí)際上我們的OV7670和VGA顯示器的分辨率都是320*240。如果只在VGA顯示器上顯示160*120的圖像信息,那么,這樣就會造成了硬件上的浪費(fèi)同時也不能滿足于我們當(dāng)初的設(shè)計(jì)要求,為了讓視頻圖像信息能夠?qū)崿F(xiàn)全屏顯示,那么在實(shí)際的設(shè)計(jì)中我們對其進(jìn)行了相關(guān)的優(yōu)化,即將OV7670采集而來的一行數(shù)據(jù)及時的送給VGA顯示器,那么,當(dāng)OV7670采集而來的二行數(shù)據(jù)也及時的送給VGA顯示器。以此類推。雖然開發(fā)板上的FPGA芯片沒有足夠多的RAM資源,結(jié)果而實(shí)現(xiàn)了圖像信息的全屏顯示。本次畢業(yè)設(shè)計(jì)要求視頻的采集、存儲并將視頻信息顯示出來的設(shè)計(jì),這要求我們掌握相關(guān)的理論知識以及熟練使用相關(guān)的開發(fā)軟件。剛開始接觸到該課題時并不熟悉各個模塊的設(shè)計(jì),通過查閱相關(guān)版圖設(shè)計(jì)的書籍以及向老師請教才順利的完成了本次的設(shè)計(jì)。在此次的設(shè)計(jì)過程中,既鞏固了所學(xué)的理論知識,又能夠熟練的掌握了OfficeVisio、UltraEdit編輯器、QUARTUSII、Modelsim的使用方法,系統(tǒng)地掌握了FPGA模塊化設(shè)計(jì)的方法。參考文獻(xiàn)[1]李飛鵬.基于FPGA的H.264視頻壓縮編碼系統(tǒng)研究與實(shí)現(xiàn)[D].南京航空航天大學(xué),2011:12-13.[2]趙冬紅,劉文穎,李靜,等.Delphi在電力系統(tǒng)中的應(yīng)用[C].中國電機(jī)工程學(xué)會青年學(xué)術(shù)會議.2008.[3]董兵,朱齊丹,文睿.基于FPGA的VGA圖像控制器的設(shè)計(jì)與實(shí)現(xiàn)[J].應(yīng)用科技,2006,33(10):42-45.[4]姜軍,卓嘎,周子敬.VGA圖像顯示控制的片上系統(tǒng)實(shí)現(xiàn)[J].西藏科技,2008(10):71-72.[5]徐洋.基于VerilogHDL的FPGA設(shè)計(jì)與工程應(yīng)用[M].北京:人民郵電出版社,2009:44-49.[6]何浩.面向紅外攝像電子白板的SOC原型設(shè)計(jì)[D].電子科技大學(xué),2012.[7]張振花.基于內(nèi)容圖像檢索的若干技術(shù)研究[D].吉林大學(xué),2009.[8]楊堯.計(jì)算機(jī)圖像的色彩模式[J].黑龍江科技信息,2010(7):30-30.[9]胡維友.顏色空間RGB與CMYK之間的變換[J].印刷世界,2007(3):9-12.[10]宋雪臣,單振清.數(shù)字電子技術(shù)[M].北京:北京大學(xué)出版社,2011:18-20.致謝本人的學(xué)位論文是在導(dǎo)師洪作奎老師的親切關(guān)懷和細(xì)心指導(dǎo)下完成的。他嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng),深深的感染和激勵著我。從課題的選擇到項(xiàng)目的最終完成,洪老師都始終給予我細(xì)心的指導(dǎo)和不懈的支持。在此謹(jǐn)像洪老師以誠摯的謝意和崇高的敬意。在此,我還要感謝在一起愉快度過大學(xué)時光的每個可愛的同學(xué)們和尊敬的老師們,正是由于你們的幫助和支持,我才能克服一個個的困難和疑惑,直至本文的順利完成。在論文即將完成之際,我的心情無法平靜,從開始進(jìn)入課題到論文的順利完成,有多少可敬的師長、同學(xué)、朋友給了我無言的幫助,在這里接受我誠摯的謝意!謝謝你們!附錄SCCB_CTRL模塊代碼代碼modulesccb_ctrl(clk,reset_l,i2c_exc,i2c_addr,i2c_data_w,i2c_data_r,i2c_done,sda_dir,sda_wr, scl_wr);inputclk;inputreset_l;inputi2c_exc;input [7:0]i2c_addr;input [7:0]i2c_data_w;output[7:0]i2c_data_r;outputi2c_done;outputsda_dir;outputsda_wr;outputscl_wr;reg[7:0]wr_addr_reg;reg[7:0]wr_data_reg;regsda_dir;regsda_wr;regscl_wr;regstarti2c_done;regi2cwrite_0x42_done;regi2cwrite_addr_done;regi2cwrite_data_done;regstopi2c_done;reg[3:0]starti2c_cnt;reg[5:0]i2cwrite_0x42_cnt;reg[5:0]i2cwrite_addr_cnt;//reg[5:0]i2cwrite_addr_cnt;reg[5:0]i2cwrite_data_cnt;reg[3:0]stopi2c_cnt;regi2cwrite_start;regi2c_done;reg[7:0]i2cwrite_data;reg [5:0]CUR_STATE;reg [5:0]NEXT_STATE;wirei2cwrite_done;wirei2cwrite_ind;wirei2c_sda_dir;wirei2c_sda_wr;wirei2c_scl_wr;parameter STAT_IDLE = 6'b000001,STAT_STARTI2C = 6'b000010, STAT_I2CWRITE_0X42= 6'b000100, STAT_I2CWRITE_ADDR= 6'b001000, STAT_I2CWRITE_DATA= 6'b010000, STAT_STOPI2C = 6'b100000;always@(negedgereset_lorposedgeclk)beginif(reset_l==1'b0)begin CUR_STATE<=STAT_IDLE; end elsebegin CUR_STATE<=NEXT_STATE; endendalways@(*)begin case(CUR_STATE) STAT_IDLE:begin if(i2c_exc==1'b1)begin NEXT_STATE<=STAT_STARTI2C; end elsebegin NEXT_STATE<=STAT_IDLE; end end STAT_STARTI2C:begin if(starti2c_done==1'b1)begin NEXT_STATE<=STAT_I2CWRITE_0X42; end elsebegin NEXT_STATE<=STAT_STARTI2C; end end STAT_I2CWRITE_0X42:begin if(i2cwrite_0x42_done==1'b1)begin NEXT_STATE<=STAT_I2CWRITE_ADDR; end elsebegin NEXT_STATE<=STAT_I2CWRITE_0X42; end end STAT_I2CWRITE_ADDR:begin if(i2cwrite_addr_done==1'b1)begin NEXT_STATE<=STAT_I2CWRITE_DATA; end elsebegin NEXT_STATE<=STAT_I2CWRITE_ADDR; end end STAT_I2CWRITE_DATA:begin if(i2cwrite_data_done==1'b1)begin NEXT_STATE<=STAT_STOPI2C; end elsebegin NEXT_STATE<=STAT_I2CWRITE_DATA; end end STAT_STOPI2C:begin if(stopi2c_done==1'b1)begin NEXT_STATE<=STAT_IDLE; end elsebegin NEXT_STATE<=STAT_STOPI2C; end end default:begin NEXT_STATE<=STAT_IDLE; end endcaseend always@(negedgereset_lorposedgeclk)if(reset_l==1'b0)begin wr_addr_reg<=8'b0; wr_data_reg<=8'b0; end elsebegin if(i2c_exc==1'b1)begin wr_addr_reg<=i2c_addr; wr_data_reg<=i2c_data_w; end end always@(negedgereset_lorposedgeclk)beginif(reset_l==1'b0)begin sda_dir <=1'b0; sda_wr <=1'b0; scl_wr <=1'b0;starti2c_done <=1'b0; i2cwrite_0x42_done<=1'b0; i2cwrite_addr_done <=1'b0; i2cwrite_data_done <=1'b0; stopi2c_done <=1'b0; starti2c_cnt <=4'b0;i2cwrite_0x42_cnt <=6'b0;i2cwrite_addr_cnt <=6'b0;i2cwrite_data_cnt <=6'b0;stopi2c_cnt <=4'b0;i2cwrite_start <=1'b0;i2cwrite_data <=8'b0;i2c_done <=1'b0; end elsebegin i2c_done<=stopi2c_done; case(CUR_STATE) STAT_STARTI2C:begin if(starti2c_cnt<4'hf)begin starti2c_cnt<=starti2c_cnt+4'b1; end case(starti2c_cnt) 0:sda_wr <=1'b1; 2:scl_wr <=1'b1; 4:sda_wr <=1'b0; 6:scl_wr <=1'b0; 7:starti2c_done <=1'b1; default:beginstarti2c_done<=1'b0; end endcase end STAT_I2CWRITE_0X42:begin if(i2cwrite_0x42_cnt<6'b111111)begin i2cwrite_0x42_cnt<=i2cwrite_0x42_cnt+6'b1; end i2cwrite_0x42_done<=1'b0; case(i2cwrite_0x42_cnt) 0:sda_dir <=1'b1; 2:sda_wr <=1'b0; 4:scl_wr <=1'b1; 6:scl_wr <=1'b0; 8:sda_wr <=1'b1; 10:scl_wr <=1'b1; 12:scl_wr <=1'b0; 14:sda_wr <=1'b0; 16:scl_wr <=1'b1; 18:scl_wr <=1'b0; 20:sda_wr <=1'b0; 22:scl_wr <=1'b1; 24:scl_wr <=1'b0; 26:sda_wr <=1'b0; 28:scl_wr <=1'b1; 30:scl_wr <=1'b0; 32:sda_wr <=1'b0; 34:scl_wr <=1'b1; 36:scl_wr <=1'b0; 38:sda_wr <=1'b1; 40:scl_wr <=1'b1; 42:scl_wr <=1'b0; 44:sda_wr <=1'b0; 46:scl_wr <=1'b1; 48:scl_wr <=1'b0; 50:sda_dir <=1'b0; 52:scl_wr <=1'b1; 54:scl_wr <=1'b0; 56:sda_dir <=1'b1; 57:begini2cwrite_0x42_done<=1'b1; end default:; endcase end STAT_I2CWRITE_ADDR:begin if(i2cwrite_addr_cnt<6'b111111)begin i2cwrite_addr_cnt<=i2cwrite_addr_cnt+6'b1; end i2cwrite_addr_done<=1'b0; case(i2cwrite_addr_cnt) 0:sda_dir <=1'b1; 2:sda_wr <=wr_addr_reg[7]; 4:scl_wr <=1'b1; 6:scl_wr <=1'b0; 8:sda_wr <=wr_addr_reg[6]; 10:scl_wr <=1'b1; 12:scl_wr <=1'b0; 14:sda_wr <=wr_addr_reg[5]; 16:scl_wr <=1'b1; 18:scl_wr <=1'b0; 20:sda_wr <=wr_addr_reg[4]; 22:scl_wr <=1'b1; 24:scl_wr <=1'b0; 26:sda_wr <=wr_addr_reg[3]; 28:scl_wr <=1'b1; 30:scl_wr <=1'b0; 32:sda_wr <=wr_addr_reg[2]; 34:scl_wr <=1'b1; 36:scl_wr <=1'b0; 38:sda_wr <=wr_addr_reg[1]; 40:scl_wr <=1'b1; 42:scl_wr <=1'b0; 44:sda_wr <=wr_addr_reg[0]; 46:scl_wr <=1'b1; 48:scl_wr <=1'b0; 50:sda_dir <=1'b0; 52:scl_wr <=1'b1; 54:scl_wr <=1'b0; 56:sda_dir <=1'b1; 57:begini2cwrite_addr_done<=1'b1; end default:; endcase end STAT_I2CWRITE_DATA:begin if(i2cwrite_data_cnt<6'b111111)begin i2cwrite_data_cnt<=i2cwrite_data_cnt+6'b1; end i2cwrite_data_done<=1'b0; case(i2cwrite_data_cnt) 0:sda_dir <=1'b1; 2:sda_wr <=wr_data_reg[7]; 4:scl_wr <=1'b1; 6:scl_wr <=1'b0; 8:sda_wr <=wr_data_reg[6]; 10:scl_wr <=1'b1; 12:scl_wr <=1'b0; 14:sda_wr <=wr_data_reg[5]; 16:scl_wr <=1'b1; 18:scl_wr <=1'b0; 20:sda_wr <=wr_data_reg[4]; 22:scl_wr <=1'b1; 24:scl_wr <=1'b0; 26:sda_wr <=wr_data_reg[3]; 28:scl_wr <=1'b1; 30:scl_wr <=1'b0; 32:sda_wr <=wr_data_reg[2]; 34:scl_wr <=1'b1; 36:scl_wr <=1'b0; 38:sda_wr <=wr_data_reg[1]; 40:scl_wr <=1'b1; 42:scl_wr <=1'b0; 44:sda_wr <=wr_data_reg[0]; 46:scl_wr <=1'b1; 48:scl_wr <=1'b0; 50:sda_dir <=1'b0; 52:scl_wr <=1'b1; 54:scl_wr <=1'b0; 56:sda_dir <=1'b1; 57:begini2cwrite_data_done<=1'b1; end default:; endcase end STAT_STOPI2C:begin if(stopi2c_cnt<4'hf)begin stopi2c_cnt<=stopi2c_cnt+4'b1; end stopi2c_done<=1'b0; case(stopi2c_cnt) 0:sda_wr <=1'b0; 2:scl_wr <=1'b1; 4:sda_wr <=1'b1; 5:beginstopi2c_done<=1'b1; end default:; endcase end default:begin starti2c_done <=1'b0; i2cwrite_0x42_done <=1'b0; i2cwrite_addr_done <=1'b0; i2cwrite_data_done <=1'b0; stopi2c_done<=1'b0; i2cwrite_start <=1'b0; starti2c_cnt <=4'b0; i2cwrite_0x42_cnt <=6'b0; i2cwrite_addr_cnt <=6'b0; i2cwrite_data_cnt <=6'b0; stopi2c_cnt <=4'b0; i2c_done <=1'b0; end endcase endendendmoduleAUTO_CFG_OV7670模塊代碼代碼moduleauto_cfg_ov7670(clk,reset_l, i2c_exc,i2c_addr,i2c_data_w,i2c_data_r,i2c_done,init_done);inputclk;inputreset_l;outputi2c_exc;output[7:0]i2c_addr;output[7:0]i2c_data_w;input[7:0]i2c_data_r;inputi2c_done;output init_done;reg[7:0] start_init_cnt;reg[7:0] init_reg_cnt;regi2c_exc;reg[7:0]i2c_addr;reg[7:0] i2c_data_w;reginit_done;always@(negedgereset_lorposedgeclk)beginif(reset_l==1'b0)begin start_init_cnt<=8'b0;endelsebegin if(start_init_cnt<8'hff)begin start_init_cnt<=start_init_cnt+1; end endendalways@(negedgereset_lorposedgeclk)if(reset_l==1'b0)begin init_reg_cnt<=8'b0; i2c_exc <=1'b0; i2c_addr <=8'b0; i2c_data_w <=8'b0; init_done<=1'b0;endelsebegin i2c_exc<=1'b0; if(init_reg_cnt<8'd27)begin i2c_exc<=i2c_done; end if(start_init_cnt==8'hfd)begin i2c_exc<=1'b1; end if(i2c_exc==1'b1)begin init_reg_cnt<=init_reg_cnt+1; end case(init_reg_cnt) 0:begin i2c_addr <=8'h12; i2c_data_w <=8'h80; end 1:begin i2c_addr<=8'h12; i2c_data_w<=8'h04; end 2:begin i2c_addr<=8'h40; i2c_data_w<=8'hd0; end 3:begin i2c_addr<=8'h3a; i2c_data_w<=8'h04; end 4:begin i2c_addr<=8'h3d; i2c_data_w<=8'hc8; end 5:begin i2c_addr<=8'h1e; i2c_data_w<=8'h31; end 6:begin i2c_addr<=8'h6b; i2c_data_w<=8'h00; end 7:begin i2c_addr<=8'h32; i2c_data_w<=8'hb6; end 8:begin i2c_addr<=8'h17; i2c_data_w<=8'h13; end 9:begin i2c_addr<=8'h18; i2c_data_w<=8'h01; end 10:begin i2c_addr<=8'h3d; i2c_data_w<=8'hc8; end default:; endcaseendendmoduleOV7670_SCCB模塊代碼代碼moduleov7670_sccb(rst,clk, sio_c,sio_d,reset,pwdn,init_done);inputrst;inputclk;output sio_c;output sio_d;output reset;output pwdn;output init_done;wire clk_100khz;wire i2c_exc ;wire [7:0] i2c_addr;wire [7:0] i2c_data_w;wire [7:0] i2c_data_r;wire i2c_done;wire sda_wr;assignreset =1'b1 ;assignpwdn =1'b0 ;clk_gen clk_gen_u1(.reset_l(rst),.clk(clk),.clk_100khz(clk_100khz));sccb_ctrlu2(. clk (clk_100khz ),. reset_l (rst), . i2c_exc (i2c_exc ),. i2c_addr (i2c_addr),. i2c_data_w (i2c_data_w),. i2c_data_r (i2c_data_r),. i2c_done (i2c_done),. sda_dir (sda_dir),. sda_wr (sda_wr),. scl_wr (sio_c));assignsio_d=(sda_dir==1'b1)?sda_wr:1'bz;auto_cfg_ov7670auto_cfg_ov7670_u1(. clk (clk_100khz ),. reset_l (rst) ,. i2c_exc (i2c_exc ),. i2c_addr (i2c_addr),. i2c_data_w (i2c_data_w ),. i2c_data_r (i2c_data_r ),. i2c_done (i2c_done),. init_done (init_done));endmoduleCLK_GEN模塊代碼代碼moduleclk_gen(inputreset_l,inputclk,outputregclk_100khz);reg[11:0]clk_100khz_cnt;parameterclk_100khz_cnt_MAX=12'd249;always@(negedgereset_lorposedgeclk)beginif(!reset_l)begin clk_100khz_cnt<=12'b0;clk_100khz<=1'b0;endelsebeginif(clk_100khz_cnt==clk_100khz_cnt_MAX)begin clk_100khz_cnt<=12'b0; clk_100khz <=~clk_100khz;endelsebegin clk_100khz_cnt<=clk_100khz_cnt+12'b1;endendendendmoduleOV7670模塊代碼代碼moduleov7670( rst, pclk , initial_done, vsync, href , data , ram_wren, data_ram );input rst;input pclk ;input initial_done;input vsync;input href ;input[7:0] data;output reg ram_wren;output reg[7:0] data_ram;reg[7:0] href_count;wire[7:0] href_count_1; reg [17:0] vsync_count ;wire[17:0] vsync_count_1;assign vsync_count_1 = vsync_count ;assign href_count_1 = href_count;always@(posedgepclkornegedgerst)beginif(rst==1'b0)begin href_count <= 8'd0 ; end elsebegin if(ini

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論