应用于安全计算机的双口RAM数据通信方法※
2015-07-03徐军张磊孙军峰
徐军,张磊,孙军峰
(卡斯柯信号有限公司 研发中心,上海200071)
引 言
应用在轨道交通行业的安全计算机是一种苛刻系统,需要具有极高的安全性和可靠性,以及具备故障-安全特性。安全计算机不能因为系统中的硬件、软件、数据的系统性或者随机性失效或故障,导致输出危险的控制信号。
现代轨道交通行业中广泛使用的安全计算机主要分为以欧洲各大公司为主的三取二架构和以日本公司为主的二乘二取二架构[1]。
本文提到的安全计算机需要满足高安全性和高可靠性的要求,其系统需要达到SIL4安全等级,因此,需要采用相应的安全处理技术来使PFH满足10-9≤PHF<10-8每小时。要使轨旁安全平台计算机系统达到SIL4要求,可以在进行系统设计时采取以下措施:
①每个子系统的失效率降低至10-7/h;
②提高各个子系统的诊断覆盖率DC至99%;
③系统的关键组件采用三取二或者二乘二取二架构。
本文中提到的安全计算机采用三取二架构,三取二安全计算机的原理为:正常情况下,三个通道正常运行,以三取二方式进行表决,当一个通道故障或者输出与其他两个通道不一致时,该通道被切断,系统降级为二取二模式,当剩下的两个通道故障或者输出不一致时,系统宕机,切断输出。
三取二安全计算机可用于CBTC信号控制系统中的轨旁区域控制器(ZC),ZC实时采集车载ATP主机发过来的列车位置信息和轨旁计算机联锁的道岔和进路的状态,进行三取二的运算和表决,形成每列列车的安全移动授权距离并发送给列车的车载ATP主机,来控制整个CBTC系统列车的安全运行,所以安全计算机对通道之间数据传输的安全性、实时性和可靠性要求非常高。
三取二安全计算机主要由3个计算处理通道Channel A、Channel B和Channel C组成,A、B、C通道中都有一个MPU和HCU,3个通道的 MPU、HCU硬件建构都是相同的,三取二安全计算机架构如图1所示。
HCU作为高速数据通信接口单元,通过网络通信接口与轨旁监控设备以及车载控制器进行通信,轨旁监控设备和车载控制器将自身运行状态以及采集到的各种信号设备状态数据传送给HCU,HCU接收到这些安全数据并进行预处理后,通过双口RAM传递给MPU。
图1 三取二安全计算机架构
MPU为逻辑运算和控制模块,负责对接收的安全数据进行逻辑处理,并产生相应的结果,控制整个系统安全的运行。MPU产生的结果数据通过双口RAM传递给HCU,然后HCU发送给相应的执行机构或者外部设备。
JIU主要从外部接收数据,并对两个通道的数据进行一致性表决,表决通过后的数据作为系统的最终输出结果。
双口RAM是MPU板和HCU板之间的数据交换空间,可以完成大批量、实时的数据交换。MPU板与HCU板之间交互的数据是安全数据,必须保证双口RAM中存取数据的完整性、正确性和可靠性。本文针对三取二安全计算机中双口RAM传输数据的安全性和实时性要求,设计了一种基于角色轮换的双口RAM数据通信方法。
1 关键问题分析
根据双口RAM的工作原理,其左右两端的处理单元共享一个存储器空间,它们都可以对双口RAM存取数据,并快速地交换数据,但是出现以下两种情况时,双端口存取可能会出现冲突:
①左右两个端口同时向同一地址单元写入数据;
②左右两个端口同时在同一个地址单元,一个写入数据,一个读出数据。
如果发生以上的情况,会导致双口RAM中的数据丢失,或者两端不能正常地存储数据。
三取二安全计算机会与其他设备进行网络通信,数据量比较大,通信量峰值可达2 Mb/s,因此,使用双口RAM进行数据交换时,需要考虑如何避免因交互速度不高而出现的数据阻塞问题。同时,双口RAM两端的控制芯片相互配合来完成数据的交互,硬件电路设计复杂,同时对数据访问、地址译码、芯片控制的要求也比较高,因而,数据交互过程成了系统安全的薄弱环节,双口RAM在数据交互的过程中可能存在各种故障或者失效,包括系统性失效和硬件随机失效。
三取二安全计算机使用双口RAM来进行数据通信时,必须满足以下3个条件:①避免两端板卡发生访问冲突;②提高数据交互速度,不影响设备的数据通信量;③保证存储数据的完整性、正确性、可靠性。
针对条件①,目前很多科研工作者提出了一些解决双口RAM出现访问冲突的方法。
但很多都忽略了对双口RAM的功能完整性和可靠性的检查,如果发生功能故障或者失效,就不能保证安全相关数据是正确可靠的。
应用在三取二安全计算机中的双口RAM,不仅要避免多CPU访问共享双口RAM而引起的冲突,解决数据通信瓶颈问题,而且应该能够预防由双口RAM功能故障或者硬件失效而引起的数据失效或丢失,满足三取二安全计算机的安全性和可靠性要求。
2 安全数据交互方式
为避免MPU和HCU同时对双口RAM的同一个内存单元进行访问,本设计没有采用双口RAM的中断或者信号量等机制,而是采用一种基于角色的环形缓冲收发机制,将双口RAM划分为两个独立环形缓冲区:发送环形缓冲区和接收环形缓冲区。发送环形缓冲区负责将MPU数据传递给HCU,最终发送给外部设备;HCU从外部设备接收到数据,放到接收环形缓冲区,并传递给MPU。
本设计将整个128 KB的双口RAM,分为数据交互区和状态交互区,双口RAM功能角色示意图如图2所示。
图2 双口RAM功能角色示意图
其中数据交互区用于MPU与HCU交换通信数据,其大小为126 KB,将数据交换区分为上下环形缓冲区模块,大小都为63 KB,其中上模块为发送环形缓冲区,下模块为接收环形缓冲区。
发送环形缓冲区分为A、B、C三个区块,每个区块的大小都为21 KB,每个区块轮流地设置三种角色:写入区块、读出区块、测试区块;接收环形缓冲区分为D、E、F三个区块,每个区块的大小都为21 KB,每个区块都轮流性地设置3种角色:写入区块、读出区块、测试区块。
状态交互区的大小为2 KB,用作两个CPU系统交互状态信息和告警信息。
2.1 数据处理
三取二安全计算机逻辑运算模块的运行周期为600 ms,该模块按照周期进行数据接收、数据处理、数据输出。
在第n个周期,MPU上的控制逻辑运算模块从双口RAM接收到数据后,放到逻辑接收缓冲区;从逻辑接收缓冲区取出n-1个周期的数据并进行逻辑处理;将n-2个周期的逻辑处理结果,从逻辑发送缓冲区中取出,放到双口RAM中。
MPU上的控制逻辑运算模块对安全数据进行逻辑处理的时间不超过300 ms,如果超过,就会影响MPU接收或者发送数据。
同样,MPU上的控制逻辑运算模块接收、发送数据超过300 ms,也会影响逻辑处理功能。在接收发送处理阶段,300 ms中的280 ms被分为20个发送接收子周期,每一个子周期的时间为14 ms。
在HCU中,也是按照同样的运行节拍从双口RAM中写入或读出数据。
MPU与HCU之间交互的数据,按照预先定义的双口RAM交换数据帧进行。数据帧定义略——编者注。
2.2 数据接收
HCU通过网络接口接收到数据后,对数据进行预处理,按照交换数据帧进行数据组包。根据当前周期号设置“cycle”,同时确定该数据包需要被放到D、E、F三个区块中写入区块角色标志“role”,将“flag”设置为1(即为输入),并交换数据帧的其他字段,按照源网络数据包中的信息进行设置。HCU根据当前周期号确定在接收环形缓冲区中的写入区块后,将组包之后的交换数据帧放到写入区块中。
MPU根据当前周期号确定在接收环形缓冲区中的读出区块后,从读出区块中获取交换数据帧,然后对数据帧进行解包,并通过“cycle”、“role”、“flag”、“safety”、“crc”等信息来验证数据帧的唯一性和正确性,正常的数据帧被放到逻辑接收缓冲区,异常的数据帧被丢弃。
同时MPU根据当前周期号,确定在接收环形缓冲区中的测试区块,利用内存检测算法对测试区块进行双口RAM内存区块检测。
2.3 数据发送
在当前周期的600 ms内,MPU进行逻辑运算处理在300 ms内完成后,MPU从逻辑发送缓冲区中读取上个周期的逻辑处理结果数据,并对结果数据进行预处理,按照交换数据帧进行数据组包。根据当前周期号设置“cycle”,同时确定该数据包需要被放到A、B、C三个区块中写入区块角色标志“role”,将“flag”设置为1(即为输入),并交换数据帧的其他字段,按照源网络数据包中的信息进行设置。MPU根据当前周期号,确定在发送环形缓冲区中的写入区块后,将组包之后的交换数据帧放到写入区块中。
HCU根据当前周期号,确定在接收环形缓冲区中的读出区块后,从读出区块中获取交换数据帧,然后对数据帧进行解包,并通过“cycle”、“role”、“flag”、“safety”、“crc”等信息来验证数据帧的唯一性和正确性,验证数据帧的正确性。异常的数据帧被丢弃,正常的数据帧按照网络数据帧进行组包,并通过网络发送给轨旁设备或者车载控制器。
同时HCU根据当前周期号,确定在发送环形缓冲区中的测试区块,利用内存检测算法对测试区块进行双口RAM内存区块检测。
2.4 区块角色轮换
双口RAM的发送与接收环形缓冲区的3个区块,在任意一个周期都只能处于读出、写入、测试3种中的某一种角色,而且这3个角色进行周期轮换,区块角色轮换表略——编者注。
MPU与HCU通过双口RAM区块角色进行数据交互的步骤略——编者注。
MPU与HCU通过相同的外部时钟中断来驱动数据处理软件模块的运行,MPU与HCU在对双口RAM进行访问时可以做到同步、流水线作业。在同一个处理周期内,发送环形缓冲区或者接收环形缓冲区中任何一个区块都有明确固定的角色,MPU板和HCU板不会同时访问操作相同区块,只有一个板卡对特定区块进行访问,从而解决了双口RAM的访问冲突问题,不需要另外采取硬件仲裁、软件仲裁或者信号量交互等手段。
2.5 双口RAM检测
应用在三取二安全计算机中双口RAM可能存在一些功能性缺陷。无论门级电子元件的制造缺陷,还是板卡电路级的设计错误,都可能导致双口RAM的存储功能性故障,从而降低其功能完整性和可靠性。双口RAM存储单元具有多种类型的故障略——编者注。
实际项目应用中,开发人员需要关注双口RAM存储功能的完整性和可靠性,可以通过存储器检测算法来对其进行检测和诊断,能够及时地发现和定位双口RAM的存储功能故障,并及时采取相应的措施,避免因双口RAM存储单元的数据错误导致的严重后果。
本文采用硬件BIST架构(HBIST),在硬件电路中设计专门的硬件逻辑部件来对内存进行测试,其图形测试向量有专门的硬件电路模块生成,自动对内存的各种功能故障进行测试,硬件架构内建测试的内存故障测试覆盖率高,而且测试速度快,设计选取的图形测试向量主要用于覆盖高层次的内存故障,如NPSF、CF、DRF。
HBIST利用March-TB内存测试算法对系统的内存进行测试,使用硬件HBIST电路来生成图形测试向量,并由硬件HBIST电路来进行测试,HBIST测试电路模型略——编者注。
在硬件BIST处于非工作状态时,会拉低BIST的时钟信号,BIST电路进入休眠状态。当系统在夜间进入非繁忙状态,会产生BIST_MODE信号,来激活BIST电路的BIST模式控制器,并拉高时钟信号,BIST模式控制器发出控制信号,会接管对整个RAM的访问控制,并对RAM开始进行测试。
BIST模式控制器控制测试向量产生器、地址与数据生成逻辑工作,产生相应的测试向量对RAM进行测试。同时,并将测试结果在BIST结果比较器中进行比较,如果发现异常,退出BIST_MODE模式,通知MPU测试异常,MPU产生相应的告警和错误处理。
HBIST在进行内存检测时一共具有4种状态:idle、test、error、wait。idle表示处于等待测试数据进行测试的空闲状态;test表示获得测试向量对相应内存单元进行测试;error表示检测到内存单元出错;wait表示处于休眠状态,等待CPU模块激活HBIST。
HBIST状态机的状态转移图略——编者注。
HBIST状态机的VHDL程序略——编者注。
在测试的过程中,通过植入内存故障,并用逻辑分析仪获取出错信号,硬件BIST模块检测内存出错图如图3所示。圆圈里面的测试结果与期望结果不一致,内存检测出错。
图3 硬件BIST模块检测内存出错图
2.6 数据交互软硬件设计
双口RAM是双端口SRAM芯片,本设计采用CY7C028V-15AXI,读写速度最高为15 ns,数据容量为64 K×16位。
双口RAM连接HCU板的一端为MPC8247的LOCAL BUS总线,连接MPU板的一端为CPCI总线桥接芯片的LOCAL BUS总线,HCU可以直接通过LOCAL BUS总线访问双口RAM,而MPU板通过PCI总线访问,其中还有控制信号,如片选、读写、中断、BUSY信号等。双口RAM交互电路图略——编者注。
在MPU和HCU中,通过设计的软件模块,来完成双口RAM的访问操作。双口RAM的MPU上软件交互关键代码略——编者注。
双口RAM存储器区段数据交互效率和检测性能参数见表1。
表1 双口RAM交互性能表
结 语
分析了应用在轨道交通行业中的三取二安全计算机的双口RAM数据通信要求,并在实际的项目设备开发中,设计了基于角色轮换和自检技术的数据通信方案,可以满足三取二安全计算机数据通信的安全性、可靠性和实时性要求。
编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。
[1]郑升,马连川,胡华,等.改进型铁路信号安全计算机平台结构[J].中国铁路,2014(3):30-33.
[2]燕飞,唐涛.轨道交通信号系统技术的发展和研究现状[J].中国安全科学学报,2005,15(6):94-99.
[3]吴晓峰,杨旭雷,张浩.双口RAM在DSP人机接口中的应用[J].微型机与应用,2002(10):24-25.
[4]彭峋.基于双口RAM技术的双CPU系统间数据通信[J].工业控制计算机,2013,26(6):13-14.
[5]张有为,汪永红,刘铁铭,等.基于双口RAM的双CPU控制系统设计[J].微计算机信息,2005,21(10-1):45-46.
[6]张遵伟,曹宝香,聂胜伟.基于双口RAM的冗余架构同步技术研究[J].计算机工程,2012,38(18):221-224.
[7]赵跃龙,张江陵,汪振华.一种新颖的双口RAM通讯方案[J].计算机工程与科学,1996,18(2):79-81.
[8]李震.一种基于双口RAM的环形数据缓存系统[J].计算机技术与发展,2010,20(1):201-204.
[9]张铜,成本茂,张小峰.基于 MARCH算法的SRAM内建自测试设计[J].计算机与现代化,2013,216(8):99-101.
[10]任爱玲,凌明,吴光林,等.一种用于嵌入式内存测试的高效诊断算法[J].应用科学学报,2005,23(2):178-182.