三模冗余技术在ASIC设计中的应用及实现

0 引言

航天器在空间中飞行时,一直处在带电粒子构成的辐射环境中。在这种辐射环境中微处理器可能会因为单粒子扰动而中断正常功能从而导致灾难性事故。这主要涉及到2方面的问题,辐射总剂量效应和单粒子效应的问题,单粒子效应又分为单粒子翻转(SEU)和单粒子闭锁(SEL)2个方面。单粒子翻转效应能够导致数字电路的存储单元中的某一位因受到干扰而发生翻转,从而引起存储内容的变化,还可在组合逻辑电路的输出上引入一个短暂的脉冲,单粒子翻转效应是目前导致处理器运行失效的主要原因。星载计算机系统中处理器性能的稳定与可靠在整个系统的稳定与可靠性中占有重要地位,因此必须对电路进行加固,三模冗余技术是一种对单粒子翻转有效的容错技术,能够极大地提高电路的可靠性。

1 三模冗余介绍

三模冗余(TMR)技术是一种时序电路加固技术,其基本思想是对于待加固模块生成2个相同的模块,再通过多数表决输出,这样即使有一个模块发生故障电路依然可以正常工作。三模冗余在结构上又有空间冗余和时间冗余之分,时间冗余就是3路时钟信号之间存在一定延迟,延迟值应大于SEU翻转的最大脉宽。时间冗余的作用是对于时序电路的输入毛刺,最多只有一路时钟会采样到错误值,因此可以有效地防止组合逻辑毛刺所带来的错误。图1是采用普通时空三模冗余加固的触发器的电路图(以后简称TMR触发器),其中VOTER为多数表决器的组合电路。

虽然三模冗余技术可以极大地提高系统的可靠性,但是代价也是巨大的。由TMR的基本结构不难看出采用TMR技术的2个缺点:首先由于进行了硬件冗余导致芯片面积增大到原来的3倍多;其次由于三路时钟信号之间的延迟和在输出端加入了表决电路,在关键路径上引入了额外的延时,导致电路的运行速度下降。
如果设计中2个触发器之间的关键路径延迟太短(比如移位寄存器),图1的三模冗余电路结构在运行中可能会出现电路输出不定态和电路状态错误的问题,图2是一个采用三模冗余加固的4位移位寄存器的电路图,图中的TMR_DFF模块的电路如图2所示。

图3为三模冗余加固后的寄存器的顶层模块的仿真波形图,图中标线处电路的状态出现了错误(由输入d可以看出正确的状态应该是在第3个时钟上升沿后输出才变为7),其原因是由于TMR_DFF是组合逻辑输出,在第1个上升沿的时候,reg0的输入D经clk,clk_skew[1]采样后,out[0]变为1,reg1的输入out[0]经clk_skew[0]采样后,其q2(图1电路中的信号)变为1,电路状态仍为1,在第二个上升沿来的时候,由于reg1的q2已经为1,所以reg2的输入out1经clk采样后,其q0变为1,多数表决后out1变为1,电路状态为3,reg2的输入out1经clk_skew[1],clk_skew[0]采样后,其q1,q2变高,输出out2变高,电路状态变为7,就出现了状态出错的状况。

如果减小时钟间的延迟,电路可能会出现不定态,原因也是由于组合逻辑的提前输出,这里就不再讨论了。

2 三模冗余的实现

2.1 修改网表二次综合

DC综合的功能是读取设计的RTL代码并且根据时序约束,综合RTL代码到结构级,从而产生一个映射后的门级网表,其中一个重要的步骤是指定综合所使用的综合库,综合库一般由流片厂商提供,库中包含了引脚到引脚的时序,面积,引脚类型和功耗等信息,综合后的门级网表中的单元也就是库中所定义的单元。

三模冗余的加固过程实际上就是为设计中的每个触发器生成2个冗余触发器并加上表决逻辑,而RTL代码中无法反应出这点,因此可以对原设计综合后的门级网表进行修改,把触发器改为三模冗余触发器,用门级描述编写三模冗余触发器模块,然后和修改的网表一起再次综合就可得到三模冗余加固后的网表文件。值得说明的是DC综合库里面有多种类型的触发器,比如SDFF,EDFF,SEDFF,JK,DFF,即使在综合脚本中限定只用DFF触发器,也会有好几种,所以对于不同的单元要编写相应的三模冗余触发器模块(其结构如图1所示)。此外由于有3路时钟信号,所以要编写时钟生成模块,其功能是由clk产生互有延迟的2路时钟信号。

首先在Synopsys的综合工具DsignCompiler下对原设计的RTL代码进行综合,得到电路的门级网表。门级网表中的电路实际上就是通过例化综合库的单元来描述电路的结构,可以使用形式验证工具Formality来验证RTL代码和综合后的门级网表在功能上是否一致。

然后修改门级网表,在网表中增加线网类型ck[2:0],并且实例化clkgen模块,再把网表里面的触发器改为三模冗余触发器,并修改其时钟端口为{clk,ck[1:0]},由于综合库中不含有这两个模块,这时网表中就出现了两个综合工具没有处理的模块,时钟生成模块和三模冗余触发器模块,修改后的网表就不是完全映射后的门级网表。

最后对修改后的网表,时钟生成模块及三模冗余触发器模块进行再次综合,这次综合实际上就是对时钟生成模块和三模冗余触发器的综合,把它们映射为综合库中的单元,得到的门级网表即是三模冗余加固后设计的门级网表。

2.2 建立三模冗余触发器的库单元

由于三模冗余触发器单元的时钟端口有3位,即使在库中加入三模冗余触发器的单元,综合器也无法把设计直接映射成该单元,因此可以把时钟生成模块放到TMR_DFF内部,这样三模冗余触发器时钟端口就只有1位,在库文件中把触发器单元用对应的三模冗余触发器单元替换掉,DC就可以把电路中的触发器直接映射成TMR_DFF,一次综合就可以完成设计了,但是这样一来整个芯片的面积又会增大很多(时钟生成模块不在共用),除此之外也可以借助上面的方法在原设计综合后修改网表。前面已经提到库文件里面有很多种类型的触发器,所以应对不同的DFF触发器建立相应的库单元,下面是一种建立库单元的方法,主要分为2步:版图设计和仿真特性提取。

单元库的建立首先要完成单元的版图设计,在确定单元库所包含的单元种类和单元电路后,根据加工厂家的工艺参数,设计规则等完成单元的版图设计,并导出电路网表,此时网表中不仅有电路结构,还有电阻,电容参数。然后就可以进行单元的参数提取工作。

参数提取需要选择一种用于参数提取的工具,这里选择siliconsmart,其次要确定模拟仿真工具,如HSpice。主要步骤包括创建工作目录配置仿真环境,引入参考库,产生仿真文件,运行仿真特性提取,生成库文件。
创建工作目录是指创建一个用于siliconsmart运行的目录,此时会自动生成一个名为config.tcl的脚本文件,需要手动对其进行一些关键配置,主要包括模拟工具的选择(这里选择HSpice),模拟模型的指定,环境温度等变量的设置等。引入参考库是为工具指定一个参考的库单元,工具将参考单元的信息摘取出来,并为该单元生成一个控制文件,该文件详细描述了需要提取的单元的信息。包括单元网表文件,管脚信息,逻辑功能,输入信号的上升/下降时间,输出管脚负载情况等。如果没有参考的库文件,则需要手动编写该文件。产生仿真文件是告诉工具对单元的哪些方面进行特性提取,比如时序,功耗,CCS模型等。运行仿真提取是对单元进行模拟仿真特性提取工作。生成库文件会产生2个库单元,其中.v是仿真工具用的仿真库,.lib是可读的综合库,可以在DC中用read_lib *.lib命令读入.lib文件,然后用write_ lib* *.db命令可以生成.db综合库(*代表库单元的名字)。

对于抗辐射加固来说,除了用电路加固外可能还需要选择更加可靠的工艺,SOI工艺就具有很好的抗辐射性能,它消除了闩锁效应,有效地降低了单粒子效应,而此时就需要建立自己的单元库了,库中的触发器单元就可以直接建成三模冗余触发器的库单元。

3 结语

航天系统中芯片的抗辐射能力是一个重要的指标,对于抗辐射的处理器和存储器来说,辐照实验是测试中的一个重要环节。三模冗余加固技术只是众多抗辐照加固技术的一种,比较常用的还有检错纠错码EDAC,SOI工艺加固,其中采用SOI工艺流片的费用比普通工艺更为昂贵。标准单元库的建立对ASIC设计来说是一项基础性的工作,建立符合设计需要的标准单元库对芯片设计来说是很重要的,对此文章提供了一种一般性的方法。