版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 基于fpga的圖像采集系統(tǒng)設(shè)計前言 隨著科技社會的發(fā)展,圖像采集系統(tǒng)在日常生活、工業(yè)生產(chǎn)、國家安全等眾多領(lǐng)域得到廣泛的應(yīng)用,具有廣闊的應(yīng)用前景和研究價值。采用fpga進(jìn)行設(shè)計的圖像采集系統(tǒng)有良好的擴展性能和相對穩(wěn)定的硬件結(jié)構(gòu)。主要工作如下: 1)分析圖像采集和圖像處理的原理和特點,設(shè)計硬件電路的原理圖,完成系統(tǒng)pcb板圖的設(shè)計。 2)針對fpga進(jìn)行內(nèi)部功能模塊的劃分,使用verilog hdl硬件描述語言進(jìn)行設(shè)計。 3)利用sopc builder完成nios處理器軟核及其外設(shè)的創(chuàng)建和配置。 4)根據(jù)fpga內(nèi)部硬件電路的特點,選擇適合fpga的算法,并對算法進(jìn)行優(yōu)化。 5)在nios i
2、i ide環(huán)境下用verilog hdl語言編寫圖像傳感器控制、圖像采集、sram讀寫控制、圖像顯示等程序,實現(xiàn)完整的圖像采集系統(tǒng)功能。 1課題分析1.1 選題背景(含國內(nèi)外相關(guān)研究綜述及評價)與意義eda技術(shù)的發(fā)展和應(yīng)用普及性越來越高,已經(jīng)涉及到現(xiàn)代電子產(chǎn)品設(shè)計的各個系統(tǒng)、各個領(lǐng)域中。之所以有這樣的廣泛應(yīng)用,主要得益于可編程邏輯器件的長足發(fā)展和日益成熟,可編程邏輯器件(programmable logic device, pld)是一種半定制集成電路,在其內(nèi)部集成了大量的門和觸發(fā)器等基本邏輯單元電路,通過用戶編程來改變pld內(nèi)部電路的邏輯關(guān)系或連線,從而得到所需要的電路設(shè)計功能。這種新型邏輯
3、器件,不僅速度快、集成度高,能夠完成用戶定義的邏輯功能,還可以加密和重新定義編程,其允許編程次數(shù)可以達(dá)到上萬次??删幊踢壿嬈骷某霈F(xiàn),大大改變了傳統(tǒng)數(shù)字系統(tǒng)設(shè)計方法,簡化了硬件系統(tǒng)、降低成本、提高系統(tǒng)的可靠性、靈活性。因此,自20世紀(jì)70年代問世以后,pld受到廣大工程師的青睞,被廣泛應(yīng)用于工業(yè)控制、通信設(shè)備、儀器儀表和醫(yī)療電子儀器等眾多領(lǐng)域,為eda技術(shù)開創(chuàng)了廣闊的發(fā)展空間。vga作為一種標(biāo)準(zhǔn)的顯示接口,在視頻和計算機領(lǐng)域得到了廣泛的應(yīng)用。vga圖像信號發(fā)生器是電視臺、電視機生產(chǎn)企業(yè)、電視維修人員常用的儀器,其主要功能就是產(chǎn)生標(biāo)準(zhǔn)的圖像測試信號。對vga而言,其主要應(yīng)用在工業(yè)控制領(lǐng)域,通過v
4、ga接口實現(xiàn)將信息、圖像、文字等內(nèi)容顯示各種vga顯示器上,為客戶提供一種完美的顯示界面,也是目前重要的顯示終端。本次實驗設(shè)計主要是基于fpga芯片為處理器,利用硬件描述語言完成vga的時序控制,并利用相應(yīng)的實驗平臺,進(jìn)行設(shè)計驗證,基本實現(xiàn)了vga的彩條信號和圖像顯示效果,達(dá)到了整個設(shè)計目標(biāo)和要求。1.2 選題研究的方法與主要內(nèi)容1.2.1研究方法 通過查閱資料,學(xué)習(xí)vga工作原理和控制方法,掌握eda技術(shù)應(yīng)用基本技巧,運用fpga為設(shè)計實現(xiàn)的處理器,完成vhdl對各個模塊的功能描述,在實驗平臺上完成整個系統(tǒng)設(shè)計實現(xiàn)。1.2.2主要內(nèi)容u 根據(jù)設(shè)計任務(wù),制定實現(xiàn)方案u 應(yīng)用vhdl完成對系統(tǒng)中
5、各個功能模塊的描述u 完成頂層設(shè)計文件,并調(diào)試仿真系統(tǒng)u 下載程序代碼到fpga,在實驗平臺上驗證vga是否正常顯示撰寫設(shè)計報告書1.3 研究條件和可能存在的問題1.3.1研究條件會使用eda開發(fā)工具軟件quartus ii ,能熟練使用vhdl語言編寫時序電路,需要有相應(yīng)的實驗開發(fā)平臺。1.3.2可能存在的問題:u vga時序控制不正確,無法正常顯示相應(yīng)的圖形u vga硬件接口電路pcb設(shè)計不能實現(xiàn)其功能u fpga內(nèi)部rom存儲空間太小,不能存儲大容量的圖片數(shù)據(jù)1.4 擬解決的主要問題和預(yù)期的結(jié)果1.4.1擬解決的主要問題u vga時序控制問題 u protel繪制vga電阻分壓網(wǎng)絡(luò)電路設(shè)
6、計問題u 調(diào)試vhdl程序代碼常見錯誤1.4.2預(yù)期的結(jié)果通過完成整個系統(tǒng)的電路設(shè)計,實現(xiàn)各個功能模塊和頂層設(shè)計電路,能在顯示器上正確看到橫豎彩條、棋盤格圖形和圖片顯示等效果。2 圖像采集系統(tǒng)介紹2.1 圖像采集系統(tǒng)功能分析這部分闡述了圖像采集系統(tǒng)的各種動作功能和控制要求,給出了完整的圖像采集系統(tǒng)操作規(guī)程,并介紹了圖像采集運行系統(tǒng)中所包括的人工操作步驟。2.1.1 圖像采集系統(tǒng)的基本功能在進(jìn)行上、下位機程序編寫之前,首先要做的工作是確定圖像采集系統(tǒng)本身所具備的功能及在進(jìn)行某種操作后所具有的狀態(tài)。在實際生活中,我們見到的圖像采集系統(tǒng)可以采集一些簡單的圖像,如書本、人物和植物等。圖像采例集系統(tǒng)的基
7、本功能就是對圖像進(jìn)行采集,并進(jìn)行簡單的處理。舉一個簡單的例子來說明:采集一本書的圖像,系統(tǒng)會根據(jù)書的顏色大小自動調(diào)整,使采集的圖像清晰,盡量減小失真。當(dāng)圖像達(dá)到最佳狀態(tài)時,系統(tǒng)等待外部命令,如繼續(xù)采集,則同上,如果此時不再采集而按下退出按鈕,系統(tǒng)則要進(jìn)行退出操作,并提示你是否保存所采集的圖像,完成此次操作。由此看來,系統(tǒng)一次采集要涉及攝像頭、vga以及fpga等,這是它的內(nèi)部功能?;趂pga實現(xiàn)的圖像采集系統(tǒng)的整體結(jié)構(gòu)框圖如圖1.1.1-1所示: 系統(tǒng)主要分為:圖像采集模塊、pll鎖相環(huán)時鐘管理模塊、i2c總線模塊、fifo圖像數(shù)據(jù)處理模塊、nios ii 顯示控制模塊。系統(tǒng)中pll負(fù)責(zé)為n
8、ios ii嵌入式內(nèi)核、外部sdram和ov7670攝像頭提供時鐘,系統(tǒng)通電后,fpga首先從epcs中讀取配置數(shù)據(jù),完成自身程序加載,隨后對系統(tǒng)時鐘分頻為攝像頭提供系統(tǒng)時鐘,然后通過i2c總線完成對ov7670攝像頭的配置。配置完成后,ov7670將采集到的圖像數(shù)據(jù)輸出格式轉(zhuǎn)換為標(biāo)準(zhǔn)的圖像數(shù)據(jù)及圖像時鐘送入fpga進(jìn)行處理,并將處理后的圖像數(shù)據(jù)通過fifo模塊暫時存儲在sdram中進(jìn)行緩沖,同時nios ii模塊讀取存放在sdram中的圖像數(shù)據(jù),按照tft液晶顯示的時序、數(shù)據(jù)要求將圖像數(shù)據(jù)送到tft彩色液晶顯示屏上顯示。彩色lcd顯示sdram控制模塊液晶顯示控制模塊fifo數(shù)據(jù)緩存模塊pl
9、l視頻采集模塊i2c模塊 ov7670攝像頭 epcs16配置芯片sdram圖1.1.1-1 圖像采集系統(tǒng)結(jié)構(gòu)3 系統(tǒng)硬件設(shè)計3.1 fpga選型 fpga是該系統(tǒng)的核心,由于系統(tǒng)目前只是完成簡單的圖像處理,故fpga選用altera公司的低成本fpga cyclone ii系列器件簡介如表所示。 cyclone ii器件采用90nm工藝制造,它延續(xù)cyclone的低成本定位,在邏輯容量、pll、乘法器和i/o數(shù)量上都比cyclone有了較大提高,應(yīng)用cyclone ii進(jìn)行圖像處理開發(fā)有如下優(yōu)點:(1)低成本高性能,適應(yīng)圖像處理要求較高的需要。(2)豐富的內(nèi)嵌存儲器資源,適應(yīng)大量圖像數(shù)據(jù)存取
10、的需要。(3)豐富的硬件乘法器,適應(yīng)圖像處理算法的需要。系統(tǒng)的fpga選用開發(fā)板自帶的ep2cs5q208c8芯片。cyclone ii系列fpga參數(shù)對比器件ep2c5ep2c8ep2c15ep2c20ep2c35ep2c50ep2c70邏輯單元460882561444818752332165052868416m4k ram塊26365252105129250總比特數(shù)1198081658882396162396164838405944321152000嵌入式乘法器131826263586150pll個數(shù)2244444最多用戶i/o管腳1581823153154754506223.2 圖像采集
11、模塊選擇 圖像采集采用ov7670圖像傳感器,ov7670圖像傳感器體積小、工作電壓低。ov7670攝影頭的vga圖像最高達(dá)到30幀/秒。通過sccb總線控制內(nèi)部寄存器,可以是ov7670輸出整幀、子采樣、取窗口等方式的各種分辨率的圖像數(shù)據(jù)。用戶還可以完全控制圖像質(zhì)量、數(shù)據(jù)格式和傳輸方式。ov7670與fpga硬件連接如圖所示。3.3 圖像顯示模塊 圖像顯示通過在fpga中構(gòu)建的nios ii嵌入式內(nèi)核實現(xiàn),nios ii系統(tǒng)可以在設(shè)計階段根據(jù)實際的需求來增減外設(shè)的數(shù)量和種類??梢允褂胊ltera提供的開發(fā)工具sopc builder,在fpga器件上創(chuàng)建軟硬件開發(fā)的基礎(chǔ)平臺,即用sopc b
12、uilder創(chuàng)建嵌入式內(nèi)核cpu和參數(shù)化的接口總線avalon。在此基礎(chǔ)上,可以快速地將硬件系統(tǒng)與常規(guī)軟件集成在單一可編程芯片中。而且sopc builder還提供標(biāo)準(zhǔn)的接口方式,以便用戶將外圍電路做成nios ii嵌入式內(nèi)核可以添加的外設(shè)模塊。這種設(shè)計方式,方便了各類系統(tǒng)的調(diào)試。3.4 plc的選型與工作原理當(dāng)某一個控制任務(wù)決定由plc來完成后,選擇plc就成為最重要的事情。一方面要選擇多大容量的plc ,另一方面是選擇什么公司的plc及外設(shè)。對第一個問題,首先要對控制任務(wù)進(jìn)行詳細(xì)的分析,把所有的i/o點找出來,包括開關(guān)量i/o和模擬量i/o以及輸出是用繼電器還是晶體管或是可控硅型。3.4.
13、1 plc的硬件結(jié)構(gòu)圖:圖2.4.1-1 plc硬件結(jié)構(gòu)圖3.4.2 plc各部分的作用與工作原理 3.4.2.1 中央處理器 cpu是由控制器和運算器組成的。運算器也稱為算術(shù)邏輯單元,它的功能就是進(jìn)行算術(shù)運算和邏輯運算。控制器的作用是控制整個計算機的各個部件有條不紊地工作,其基本功能是從內(nèi)存中取指令和執(zhí)行指令。他的重要功能如下: 診斷plc電源、內(nèi)部電路的工作狀態(tài)及編制程序中的語法錯誤。 采集由現(xiàn)場輸入裝置送來的狀態(tài)或數(shù)據(jù),并送入plc的寄存器中。 按用戶程序存儲器中存放的先后順序逐條讀取指令,進(jìn)行編譯解釋后,按指令規(guī)定的任務(wù)完成各種運算和操作。 將存于寄存器中的處理結(jié)果送至輸出端。 應(yīng)各種
14、外部設(shè)備的工作請求。3.4.2.2 存儲器plc的存儲器分為兩大部分:一大部分是系統(tǒng)存儲器,用來存放系統(tǒng)管理程序、監(jiān)控程序及其系統(tǒng)內(nèi)部數(shù)據(jù);二大部分是用戶存儲器,包括用戶程序存儲區(qū)及工作數(shù)據(jù)存儲區(qū)。3.4.2.3 plc的基本工作原理plc采用的是循環(huán)掃描工作方式。對每個程序,cpu從第一條指令開始執(zhí)行,按指令步序號做周期性的程序循環(huán)掃描,如果無跳轉(zhuǎn)指令,則從則從第一條指令開始逐條順序執(zhí)行用戶程序,直至遇到結(jié)束符后又返回第一條指令,如此周而復(fù)始不斷循環(huán),每一個循環(huán)稱為一個掃描周期。plc的掃描全過程如圖2.4.2.3-1所示。 圖3.4.2.3-1 plc的掃描全過程3.4.2.3.1 輸入刷
15、新階段在輸入刷新階段,cpu掃描全部輸入端口,讀取其狀態(tài)并寫入輸入狀態(tài)寄存器。完成后關(guān)閉輸入端口,轉(zhuǎn)入程序執(zhí)行階段。3.4.2.3.2 程序執(zhí)行階段在程序執(zhí)行階段,根據(jù)用戶輸入的控制程序,從第一條開始逐條執(zhí)行,并將相應(yīng)的邏輯運算結(jié)果存入對應(yīng)的內(nèi)部輔助寄存器和輸出狀態(tài)寄存器。3.4.2.3.3 輸出刷新階段當(dāng)所有指令執(zhí)行完畢后,將輸出狀態(tài)寄存器中的內(nèi)容,依次送到輸出鎖存電路,并通過一定輸出方式輸出,驅(qū)動外部相應(yīng)執(zhí)行元件工作,這才形成plc的實際輸出。顯然掃描周期的長短主要取決與程序的長短。掃描周期越長,響應(yīng)速度越慢。由于每一個掃描周期只進(jìn)行一次i/o刷新,即每一個掃描周期plc只對輸入、輸出狀態(tài)
16、寄存器更新一次,故使系統(tǒng)存在輸入、輸出滯后現(xiàn)象,這在一定程度上降低了系統(tǒng)的響應(yīng)速度。i/o端口設(shè)置見表3.4.2.3.3-1:表3.4.2.3.3-1 i/o端口設(shè)置dirattribdata功能喚醒功能功能描述000下拉是帶下拉電阻的輸入管腳001上拉是帶上拉電阻的輸入管腳010懸浮是懸浮式輸入管腳011懸浮否懸浮式輸入管腳10反相輸出否data數(shù)據(jù)位反相輸出11同相輸出否data數(shù)據(jù)位同相輸出由此可見,若輸入變量在i/o刷新期間狀態(tài)發(fā)生變化,則本次掃描期間輸出會相應(yīng)地發(fā)生變化。反之,若在本次刷新之后輸入變量才發(fā)生變化,則本次掃描輸出不變,而要到下一次掃描的i/o刷新期間輸出才會發(fā)生變化。這
17、對于一般的開關(guān)量控制系統(tǒng)來說是完全允許的,不但不會造成不利影響,反而可以增強系統(tǒng)的抗干擾能力。這是因為輸入采樣僅在輸入刷新階段進(jìn)行,plc在一個工作周期的大部分時間里實際上是外設(shè)隔離的。而工業(yè)現(xiàn)場的干擾常常是脈沖式的、短時的,由于系統(tǒng)響應(yīng)較慢,往往要幾個掃描周期才響應(yīng)一次,而多次掃描后,因瞬間干擾而引起的誤操作將會大大減少,從而提高了系統(tǒng)的抗干擾能力。但是對于控制時間要求較嚴(yán)格、響應(yīng)速度要求較快的系統(tǒng),就需要精心編制程序,必要時采用一些特殊功能,以減少因掃描周期造成的響應(yīng)滯后等不良影響。3.5 vga的概述vga(videographicsarray)是ibm公司在1987年推出的一種視頻傳輸
18、標(biāo)準(zhǔn),具有分辨率高、顯示速率快、顏色豐富等優(yōu)點,在彩色顯示器領(lǐng)域得到了廣泛的應(yīng)用,vga最早是指分辨率為640*480的一種顯示模式。下面就vga相關(guān)的工作原理及時序要求進(jìn)行簡單介紹。3.5.1 crt的工作原理vga接口技術(shù)應(yīng)用最多的就是crt顯示器,這種顯示器的信號接口采用的就是標(biāo)準(zhǔn)的vga接口。常見的彩色顯示器,一般由 crt (陰極射線管)構(gòu)成,彩色是由 r、g、b三原色按不同比例組成。顯示過程中,hs和vs的極性可正可負(fù),顯示器內(nèi)可自動轉(zhuǎn)換為正極性邏輯。3.5.2 vga工作時序?qū)τ谄胀ǖ膙ga顯示器,主要包含5個信號:l r、g、b:三基色信號l hs: 行同步信號l vs:場同步
19、信號圖3.5-1 vga行掃描時序 圖3.5-2 vga場掃描時序表3.5-1 行掃描時序時間(單位:像素,即輸出一個像素pixel的時間間隔)行同步頭行圖像行周期對應(yīng)位置tftatbtctdtetg時間 pixels8964086408800表3.5-2 場掃描時序時間(單位:行,即輸出一行l(wèi)ine的時間間隔)場同步頭場圖像場周期對應(yīng)位置tftatbtctdtetg時間 lines222584808525系統(tǒng)原理圖系統(tǒng)pcb圖4 系統(tǒng)軟件設(shè)計4.1軟件模塊介紹 系統(tǒng)軟件總設(shè)計模塊如圖所示,在 pll 中建立pll鎖相環(huán)對時鐘倍頻、分頻產(chǎn)生系統(tǒng)各模塊所需時鐘與系統(tǒng)復(fù)位信號,ov7670-dat
20、a_receive 模塊負(fù)責(zé)ov7670攝像頭的初始化與圖像數(shù)據(jù)的采集, 模塊配合nios ii負(fù)責(zé)對ov7670-data_receive 采集的圖像數(shù)據(jù)的緩存,以防止數(shù)據(jù)時鐘不匹配而出現(xiàn)數(shù)據(jù)紊亂,而 模塊主要負(fù)責(zé)產(chǎn)生讀取 中的數(shù)據(jù)域?qū)崿F(xiàn)數(shù)據(jù)的vga顯示產(chǎn)生相應(yīng)的rgb數(shù)據(jù)與行、場同步信號,再將采集數(shù)據(jù)送到nios ii中,在nios ii中用verilog語言驅(qū)動tft液晶,實現(xiàn)圖像數(shù)據(jù)的顯示。系統(tǒng)總設(shè)計框圖4.2 nios ii嵌入式內(nèi)核程序設(shè)計nios ii嵌入式內(nèi)核主要任務(wù)是將采集到的數(shù)據(jù)送入sdram暫存,然后再根據(jù)顯示需要將暫存的數(shù)據(jù)讀取出來送到lcd顯示,為了確保顯示圖像與采集
21、圖像的一致,在送lcd顯示數(shù)據(jù)時要注意以下幾點:(1) 根據(jù)實際情況去除行、場消隱數(shù)據(jù),再根據(jù)顯示內(nèi)容的多少對數(shù)據(jù)進(jìn)行裁剪,裁剪到適合lcd顯示的大小,從而避免顯示時圖像的錯位以及亂碼等情況。(2) 由于嵌入式內(nèi)核時鐘頻率相對于攝像頭的大量數(shù)據(jù)來說速度還是難以做到攝像頭采集的每副圖像都能完全顯示,所以在設(shè)計中采用隔場采集處理的方式,這樣避免sdram中數(shù)據(jù)過多以至于被填滿的情況,也解決了嵌入式內(nèi)核采集的出現(xiàn)的卡屏的情況。5 測試結(jié)果電路板成品:測試結(jié)果如圖所示:由上圖可以看出,顯示的圖像清晰,色彩與實際相符,失真較少。測試結(jié)果基本達(dá)到預(yù)期。6 結(jié)束語 采用fpga設(shè)計并實現(xiàn)了一種圖像采集系統(tǒng),
22、大幅減少了電路板的尺寸,節(jié)約了成本,同時增加了設(shè)計的靈活性和系統(tǒng)的可靠性,充分應(yīng)用fpga快速并行處理數(shù)據(jù)的特性,在產(chǎn)生同步信號的同時送出像素數(shù)據(jù)。嵌入式內(nèi)核nios ii的使用,解決了其他系統(tǒng)實時圖像顯示的體積與速度問題,擴展了應(yīng)用范圍。 (全文完)參考文獻(xiàn):1 潘 松、黃繼業(yè): eda技術(shù)實用教程,科學(xué)出版社,2003.5,p23-p282 楊 靜: 電子設(shè)計自動化,高等教育出版社,2004.7,p32-p363 張文愛:eda技術(shù)與fpga應(yīng)用設(shè)計,電子工業(yè)出版社,2012.1,p25-p484 楊立英:電子電路eda技術(shù)與應(yīng)用,清華大學(xué)出版社,2011.1,p43-p865 徐志軍、徐
23、光輝:vga在cpld/fpga的開發(fā)與應(yīng)用,電子工業(yè)出版社,2002.4,p12-p166 黃智偉: fpga系統(tǒng)設(shè)計與實踐,電子工業(yè)出版社,2005.1,p66-p697 潘 松、王國棟:vhdl實用教材(修訂版),電子科技大學(xué)出版社,2001.7,p48-p528 孟憲元:fpga嵌入式系統(tǒng)設(shè)計,電子工業(yè)出版社,2007.10,p56-p649 褚振勇、齊 亮、田紅心:fpga設(shè)計及應(yīng)用,高等教育出版社,2006.12,p36-p41附錄:源程序timescale 1ns/1nsmodule i2c_controller( input iclk, input irst_n, input
24、i2c_clk, input i2c_en, input 23:0 i2c_wdata, output i2c_sclk, inout i2c_sdat, input wr, input go, output ack, output reg end, output reg 7:0 i2c_rdata );reg i2c_bit;reg sclk; reg 5:0 sd_counter;wire i2c_sclk1 = (go = 1 & (sd_counter = 5 & sd_counter = 16 & sd_counter = 27 & sd_counter = 5 & sd_count
25、er = 16 & sd_counter = 33 & sd_counter = 44 & sd_counter = 43 & sd_counter = 51) ? 1b0 : 1b1; wire sdo = wr ? sdo1 : sdo2;assign i2c_sdat = sdo ? i2c_bit : 1bz;reg ackw1, ackw2, ackw3; reg ackr1, ackr2, ackr3; assign ack = wr ? (ackw1 | ackw2 | ackw3) : (ackr1 | ackr2 | ackr3);always (posedge iclk o
26、r negedge irst_n)begin if (!irst_n) sd_counter = 6b0; else if(i2c_en) begin if (go = 0 | end = 1) sd_counter = 6b0; else if (sd_counter 6d63) sd_counter = sd_counter + 6d1; end else sd_counter = sd_counter;endalways (posedge iclk or negedge irst_n) begin if(!irst_n) begin sclk = 1; i2c_bit = 1; ackw
27、1 = 1; ackw2 = 1; ackw3 = 1; ackr1 = 1; ackr2 = 1; ackr3 = 1; end = 0; i2c_rdata = 8h0; end else if(i2c_en) begin if(go) begin if(wr) begin case(sd_counter) 6d0 : begin sclk = 1; i2c_bit = 1; ackw1 = 1; ackw2 = 1; ackw3 = 1;ackr1 = 1; ackr2 = 1; ackr3 = 1; end = 0; end 6d1 : begin sclk = 1; i2c_bit
28、= 1; ackw1 = 1; ackw2 = 1; ackw3 = 1; end = 0; end 6d2 : i2c_bit = 0; 6d3 : sclk = 0; 6d4 : i2c_bit = i2c_wdata23; 6d5 : i2c_bit = i2c_wdata22; 6d6 : i2c_bit = i2c_wdata21; 6d7 : i2c_bit = i2c_wdata20; 6d8 : i2c_bit = i2c_wdata19; 6d9 : i2c_bit = i2c_wdata18; 6d10 : i2c_bit = i2c_wdata17; 6d11 : i2c
29、_bit = i2c_wdata16; 6d12 : i2c_bit = 0; 6d13 : ackw1 = i2c_sdat; 6d14 : i2c_bit = 0; 6d15 : i2c_bit = i2c_wdata15; 6d16 : i2c_bit = i2c_wdata14; 6d17 : i2c_bit = i2c_wdata13; 6d18 : i2c_bit = i2c_wdata12; 6d19 : i2c_bit = i2c_wdata11; 6d20 : i2c_bit = i2c_wdata10; 6d21 : i2c_bit = i2c_wdata9; 6d22 :
30、 i2c_bit = i2c_wdata8; 6d23 : i2c_bit = 0; 6d24 : ackw2 = i2c_sdat; 6d25 : i2c_bit = 0; 6d26 : i2c_bit = i2c_wdata7; 6d27 : i2c_bit = i2c_wdata6; 6d28 : i2c_bit = i2c_wdata5; 6d29 : i2c_bit = i2c_wdata4; 6d30 : i2c_bit = i2c_wdata3; 6d31 : i2c_bit = i2c_wdata2; 6d32 : i2c_bit = i2c_wdata1; 6d33 : i2
31、c_bit = i2c_wdata0; 6d34 : i2c_bit = 0; 6d35 : ackw3 = i2c_sdat; 6d36 : i2c_bit = 0; 6d37 : begin sclk = 0; i2c_bit = 0; end 6d38 : sclk = 1; 6d39 : begin i2c_bit = 1; end = 1; end default : begin i2c_bit = 1; sclk = 1; end endcase end else begin case(sd_counter) 6d0 : begin sclk = 1; i2c_bit = 1; a
32、ckw1 = 1; ackw2 = 1; ackw3 = 1; ackr1 = 1; ackr2 = 1; ackr3 = 1; end = 0; end 6d1 : begin sclk = 1; i2c_bit = 1; ackr1 = 1; ackr2 = 1; ackr3 = 1; end = 0; end 6d2 : i2c_bit = 0; 6d3 : sclk = 0; 6d4 : i2c_bit = i2c_wdata23; 6d5 : i2c_bit = i2c_wdata22; 6d6 : i2c_bit = i2c_wdata21; 6d7 : i2c_bit = i2c
33、_wdata20; 6d8 : i2c_bit = i2c_wdata19; 6d9 : i2c_bit = i2c_wdata18; 6d10 : i2c_bit = i2c_wdata17; 6d11 : i2c_bit = i2c_wdata16; 6d12 : i2c_bit = 0; 6d13 : ackr1 = i2c_sdat; 6d14 : i2c_bit = 0; 6d15 : i2c_bit = i2c_wdata15; 6d16 : i2c_bit = i2c_wdata14; 6d17 : i2c_bit = i2c_wdata13; 6d18 : i2c_bit =
34、i2c_wdata12; 6d19 : i2c_bit = i2c_wdata11; 6d20 : i2c_bit = i2c_wdata10; 6d21 : i2c_bit = i2c_wdata9; 6d22 : i2c_bit = i2c_wdata8; 6d23 : i2c_bit = 0; 6d24 : ackr2 = i2c_sdat; 6d25 : i2c_bit = 0; 6d26 : begin sclk = 0; i2c_bit = 0; end 6d27 : sclk = 1; 6d28 : begin i2c_bit = 1; end 6d29 : begin sclk
35、 = 1; i2c_bit = 1; end 6d30 : i2c_bit = 0; 6d31 : sclk = 0; 6d32 : i2c_bit = i2c_wdata23; 6d33 : i2c_bit = i2c_wdata22; 6d34 : i2c_bit = i2c_wdata21; 6d35 : i2c_bit = i2c_wdata20; 6d36 : i2c_bit = i2c_wdata19; 6d37 : i2c_bit = i2c_wdata18; 6d38 : i2c_bit = i2c_wdata17; 6d39 : i2c_bit = 1b1; 6d40 : i
36、2c_bit = 0; 6d41 : ackr3 = i2c_sdat; 6d42 : i2c_bit = 0; 6d43 : i2c_bit = 0; 6d44 : i2c_rdata7 = i2c_sdat; 6d45 : i2c_rdata6 = i2c_sdat; 6d46 : i2c_rdata5 = i2c_sdat; 6d47 : i2c_rdata4 = i2c_sdat; 6d48 : i2c_rdata3 = i2c_sdat; 6d49 : i2c_rdata2 = i2c_sdat; 6d50 : i2c_rdata1 = i2c_sdat; 6d51 : i2c_rd
37、ata0 = i2c_sdat; 6d52 : i2c_bit = 1; 6d53 : i2c_bit = 0; 6d54 : begin sclk = 0; i2c_bit = 0; end 6d55 : sclk = 1; 6d56 : begin i2c_bit = 1; end = 1; end endcase end end else begin sclk = 1; i2c_bit = 1; ackw1 = 1; ackw2 = 1; ackw3 = 1; ackr1 = 1; ackr2 = 1; ackr3 = 1; end = 0; i2c_rdata = i2c_rdata;
38、 end endendendmoduletimescale 1ns/1nsmodule i2c_av_config( input iclk, input irst_n, output i2c_sclk, inout i2c_sdat, output reg config_done);parameter lut_size = 168;parameter clk_freq = 25_000000; parameter i2c_freq = 10_000; reg 15:0 mi2c_clk_div; reg mi2c_ctrl_clk; always(posedge iclk or negedge
39、 irst_n)begin if(!irst_n) begin mi2c_clk_div = 0; mi2c_ctrl_clk = 0; end else beginif( mi2c_clk_div (clk_freq/i2c_freq)/2) mi2c_clk_div = mi2c_clk_div + 1d1; else begin mi2c_clk_div = 0; mi2c_ctrl_clk = mi2c_ctrl_clk; end endendreg i2c_en_r0, i2c_en_r1;always(posedge iclk or negedge irst_n)begin if(!irst_n) begin i
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度車場租賃及停車場綠化美化服務(wù)協(xié)議4篇
- 科技引領(lǐng)下的宇宙探索進(jìn)展
- 二零二五年度車輛融資租賃合同違約責(zé)任答辯狀樣本8篇
- 二零二五年度車輛買賣合同含車輛綠色環(huán)保認(rèn)證3篇
- 二零二五年度草坪圍欄施工與城市排水系統(tǒng)配套合同2篇
- 2025年度個人知識產(chǎn)權(quán)代理傭金協(xié)議4篇
- 二零二五年度櫥柜衣柜模塊化設(shè)計生產(chǎn)合同4篇
- 2025年度個人車位買賣合同范本(寫字樓)3篇
- 高效體育訓(xùn)練學(xué)生體能提升的秘密武器
- 2025年度綠色有機牛奶產(chǎn)銷一體化合作合同范本4篇
- 第八講 發(fā)展全過程人民民主PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 實體瘤療效評價標(biāo)準(zhǔn)RECIST-1.1版中文
- 王崧舟:學(xué)習(xí)任務(wù)群與課堂教學(xué)變革 2022版新課程標(biāo)準(zhǔn)解讀解析資料 57
- 企業(yè)新春茶話會PPT模板
- GB/T 19185-2008交流線路帶電作業(yè)安全距離計算方法
- 2022年上海市初中畢業(yè)數(shù)學(xué)課程終結(jié)性評價指南
- DIC診治新進(jìn)展課件
- 公路工程施工現(xiàn)場安全檢查手冊
- 1汽輪機跳閘事故演練
- 禮品(禮金)上交登記臺賬
- 普通高中英語課程標(biāo)準(zhǔn)詞匯表
評論
0/150
提交評論