基于FPGA的HB6096总线通讯板设计
2013-12-17张桢,白曦
张 桢,白 曦
(中国航空计算技术研究所第8研究室,陕西西安 710068)
HB6096总线是一种单向广播式标准的高速差分信号通信总线,其抗干扰能力强,具有技术成熟、简单有效、性能可靠、成本低廉等特性。HB6096总线在民用和军用航空领域被广泛应用,如波音公司、空客公司的许多先进飞机的航电、供电系统中的机载计算机及导航设备之间信息交联都大量采用了这种总线,在我国民用、军用飞机上也被普遍采用。
传统的HB6096总线系统设计大都采用专用芯片的解决方案,但随着机电、航电技术的发展,系统对HB6096总线提出了越来越高的要求,尤其是采用传统的设计集成度低,已经不能满足新型机电、航电系统的要求。
文中的设计利用FPGA内部丰富的资源,通过VHDL语言编写多路HB6096协议,并且对每一路收、发通道均配置了大容量FIFO,提高了数据处理能力;同时,可以有效地缩小系统体积、降低成本;采用模块化设计使系统的配置灵活度有较大提高。具体来说,采用FPGA技术设计的多通道HB6096通讯板,显著特点和优势为:集成度高,在一片FPGA芯片上能够集成十几路甚至几十路HB6096通信发送和接收内核,能处理多路通信通道,大幅节省了硬件的资源和面积,降低了系统成本、可靠性高,直接给每个信道挂接大容量的缓存,从硬件能力上避免了总线各通道满负荷数据传输时因CPU不能及时处理导致数据丢失的问题[1]。
1 HB6096总线协议简介
HB6096是一种点对点的传输协议,总线由两个差分信号线路组成。一条总线上最多可以挂接20个接收设备;一个标准的信号数据包括32 bit或25 bit的数据位和4 bit的间隔位。HB6096总线线路上的码型为双极性归零码,其编码方式如图1所示。
图1 HB6096信号编码示例
在HB6096总线中,两条线路的差分信号的逻辑关系有3种:(1)A与B之间的差分电压为7.25 11 V时,表示逻辑为“1”或“HI”。(2)A与B之间的差分电压为-0.50.5 V时,表示“NULL”。(3)A、B之间的差分电压为 -11-7.25 V时,表示逻辑“0”或“LOW”。接收线路上的电压取决于线路长度和挂接在总线上接收器的个数。HB6096规范是一种简单的点对点协议,每个总线上只有一个发送器,总线上至少有一个接收器,但每条总线上的接收器数量不能超过20个。
总线速率主要有两种:100 kbit·s-1和 12.5 kbit·s-1。总线的线上信号为差分电平,而芯片管脚信号为交错的脉冲信号,包含了串行数据的信息。
并行的数据和串行数据相互转换,从低位开始顺序到高位,每个数据位之间有一个空位间隔。完成32位数据转换后再接一个4 bit位的结束标志,这是两个HB6096数据间的间隔。
HB6096协议对数据的传输顺序做出了规定,即最重要的数据位优先传输,因此寄存器数据格式和线上格式有所区别,传输前在芯片内部需要对数据位格式进行转换。
2 硬件方案设计
HB6096接口设计方案的实现方式为FPGA+外围接口芯片,即HB6096协议部分及控制、译码逻辑等通过FPGA编写VHDL语言实现,FPGA的型号采用Xilinx公司的xqv600,接收接口控制电路芯片和发送接口控制电路芯片分别采用HI8482和HWD3182,总线驱动器采用JS164245[2]。硬件方案如图2所示。
图2 基于FPGA的HB6096接口硬件方案设计示意图
如图2所示,该硬件方案的核心部分为FPGA的设计,FPGA通过VHDL语言实现两大部分的功能:控制、译码逻辑与HB6096协议部分。
控制、译码逻辑部分的主要功能为根据从总线接收过来的控制信号,按照时序访问不同的HB6096收发地址单元,将要接收的数据从数据总线上通过164244传送至HB6096的接收保持寄存器、要发送的数据从HB6096的发送保持寄存器通过164244传送至数据总线上,以完成对12发12收HB6096通讯的发送与接收功能[3]。
HB6096协议部分共有12个单元,每个单元都包括独立的1发1收HB6096功能,每个独立的单元里又包括解码、寄存器控制、滤波、接收/发送控制、中断控制等几部分组成,由此完成一个完整的HB6096收发协议,并且对每一路HB6096收、发单元,均配置了独立的FIFO,从而保证数据收发的完整性[4]。
解码、滤波、接收/发送控制等部分用户不需要关注,而寄存器控制部分通过向是与用户有交互的。
HB6096协议内的寄存器包括控制寄存器、状态寄存器、屏蔽寄存器、发送保持寄存器、接收保持寄存器。其中,发送保持寄存器和接收保持寄存器分别用于存储发送和接收到的数据。
控制寄存器为可读写寄存器,主要用于配置HB6096控制器收发的相关信息。其格式如图3所示。
图3 控制寄存器字格式
其中,WLSEL:字长选择。逻辑“0”设置接收和发送为32位字模式。逻辑“1”设置接收和发送为25位字模式。
RCVSEL:接收数据率选择。逻辑“0”设置接收器为高速率(100 kbit·s-1)。逻辑“1”设置接收器为低速速率(12.5 kbit·s-1)。
TXSEL:发送数据率选择。逻辑“0”设置发送器为高速率(100 kbit·s-1)。逻辑“1”设置接收器为发送速率(12.5 kbit·s-1)。
PARCK:校验检查使能。逻辑“0”选择奇校验,逻辑“1”选择偶校验。
PAREN:发送器校验使能。使能校验位插入到发送数据的第32位。PAREN为逻辑“0”插入数据到第32位,若为逻辑“1”则插入校验和到第32位。
SLFTEST:自测试使能。逻辑“1”表示自测试使能。在内部连接发送器的输出到接收器的输入。在测试模式中发送器的输出仍然有效,但接收器的输入屏蔽。
ENTX:使能发送(高有效)。逻辑“1”使能发送器从发送缓冲发送数据,逻辑“0”禁止发送器从发送缓冲区发送数据。
状态寄存器和屏蔽寄存器的对应位是一致的,所使用的存储单元也是一致的。其格式如图4所示。
图4 状态寄存器/屏蔽寄存器字格式
状态寄存器是一个只读寄存器,它的内容用于指示潜在中断条件的状态。如果这个寄存器中的任何位切换为高,就表示相应的中断条件已经或正在发生。一般情况下,状态寄存器的内容将为处理器显示HB6096发出的中断请求的来源或原因。因此,任何对HB6096的中断服务程序应该由读这个寄存器屏蔽后的中断状态寄存器开始。
中断屏蔽寄存器是一个只写寄存器,CPU无法读该寄存器,这个寄存器使用户可以选择哪些条件将向处理器发出中断请求。即,用户可以选择屏蔽或阻止在某些情况下向处理器发出中断请求。如果用户希望某个特定的中断,就应当写逻辑“1”给中断屏蔽寄存器中与该中断条件相对应的位。同样,如果用户希望屏蔽或者禁止某一条件引起的中断,就应当写逻辑“0”给中断屏蔽寄存器中与该中断条件相对应的位。
3 HB6096接口软件设计
HB6096接口软件设计主要指处理器中和HB6096接口相关的驱动软件及中断服务程序的设计。提供给用户使用的接口驱动软件包括4个:HB6096总线初始化程序、HB6096总线数据发送驱动程序、HB6096总线数据接收驱动程序、HB6096查询接收驱动程序。HB6096总线初始化程序用于对HB6096总线的工作方式进行初始化,如传输速率选择,字长模式选择等;HB6096总线数据发送驱动程序用于将用户需要发送至HB6096总线的数据从应用层发送至物理层,物理层的HB6096数据发送由中断服务程序完成,用户不必关心;HB6096总线数据接收驱动程序用于用户应用层获得应用所需的HB6096接收数据;HB6096查询接收驱动程序,设计中,HB6096数据采用查询方式接收,故需要提供该驱动程序,该驱动的作用是通过FIFO是否为空的标志位,来进行将接收到的数据由FIFO写入CPU板存储区的功能。
通常HB6096通讯板的设计,接收均采取中断方式,一旦FIFO中有准备好的数据,就触发CPU中断,由中断服务程序将数据从HB6096板上的FIFO读入CPU板的存储区,由于设计中HB6096板设计为12发12收,发送/接收通道数量较大,若仍采取中断方式接收,如果采取每接收一个数据就触发一次中断就很可能造成短时间内大量HB6096总线数据到达,CPU只能响应中断而无法进行其他工作而导致其它任务超时,如果采取每到固定个数数据触发中断,就有可能如果一段时间内只有一个新数据或小于预设定的固定个数的数据到达,由于没有达到触发中断的条件,CPU板始终无法获得最新数据从而导致应用层认为数据接收故障的不良结果。
为避免上述情况,设计采用查询的数据接收方式,这就要求用户在周期任务中,每隔固定周期调用一次HB6096查询接收驱动程序,通过调用该程序,查询是否有接收到的数据并进行处理,该驱动程序的工作流程如图5所示。
图5 HB6096查询接收驱动程序工作流程示意图
4 结束语
文中从工程应用的角度,设计了一种基于FPGA实现多路HB6096总线通讯板解决方案,该通讯板在实际应用中可以满足供电控制子系统对数据传输的要求,实现了数据的100%可靠传输。其创新点主要有以下两点:(1)摒弃了传统采取DEI1016或HS3282进行HB6096总线通讯板设计的方法,而采用将HB6096协议用FPGA实现,从而实现了在一块板卡上实现12发12收 HB6096总线通讯。(2)采用查询方式接收HB6096总线数据从而既保证了CPU板的可靠运行又实现了多路HB6096数据的稳定、实时接收。
[1]田耘,徐文波,胡彬.Xilinx ISE Design Suite 10.x FPGA开发指南——逻辑设计篇[M].北京:人民邮电出版社,2008.
[2]丁猛,郭英.ARINC 429信号处理板的设计[J].微计算机信息,2008(13):31-32.
[3]姬昕禹,马捷中,翟正军,等.基于ARINC429总线接口板卡的驱动程序设计与实现[J].计算机工程与设计,2007(14):3511-3514.
[4]赵显红,何谷惠.基于FPGA的ARINC429机载总线接口[J].现代电子技术,2008,31(10):93 -95.