杨加龙,金 翊,欧阳山,周时强
随着千位三值光学计算机(ternary optical computer,TOC)整机系统SD11和图1所示的SD16日趋完善,这种以数据位数众多、数据位能任意分组独立使用和各数据位的计算功能可在运行时重构[1]为特色的新型计算机进入了人们的视野,为解决超级计算机系统面临的棘手问题带来了希望.
图1 TOC(SD16)Fig.1 TOC(SD16)
TOC采用“光计算、电控制、尽量利用已有器件”的构建策略,其输入输出设备、通信设备和存储设备都尽量采用电子计算机的常见部件,以此来加快整机系统的研发过程,同时降低研发难度.因此,在TOC中不可避免地存在光信号和电信号的相互转换过程,其中将电信号转换成三值光信号的设备被称为编码器[2-3],将三值光信号转换成电信号的设备被称为解码器[2-3],二者都是TOC特有的基本部件.随着解码器理论的成熟和各个功能模块的逐渐完善,开发一种可靠的将解码结果传输给其他部件的通信方式,已成为迫切需要解决的课题之一.本研究通过对TOC系统解码器的分析和归纳[4-6],制定了有效的通信技术方案,包括通信机制、控制策略、容错技术、数据格式、冲突规避和物理信道择取等方面,并按这一方案构造了实际的通信系统,进行了实验测试,为TOC解码器通信子系统的后续研究提供参考.
在TOC中,解码器子系统包含结果解码器和控制解码器两个部分:结果解码器用在三值光学运算器主光路的输出端,其功能是将三值光学运算器输出的光学信号(计算结果)转换成表达同一信息的电学信号;控制解码器用在三值光学处理器控制光路的输出端,其功能是将控制光路输出的光信号转换成对应的电信号.二者的通信子系统需要与监控系统所在的上位机进行通信,将各自的解码结果发送到位于上位机的对应接收缓冲区.
在TOC的不同研究阶段,研究目标、部件性能、整机结构、集成度、数据位数多少、运算速度等方面都不相同,因此对解码器通信系统的技术要求也就不同.本研究以SD11为背景,讨论了TOC解码器通信系统的各种技术和设计,但技术本身对各种TOC都适用.
对本通信子系统的需求进行了仔细分析和归纳,可以得到如下要点.
(1)由监控系统启动通信过程.TOC的各种硬件,包括控制解码器和结果解码器,都是在TOC的监控系统管理下进行工作[7],因此什么时刻将哪个解码器生成的数据传送给哪个部件只有监控系统知道.因此,本通信子系统也必须在监控系统的管理下工作,由监控系统适时启动本通信子系统,并考察传送过程的可靠性.
(2)有检错和重发能力.鉴于本通信子系统的信道距离限于一台TOC内部,通信环境较好,且通信频度较低,但不允许传送的数据有任何差错.因此,要求本通信子系统有检错和数据重发能力,漏检率低于10−10,不要求纠错能力.
(3)故障检测和示警机制.本通信子系统应能感知自身出现的各种故障,并能在自身不可恢复时向监控系统示警且给出故障提示,以便于检修.
(4)控制传输过程的能力.由于解码器各部分的工作过程、处理器的计算过程、控制光路的工作过程、计算结果接收部件的工作过程和通信过程都是并行工作、相互关联又各自独立的,因此本通信子系统在工作时必须考虑到解码器提供数据的及时性和接收端的空闲情况.为应对二者之间出现不同步的情况,要求本通信子系统能够自动实施通信延迟,以避免发生通信错误.当数据全部传送完成时,又要求本通信子系统能自动停止工作并向监控系统报告.
(5)占用解码器端资源少.结果解码器和控制解码器都是TOC的基本硬件,从系统的效率、能耗、几何尺寸、可靠性等方面考虑,要求它们的结构尽量简单.因为解码器的软硬件资源都十分紧张,所以要求本通信子系统尽量少占用解码器端的资源.
(6)对其他部件干扰小.对其他部件的干扰将直接损害TOC系统的整体性能,因此要求本通信技术有较小的信号辐射泄漏,不会干扰其他部件的工作.
(7)接口简单、技术成熟.本通信技术仅是TOC多种重要技术之一,既不能在这项技术上投入很多研究精力,又要求其稳定可靠地工作,因此必须采用接口简单的成熟技术[8-9],避免过多的研究风险.
(8)保证1.2 m的可靠传输距离.SD11的光学处理器到计算结果接收设备的距离、控制光路到重构电路输入端的距离都在0.8~1.2 m之间.因此,针对SD11的通信子系统要求其可靠通信距离达到1.2 m.
根据上述8个需求分析要点,本研究设计的通信子系统包含接收数据缓存池、字节数据重复发送检错机制、容忍通信系统偶发瞬态错误的重新发送机制、容忍周边部件偶发瞬态错误的重启通信系统机制、对永久性故障的停机示警机制、用中断方式启动发送端机制和通信用的数据格式等核心内容[10-11],并将这些设计结合内部集成电路(inter-integrated circuit,IIC)技术,实现了以接收端为主控设备的TOC解码器的通信子系统[12].这些设计的要点如下.
(1)在上位机建立由监控系统管理的数据接收池.
由于接收缓存区设在上位机,则接收端软件也必须运行在上位机.只需将接收端软件构造成一个可独立运行的模块(如构成进程或线程),并由本通信子系统程序调用接收端软件,即可启动接收端设备,并使其进入就绪状态.再为本通信子系统设计一个远程启动发送端的机制,则监控系统就能适时启动本通信子系统,并给出发送端编号和接收缓存区地址,从而启动通信过程,满足了需求分析(1)的要求.
(2)采用字节数据重复和出错重发策略.
鉴于解码器的输出数据是处理器的计算结果或控制处理器工作的数据,因此不允许在传送中发生任何差错.常用的奇偶校验不能感知偶数位出错;海明码、循环冗余校验[13]或其他校验方法的算法又比较复杂,检验过程占用较多的软硬件资源,因此它们都不适合在本研究中使用.经过对各种校验方法的认真分析,最终本研究采用了如下的校验策略:每个字节的数据都连续传送两遍,若接收端收到的两个字节完全相同,就认可该数据,否则就要求重发,重发时仍然将该字节数据连续传送两遍.这一策略的漏检概率估算如下:对于物理连接可靠的有线链路,线路噪声造成的误码率应低于10−6,即传送百万个码元最多可能出现一个码元错误[14].例如,第一个字节中有一个码元出错的概率为8×10−6,同时在第二个字节也有一个码元出错的概率为(8×10−6)2,于是两个字节在同一个位上出错的概率为(8×10−6)2/8=8×10−12.这是一个可以忽略的小概率.由于任何在两个字节的不同位上发生的错误都可以通过重发机制加以纠正,因此本策略可以满足需求分析(2)的要求.
(3)设置重发计数器和重启通信计数器构成的容错与示警机制.
在长期工作中,通信系统发生故障的可能性始终存在.对于瞬态故障,只需待故障原因掠过后,系统即可恢复工作,而因元器件损坏造成的故障则必须停机检修方能排除.于是本系统设置重发计数器以应对通信系统内部的瞬态故障;设置重启通信计数器以应对包括整个通信系统在内的有关部件发生的瞬态故障;以退出通信系统时返回给监控系统的代码来表达故障类型,达到向监控系统示警的目的.考虑到本通信系统的接收端与监控系统都位于上位机,为方便计,将重发计数器设置在接收端,而重启通信计数器感知的范围超出了通信系统,因此必须设置在监控系统中.这一示警方案的主要工作原理如下:
①在接收端设置重发计数器,并设定计数阈值为5.每当接收端发生数据校验错误,就将重发计数器加1,然后送出“不认可”应答,以此要求重发本字节数据.如果通信故障是瞬态的,几次重发后应能等到故障掠过,系统恢复正常,从而实现对瞬态故障的容错.如果故障是非瞬态的,则重发过程会持续下去,直到计数器达到5次(计数阈值).这时主机终止通信(应仍向IIC总线给出终止命令),退回监控系统,并通过通信状况寄存器带回出口参数,以方便管理人员检修.
②监控系统设置一个重启计数器,并设定计数阈值为3.每当监控系统启动一次本通信子系统软件时就将该计数器加1.当该计数器达到阈值时,监控系统将使TOC停机,并在日志中给出通信故障的出错码,以方便管理人员检修.每当本通信子系统退出时,监控系统都会查看通信状况寄存器,并将其记录在日志中,以便管理人员查阅.若通信状况寄存器的值是标示通信成功的00H,则清零并重启通信计数器;若通讯状况寄存器为其他值,则监控系统就重启本通信子系统一次.如果本通信子系统的故障是由于其外部瞬态原因造成的,则经过几次重启,这些外部瞬态原因会掠过,系统恢复正常;如果是由非瞬态原因造成的,则该TOC停止工作,以免给出错误结果.
(4)建立启动发送端的中断机制.
由于接收端软件与本通信子系统软件都运行在上位机,故启动接收端的方式比较简单,只需调用接收端程序模块即可.但发送端软件运行于解码器的处理器上,必须用远程方式通知发送端处理器启动发送端软件.待通信两端都进入就绪状态后,再依据具体的通信协议建立通信链路,进而完成通信任务.
考虑到SD11的各个发送端处理器在其他工作中都没有使用外部中断机制,本研究设计了采用外部中断技术来通知发送端处理器启动相应的发送端软件.设计要点有二:①将接收端处理器的一个输出引脚连接到发送端处理器的外部中断输入引脚;②将发送端软件(或该软件的入口)设定为对应于该外部中断的服务子程序.
(5)采用IIC通信技术.
第1节中的需求分析(4)~(8)都是对通信技术的要求.但仅从这几个要求来看,串行外设接口(serial peripheral interface,SPI),IIC,RS-232[8-9]等目前常用的通信技术都能胜任.考虑到接收端所在的上位机和发送端所在的解码器都具有IIC通信的硬件设置,因此选用IIC通信能更好地满足需求分析(6)~(8)的要求.
IIC具有传输控制能力,当收发双方有一个暂时不能通信时,需要暂停通信的一方只需将时钟线接零,待恢复通信时,恢复时钟线即可[15-16].这项协议方便了异步工作的收发双方协调步调,能够满足需求分析(5)的要求.当通信距离不超过3 m时,IIC能够保证通信质量,故能够满足需求分析(8)的要求.
IIC通信时,接收端每收到一个字节数据,都会在第9个时钟期间向数据线上发送1位应答信号.应答信号的值是由接收端处理器向IIC通信控制寄存器的应答控制位写入的值来决定的,而发送端在这个时钟期间接收数据线上的应答信号,并将其记录在IIC通信状态寄存器的应答位中.本研究利用这个应答位设计并实现了数据重发机制.但是,在IIC通信中,若接收端被设定为主机,接收端就会在收到最后一个数据时,应答一个“不认可”信号,使数据线处于低电平状态,然后再以主机身份发送通信结束命令.这一用法在本通信子系统中就造成最后一个数据的应答位具有双重含义.为解决这个问题,本通信子系统设计收发双方确定的通信数据个数比实际数据个数多1,并在实际数据之后增加一个附加数据,主机在附加数据后发出通信结束命令.同时,进一步规定该附加数据为6EH,可利用这个数据来判断IIC数据线是否正常.因为当数据线意外接地时,接收端收到的数据都是0,收到的附加数据是00H;当数据线意外接高电平时,收到的数据都是1,收到的附加数据是0FFH;当数据线受时钟干扰时,收到的数据是高低电平的交替信号,收到的附加数据是55H或0AAH,因此当接收端收到的附加数据是6EH,就认可本次通信收到的所有数据,否则,就放弃收到的所有数据,并给出数据线出错警示,要求通信子系统重启.这项设计的要点如下:①接收端收到每个字节数据的第一次通信值时,给出“认可”应答;②接收端收到每个字节数据的第二次通信值时,首先和第一次收到的值进行对比,若二者相同,给出“认可”信号,否则就给出“不认可”信号;③发送端每发送完一个字节,就在第9个时钟后读通信状态寄存器的应答位,当读得“认可”值时,发送当前数据的第二遍或下一个数据的第一遍,若读得“不认可”值,则再次发送当前数据的第一遍,实现数据重发;④收发双方设定的传送数据总数比实际数据数量多1,即传送的最后一个数据为附加数据6EH,其作用包括保证最后一个实际数据在接收端得到验证、设定主控设备发送结束命令的时机以及接收端判读本次通信过程中的数据线是否正常.
根据第2节系统设计给出的5个要点,本研究设计并构建的解码器通信子系统如图2所示,其中实线框表示硬件,虚线框表示软件模块,箭头线表示硬件或模块之间的联系.
图2 解码器通信子系统软硬件结构及关系Fig.2 Structures and relationships of the software and hardware for the communication subsystem of the decoders
本通信子系统给出了两个解码器和一个上位机.上位机的通用I/O引脚GPG 5和GPG 6分别与解码器1或解码器2的中断输入引脚EINT 11相连,构成了本通信子系统软件启动解码器上发送端软件的中断通道.当本通信子系统中包含更多的解码器时,需要使用相应数量的上位机I/O引脚与各个解码器建立中断通道.遵循IIC协议,上位机和解码器的IIC时钟线SCL(serial clock line)和数据线SDA(serial date line)分别相连.SCL上的时钟信号由IIC主机(接收端)发出,而SDA为双向传输线.
鉴于SD11的一个处理器模块有576位,故其解码结果共有576位三值数据.为了使这些三值数据能够被电子计算机的设备接受,解码器用两位二值数据来表示一位三值数据.因此576位三值数据形成了1 152位二值数据,正好是144个字节,故而本通信子系统每次传送的数据总量为144个字节,收发双方的数据计数器阈值也均为144.
考虑到第2节系统设计要点(3)中设计重发计数器的阈值为5,故一次通信的最长时间是每个数据都被重发5次.这种极端情况下发送的总字节数为144×2×5=1 440个字节,每个字节后跟随一个应答位,故共有1 440×9=12 960位.而IIC的通信速率为100 kHz,故一次正常通信需要的最长时间为0.129 6 s.
本通信子系统设计的工作步骤如下.
步骤1 当需要将某个解码器的解码结果传给上位机时,监控系统指令重启计数器清零,然后调用解码器通信子系统软件的通信准备程序来启动传输过程,其入口参数为本次通信的解码器编号.
步骤2 通信准备程序根据入口参数选择GPG-5或GPG-6来引发指定解码器处CPU的外部中断.
步骤3 解码器的CPU进入中断服务程序后启动相关联的发送端程序.发送端程序启动相关联的IIC接口进入就绪等待状态.
步骤4 通信准备程序给通信状况寄存器赋成功码00H,然后适度延时以确保发送端进入就绪等待状态,最后调用接收端程序(主机),其入口参数为从机ID.
步骤5 主机发出起始命令并广播从机ID和通信方向,在第9个时钟收取从机的应答信号,并从获得从机应答信号后开始接收数据.如果从机发生故障或主机广播的从机ID不对,则得不到从机应答,主机将通信状况寄存器修改成无从机应答码10H,然后返回通信准备程序,并通过通信状况寄存器向系统报告发生了无从机应答故障.
步骤6 从机对主机的广播给出应答信号后,发送端程序从解码结果存储区取出第一个数据,并将其写入IIC寄存器中的发送寄存器,引发IIC传送数据给接收端,并将发送数据计数器加1、发送遍数计数器加1.
步骤7 接收端IIC部件收到数据后立刻通知主机端CPU读取接收寄存器的值:①若接收遍数计数器为0,则将数据暂存入数据第一遍寄存器,并将接收遍数计数器加1,然后给出“认可”应答信号;②若接收遍数计数器为1,则将收到的新数据与数据第一遍寄存器的值进行比较,若相同,则给出“认可”应答信号,然后将接收遍数计数器清零、重发计数器清零,并将数据存入相应的接收缓存区,将接收数据计数器加1;③若收到的新数据与数据第一遍寄存器的值不相同,且重发计数器未达到阈值,则给出“不认可”应答信号,然后将接收遍数计数器清零、重发计数器加1;④若收到的新数据与数据第一遍寄存器的值不相同,且重发计数器达到阈值(5次),则给出通信结束命令,将通信状况寄存器修改为数据校验出错码12H,返回通信准备程序.
步骤8 发送端收到接收端的应答后,立刻通知从机端CPU检查应答信号:①若从机端CPU获得的应答信号为“认可”,且发送遍数计数器为1,则将发送寄存器中的当前数据再次发送,并将发送遍数计数器清零;②若从机端CPU获得的应答信号为“认可”,且发送遍数计数器为0,则从解码结果存储区取出下一个数据写入发送寄存器,引发IIC传送,并将发送数据计数器加1,发送遍数计数器加1;③若从机端CPU获得的应答信号为“不认可”,则将发送寄存器中的当前数据再次发送,并将发送遍数计数器加1.
步骤9 交替执行步骤7和8,直至收发双方的数据计数器都达到阈值(144).此时,发送端送出附加数据6EH,接收端收到附加数据后,主机立刻给出通信结束命令,并将通信状况寄存器修改为成功码00H,返回通信准备程序.如果接收端收到的数据不是6EH,则说明数据线有故障,将通信状况寄存器修改为数据故障码11H,放弃收到的全部数据,返回通信准备程序.
步骤10 接收端程序返回通信准备程序后,通信准备程序立刻返回监控系统:①监控系统检查通信状况寄存器的内容,若为00H则结束本次通信;②若通信状况寄存器的内容非00H,且重启计数器未达到阈值(3次),则将重启计数器加1,然后调用通信准备程序来再次启动传输过程,其入口参数仍为本次通信的发送端解码器编号;③若通信状况寄存器的内容非00H,且重启计数器达到阈值(3次),则发出系统故障警示,并停止三值光学处理器的运行.
根据第2节中的系统设计要点(2)和(5),结合IIC通信协议[15]的规定,本通信子系统的数据格式和时序如图3所示.本通信子系统每次要传送144字节的数据,每个数据都连续传送2次,第144个字节数据后又附加了数据6EH,故正常通信时每次要传送289个字节,且每发生一次校验错误就会多传送2个字节.在每个字节数据的第1遍传送后,接收端总是给出“认可”应答(A,低电平),但是在每个字节数据的第2遍传送后,接收端先将两次收到的值进行对比,若相同就给出“认可”应答,并保存该数据,若不同,就给出“不认可”应答(A,高电平),并放弃收到的字节数据.发送端在送完一个字节数据后就检查接收端给出的应答信号,若应答为“认可”,则发送当前字节数据的第2遍或下一个字节数据的第1遍,若应答为“不认可”,则再次发送当前数据的第1遍.当发送完附加数据后,发送端放弃SDA线,主机发出通信结束命令.
图3 数据格式和时序Fig.3 Data format and timing sequence
显然,接收端CPU要在时钟线SCL为低电平的半个周期内完成对收到数据的校验和赋值IIC部件的应答寄存器,以便在其后标示为9的时钟线高电平之前形成应答信号.IIC允许接收端处理器将SCL拉低来获得足够的计算用时.本系统接收端CPU的主频为400 MHz,而IIC通信采用的时钟频率为100 kHz,即在SCL为低电平的半个周期中,接收端CPU可以执行约20万条指令.这足以完成字节数据校验和给应答寄存器赋值,因此在图3中标示为9的时钟前没有将SCL拉低的时序.同理,发送端在SCL的半个周期中也足以完成对应答信号的解读、确定要发送的数据、将数据送到发送缓存区和启动发送,因此在图3中标示为1的时钟前也没有将SCL拉低来获取额外时间的时序.
本研究设计的SD11解码器通信子系统软件部分可分为5个逻辑模块:通信准备程序、接收端程序、发送端程序、监控程序中的相关部分和解码器程序中的相关部分,其中监控程序的相关部分完成设立接收缓存区、调用通信准备程序、设立重启计数器、修改重启计数器、解读通信准备程序的返回参数等任务.这些工作本身比较简单,但都与监控系统的其他工作密切相关,在此不作详细论述.与此类似,解码器程序中的相关部分主要是设立解码结果存储区,而这也是解码软件的主要任务之一,在此也不作详细论述.剩余的3个模块是本通信子系统软件的主体程序,其流程图分别如图4~6所示.
图4 通信准备程序流程Fig.4 Preparing program diagram of the communication
通信准备程序向上与监控程序对接,接受监控程序的调用并汇报通信状况;向下为通信双方准备条件并启动接收端程序和发送端程序.通信准备程序的重要作用在于对监控系统遮蔽通信过程的细节,从而使通信系统的更新,甚至通信技术的更换都不再影响监控程序.
发送端程序的第一个有效操作是“保护现场”,最后两个有效操作是“恢复现场”和“中断返回”(见图6).这源于发送端程序被设计为中断服务程序,对它的调用是随机发生的,CPU不可能及时整理好现场.接收端程序中没有“保护现场”和“恢复现场”操作(见图5),因为接收端程序被设计为子程序,在通信准备程序适时调用它之前就已整理好了CPU的现场.
本研究对所设计完成的通信子系统在SD11上进行了详细测试,包括通信实验、重发实验和重启实验,其实验规划、实验过程和实验结果如下.
(1)发送数据设置.本通信子系统发送的数据是SD11各解码器输出的数据.这些数据由解码器程序放置在各自名为JMSJ[144]的字节型数组变量中,因此在本实验使用的解码器替代程序中也设置了JMSJ[144]的字节型数组变量,并通过给JMSJ[144]写入值来更新测试用例.实验用例来自两种方法:一是由选择数据组成的测试例,称为A类用例,用于对临界数值和特别数值进行测试,如00H,FFH,10H,6EH,7FH和E6H等;二是在随机函数给出的1 000个值中再随机抽取数据组成的测试例,称为B类用例.
图5 接收端程序流程Fig.5 Program diagram of the reciever
(2)第2遍发送数据设置.由于系统出现数据传送错误的概率很低,在有限的实验时间内,几乎没有发生这种错误的机会,因此必须人为制造“数据传送错误”来验证数据检验和出错重发机制的可靠性.在相应的实验中给真实程序临时增加两部分内容:一是在解码器替代程序中设置一个DRC[200]字节数组变量;二是在“遍数计数器=0”的分支开始位置增加从DRC[200]中取一个元素放入发送寄存器,并将DRC[200]的下标指针加1的指令.于是,通过给DRC[200]和JMSJ[144]对应单元写入相同值或不同值,可以制作“数据传送错误”的实验用例.若DRC[j]到DRC[j+4]的值都和JMSJ[j]不同,就人为制造了“重发计数器=5”的错误状况.仔细安排DRC[200]和JMSJ[144]的值,可以分别测试重发机制和重启机制的有效性,以及重启次数达到阈值时系统停机并且给出警示的能力.用1组A类用例和5组B类用例进行了此测试.
图6 发送端程序流程Fig.6 Program diagram of the sender
(3)接收端收到数据记录.接收端收到的数据都存放在名为SDSJ1[144]或SDSJ2[144]的字节型数组变量中,因此在本实验使用的监控替代程序中也设置了SDSJ1[144]和SDSJ2[144]字节型数组变量,以此来测试调用通信准备程序和调用接收端程序时传送入口参数的正确性,以及是否正确地存储了已接收到的数据,为分析整个软件的运行过程提供依据.
(4)发送端收到应答信号记录.真实程序中发送端不记录收到的应答信号,但为了分析发送端和接收端的配合情况,必须在实验中记录发送端收到的所有应答信号,并将它们与DRC[200],JMSJ[144],SDSJ1[144]和SDSJ2[144]的数据对照,就可完整分析通信过程.于是在发送端程序中设置数组变量FSDSDYD[400],并在“等待应答操作”的最后,临时增加将应答信号存入FSDSDYD[400],并将下标指针加1的指令.
(5)接收端发送应答信号记录.与实验规划(4)同理,在接收端程序中设置数组变量JSDFSYD[400],并在“发送‘认可’应答信号”和“发送‘不认可’应答信号”之后,临时增加将应答信号存入JSDFSYD[400],并将下标指针加1的指令.
值得注意的是,给真实程序增加的所有临时指令都在实验完成后删除.
(6)设置发送端的解码器替代程序.该替代程序有两个作用:一是模拟解码器程序对发送程序的调用过程;二是为测试实验设置附加变量和显示这些变量的值,以便分析程序的运行结果和运行过程.由于发送端程序被设计成外部中断服务程序,故该替代程序包含3个主要操作(见图7):第一是设置变量,其中有真实程序必需的解码结果存储区数组变量JMSJ[144],还有为测试实验服务的临时数组变量DRC[200]和FSDSDYD[400],另外还要设置初值为0的中断服务程序退出标识ZDFH,并在图6所示的发送端程序的“中断返回”指令之前将ZDFH标识设为1;第二是等待外部中断发生,以进入发送端程序,实现方法是查询ZDFH标识是否为0,若为0则继续查询,若为1则退出查询,进入下一操作;第三是显示变量JMSJ[144],DRC[200]和FSDSDYD[400].
图7 解码器替代程序流程Fig.7 Replacement program of the decoders
(7)设置接收端监控替代程序.该替代程序有三个作用:一是模拟监控程序对通信准备程序的调用过程;二是验证重启机制的有效性;三是为测试实验设置附加变量和显示这些变量的值(见图8).
图8 监控替代程序流程Fig.8 Replacement program of the monitor
该程序有4个主要操作:第一是设置变量SDSJ1[144],SDSJ2[144],JSDFSYD[400]和重启计数器CQJSQ=0;第二是调用通信准备程序,入口参数为解码器编号和SDSJ1[144]或SDSJ2[144];第三是待通信准备程序返回后,检查出口参数并决定是否重启;第四是显示通信准备程序出口参数,SDSJ1[144],SDSJ2[144],CQJSQ和JSDFSYD[400].
(1)正常通信实验.
实验目的:验证系统的有效性.
实验过程:不改动通信准备程序、接收端程序和发送端程序,在监控替代程序和解码器替代程序环境下,用3组A类用例和20组B类用例进行实验.
(2)重发机制应对瞬态错误实验.
实验目的:验证数据校验策略有效性和容忍链路瞬态错误的能力.
实验过程:完成正常通信实验后,在发送端程序的“遍数计数器=0?”为“是”的判断后增加将DRC[j]的值赋给发送寄存器,并将下标指针加1的指令;在“等待应答信号”的最后增加将应答信号存入FSDSDYD[k],并将下标指针加1的指令.在接收端程序的“认可”应答和“不认可”应答之后增加将应答信号存入JSDFSYD[k],并将下标指针加1的指令.
本研究任选了1组A类用例和5组B类用例进行实验.通过给DRC[200]各元素的赋值来验证重发机制的有效性.表1为一个对DRC[200]赋值的例子.可见,表中数据在JMSJ[6]进行了1次重发测试,在JMSJ[10]进行了2次重发测试,在JMSJ[18]进行了3次重发测试,在JMSJ[28]进行了4次重发测试,并把这种重发测试在JMSJ[31]∼JMSJ[61],JMSJ[62]∼JMSJ[92]和JMSJ[93]∼JMSJ[123]区段分别重复了一次.
表1 DRC[200]赋值示例Table 1 Examples of DRC[200]assignment
(3)重发超次,程序退出实验.
实验目的:验证重发次数达到阈值时,系统的自动退出能力.
实验过程:完成重发机制应对瞬态错误实验后,将表1中的DRC[176]∼DRC[181]这6个元素设置为与JMSJ[140]不同,DRC[182]∼DRC[185]设置为与JMSJ[140]∼JMSJ[143]相同,DRC[200]的其他元素不变.
(4)数据线故障,程序退出实验.
实验目的:验证发生数据线故障时,系统重启策略的有效性.
实验过程:以正常通信实验为基础,仅将附加数据改为00H,重复正常通信实验.
(5)无从机设备应答故障,程序退出实验.
实验目的:验证系统应对无从机设备应答故障和警示的能力.
实验过程:以正常通信实验为基础,仅将从机的地址寄存器设定为某个无效地址.重复正常通信实验.
实验开始前将各次实验的目的、输入数据和预测结果汇总在“实验记录表”(见表2)中.
表2 实验记录表Table 2 Experimental record
每次实验后将得到的实际结果与“结果预测”对比,二者完全相同时在“结果认可”栏中打“√”,二者有差异时不填写“结果认可”栏,而是在“结果差异”栏中描述差异.全部实验完成后,分析实验结果出现差异的原因,改进程序和实验过程,重新实验.当所有实验的结果都与预测结果一致后,再重复全部实验两次,以保证实验的可再现性.实验的最终结果表明,本研究设计的通信子系统能满足TOC整机系统SD11的要求,具有良好的可靠性和克服瞬态故障的能力.
本研究设计完成了千位三值光学计算机SD11解码器的一款通信子系统.本系统采用重复发送字节数据两次的技术进行数据检错;采用数据传送自动重发5次的策略来容忍通信系统本身的偶发性瞬态错误;采用通信系统自动重启3次的策略来容忍周边部件的偶发性瞬态错误;采用在传送数据最后附加传送6EH值的策略来判定是否发生数据线接地、或接电源、或接时钟错误;采用通信状态寄存器来收集通信故障的类型,并在意外发生永久性故障时通知监控系统及时停机,以免引发连锁错误,同时用这个寄存器给出故障类型,以便于维护;采用在接收端建立数据缓存区的策略来应付与多种不同性质部件的通信问题;采用对发送端处理器进行外部中断的方式来实现发送端与接收端的通信准备同步,并将这些策略结合IIC通信技术,实现了符合SD11解码器需要的通信子系统.同时通过对所设计的通信系统的实验测试,验证了上述各项策略的有效性以及本通信子系统的实用性.下一步工作将详细收集本通信子系统在SD11运行中的实际表现,然后对其进行针对性维护,最后将这个系统的软件固定成一个可以被方便移植到TOC系统其他机型中的解码器通信模块.
致谢 徐凌宇教授给予本研究许多支持,在此表示感谢!