欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于fpga的多通道i2c控制器的制作方法

文檔序號:6372665閱讀:286來源:國知局
專利名稱:一種基于fpga的多通道i2c控制器的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及通信領(lǐng)域,具體涉及一種FPGA(Filed Programmable Gate Array)的多通道I2C (Inter-Integrated Circuit)控制器,特別是使用FPGA實現(xiàn)多個I2C控制器高效傳輸數(shù)據(jù)。
背景技術(shù)
I2C控制總線作為最成熟的總線標準之一,它是同步通信的一種特殊形式,具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高的特點,在工業(yè)控制領(lǐng)域得到廣泛的應(yīng)用?,F(xiàn)有技術(shù)中,在I2C控制總線上,每個連接在總線上的I2C控制器都可以發(fā)起數(shù)據(jù)傳輸,經(jīng)過沖突檢測和仲裁防止數(shù)據(jù)被破壞。當連接在總線上的器件過多時,出現(xiàn)沖突的概率就會升高,器件獲取總線仲裁的延時就相應(yīng)增加,不利于實時性要求較高的情況。

發(fā)明內(nèi)容
本發(fā)明的目的在于針對高效低延時的數(shù)據(jù)傳輸需求,提供一種基于FPGA的多通道I2C控制器。一種基于FPGA的多通道I2C控制器,包括CPU接口、緩沖區(qū)間、仲裁器和I2C控制器,所述緩沖區(qū)間包括發(fā)送緩沖區(qū)間和接收緩沖區(qū)間,所述仲裁器包括寫狀態(tài)機和讀狀態(tài)機,所述仲裁器用于對I2C控制器的請求信號進行仲裁,所述緩沖區(qū)間用于對I2C控制器寫入/讀取和CPU寫入/讀取的數(shù)據(jù)進行緩沖,所述緩沖區(qū)間包括用于數(shù)據(jù)讀取/寫入計數(shù)的指針管理器。進一步的,還包括CPU總線,外部CPU通過所述CPU總線訪問所述多通道I2C控制器的控制寄存器和狀態(tài)寄存器。進一步的,所述開銷字節(jié)為4個字節(jié),所述多通道I2C控制器具有共用的發(fā)送緩沖區(qū)間和接收緩沖區(qū)間,所述發(fā)送緩沖區(qū)間和接收緩沖區(qū)間由雙端口隨機存取器實現(xiàn),依靠端口仲裁器實現(xiàn)所述多個I2C控制器讀寫緩沖區(qū)間并行操作,緩沖區(qū)間的指針由特定的模塊進行管理。進一步的,所述指針管理器包括指針寄存器,在外部CPU讀取緩沖區(qū)間數(shù)據(jù)時,所述指針寄存器減I,在外部CPU寫入數(shù)據(jù)時,所述指針寄存器加I。進一步的,所述I2C控制器接收到數(shù)據(jù)則向仲裁器發(fā)出寫請求,所述仲裁器中的寫狀態(tài)機查詢到寫請求后則查詢與發(fā)出請求的控制器對應(yīng)的接收緩沖區(qū)間的狀態(tài)寄存器,如果狀態(tài)寄存器中標識區(qū)間非滿,則將I2C控制器發(fā)出的數(shù)據(jù)寫入對應(yīng)緩沖區(qū)間間,并且發(fā)出一個脈沖指示要求接收緩沖區(qū)間的指針管理器將對應(yīng)指針加;否則仲裁器的寫狀態(tài)機重新進入到輪詢狀態(tài),指針不變,且I2C控制器中的數(shù)據(jù)將會丟失,當I2C向仲裁器發(fā)出讀請求,仲裁器中的讀狀態(tài)機檢測到讀請求后則查詢與發(fā)出請求的I2C控制器對應(yīng)的發(fā)送緩沖區(qū)間的狀態(tài)寄存器,如果狀態(tài)寄存器中標識區(qū)間非空,則將指針當前指向的數(shù)據(jù)讀出,并且發(fā)出一個脈沖信號要求接收緩沖區(qū)間的指針管理器將對應(yīng)指針減I;否則仲裁器的讀狀態(tài)機重新進入到輪詢狀態(tài),指針不變,I2C控制器讀出數(shù)據(jù)將是上一次讀出的結(jié)果。進一步的,當I2C控制器從總線上每接收到一個完整的數(shù)據(jù)就產(chǎn)生一個同步脈沖請求信號并輸出到仲裁器中;在結(jié)束一次連續(xù)數(shù)據(jù)接收后,I2C控制器產(chǎn)生一個中斷到CPU中,在I2C控制器發(fā)起傳輸?shù)街俨闷鬟M行仲裁后,所述I2C控制器讀取對應(yīng)區(qū)間的狀態(tài)寄存器,判斷區(qū)間有效數(shù)據(jù)的數(shù)目,并自動將這些有效數(shù)據(jù)連續(xù)讀出并傳輸?shù)絀2C總線上。本發(fā)明相較于現(xiàn)有技術(shù),能夠?qū)崿F(xiàn)以較高的資源利用率實現(xiàn)更大的傳輸帶寬和更低延時的數(shù)據(jù)傳輸與處理。本發(fā)明比單通道 的I2C控制器提供更大的帶寬,有效降低I2C總線出現(xiàn)仲裁沖突的次數(shù),提高實時性。本發(fā)明使用FPGA單塊Block RAM作為緩沖區(qū)間,能夠最大化地利用FPGA的RAM資源,有效降低成本,具有較高的資源利用率,能夠?qū)崿F(xiàn)更大的傳輸帶寬和更低延時的數(shù)據(jù)傳輸與處理。另外,本發(fā)明具有可調(diào)整的CPU總線,能夠作為各種處理器外設(shè),應(yīng)用靈活


圖I是本發(fā)明一種基于FPGA的多通道I2C控制器一個實施方式示意圖;圖2是圖I所示緩沖區(qū)劃分示意圖;圖3是仲裁器輪詢狀態(tài)機示意圖;圖4是指針管理器的組成示意圖。
具體實施例方式下面結(jié)合附圖和具體實施方式
對本發(fā)明做進一步詳細說明。要提高在I2C控制總線上數(shù)據(jù)傳輸?shù)膶崟r性主要有兩種方法,第一種是提高I2C控制總線的傳輸速率,但一般I2C控制器的工作速率在出廠后就設(shè)定了上限。第二種是將彼此不需要通信的控制器連接到不同的I2C總線上,不同的I2C總線由同一處理器進行管理。然而上述第二種方法中的處理器對多I2C總線管理的需求較高,要求較高的I2C并發(fā)操作和數(shù)據(jù)讀寫效率。本發(fā)明基于FPGA的多通道I2C控制器具有I2C控制器讀寫端口仲裁和緩沖區(qū)間指針管理。請同時參考圖1-4,本發(fā)明一個實施方式包括CPU接口 11、緩沖區(qū)間12、仲裁器13和I2C控制器14。所述緩沖區(qū)間包括發(fā)送緩沖區(qū)間121和接收緩沖區(qū)間122。所述仲裁器13包括寫狀態(tài)機和讀狀態(tài)機。所述仲裁器13用于對I2C控制器14的請求信號進行仲裁。所述緩沖區(qū)間12用于對I2C控制器寫入/讀取和CPU寫入/讀取的數(shù)據(jù)進行緩沖。所述緩沖區(qū)間12包括用于數(shù)據(jù)讀取/寫入計數(shù)的指針管理器,所述指針管理器包括指針寄存器,在外部CPU讀取緩沖區(qū)間12數(shù)據(jù)時,所述指針寄存器減I,在外部CPU寫入數(shù)據(jù)時,所述指針寄存器加I。如圖I所示,所述I2C控制器14與仲裁器13直接連接。當所述I2C控制器14接收到數(shù)據(jù)則向仲裁器13發(fā)出寫請求,所述仲裁器13中的寫狀態(tài)機查詢到寫請求后則查詢與發(fā)出請求的控制器對應(yīng)的接收緩沖區(qū)間的狀態(tài)寄存器,如果狀態(tài)寄存器中標識區(qū)間非滿,則將I2C控制器14發(fā)出的數(shù)據(jù)寫入對應(yīng)緩沖區(qū)間間,并且發(fā)出一個脈沖指示要求接收緩沖區(qū)間的指針管理器將對應(yīng)指針加I ;否則仲裁器13的寫狀態(tài)機重新進入到輪詢狀態(tài),指針不變,且I2C控制器14中的數(shù)據(jù)將會丟失。同樣,當I2C向仲裁器發(fā)出讀請求,仲裁器13中的讀狀態(tài)機檢測到讀請求后則查詢與發(fā)出請求的I2C控制器14對應(yīng)的發(fā)送緩沖區(qū)間的狀態(tài)寄存器,如果狀態(tài)寄存器中標識區(qū)間非空,則將指針當前指向的數(shù)據(jù)讀出,并且發(fā)出一個脈沖信號要求接收緩沖區(qū)間的指針管理器I將對應(yīng)指針減I ;否則仲裁器的讀狀態(tài)機重新進入到輪詢狀態(tài),指針不變,I2C控制器讀出數(shù)據(jù)將是上一次讀出的結(jié)果。需要說明的是,F(xiàn)PGA中有兩種RAM資源,第一種稱為分布式RAM,其分布在整塊FPGA中,數(shù)量相對較少,適用于構(gòu)造容量小的FIFO(先進先出)或其他存儲器;第二種稱為Block RAM,是連續(xù)分布的RAM資源,適用于構(gòu)造大容量的FIFO或其他存儲器。本發(fā)明為了最大效率地利用RAM資源,采用Block RAM構(gòu)造大容量雙端口 RAM的方法。將Block RAM構(gòu)造成雙口 RAM后,對雙口 RAM進行劃分,如將參考圖2,將1024字節(jié)的雙口 RAM等分為16個區(qū)間,每個區(qū)間的大小為64字節(jié),在雙端口 RAM外部定義16個寄存器,用于緩沖區(qū)間12的指針,當在系統(tǒng)初始化時,需要將各個指針寄存器的值指向?qū)?yīng)區(qū)間起始地址,如第一個指針寄存器初始化后的值為0x000,第二個指針初始化為0x040,如此類推。事實上,本發(fā)明并不限定雙口 RAM的容量和區(qū)間大小,上述實施方式的RAM大小和區(qū)間大小只是一個應(yīng)用 舉例。指針管理器完成對指針的自加或自減操作,還需要保證指針不能越界,就是指針不能指向不屬于相應(yīng)區(qū)間外的地址,每當指針已經(jīng)指向上界(下界)時,則指針再次自加1(自減I)后,指針指向下界(上界)。同時指針管理器讀取區(qū)間狀態(tài)寄存器的值,判斷區(qū)間是否已寫滿或讀空,從而決定指針是否加I或減I。參考圖3,端口仲裁器中使用兩個狀態(tài)機分別輪詢寫請求與讀請求信號。在本發(fā)明基于FPGA的多通道I2C控制器的其他實施方式中,所述I2C控制器的工作狀態(tài)由CPU直接控制。所述I2C控制器實現(xiàn)標準的I2C總線時序,包括實現(xiàn)主端口和從端口功能。當I2C控制器從總線上每接收到一個完整的數(shù)據(jù)就產(chǎn)生一個同步脈沖請求信號,輸出到仲裁器中;在結(jié)束一次連續(xù)數(shù)據(jù)接收后,I2C控制產(chǎn)生一個中斷到CPU中。在I2C控制器發(fā)起傳輸?shù)街俨闷鬟M行仲裁后,其可以讀取對應(yīng)區(qū)間的狀態(tài)寄存器,判斷區(qū)間有效數(shù)據(jù)的數(shù)目,并自動將這些有效數(shù)據(jù)連續(xù)讀出并傳輸?shù)絀2C總線上。在上述實施方式中,所述I2C控制器收發(fā)數(shù)據(jù)的工作過程如下外部CPU通過CPU總線將數(shù)據(jù)寫入緩沖某一個緩沖區(qū)間12,所述緩沖區(qū)間12的指針寄存器隨著每個數(shù)據(jù)寫入都自加1,所述狀態(tài)寄存器記錄寫入的個數(shù);完成數(shù)據(jù)寫入后,(PU發(fā)出指令啟動I2C控制器14傳輸,I2C控制器14依據(jù)I2C總線協(xié)議向仲裁器進行仲裁,獲取仲裁后則開始讀取區(qū)間狀態(tài)寄存器,依據(jù)狀態(tài)寄存器的值連續(xù)讀取緩沖區(qū)間中的緩存數(shù)據(jù),每讀取一個數(shù)據(jù),區(qū)間的指針寄存器自減1,直至全部數(shù)據(jù)讀取完畢,這時區(qū)間狀態(tài)寄存器的值為O ;—個I2C控制器14在傳輸數(shù)據(jù)的過程中,CPU可以操作另一個I2C控制器14,不需要等待;所述I2C控制器14從總線上收取到數(shù)據(jù)后,則向?qū)?yīng)緩沖區(qū)間發(fā)送請求脈沖信號,端口仲裁器查詢到請求脈沖后將控制器收取到的數(shù)據(jù)寫入對應(yīng)區(qū)間,區(qū)間指針自加1,同時區(qū)間狀態(tài)寄存器記錄存入數(shù)據(jù)的個數(shù);所述I2C控制器14完成一次連續(xù)的數(shù)據(jù)接收后,向CPU發(fā)出中斷,要求CPU讀取緩沖區(qū)間的數(shù)據(jù)。在本發(fā)明其他實施方式中,還包括CPU總線,外部CPU通過CPU總線可以訪問多通道I2C控制器的控制寄存器和狀態(tài)寄存器,以達到控制和查詢狀態(tài)的目的。外部CPU向I2C總線發(fā)起數(shù)據(jù)傳輸或者從I2C總線接收數(shù)據(jù)時,通過CPU總線模塊轉(zhuǎn)換后通過RAM總線讀/寫接收緩沖區(qū)間或發(fā)送緩沖區(qū)間的數(shù)據(jù)。所述緩沖區(qū)間包括雙端口 RAM,其具有兩個讀寫端口,每個端口都可以獨立操作,其中CPU占用一個讀寫端口,端口仲裁器占用另外一個讀寫端口。雙口 RAM讀寫地址由專門的指針寄存器來管理,雙口 RAM劃分的區(qū)間數(shù)與指針寄存器數(shù)目相對應(yīng),同時每個區(qū)間具有一個狀態(tài)寄存器,記錄相應(yīng)區(qū)間的存儲狀況。當CPU向緩沖區(qū)間某一個緩沖區(qū)間12寫入一個數(shù)據(jù)時,則相應(yīng)的指針寄存器自加1,區(qū)間狀態(tài)寄存器也相應(yīng)加1,當區(qū)間狀態(tài)寄存器達到最大值時,發(fā)送緩沖區(qū)間121滿指示信號,不允許CPU繼續(xù)寫入數(shù)據(jù)。當CPU向緩沖區(qū)間12讀取一個數(shù)據(jù)時,則相應(yīng)的指針寄存器自減1,區(qū)間狀態(tài)寄存器也相應(yīng)減1,當區(qū)間狀態(tài)寄存器達到O時,輸出區(qū)間空指示信號,不允許CPU繼續(xù)讀取數(shù)據(jù)。為了實現(xiàn)多個I2C控制器14可以同時訪問緩沖區(qū)間,所述仲裁器13以大于N倍 (N為控制器的數(shù)目)I2C數(shù)據(jù)總線速率的速率輪詢各個I2C控制器的請求信號,如有掃描到請求信號則立刻進行讀或?qū)懖僮?,完成后則繼續(xù)進行輪詢。相較于現(xiàn)有技術(shù),本發(fā)明基于FPGA的多通道I2C控制器比單通道的I2C控制器提供更大的帶寬,有效降低I2C總線出現(xiàn)仲裁沖突的次數(shù),提高實時性。本發(fā)明使用FPGA單塊Block RAM作為緩沖區(qū)間,能夠最大化地利用FPGA的RAM資源,有效降低成本,具有較高的資源利用率,能夠?qū)崿F(xiàn)更大的傳輸帶寬和更低延時的數(shù)據(jù)傳輸與處理。另外,本發(fā)明具有可調(diào)整的CPU總線,能夠作為各種處理器外設(shè),應(yīng)用靈活。以上實施方式僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施方式對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解其依然可以對前述實施方式所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施方式技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種基于FPGA的多通道I2C控制器,其特征在于,包括CPU接口、緩沖區(qū)間、仲裁器和I2C控制器,所述緩沖區(qū)間包括發(fā)送緩沖區(qū)間和接收緩沖區(qū)間,所述仲裁器包括寫狀態(tài)機和讀狀態(tài)機,所述仲裁器用于對I2C控制器的請求信號進行仲裁,所述緩沖區(qū)間用于對I2C控制器寫入/讀取和CPU寫入/讀取的數(shù)據(jù)進行緩沖,所述緩沖區(qū)間包括用于數(shù)據(jù)讀取/寫入計數(shù)的指針管理器。
2.根據(jù)權(quán)利要求I所述的基于FPGA的多通道I2C控制器,其特征在于,還包括CPU總線,外部CPU通過所述CPU總線訪問所述多通道I2C控制器的控制寄存器和狀態(tài)寄存器。
3.根據(jù)權(quán)利要求2所述的基于FPGA的多通道I2C控制器,其特征在于,所述多通道I2C控制器具有共用的發(fā)送緩沖區(qū)間和接收緩沖區(qū)間,所述發(fā)送緩沖區(qū)間和接收緩沖區(qū)間由雙端口隨機存取器實現(xiàn),依靠端口仲裁器實現(xiàn)所述多個I2C控制器讀寫緩沖區(qū)間并行操作,緩沖區(qū)間的指針由特定的模塊進行管理。
4.根據(jù)權(quán)利要求3所述的基于FPGA的多通道I2C控制器,其特征在于,所述指針管理器包括指針寄存器,在外部CPU讀取緩沖區(qū)間數(shù)據(jù)時,所述指針寄存器減I,在外部CPU寫入數(shù)據(jù)時,所述指針寄存器加I。
5.根據(jù)權(quán)利要求4所述的基于FPGA的多通道I2C控制器,其特征在于,所述I2C控制器接收到數(shù)據(jù)則向仲裁器發(fā)出寫請求,所述仲裁器中的寫狀態(tài)機查詢到寫請求后則查詢與發(fā)出請求的控制器對應(yīng)的接收緩沖區(qū)間的狀態(tài)寄存器,如果狀態(tài)寄存器中標識區(qū)間非滿,則將I2C控制器發(fā)出的數(shù)據(jù)寫入對應(yīng)緩沖區(qū)間間,并且發(fā)出一個脈沖指示要求接收緩沖區(qū)間的指針管理器將對應(yīng)指針加;否則仲裁器的寫狀態(tài)機重新進入到輪詢狀態(tài),指針不變,且I2C控制器中的數(shù)據(jù)將會丟失,當I2C向仲裁器發(fā)出讀請求,仲裁器中的讀狀態(tài)機檢測到讀請求后則查詢與發(fā)出請求的I2C控制器對應(yīng)的發(fā)送緩沖區(qū)間的狀態(tài)寄存器,如果狀態(tài)寄存器中標識區(qū)間非空,則將指針當前指向的數(shù)據(jù)讀出,并且發(fā)出一個脈沖信號要求接收緩沖區(qū)間的指針管理器將對應(yīng)指針減I ;否則仲裁器的讀狀態(tài)機重新進入到輪詢狀態(tài),指針不變,I2C控制器讀出數(shù)據(jù)將是上一次讀出的結(jié)果。
6.根據(jù)權(quán)利要求5所述的基于FPGA的多通道I2C控制器,其特征在于,當I2C控制器從總線上每接收到一個完整的數(shù)據(jù)就產(chǎn)生一個同步脈沖請求信號并輸出到仲裁器中;在結(jié)束一次連續(xù)數(shù)據(jù)接收后,I2C控制器產(chǎn)生一個中斷到CPU中,在I2C控制器發(fā)起傳輸?shù)街俨闷鬟M行仲裁后,所述I2C控制器讀取對應(yīng)區(qū)間的狀態(tài)寄存器,判斷區(qū)間有效數(shù)據(jù)的數(shù)目,并自動將這些有效數(shù)據(jù)連續(xù)讀出并傳輸?shù)絀2C總線上。
全文摘要
本發(fā)明公開了一種基于FPGA的多通道I2C控制器,包括CPU接口、緩沖區(qū)間、仲裁器和I2C控制器,所述緩沖區(qū)間包括發(fā)送緩沖區(qū)間和接收緩沖區(qū)間,所述仲裁器包括寫狀態(tài)機和讀狀態(tài)機,所述仲裁器用于對I2C控制器的請求信號進行仲裁,所述緩沖區(qū)間用于對I2C控制器寫入/讀取和CPU寫入/讀取的數(shù)據(jù)進行緩沖,所述緩沖區(qū)間包括用于數(shù)據(jù)讀取/寫入計數(shù)的指針管理器。
文檔編號G06F13/26GK102841869SQ20121022767
公開日2012年12月26日 申請日期2012年7月3日 優(yōu)先權(quán)日2012年7月3日
發(fā)明者高勝, 劉增華 申請人:深圳市邦彥信息技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
自贡市| 育儿| 聂拉木县| 顺义区| 新津县| 武汉市| 象州县| 惠东县| 衡东县| 原平市| 于都县| 新疆| 南溪县| 沁阳市| 无锡市| 南通市| 岑巩县| 顺平县| 蓝田县| 阿勒泰市| 广饶县| 阿拉善右旗| 绥江县| 习水县| 永川市| 抚松县| 兰西县| 永康市| 囊谦县| 宕昌县| 镇康县| 新沂市| 藁城市| 奇台县| 张北县| 富宁县| 桦甸市| 廉江市| 上杭县| 辛集市| 凤台县|