APP下载

基于FPGA的多路机载总线收发器的设计与实现

2014-01-16梁鹏程孟凡鹏

电子设计工程 2014年5期
关键词:波特率PC机串口

梁鹏程,赵 平,孟凡鹏

(西北工业大学 陕西 西安 710129)

在航空电子综合化系统中,快速、有效的数据传输对整个航空电子系统的性能有很大的影响,因此数据总线被称为现代航空电子系统的骨架,利用FPGA技术设计集成多路ARINC429[1]和422[4]通道的通信芯片,可以有效的提高数据通信模块的处理能力和集成度,降低成本,本文以verilog语言为基础,通过ISE编程,modelsim仿真,仿真无误后综合实现,用impact将bit文件烧写到FPGA中,进行硬件调试,并用chipscope进行分析,为了更加方便的进行调试,以workbench为平台建立驱动。关于429协议和422协议已经非常成熟,因此本文主要从硬件调试的角度介绍多路机载总线收发器的实现。

1 FPGA逻辑设计原理

很多情况下,我们需要一块板子既具有429[2-3]功能又具有422数据传输功能,因此我们将429逻辑和422逻辑[6]建立在一个模块下,分别给429逻辑和422逻辑分配不同的地址空间,通过不同的地址空间控制429和422协议的片选信号,同时LOCALBUS数据是双向数据,429和422数据是单向数据,因此需要加一个双向缓冲器,实现单向数据和双向数据之间的转换。协议部分已经非常成熟,在此不做赘述。

2 原型验证板验证

2.1 原型验证板原理

我们所用的电路板名称为:MFD-GPM1018。设计原理如图1:CPU控制FPGA数据的写入和读出,FPGA通过429或者422接收到的数据按照相应的协议转换之后由cpu读出,cpu通过Localbus提供FPGA要发送的数据并配置寄存器。

CPU读出来的数据通过LBC-1-AD00——07到锁存器把地址和数据按一定的控制规则转换为单独的地址信号和数据信号。LBC-1-AD00——07表示某时刻是地址信号某时刻是数据信号。ROM存储cpu运行过程中的中间数据程。H1-8445电平转换,将429数据电平由bus总线所要求的电平转换为FPGA需要的3.3V。ASP105885-01是连接器将429、422数据连接到GPM调试版上,进行硬件调试。MAX3362将串行数据转换为差分的形式。M25P16-AVMN6T是FPGA的配置芯片,通过JTAG接口将bit文件加载到FPGA中这样配置之后,下次上电之后就可以直接将bit文件load到FPGA中而不需重新加载。

2.2 硬件调试过程

在Workbench 开发平台vxworks[3]操作系统下,首先连接串口网口从调试板到PC机,新建超级终端,选择通信速率为115200,其他都为默认值,网口下载操作系统到cpu中,串口用来控制cpu,串口网口连接好后,连接JTAG接口,(JTAG连接线连USB下载线连到PC机),电源电压设置为28V,然后上电,通过调试板上的电压转换器转换为5V供FPGA板子使用,上电之后通过IMPACT下载.bit文件到FPGA中,这种配置类型断电即丢失,下次上电后需要重新下载,同时打开超级终端,建立串口连接,此时vxworks操作系统将会自动启动,在此操作系统下输入一些命令控制cpu,常用的就是读(d)和写(m)命令,并且打开chipscope,来进行调试。

图1 硬件原理图Fig. 1 Hardware s

为了充分验证逻辑功能的正确性:我们分别进行内回环测试,也就是在逻辑内部实现自收自发,然后进行外回环测试,将板子上发送接口与接收接口连接起来,实现回环收发,测试都无误后进行外部测试,对429协议采用429的仿真卡进行测试,对422协议采用串口调试工具进行测试。

2.2.1 429测试

429 的仿真卡发送429差分数据,通过FPGA接收,判断接收到的数据是否是发送的数据,以此来检测接收逻辑的正确性。

429 仿真卡BUStools /ARINC v3.20仿真验证:

1)TX setup :设置发送通道,波特率、奇偶校验

2)DEFINE :ADD new message添加发送通道,我们需要TXD1、TXD2,设置发送数据参数:data——BIN设置32—9位数据,前8位数据通过Label设置,Label是一个233数据类型,2指的是2位,比如设置为256,则为10101110,映射到发送的数据为0111 0101,即为0x75,最高位为奇偶校验位,在发送过程中自动产生。

图2 通过串口调试工具测试422逻辑Fig. 2 Test 422 logic through serial debugging tool

3)设置完成后,点击run,停止发送的话点击stop。

通过超级终端读出接收到的数据与发送的数据一致,测试正确。

2.2.2 通过串口调试工具进行422测试

422 的发送端口和接收端口通过232连到PC机上,PC机通过串口调试工具发送一串数据,经过232转422接收这些数据,接收到的数据在超级终端中打印,检测接收是否正确,类似的,调用驱动422发送一串数据,通过232到PC机通过串口调试工具看到发送出来的数据,检测发送的数据是否正确。调试过程中比较关键的一点就是发送和接收端口波特率要设置一致。

如图2所示,波特率设置为115 200,奇校验,数据位8位,停止位1位,422发送数据,发送出来的数据经232显示到PC机串口接收窗口中,如下图接收框显示数据。

如图2所示,通过串口调试工具,手动发送数据1、2、3、4、5、6、7、8、9、10,经232转422转换为422数据形式,再经fpga处理。则在超级终端上显示出接收到的422数据个数以及数据。

2.2.3 驱动程序

驱动相当于用户与底层FPGA逻辑的一个接口,里面包含一些初始化函数、发送函数、接收函数,初始化包括配置寄存器,波特率配置,通道选择,奇偶校验设置等,最后根据需求直接写一个测试函数,那么在硬件测试时先通过workbench[5]进行调试,调试无误后,通过wftp下载到cpu中,然后通过超级终端直接调用测试函数即可,就不需要之前手动单步通过写、读操作来进行配置和测试了。

429与422通过检测状态位来控制发送接收的驱动测试流程如图3所示。在上述测试过程中,发送一个数据则接收一个数据,仅仅检测到了接收与发送功能上的正确性。考虑到在应用过程中,并非发送一个数据接收完再发送一个数据,比如发送若干个数据之后,此时才开始进行接收,那么在这种情况下,接收fifo缓存中将存在若干个数据,因此引入fifo的data_count计数,表示此时缓冲中储存有多少个数据,然后依次把这些数据给读出来,这种情况下,也存在溢出的可能性,因此引出溢出状态位。

图3 检测状态位来控制发送接收的驱动测试流程Fig. 3 Driving test process by detecting status bit to control the transmission and reception

图4 引入fifo计数和溢出状态检测的驱动测试流程Fig. 4 Driving test process by introducing fifo overflow state detection and counts

改进后引入fifo计数和溢出状态检测的驱动测试流程如图4所示。

3 调试过程中遇到的关键问题及分析

调用驱动对422进行外回环测试0通道发0通道收1通道发1通道收,这时出现问题:当发送多个数据接收多个数据,或者多次测试时会出现接收数据错误或者未接收到数据的现象,但是通过超级终端单步测试确是是正确的。用chipscope[7]抓信号,发现接收数据时,会出现接收完数据后,fifo非空的状态,正常应是空状态,这样就把之前的数据再次接收了一遍,抓到的错误如图5,其中test是我们为了测试方便加的一个参数用来检测DAT变化,因为DAT是双向数据无法抓到。

图5 test数据出错Fig. 5 Test data error

分析原因是由于发送的数据被接收后,再次发送数据前检测状态位未来得及告便,导致错误,于是在检测状态位后面加延迟taskdelay(1),测试正确,但是与之而来的问题是这样大大影响了波特率,因为1代表1/60ms,而波特率是ns级的,于是用一个读寄存器操作来代替这个延迟,读一个寄存器状态需要的时间大约为us级,具有一定的延时但性能又优于taskdelay,并且读寄存器也不会影响其他的正常功能,至此以为问题解决了。但是后来为了完善功能,在逻辑中添加count,修改驱动进行测试,发现打印到超级终端上的fifo计数不正确,发送一个数计数却是31,继续发送一个逐个计数为61,91….用chipscope抓信号发现在tf_push有效时(tf_push控制发送fifo的写信号),同一数据输入到fifo了31次,根据逻辑tf_push在写信号有效以及地址是发送缓冲地址且此时是正常工作状态时就有效,那么根据chipscope抓到的,发现在一个地址有效,写信号有效的周期内,tf_push持续有效,持续计数就说明此时有效了多个时钟周期,每个时钟周期数据写入到发送fifo中一次,但是我们期望的是写信号有效地址有效一个周期内,数据只写入一次,因此我们修改逻辑,使tf_push有效的周期缩短为一个时钟周期,同时根据这个问题,也判断了之前接收数据总出错,出现一个数据接收两次的现象,需要加适当的延时才不会出错的原因正是如此。 明白这些之后,我们又把驱动中检测状态位与接收之间的延时去掉,再次测试,这次果如预期的一样不再出错,至此才找到了根本原因。对于这个问题Modelsim是发现不了的,因为Modelsim仿真时输入激励比如写信号wr_n有效设置的就是一个时钟周期,因此chipscope能够发现modelsim发现不了的问题,这也就是硬件调试的功效。

图6 修改前tf_push发送写信号Fig. 6 Transmit write signal tf_push before amendment

修改前tf_push如图6所示。

修改后的tf_push,持续一个时钟周期,如图7所示。

图7 修后tf_push发送写信号Fig. 7 Transmit write signal tf_push aftere amendment

针对这个问题,我们总结写底层逻辑时控制读信号和写信号使其持续时间为一个时钟周期是非常有必要的,可以有效避免数据重复读入和写出。

4 结束语

文中以FPGA为基础,主要介绍了多路422协议429协议总线完整的FPGA硬件调试,涉及硬件原理 、调试过程、调试中用到的工具、驱动程序以及对调试过程中遇到问题的分析方法,经过这一系列的调试无误,此部分将可以接受检验,实现稳定的数据通讯功能。最后将逻辑固话到FPGA中,上电自启动,自此我们完成了完善的多路机载总线收发器的设计和实现。

[1] 张新.基于FPGA的多通道ARINC429通信芯片设计[J].航空电子技术,2008,39(1):46-52.ZHANG Xin. Design of Multi-Channel ARINC 429 Communication Chip Based on FPGA[J].Avionics Technology,2008,39(1):46-52.

[2] 力榕.航空用ARINC429总线收发系统设计与实现[J].计算机测量与控制,2005,13(9):970-972.LI Rong. Design and Implementation of a arinc429 Bus Transmit-receive System[J].Computer Measurement & control,2005,13(9):970-972.

[3] Altera Corporation. FLEX 10K Embedded Programmable Logic Device Family Data Sheet[R]. September 2003

[4] 李精华.基于VHDL的串行通信接口UART设计[J].桂林航天工业学院学报,2011(2):127-128.LI Jing-hua. Design of serial communication interface UART based on FPGA[J].Journal of Guilin Colleage of Aerospace technology, 2011(2):127-128.

[5] 段培贤.基于vxworks的网络与串口通信装换[J].鱼雷技术,2009,17(6):58-61.DUAN Pei-xian.Communication conversion between UART and ethernet based on VxWorks[J].Torpedo Technology,2009,17(6):58-61.

[6] 郭树涛.基于FPGA的串口通讯设计[J].北京电子科技学院学报,2006,14(2):74-78.GUO Shu-tao. Serial communication based on FPGA[J].journal of Beijing Electronic Serial Science and Technology Institute,2006,14(2):74-78.

[7] 万翔.ChipScope Pro在FPGA调试中的应用[J].计算机与网络,2005(21):58-59.WAN Xiang. The application of ChipScope Pro in FPGA debug[J].Computer & Network, 2005(21):58-59.

猜你喜欢

波特率PC机串口
浅谈AB PLC串口跟RFID传感器的通讯应用
CAN 总线波特率自适应程序设计
基于FPGA的异步串行通信波特率容错设计
基于PC机与单片机的多机通信技术及抗干扰方法
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
VC.NET下实现dsPIC单片机与PC机的通信
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
基于并行控制的FPGA多串口拓展实现
C*Core芯片SCI串口波特率容限优化