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