《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的CPCI系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
基于FPGA的CPCI系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
2018年電子技術(shù)應(yīng)用第11期
魏建勇
武漢虹旭信息技術(shù)有限責(zé)任公司,湖北 武漢430074
摘要: 集成工控機(jī)箱使用CPCI接口兼容各種可插拔板卡,,板卡的CPCI設(shè)計(jì)多使用專用芯片搭配FPGA實(shí)現(xiàn),,降低了可擴(kuò)展性,增加了板卡面積和成本,。為了解決上述問(wèn)題,,設(shè)計(jì)了一種基于FPGA的CPCI接口。介紹了使用FPGA實(shí)現(xiàn)的CPCI協(xié)議,、仿真及外部通信總線協(xié)議,、外部中斷機(jī)制、沖突避免機(jī)制,,該設(shè)計(jì)在量產(chǎn)的各種CPCI板卡中使用,,用于各種廠家的CPCI機(jī)箱。與傳統(tǒng)實(shí)現(xiàn)方案相比,,該方案具有成本低,、體積小、靈活性好,、兼容性高等優(yōu)點(diǎn),,在小型工控領(lǐng)域內(nèi)具有明顯的優(yōu)勢(shì)。
關(guān)鍵詞: CPCI FPGA ARM
中圖分類號(hào): TN836
文獻(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.
Design and implementation of CPCI system based on FPGA
Wei Jianyong
Wuhan Hongxu Information technologies Co.,,Ltd,,Wuhan 430074,China
Abstract: The integrated industrial control chassis is compatible with all kinds of pluggable boards using CPCI interface. The CPCI design of board card uses special chips to match the FPGA, which reduces the extensibility, and increases the area and cost of the card. In order to solve these problems, a CPCI interface based on FPGA is designed. This paper describes the CPCI protocol implemented with FPGA, simulation and external communication bus protocol, external interrupt mechanism, and conflict avoidance mechanism. This design is used in various CPCI cards produced by the mass production, and it is used in the CPCI chassis of various manufacturers. Compared with the traditional implementation scheme, the scheme has the advantages of low cost, small size, good flexibility and high compatibility. It has obvious advantages in the field of small industrial control.
Key words : CPCI,;FPGA,;ARM

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]

ck1-t1.gif

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%)。

ck1-t2.gif

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ù),,與寫入完全一致,。

ck1-t3.gif

    此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í)鐘管腳上,。

ck1-t4.gif

ck1-t5.gif

    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í)行操作:

ck1-t6.gif

    (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)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。