文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.181546
中文引用格式: 魏建勇. 基于FPGA的CPCI系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,,2018,,44(11):50-52,56.
英文引用格式: Wei Jianyong. Design and implementation of CPCI system based on FPGA[J]. Application of Electronic Technique,,2018,,44(11):50-52,56.
0 引言
目前的儀器或者工控系統(tǒng)多數(shù)使用集成式工控機(jī)箱,機(jī)箱背板一般通過(guò)CPCI(Compact PCI)接口連接所有的插卡,,包括工控電腦和各種采集卡,、控制卡等。設(shè)計(jì)板卡時(shí)需要考慮CPCI接口實(shí)現(xiàn)及通信機(jī)制,,現(xiàn)有板卡多使用專用接口芯片,,例如PCI9054芯片,這類芯片可擴(kuò)展性不強(qiáng),,需要外擴(kuò)FPGA芯片,,使用不靈活;且直接使用FPGA的IP核實(shí)現(xiàn)CPCI協(xié)議占用資源多,,開(kāi)發(fā)成本較高,,在有某些特殊需求時(shí)不便擴(kuò)展。
本文提出了一種基于FPGA的CPCI系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),,使用廉價(jià)FPGA芯片實(shí)現(xiàn)CPCI通信協(xié)議,,同時(shí)利用FPGA的可編程特性實(shí)現(xiàn)電源控制、靈活中斷,、外部觸發(fā),、外部通信等特殊應(yīng)用的功能,解決了CPCI協(xié)議經(jīng)過(guò)CPCI橋時(shí)的沖突問(wèn)題,。
1 系統(tǒng)設(shè)計(jì)
1.1 系統(tǒng)框圖
如圖1所示,,本系統(tǒng)主要包含嵌入式板卡和CPCI工控機(jī)箱,板卡插入到CPCI機(jī)箱背板插槽,。嵌入式板卡內(nèi)的FPGA與CPCI插槽間使用CPCI總線和用戶IO連接,,F(xiàn)PGA與ARM之間通過(guò)特定IO實(shí)現(xiàn)的總線連接,同時(shí)FPGA上連接一個(gè)三極管驅(qū)動(dòng)的繼電器[1],。
1.2 系統(tǒng)功能
FPGA和背板接口為CPCI接口,,通過(guò)CPCI協(xié)議通信;ARM使用自定義總線協(xié)議將數(shù)據(jù)寫(xiě)入到FPGA的RAM緩存,然后使用CPCI接口發(fā)送給主控機(jī),,反之亦然,。FPGA能識(shí)別CPCI的信號(hào)給ARM產(chǎn)生中斷,也能夠識(shí)別ARM的信號(hào)給CPCI產(chǎn)生有效中斷,,還可以通過(guò)繼電器控制板卡上電,、下電、復(fù)位,,能通過(guò)IO控制實(shí)現(xiàn)ARM的ISP(在線升級(jí),,僅需控制一個(gè)ARM管腳)功能并產(chǎn)生背板觸發(fā)信號(hào)。
下文從FPGA設(shè)計(jì),、ARM設(shè)計(jì)和通信機(jī)制三方面進(jìn)行說(shuō)明,。
2 FPGA設(shè)計(jì)
如圖2所示,F(xiàn)PGA內(nèi)部主要包括CPCI協(xié)議,、IO_MEM,、ARM解碼、讀中斷產(chǎn)生,、CPCI中斷產(chǎn)生,、電源控制等模塊[2-3]。FPGA芯片根據(jù)使用資源和成本選擇Xilinx公司的XC2S100,,最后使用387個(gè)Slice寄存器(占比16%),、882個(gè)LUTs(占比36%)。
2.1 CPCI協(xié)議模塊
2.1.1 協(xié)議
CPCI協(xié)議兼容PCI2.2協(xié)議,,擴(kuò)展了部分用戶接口,,所以模塊按照標(biāo)準(zhǔn)PCI2.2協(xié)議完成,實(shí)現(xiàn)配置空間管理,、IO讀寫(xiě),、Memory單字讀寫(xiě)、Memory突發(fā)讀寫(xiě),、仲裁和中斷等功能,。協(xié)議細(xì)節(jié)參看文獻(xiàn)[4]、[5],。
2.1.2 FPGA仿真
對(duì)ISE布線后的文件用ModelSimXE進(jìn)行時(shí)序后仿真,,下面給出通過(guò)CPCI總線進(jìn)行Memory突發(fā)讀寫(xiě)的仿真,因IO讀寫(xiě)和Memory單字讀寫(xiě)時(shí)序與Memory突發(fā)讀寫(xiě)類似,,在此不再贅述[6-8],。
圖3上半部分是Memory突發(fā)寫(xiě)的時(shí)序過(guò)程,在地址0xd000處連續(xù)寫(xiě)入10個(gè)依次遞增的32 bit數(shù)據(jù),,起始數(shù)據(jù)為0x15896345,。下半部分是寫(xiě)完之后的Memory突發(fā)讀時(shí)序,,可見(jiàn)從0xd000讀出的連續(xù)若干32 bit數(shù)據(jù),與寫(xiě)入完全一致,。
此CPCI板卡在插入實(shí)際機(jī)箱槽位時(shí)出現(xiàn)這樣的問(wèn)題:某些廠家的機(jī)箱特定槽位插入會(huì)死機(jī)。該問(wèn)題使用市面上的成品CPCI板卡也會(huì)遇到,,經(jīng)過(guò)分析,,修改了CPCI板卡協(xié)議里的一個(gè)關(guān)于CPCI橋的接口,死機(jī)情況不再發(fā)生,。
2.2 IO_MEM模塊
本模塊由3個(gè)雙口RAM組成,,在CPCI系統(tǒng)中命名為BA0、BAR1,、BAR2,,BAR0和BAR2是16 B的IO空間,僅支持單個(gè)字讀取,,BAR1為2 048 B的MEM空間,,支持單字讀寫(xiě)和突發(fā)讀寫(xiě)。其中BAR1僅支持1 B的空間訪問(wèn),,只用來(lái)進(jìn)行電源控制和ISP,,不可通過(guò)其他外設(shè)訪問(wèn)。
2.3 ARM解碼模塊
本模塊實(shí)現(xiàn)FPGA與ARM之間IO和Memory接口時(shí)序,,因兩者時(shí)序基本相同,,以Memory時(shí)序?yàn)槔f(shuō)明,定義如圖4和圖5所示,。硬件接口由時(shí)鐘,、使能、RAM選擇,、讀寫(xiě)選擇,、地址數(shù)據(jù)總線(8根)組成。特別需要注意的是,,時(shí)鐘線必須連接到FPGA的全局時(shí)鐘管腳上,。
Memory讀/寫(xiě)時(shí)序必須保證在地址A有效之后的第2個(gè)時(shí)鐘周期開(kāi)始接收/輸入數(shù)據(jù),32 bit數(shù)據(jù)由4 B組成,,按低位字節(jié)到高位字節(jié)的順序輸出/輸入,,數(shù)據(jù)組合/拆分由ARM完成。接收/寫(xiě)入不同地址段的數(shù)據(jù)必須先使en_arm無(wú)效,,然后再使能,。
2.4 ARM讀中斷
當(dāng)FPGA內(nèi)部的BAR0寫(xiě)有效時(shí)使能int_arm,該信號(hào)會(huì)觸發(fā)ARM的外部IO中斷,。通過(guò)CPCI接口往BAR0寫(xiě)入任何數(shù)據(jù)均可產(chǎn)生一個(gè)脈沖觸發(fā)信號(hào),,可以使用此信號(hào)去中斷ARM,。
2.5 CPCI中斷
ARM需要給CPCI產(chǎn)生中斷,機(jī)制如下:
(1)ARM給IO0空間偏移地址2寫(xiě)入0x01,,在INTA#上出現(xiàn)低電平觸發(fā)信號(hào),;
(2)主控機(jī)檢測(cè)到此電平觸發(fā)中斷,馬上禁止中斷,,往IO1空間偏移地址0寫(xiě)入0xfb,,之后INTA#被拉高,此時(shí)ARM無(wú)法通過(guò)步驟(1)再次發(fā)送中斷,,也就是說(shuō),,INTA#無(wú)法被ARM拉低;
(3)主控機(jī)處理完臨界代碼之后,,往IO1空間偏移地址0寫(xiě)入0xfa,,允許ARM產(chǎn)生中斷,也即,,ARM可以通過(guò)步驟(1)再次產(chǎn)生中斷,。
2.6 外圍控制
電源控制和觸發(fā)信號(hào)都是通過(guò)ARM或者主控機(jī)給CPCI的特定空間寫(xiě)入預(yù)定信息,檢測(cè)信息之后做出相應(yīng)的處理[6],。
(1)主控機(jī)向BAR2空間的0偏移寫(xiě)入0xff,、0xfe、0xfd,、0xfc實(shí)現(xiàn)上電,、掉電、復(fù)位,、ISP功能,;
(2)主控機(jī)往BAR2空間的0偏移寫(xiě)入一個(gè)小于128的數(shù),此數(shù)值是給背板產(chǎn)生的觸發(fā)脈沖個(gè)數(shù),;
(3)ARM往BAR0空間的1偏移寫(xiě)入一個(gè)小于256的數(shù),,此數(shù)值是給背板產(chǎn)生的觸發(fā)脈沖個(gè)數(shù),ARM能產(chǎn)生的觸發(fā)脈沖比主控機(jī)多一倍,。
3 ARM設(shè)計(jì)
在本系統(tǒng)中,,ARM和FPGA的總線連接使用IO口模擬實(shí)現(xiàn)。按照前面描述的時(shí)序,,ARM中接口相關(guān)功能有:
(1)響應(yīng)中斷信號(hào),,讀取、執(zhí)行IO命令,;
(2)讀取IO數(shù)據(jù),;
(3)讀寫(xiě)Memory數(shù)據(jù)。
因接口時(shí)序的ARM代碼實(shí)現(xiàn)較簡(jiǎn)單,,在此不再贅述,,具體的實(shí)現(xiàn)機(jī)制可參看后續(xù)的通信機(jī)制設(shè)計(jì),。
4 通信機(jī)制設(shè)計(jì)
從CPCI的角度看,ARM和主控機(jī)為主設(shè)備,,F(xiàn)PGA為從設(shè)備,。對(duì)于FPGA來(lái)說(shuō),CPCI接口和ARM接口完全獨(dú)立,,但是兩者都可以對(duì)RAM進(jìn)行讀寫(xiě),,如果沒(méi)有一個(gè)協(xié)調(diào)機(jī)制,很可能發(fā)生讀寫(xiě)沖突,,必須有一個(gè)規(guī)則來(lái)協(xié)調(diào)數(shù)據(jù)的傳送[9-10]。因?yàn)镃PCI為標(biāo)準(zhǔn)接口,,所以需要定義的是FPGA和ARM的接口和主控機(jī)驅(qū)動(dòng)讀寫(xiě)規(guī)則,,下面介紹FPGA和ARM的接口和主控機(jī)讀寫(xiě)規(guī)則。
主控機(jī)與ARM需要交互的數(shù)據(jù)全部放在FPGA的RAM中進(jìn)行緩沖,。實(shí)現(xiàn)規(guī)則如下:
(1)IO空間只分配1 B,,存放主控機(jī)發(fā)送的命令;
(2)Memory中讀寫(xiě)空間分開(kāi),,偏移0~999為主控機(jī)寫(xiě),、ARM讀數(shù)據(jù)空間,1 000~2 048為主控機(jī)讀,、ARM寫(xiě)數(shù)據(jù)空間,。
圖6描述了ARM、CPCI和主控機(jī)的數(shù)據(jù)流向和讀寫(xiě)流程,。為避免系統(tǒng)讀寫(xiě)沖突,,需按照如下規(guī)則執(zhí)行操作:
(1)ARM讀寫(xiě)CPCI的Memory空間之前,使write_acc或read_acc無(wú)效,,讀寫(xiě)完畢使之有效,。
(2)主控機(jī)讀Memory時(shí)首先讀read_acc,如果有效,,開(kāi)始讀所需內(nèi)存,,否則等待一段時(shí)間重試;寫(xiě)Memory時(shí)首先讀write_acc,,如果有效,,開(kāi)始往指定內(nèi)存寫(xiě)數(shù)據(jù),否則等待一段時(shí)間重試,;主控機(jī)對(duì)IO的寫(xiě)不需要讀write_acc,。
(3)主控機(jī)寫(xiě)Memory一般過(guò)程為:先根據(jù)所需命令確定需要將數(shù)據(jù)寫(xiě)入哪些空間,然后將配置數(shù)據(jù)寫(xiě)入Memory中,,最后把控制命令寫(xiě)入IO空間,;讀Memory則直接讀取數(shù)據(jù),。
本方案用于數(shù)據(jù)采集卡、數(shù)字基帶模擬卡,、本振信號(hào)發(fā)生卡,、中頻變頻接收卡等多種功能應(yīng)用,兼容研華,、凌華等幾大廠家的工控機(jī)箱,。
5 結(jié)束語(yǔ)
本文給出了一種基于FPGA的CPCI系統(tǒng)設(shè)計(jì)方案,介紹了實(shí)施基本框架,、CPCI協(xié)議,、自定義總線通信協(xié)議和通信沖突避免機(jī)制,按照設(shè)計(jì)方案實(shí)現(xiàn)了低成本,、高密度,、易擴(kuò)展的CPCI通信系統(tǒng),在工程上便于實(shí)現(xiàn),,能廣泛應(yīng)用于工控和測(cè)量領(lǐng)域,,對(duì)類似設(shè)計(jì)提供了參考。
參考文獻(xiàn)
[1] 任勇峰,,彭巧君,,劉占峰.基于FPGA的CPCI高速讀數(shù)接口設(shè)計(jì)[J].電子器件,2015(1):148-151.
[2] 田源,,王立德,,嚴(yán)翔,等.基于FPGA+CPCI的WTB通信板設(shè)計(jì)[J].機(jī)車(chē)電傳動(dòng),,2014(4):28-32,,56.
[3] 王銳,張友方,,陳延云,,等.基于FPGA的數(shù)據(jù)采集卡的CPCI接口設(shè)計(jì)[J].電子技術(shù),2010,,37(2):35-37.
[4] PICMG2.0R3.0,,CompactPCI Specification[Z].1999.
[5] PCI Local Bus Specification(Revision 2.3)[Z].PCI Local Bus,2001.
[6] 劉青,,馬天乙.CPCI數(shù)據(jù)總線接口的設(shè)計(jì)與實(shí)現(xiàn)[J].電子科技,,2011,24(6):95-96,,100.
[7] SHANLEY T,,ANDERSON D.PCI系統(tǒng)結(jié)構(gòu)[M].北京:電子工業(yè)出版社,2000.
[8] 李貴山,,戚德虎.PCI局部總線開(kāi)發(fā)者指南[M].西安:西安電子科技大學(xué)出版社,,1997.
[9] 巫幪,,蘇濤,史佳歡.通用信號(hào)處理板卡的CPCI總線接口設(shè)計(jì)和驅(qū)動(dòng)開(kāi)發(fā)[J].國(guó)外電子元器件,,2007(2):26-30.
[10] 郭立俊,,譚劍波.一種基于FPGA的CPCI總線接口設(shè)計(jì)方法[J].合肥工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2014(5):596-599.
作者信息:
魏建勇
(武漢虹旭信息技術(shù)有限責(zé)任公司,,湖北 武漢430074)