一款基于FPGA的I2C總線的設(shè)計(jì)方案
異步時(shí)鐘域的轉(zhuǎn)換,采用兩級(jí)寄存器的結(jié)構(gòu)。輸入濾波器采用5 級(jí)寄存器的結(jié)構(gòu)。當(dāng)采樣到連續(xù)5 個(gè)高電平時(shí),輸出才為高電平,否則為低電平。接口部分的寄存器全都用FPGA 的系統(tǒng)時(shí)鐘驅(qū)動(dòng)。
本文引用地址:http://2s4d.com/article/234978.htm2.2 I2C SLAVE 控制邏輯的實(shí)現(xiàn)
I2C SLAVE 控制邏輯狀態(tài)機(jī)是整個(gè)模塊的核心,所有I2C 總線相應(yīng)的控制都由其完成。狀態(tài)機(jī)有四個(gè)狀態(tài):IDLE,START,SAMPLE 和STOP 組成。Verilog 的定義如下:
`define IDLE 2'b00
`define START 2'b01
`define STOP 2'b10
`define SAMPLE 2'b11
下面介紹各個(gè)狀態(tài)的功能。當(dāng)I2C 總線無(wú)任何操作時(shí)控制器在IDLE 狀態(tài)下,并保持。當(dāng)接口邏輯判斷到START 條件時(shí),控制器跳轉(zhuǎn)到START 狀態(tài)下,并做好接受第一個(gè)字節(jié)的準(zhǔn)備,包括初始化bit計(jì)數(shù)器。接著開始接受第一個(gè)字節(jié)包含7bit的地址和1bit 的讀寫狀態(tài)位。當(dāng)采集完第一個(gè)字節(jié)后,控制器跳到SAMPLE 狀態(tài)下,開始執(zhí)行數(shù)據(jù)字節(jié)的接受或發(fā)送。是接受或發(fā)送的狀態(tài)由前一字節(jié)的最后1bit 的讀寫狀態(tài)位決定。
當(dāng)讀寫狀態(tài)位為高時(shí),表示I2C 總線的讀操作,FPGA 邏輯發(fā)送數(shù)據(jù)。讀寫狀態(tài)位為低時(shí),表示I2C 總線的寫讀操作,FPGA邏輯接受數(shù)據(jù)。接著FPGA 邏輯發(fā)出一個(gè)ACK 信號(hào)后,表示可以進(jìn)行讀寫操作。那么就進(jìn)入到SAMPLE 狀態(tài)下,正常讀或?qū)懸粋€(gè)字節(jié)(也可以連續(xù)的讀寫多個(gè)字節(jié),對(duì)此沒有限制)。在完成8bit 數(shù)據(jù)讀寫后,I2C 的主器件會(huì)發(fā)出一個(gè)STOP 條件操作。fpga 邏輯收到后,就跳轉(zhuǎn)到STOP 狀態(tài),并在幾個(gè)時(shí)鐘周期后,自動(dòng)跳轉(zhuǎn)到IDLE 狀態(tài)下。從而完成一個(gè)完整的I2C 總線的讀或?qū)懖僮鳌?/p>
當(dāng)然也包括一些異常處理,以防止?fàn)顟B(tài)機(jī)處在一個(gè)不確定的狀態(tài)下。在SAMPLE 狀態(tài)下如果遇到意外的START 條件時(shí),即上次的總線操作沒有完成就開始了下次的操作,則控制狀態(tài)機(jī)會(huì)跳轉(zhuǎn)到START 狀態(tài)下,而開始接受這次新的總線操作,而上次的操作為無(wú)效。由如在SAMPLE 狀態(tài)下,但是又收到一個(gè)START 條件。還有如在STOP 狀態(tài)收到一個(gè)START 條件,處理也和上面一樣。下圖4 介紹了I2C SLAVE 控制邏輯狀態(tài)機(jī)的狀態(tài)跳轉(zhuǎn)圖。
如上圖所示,在 SAMPLE 狀態(tài)下,可以連續(xù)的讀寫數(shù)據(jù),而地址是在讀寫完一個(gè)字節(jié)后由FPGA 邏輯自動(dòng)加1 的。這樣做使得I2C 總線的一次操作就可以連續(xù)對(duì)多個(gè)字節(jié)讀或?qū)憽L岣叩目偩€的使用效率。
以下是在modelsim6.0 下進(jìn)行的行為級(jí)仿真的時(shí)序圖。
由自行編制的I2C 總線主器件BFM 驅(qū)動(dòng)進(jìn)行測(cè)試。圖5 I2CSLAVE 控制器寫時(shí)序圖。圖6 I2C SLAVE 控制器讀時(shí)序圖。
3 結(jié)論
本方案通過(guò)介紹SLAVE 模式的特點(diǎn),給出設(shè)計(jì)的原理框圖和modelsim 下的行為仿真時(shí)序圖。在Altera 的Cyclone II 系列中用Quartus II 12.0生成的模塊時(shí)鐘頻率可達(dá)到180MHz,占用的資源Totalcombinational functions 為83 個(gè),Total registers 為41 個(gè)。而在實(shí)際應(yīng)用中達(dá)100MHz 左右。證實(shí)了本方案操作簡(jiǎn)便,效果不錯(cuò)。
上拉電阻相關(guān)文章:上拉電阻原理
評(píng)論