基于CPCI总线的双CPU计算机系统设计
来源: 舰船电子工程   发布时间: 2016-12-16 10:12   443 次浏览   大小:  16px  14px  12px
论文从提高效费比的角度出发,提出一种基于CPCI总线的双CPU计算机系统设计方案,并通过搭建CAN线通信网络对双CPU计算机系统进行了测试与验证;根据测试结果,明确了后续重点研究的方向。

王亚波,黄蔚,宋晓科,武汉第二船舶设计研究所


关键词:CPCI;双CPU计算机系统;CAN总线;测试

1 引言

计算机总线是计算机各部件之间进行信息传输的公共通道,随着系统总线技术的发展,基于CPCI总线的计算机系统已广泛应用于工业各领域,既降低了成本,增强了扩展性,又便于维修。传统基于CPCI总线的计算机系统为单计算机系统,最多包含1个系统板卡和7个外设板卡。为了实现冗余备份,通常采用“双机”方案,即设置两套独立、完整的计算机系统,一旦其中某个计算机系统的系统模块或外设模块出现故障,则该计算机系统整体被另一计算机系统所替代,系统资源浪费严重。为此,本文提出了一种基于CPCI总线的双CPU计算机系统设计方案。


2 方案设计

2.1 硬件方案设计


基于CPCI总线的双冗余计算机系统原理框图如图1所示。



图1 CPCI双冗余计算机系统原理框图

图1中,两套计算机系统的组成完全相同,单套计算机系统均可独立工作,并具有独立的输入输出通道。两套计算机系统的系统板卡通过相互连接实时传输关键信息,以实现两套时间的协同工作及无缝切换。


相比基于CPCI总线的双冗余计算机系统,于CPCI总线的双CPU计算机系统除系统板卡双冗余配置外,外设板卡、输入输出通道均配置一套,因此,在单系统槽的情况下,必须设计一个“CPCI桥”来实现两个系统板卡对系统槽的共用与切换。


基于CPCI总线的双CPU计算机系统原理框图如图2所示。



图2 CPCI双CPU计算机系统原理框图

图2中,主系统板卡和备份系统板卡同时插在“CPCI桥”上,通过“CPCI桥”实现两块系统板卡切换共用一个系统槽。


主/备系统板卡通过“CPCI桥”的冗余通信模块周期性的进行状态、数据等信息的交换并对数据进行完好性校验,以实现主/备系统板卡在进行切换时,备份系统板卡能够准确掌握主系统板卡的当前工作状态,从而完成同步与稳定切换。


主/备系统板卡通过“CPCI桥”的故障检测模块进行实时通信,以实现相互之间的实时状态监测,并以此作为主/备切换的依据。主/备系统板卡监测的故障类型包括采集通道故障、电源故障、CPU内部存储器故障、CPU外部存储器故障、外围器件故障等。


为了缩短开发周期,“CPCI桥”硬件设计方案在研华6U工控机箱的基础上进行修改实施。


研华工控机箱具有一个系统板插槽和七个设备板插槽,单系统槽无法实现双CPU工作。为了解决此问题,在研华工控机箱的基础上设计增加了一块系统槽扩展板(即“CPCI桥”),不仅可实现系统槽的一分为二并,还可实现对双CPU的仲裁,使得某一时刻只有一个CPU占用CPCI总线,而另一个CPU 实时备份。“CPCI桥”结构框图如图3所示。



图3 “CPCI桥”结构框图

图3中,CPU的仲裁是通过“CPCI桥”上的CPLD来实现的。CPLD通过串口与双CPU系统板进行通信,每个CPU 系统板正常工作时以100Hz的频率定期向CPLD发送心跳包,当CPLD在10ms周期内没有接收到主CPU系统板发送的心跳包时,将总线切换至从CPU 系统板(这时主、从CPU系统板将进行交换,即主变为从、从变为主),从而实现双CPU系统板的热切换。


CPLD功能框图如图4所示,主要包括以下几个模块:


1)串口接收模块:接收CPU系统板发送的心跳包和数据包等信息。

2)串口发送模块:读取CPLD当前状态信息并发送给CPU系统板。

3)串口数据解析模块:解析CPU系统板发送的数据并将信息传递给相应的任务模块。

4)心跳状态模块:接收CPU系统板发送的心跳包,当在10ms周期内没有接收到心跳包时发出CPU故障信号。

5)从CPU重启控制模块:当接收到从CPU重启信息后,在从CPU重启检测CPCI外设过程中发出总线切换控制信号,并对从CPU重启标志位进行设置。

6)系统复位模块:实现对整个计算机系统的初始化。

7)时钟生成模块:生成系统所需的多个时钟,如串口波特率、定时时钟等。

8)总线切换模块:依据心跳状态模块和从CPU重启控制模块的信息对总线是否切换进行裁决。



图4 CPLD功能框图

“CPCI桥”电路设计图如图5所示。



图5 “CPCI桥”电路设计图

2.2 软件方案设计


在双CPU计算机系统正常运行时,外设板卡只与主CPU进行通信,外设板卡的驱动只在主CPU的操作系统上进行加载,从CPU的操作系统上默认是没有加载外设板卡的。当主CPU发生故障时,从CPU需在不掉电的情况下按照主CPU当前的工作状态继续运行,由于从CPU的操作系统上默认是没有加载外设板卡的,因此,双CPU计算机系统软件主要是要解决从CPU的操作系统在不掉电的情况下动态加载外设板卡驱动的问题。


2.2.1 VxWorks管理PCI外设的分析


缺省情况下,VxWorks系统在启动时会查找所有挂在PCI总线上的外设,初始化其配置空间,并在Host上为其分配Memory/IO 映射地址。VxWorks系统中的PCI自动配置模式存在如下问题:


1)由于整个PCI初始化是在BIOS阶段完成,初始化时没有插入的外设如果在系统运行中插入,将无法得到识别。

2)对板卡中断的ISR无法动态增加,新插入板卡产生的中断无法得到响应,PCI中断只能挂到链中而不能从链中移走。

3)初始化时在PCI地址段内连续分配映射地址,板卡拔出留下的空闲地址段不一定能够适用于后面插入的新板卡,可能形成地址漏洞。


因此,实现驱动的动态加载要处理好地址映射和中断的问题。


2.2.2 PCI设备地址映射


在PCI规范中,每一个PCI外设都有一个配置空间,容量最大为256字节,称为配置寄存器。配置空间的256个字节分为头标区和设备关联区。头标区的布局如表1所示。


表1 PCI配置空间头标区

VxWorks系统上电后,BIOS中的POST软件首先要把PCI总线上所有外设的存储器地址和I/O地址映射到系统的内存区域中,并为其预留IO地址空间,以便在热拔插时能将该预留空间分配给相应外设,从而实现外设驱动的动态加载。若在BIOS阶段系统未检测到某外设,待系统启动后再插入则必须调用BIOS中的IO地址空间分配,目前VxWorks系统无法实现。


为解决上述问题,双CPU计算机系统软件设计采用如下方案:


对总线上所有外设进行定时扫描,对比记录的原板卡插入状态和扫描时读取的外设ID、厂商ID等固化信息,以及时判断槽位上发生的事件。若发现新插人的外设,则把预留的IO空间地址写入PCI配置空间头标区基地址寄存器中,以完成地址映射,地址映射完成后驱动程序就可根据分配的基地址访问外设板卡。


2.2.3 中断的响应与处理


根据PCI规范,所有PCI外设都可复用4个中断级别,即A、B、C、D中断。若要实现复用中断,不但要在硬件上使用电平触发机制,在软件上也要做相应处理。


软件处理单一外设的中断复用主要由中断服务程序完成。单一外设复用中断时,驱动程序将挂接在指定的中断号上,此时,在该中断号上所出现的中断一定是属于该类外设的,用户可在中断服务程序中检查所有该类外设,以确认中断的来源并对产生中断的外设进行服务。


在VxWorks系统内部,对应PCI的四个中断源有四个保存复用中断服务程序人口地址的中断服务链表,对于这些中断源,VxWorks系统会用intConnect()函数为系统连接一个中断服务管理程序,在中断到来时,中断管理程序会依次从中断服务链表中调用服务程序,检查设备的状态。同时,VxWorks系统为用户提供了pcilntConnect()函数,使用该函数可将中断服务程序挂接到对应的中断服务链中。


双CPU计算机系统同样通过动态检测外设板卡的拔插情况,当检测到外设板卡插入时,把中断号写入到PCI配置空间头标区的PCI_CFG_DEV_INT_LINE寄存器中,通过pciIntConnect()函数将中断号和中断服务函数进行连接。同理,当检测到外设板卡拔出时,使用pciIntDisconnect()函数将中断服务器函数和中断号断开,并使该中断号空闲,以被其它外设板卡所使用。其中,中断的相应操作在外设板卡驱动程序的加载和卸载函数中实现。


2.2.4 驱动动态加栽的实现


外设驱动动态加载流程图如图6所示。



图6 外设驱动动态加载流程图

外设驱动动态卸载流程图如图7所示。



图7 外设驱动动态卸载流程图

2.2.5 CPU故障检测


此程序主要功能是检测CPU工作是否正常;判断当前CPU工作状态;检测系统硬件注册表中是否有相应外设。程序流程图如图8所示。



图8 CPU故障检测程序流程图

图8中,主从查询进程是定时查询CPU状态并设置标志位,其它进程根据主从标志信息决定程序执行方向。


3 通信稳定性测试

对双CPU计算机系统进行CAN总线组网测试,其中四台PC机作为发送节点,以固定频率发送规定大小的数据;双CPU计算机系统作为接收节点。四台发送节点按照设定的优先级写数据至CAN总线网络,接收节点读取各路数据。组网测试结果如表2所示。


表2 样机正常接收丢包测试表

从表2可以看出,双CPU计算机系统在测试过程工作稳定,未出现任何丢包现象。


人为对双CPU计算机系统进行主/从切换,测试结果如表3所示。


表3 双CPU计算机系统主/从系统板卡切换一次接收丢包测试表

从表3可以看出,在双CPU计算机系统运行时进行主/从系统板卡切换会发生丢包现象。分析认为,出现丢包现象主要有两方面原因,一是切换时CAN通信板卡缓冲队列里数据未被及时读取导致数据丢失;二是切换时主/从系统板卡需要一定的时间周期才能完成卸载、查找可用外设等操作,因而导致数据丢失。


人为对双CPU计算机系统进行从/主切换,测试结果如表4所示。


表4 双CPU计算机系统从/主系统板卡切换一次接收丢包测试表

从表4可以看出,在双CPU计算机系统运行时进行从/主系统板卡切换也会发生丢包现象,且丢包现象较主/从系统板卡切换时严重。分析认为,双系统板卡热备份时,主系统板卡出现故障,从系统板卡会接管外设成为主系统板卡;对原故障系统板卡进行更换后,原故障系统板卡会成为新的从系统板卡。为在下一轮热切换中实现新的从系统板卡在主系统板卡出现故障时顺利接管外设,从系统板卡需对BIOS内存进行分配,且BIOS内存分配时间至少需200ms,从而导致更严重的丢包。


人为对双CPU计算机系统CAN通信板卡进行热插拔,测试结果如表5所示。


表5 双CPU计算机系统CAN通信板卡热插拨一次接收丢包测试表

4 结语

上述测试结果表明,主/从系统板卡在切换时需一定的时间周期才能完成相应操作,否则会导致数据丢失,且切换时间≧200ms。因此,在后续研究中,可重点从加、卸载驱动、外设查找、BI0S内存分配等方面进行优化设计,进一步减少切换时间,使双CPU计算机系统适应高更新率信息的传输。