一种可配置寄存器文件自测试方法及生成装置与流程

文档序号:14481249阅读:257来源:国知局

本发明主要涉及到集成电路的寄存器文件自测试技术领域,特指一种可配置寄存器文件自测试方法及生成装置,可以适用于异步读操作的寄存器文件自测试。



背景技术:

在cpu或dsp等大多数控制及运算芯片中,寄存器文件作为一个核心部件,频繁参与操作数的缓存与提取。其制造质量的高低,直接影响芯片运行速度的快慢。因此,当前大多数中高端cpu或dsp开发商,均采用全定制方案设计适宜于各自cpu或dsp体系结构的寄存器文件,从而造成了当前商业化工具无法针对不同类型的寄存器文件测试提出一套通用高效的测试方案。传统的高端寄存器文件需要花费大量的人力全定制一个适合该寄存器文件特定结构的自测试电路来筛选流片后不合格的产品。另一种方法把寄存器文件当做一个硬宏,利用寄存器周围系统逻辑中的时序单元,对寄存器文件进行测试激励的施加与测试响应的捕获,也可以达到测试寄存器文件的目的。该方法通常被称为macrotest(宏测试)。采用宏测试方法对寄存器文件进行测试的电路结构如图2所示。通过将系统逻辑中的扫描触发器串成一条扫描链,可以从外部扫描输入端口直接向各扫描触发器进行测试激励的扫入。扫入的测试激励(也称作扫描测试图案),通过系统输入逻辑作用于寄存器文件。在寄存器端口处形成的测试向量叫做宏测试向量。该宏测试向量对寄存器文件进行预期的写操作或读操作,在下一时钟周期,同样利用扫描链,将寄存器文件置于读操作模式,此刻在寄存器文件数据读出端口处的数据也属于上一个宏测试向量。该数据经过系统输出逻辑在下一个时钟周期被扫描触发器所捕获到,从而可以通过扫描链从扫描输出端口将捕获响应输出芯片用于与期望值进行比较。该捕获响应同样也属于上一个扫描测试图案。

如图3所示为运用宏测试方法对寄存器文件进行测试的流程图。

1、应在包含有寄存器文件的顶层网表文件macro_top.v中查看各触发器是否已经被串链,如果没有,则执行串链操作。

2、查看寄存器文件的时钟,读写使能等控制信号是否能免受扫描链的影响而独立控制。如果不能,则在对应端口处添加二选一选择器,并提供独立的控制信号于二选一选择器的数据0端。而二选一选择器的选择端接扫描使能信号(se)。

3、利用宏测试法测试寄存器文件时,应有定义其各输入输出端口处的宏测试向量文件macropattern.v,寄存器文件的宏模型文件macro.lib。将以上两个文件与经过1、2步修改过后得到的顶层网表文件top.v一起输入macrotestatpg引擎。

4、如果成功生成扫描测试图案,则进入仿真验证阶段。否则,说明指定的宏测试向量经过向系统输入逻辑回溯,得到对某一扫描单元矛盾冲突的赋值。因此无法通过扫描测试图案生成该宏测试向量,需将该宏测试向量剔除。

5、将生成的扫描测试图案施加到top.v上,进行功能验证。如果成功,则说明该宏测试向量测试成功。否则,可能(1)顶层网表文件修改不彻底,仍有无法独立于扫描测试图案的控制信号存在。需要检查并修改网表文件。(2)寄存器文件的宏模型文件macro.lib设计有误。需要检查并修改寄存器文件的宏模型macro.lib。

由上可知,将传统的宏测试方法应用于寄存器文件测试,存在以下缺点:

1、测试向量的产生依赖于最终的顶层网表文件,无法脱离于寄存器文件的应用环境而对其产生测试向量。一旦其周围的系统逻辑有变,则必须重新产生测试激励。

2、需要为寄存器文件的时钟,读写使能等控制信号提供独立的控制路径。

3、需要自己编写宏测试向量以及寄存器文件的宏模型。如果自定义的宏测试向量因为系统输入逻辑的相关性而无法成功产生,将加大测试迭代次数。

4、如果想运用某一特定的算法,对寄存器文件进行完整的测试,编写宏测试向量将具有非常庞大的工作量。而且,由于系统逻辑的相关性,指定的宏测试向量未必能成功转化为扫描测试图案,因此将减少寄存器文件的故障覆盖率。

该方法要求在扫描系统逻辑中时序单元时,扫描单元的输出不能改变寄存器文件的读写状态。并且,串行扫入与扫出一组测试向量的时间开销较大。再者,该测试方法中测试向量赋值的成功与否还取决于寄存器文件周围系统逻辑的拓扑相关性,因此,故障覆盖率较低,测试时间较大,测试功耗较大。



技术实现要素:

本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、面积小、功耗低的可配置寄存器文件自测试方法及生成装置。

为解决上述技术问题,本发明采用以下技术方案:

一种可配置寄存器文件自测试方法,其步骤为:

s1.设置寄存器文件的参数;

s2.生成对应的自测试逻辑;

s3.将自测试逻辑与寄存器文件进行连接,并生成验证仿真环境。

作为本发明方法的进一步改进:所述步骤s1的参数包括:测试时钟周期以及寄存器时钟端口名、写端口数、写端口名、读端口数,读端口名、数据位宽、数据端口名、地址位宽、地址端口名、有无读时钟、有无写时钟、有无读使能、有无写使能、有无芯片使能、完成一个读操作所需的时钟周期、完成一个写操作所需的时钟周期。

作为本发明方法的进一步改进:所述步骤s2中生成寄存器自测试所需的自测试控制器,包含:

s2.1自测试算法控制器;

s2.2地址生成器、数据生成器;

s2.3比较器。

作为本发明方法的进一步改进:所述步骤s2.1自测试算法控制器采用存储器自测试的marchc+算法,并对该算法中的读操作拓展到所有读端口,其具体实施步骤如图5所示;其中每一行称作一个marchstep,每一行的up或down指明该marchstep的方向,也即操作地址是在递增还是递减。

作为本发明方法的进一步改进:所述步骤s2.2地址生成器由一个受控双向计数器构成,其加减模式选择信号,加减使能信号由算法控制器中的地址控制模块提供;所述数据生成器为一个二选一选择器。

作为本发明方法的进一步改进:所述比较器对每一数据端口内部两两逐级进行与操作和或操作,然后再将与结果和或结果的非通过一个二选一选择器得到指示该端口比较值与参考值是否一致的比较结果。

作为本发明方法的进一步改进:所述步骤s3的具体步骤包括:

s3.1为寄存器文件的所有输入,输出端口添加测试路径,寄存器文件能够在自测试模式时,得到算法要求的激励,并将响应反馈回测试逻辑;

s3.2将步骤s2生成的自测试逻辑与寄存器文件以及为其提供测试数据路径的电路单元连接并整合起来,形成一个完整的寄存器文件_测试块;

s3.3自动生成用于验证自测试逻辑功能正确性的测试激励文件以及仿真环境。

本发明进一步公开了一种可配置寄存器文件自测试生成装置,其包括:

寄存器文件参数输入模块,用于输入并记录将要测试的寄存器文件的各种参数;

自测试逻辑生成模块,用于根据寄存器文件参数输入模块中记录下的寄存器文件参数,自动生成满足本发明测试算法要求的自测试控制器verilog代码;

连线仿真模块,用于自动为生成的自测试控制器与寄存器文件连线,整合成宏观上更高层次的寄存器_测试模块的verilog代码,并对该模块自动生成测试激励文件并搭建验证仿真环境。

作为本发明装置的进一步改进:所述自测试逻辑生成模块生成的模块包括:

自测试算法控制器模块,用于控制整个寄存器文件自测试的读写操作;

自测试地址生成器模块,用于在自测试算法控制器的控制之下,产生满足算法要求的测试地址序列。

自测试数据生成器模块,用于在自测试算法控制器的控制之下,产生满足算法要求的测试数据序列;

自测试比较器模块,用于将从寄存器文件中读取出来的数据与算法要求中的期望值作对比。

作为本发明装置的进一步改进:所述连线仿真模块用于将自测试模式与正常工作模式融合于被测试寄存器文件,从而构建起一个寄存器文件_测试块,同时生成验证自测试逻辑功能正确性的测试激励文件与验证环境;该连线仿真模块包括:

寄存器文件包裹模块,用于为寄存器文件添加测试路径;

寄存器文件_测试块模块,用于连接整合自测试逻辑与寄存器文件,对外形成一个更高层次的具有自测试功能的寄存器文件块;

测试激励与验证环境模块,用于测试最终形成的regfile_test_block模块的功能正确性。

与现有技术相比,本发明的优点在于:

1、本发明通过采用类似于存储器自测试的方法对寄存器文件进行测试,可以进行某一特定算法的完全测试,而不会发生传统宏测试方法那种因系统逻辑的相关性而无法生成对应扫描测试图案的情况。

2、本发明通过扩展传统marchc+算法,将传统marchc+算法中对某一特定端口的读操作扩展到所有读端口同时对某一地址进行读操作,这样可以测试多端口同时对同一地址进行读取操作是否会产生数据破坏,也可以测试多个端口同时进行读操作时是否会相互影响。

3、本发明通过精心调控状态转移条件与有效比较时间点,使得生成的自测试逻辑能够支持当前大多数商业化工具并不支持的异步读操作。

4、本发明通过改进自测试逻辑中的比较器,在不损失任何比较效果的前提下,可以节省面积。而且随着读端口数目,数据位宽的增大,节省效果更加明显。

5、本发明通过编写自测试逻辑代码生成器,使得自测试逻辑、模块之间的连接与组装、最终模块的验证与仿真都可以一体化实现,从而避免了宏测试方法中反复迭代,手动编写寄存器文件模型,宏测试向量等纷繁琐碎的工作。

6、本发明的方法及装置,具有实现方法简单、面积小、功耗低等优点,针对异步读操作的寄存器文件同样有效。

附图说明

图1是本发明可配置寄存器文件自测试方法的流程示意图。

图2是运用宏测试方法对寄存器文件进行测试的电路结构图。

图3是运用宏测试方法对寄存器文件进行测试的流程图。

图4是本发明在具体实施例中寄存器文件自测试总体电路结构示意图。

图5是传统存储器自测试march2算法执行步骤图。

图6是本发明在具体实施例中寄存器文件自测试一个数据端口比较器的电路结构示意图。

图7是本发明在具体实施例中寄存器文件自测试多个数据端口比较器的电路结构示意图。

图8是本发明在具体实施例中自测试逻辑生成之后电路模块示意图。

图9是本发明在具体实施例中寄存器文件自测试算法状态机转换图。

图10是本发明在具体实施例中寄存器文件自测试控制器结构示意图。

图11是本发明在具体实施例中寄存器文件自测试一个数据端口改进比较器的电路结构示意图。

具体实施方式

以下将结合说明书附图和具体实施例对本发明做进一步详细说明。

如图1所示,本发明的一种可配置寄存器文件自测试方法,其步骤为:

s1.设置寄存器文件的参数;

s2.生成对应的自测试逻辑;

s3.将自测试逻辑与寄存器文件进行连接,并生成验证仿真环境。

在具体应用实例中,上述步骤s1的具体步骤包括:设置寄存器文件的参数包括:测试时钟周期以及寄存器时钟端口名(包括写端口时钟,读端口时钟(若有))、写端口数、写端口名、读端口数,读端口名、数据位宽、数据端口名、地址位宽、地址端口名、有无读时钟(若有,指定相应时钟端口名)、有无写时钟(若有,指定相应时钟端口名)、有无读使能(若有,指定相应读使能端口名)、有无写使能(若有,指定相应写使能端口名)、有无芯片使能(若有,指定相应芯片使能端口名)、完成一个读操作所需的时钟周期(若为异步读操作,则将该参数置0)、完成一个写操作所需的时钟周期(只支持同步写操作,也即写操作至少需要1个周期)。

在具体应用实例中,上述步骤s2的具体步骤包括:生成寄存器自测试所需的自测试控制器(包含s2.1自测试算法控制器、s2.2地址生成器、数据生成器、s2.3比较器),其在整个寄存器文件自测试结构中所处的位置如图4所示。

在具体应用实例中,上述步骤s2.1自测试算法控制器主要采用存储器自测试的marchc+算法。该算法具体实施步骤如图5所示。其中每一行称作一个marchstep,每一行的up或down指明该marchstep的方向,也即操作地址是在递增还是递减。该算法中的读或写操作,都是对于存储器的某一特定端口而言。比如在测试时,以端口a进行写,以端口b进行读。但针对寄存器文件的结构特点,因为其允许多个端口同时对同一地址进行读操作,因此在扩展的marchc+寄存器自测试算法中,每一个marchstep中的写操作,都只由某一个端口执行,而每一个marchstep中的读操作,则由该寄存器文件的所有读端口同时执行。如此,可以检测到多个读端口同时对某一特定地址进行读操作时,是否会破坏原始数据。也可以检测各个读端口之间是否存在相互影响的故障。

在具体应用实例中,上述步骤s2.2地址生成器由一个受控双向计数器构成,其加减模式选择信号,加减使能信号由算法控制器中的地址控制模块提供。之所以采用简单的加/减1计数器,主要是考虑到单个寄存器文件的地址数目一般不超过128,不像常规存储器那样地址数目动辄上千甚至上万。因此采用lfsr或者其他复杂类型的计数器得不偿失。

在具体应用实例中,上述数据生成器,只需一个二选一选择器。二选一的0数据端接固定逻辑0,1数据端接固定逻辑1。其数据选择信号来源于算法控制器的状态机。之所以仅用简单的全0与全1作为测试数据,而不采用交叉耦合的checkboard(检查板)数据背景,是出于对算法控制器复杂性与面积的考虑。

在具体应用实例中,上述步骤s2.3中的比较器并不像传统的比较器那样,对比较值与参考值的每一位都进行异或操作。根据上述数据生成器只生成全0或者全1的测试数据的算法特点,设计如图6所示的比较器。该比较器对每一数据端口内部两两逐级进行与(and)操作和或(or)操作。然后再将与(and)结果和或(or)结果的非通过一个二选一选择器得到指示该端口比较值与参考值是否一致的比较结果(bit_success)。该结构与传统比较器相比,针对本算法的数据特点而言,既不损失任何比较效果,还可节省面积。

对于多端口,高位宽的寄存器文件的数据比较而言,面积节省更为可观,其具体实现如图7所示。由于上述步骤$2.1中的扩展marchc+测试算法总是要求每个读端口同时针对同一地址进行读操作,因此,如果每个端口数据都正确,则最终其每个端口读出的数据必定一样,且与测试数据背景信号(databack)相等。故可1)先在每一个读端口内部两两逐级进行与(and)操作和或(or)操作,然后2)再将个每个端口得出的与(and)结果和或(or)结果两两逐级进行与(and)操作和或(or)操作。最后3)再按照单端口的处理方式一样,让2)所得出的与(and)结果和或(or)结果的非通过一个二选一选择器得到指示该端口比较值与参考值是否一致的比较结果(bit_success)。

在具体应用实例中,上述步骤s3的具体步骤包括:s3.1为寄存器文件的所有输入,输出端口添加测试路径,也即使是寄存器文件能够在自测试模式时,得到算法要求的激励,并将响应反馈回测试逻辑。s3.2将s2生成的自测试逻辑与寄存器文件以及为其提供测试数据路径的电路单元连接并整合起来,形成一个完整的寄存器文件_测试块(regfile_test_block),如图8所示。s3.3自动生成用于验证自测试逻辑功能正确性的测试激励文件以及仿真环境,从而确保最终寄存器文件自测试逻辑插入的正确性。

上述步骤s3.1为寄存器文件添加测试数据路径的步骤主要是为s1指定的输入端口添加二选一选择器,选择器的数据0端接系统逻辑,选择器的数据1端接对应的测试逻辑,而选择器的选择信号接自测试模式信号。

上述步骤s3.2连接整合自测试逻辑与寄存器文件的具体步骤包括:

s3.2.1将寄存器文件与s3.1所添加二选一选择器按照对应的端口顺序连接起来,形成具有双重数据路径的寄存器_包裹(reg_wrapper)

s3.2.2出于低功耗的考虑,从指定工艺库中挑选出一个合适的门控开关,从而实现在正常功能时,自测试逻辑的时钟关闭。而在实现自测试模式时,系统时钟允许通过门控单元,从而使自测试逻辑获得与寄存器文件正常工作时的同频同相时钟。

s3.2.3将s3.2.1形成的reg_wrapper、s3.2.2添加的门控以及s2生成的自测试控制器连接整合在一起,并形成一个完整的寄存器文件_测试块(regfile_test_block)。然后自动生成测试激励文件,对该模块进行最终的功能验证。

参见图4,本发明进一步提供一种可配置寄存器文件自测试生成装置,其包括:

寄存器文件参数输入模块,用于输入并记录将要测试的寄存器文件的各种参数;

自测试逻辑生成模块,根据寄存器文件参数输入模块中记录下的寄存器文件参数,自动生成满足本发明测试算法要求的自测试控制器verilog代码;

连线仿真模块,自动为生成的自测试控制器与寄存器文件连线,整合成宏观上更高层次的寄存器_测试模块的verilog代码,并对该模块自动生成测试激励文件并搭建验证仿真环境。

在具体应用实例中,上述寄存器文件参数输入模块的作用在于在命令脚本中添加各参数的开关选项,并为后续代码申请对应参数的全局变量,为后续自测试控制器verilog代码的生成提供模型依据。

在具体应用实例中,上述自测试逻辑生成模块生成的模块包括:

自测试算法控制器模块,用于控制整个寄存器文件自测试的读写操作;

该操作包括:

(1)自测试算法状态机模块:用于根据预定的扩展marchc+自测试算法决定测试过程中的状态跳转方向。

(2)自测试比较结果屏蔽模块:用于根据状态机的当前状态,决定比较结果的有效与否。

(3)自测试读写使能模块:用于根据状态机的当前状态,决定下一时刻寄存器文件的读写操作。

(4)自测试地址控制模块:用于根据状态机的当前状态,决定下一时刻寄存器文件地址的增减与否。

(5)自测试期望值产生模块:用于根据状态机的当前状态,决定本时刻比较器的参考值。

自测试地址生成器模块,用于在自测试算法控制器的控制之下,产生满足算法要求的测试地址序列。

自测试数据生成器模块,用于在自测试算法控制器的控制之下,产生满足算法要求的测试数据序列。

自测试比较器模块,用于将从寄存器文件中读取出来的数据与算法要求中的期望值作对比。

在上述操作(1)中,为了减小状态编码的面积开销以及防止状态跳转时发生毛刺,故采用格雷码编码。而对于每个marchstep,其内部可能只有一个操作,如marchstep1,只有write0。而marchstep2,有read0,write1,read1三个小操作。因此,在每一个状态内部,还需要设置一个计数器(称之为读写计数器),记录该状态内部的执行过程。

在上述操作(2)中,自测试比较结果屏蔽模块的存在主要是出于时序的考虑。由于寄存器文件的数据位宽一般有32位甚至更多,而比较器是组合逻辑。如果在比较值来临之前,追加过多的筛选逻辑,在高速寄存器文件自测试中,很容易违反后级触发器的建立时间要求。即使通过调整比较器驱动能力能够满足相应要求,也会增加不少的面积。因此采用先比较,最后再通过增加一级屏蔽逻辑对无效的比较结果进行屏蔽剔除,从而可以以较小面积的比较器较容易地满足较紧张的时序约束。

上述屏蔽条件包括除以下三个条件以外的所有状态:

i.状态机处于读操作且已读取完毕;

ii.状态机处于读写读操作且第一次读取完毕;

iii.状态机处于读写读操作且第二次读取完毕。

在上述操作(3)中,自测试读写使能模块中根据扩展marchc+算法,定义4个特殊状态。a、当前状态为读操作且已读完。b、当前状态为读写读操作且第二个读操作已完成。c、当前状态为写操作且已写完。d、当前状态为空闲操作且空闲时间已用完。将a、b、c划归于狭义工作状态,将a、b、c、d划归于为广义工作状态。

若寄存器文件有芯片使能,则芯片使能信号有效的条件包含:

i.状态机处于狭义工作状态且地址生成器正处于加减操作且未溢出(包含上溢出、下溢出)。

ii.状态机处于广义工作状态,且地址生成器未工作或刚好溢出(包含上溢出、下溢出)。

如果寄存器文件读操作是同步操作且面积的考虑权重大于功耗的权重,则可以通过配置使各端口的芯片使能一直有效。从而不必生成满足上述两个条件的控制逻辑。

若寄存器文件有写使能,则写使能信号有效的条件包含:

i.状态机当前处于写操作状态且地址生成器正处于加减操作且未溢出(包含上溢出、下溢

出)。

ii.状态机当前处于广义工作状态,且地址生成器未工作或刚好溢出(包含上溢出、下溢

出),且下一状态将要进行写操作。

iii.状态机当前处于读写读操作且第一个读操作已经完成。

在上述操作(4)中,自测试地址控制模块中决定地址序列的方向信号(递增或者递减)由算法状态机的当前状态决定,具体而言,初始方向设置为递增,在对每个端口执行扩展marchc+算法直到的第3个或第6个marchstep完结处,方向信号反向(也即由递增变为递减,或由递减变为递增)。而该模块中的地址序列变化的使能信号在上述定义的4个广义工作状态下处于激活状态。

在具体应用实例中,上述连线仿真模块的作用在于将自测试模式与正常工作模式融合于被测试寄存器文件,从而构建起一个寄存器文件_测试块(regfile_test_block)。同时生成验证自测试逻辑功能正确性的测试激励文件与验证环境。

在具体应用实例中,上述连线仿真模块包括:

(1)reg_wrapper(寄存器文件包裹)模块:用于为寄存器文件添加测试路径

(2)regfile_test_block(寄存器文件_测试块)模块:用于连接整合自测试逻辑与寄存器文件,对外形成一个更高层次的具有自测试功能的寄存器文件块。

(3)测试激励与验证环境模块:用于测试最终形成的regfile_test_block模块的功能正确性。

在一个具体应用实例中,本实施例将对一个名为rf_16x32_6w_12r的全定制寄存器文件进行自测试逻辑的产生与插入。该寄存器文件有6个写端口,12个读端口。数据位宽为32,共有16个地址。没有芯片使能信号,每个写端口都有相应的写使能信号,写操作是同步时序操作。而12个读端口,没有相应的读使能信号,读操作是异步时序操作,读端口地址变化或者读地址内所存数据变化都会触发一次读操作。

在该实例中本发明方法包括如下步骤:s1.参数化寄存器文件;s2.根据s1的参数配置,自动生成寄存器文件控制器;s3.自动连接自测试逻辑与寄存器文件,并生成方针验证环境。在本实施例中,步骤s1的具体步骤为:(1)设置写数据端口名:w0_data_bar、w1_data_bar…w5_data_bar,设置写地址端口名:w0_addr_bar、w1_addr_bar…w5_addr_bar,设置写使能端口名:w0_we_stalled、w1_we_stalled…w5_we_stalled,设置读数据端口名:rf0_data、rf1_data…rf11_data,设置读地址端口名:r0_addr_bar、r1_addr_bar…r11_addr_bar(2)设置寄存器文件的时钟端口名:clk,设置寄存器文件正常工作时的时钟频率1(默认单位ns),设置单元库及库中门控单元的名称:cklnqd12bwp12t(3)设置读操作所用时钟周期数1,也即对应读写计数器的计数值为0。(因为为异步读操作,地址变或者地址中的内容变,读数据端口的值也就马上变,所以其实读操作并不需要一个时钟周期,但是因为测试过程中,每一次读操作都需要将读出值与参考值进行比较,并存入比较结果寄存器,因此给该参数分配1个时钟周期);设置写操作所用的时钟周期数为1,也即对应读写计数器的计数值为0。(因为写操作为同步时序操作,需要且仅需要1个时钟周期);由此可知,一个读写读操作所用时钟周期数为3(第一个读操作消耗1个时钟周期+写操作消耗1个时钟周期+第二个读操作消耗1个时钟周期=3个时钟周期),也即对应读写计数器的计数值为2。

在该实例中步骤s2中自动生成寄存器文件自测试控制器具体步骤为:

s2.1自动生成寄存器文件算法控制器的具体步骤为:

(1)自测试算法状态机模块:由于有6个写端口,因此除1个初始状态,1个完成状态以外,还需6×6=36个状态,其中第一个6指示针对每一个写端口执行扩展marchc+算法,共有6个marchstep,第二个6指示共有6个写端口。其状态转移图如图9所示,其中所有关于写的操作,都只针对当前状态机所围绕的端口,而所有关于读的操作,则是对全部12个读端口同时进行的操作。共需1+1+36=38个状态。假设算法状态机中的状态变量定义为tstate,而单个marchstep状态内部记录读写执行过程的变量定义为rw_state,操作类型变量定义为mode_var。

(2)自测试比较结果屏蔽模块:比较结果只有在算法要求读取数据之后才有效,也即只有在以下条件时:

((rw_state_1==0)&&(mode_var_1==md_r))(状态机处于读操作且已读取完毕)((rw_state_1==0)&&(mode_var_1==md_rwr)))(状态机处于读写读操作且第一次读取完毕)((rw_state_1==2)&&(mode_var_1==md_rwr)))(状态机处于读写读操作且第二次读取完毕)其中rw_state_1与mode_var_1分别是rw_state与mode_var经过一级触发器缓冲而得。

(3)自测试写使能模块:由于该寄存器文件没有芯片使能信号,所以只要时钟有效,不是在执行写操作,就是在执行读操作。因此,该寄存器文件只需写使能模块。

具体执行条件如下:

1、(((rw_state==0)&&(mode_var==md_w))&&~(((addr_op_var==addrnoop)||((addr_op_var==addrop_unary_0_15_up)&&(addr_reg==highest_addr)))||((addr_op_var==addrop_unary_15_0_down)&&(addr_reg==lowest_addr))))

状态机当前处于写操作状态且地址生成器正处于加减操作且未溢出(包含上溢出、下溢

出)。

2、(((next_mode_var==md_w)&&(((((mode_var==md_none)&&(rw_state==0))||((rw_state==0)&&(mode_var==md_r)))||((rw_state==2)&&(mode_var==md_rwr)))||((rw_state==0)&&(mode_var==md_w))))&&(((addr_op_var==addrnoop)||((addr_op_var==addrop_unary_0_15_up)&&(addr_reg==highest_addr)))||((addr_op_var==addrop_unary_15_0_down)&&(addr_reg==lowest_addr)))))

状态机当前处于广义工作状态,且地址生成器未工作或刚好溢出(包含上溢出、下溢出),

且下一状态将要进行写操作。

3、((rw_state==0)&&(mode_var==md_rwr))

状态机当前处于读写读操作且第一个读操作已经完成。

其中addrop_unary_0_15_up表示地址方向为递增,addrop_unary_0_15_down表示地址方向为递减。highest_addr表示最高地址,lowest_addr表示最低地址。

(4)自测试地址控制模块允许寄存器文件操作地址使能信号如下:

(((((mode_var==md_r)&&(rw_state==0))||((mode_var==md_rwr)&&(rw_state==2)))||((mode_var==md_w)&&(rw_state==0)))|((mode_var==md_none)&&(rw_state==0)))

也即上述已定义的4个广义工作状态。

最终,s2.1所得出的算法控制器结构如图10所示。

(5)自测试比较器模块。由于数据位宽为32,按照上述如图7所示的新型比较器结构,第一级可以用(16+8+4+2+1)=31个与门、(16+8+4+2+1)=31个或门完成;第二级可以用(6+3+2)=11个或门、(6+3+2)=11个与门完成;第三级可以用1个非门、1个二选一选择器。所以共(31+11)=42个与门,(31+11)=42个或门,1个非门,1个二选一选择构成。由于在电路实现中,与非门和或非门所占用的面积比与门和或门所占的面积要小,因此也可以利用逻辑推理公式,将图7所示的结构以图11的结构进行代替。所以,最终该新型比较器的第一级可以用(16+4+1+8+2)=31个与非门、(16+4+1+8+2)=31个或非门完成,如图11所示。;第二级可以用(6+2+3)=11个与非门、(6+2+3)=11个或非门完成;第三级可以用1个非门、1个二选一选择器完成。因此,最终该新型比较器共需(31+11)=42个与非门、(32+11)=42个或非门、1个非门,1个二选一选择器构成。

在该实例中步骤s3中自动连接自测试逻辑与寄存器文件,并生成仿真验证环境的具体步骤如下:

s3.1为输入端的6个32位写数据端口添加6×32=192个二选一选择器;为输入端的6个4位写地址端口添加6×4=24个二选一选择器;为6个写使能端口添加6个二选一选择器;为12个32位读地址端口添加12×32=384个二选一选择器;为时钟端口添加1个二选一选择器。所以,共增加192+24+6+384+1=607个二选一选择器。所有二选一选择器的数据0端都接原始系统数据,所有二选一选择器的数据1端都接来自s2生成的自测试控制器产生的测试数据,所有二选一选择器的选择端都接自测试使能信号。最终所有二选一与rf_16x32_6w_12r寄存器文件连接形成一个更高层次的模块rf_16x32_6w_12r_wrapper。

s3.2为自测试控制器regfile_6w_12r_bist的时钟端添加s1指定的门控单元cklnqd12bwp12t,并将两者与寄存器文件拼接起来构成寄存器文件_测试块rf_16x32_6w_12r_test_block。

s3.3建立测试激励文件rf_16x32_6w_12r_test_block_tb.v,并提供s1指定的周期为1ns的测试时钟。

以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1