《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于VHDL/CPLD的I2C串行總線控制器設(shè)計及實現(xiàn)
基于VHDL/CPLD的I2C串行總線控制器設(shè)計及實現(xiàn)
錢 敏,, 黃秋萍,, 李富華, 劉
摘要: 分析了I2C串行總線的數(shù)據(jù)傳輸機制,,用VHDL設(shè)計了串行總線控制電路,,其中包括微處理器接口電路和I2C總線接口電路。采用ModelSim Plus 6.0 SE軟件進行了前仿真和調(diào)試,并在Xilinx ISE 7.1i開發(fā)環(huán)境下進行了綜合,、后仿真和CPLD器件下載測試,。 結(jié)果表明實現(xiàn)了I2C串行總線協(xié)議的要求。
關(guān)鍵詞: CPLD I2C VHDL 總線控制器
Abstract:
Key words :

  摘 要: 分析了I2C串行總線的數(shù)據(jù)傳輸機制,,用VHDL設(shè)計了串行總線控制電路,,其中包括微處理器接口電路和I2C總線接口電路。采用ModelSim Plus 6.0 SE軟件進行了前仿真和調(diào)試,并在Xilinx ISE 7.1i開發(fā)環(huán)境下進行了綜合,、后仿真和CPLD器件下載測試,。 結(jié)果表明實現(xiàn)了I2C串行總線協(xié)議的要求,。
  關(guān)鍵詞: I2C串行總線控制器 接口電路 VHDL CPLD


  串行總線和并行總線相比具有結(jié)構(gòu)簡單、占用引腳少,、成本低的優(yōu)點,。常見的串行總線有USB、IEEE1394,、I2C等,,其中I2C總線具有使用簡單的特點,在單片機,、串行E2PROM,、LCD等器件中具有廣泛的應(yīng)用。
  I2C(Inter IC BUS)是Philips公司開發(fā)的用于芯片之間連接的總線,。 I2C總線用兩根信號線進行數(shù)據(jù)傳輸,,一根為串行數(shù)據(jù)線(SDA),另一根為串行時鐘線(SCL),。I2C總線允許若干兼容器件(如存儲器,、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器,、LCD驅(qū)動器等)共享總線,。I2C總線理論上可以允許的最大設(shè)備數(shù),是以總線上所有器件的總電容(其中包括連線本身的電容和連接端的引出電容)不超過400pF為限,,總線上所有器件依靠SDA線發(fā)送的地址信號尋址,,不需要片選線。任何時刻總線只能由一個主器件控制,,各從器件在總線空閑時啟動數(shù)據(jù)傳輸,。I2C總線數(shù)據(jù)傳輸?shù)臉?biāo)準(zhǔn)模式速率為100kbps,快速模式速率為400kbps,,高速模式速率為3.4Mbps,。
  用VHDL和CPLD設(shè)計數(shù)字系統(tǒng)具有傳統(tǒng)方法無可比擬的優(yōu)越性,,它已經(jīng)成為大規(guī)模集成電路設(shè)計最為有效的一種手段,。為簡單起見,本文采用VHDL設(shè)計標(biāo)準(zhǔn)模式的I2C總線控制電路,。
1 I2C總線上的數(shù)據(jù)傳輸
  I2C總線包含時鐘線SCL和數(shù)據(jù)線SDA兩條連線,,SCL由主機產(chǎn)生。I2C總線的數(shù)據(jù)傳輸流程如圖1所示,。其傳輸過程為:首先主機產(chǎn)生起始位,,然后傳送第一個字節(jié)。8位數(shù)據(jù)中首先傳送的是數(shù)據(jù)的最高位MSB,,最低位LSB為讀寫指示位,,1表示主機讀,,0表示主機寫,高7位地址可使主機尋址128個從器件,。


  從機收到第一字節(jié)數(shù)據(jù)后發(fā)響應(yīng)位,,主機收到響應(yīng)位后接著發(fā)送第二個字節(jié)的數(shù)據(jù)。數(shù)據(jù)發(fā)送完畢后產(chǎn)生結(jié)束位,,數(shù)據(jù)傳送結(jié)束,。數(shù)據(jù)傳送時,只有時鐘SCL為低電平時SDA才允許切換,,SCL為高電平時SDA必須穩(wěn)定,,此時SDA的電平就是總線轉(zhuǎn)送的數(shù)值。
  在SCL為高電平時,,SDA線由高到低切換表示起始位,,SDA線由低到高切換表示停止位。起始位和停止位由主機產(chǎn)生,,在起始位產(chǎn)生后總線處于忙狀態(tài),,停止位出現(xiàn)并經(jīng)過一定時間后總線進入空閑狀態(tài)。發(fā)送器每發(fā)送一個字節(jié)后,,接收器必須產(chǎn)生一個響應(yīng)位,。響應(yīng)位的驅(qū)動時鐘由主機產(chǎn)生則接收器將SDA線拉低產(chǎn)生響應(yīng)位。如果主機是接收器,,則接收最后一個字節(jié)時,,響應(yīng)位為1,通知從機結(jié)束發(fā)送,,否則響應(yīng)位為0,。當(dāng)從機不能響應(yīng)從機地址(例如它正在執(zhí)行一些實時函數(shù),不能接收或發(fā)送)時,,或響應(yīng)了從機地址但在傳輸一段時間后不能接收更多的數(shù)據(jù)字節(jié),,此時從機可以通過響應(yīng)位為1通知主機終止當(dāng)前的傳輸,于是主機產(chǎn)生一個停止位終止傳輸,,或者產(chǎn)生重復(fù)開始位開始新的傳輸,。
  SDA線上傳送的數(shù)據(jù)必須為8位,每次傳送可以發(fā)送的字節(jié)數(shù)量不受限制,。如果從機要完成一些其他功能(例如執(zhí)行一個內(nèi)部中斷服務(wù)程序)才能接收或發(fā)送下一個數(shù)據(jù)字節(jié),,則從機可以使SCL維持低電位,迫使主機進入等待狀態(tài),。從機準(zhǔn)備好接收或發(fā)送下一個數(shù)據(jù)字節(jié)時,,釋放SCL,數(shù)據(jù)傳輸繼續(xù),。
  SDA和SCL都是雙向線路,,使用時通過上拉電阻連接到電源,。總線空閑時這兩條線路都是高電平,,連接到總線的器件的輸出級必須是漏極開路或集電極開路,,這樣總線才能執(zhí)行“線與”的功能。
  主機發(fā)完第一個字節(jié)后,,數(shù)據(jù)傳輸方向的變化可能存在三種情況,。(1)傳輸方向不變,如主機向從機寫,;(2)傳輸方向改變,,如主機從從機讀數(shù)據(jù);(3)傳輸方向改變多次,,如主機對從機進行多次讀寫,。
2 時鐘同步與仲裁
  I2C總線在任何時刻只能有一個主機,當(dāng)I2C總線同時有兩個或更多的器件想成為主機時,,就需要進行仲裁,;時鐘同步的目的就是為仲裁提供一個確定的時鐘。時鐘SCL的同步和仲裁通過“線與”來執(zhí)行,,SCL的低電平時間取決于低電平時間最長的主機,,高電平時間取決于高電平時間最短的主機。
  仲裁過程在數(shù)據(jù)線SDA線上進行,,當(dāng)SCL為高電平時,,如果SDA線上有主機發(fā)送低電平,則發(fā)送高電平的主機將關(guān)閉輸出級,。因為總線的狀態(tài)和自身內(nèi)部不一樣,,于是發(fā)送低電平的主機贏得仲裁。仲裁可以持續(xù)多個位,,在實際通信過程中,,仲裁的第一階段比較地址位,如果多個主機尋址同一個從機,,則繼續(xù)比較數(shù)據(jù)位(主機是發(fā)送機)或響應(yīng)位(主機是接收機),。由于I2C總線上的地址和數(shù)據(jù)由贏得總線的主機決定,因此仲裁過程中不會丟失信息,。如果一個主機具有從機功能,,則當(dāng)它失去仲裁時,,必須立即切換到從機狀態(tài),,因為它可能正在被其他主機尋址。
3 I2C總線控制器設(shè)計
  I2C總線控制器的主要作用是提供微控制器(μC)和I2C總線之間的接口,,為兩者之間的通信提供物理層協(xié)議的轉(zhuǎn)換,。在串行應(yīng)用系統(tǒng)中,,外圍器件(如串行E2PROM、LCD,、實時鐘等)連接在I2C總線上,,再通過I2C總線控制器和μC連起來。其典型的應(yīng)用,,如現(xiàn)在許多彩電的控制系統(tǒng)都基于I2C總線,。為了使設(shè)計清晰明了,本文將控制器的設(shè)計分成兩部分,。一部分為微控制器(μC)接口,,另一部分為I2C接口,如圖2所示,。


  μC接口部分主要包含狀態(tài)寄存器(MBSR),、控制寄存器(MBCR)、地址寄存器(MADR),、數(shù)據(jù)寄存器(MBDR)和地址譯碼/總線接口模塊,。狀態(tài)寄存器指示I2C總線控制器的當(dāng)前狀態(tài),如傳輸是否完成,、總線是否忙等信息,。控制寄存器是μC控制I2C總線控制器的主要途徑,,通過置0/1完成I2C總線控制器使能,、中斷使能、主/從(Master/Slave)模式選擇,、產(chǎn)生起始位等操作,。地址寄存器保存著I2C總線控制器作為從機時的地址。數(shù)據(jù)寄存器用于保存接收的數(shù)據(jù)或是待發(fā)送的數(shù)據(jù),。
  I2C接口的核心是主狀態(tài)機,,它控制著整個I2C接口的運作。和I2C總線直接相連的模塊有起始/停止位產(chǎn)生模塊,、I2C Header寄存器,、I2C數(shù)據(jù)寄存器和仲裁及起始/停止位檢測模塊。當(dāng)控制器是Master時,,起始/停止位產(chǎn)生模塊用于在I2C總線上產(chǎn)生起始位和停止位,;I2C數(shù)據(jù)寄存器用于保存總線上傳送的數(shù)據(jù);仲裁及起始/停止位檢測模塊的作用是執(zhí)行仲裁,,并檢測I2C總線上的起始/停止位,,以便為主狀態(tài)機提供輸入。其他模塊包括:I2C狀態(tài)寄存器,,用于記錄I2C總線的狀態(tài),;地址比較模塊,,用于比較總線上傳送的地址和本機的從機地址是否一致,如果一致,,說明其他主機正在尋址本控制器,,控制器必須立即切換到從機狀態(tài),同時發(fā)出響應(yīng)位,。
3.1 μC接口設(shè)計
  μC接口用于連接I2C接口電路和μC,,主要實現(xiàn)兩者之間的信號交互握手機制。設(shè)計時可以用VHDL提供的狀態(tài)機來描述信號交互機制中的工作狀態(tài)切換,,如圖3(a)所示,。
  μC接口電路中使用的四組寄存器的地址是24位的,高16位為I2C總線控制器的基址(MBASE),,占用μC的地址空間,,低8位用于區(qū)別不同的寄存器。寄存器本身是8位的,,圖3(b1)為控制寄存器,,圖3(b2)為狀態(tài)寄存器。圖中示出了每一位的含義,。


3.2 I2C接口設(shè)計
  I2C接口用于連接μC接口電路和I2C總線,,由兩個狀態(tài)機構(gòu)成:一個是I2C接口主狀態(tài)機,用于執(zhí)行發(fā)送和接收操作,;另一個為“SCL/SDA/ STOP 產(chǎn)生”狀態(tài)機,,當(dāng)I2C總線控制器為主機時,這個狀態(tài)機產(chǎn)生SCL/START/STOP信號,。
  I2C接口用于I2C總線的驅(qū)動和接收,,當(dāng)I2C總線控制器為主機時,I2C接口必須按I2C總線規(guī)范驅(qū)動總線;當(dāng)總線控制器為從機時,,I2C必須能正確接收滿足I2C總線規(guī)范的信號,。I2C設(shè)計規(guī)范對總線的時序作了詳細的定義,在不同模式下這些參數(shù)的具體數(shù)值都有明確的規(guī)定,。“SCL/START/STOP 產(chǎn)生”狀態(tài)機的狀態(tài)轉(zhuǎn)換如圖4所示, I2C接口主狀態(tài)機的轉(zhuǎn)移圖如圖5所示,。

 


4 仿真與硬件實現(xiàn)
  本文中仿真工具采用Mentor公司的ModelSim Plus 6.0 SE,其顯著的優(yōu)越性能是提供了一個混合語言仿真環(huán)境,,已在產(chǎn)業(yè)界廣泛應(yīng)用,。為了測試驗證系統(tǒng)的功能,本文采用了Atemel公司提供的采用I2C總線協(xié)議的AT24C02 E2PROM芯片(256B 8bit)的VerilogHDL仿真模型(AT24C02.v)作為從器件對象,,用VerilogHDL語言構(gòu)建了testbench(測試向量),,對所設(shè)計I2C總線控制器進行仿真。
  圖6和圖7為μC通過I2C總線控制器對E2PROM進行數(shù)據(jù)寫/讀的仿真波形(將數(shù)據(jù)FFH~0HH寫進地址0~255單元,然后將它們再按順序讀的模式讀出),。往E2PROM寫入時需要給出所寫起始單元的地址(圖6中為00H); 從E2PROM順序讀時不用給出起始單元地址而從當(dāng)前地址處開始讀(本文中寫完256B數(shù)據(jù)后,地址指針又回到0處),。相關(guān)狀態(tài)及數(shù)據(jù)已在圖中作了標(biāo)示,。由此可見,所設(shè)計的總線控制器完全符合標(biāo)準(zhǔn)I2C串行協(xié)議的時序要求,。

 


  本文設(shè)計的系統(tǒng)實現(xiàn)平臺采用Xilinx公司的XC95216-10-PQ160 CPLD芯片,,總邏輯門個數(shù)為4 800。經(jīng)綜合,、適配,、布局布線后占用器件資源的情況為:宏單元120/216(56%)、寄存器111/216(52%),、功能塊331/432(77%),、乘積項分配器544/1080(51%)??梢?,系統(tǒng)占用約一半的資源,相當(dāng)精簡,。整個系統(tǒng)下載到CPLD后在2MHz時鐘頻率下運行正常,。
參考文獻
1 王 誠,薛小剛,,鐘信朝. FPGA/CPLD設(shè)計工具Xilinx ISE使用詳解.北京:人民郵電出版社,,2005:439~478
2 劉 韜,樓興華. FPGA數(shù)字電子系統(tǒng)設(shè)計與開發(fā)實例導(dǎo)航.北京:人民郵電出版社,,2005:84~126
3 夏宇聞. 復(fù)雜數(shù)字電路與系統(tǒng)的Verilog HDL設(shè)計技術(shù). 北京:北京航空航天大學(xué)出版社,,1998:110~136

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。