一种基于差异放大的数据一致性比较方法
2013-05-09徐笑然北京全路通信信号研究设计院有限公司北京100073
徐笑然(北京全路通信信号研究设计院有限公司,北京 100073)
铁路信号设备对其功能安全性有很高的要求。应答器传输单元(Balise Transm ission M odu le, BTM)是列车自动防护系统(ATP)的关键设备,在BTM的设计中,其软件多采用双套具有差异性设计的代码来实现安全的“二取二”功能。BTM解码单元的系统框图如图1所示。
BTM的解码单元为单CPU、双套差异软件设计。CPU从“FPGA通道1”和“FPGA通道2”分别读取由FPGA解码的两路独立报文,然后通过两套具有差异设计的代码进行取二比较。如果两组报文完全一致,则输出;若不一致,则将所有报文的比特位置1,作为异常报文,向ATP报告错误。
报文共830 bit,占用104 By te。按照一般的代码设计,多字节比较流程如图2所示。
比较过程是一个循环体,循环次数是需要比较的字节个数。首先读取两份报文各自的第1字节,然后比较是否一致。如果一致,则再取下一字节继续比较,直到循环结束条件满足;如果不一致,则退出循环,将报文所有字节置为0x FF。
而基于“差异放大”的比较方法的原则是,将最微小的差异放大到最大的状态。也就是说,如果两组数据即使只有1个比特位的不同,经过差异放大,最终的比较结果是全部字节完全不同。这种方法非常适合用于非常严格的数据比较,只允许完全一致,不允许任何偏差。而BTM的报文比较就是这种情况。
“差异放大”比较方法在编码实现时,完全采用数学运算的方式,没有如图2所示的条件分支语句。其运算过程如图1、3所示。
[A]和[B]是待比较的两组数据,分别有N个字节。首先将两个数组的对应字节,进行“按位异或”操作,得到等长的N字节结果数组[R]。[R]能够表示
徐笑然,男,硕士毕业于清华大学,工程师。主要研究方向包括嵌入式软硬件设计、软硬件安全功能设计等,曾参与ATP研发、BTM研发等项目。两个数组的一致性程度,如果[A]和[B]内容完全一致,则[R]的所有字节均为0;否则,[R]中必定存在不为0的字节。第二步,将数组[R]的每个字节相互进行“按位或”操作,共N-1步位或操作,最终得到一个字节r。r是[R]的缩影,如果[R]的所有字节均为0,则r=0;否则r≠0。第三步,将字节r进行“差异放大”,得到rF。所谓“差异放大”,即如果r中存在等于1的比特位(r≠0),则在放大操作后,rF的所有字节全为1(rF=0x FF);如果r中不存在等于1的比特位(r=0),则在放大操作后,rF的值仍为0,因为无论对0如何进行放大,结果还是0。这一步就是“差异放大”的关键步骤,即使r仅有一个比特为1,在操作后就放大为所有字节全为1;有且只有r=0,则rF=0,即0对于放大操作是无效的。最后一步,将rF复制N次,形成数组[RF],使[RF]的每个字节等于rF,然后将[RF]与原始数据[A]或[B]进行对应字节的位或操作。由于[RF]的取值只有两种情况:全0或全1,因此最后的输出结果数组[C]=[A],或[C]=[RF]。至此,通过一系列算法实现了与图2传统流程设计等效的结果。
差异放大过程是:通过两次循环,将r逐位右移、左移,在此过程中再与r自身进行“位或”操作。由于“位或”操作会最大限度地保留比特“1”,因此就将r中等于1的比特位扩散到所有的比特位;如果r的全部比特位均为0,则此操作之后r仍等于0。
与传统的比较算法相比,基于“差异放大”的数据一致性比较算法具有如下优点。
1)它是一个纯数学运算的过程,代码实现时无逻辑分支语句,极大降低了代码白盒测试时MC/DC覆盖率的复杂度。
2)由于完全采用了数学运算,因此可以很容易进行数学建模,通过Sim u lin k等工具自动生成代码,降低了人为编写代码而引入b ug的可能;同时,易于使用可编程逻辑器件来实现比较功能,增加了功能实现的手段。
3)算法执行时间固定,代码的行为具有确定性。
在使用差异放大比较算法时,需要注意的内容如下。
1)如果不使用形如Sim u link等工具自动生成代码,则需要详细的设计文档来说明代码的意图,因为代码本身很难明确地显示出整个运算的目的和功能。
2)在大部分情况下,代码的执行时间比传统比较方法要长。
在实际应用中,差异放大比较算法与传统的比较算法可以分别用于双套差异软件的A、B代码设计里,使双套代码在算法设计阶段就产生较大的差异性,能够很好地保证双套代码对共因故障的检出率。
[1] EN50128-2011 :Railway applications —Communication, signaling and processing systems—Software for railway control and protection systems[S].
[2] IEC61508-2010:Functional safety of electrical/electronic/programmable electronic safety-related systems-Part 6: Guidelines on the application of IEC 61508-2 and IEC 61508-3[S].
[3] DO-178B:Software Considerations in Airborne Systems and Equipment Certification.