基于FPGA的圖像采集系統(tǒng)設計畢業(yè)論文_第1頁
基于FPGA的圖像采集系統(tǒng)設計畢業(yè)論文_第2頁
基于FPGA的圖像采集系統(tǒng)設計畢業(yè)論文_第3頁
基于FPGA的圖像采集系統(tǒng)設計畢業(yè)論文_第4頁
基于FPGA的圖像采集系統(tǒng)設計畢業(yè)論文_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 基于fpga的圖像采集系統(tǒng)設計前言 隨著科技社會的發(fā)展,圖像采集系統(tǒng)在日常生活、工業(yè)生產、國家安全等眾多領域得到廣泛的應用,具有廣闊的應用前景和研究價值。采用fpga進行設計的圖像采集系統(tǒng)有良好的擴展性能和相對穩(wěn)定的硬件結構。主要工作如下: 1)分析圖像采集和圖像處理的原理和特點,設計硬件電路的原理圖,完成系統(tǒng)pcb板圖的設計。 2)針對fpga進行內部功能模塊的劃分,使用verilog hdl硬件描述語言進行設計。 3)利用sopc builder完成nios處理器軟核及其外設的創(chuàng)建和配置。 4)根據fpga內部硬件電路的特點,選擇適合fpga的算法,并對算法進行優(yōu)化。 5)在nios i

2、i ide環(huán)境下用verilog hdl語言編寫圖像傳感器控制、圖像采集、sram讀寫控制、圖像顯示等程序,實現完整的圖像采集系統(tǒng)功能。 1課題分析1.1 選題背景(含國內外相關研究綜述及評價)與意義eda技術的發(fā)展和應用普及性越來越高,已經涉及到現代電子產品設計的各個系統(tǒng)、各個領域中。之所以有這樣的廣泛應用,主要得益于可編程邏輯器件的長足發(fā)展和日益成熟,可編程邏輯器件(programmable logic device, pld)是一種半定制集成電路,在其內部集成了大量的門和觸發(fā)器等基本邏輯單元電路,通過用戶編程來改變pld內部電路的邏輯關系或連線,從而得到所需要的電路設計功能。這種新型邏輯

3、器件,不僅速度快、集成度高,能夠完成用戶定義的邏輯功能,還可以加密和重新定義編程,其允許編程次數可以達到上萬次??删幊踢壿嬈骷某霈F,大大改變了傳統(tǒng)數字系統(tǒng)設計方法,簡化了硬件系統(tǒng)、降低成本、提高系統(tǒng)的可靠性、靈活性。因此,自20世紀70年代問世以后,pld受到廣大工程師的青睞,被廣泛應用于工業(yè)控制、通信設備、儀器儀表和醫(yī)療電子儀器等眾多領域,為eda技術開創(chuàng)了廣闊的發(fā)展空間。vga作為一種標準的顯示接口,在視頻和計算機領域得到了廣泛的應用。vga圖像信號發(fā)生器是電視臺、電視機生產企業(yè)、電視維修人員常用的儀器,其主要功能就是產生標準的圖像測試信號。對vga而言,其主要應用在工業(yè)控制領域,通過v

4、ga接口實現將信息、圖像、文字等內容顯示各種vga顯示器上,為客戶提供一種完美的顯示界面,也是目前重要的顯示終端。本次實驗設計主要是基于fpga芯片為處理器,利用硬件描述語言完成vga的時序控制,并利用相應的實驗平臺,進行設計驗證,基本實現了vga的彩條信號和圖像顯示效果,達到了整個設計目標和要求。1.2 選題研究的方法與主要內容1.2.1研究方法 通過查閱資料,學習vga工作原理和控制方法,掌握eda技術應用基本技巧,運用fpga為設計實現的處理器,完成vhdl對各個模塊的功能描述,在實驗平臺上完成整個系統(tǒng)設計實現。1.2.2主要內容u 根據設計任務,制定實現方案u 應用vhdl完成對系統(tǒng)中

5、各個功能模塊的描述u 完成頂層設計文件,并調試仿真系統(tǒng)u 下載程序代碼到fpga,在實驗平臺上驗證vga是否正常顯示撰寫設計報告書1.3 研究條件和可能存在的問題1.3.1研究條件會使用eda開發(fā)工具軟件quartus ii ,能熟練使用vhdl語言編寫時序電路,需要有相應的實驗開發(fā)平臺。1.3.2可能存在的問題:u vga時序控制不正確,無法正常顯示相應的圖形u vga硬件接口電路pcb設計不能實現其功能u fpga內部rom存儲空間太小,不能存儲大容量的圖片數據1.4 擬解決的主要問題和預期的結果1.4.1擬解決的主要問題u vga時序控制問題 u protel繪制vga電阻分壓網絡電路設

6、計問題u 調試vhdl程序代碼常見錯誤1.4.2預期的結果通過完成整個系統(tǒng)的電路設計,實現各個功能模塊和頂層設計電路,能在顯示器上正確看到橫豎彩條、棋盤格圖形和圖片顯示等效果。2 圖像采集系統(tǒng)介紹2.1 圖像采集系統(tǒng)功能分析這部分闡述了圖像采集系統(tǒng)的各種動作功能和控制要求,給出了完整的圖像采集系統(tǒng)操作規(guī)程,并介紹了圖像采集運行系統(tǒng)中所包括的人工操作步驟。2.1.1 圖像采集系統(tǒng)的基本功能在進行上、下位機程序編寫之前,首先要做的工作是確定圖像采集系統(tǒng)本身所具備的功能及在進行某種操作后所具有的狀態(tài)。在實際生活中,我們見到的圖像采集系統(tǒng)可以采集一些簡單的圖像,如書本、人物和植物等。圖像采例集系統(tǒng)的基

7、本功能就是對圖像進行采集,并進行簡單的處理。舉一個簡單的例子來說明:采集一本書的圖像,系統(tǒng)會根據書的顏色大小自動調整,使采集的圖像清晰,盡量減小失真。當圖像達到最佳狀態(tài)時,系統(tǒng)等待外部命令,如繼續(xù)采集,則同上,如果此時不再采集而按下退出按鈕,系統(tǒng)則要進行退出操作,并提示你是否保存所采集的圖像,完成此次操作。由此看來,系統(tǒng)一次采集要涉及攝像頭、vga以及fpga等,這是它的內部功能?;趂pga實現的圖像采集系統(tǒng)的整體結構框圖如圖1.1.1-1所示: 系統(tǒng)主要分為:圖像采集模塊、pll鎖相環(huán)時鐘管理模塊、i2c總線模塊、fifo圖像數據處理模塊、nios ii 顯示控制模塊。系統(tǒng)中pll負責為n

8、ios ii嵌入式內核、外部sdram和ov7670攝像頭提供時鐘,系統(tǒng)通電后,fpga首先從epcs中讀取配置數據,完成自身程序加載,隨后對系統(tǒng)時鐘分頻為攝像頭提供系統(tǒng)時鐘,然后通過i2c總線完成對ov7670攝像頭的配置。配置完成后,ov7670將采集到的圖像數據輸出格式轉換為標準的圖像數據及圖像時鐘送入fpga進行處理,并將處理后的圖像數據通過fifo模塊暫時存儲在sdram中進行緩沖,同時nios ii模塊讀取存放在sdram中的圖像數據,按照tft液晶顯示的時序、數據要求將圖像數據送到tft彩色液晶顯示屏上顯示。彩色lcd顯示sdram控制模塊液晶顯示控制模塊fifo數據緩存模塊pl

9、l視頻采集模塊i2c模塊 ov7670攝像頭 epcs16配置芯片sdram圖1.1.1-1 圖像采集系統(tǒng)結構3 系統(tǒng)硬件設計3.1 fpga選型 fpga是該系統(tǒng)的核心,由于系統(tǒng)目前只是完成簡單的圖像處理,故fpga選用altera公司的低成本fpga cyclone ii系列器件簡介如表所示。 cyclone ii器件采用90nm工藝制造,它延續(xù)cyclone的低成本定位,在邏輯容量、pll、乘法器和i/o數量上都比cyclone有了較大提高,應用cyclone ii進行圖像處理開發(fā)有如下優(yōu)點:(1)低成本高性能,適應圖像處理要求較高的需要。(2)豐富的內嵌存儲器資源,適應大量圖像數據存取

10、的需要。(3)豐富的硬件乘法器,適應圖像處理算法的需要。系統(tǒng)的fpga選用開發(fā)板自帶的ep2cs5q208c8芯片。cyclone ii系列fpga參數對比器件ep2c5ep2c8ep2c15ep2c20ep2c35ep2c50ep2c70邏輯單元460882561444818752332165052868416m4k ram塊26365252105129250總比特數1198081658882396162396164838405944321152000嵌入式乘法器131826263586150pll個數2244444最多用戶i/o管腳1581823153154754506223.2 圖像采集

11、模塊選擇 圖像采集采用ov7670圖像傳感器,ov7670圖像傳感器體積小、工作電壓低。ov7670攝影頭的vga圖像最高達到30幀/秒。通過sccb總線控制內部寄存器,可以是ov7670輸出整幀、子采樣、取窗口等方式的各種分辨率的圖像數據。用戶還可以完全控制圖像質量、數據格式和傳輸方式。ov7670與fpga硬件連接如圖所示。3.3 圖像顯示模塊 圖像顯示通過在fpga中構建的nios ii嵌入式內核實現,nios ii系統(tǒng)可以在設計階段根據實際的需求來增減外設的數量和種類。可以使用altera提供的開發(fā)工具sopc builder,在fpga器件上創(chuàng)建軟硬件開發(fā)的基礎平臺,即用sopc b

12、uilder創(chuàng)建嵌入式內核cpu和參數化的接口總線avalon。在此基礎上,可以快速地將硬件系統(tǒng)與常規(guī)軟件集成在單一可編程芯片中。而且sopc builder還提供標準的接口方式,以便用戶將外圍電路做成nios ii嵌入式內核可以添加的外設模塊。這種設計方式,方便了各類系統(tǒng)的調試。3.4 plc的選型與工作原理當某一個控制任務決定由plc來完成后,選擇plc就成為最重要的事情。一方面要選擇多大容量的plc ,另一方面是選擇什么公司的plc及外設。對第一個問題,首先要對控制任務進行詳細的分析,把所有的i/o點找出來,包括開關量i/o和模擬量i/o以及輸出是用繼電器還是晶體管或是可控硅型。3.4.

13、1 plc的硬件結構圖:圖2.4.1-1 plc硬件結構圖3.4.2 plc各部分的作用與工作原理 3.4.2.1 中央處理器 cpu是由控制器和運算器組成的。運算器也稱為算術邏輯單元,它的功能就是進行算術運算和邏輯運算。控制器的作用是控制整個計算機的各個部件有條不紊地工作,其基本功能是從內存中取指令和執(zhí)行指令。他的重要功能如下: 診斷plc電源、內部電路的工作狀態(tài)及編制程序中的語法錯誤。 采集由現場輸入裝置送來的狀態(tài)或數據,并送入plc的寄存器中。 按用戶程序存儲器中存放的先后順序逐條讀取指令,進行編譯解釋后,按指令規(guī)定的任務完成各種運算和操作。 將存于寄存器中的處理結果送至輸出端。 應各種

14、外部設備的工作請求。3.4.2.2 存儲器plc的存儲器分為兩大部分:一大部分是系統(tǒng)存儲器,用來存放系統(tǒng)管理程序、監(jiān)控程序及其系統(tǒng)內部數據;二大部分是用戶存儲器,包括用戶程序存儲區(qū)及工作數據存儲區(qū)。3.4.2.3 plc的基本工作原理plc采用的是循環(huán)掃描工作方式。對每個程序,cpu從第一條指令開始執(zhí)行,按指令步序號做周期性的程序循環(huán)掃描,如果無跳轉指令,則從則從第一條指令開始逐條順序執(zhí)行用戶程序,直至遇到結束符后又返回第一條指令,如此周而復始不斷循環(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)寄存器。完成后關閉輸入端口,轉入程序執(zhí)行階段。3.4.2.3.2 程序執(zhí)行階段在程序執(zhí)行階段,根據用戶輸入的控制程序,從第一條開始逐條執(zhí)行,并將相應的邏輯運算結果存入對應的內部輔助寄存器和輸出狀態(tài)寄存器。3.4.2.3.3 輸出刷新階段當所有指令執(zhí)行完畢后,將輸出狀態(tài)寄存器中的內容,依次送到輸出鎖存電路,并通過一定輸出方式輸出,驅動外部相應執(zhí)行元件工作,這才形成plc的實際輸出。顯然掃描周期的長短主要取決與程序的長短。掃描周期越長,響應速度越慢。由于每一個掃描周期只進行一次i/o刷新,即每一個掃描周期plc只對輸入、輸出狀態(tài)

16、寄存器更新一次,故使系統(tǒng)存在輸入、輸出滯后現象,這在一定程度上降低了系統(tǒng)的響應速度。i/o端口設置見表3.4.2.3.3-1:表3.4.2.3.3-1 i/o端口設置dirattribdata功能喚醒功能功能描述000下拉是帶下拉電阻的輸入管腳001上拉是帶上拉電阻的輸入管腳010懸浮是懸浮式輸入管腳011懸浮否懸浮式輸入管腳10反相輸出否data數據位反相輸出11同相輸出否data數據位同相輸出由此可見,若輸入變量在i/o刷新期間狀態(tài)發(fā)生變化,則本次掃描期間輸出會相應地發(fā)生變化。反之,若在本次刷新之后輸入變量才發(fā)生變化,則本次掃描輸出不變,而要到下一次掃描的i/o刷新期間輸出才會發(fā)生變化。這

17、對于一般的開關量控制系統(tǒng)來說是完全允許的,不但不會造成不利影響,反而可以增強系統(tǒng)的抗干擾能力。這是因為輸入采樣僅在輸入刷新階段進行,plc在一個工作周期的大部分時間里實際上是外設隔離的。而工業(yè)現場的干擾常常是脈沖式的、短時的,由于系統(tǒng)響應較慢,往往要幾個掃描周期才響應一次,而多次掃描后,因瞬間干擾而引起的誤操作將會大大減少,從而提高了系統(tǒng)的抗干擾能力。但是對于控制時間要求較嚴格、響應速度要求較快的系統(tǒng),就需要精心編制程序,必要時采用一些特殊功能,以減少因掃描周期造成的響應滯后等不良影響。3.5 vga的概述vga(videographicsarray)是ibm公司在1987年推出的一種視頻傳輸

18、標準,具有分辨率高、顯示速率快、顏色豐富等優(yōu)點,在彩色顯示器領域得到了廣泛的應用,vga最早是指分辨率為640*480的一種顯示模式。下面就vga相關的工作原理及時序要求進行簡單介紹。3.5.1 crt的工作原理vga接口技術應用最多的就是crt顯示器,這種顯示器的信號接口采用的就是標準的vga接口。常見的彩色顯示器,一般由 crt (陰極射線管)構成,彩色是由 r、g、b三原色按不同比例組成。顯示過程中,hs和vs的極性可正可負,顯示器內可自動轉換為正極性邏輯。3.5.2 vga工作時序對于普通的vga顯示器,主要包含5個信號:l r、g、b:三基色信號l hs: 行同步信號l vs:場同步

19、信號圖3.5-1 vga行掃描時序 圖3.5-2 vga場掃描時序表3.5-1 行掃描時序時間(單位:像素,即輸出一個像素pixel的時間間隔)行同步頭行圖像行周期對應位置tftatbtctdtetg時間 pixels8964086408800表3.5-2 場掃描時序時間(單位:行,即輸出一行l(wèi)ine的時間間隔)場同步頭場圖像場周期對應位置tftatbtctdtetg時間 lines222584808525系統(tǒng)原理圖系統(tǒng)pcb圖4 系統(tǒng)軟件設計4.1軟件模塊介紹 系統(tǒng)軟件總設計模塊如圖所示,在 pll 中建立pll鎖相環(huán)對時鐘倍頻、分頻產生系統(tǒng)各模塊所需時鐘與系統(tǒng)復位信號,ov7670-dat

20、a_receive 模塊負責ov7670攝像頭的初始化與圖像數據的采集, 模塊配合nios ii負責對ov7670-data_receive 采集的圖像數據的緩存,以防止數據時鐘不匹配而出現數據紊亂,而 模塊主要負責產生讀取 中的數據域實現數據的vga顯示產生相應的rgb數據與行、場同步信號,再將采集數據送到nios ii中,在nios ii中用verilog語言驅動tft液晶,實現圖像數據的顯示。系統(tǒng)總設計框圖4.2 nios ii嵌入式內核程序設計nios ii嵌入式內核主要任務是將采集到的數據送入sdram暫存,然后再根據顯示需要將暫存的數據讀取出來送到lcd顯示,為了確保顯示圖像與采集

21、圖像的一致,在送lcd顯示數據時要注意以下幾點:(1) 根據實際情況去除行、場消隱數據,再根據顯示內容的多少對數據進行裁剪,裁剪到適合lcd顯示的大小,從而避免顯示時圖像的錯位以及亂碼等情況。(2) 由于嵌入式內核時鐘頻率相對于攝像頭的大量數據來說速度還是難以做到攝像頭采集的每副圖像都能完全顯示,所以在設計中采用隔場采集處理的方式,這樣避免sdram中數據過多以至于被填滿的情況,也解決了嵌入式內核采集的出現的卡屏的情況。5 測試結果電路板成品:測試結果如圖所示:由上圖可以看出,顯示的圖像清晰,色彩與實際相符,失真較少。測試結果基本達到預期。6 結束語 采用fpga設計并實現了一種圖像采集系統(tǒng),

22、大幅減少了電路板的尺寸,節(jié)約了成本,同時增加了設計的靈活性和系統(tǒng)的可靠性,充分應用fpga快速并行處理數據的特性,在產生同步信號的同時送出像素數據。嵌入式內核nios ii的使用,解決了其他系統(tǒng)實時圖像顯示的體積與速度問題,擴展了應用范圍。 (全文完)參考文獻:1 潘 松、黃繼業(yè): eda技術實用教程,科學出版社,2003.5,p23-p282 楊 靜: 電子設計自動化,高等教育出版社,2004.7,p32-p363 張文愛:eda技術與fpga應用設計,電子工業(yè)出版社,2012.1,p25-p484 楊立英:電子電路eda技術與應用,清華大學出版社,2011.1,p43-p865 徐志軍、徐

23、光輝:vga在cpld/fpga的開發(fā)與應用,電子工業(yè)出版社,2002.4,p12-p166 黃智偉: fpga系統(tǒng)設計與實踐,電子工業(yè)出版社,2005.1,p66-p697 潘 松、王國棟:vhdl實用教材(修訂版),電子科技大學出版社,2001.7,p48-p528 孟憲元:fpga嵌入式系統(tǒng)設計,電子工業(yè)出版社,2007.10,p56-p649 褚振勇、齊 亮、田紅心:fpga設計及應用,高等教育出版社,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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論