<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于VHDL的I2C總線(xiàn)控制核設計

基于VHDL的I2C總線(xiàn)控制核設計

作者: 時(shí)間:2004-12-08 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:從狀態(tài)機的角度,介紹一種控制核的設計方法。將其嵌入到FPGA中,用于實(shí)現與TMS320C6000系列DSP的接口,并配合DSP的軟件完成對視頻采集與顯示處理系統中數字視頻編、解碼器工作模式寄存器的配置及其狀態(tài)查詢(xún)。著(zhù)重介紹控制核的總體設計方案,詳細描述其內部命令狀態(tài)機和時(shí)序狀態(tài)機的工作原理及相應的代碼。此外,介紹控制核與DSP相互通信中斷處理機制的實(shí)現方法。最后,給出在Xilinx公司的ISE6.1+ModelSimXE5.7c軟件平臺中進(jìn)行EDA的綜合結果與時(shí)序仿真圖。

關(guān)鍵詞:I2C總線(xiàn) 狀態(tài)機FPGA VHDL DSP 控制器核

引言

I2C總線(xiàn)是雙向、兩線(xiàn)、串行、多主控(multi-master)接口標準,具有總線(xiàn)仲裁機制,非常適合在器件之間進(jìn)行近距離、非經(jīng)常性的數據通信。由于其使用兩線(xiàn)的硬件接口簡(jiǎn)單,I2C總線(xiàn)的應用越來(lái)越廣泛。實(shí)現I2C總線(xiàn)通信協(xié)議主要有兩種方法:①利用MCU對兩根I/O口線(xiàn)進(jìn)行軟件編程,模擬I2C總線(xiàn)的SCL和SDA時(shí)序要求;②使用專(zhuān)用I2C核,但受其主機(host)接口方式和時(shí)鐘頻率的限制,在有些場(chǎng)合應用并不方便。

圖1

在我們開(kāi)發(fā)的基于DSP的視頻采集與顯示處理系統中,為了滿(mǎn)足數字視頻信號傳輸帶寬及圖像處理算法速度的要求,選擇了TI公司的32位高速、高性能DSP TMS320C6711(簡(jiǎn)稱(chēng)C6711)芯片(CPU時(shí)鐘150MHz,外圍存儲器接口EMIF時(shí)鐘100MHz)作為處理核心;外圍加上FPGA和數字視頻編碼器與解碼器,實(shí)現對標準復合視頻信號的采集、處理和視頻顯示任務(wù)。由于C6711沒(méi)有可以單獨控制的I/O口線(xiàn),所以不能使用①的方法;由于外圍擴展存儲器接口(EMIF)工作在100MHz,也不易實(shí)現②的方法,從系統小型化,充分利用FPGA的邏輯資源,提高硬件系統集成度的角度出發(fā),選定在FPGA內自行設計I2C控制核的方法,實(shí)現DSP的高速異步存儲器接口到I2C總線(xiàn)接口的轉化。下面著(zhù)重介紹如何使用VHDL進(jìn)行I2C核設計。

1 總體思想

SCL和SDA分別為I2C總線(xiàn)的時(shí)鐘線(xiàn)和數據線(xiàn)。目前,支持I2C總線(xiàn)通信協(xié)議的視頻編、解碼芯片大多只支持100Kb/s或400Kb/s的傳輸速度,并且支持兩種地址:①從設備地址(SCLAVE ADDRESS,8bit),分為讀地址和寫(xiě)地址,高7位用于選中芯片, 第0位是讀/寫(xiě)控制位(R/W),決定是對該芯片進(jìn)行讀或寫(xiě)操作;②內部寄存器單元地址(SUBADRRESS,8bit),用于決定對內部的哪個(gè)寄存器單元進(jìn)行操作,通常還支持地址單元連續的多字節順序讀寫(xiě)操作。I2C總線(xiàn)的讀、寫(xiě)操作過(guò)程如下。

寫(xiě)過(guò)程(S:開(kāi)始,Sr:重開(kāi)始,P:停止,-S:從設備,-M:主設備,W:寫(xiě)位,R:讀位)

SLAVE ADDRESS(W)ACK-SSUBADDRESSACK-SDATA(N BYTES)ACK-SP

讀過(guò)程

SSLAVE ADDRESS(W)ACK-SSUBADDRESSACK-S
(Sr)SLAVE ADDRESS(R)ACK-SDATA(N BYTES)ACK-MP

I2C控制核的設計采用自頂而下的方法,分為三個(gè)模塊:I2C_top模塊、I2C_cmd模塊、I2C_core模塊??傮w結構框圖如圖1所示。I2C_top模塊是頂層管理模塊,主要任務(wù)是接收DSP發(fā)來(lái)的控制信號、命令及數據;發(fā)送由從設備讀出的數據和確認位到DSP;實(shí)現I2C控制核與DSP的中斷通信機制;提供當前I2C控制核的工作狀態(tài);把DSP發(fā)出的命令字信號送到I2C_cmd模塊。

在設計I2C控制核時(shí),必須注意以下幾個(gè)方面:

①I(mǎi)2C控制核與主機(Host,即C6711 DSP)以及視頻編解碼器的硬件接口連接關(guān)系??紤]到I2C總線(xiàn)通信協(xié)議的時(shí)序關(guān)系及芯片讀/寫(xiě)操作過(guò)程,I2C控制核應該包括兩個(gè)外圍接口,如圖1所示。一是與C6711 EMIF(External Memory Interface,擴展存儲器接口)的高速異步存儲器ASRAM(Asynchronous SRAM)接口,稱(chēng)為主機接口。它向I2C控制核發(fā)出控制命令與數據,0位地址總線(xiàn)、32位雙向三態(tài)數據總線(xiàn)、異步輸出使能信號aoe、異步寫(xiě)使能awe、異步讀使能are、外部存儲器空間選通ce2、外部中斷申請eint。二是與視頻編/解碼器相連的I2C兩線(xiàn)接口SCL、SDA。I2C控制核稱(chēng)為I2C總線(xiàn)的主設備(master),實(shí)現EMIF的ASRAM接口向I2C總線(xiàn)接口的轉化;I2C器件(視頻編碼器、視頻解碼器)被稱(chēng)為I2CU叫線(xiàn)的從設備(slave)。

②如何通過(guò)軟件編程,方便地實(shí)現對控制核中各種命令的操作。為此,在控制核內部共設備了6個(gè)8位寄存器,用于管理整個(gè)控制核的工作。這些寄存器的名稱(chēng)、標號、位數、地址、操作方式,以及寄存器內部設備的控制位及功能的具體情況如表1所列。寄存器內部設置的控制位及功能的具體情況如表1所列。寄存器的尋址使用EMIF接口地址總線(xiàn)的低三位eadd[4~2]和由高位地址譯碼得到的I2C控制核使能信號nce。當DSP發(fā)出的讀、寫(xiě)命令完成后,I2C_top會(huì )向DSP發(fā)中斷請求eint,讓DSP發(fā)出下一個(gè)命令到CR,從RXR中讀數,或進(jìn)發(fā)送新數據到TXR。

表1 I2Ctop模塊內部寄存器

寄存器位 數地 址操 作

控制位及功能

控制寄存器CTR8000只寫(xiě)I2C控制核使能位(core-en),(中斷使能位ien)
命令寄存器CR8001只寫(xiě)啟動(dòng)(start-r)、讀(rd-r)、寫(xiě)(wr-r)、停止(stop-r)、主設備確認(ack-r)、中斷響應位(i-ack-r)
狀態(tài)寄存器SR8010只讀從設備確認位(rx-ack)、I2C-core模塊忙位(Core-busy)
發(fā)送寄存器TXR8011只寫(xiě)寄存器發(fā)送到從設備的數據
接收寄存器RXR8100只讀寄存由從設備讀取的數據
時(shí)鐘尺度寄存器PRES8101讀寫(xiě)寄存器時(shí)鐘尺度因子,對時(shí)鐘信號(eclk)實(shí)現指定倍數分頻,得到SCL和SDA的五個(gè)子狀態(tài)相互轉移的同步時(shí)鐘使能信號(eclk-en)

時(shí)鐘尺度寄存器(PRES)用于產(chǎn)生兩個(gè)時(shí)鐘頻率信號:pres(7 downto 5),用于產(chǎn)生I2C控制核的工作頻率fcore;pres(5 downto 0),用于產(chǎn)生I2C總線(xiàn)的時(shí)鐘SCL頻率fi2c。其計算公式如下:

其中:pres1=1+pres(7 downto 5)

pres2=1+pres(4 dwonto 0)

由于eclk=100MHz,以pres(7 downto 5)=“100”=4,pres(4 downto 0)="10000"=16,則

fcore=100/[2(1+4)]=10MHz

fi2c=10/[6(1+16)]=0.098MHz=98kHz≤100kHz

可以看出,這樣設備時(shí)鐘尺度寄存器容易實(shí)現100MHz~100kHz的轉變。

③需要設置與DSP的相互通信的機制。由于C6711的CPU運行速度為150MHz,而I2C的速度僅為100Kb/s,為了不影響DSP程序的高速運行,采用中斷機制。當DSP發(fā)出讀、寫(xiě)命令后,繼續執行自己的程序,而由I2C控制核完成命令后,I2C_top模塊負責向DSP發(fā)中斷請示eint。DSP在中斷服務(wù)程序中讀取SR,從RXR中讀數,并發(fā)出新命令到CR,發(fā)送新數據到TXR。

2 狀態(tài)機描述

設計的核心工作是對I2C總線(xiàn)命令及時(shí)序的狀態(tài)劃分。在控制核內共設置了兩個(gè)狀態(tài)機,分別稱(chēng)為命令狀態(tài)機和時(shí)序狀態(tài)機。其中,命令狀態(tài)機用于管理I2C總線(xiàn)上的命令狀態(tài),如表1所列,并實(shí)現I2C總線(xiàn)具體的讀、寫(xiě)操作的命令狀態(tài)轉移過(guò)程;時(shí)序狀態(tài)機用于實(shí)現I2C總線(xiàn)上啟動(dòng)、停止、讀、寫(xiě)、確認等命令的具體時(shí)序關(guān)系。這樣就把控制核從邏輯上分為兩個(gè)狀態(tài)機,共同完成最終的總線(xiàn)命令與時(shí)序。

2.1 命令狀態(tài)機

命令狀態(tài)機是I2C_cmd模塊的核心部分。該模塊的主要功能有兩個(gè):一是把I2C_top模塊發(fā)送的start、write、read、stop四個(gè)命令信號轉化命令碼,發(fā)送I2C_core模塊;二是實(shí)現DSP發(fā)出和從slave接收到數據的串并轉換。

從I2C總線(xiàn)的通信協(xié)議中可以看出I2C總線(xiàn)上的信號可以分為空閑(IDLE)、啟動(dòng)(START)、讀(READ)、寫(xiě)(WRITE)、確認(ACK)和停止(STOP)六種工作狀態(tài)。在IDLE時(shí),SCL和SDA都為高電平,從設備不斷檢測Start命令的出現。I2C控制核(即I2C總線(xiàn)的主設備)在接收到DSP發(fā)送來(lái)的Start命令后,主設備進(jìn)入START狀態(tài),并根據Read和Write命令,可以進(jìn)入READ或WRITE狀態(tài)。由于主機的讀、寫(xiě)操作都是以字節進(jìn)行的,對應8個(gè)周期的I2C總線(xiàn)讀/寫(xiě)操作,故設置一個(gè)8字拍的計數器,使得READ或WRITE狀態(tài)能維持8個(gè)SCL周期。在完成字節讀或寫(xiě)操作之后,都將進(jìn)入ACK狀態(tài)。進(jìn)入ACK,標志一個(gè)DSP的讀/寫(xiě)命令已經(jīng)完成,因此發(fā)送中斷申請給DSP。在中斷服務(wù)程序中,DSP查詢(xún)狀態(tài)寄存器后,再發(fā)出下一個(gè)命令。這時(shí)I2C控制核,或者是轉移到IDLE,或者是轉移到STOP。命令狀態(tài)轉移關(guān)系如圖2所示。

2.2 時(shí)序狀態(tài)機

I2C_core模塊負責與視頻編碼器、解碼器的I2C接口,最終實(shí)現I2C總線(xiàn)信號SCL和SDA的啟動(dòng)、停止、讀、寫(xiě)、確認等具體操作的時(shí)序關(guān)系。其功能的實(shí)現主要由時(shí)序狀態(tài)來(lái)完成。根據I2C總線(xiàn)通信協(xié)議中SCL和SDA之間的時(shí)序關(guān)系,總線(xiàn)上包含兩種命令(Start/Restart,Stop)和兩種操作(Write,Read),時(shí)序關(guān)系如圖4所示。Start命令:在SCL為高電平時(shí),SDA上出現一個(gè)下降沿。Stop命令:在SCL為高電平時(shí),SDA上出現一個(gè)上升沿。Write操作:SDA只能在SCL為低電平時(shí)變化,在SCL為高電平時(shí)應保持不變。Read操作:只能在SCL為高電平時(shí),對SDA進(jìn)行采樣。

圖4

為了敘述上的方便,每個(gè)命令狀態(tài)在時(shí)序上劃分為5個(gè)子狀態(tài)(A,B,C、D、IDLE)。I2C總線(xiàn)時(shí)序狀態(tài)轉移關(guān)系如圖3所示,狀態(tài)劃分如圖4所示。在實(shí)際中為了更精確地控制時(shí)序,對命令時(shí)序進(jìn)行了更細的劃分。START和STOP分為7位子狀態(tài)(a~f,idle),WRITE和READ分為6個(gè)子狀態(tài)(a~e,idle)。這個(gè)“6”也就是為什么在公式(2)中分母上有一個(gè)“6”。

SCL在Start命令的A狀態(tài)時(shí),保持原有電平不變,而在B狀態(tài)時(shí)變?yōu)楦唠娖?,這樣就可以實(shí)現Restart命令。系統時(shí)鐘信號eclk由時(shí)鐘尺度因子分頻,得到狀態(tài)轉移的同步時(shí)鐘使能信號(eclk_en)。在eclk和eclk_en的控制下進(jìn)行狀態(tài)移轉,最后都轉移到空閑狀態(tài)(IDLE),并保持最后一個(gè)狀態(tài)時(shí)的信號電平。圖4中標注了每個(gè)命令的關(guān)鍵時(shí)刻。

3 中斷信號的處理機制

I2C控制核作為I2C總線(xiàn)的主設備,是在DSP的控制下工作的。它采用中斷機制與DSP通道。當一個(gè)讀寫(xiě)命令完成后,主設備會(huì )向DSP發(fā)出一個(gè)中斷申請信號eint(上升沿有效)。在DSP的中斷服務(wù)程序中,置位命令寄存器的中斷響應確認位(i_ack_r='1'),使主設備清除其發(fā)出的中斷申請信號(eint='0'),而i_ack_r信號將在置位命令結束后的下一個(gè)時(shí)鐘上升沿自動(dòng)清除。這樣,可以允許主設備發(fā)出下一個(gè)中斷申請。

圖5

process(nReset,eclk)

begin

if(nReset='0')then

int='0';i_ack_r='0';

elsif(eclk'vent and eclk='1')then

if(nce='0'andnAwe='0')then

if(core_en='1'and eadd="001")then

--寫(xiě)入命令寄存器

i_ack_r=cr(7);--寫(xiě)入'1'

end if;

else

i_ack_r='0'; --自動(dòng)清除

end if;

int=cmd_done_ack and ien;

end if;

Eint=int and(not i_ack_r_;end process;命令碼

4 EDA綜合結果與結論

使用Xilinx ISE6.1對I2C核的VHDL描述進(jìn)行綜合(synthesize)和實(shí)現(implement),目標器件采用Xilinx公司的高密度系統級FPGA-Virtex系列芯片v50cs144-6。設計的總體等效門(mén)數為1844門(mén),系統時(shí)鐘的最大頻率為120.758MHz。圖5為使用ModelsimXE5.6a對在目標器件上布局布線(xiàn)后的VHDL模塊進(jìn)行仿真(Simulate Post-Place Route VHDL Module)的結果。其中,edat信號上“10010000”中的“1”依次是啟動(dòng)和寫(xiě)命令;“01100001”中的“1”依次是停止、讀、中斷清除命令。從圖中可以看出,實(shí)現了從TMS320C6000 EMIF接口到I2C總線(xiàn)接口的轉換功能,并實(shí)現發(fā)中斷申請(eint=1)和清除中斷申請的功能,完成了I2C總線(xiàn)通信協(xié)議的啟動(dòng)、寫(xiě)、確認,讀、確認、停止操作的時(shí)序。



關(guān)鍵詞: VHDL I2C 總線(xiàn)控制

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>