一种采用收发双缓冲结构的1553B总线接口的设计与实现

2018-10-15 05:28张永杰王金芳饶范钧上海航天控制技术研究所上海201109上海惯性工程技术研究中心上海201109
导航定位与授时 2018年5期
关键词:实时性进程总线

石 然, 张永杰, 王金芳,饶范钧,徐 挺 (1.上海航天控制技术研究所,上海 201109;2.上海惯性工程技术研究中心,上海 201109)

0 引言

1553B是由美国在20世纪70年代提出的电子系统联网标准,它是一种集中控制、分布处理和实时响应的集中式的时分串行总线,具有可靠性高、使用灵活等优点,被广泛应用于航空、航海和航天等领域[1-3]。

1553B总线通信能够得以实施,主要是依赖于1553B总线接口这样的物理基础,因此1553B总线接口的设计得到广泛重视。1553B接口主要由主处理器和总线协议处理器组成。主处理器可采用单片机[4]、ARM[5]或DSP[6-8],但这三种处理器均无法做到与总线协议处理器间的无缝链接,还需要粘合逻辑实现与总线协议处理器间的逻辑匹配,这就增加了1553B总线接口的复杂性。利用FPGA作为主处理器,则可很好地解决此问题。FPGA是一种可编程逻辑阵列,它可以将粘合逻辑集成在处理器内部,实现1553B总线接口的最简化。

总线协议处理器目前通常采用DDC公司的ACE系列芯片[9],其中以BU-61580最为著名。在BU-61580的使用中,常采用中断响应模式[10-11]。BU-61580完成一次收发指令后产生中断信号,主处理器收到该中断请求后,从BU-61580中取回数据,并将待发送数据存入BU-61580中。从数据接收角度看,该模式效率很高,可以收到实时数据。但从数据发送角度看,中断后存入的数据需要等待下次BC命令才能发出,存在发送延时,无法适应诸如控制系统、导航系统等对于实时性要求很高的环境。因此有必要在软件控制方法上进行改进,在保证可靠性的前提下提高接口电路的实时性。

本文从简化结构、提高实时性和适应性的角度出发,采用BU-61580作为总线协议处理器,以深圳国微的SMQV600作为主处理器,设计并实现了一种RT模式下的1553B总线接口。该接口在接收端和发送端均采用双缓冲结构,同时保证了实时性和可靠性。文中给出了硬件的总体方案以及软件程序流程,并通过实验对该1553B接口进行了验证。

1 硬件电路设计

1553B总线接口硬件上主要由SMQV600和BU-61580组成。SMQV600作为主处理器,负责控制BU-61580,响应BC经1553B总线发来的指令,并将分系统的数据回馈给BC系统。BU-61580作为总线协议处理器,能够对外按照总线协议发送和接收数据,一方面把接收到的BC有效数据存在片内RAM中供主处理器调用,另一方面也把将要发送的分系统数据存在片内RAM中供BC采集[12]。

图1中,BU-61580通过硬件的电平设置,工作在16位缓存、非零等待模式[13],终端地址位RTAD4~RTAD0和校验位RTADP由跳线进行设定。BU-61580 具有A、B双路总线收发端,两路互为热备份,A、B总线发送/接收端分别经隔离变压器后,再以变压器耦合方式接入1553B总线通信。隔离变压器采用BTTC公司的B-3226,变压比选为1∶1.79,耦合变压器采用ESI-410,变压比为1∶1.4,该配置方式可允许的最大耦合长度为6m。

FPGA的IO引脚供电通常为3.3V,而BU-61580的逻辑引脚供电固定为5V,为此在电路中加入了58所的164245总线收发器起到电平转换作用[14]。从图 1中可以看出,该1553B接口电路中除必要的电平转换以外,并无多余的粘合逻辑,电路简单明了,有利于实现小型化和低功耗。

2 软件设计

本文主要探讨RT模式下的接口软件设计。接口软件由VHDL语言编写而成,其软件架构如图2所示。该软件主要由BUSINITIAL、BUSCON-TROL、READ和WRITE这4个模块组成。其中,READ和WRITE模块负责对总线协议处理器BU-61580进行读写;BUSINITIAL模块负责初始化总线协议处理器;BUSCONTROL模块负责利用BU-61580接收BC通过1553B总线发送的各种指令,并按照指令要求进行相应的操作。下面将对最重要的BUSCONTROL模块的内部设计进行详细阐述。

2.1 BUSCONTROL模块设计

该模块内部有2个进程,一个是主进程,响应BU-61580中断,从其配置寄存器中取出BC指令,再根据该指令执行方式码操作或是从BU-61580的内部RAM中读取BC发来的数据。为了保证接收数据的一致性与正确性,本文在BUSINITIAL模块中将BU-61580配置为接收子地址双缓冲模式,该模式为每一个给定的接收子地址分配2个存储数据块,并自动为子地址切换这2个存储数据块的激活和非激活状态,确保FPGA与BU-61580不会同时访问同一个存储数据块,避免了访问冲突导致的错误。如图3(a)所示,在主进程中为了读取最新数据,需要关闭双缓冲,通过子地址查询表获取数据块地址,再反转该地址的第5位,才能从该地址所指向的数据块中读取到刚收到的有效数据,读取完毕后还需重新启用双缓冲模式。

另一个是数据更新进程。该进程把准备发送的有效数据存储在BU-61580的内部RAM中,供BC调用。通常的做法是查询INT中断信号,确认BC已将数据取走后,再把新的数据存入内部RAM,供BC下一次读取。但该方法的实时性较差,BC的取数间隔越大,则数据延时越大,无法适应高实时性应用环境。

在本文中,为了保证实时性,定时将有效数据刷新至BU-61580的内部RAM中,而不等待INT中断信号。作为1553B总线接口,无法控制BC采样时间,但可提高自身更新速率,改善数据实时性。但该方式存在风险,极端情况下BC的取数可能发生在FPGA写内部RAM的过程中,从而产生冲突,导致BC取到的数据是FPGA更新前后两帧数据的混叠,导致数据错误。为解决该问题,提出一种发送双缓冲的数据更新方式。如图3(b)所示,发送双缓冲为BU-61580的每一个给定的发送子地址分配2个存储数据块,这里简称数据块a和数据块b。FPGA首先将数据写入数据块a,写入完毕后将数据块a的地址写入子地址查询表,这样数据块a就变为激活状态,数据块b成为非激活状态。下一次FPGA数据更新时,再以此方式激活数据块b,休眠数据块a。激活数据块和非激活数据块一直这样按照固定周期互换。

在发送双缓冲模式下,再考虑极端情况,即FPGA修改BU-61580的子地址查询表发生在BC正在取数的时候。BU-61580收到BC的取数指令时,将进入一次子地址查询表寻找对应的内部RAM数据块,再将对应数据块中存储的字节组帧后发往BC。BU-61580只在收到BC指令时使用一次子地址查询表,因此BC取数时更改子地址查询表也不会导致部分已取数据为数据块b,后续取数为数据块a的情况,BC取到的必然是一个单一数据块中的字节。可见利用FPGA交替切换激活数据块和非激活数据块的发送双缓存机制,可避免极端情况下的数据更新冲突,兼顾了总线接口系统的实时性和可靠性。

根据上述分析,FPGA内的主进程和数据更新进程都需要访问BU-61580,因此需要分时使用,以避免程序冲突。如图4所示,程序中设置了标志位BUS_busy来控制2个进程的访问时间。在FPGA内,主进程的优先级要高于数据更新进程,当其访问BU-61580期间,将标志位BUS_busy置1,结束访问时,再将BUS_busy置0。数据更新进程每次访问BU-61580前,都要首先查询BUS_busy是否为0,确保主进程没有占用BU-61580后,才会开始正式访问。值得注意的是在主进程中,每次将标志位BUS_busy置1后,都会延时4μs才开始执行下一条程序。BU-61580在16MHz晶振频率下,完成读或写一条指令的最长时间不大于4μs。因此该延时足以确保,数据更新进程在执行读写操作BU-61580的过程中遭遇BUS_busy置1的情况时,能够及时完成当前操作再暂停进程释放BU-61580控制权。

2.2 仿真

根据上述的软件设计,以VHDL语言编写了RT模式下的1553B接口软件,该软件主要完成2个功能:

1)实现1553B接收指令:终端地址6,子地址21,23个数据字,数据依次为0~22。采用RT子地址双缓冲,子地址21接收端对应的2个数据块首地址分别为0×0260和0×0280。

2)实现1553B发送指令:终端地址6,子地址2,4个数据字,数据依次为9~6。以发送双缓冲的方式将数据以1ms周期定期更新至BU-61580,子地址2发送端对应的2个数据块首地址分别为0×0540和0×0840。

通过BU-61580的专用测试用例对Modelsim软件的软件功能进行仿真验证,验证结果如图4和图5所示。仿真结果证明了1553B接口软件已达到目标功能,可以实现与BU-61580的交互通信。下面将把接口硬件与软件结合接入总线网络进行实验验证。

3 实验验证

根据上文所述方法设计实现的1553B总线接口电路如图6所示。使用DDC的PCI-1553板卡配合C++ Builder编写的上位机作为BC端,通过变压器耦合方式与本文设计的接口电路相连,对其进行通信测试。测试流程为先发送一次1553B接收指令,再以5ms为周期连续发送1553B发送指令。

为了便于观察测试结果,对2.2节所述的软件功能进行适应性优化,将发送指令中子地址2的数据字也改为23个,令程序在收到子地址21的23个数据字后,再将其按1ms周期存入子地址2对应的数据块供BC读取。每次存入前均将23个数据字在现有基础上加1。这样通过BC接收数据就能同时确认1553B总线接口是否已正确取到BC发送的数据。

实验测试结果如图7和图8所示,从图中可以看出1553B总线接口可以准确响应BC端发送的命令,正确地接收和发送数据。同时程序内部也在以发送双缓冲模式定期刷新数据,上位机收到的总是延时在1ms以内的最新的数据,与5ms的指令发送周期无关,实时性得到提高。该1553B总线接口结构简单,实时性好,能够应用在对响应速率有严格要求的系统中,具有良好的适应性,已在本单位若干项目中进行了多次应用,可靠性得到验证。

4 结论

本文提出了一种RT模式下的1553B总线接口,该接口硬件上以BU-61580为总线协议处理器,以FPGA为主处理器,软件上在接收和发送端均采用双缓冲结构。文中对总线接口的设计方案进行了详细阐述,并通过仿真和实验手段对总线接口的功能和性能进行了论证。该设计方案具有结构简单、实时性好、可靠性高的优点,可以满足各种不同应用需求,对其他的1553B总线接口具有普遍的参考和借鉴意义。

本文提出了一种RT模式下的1553B总线接口,该接口硬件上以BU-61580为总线协议处理器,以深圳国微的SMQV600作为主处理器,在FPGA内部实现接口粘合逻辑,降低了电路结构的复杂性。

本文在FPGA软件设计中,采用收发双缓冲机制处理与BU-61580的数据通信,并通过仿真和实验手段对其功能和性能进行了验证。相较于常用的中断响应机制,该设计方案可以提高数据发送的实时性,并能够避免极端情况下的数据更新冲突,保证了可靠性,更适合控制系统、导航系统等对于实时性和可靠性都有很高要求的应用场景。

本文将FPGA的1553通信软件分为4个软件模块进行设计,功能划分明确,移植性好。该设计思路也可用于其他的1553B总线接口设计中,具有广泛的适应性。

猜你喜欢
实时性进程总线
时间触发通信总线监控技术研究
关于CAN总线的地铁屏蔽门控制思路论述
债券市场对外开放的进程与展望
快速杀掉顽固进程
基于CAN/LIN总线的LED车灯控制研究
计算机控制系统实时性的提高策略
可编程控制器的实时处理器的研究
中外民主法制进程专题复习
基于B/S的实时用户行为检测管理系统设计与实现
社会进程中的新闻学探寻