吕 浩
(中国航空计算技术研究所,西安710068)
ARINC429总线是广泛应用在航空电子系统中的一种通讯总线。PCMCIA/JEIDA[1]接口是一种广泛应用在数码电子产品和便携式计算机上的PC卡接口规范。在航空通信系统中使用便携式计算机进行通信调试,应用FPGA来实现PCMCIA规范接口并完成通信,使板卡具有体积小、性能高、可靠性好的特点。板卡在航空领域应用,方便了现场调试。
通信板卡功能的实现核心是FPGA内部电路的设计,图1就是FPGA内部设计图梗概。设计采用PCMACIA接口的16根数据线与16根地址线,可用存储空间达64KB,但使用的只是其中一小部分。PCMCIA规范规定16位PC卡有两种模式,MEMORY ONLY模式和I/O AND MEMORY模式,MEMORY ONLY模式只适用于纯粹做存储卡的PC卡设备。设计采用I/O AND MEMORY模式,但采用的只是MEMORY操作,这相当于在MEMORY空间里实现了一个设备,这个设备用来完成PCMCIA主机和ARINC429芯片的通信。
FPGA内部要实现与HOST主机连接的PCMCIA接口逻辑。PCMCIA规范将卡的存储空间分为ATTRIBUTE MEMORY和COMMON MEMORY两部分,ATTRIBUTE MEMORY主要用来实现卡的配置,在这里边实现了卡信息结构,以及配置寄存器,而在COMMON MEMORY实现了用于与DEI1016通信的设备。
在FPGA内部实现逻辑时,PCMCIA接口部分相当于主设备,而内部的寄存器、ARINC429设备都是从设备,在FPGA内部必须实现对寄存器读写,对ARINC429通信控制信号的时序,对ARINC429接口的读写时序的实现是个重点。为了实现从DEI1016芯片接收数据,在FPGA内部实现了一个64*16bit的FIFO,待FIFO半满时向PCMCIA主机发出中断信号,主机从 FIFO中读走数据。由于从接受ARINC429接口接收数据的时序比较复杂,采用状态机来实现。向 DEI1016发送数据时,由于DEI1016内部有一个8*32bit的FIFO,PCMCIA的数据线和ARINC429的数据线都是16位的,可以直接发送,一些控制信号可以通过寄存器操作或MEMORY地址操作实现。
图1 通信卡总体结构框图
2.2.1 PCMCIA/JEIDA 规范
PCMCIA/JEIDA是由个人电脑存储卡国际组织和日本电气工业协会提出并推广的一个便携式卡接口规范。其特性如下:
(1)16/32位数据线
(2)20MB/S(132MB/S)速率,宽度周期100ns
(3)支持8位/16位DMA操作
(4)兼容 PCMCIA2.1/JEIDA4.2 以及更早的版本,兼容32位卡插槽
(5)硬件探测卡电压需求可以是5V,3.3V,或更低
(6)支持多功能卡
(7)利用卡信息结构的扩展能力,可以确定卡功能和数据格式
2.2.2 卡信息结构和配置寄存器的设计
卡信息结构,简称 CIS,是在卡的 ATTRIBUTE MEMORY空间里实现对卡进行配置的结构,相当于一个ROM结构,主机通过读它来对卡进行配置,它必须从ATTRIBUTE MEMEORY空间的00H地址开始。它由很多的TUPLE组成,每个TUPLE有一定的结构,由若干字节组成,这些字节信息只存在于偶数字节地址空间,每个TUPLE都固定的含有一个TUPLE特有的序号和相对于下一个TUPLE的偏移量,以及TUPLE体,表明了一定的配置信息,或者功能说明。这些TUPLE连成链,用结束TUPLE(序号FFH)表明链的结束。16位PC卡的TUPLE最多257个字节:一个字节的TUPLE号+一个字节的TUPLE链域+FFH的TUPLE体。一个链最多有256个TUPLE。
必须要实现的TUPLE有:
CISTPL-DEVICE:5V设备信息 TUPLE,包含卡设备的信息。因为用的都是存储器操作,实现接口功能,设备速度是200NS,设备大小是两个512字节的块,共1M空间。序号是17H;CISTPL-CONFIG:给出了ATTRIBUTE MEMORY空间里配置寄存器的基地址0200H,给出了最后一个ENTRY TUPLE的序号是01H,以及配置寄存器的个数是1,就是配置选项寄存器,序号是1AH;CISTPL-CFTABLEENTRY:配置入口TUPLE明确了每一个需要的功能,不同的功能被不同的ENTRY TUPLE区分,它被自己的配置入口序号所标记。在设计中选择I/O AND MEMORY接口,使用的是MEMORY映射I/O方式实现;中断方式是脉冲中断;使用的common memory空间从0300H开始,1K大小,TUPLE序号是1BH;CISTPL-VERS-1:这是卡制造商信息TUPLE,用 PCMCIA2.1/JEIDA4.2 版本,序号是15H;CISTPL-END:链结束TUPLE,序号是FFH。
在卡的ATTRIBUTE MEMORY空间里可有一个配置寄存器组,这些配置寄存器都是可读可写的,为了简化设计,一些可选寄存器都没有实现,只实现了必备的配置选项寄存器COR[2]。这个配置选项寄存器的地址是在CIS结构中给出的,在0200H地址单元。一个8位的寄存器。结构如下:
表1 配置选项寄存器
由主机写入该寄存器的内容,实现第7位写1,卡被复位,第6位写1是电平中断模式,0是脉冲中断模式,后6位写入CIS结构中entry tuple的序号,实现该入口对应的配置功能。只实现了一个entry tuple,是设置了一个common memory设备(也是存储空间):基地址0300的1KB空间。
在接口模块的MEMORY读写操作中,配置空间的CIS是只读的,COR是可读可写的。16位PC卡的读写操作属于异步时序,没有同步时钟。
2.3.1 DEI1016接收数据时控制信号的实现
采用 DEI1016[3]和 BD429[4]来实现 ARINC429数据的收发。HOST向DEI1016发送数据时,由于内部自带 FIFO,可直接发送,但要区分发送的是WORD1 还是 WORD2,还是控制寄存器数据[5]。HOST从DEI1016接收数据时,用有限状态机来实现读取控制信号时序,这一过程完成一个32位字的接收,即一次DR1或DR2有效,两次OE1或OE2为低,两次16位字的接收,实现过程如图2。其中OE1#/OE2#:读出接收通道的数据;DR1#/DR2#:该通道接收到了数据;SEL:字选择信号。
图2 读取控制信号状态机
2.3.2 FPGA内部接收FIFO设计
当从DEI1016接收数据时,在FPGA内部实现了一个64*16bit的 FIFO[6],该 FIFO 从 DEI1016 接收数据并缓存,PCMCIA接口接收数据时只与FIFO进行通信。
当FIFO从DEI1016接收数据时,将FIFO的写时钟信号和ARINC429接口的通道1或2的读信号连接在一起,用ARINC429的读信号做FIFO的写时钟,而将FIFO的写允许信号始终置为有效‘1’,当oe1/oe2的上升沿来临时,就对FIFO进行写操作。当PCMCIA接口从FIFO接收数据时,因为主机读信号是低有效的,所以用PCMCIA接口的读信号下降沿做FIFO的读时钟信号,而将读允许信号始终置为允许‘1’。
给FIFO的发送端口固定的地址是0300H,主机从FIFO中接收数据相当于对0300H地址进行读操作。另外用 FIFO的半满信号做中断信号,即当FIFO中存在32个字时。FIFO的接收数据线与DEI1016的16根数据线相连,发送数据线与PCMCIA接口的16位数据线相连。
2.3.3 寄存器设计
为了便于对一些信号的控制以及上层软件访问的便利,在PCMCIA规范规定的common memory空间里实现了一个状态寄存器(SR)和一个控制寄存器(CR),将一些控制和状态信号装入寄存器中固定的某位,以便上层软件的控制访问。
在common memory的0308H地址单元实现了一个状态寄存器,它是只读寄存器。第0位是TXR信号量,为1表示DEI1016内部的FIFO是空的,可以装入数据;第1位是FPGA内部FIFO空信号,为高表示空;第3位是FPGA内部FIFO满信号,为低表示满。
在common memory的0310H地址单元实现了一个控制寄存器,它是可读可写寄存器。第0位是ENTX信号,是DEI1016发送数据允许信号,为1表示允许发送;第1位是DEI1016复位信号MR,低有效。
上层软件在控制向DEI1016的发送缓冲区(FIFO)写数据时,应先读出SR的TXR位,FIFO为空时即TXR为1时才能让主机向FIFO中写入数据。而用CR的ENTX位控制DEI1016是否能发送数据时也应该先判断TXR,TXR为高时,即发送FIFO为空时,DEI1016是不能发送数据的,只有为低时才能发送;当TXR为低时,也不能强行拉低ENTX,即发送FIFO中有数据时,不能强行禁止发送,因为这样破坏了原有数据的完整性。
同样可以通过 common memory中的 FIFOEMPTY信号控制主机从接收FIFO中取数据;还可以写DEI1016的复位信号。
卡刚插入笔记本卡插槽的时候,主机主动读CIS内容,然后可以写COR,进行配置。对DEI1016操作之前,要先写控制寄存器里的 MR信号,使DEI1016复位后,再写入DEI1016的控制寄存器,然后才可以进行数据的收发操作。接收数据就是响应中断信号(FIFO的半满信号),从FIFO中读取数据,直到判断出FIFO-EMPRY信号有效。发送数据时,要先判断SR里边的TXR信号,当DEI1016里的FIFO为空时,再向FIFO里发送数据,发送总字数不定,但不能超过DEI1016内部FIFO的容量8*32bit,发送之前拉低ENTX,且每次是先发送字一,再发送字二,字一,字二必须成对发送,发送完后拉高ENTX,允许DEI1016发送数据。
在FPGA内部实现可利用的存储区域概括起来如下:
表2 存储区域使用表
介绍了应用FPGA完成PCMCIA接口的ARINC429通信卡的设计方案和其中的难点,通过本次设计也为其它应用FPGA完成PCMCIA接口的PC卡的设计提供了可借鉴方案。除了上述之外,上层应用程序和板卡的配合也是值得注意的。
[1]赵鑫.VHDL与数字电路设计[M].北京:机械工业出版社,2005.
[2]PCMCIA/JEIDA,Release 7.0,1999,PC Card Standard[S].JAPAN:PCMCIA/JEIDA,1999.
[3]DEI1016/DEI1016A/DEI1016B ARINC 429 Transceiver[EB/OL].USA:Device Engineering Inc,2004[2008].http://www.icpdf.com.
[4]BD429 ARINC 429 TRANSCEIVER[EB/OL].USA:Device Engineering Inc,2004[2008].http://www.icpdf.com.
[5]宾辰宗.基于MCF5206的ARINC429通信板卡的设计实现[DB/OL].2005[2008].http://www.lunwentianxia.com.
[6]陈曦.PCMCIA 接口 IP设计[DB/OL].2004(2004)[2008].http://www.systemandchip.com.