文獻(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ù)寫入到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讀寫,、Memory單字讀寫、Memory突發(fā)讀寫,、仲裁和中斷等功能,。協(xié)議細(xì)節(jié)參看文獻(xiàn)[4]、[5],。
2.1.2 FPGA仿真
對(duì)ISE布線后的文件用ModelSimXE進(jìn)行時(shí)序后仿真,,下面給出通過(guò)CPCI總線進(jìn)行Memory突發(fā)讀寫的仿真,因IO讀寫和Memory單字讀寫時(shí)序與Memory突發(fā)讀寫類似,,在此不再贅述[6-8],。
圖3上半部分是Memory突發(fā)寫的時(shí)序過(guò)程,在地址0xd000處連續(xù)寫入10個(gè)依次遞增的32 bit數(shù)據(jù),,起始數(shù)據(jù)為0x15896345,。下半部分是寫完之后的Memory突發(fā)讀時(shí)序,可見(jiàn)從0xd000讀出的連續(xù)若干32 bit數(shù)據(jù),,與寫入完全一致,。
此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空間,,支持單字讀寫和突發(fā)讀寫,。其中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選擇、讀寫選擇,、地址數(shù)據(jù)總線(8根)組成,。特別需要注意的是,時(shí)鐘線必須連接到FPGA的全局時(shí)鐘管腳上,。
Memory讀/寫時(shí)序必須保證在地址A有效之后的第2個(gè)時(shí)鐘周期開(kāi)始接收/輸入數(shù)據(jù),,32 bit數(shù)據(jù)由4 B組成,按低位字節(jié)到高位字節(jié)的順序輸出/輸入,,數(shù)據(jù)組合/拆分由ARM完成,。接收/寫入不同地址段的數(shù)據(jù)必須先使en_arm無(wú)效,然后再使能,。
2.4 ARM讀中斷
當(dāng)FPGA內(nèi)部的BAR0寫有效時(shí)使能int_arm,,該信號(hào)會(huì)觸發(fā)ARM的外部IO中斷。通過(guò)CPCI接口往BAR0寫入任何數(shù)據(jù)均可產(chǎn)生一個(gè)脈沖觸發(fā)信號(hào),,可以使用此信號(hào)去中斷ARM,。
2.5 CPCI中斷
ARM需要給CPCI產(chǎn)生中斷,機(jī)制如下:
(1)ARM給IO0空間偏移地址2寫入0x01,,在INTA#上出現(xiàn)低電平觸發(fā)信號(hào),;
(2)主控機(jī)檢測(cè)到此電平觸發(fā)中斷,馬上禁止中斷,,往IO1空間偏移地址0寫入0xfb,,之后INTA#被拉高,此時(shí)ARM無(wú)法通過(guò)步驟(1)再次發(fā)送中斷,,也就是說(shuō),,INTA#無(wú)法被ARM拉低;
(3)主控機(jī)處理完臨界代碼之后,往IO1空間偏移地址0寫入0xfa,,允許ARM產(chǎn)生中斷,,也即,ARM可以通過(guò)步驟(1)再次產(chǎn)生中斷,。
2.6 外圍控制
電源控制和觸發(fā)信號(hào)都是通過(guò)ARM或者主控機(jī)給CPCI的特定空間寫入預(yù)定信息,,檢測(cè)信息之后做出相應(yīng)的處理[6]。
(1)主控機(jī)向BAR2空間的0偏移寫入0xff,、0xfe,、0xfd、0xfc實(shí)現(xiàn)上電,、掉電、復(fù)位,、ISP功能,;
(2)主控機(jī)往BAR2空間的0偏移寫入一個(gè)小于128的數(shù),此數(shù)值是給背板產(chǎn)生的觸發(fā)脈沖個(gè)數(shù),;
(3)ARM往BAR0空間的1偏移寫入一個(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)讀寫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)行讀寫,如果沒(méi)有一個(gè)協(xié)調(diào)機(jī)制,,很可能發(fā)生讀寫沖突,,必須有一個(gè)規(guī)則來(lái)協(xié)調(diào)數(shù)據(jù)的傳送[9-10]。因?yàn)镃PCI為標(biāo)準(zhǔn)接口,所以需要定義的是FPGA和ARM的接口和主控機(jī)驅(qū)動(dòng)讀寫規(guī)則,,下面介紹FPGA和ARM的接口和主控機(jī)讀寫規(guī)則,。
主控機(jī)與ARM需要交互的數(shù)據(jù)全部放在FPGA的RAM中進(jìn)行緩沖。實(shí)現(xiàn)規(guī)則如下:
(1)IO空間只分配1 B,,存放主控機(jī)發(fā)送的命令,;
(2)Memory中讀寫空間分開(kāi),偏移0~999為主控機(jī)寫,、ARM讀數(shù)據(jù)空間,,1 000~2 048為主控機(jī)讀、ARM寫數(shù)據(jù)空間,。
圖6描述了ARM,、CPCI和主控機(jī)的數(shù)據(jù)流向和讀寫流程。為避免系統(tǒng)讀寫沖突,,需按照如下規(guī)則執(zhí)行操作:
(1)ARM讀寫CPCI的Memory空間之前,,使write_acc或read_acc無(wú)效,讀寫完畢使之有效,。
(2)主控機(jī)讀Memory時(shí)首先讀read_acc,,如果有效,開(kāi)始讀所需內(nèi)存,,否則等待一段時(shí)間重試,;寫Memory時(shí)首先讀write_acc,如果有效,,開(kāi)始往指定內(nèi)存寫數(shù)據(jù),,否則等待一段時(shí)間重試;主控機(jī)對(duì)IO的寫不需要讀write_acc,。
(3)主控機(jī)寫Memory一般過(guò)程為:先根據(jù)所需命令確定需要將數(shù)據(jù)寫入哪些空間,,然后將配置數(shù)據(jù)寫入Memory中,最后把控制命令寫入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ī)車電傳動(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)