本發(fā)明涉及電子技術(shù)領(lǐng)域,特別涉及一種FPGA及進(jìn)行總線切換的方法和系統(tǒng)。
背景技術(shù):
FPGA(Field-Programmable Gate Array,現(xiàn)場(chǎng)可編程門陣列)是一種主流的控制芯片,具有性能穩(wěn)定,集成度高的優(yōu)點(diǎn)。FPGA可以完成的功能由用戶編寫的FPGA程序文件決定。
FPGA在系統(tǒng)的I2C總線中作為slave(從機(jī)),MCU(Multipoint Control Unit,多點(diǎn)控制單元)作為master(主機(jī))。在正常工作狀態(tài)中,MCU對(duì)FPGA進(jìn)行數(shù)據(jù)讀寫,但調(diào)試過程中會(huì)有另外一個(gè)作為master的調(diào)試工具的介入,導(dǎo)致同一個(gè)總線中有兩個(gè)master。當(dāng)兩個(gè)master同時(shí)對(duì)FPGA進(jìn)行讀寫操作時(shí),就會(huì)出現(xiàn)總線沖突,導(dǎo)致通信的失敗。
綜上所述,如果有兩個(gè)外部設(shè)備同時(shí)對(duì)FPGA進(jìn)行讀寫操作時(shí),就會(huì)出現(xiàn)總線沖突,導(dǎo)致通信的失敗。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種FPGA及進(jìn)行總線切換的方法和系統(tǒng),用以解決現(xiàn)有技術(shù)中存在的如果有多個(gè)外部設(shè)備同時(shí)對(duì)FPGA進(jìn)行讀寫操作時(shí),就會(huì)出現(xiàn)總線沖突,導(dǎo)致通信的失敗問題。
本發(fā)明實(shí)施例提供的一種進(jìn)行總線切換的系統(tǒng),該系統(tǒng)包括:FPGA和多個(gè)外部設(shè)備,其中不同的外部設(shè)備通過不同的I2C總線與FPGA連接;
所述FPGA,用于根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的I2C總線,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的I2C總線。
本發(fā)明實(shí)施例提供的一種進(jìn)行總線切換的FPGA,該FPGA包括:控制模塊和內(nèi)部處理模塊,所述內(nèi)部處理模塊通過切換模塊與多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備連接;
所述控制模塊,用于根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的I2C總線,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的I2C總線。
本發(fā)明實(shí)施例提供的一種進(jìn)行總線切換的方法,該方法包括:
FPGA接收切換信號(hào);
所述FPGA根據(jù)收到的所述切換信號(hào)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的I2C總線,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的I2C總線。
本發(fā)明實(shí)施例FPGA根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的I2C總線,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的I2C總線。由于能夠在多個(gè)外部設(shè)備中導(dǎo)通一個(gè)外部設(shè)備之間的I2C總線,并斷開其他外部設(shè)備之間的I2C總線,從而在有多個(gè)外部設(shè)備同時(shí)對(duì)FPGA進(jìn)行讀寫操作時(shí),只會(huì)導(dǎo)通其中一個(gè),不會(huì)出現(xiàn)總線沖突,導(dǎo)致通信失敗的情況發(fā)生,提高了FPGA的通信能力。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例進(jìn)行總線切換的系統(tǒng)結(jié)構(gòu)示意圖;
圖2A為本發(fā)明實(shí)施例FPGA的結(jié)構(gòu)示意圖;
圖2B為本發(fā)明實(shí)施例控制模塊的結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例第一切換模塊的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例第二切換模塊的結(jié)構(gòu)示意圖;
圖5A為本發(fā)明實(shí)施例FPGA與兩個(gè)外部設(shè)備連接的架構(gòu)示意圖;
圖5B為本發(fā)明實(shí)施例與兩個(gè)外部設(shè)備連接的FPGA的結(jié)構(gòu)示意圖;
圖6為本發(fā)明實(shí)施例進(jìn)行總線切換的方法流程示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部份實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
如圖1所示,本發(fā)明實(shí)施例進(jìn)行總線切換的系統(tǒng)包括:FPGA1和多個(gè)外部設(shè)備2,其中不同的外部設(shè)備通過不同的I2C總線與FPGA連接;
所述FPGA1,用于根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的I2C總線,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的I2C總線。
由于本發(fā)明實(shí)施例能夠在多個(gè)外部設(shè)備中導(dǎo)通一個(gè)外部設(shè)備之間的I2C總線,并斷開其他外部設(shè)備之間的I2C總線,從而在有多個(gè)外部設(shè)備同時(shí)對(duì)FPGA進(jìn)行讀寫操作時(shí),只會(huì)導(dǎo)通其中一個(gè),不會(huì)出現(xiàn)總線沖突,導(dǎo)致通信失敗的情況發(fā)生,提高了FPGA的通信能力。
所述I2C總線包括SCL(serial clock,串行時(shí)鐘)端口和SDA(serial data,串行數(shù)據(jù))端口,其中SCL端口用于傳輸時(shí)鐘信號(hào);SDA端口是雙向口,用于輸出和輸入信號(hào)。
在實(shí)施中,F(xiàn)PGA會(huì)收到外部設(shè)備的信號(hào);相應(yīng)的,F(xiàn)PGA也需要向外部設(shè)備發(fā)送信號(hào)。
切換信號(hào)也包括輸入切換信號(hào)和輸出切換信號(hào)。
如果收到輸入切換信號(hào),則FPGA會(huì)收到外部設(shè)備的信號(hào);
如果收到輸出切換信號(hào),則FPGA需要向外部設(shè)備發(fā)送信號(hào)。
基于此,若收到的切換信號(hào)為輸入切換信號(hào),F(xiàn)PGA根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SCL端口和SDA端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SCL端口和SDA端口;
若收到的切換信號(hào)為輸出切換信號(hào),F(xiàn)PGA根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SDA端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SDA端口。
在實(shí)施中,切換信號(hào)可以由外部設(shè)備發(fā)送。
比如有一個(gè)外部設(shè)備直接與FPGA通過信號(hào)線連接,并由用戶通過人機(jī)界面在外部設(shè)備上發(fā)送切換信號(hào);
相應(yīng)的,F(xiàn)PGA通過信號(hào)線就可以收到切換信號(hào)。
其中,F(xiàn)PGA的內(nèi)部結(jié)構(gòu)可以參見圖2。
如圖2A所示,本發(fā)明實(shí)施例FPGA包括:控制模塊20和內(nèi)部處理模塊21,所述內(nèi)部處理模塊通過切換模塊與多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備連接;
所述控制模塊20,用于根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的I2C總線,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的I2C總線。
控制模塊20實(shí)際是進(jìn)行外部設(shè)備切換,即選擇哪個(gè)外部設(shè)備與FPGA中的內(nèi)部處理模塊21連接。
內(nèi)部處理模塊21是進(jìn)行信號(hào)處理以及生成信號(hào)的模塊,即FPGA的所有功能都由內(nèi)部處理模塊21實(shí)現(xiàn)。
可選的,如圖2B所示,本發(fā)明實(shí)施例所述控制模塊20包括第一切換模塊200和第二切換模塊201;
所述第一切換模塊200用于:
若收到的切換信號(hào)為輸入切換信號(hào),根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SDA端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SDA端口;若收到的切換信號(hào)為輸出切換信號(hào),根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SDA端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SDA端口。
所述第二切換模塊201用于:
若收到的切換信號(hào)為輸入切換信號(hào),根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SCL端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SCL端口。
其中,所述第一切換模塊200的內(nèi)部結(jié)構(gòu)可以參見圖3;所述第二切換模塊201的內(nèi)部結(jié)構(gòu)可以參見圖4。
如圖3所示,本發(fā)明實(shí)施例第一切換模塊200可以包括第一選擇器2000和第二選擇器2001。
所述第一選擇器2000用于:
若收到的切換信號(hào)為輸入切換信號(hào),根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SDA端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SDA端口;
所述第二選擇器2001用于:
若收到的切換信號(hào)為輸出切換信號(hào),根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SDA端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SDA端口。
可選的,所述第一切換模塊200還包括多個(gè)第一緩存緩沖器2002和多個(gè)第二緩存緩沖器2003;
其中,所述第一選擇器2000與每個(gè)I2C總線之間通過至少一個(gè)第一緩存緩沖器2002連接;
所述第二選擇器2001與每個(gè)I2C總線之間通過至少一個(gè)第二緩存緩沖器2003連接。
在實(shí)施中,一個(gè)第一緩存緩沖器2002可以只與一個(gè)外部設(shè)備連接,一個(gè)第二緩存緩沖器2003只與一個(gè)外部設(shè)備連接。
比如所述第一選擇器2000與每個(gè)I2C總線之間通過一個(gè)第一緩存緩沖器2002連接,則如果由5個(gè)外部設(shè)備,就需要5個(gè)第一緩存緩沖器2002和5個(gè)第二緩存緩沖器2003。
其中,第一緩存(buffer)緩沖器2002和第二緩存緩沖器2003是FPGA管腳作為雙向口的配置,用于提高信號(hào)驅(qū)動(dòng)能力和傳輸能力。
可選的,所述第一選擇器2000和所述第二選擇器2001為MUX(數(shù)據(jù)選擇器)。
如圖4所示,本發(fā)明實(shí)施例第二切換模塊201可以是MUX。如果第二切換模塊201收到輸入切換信號(hào),根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SCL端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SCL端口。
下面以FPGA與兩個(gè)外部設(shè)備連接為例對(duì)本發(fā)明實(shí)施例的方案進(jìn)行說明。其中,兩個(gè)外部設(shè)備其中一個(gè)是MCU,另一個(gè)是調(diào)整工具。
如圖5A所示,本發(fā)明實(shí)施例FPGA與兩個(gè)外部設(shè)備連接的架構(gòu)示意圖中,兩個(gè)外部設(shè)備一個(gè)是MCU一個(gè)是I2C調(diào)整工具。用戶通過PC的人機(jī)界面觸發(fā)I2C調(diào)整工具通過I2C_MUX向FPGA發(fā)送切換信號(hào)。
如圖5B所示,本發(fā)明實(shí)施例與兩個(gè)外部設(shè)備連接的FPGA的結(jié)構(gòu)示意圖中,I2C總線包含兩個(gè)端口:SCL端口和SDA端口。FPGA內(nèi)部的就是要對(duì)兩套總線的兩個(gè)端口分別切換。兩套總線的端口對(duì)應(yīng)為SCL1、SDA1、SCL2、SDA2。
FPGA包括一個(gè)MUX 50,一個(gè)MUX 51和一個(gè)MUX 52,還包括;兩個(gè)輸出buffer緩沖器53和兩個(gè)輸入buffer緩沖器54。
一個(gè)輸出buffer緩沖器53位于SDA1端口和MUX 50之間,另一個(gè)輸出buffer緩沖器53位于SDA1端口和MUX 50之間。
一個(gè)輸入buffer緩沖器54位于SDA1端口和MUX 51之間,另一個(gè)輸出buffer緩沖器54位于SDA2端口和MUX 51之間。
其中,MUX 50是1to2,MUX 51和MUX 52是2to1。
正常情況下,MCU的I2C總線同F(xiàn)PGA連接,默認(rèn)選擇I2C1總線,F(xiàn)PGA的內(nèi)部信號(hào)SCL_IN=SCL1,則MUX 52導(dǎo)通與MCU之間的SCL1端口;
當(dāng)MCU進(jìn)行寫操作時(shí)SDA_IN=SDA1,則MUX 51導(dǎo)通與MCU之間的SDA1端口;
當(dāng)MCU進(jìn)行讀操作時(shí)SDA_OUT=SDA1,則MUX 50導(dǎo)通與MCU之間的SDA1端口。
當(dāng)調(diào)試工具接入要進(jìn)行調(diào)試操作時(shí),F(xiàn)PGA的內(nèi)部信號(hào)SCL_IN=SCL2,則MUX 52導(dǎo)通與MCU之間的SCL2端口;
當(dāng)調(diào)試工具進(jìn)行寫操作時(shí)SDA_IN=SDA2,則MUX 51導(dǎo)通與MCU之間的SDA2端口;
當(dāng)調(diào)試工具進(jìn)行讀操作時(shí)SDA_OUT=SDA2,則MUX 50導(dǎo)通與MCU之間的SDA2端口。
如圖6所示,本發(fā)明實(shí)施例進(jìn)行總線切換的方法包括:
步驟600、FPGA接收切換信號(hào);
步驟601、所述FPGA根據(jù)收到的所述切換信號(hào)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的I2C總線,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的I2C總線。
可選的,所述I2C總線包括SCL端口和SDA端口;
所述FPGA根據(jù)收到的所述切換信號(hào)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的I2C總線,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的I2C總線,包括:
若收到的切換信號(hào)為輸入切換信號(hào),根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SCL端口和SDA端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SCL端口和SDA端口;
若收到的切換信號(hào)為輸出切換信號(hào),根據(jù)收到的切換信號(hào)導(dǎo)通與所述多個(gè)外部設(shè)備中的一個(gè)外部設(shè)備之間的SDA端口,并斷開與所述多個(gè)外部設(shè)備中其他外部設(shè)備之間的SDA端口。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。