《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于FPGA的CPCI系统设计与实现
基于FPGA的CPCI系统设计与实现
2018年电子技术应用第11期
魏建勇
武汉虹旭信息技术有限责任公司,湖北 武汉430074
摘要: 集成工控机箱使用CPCI接口兼容各种可插拔板卡,板卡的CPCI设计多使用专用芯片搭配FPGA实现,降低了可扩展性,增加了板卡面积和成本。为了解决上述问题,设计了一种基于FPGA的CPCI接口。介绍了使用FPGA实现的CPCI协议、仿真及外部通信总线协议、外部中断机制、冲突避免机制,该设计在量产的各种CPCI板卡中使用,用于各种厂家的CPCI机箱。与传统实现方案相比,该方案具有成本低、体积小、灵活性好、兼容性高等优点,在小型工控领域内具有明显的优势。
关键词: CPCI FPGA ARM
中图分类号: TN836
文献标识码: 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.
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 引言

    目前的仪器或者工控系统多数使用集成式工控机箱,机箱背板一般通过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]

ck1-t1.gif

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

ck1-t2.gif

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数据,与写入完全一致。

ck1-t3.gif

    此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的全局时钟管脚上。

ck1-t4.gif

ck1-t5.gif

    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和主控机的数据流向和读写流程。为避免系统读写冲突,需按照如下规则执行操作:

ck1-t6.gif

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

此内容为AET网站原创,未经授权禁止转载。