版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 鄭州輕工業(yè)學院</b></p><p><b> 可編程數(shù)字系統(tǒng)設(shè)計</b></p><p> 題 目 基于FPGA的I2C接口程序?qū)崿F(xiàn)</p><p> 給予FPGA的I2C接口程序?qū)崿F(xiàn)</p><p><b> 摘 要</b>
2、;</p><p> 串行擴展接口的發(fā)展是新一代單片機技術(shù)的顯著特點,其中I2C 總線功耗低,結(jié)構(gòu)簡單,使用靈活,被廣泛應(yīng)用于視頻、音像等各類設(shè)備中。</p><p> 本課題首先研究了IIC 總線的規(guī)范,簡要介紹了Quartus Ⅱ設(shè)計平臺,以及FPGA 的設(shè)計流程。在此基礎(chǔ)上,重點介紹了IIC 接口的總體設(shè)計方案,詳細描述時序狀態(tài)機的工作原理和Verilog HDL 語言的實現(xiàn),以
3、及在Quartus Ⅱ平臺上的時序仿真。本系統(tǒng)采用了自頂向下的設(shè)計方法,利用了Verilog HDL 語言的結(jié)構(gòu)描述風格,把整個設(shè)計分成6 個模塊,時鐘分頻模塊,寄存器組模塊,數(shù)據(jù)接收模塊,數(shù)據(jù)發(fā)送模塊,輸出緩沖模塊,時序控制模塊,頂層模塊也采用語言描述。在QuartusⅡ平臺上,實現(xiàn)系統(tǒng)的功能和仿真。</p><p> 關(guān)鍵詞 現(xiàn)場可編程邏輯門陣列 IIC總線 狀態(tài)機 時序仿真</p><
4、p><b> 1.緒論 </b></p><p> 1.1 IIC總線的優(yōu)點 </p><p> 作為一種串行總線,IIC總線雖沒有并行總線的數(shù)據(jù)吞吐能力,但它具有如下優(yōu)點:</p><p> 1、僅由兩根信號線組成,節(jié)省了芯片I/O、節(jié)省PCB面積、節(jié)省成本等。 </p><p> 2、總線上可同時掛接
5、多個器件,器件之間是靠不同的編址來區(qū)分的,而不需要附加的I/O線或地址譯碼部件。 </p><p> 3、總線可裁減性好。在原有總線連接的基礎(chǔ)上可以隨時新增或者刪除器件。 </p><p> 4、總線電氣兼容性好。IIC總線規(guī)定器件之間以開漏I/O互聯(lián),這樣,只要選取適當?shù)纳侠娮杈湍茌p易實現(xiàn)3V/5V邏輯電平的兼容,而不需要額外的轉(zhuǎn)換。 </p><p>
6、5、支持多種通信方式。一主多從是最常見的通信方式。此外還支持雙主機通信、多主機通信以及廣播模式等等。 </p><p> 6、兼顧高低速通信。IIC總線標準傳輸速率為100kbit/s,在快速模式下為400 kbps,高速模式下為3.4Mbit/s。IIC總線的通信速率也可以低至幾kbps以下,用以支持低速器件或者用來延長通信距離。 </p><p> IIC總線帶來的這些好處,得到了
7、廣大工程師的青睞。在通信,音/視頻,智能儀表、工控領(lǐng)域都得到了應(yīng)用。 </p><p> 1.2 課題的主要工作</p><p> 作為一款經(jīng)典的串行通訊總線,IIC總線接口IP核已被越來越廣泛的集成到SoC中。本文通過用Verilog HDL語言在FPGA上實現(xiàn)一個IIC總線接口,它可作為IP核集成到SOC中。研究內(nèi)容主要包括以下方面:</p><p> 1
8、、深入研究IIC協(xié)議規(guī)范。 </p><p> 2、用Verilog HDL硬件描述語言設(shè)計基于FPGA的IIC總線接口,做到數(shù)據(jù)傳輸能夠有序、有效地進行。 </p><p> 3、用QuartusⅡ軟件對每一個模塊進行編譯生成單個電路模塊。</p><p> 4、在QuartusⅡ平臺上,對設(shè)計進行分析、綜合、功能和時序仿真。 </p><
9、;p> 2 IIC總線協(xié)議研究 </p><p> 2.1 IIC總線概述 </p><p> 2.1.1 IIC總線簡介 </p><p> IIC總線支持任何IC生產(chǎn)過程,包括CMOS、NMOS、雙極性,用兩根信號線進行數(shù)據(jù)傳輸——串行數(shù)據(jù)線(SDA)和串行時鐘線(SCL)。它允許若干兼容器件(如存儲器、A/D和D/A轉(zhuǎn)換器,以及LED、LCD驅(qū)
10、動器等)共享總線。圖2.1是IIC總線結(jié)構(gòu)。</p><p> 圖2.1 典型的IIC總線結(jié)構(gòu) </p><p> 每個器件都有唯一的地址,而且都可以作為一個發(fā)送器或接收器,由器件的功能確定,。IIC總線上所有器件依靠SDA發(fā)送的地址信號尋址,不需要片選線。任何時刻總線只能由一個主器件控制,各從器件在總線空閑時啟動數(shù)據(jù)傳送,由IIC總線仲裁來決定哪個主器件控制總線。表2-1給出了II
11、C總線常用的術(shù)語定義。 </p><p> 表2-1 IIC總線術(shù)語定義 </p><p> 2.1.2 IIC總線的電氣特性與結(jié)構(gòu) </p><p> 在系統(tǒng)中,IIC總線的典型接法如圖2.2所示,注意連接時需要共地。SDA和SCL都是雙向線路,為了使總線上所有電路的輸出能實現(xiàn)“線與”功能,各個IIC總線的接口電路的輸出端必須是漏極開路或集電極開路結(jié)構(gòu),輸
12、出端必須接上拉電阻,上拉電阻一般取值3~10KΩ。</p><p> 圖2.2 IIC總線的器件連接 </p><p><b> 開漏結(jié)構(gòu)的好處是:</b></p><p> 1、當總線空閑時,這兩條信號線都保持高電平,因各設(shè)備都是開漏輸出,上拉電阻,使SDA和SCL線都保持高電平,不會消耗電流。任一設(shè)備輸出的低電平都使相應(yīng)的總線信號線
13、變低,即總線上的所有器件都達到高電子狀態(tài)時,IIC總線才能達到高電平,從而使總線上的高速器件和慢速器件工作同步。 </p><p> 2、電氣兼容性好。上拉電阻接5V電源就能與5V邏輯器件接口,上拉電阻接3V電源又能與3V邏輯器件接口。 </p><p> 3、因為是開漏結(jié)構(gòu),所以不同器件的SDA與SDA之間、SCL與SCL之可以直接相連,不需要額外的轉(zhuǎn)換電路。 </p>
14、<p> 2.2 IIC總線的位傳輸 </p><p> 由于IIC總線的器件有不同種類的工藝,邏輯“0”或“1”的電平不是固定的。在IIC總線每傳輸一位數(shù)據(jù)就有一個時鐘脈沖相對應(yīng),其邏輯“0”或“1”的信號電平取決于該節(jié)點的正端電源Vdd的電壓。 </p><p> 2.2.1 數(shù)據(jù)的有效性 </p><p> IIC總線數(shù)據(jù)傳輸時,在時鐘線
15、高電平期間數(shù)據(jù)線上必須保持穩(wěn)定的邏輯電平狀態(tài),高電平為數(shù)據(jù)1,低電平為數(shù)據(jù)0。只有在時鐘線為低電平時,才允許數(shù)據(jù)線上的電平狀態(tài)變化。如圖2.3所示。</p><p> 圖2.3 IIC總線上的數(shù)據(jù)有效性 </p><p> 2.2.2 總線數(shù)據(jù)傳輸?shù)钠鹗己徒K止 </p><p> IIC總線數(shù)據(jù)傳輸定義了兩種時序狀態(tài),分別為起始信號和終止信號,如圖2.4所示
16、。 啟始信號(START),當時鐘線SCL保持高電平期間,SDA由高電平向低電平切換,表示開始傳送數(shù)據(jù),終止信號(STOP),當時鐘線SCL保持高電平期間,SDA由低電平向高電平切換,表示停止傳送數(shù)據(jù)。 </p><p> 圖2.4 IIC總線上的起始和終止信號 </p><p> 起始信號與終止信號都是由主控制器產(chǎn)生,當IIC總線出現(xiàn)起始信號時,總線進入“忙”狀態(tài),當IIC總線上
17、出現(xiàn)結(jié)束信號時,總線進入“空閑”狀態(tài)。掛接在IIC總線上的主從設(shè)備通過檢測起始信號和結(jié)束信號判斷總線的“忙”、“空閑”狀態(tài)。由于IIC總線協(xié)議不定義優(yōu)先級概念,因此任何新進程的開始必須等待當前進程的結(jié)束。使用硬件接口可以很容易地檢測起始和結(jié)束信號,沒有這種接口的微機必須以每時鐘周期至少兩次對SDA取樣以檢測這種變化。 </p><p> 2.2.3 總線信號的時序 </p><p>
18、為了保證IIC總線數(shù)據(jù)的可靠傳送,對總線上的信號時序做了嚴格的規(guī)定,下面各圖中對主要信號時序做了定義。 </p><p> 圖2.5 主機向從機發(fā)送一個字節(jié)的時序 </p><p> 圖2.5所表示的是主機向從機發(fā)送一個字節(jié)的時序,主機向傳送一個7位的地址,第8位是讀/寫位。在第9個時鐘時,從機發(fā)出一個響應(yīng)信號,接著傳輸8位的數(shù)據(jù),相應(yīng)地從機繼續(xù)發(fā)送一個響應(yīng)位,然后主機在時鐘線
19、保持高電平期間,拉高數(shù)據(jù)線,數(shù)據(jù)傳輸停止。 </p><p> 圖2.6 主機向從機接收1個字節(jié)數(shù)據(jù)的時序 </p><p> 圖2.6所表示的主機向從機接收一個字節(jié)的時序,前面8個時鐘周期與發(fā)送時序相同,不同的是在傳輸8位數(shù)據(jù)后,由主機發(fā)送響應(yīng)信號,然后啟動停止信號。</p><p> 2.3 IIC總線上的數(shù)據(jù)傳輸 </p><p&g
20、t; 2.3.1總線的數(shù)據(jù)傳輸格式 </p><p> 圖2.10所示的是一個完整的數(shù)據(jù)傳輸格式。按照規(guī)定,在起始條件(S)之后,發(fā)送一個7位的從機地址。緊跟著的第8位是數(shù)據(jù)方向位(R/W),數(shù)據(jù)方向表明主控器和被控器的數(shù)據(jù)傳輸方向?!?’表示主控器發(fā)送數(shù)據(jù)(寫),‘1’表示請求接收數(shù)據(jù)(讀)。數(shù)據(jù)傳輸一般由主機產(chǎn)生停止位(P)終止。在這種傳輸中,也可以有不同的讀/寫格式相結(jié)合。下面介紹3種傳輸格式, &
21、lt;/p><p> 1、主控制器寫操作 </p><p> 主機-發(fā)送器向從機發(fā)送n個數(shù)據(jù)字節(jié),方向不變。</p><p> 注 1-7是地址位,8位是讀寫位,第9位是響應(yīng)位 </p><p> 圖2.10 完整的數(shù)據(jù)傳輸 </p><p> 2、主控制器讀操作 </p><p>
22、 在第一個字節(jié)后,主控制器立即讀從控制器。在第一次響應(yīng)后,主控制器,發(fā)送器變成了主控制器,接收器,從控制器,接收器變成了從控制器,發(fā)送器。第一次響應(yīng)仍由從控制器產(chǎn)生。之前發(fā)送了一個不響應(yīng)信號(/A)的主機產(chǎn)生停止條件。 </p><p> 3、主控制器的讀寫操作 </p><p> 在數(shù)據(jù)傳輸過程中需要改變傳輸方向操作,這時起始條件和從控制器地址都會被重復(fù),但R/W位取反,它的方向由尋
23、址字節(jié)的方向位決定。如果主控制器接收器發(fā)送一個重復(fù)起始條件,它之前應(yīng)該發(fā)送一個不響應(yīng)的信號/A,每個字節(jié)后都跟著一個響應(yīng)位,在序列中用A或/A模塊表示。尋址字節(jié)只表明器件地址及傳送方向,器件內(nèi)部的n個數(shù)據(jù)地址可以在I2C總線數(shù)據(jù)操作格式中用第一個數(shù)據(jù)字節(jié)指定。I2C總線被控制器在接收到起始信號后都必須復(fù)位他們的總線邏輯,以便對將要開始的被控制器地址的傳送進行預(yù)處理。 </p><p> 2.4重復(fù)起始條件 &l
24、t;/p><p> 主機與從機進行通信時,有時需要切換數(shù)據(jù)的收發(fā)方向。例如,訪問某一具有I2C總線接口的EEPROM存儲器時,主機先向存儲器輸入存儲單元的地址信息,發(fā)送數(shù)據(jù),,然后再讀取其中的存儲內(nèi)容,接收數(shù)據(jù),。在切換數(shù)據(jù)的傳輸方向時,可以不必先產(chǎn)生停止條件再開始下次傳輸,而是直接再一次產(chǎn)生開始條件。I2C總線在已經(jīng)處于忙的狀態(tài)下,再一次直接產(chǎn)生起始條件的情況被稱為重復(fù)起始條件。重復(fù)起始條件常常簡記為Sr。正常的
25、起始條件和重復(fù)起始條件在物理波形上并沒有什么不同,區(qū)別僅僅是在邏輯方面。在進行多字節(jié)數(shù)據(jù)傳輸過程中,只要數(shù)據(jù)的收發(fā)方向發(fā)生了切換,就要用到重復(fù)起始條件。 </p><p> 數(shù)據(jù)傳輸?shù)慕Y(jié)束信號由主IIC發(fā)出。剛剛結(jié)束一個進程的用戶有立即啟動一個新進程的優(yōu)先權(quán),該用戶可以不發(fā)出結(jié)束信號而直接發(fā)出一個新的啟動信號和另一個從IIC地址,從而不給其他用戶申請總線的機會,以保持自己繼續(xù)使用總線的權(quán)利。 </p>
26、;<p> 3 設(shè)計環(huán)境和設(shè)計方法 </p><p><b> 3.1 設(shè)計環(huán)境 </b></p><p> 本文中IIC總線接口的設(shè)計是利用Altera公司的設(shè)計軟件Quartus II,用Verilog HDL語言編程實現(xiàn)的。仿真部分采用Quartus II+Modelsim。 </p><p> Quartus II
27、軟件是Altera提供的完整的多平臺設(shè)計環(huán)境,可以輕易地滿足特定地設(shè)計需求,是SOPC設(shè)計的綜合性環(huán)境。</p><p> 硬件描述語言(HDL)是一種形式化方法來描述數(shù)字電路和設(shè)計數(shù)字邏輯系統(tǒng)的語言,它是硬件設(shè)計人員與EDA工具之間溝通的橋梁,其主要目的是用來編寫設(shè)計文件,建立電子系統(tǒng)行為級的模擬類型。</p><p> 3.2用Verilog HDL設(shè)計可綜合的狀態(tài)機 </
28、p><p> 基于狀態(tài)機的設(shè)計要點: </p><p> (1)一個完備的狀態(tài)機應(yīng)該具有初始狀態(tài)和默認狀態(tài)。當芯片加電或者復(fù)位后,狀態(tài)機能夠自動將所有的判斷條件復(fù)位,并進入初始狀態(tài),起始狀態(tài)是指電路復(fù)位后所處的狀態(tài),選擇一個合理的起始狀態(tài)將使整個系統(tǒng)更簡捷高效。當轉(zhuǎn)移條件不滿足,或者狀態(tài)發(fā)生突變時,狀態(tài)機進入一個默認(default)狀態(tài),能保證邏輯不會陷入“死循環(huán)”,這是對狀態(tài)機健壯性的
29、一個重要要求,即自動恢復(fù)功能。在case語句的最后,不要忘了加上default分支語句,以避免鎖存器的產(chǎn)生。 </p><p><b> (3)建模 </b></p><p> 用兩條always語句對其建模比較好:一個always語句用于組合邏輯建模(既包括次態(tài)邏輯,也包括輸出邏輯),一個always語句用于時序邏輯建模。組合邏輯建模采用阻塞式賦值,時序邏輯建模
30、采用非阻塞式賦值。 </p><p> (4)時序方式選擇 </p><p> 根據(jù)觸發(fā)條件的不同,時序邏輯電路可以分為異步時序和同步時序邏輯。在異步時序邏輯中觸發(fā)條件很隨意,任何時刻都有可能發(fā)生,所以記憶狀態(tài)的觸發(fā)器輸出在任何時刻都有可能發(fā)生,而同步時序邏輯中表示狀態(tài)的觸發(fā)器輸出只能在惟一確定的觸發(fā)條件發(fā)生時刻改變,例如只能由時鐘的上升沿或下降沿觸發(fā)。同步時序邏輯的觸發(fā)輸入至少可以維
31、持一個時鐘周期后才會發(fā)生第二次觸發(fā),利用這一段時間,即在下一次觸發(fā)信號來到前,為電路的狀態(tài)改變創(chuàng)造了一個穩(wěn)定可靠的條件。因此,同步時序邏輯比異步時序邏輯具有更可靠、更簡單的邏輯關(guān)系。 </p><p> 目前,綜合工具只支持同步時序邏輯的設(shè)計,用Verilog設(shè)計可綜合的狀態(tài)機也都使用同步時序邏輯。實用的狀態(tài)機都應(yīng)設(shè)計為由唯一時鐘邊沿觸發(fā)的同步運行方式。</p><p> 4 IIC總
32、線接口設(shè)計 </p><p> IIC總線接口的設(shè)計是整個系統(tǒng)設(shè)計的關(guān)鍵之一,從本章起,開始介紹IIC總線接口的內(nèi)部模塊的設(shè)計。在接口模塊設(shè)計中,主要介紹模塊要實現(xiàn)的功能和設(shè)計的思路,并給出用QuartusⅡ軟件對每一個模塊編譯生成的單個電路模塊。 </p><p><b> 4.1 實現(xiàn)功能 </b></p><p> 本文主要通過是用
33、Verilog HDL語言在FPGA上實現(xiàn)IIC總線接口,該接口接收來自高速設(shè)備或片上總線的讀寫命令信號、地址信號、并行數(shù)據(jù)信號,并把它們轉(zhuǎn)換為相應(yīng)的串行信號發(fā)送到Slave器件中去,它還發(fā)送應(yīng)答信號,以便讓主器件來調(diào)節(jié)發(fā)送或接收數(shù)據(jù)的速度移配合從器件的接收,寫,和發(fā)送,讀,數(shù)據(jù)。鑒于IIC總線的規(guī)范,其接口主要完成的功能如下:</p><p> 1、具有軟件可編程系統(tǒng)時鐘頻率 </p><
34、p> 2、軟件可編程響應(yīng)位 </p><p> 3、啟動/停止/重啟/響應(yīng)各種觸發(fā)狀態(tài) </p><p><b> 4、支持系統(tǒng)擴展 </b></p><p> 5、僅支持時鐘同步,不支持仲裁 </p><p> 6、隨機讀取總線數(shù)據(jù)和狀態(tài) </p><p> 接口定義了2個傳輸
35、速度:</p><p> 標準模式——100 Kbps </p><p> 快速模式——400 Kbps </p><p> 4.2 IIC總線接口的頂層設(shè)計 </p><p> 為了實現(xiàn)和IIC器件的通訊,該IIC接口一方面要通過數(shù)據(jù)總線與微處理器交換數(shù)據(jù),接收來自微處理器的控制信號,命令與數(shù)據(jù),實現(xiàn)IIC接口與微處理器的通訊
36、,另一方面要通過IIC總線與IIC器件交換數(shù)據(jù),發(fā)送IIC器件的數(shù)據(jù)和狀態(tài)響應(yīng)到微處理器,使它們之間能夠進行通訊。 </p><p> 根據(jù)據(jù)總線接口要完成的功能,采用自上而下的設(shè)計方法,綜合考慮,設(shè)計如下: </p><p> 1、時鐘分頻模塊,由于通常FPGA的系統(tǒng)外部時鐘輸入都很高,如50MHz,,而IIC總線接口協(xié)議規(guī)定數(shù)據(jù)傳輸速率在標準模式下為100Kbit/s,快速模式下為
37、400 kbit/s及高速模式下為3.4 Mbit/s。為了能產(chǎn)生正確的數(shù)據(jù)傳輸時序,需要一時鐘分頻器對輸入時鐘進行分頻,然后再作為時序控制器的時鐘。通過該模塊實現(xiàn)頻率的可編程,產(chǎn)生總線工作時鐘;</p><p> 接收數(shù)據(jù)模塊,接受來自微處理器的數(shù)據(jù)信號,同時輸出一個使時序控制模塊工作的觸發(fā)信號,并反饋給處理器一個響應(yīng)信號,告訴處理器,已經(jīng)接收完數(shù)據(jù); </p><p> 3、時序控
38、制模塊,控制整個系統(tǒng)工作的時序,并把8位并行數(shù)據(jù)轉(zhuǎn)換成串行</p><p> 4、發(fā)送數(shù)據(jù)模塊,反饋總線的工作信息; </p><p> 5、輸出緩沖器,是一個三態(tài)的緩沖器,可為總線時鐘和數(shù)據(jù)信號提供開漏極輸出; </p><p> 6、寄存器組,包括了3個寄存器,各部分的信息如表4-1所示。 </p><p> 表4-1 IIC總
39、線接口寄存器 </p><p> 外部處理器發(fā)送出控制信號和地址信號,不同的地址信號指向不同的寄存器,進入不同的讀寫狀態(tài)。當?shù)刂沸盘柺?0時,指向字地址寄存器,處理器進入讀/寫狀態(tài),把數(shù)據(jù)信號寫入字地址寄存器或者從寄存器讀出,當?shù)刂沸盘柺?1,10時,外部處理器分別讀取數(shù)據(jù)寄存器和狀態(tài)寄存器。 </p><p> parameter w_add=2'b00;//地址寄存器
40、 </p><p> parameter d_add=2'b01;//數(shù)據(jù)寄存器 </p><p> parameter s_add=2'b10;//狀態(tài)寄存器 </p><p> 按照設(shè)計的要求,需要8位數(shù)據(jù)線,2位地址線,時鐘線,復(fù)位,使能信號線,讀寫命令線,還有反饋信息的響應(yīng)線以及一位串行時鐘線和一位串行數(shù)據(jù)線。其詳細的輸入輸
41、出接口信號及其功能如表4-2所示,l表示信號低電位有效,在整個設(shè)計中都應(yīng)用了這個規(guī)則,其中cs_l是芯片的使能信號,和clk信號是同步的,只有當它有效的時候,其它的地址、復(fù)位和命令信號才能啟動。 </p><p> 表4-2 IIC總線接口信號表 </p><p> 綜上所述,整個設(shè)計分為6個模塊,時鐘分頻器、時序控制器、數(shù)據(jù)接收器、數(shù)據(jù)發(fā)送器、輸出緩沖器、寄存器組。其結(jié)構(gòu)如圖4.1所
42、示。 </p><p> 圖4.1 IIC總線接口結(jié)構(gòu)框圖 </p><p> 4.3 內(nèi)部模塊的設(shè)計和Verilog HDL實現(xiàn) </p><p> 4.3.1 時鐘分頻器 </p><p> 由于通常的FPGA系統(tǒng)外部時鐘輸入都很高,如50MHz,,而IIC總線接口協(xié)議規(guī)定數(shù)據(jù)傳輸速率在標準模式下為100Kbit/s,快速模式下
43、為400 kbit/s。為了能產(chǎn)生正確的數(shù)據(jù)傳輸時序,由時鐘分頻寄存器對輸入時鐘進行分頻再作為時序控制器的時鐘。8 bit的計數(shù)器可以滿足大多數(shù)情況下的使用,但是如果微處理器的時鐘比較大,就需要更大的計數(shù)器。同樣地,如果IIC總線要求工作速度比較大,那么就需要一個相對小的計數(shù)器。系統(tǒng)復(fù)位時,計數(shù)器清零,當時鐘上升沿時,計數(shù)器加1。在本設(shè)計中,假定外部時鐘為50 MHz,總線工作在標準模式100 KHz,基于Verilog同步設(shè)計的需要,
44、本地時鐘一般為SCL時鐘的整數(shù)倍,這里取2倍。可以求得計數(shù)器值NUM=50M/(100K*2)=250,換算為16進制為FA。通過軟件編程可以實現(xiàn)數(shù)據(jù)傳輸速率的控制,</p><p> 其模塊的RTL級描述如圖4.2, </p><p> 圖4.2 時鐘分頻模塊RTL級描述 </p><p> 用Quartus II軟件編譯仿真之后生成一個器件模塊圖,其接口
45、電路模塊圖形如圖4.3。 </p><p> 圖4.3 時鐘分頻模塊圖 </p><p> 4.3.2 數(shù)據(jù)接收模塊 </p><p> 數(shù)據(jù)接收模塊既要接受來自微處理器的數(shù)據(jù)信號,同時也要輸出反饋信號和觸發(fā)信號。因此,該模塊需要一個字地址寄存器,同時要產(chǎn)生狀態(tài)機的觸發(fā)信號。當系統(tǒng)復(fù)位時,初始化輸出的字地址,在使能信號和命令信號同時有效的情況下,當?shù)刂沸盘枮?/p>
46、00,指向字地址寄存器時,輸入的8位數(shù)據(jù)以字地址信息存儲起來,并觸發(fā)一個i2c_go命令,這個命令是時序控制模塊工作的觸發(fā)信號,并反饋給處理器一個響應(yīng)信號,告訴處理器,已經(jīng)接收完數(shù)據(jù)。</p><p> 其模塊的RTL級描述如圖4.4, </p><p> 圖4.4 接收寄存器模塊RTL級描述 </p><p> 用Quartus II軟件生成一個電路模塊
47、圖如圖4.5所示, </p><p> 圖4.5 接收寄存器模塊 </p><p> 4.3.3發(fā)送寄存器 </p><p> 在這個模塊里包括三個寄存器,字地址寄存器,數(shù)據(jù)寄存器,狀態(tài)寄存器,根據(jù)處理器的地址信號,指向不同的寄存器,輸出不同的信息,把總線的狀態(tài)反饋給處理器。當指向數(shù)據(jù)寄存器時,把時序控制模塊重復(fù)讀取的總線上的數(shù)據(jù)信息以8位數(shù)據(jù)的形式反饋給處
48、理器,如字地址,IIC器件的數(shù)據(jù),狀態(tài)等。字地址和數(shù)據(jù)都是8位的信號直接輸出,當處理器的命令是指向狀態(tài)寄存器時,輸出的8位的數(shù)據(jù)中,各個位的定義如表4-3所示:</p><p> 表4-3狀態(tài)寄存器位功能表</p><p> 用Quartus II軟件生成一個電路模塊圖如圖4.8, </p><p> 圖4.8 發(fā)送寄存器模塊 </p><
49、;p> 4.3.4 時序控制模塊 </p><p> 時序控制模塊是接口的核心部分,它控制著整個系統(tǒng)的工作過程、數(shù)據(jù)傳輸,及通過控制SCL和SDA信號線來觸發(fā)開始和停止信號,該模塊包含一個狀態(tài)機,用于控制系統(tǒng)工作的時序,同時當主機要把數(shù)據(jù)寫入IIC總線上的器件時,因為數(shù)據(jù)寄存器的位寬是8bit,而IIC總線上的數(shù)據(jù)位寬是1bit,所以必須經(jīng)過并串轉(zhuǎn)換。即該模塊具有如下功能:</p><
50、;p> 1、控制IIC總線的周期;</p><p> 2、對輸入數(shù)據(jù)進行并/串轉(zhuǎn)換; </p><p> 3、對總線上的數(shù)據(jù)進行轉(zhuǎn)換;</p><p> 4、觸發(fā)IIC的時鐘信號;</p><p> 5、觸發(fā)IIC的數(shù)據(jù)信號; </p><p> 6、觸發(fā)IIC總線的狀態(tài)信號。 </p>
51、<p> 采用FPGA模擬IIC總線,由IIC總線規(guī)則可以看出,IIC在傳輸過程中有5個固定的狀態(tài),空閑、開始、響應(yīng)、接收/發(fā)送、停止。傳輸?shù)倪^程也就是狀態(tài)間進行變換的過程,因此很自然聯(lián)想到在編程時使用狀態(tài)機的方法。同時狀態(tài)間轉(zhuǎn)換要受到來自微控制器的信號的控制,因此需要采用Mealy型狀態(tài)機。并串轉(zhuǎn)換器,在這個模塊里,通過8 bit計數(shù)器來實現(xiàn)。為了對運行狀態(tài)進行更一步的細分,在本設(shè)計中定義了15個狀態(tài),下面把各個狀態(tài)的定
52、義如下解釋: </p><p> idle IIC總線空閑 </p><p> en_clk 時鐘啟動 </p><p> start1,start2,stop1 開始和停止 </p><p> dev_add1,dev_add2 傳
53、輸器件地址 </p><p> ack1,ack2,ack3,ack4 發(fā)送響應(yīng) </p><p> w_add 字地址 </p><p> wait1 等待 </p><p> dis_clk1 暫停 </p
54、><p> data 傳輸數(shù)據(jù) </p><p> 當系統(tǒng)復(fù)位時,初始化狀態(tài)為idle,當復(fù)位無效,地址信號為00時,指向字地址寄存器,這時產(chǎn)生一個啟動狀態(tài)機的信號,狀態(tài)機由空閑狀態(tài)進入開始狀態(tài),當分頻器過來的脈沖信號從低向高跳變時,傳輸開始,同時位計數(shù)器也開始啟動讀總線的動作一定要讀完一個字節(jié)才結(jié)束。那么先傳輸?shù)氖?位器件地址,并產(chǎn)生一個響應(yīng)位,
55、然后傳輸8位字地址和數(shù)據(jù),如果有中斷進入等待或暫停狀態(tài),需要重新狀態(tài)機啟動??刂破鞲鶕?jù)所處狀態(tài)讀寫總線器件。主機要讀取總線器件上的數(shù)據(jù)也必須通過狀態(tài)機來實現(xiàn),當狀態(tài)機處于數(shù)據(jù)狀態(tài)時,如果這時8位計數(shù)器的值為5,那么讀出數(shù)據(jù)的第5位就是當時SDA上的邏輯值。以此類推,其它的同樣。 其狀態(tài)機程序見附錄。</p><p> 簡單的流程圖如圖4.9所示。 </p><p> 圖4.9 狀態(tài)機
56、工作流程圖 </p><p> 其生成的RTL級描述圖比較龐大,因此就不貼出了。用Quartus II軟件生成一個電路模塊圖如圖4.10。</p><p> 圖4.10 時序控制模塊圖 </p><p> 4.3.5輸出緩沖器 </p><p> 根據(jù)IIC總線的傳輸規(guī)范,總線的電氣特性為開漏極輸出驅(qū)動,但是多數(shù)的可編程器件不提供
57、開漏極輸出特性,為了使SDA,SCL便于移植,均使用了三態(tài)驅(qū)動模用Quartus II軟件生成一個電路模塊圖如圖4.12。</p><p> 圖4.12 輸出緩沖模塊 </p><p> 4.3.6 頂層文件 </p><p> 頂層文件可以用電路圖的輸入方式把5個子模塊連接起來,也可以通過硬件語言的例化語句來描述,在本設(shè)計中主要運用語言描述的方法。<
58、/p><p> 5 IIC總線接口的仿真</p><p><b> 5.1 驗證流程 </b></p><p> IIC總線接口的驗證流程如圖5.1所示 。 </p><p> 圖5.1 IIC總線接口驗證流程 </p><p> 在圖5.1中,功能仿真就是常說的前仿真,用于檢查RTL代碼
59、的正確性,綜合后仿真用于檢查網(wǎng)表是否正確,疏忽大意或代碼風格不嚴謹很容易導(dǎo)致綜合出來的網(wǎng)表的功能和預(yù)想不一致,綜合后仿真能發(fā)現(xiàn)這樣的問題。PAR后仿真的意思是布局布線,Place and Route,后仿真,也就是常說的后仿真或時序仿真,它可以檢查網(wǎng)表和時序的正確性。</p><p><b> 5.2 整體構(gòu)思 </b></p><p> 為了確認IIC總線接口是
60、否能夠正確運行,仿真驗證時需要建立Testbench(測試環(huán)境),IIC總線接口驗證的環(huán)境的結(jié)構(gòu)如圖5.2所示。整個結(jié)構(gòu)設(shè)計分為三個部分:第一部分是主設(shè)備仿真模塊,第二部分是IIC總線接口可仿真綜合模塊,第三部分是從設(shè)備仿真模塊。然后用一個測試臺程序?qū)⑷齻€模塊連接起來,并產(chǎn)生激勵信號對IIC模塊的功能進行仿真測試。</p><p> 5.3 測試模塊搭建 </p><p> 1、mic
61、ro module: 微處理器部分可以采用ZYE1502D實驗箱上有的AT89C51單片機,或者編寫Testbench實現(xiàn)。為了仿真方便,在仿真時采用Testbench搭建。該micro模型給出了微處理器與IIC接口通訊的仿真程序。該模型能產(chǎn)生相應(yīng)的讀寫信號,地址信號,并行數(shù)據(jù)信號,并能接收從器件的應(yīng)答信號,來調(diào)節(jié)發(fā)送或接收數(shù)據(jù)的速度。在這個程序中,為了保證IIC接口的正確性,可以進行完整的測試,寫操作時輸入的地址信號和數(shù)據(jù)信號的數(shù)據(jù)由
62、于較少,直接寫入程序中。讀操作時,將讀數(shù)對比可以驗證程序的正確性。該程序通過調(diào)用四個任務(wù)實現(xiàn)上述功能,write,monitor_iic_rdy,read_data,kill_time。 </p><p> 2、iic_slave module: 該iic_slave模型提供了一個IIC存儲器。該從模型能夠偵測起始和終止命令,在地址控制字時序后產(chǎn)生ACK,在數(shù)據(jù)讀之后置IIC總線三態(tài)。另外它通過比較“Slav
63、e Data Receive on Write”和“Slave Data Transmitted on Read”的信息,實現(xiàn)仿真時數(shù)據(jù)正確性的檢查。 </p><p> 3、clk_rst module:clk_rst模塊給測試平臺提供時鐘和復(fù)位信號。編輯clk_period參數(shù)更改時鐘頻率,改變reset_time參數(shù)就能改變復(fù)位信號的有效時間。 </p><p&
64、gt; 4、iic_tb,iic_tb是測試臺的頂層文件。它將IIC接口模型iic和測試程序的模型clk_rst、micro、iic_slave實例化,并連接起來。其主要程序:</p><p> i2c I2C(.data(data),.addr(addr),.rst_l(rst_l),.clock(clock),.cs_l(cs_l), </p><p> .ack_l(ack_l
65、),.rd_wr_l(rd_wr_l),.scl_pin(scl_pin),.sda_pin(sda_pin)); </p><p> clk_rst CLK(.clk(clock),.rst_l(rst_l)); </p><p> micro MICRO(.clk(clock),.rst_l(rst_l),.data(data),.addr(addr),.cs_l(cs_l), &
66、lt;/p><p> .ack_l(ack_l),.rd_wr_l(rd_wr_l)); </p><p> i2c_slave SEP(.sda(sda_pin),.scl(scl_pin)); </p><p><b> 5.4時序仿真</b>
67、</p><p> 做功能仿真時,在Modelsim中建立工程,把IIC的所有verilog hdl文件,以及Testbench用到的verilog文件加入到工程中,然后編譯仿真。仿真波形如圖5.2,5.3所示。 </p><p> 圖5.2 iic_rst 仿真圖 </p><p> 圖5.3 功能仿真波形 </p><p> 由
68、輸出結(jié)果可只,微處理器發(fā)送寫地址10100000,響應(yīng)后寫入數(shù)據(jù)55H,響應(yīng)后重新發(fā)啟動信號,發(fā)送讀地址10100001,響應(yīng)后讀出數(shù)據(jù),進行比較。同樣操作,寫入數(shù)據(jù)AAH并讀出比較,結(jié)果兩次數(shù)據(jù)讀回均正確無誤。 </p><p><b> 結(jié)束語</b></p><p> 本課題設(shè)計了基于FPGA的IIC接口的數(shù)個模塊,時鐘模塊、接收模塊、發(fā)送模塊、時序控制模塊
69、和輸出緩沖模塊,其中時序控制模塊是設(shè)計的重點和難點。每個模塊都通過了功能仿真和時序仿真,仿真結(jié)果表明,各個模塊均完成了相應(yīng)的邏輯功能。</p><p> 整個設(shè)計都采用了同步方式,而且沒有使用特定公司的技術(shù)和IP核,這使得設(shè)計可以廣泛地重用,但也存在著可改進之處:</p><p> 1、需要提高Verilog HDL語言代碼的效率,要力求用最簡潔,可綜合的描述方式描述模塊的結(jié)構(gòu)和功能,
70、以使得芯片面積、功耗減小。 </p><p> 2、在基于FPGA的器件上,進行邏輯綜合過程中,許多約束條件是相互矛盾的,這需要反復(fù)設(shè)定條件,以求電路結(jié)構(gòu)得到優(yōu)化。</p><p> 基于Verilog HDL語言的可移植性,及不依賴器件的特性,設(shè)計者能在更抽象的層次上把握和描述系統(tǒng)結(jié)構(gòu)和功能特性,使設(shè)計更具靈活性。由于FPGA器件的快速發(fā)展,其容量可以將各種外圍器件的接口集成到FPG
71、A內(nèi)部,這樣可以實現(xiàn)設(shè)計的小型化,低功耗,并且降低了設(shè)計的復(fù)雜度,而且利用FPGA在線可編程特點,可以增加系統(tǒng)設(shè)計的靈活度,提高了設(shè)計效率。 </p><p> 在課題期間,通過不斷地學習、探索和實踐,掌握了Verilog HDL設(shè)計技術(shù)及其FPGA的應(yīng)用,提高了實際的工作能力和創(chuàng)新能力。 </p><p> 最后感謝我的老師和同學們,在他們的監(jiān)督和幫助下讓我順利完成了本次的課程設(shè)計。
72、</p><p><b> 參考文獻 </b></p><p> [1]蘇建志,王冰鋒.IIC總線及其應(yīng)用.現(xiàn)代電子技術(shù),2004,22.</p><p> [2]趙輝.IIC總線技術(shù)及其應(yīng)用實例.微型電腦應(yīng)用,2005,31(4):61.</p><p> [3]周立功.IIC總線概要.產(chǎn)品應(yīng)用手冊,2006,
73、3.</p><p> [4]石宗義.總線的時序分析及其模擬[J].太原理工大學學報,2004,35(1):53. </p><p> [5]朱明程,黃強.FPGA 動態(tài)可重構(gòu)邏輯設(shè)計初探.半導(dǎo)體技術(shù),2000,25(4):19.</p><p> [6]褚振勇.FPGA 設(shè)計及應(yīng)用[M].西安:西安電子科技大學出版社,2006.</p><
74、;p> [7]王毓銀.數(shù)字電路邏輯設(shè)計[M].北京:高等教育出版社,1999.</p><p> [8]李洪偉.基于QuartusII 的FPGA/CPLD 設(shè)計[M].北京:電子工業(yè)出版社,2006.</p><p><b> 附錄1</b></p><p><b> 時鐘分頻器程序</b></p&g
75、t;<p> module iic_clk(clock,rst_l,scl_cnt_en,scl_tick); </p><p><b> //端口列表 </b></p><p> input clock;//外部系統(tǒng)處理器時鐘 </p><p> input rst_l;//外部復(fù)位信號,低有
76、效 </p><p> input scl_cnt_en;//來自時序控制器的計數(shù)使能信號 </p><p> output scl_tick;//狀態(tài)機的工作時鐘 </p><p> //registers&wires </p><p> reg scl_tick; </p&g
77、t;<p> reg [7:0] cntr;//分頻計數(shù)值 </p><p><b> //分頻 </b></p><p> always@(posedge clock or negedge rst_l) </p><p> if(!rst_l) </p><p> cntr<= #1
78、 8'b0; </p><p> else if(scl_cnt_en) </p><p> cntr<= #1 8'b0; </p><p><b> else </b></p><p> cntr<=8'b0; </p><p> always@(
79、posedge clock or negedge rst_l) </p><p> if(!rst_l) </p><p> scl_tick<= #1 1'b0; </p><p> else if(cntr= =8'hFA) </p><p> cl_tick<= #1 1'b1; </p
80、><p><b> else </b></p><p> scl_tick<= #1 1'b0; </p><p> endmodule </p><p><b> 附錄2</b></p><p><b> 數(shù)據(jù)接收模塊程序 </b>
81、</p><p> `timescale 1 ns/100 ps </p><p> module iic_wreg(data, addr, rst_l, clock, scl_cnt_en, rd_wr_l, cs_l, wrd_add,iic_go, ack_l); //端口列表 </p><p> input [7:0] data;//處理器輸出的數(shù)
82、據(jù)碼 </p><p> input [1:0] addr;//處理器輸出的地址碼 </p><p> input rst_l;//復(fù)位信號 </p><p> input clock;//系統(tǒng)時鐘 </p><p> input cs_l, scl_cnt_en;//系統(tǒng)使能信號 <
83、;/p><p> input rd_wr_l;//命令信號 </p><p> output [7:0] wrd_add;//字地址 </p><p> output iic_go;//iic總線啟動信號 </p><p> output ack_l;//反饋給處理器的響應(yīng)信號 </p>
84、;<p><b> //寄存器型 </b></p><p> reg [7:0] wrd_add; </p><p> reg iic_go; </p><p> reg ack_l; </p><p><b> //寄存器參數(shù) </b&g
85、t;</p><p> parameter w_add=2'b00;//地址寄存器 </p><p> parameter d_add=2'b01;//數(shù)據(jù)寄存器 </p><p> parameter s_add=2'b10;//狀態(tài)寄存器 </p><p> always@(posedge
86、 clock or negedge rst_l) </p><p> if(!rst_l) </p><p> wrd_add <= #1 8'b0; </p><p> else if(cs_l&&!rd_wr_l&&(addr= =w_add)) </p><p> wrd_add &
87、lt;= #1 data; </p><p> always@(posedge clock or negedge rst_l) </p><p> if(!rst_l) </p><p> iic_go<= #1 1'b0; </p><p> else if(cs_l&&!rd_wr_l&&am
88、p;(addr= =w_add)) </p><p> iic_go<= #1 1'b1;//iic總線的啟動信號 </p><p> else if(scl_cnt_en) </p><p> iic_go<= #1 1'b0; </p><p><b> //反饋響應(yīng)信號 </b>
89、</p><p> always@(posedge clock or negedge rst_l) </p><p> if(!rst_l) </p><p> ack_l<= #1 1'b1; </p><p> else if(cs_l) </p><p> ack_l<= #1 1&
90、#39;b0; </p><p><b> else </b></p><p> ack_l<= #1 1'b1; </p><p> endmodule </p><p><b> 附錄3</b></p><p><b> 發(fā)送寄存器程序&
91、lt;/b></p><p> `timescale 1 ns/100 ps </p><p> module iic_rreg(wrd_add,iic_rdata,iic_rdy,iic_act,ack_err,addr,data_o); </p><p> input [7:0] wrd_add;//iic word address <
92、/p><p> input [7:0] iic_rdata;//iic read data </p><p> input iic_rdy;//iic status bit </p><p> input iic_act;//iic cycle active </p><p> input
93、 ack_err;//ack error </p><p> input [1:0] addr;//cpu address </p><p> output [7:0] data_o;//muxed cpu data output </p><p><b> //寄存器型 </b></p><p&g
94、t; reg[7:0] data_o;//muxed cpu data output </p><p><b> //參數(shù) </b></p><p> Parameter w_add=2'b00;//字地址寄存器 </p><p> parameter d_add=2'b01;//數(shù)據(jù)寄
95、存器 </p><p> parameter s_add=2'b10;//狀態(tài)寄存器 </p><p><b> //數(shù)據(jù)多用輸出 </b></p><p> always@(addr or wrd_add or ack_err or iic_rdata or iic_rdy) </p><p>
96、 case(addr) </p><p> w_add::data_o<= #1 wrd_add; </p><p> d_add::data_o<= #1 iic_rdata; </p><p> s_add:data_o<= #1{iic_rdy,ack_err,5'b0,iic_act}; </p><p&
97、gt; default:data_o<= #1{iic_rdy,ack_err,5'b0,iic_act}; </p><p><b> endcase </b></p><p> endmodule </p><p><b> 附錄4</b></p><p><b>
98、; 狀態(tài)機程序</b></p><p> `timescale 1 ns/100 ps </p><p> module iic_st(rst_l,clock,scl_tick,iic_go,wrd_add,sda_pin,sda,scl,scl_cnt_en, iic_rdy, iic_act, iic_rdata, ac
99、k_err); //端口列表 </p><p> input rst_l;//復(fù)位 </p><p> input clock;//系統(tǒng)時鐘 </p><p> input scl_tick;//scl的時鐘 </p><p> input iic_go;//啟動iic總線周期 </p&g
100、t;<p> input [7:0] wrd_add;//iic器件地址 </p><p> input sda_pin;//iic數(shù)據(jù)多用輸入 </p><p> output sda;//iic總線數(shù)據(jù)輸出 </p><p> output scl;//iic總線時鐘輸出 </p><p>
101、; output scl_cnt_en;//總線計數(shù)使能端 </p><p> output iic_rdy;//總線準備好 </p><p> output iic_act;//總線周期響應(yīng) </p><p> output [7:0] iic_rdata;//總線上的數(shù)據(jù) </p><p> output
102、 ack_err;//響應(yīng)錯誤 </p><p><b> //寄存器型 </b></p><p> reg sda; </p><p> reg scl; </p><p> reg scl_cnt_en; </p><p> reg
103、 iic_rdy; </p><p> reg [7:0] iic_rdata; </p><p> reg[14:0] iic_state; </p><p> reg [2:0] bit_cntr; </p><p> reg scl_en; </p><p> reg en
104、_cntr; </p><p> reg cntr_done; </p><p> reg ack_err; </p><p> wire iic_act; </p><p><b> //參數(shù) </b></p><p> parameter idle
105、 = 4'b0000; // state 0 </p><p> parameter en_clk = 4'b0001; // state 1 </p><p> parameter start1 = 4'b1100; // state C </p><p> parameter dev_ad
106、d1 = 4'b1000; // state 8 </p><p> parameter ack1 = 4'b0100; // state 4 </p><p> parameter w_add = 4'b1010; // state A </p><p> parameter ack2
107、 = 4'b0101; // state 5 </p><p> parameter wait1 = 4'b0011; // state 3 </p><p> parameter dis_clk1 = 4'b1111; // state F </p><p> parameter st
108、art2 = 4'b1101; // state D </p><p> parameter dev_add2 = 4'b1001; // state 9 </p><p> parameter ack3 = 4'b0110; // state 6 </p><p> parameter
109、data = 4'b1011; // state B </p><p> parameter ack4 = 4'b0111; // state 7 </p><p> parameter stop1 = 4'b1110; // state E </p><p><b> /
110、/狀態(tài)機 </b></p><p> always @(posedge clock or negedge rst_l) </p><p> if (!rst_l) </p><p> iic_state <= #1 idle; </p><p> else case(iic_state) </p>&
111、lt;p> idle : if (iic_go) </p><p> iic_state <= #1 en_clk; </p><p> en_clk : if (scl_tick) </p><p> iic_state <= #1 start1; </p><p> s
112、tart1 : if (scl_tick) </p><p> iic_state <= #1 dev_add1; </p><p> dev_add1 : if (cntr_done && scl_tick) </p><p> iic_state <= #1 ack1; </p>
113、;<p> ack1 : if (scl_tick && scl) </p><p> iic_state <= #1 w_add; </p><p> w_add : if (cntr_done && scl_tick) </p><p> iic_state <= #1 ac
114、k2; </p><p> ack2 : if (scl_tick && scl) </p><p> iic_state <= #1 dis_clk1; </p><p> dis_clk1 : if (scl_tick && scl) </p><p&
115、gt; iic_state <= #1 wait1; </p><p> wait1 : if (scl_tick) </p><p> iic_state <= #1 start2; </p><p> start2 : if (scl_tick) </p><p> iic_state <= #
116、1 dev_add2; </p><p> dev_add2 : if (cntr_done && scl_tick) </p><p> iic_state <= #1 ack3; </p><p> ack3 : if (scl_tick && scl) </p><p> i
117、ic_state <= #1 data; </p><p> data : if (cntr_done && scl_tick) </p><p> iic_state <= #1 ack4; </p><p> ack4 : if (scl_tick && scl) </p><p> 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga課程設(shè)計--基于fpga的i2c接口程序?qū)崿F(xiàn)
- i2c課程設(shè)計--基于arm的i2c接口設(shè)計
- arm課程設(shè)計--基于arm的i2c接口設(shè)計
- 基于fpga的i2c串行總線接口電路設(shè)計
- 嵌入式課程設(shè)計---i2c 總線接口設(shè)計
- 基于dsp與cpld的i2c總線接口的設(shè)計與實現(xiàn)
- 用FPGA實現(xiàn)8051內(nèi)核及外設(shè)I2C接口擴展的研究.pdf
- i2c芯片的驅(qū)動程序
- 基于stm32f10的i2c接口通信設(shè)計【開題報告】
- 基于fpga的i2c實驗verilog源代碼說明書
- 基于I2C總線接口的低功耗10bit ADC的設(shè)計.pdf
- 片上i2c總線設(shè)計
- 基于I2C的HPC人機交互系統(tǒng)設(shè)計與實現(xiàn).pdf
- WM8731的I2C配置模塊的FPGA設(shè)計_袁海林.pdf
- 片上I2C總線設(shè)計.pdf
- 集成I2C總線接口的白光LED驅(qū)動芯片的研究與設(shè)計.pdf
- i2c與smbus的區(qū)別
- I2C總線在SOC系統(tǒng)中的設(shè)計與實現(xiàn).pdf
- 同步串行通訊I2C總線的設(shè)計.pdf
- 基于fpga的液晶控制器接口課程設(shè)計
評論
0/150
提交評論