技术领域
[0001] 本申请涉及集成电路设计领域,具体而言,涉及一种基于支配树引导电路划分的混合故障仿真方法和装置。
相关背景技术
[0002] 本部分旨在为权利要求书或说明书中陈述的内容提供背景或上下文,此处描述的内容不因为包括在本部分中就承认是现有技术。
[0003] 随着电电路复杂度的不断增长,故障仿真的效率变得越来越瓶颈。故障模拟是设计阶段的关键组成部分,特别是在可测试性设计(DFT)过程中,它广泛用于自动测试模式生成(ATPG)和故障诊断。在ATPG期间,故障模拟被迭代地执行以评估故障覆盖率,而在故障安全分析中,它被用来评估系统对故障的恢复能力。故障模拟的速度直接影响了芯片设计过程的效率。然而,随着关键任务应用中使用的芯片的复杂性不断增加,模拟数百万个故障以评估诊断覆盖率将导致显著的时间开销,进一步加剧了效率方面的挑战。
[0004] 传统的故障仿真方法主要是事件驱动仿真和编译仿真。事件驱动仿真是故障仿真的首选,因为它只专注于模拟无故障和故障电路之间的差异,计算负载相对较低。但是,与编译仿真相比,它需要更多的内存访问。编译仿真通过预先确定要评估的线路来优化执行顺序,减少事件调度和电路网表访问。然而,在故障仿真中,计算与无故障电路相同的故障电路的行为会导致冗余计算。
[0005] 针对上述的问题,目前尚未提出有效的解决方案。
具体实施方式
[0030] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
[0031] 需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0032] 编译仿真是一种静态仿真策略,通过预先确定电路中逻辑门的评估顺序并将其转换为机器指令执行来提高仿真速度。在故障仿真中,编译仿真可以减少内存访问,但会增加冗余计算的数量。事件驱动仿真是一种动态仿真策略,根据电路状态的变化触发逻辑计算,这种策略适用于故障仿真,因为它可以避免无效的模拟,并且只关注故障电路和正常电路行为之间的差异,然而,它需要对每个事件进行内存访问,这对内存的消耗是巨大的。
[0033] 混合模拟策略:混合模拟策略可以结合编译仿真和事件驱动仿真的优点。它在电路的拟合部分中使用编译仿真以减少存储器访问并提高效率,并在故障效应传播中使用事件驱动仿真以尽可能避免无效计算,该策略在保证仿真结果准确性的同时,提高了仿真速度。
[0034] 在混合故障仿真方法中,可基于扇出自由区(FFRs)或多重扇出集群(Mffc)等概念对电路进行分区,然后在不同区域应用不同的仿真策略。
[0035] 基于扇出自由区(FFRs)的电路分区:一种将编译仿真应用于扇出自由区(FFRs)的方法,其每个门只有一个输出的子电路,在FFRs中,通过预编译逻辑表达式来加速仿真,事件驱动仿真用于选择FFRs进行模拟,当在FFR中注入故障时,如果故障的影响传播到输出,则触发事件。该方法主要关注局部电路结构,忽略了电路的整体特性和内在的信号传播关系,未能充分利用电路不同区域的逻辑特点,导致划分出的区域不能与仿真策略很好地匹配。
[0036] 基于多重扇出集群(Mffc)的电路分区:基于FFR的概念,进一步的工作引入了更先进的概念,例如多重扇出集群(Mffc),它不仅考虑了没有扇出,还考虑了信号流和逻辑门之间的关系,例如引入像信号相关的动态支配者和stem区域这样的概念。然而,该方法往往严重依赖于小规模电路的特性,而忽略了大规模电路的整体特性。此外,这些方法还没有与编译的优点集成在一起。
[0037] 综上,以上电路分区方式较为简单,未能充分考虑电路内部的支配关系。支配关系是指电路中某些关键节点对其他节点的控制和影响,反映了电路内在的逻辑依赖性。忽略这种关系会导致划分出的区域不能很好地匹配编译仿真或事件驱动仿真,影响了混合仿真的效率。例如,将一个大的组合逻辑块划分到多个区域会引入额外的事件同步开销。此外,对于包含孤立节点或多支配者节点的电路,以上方法难以给出合适的划分。这些节点的存在打破了区域的边界,增加了划分和仿真的复杂性。
[0038] 支配者树(即Dominator树)是一种图论数据结构,用于表示有向图中节点之间的支配关系,支配者树可以表示电路中信号传播的路径,其中节点的支配关系对于故障传播分析至关重要。支配点:在有向图中,如果从u到指定端点的每条路径至少包括一个来自a的顶点,则一组顶点a被称为支配一个顶点u。如果A由单个顶点组成,则该顶点被称为u的直接支配者。如果a正好包含两个顶点,则A被称为一对共支配者,这意味着来自u的每条路径都至少经过A中的两个顶点中的一个。
[0039] 使用支配者树优化故障仿真的原理是基于这样一个观察:电路中的信号传播通常涉及固有的支配关系,一些信号路径自然占主导地位,因为它们通过关键逻辑门或连接,其值的变化直接影响电路的最终输出,电路的变化通常由支配关系控制,即输入或内部节点的变化触发一系列连锁反应。Dominator树的几个关键属性使其成为优化有向图结构和提高故障仿真效率的理想工具。
[0040] 路径唯一性:在Dominator树中,从根节点到任何叶节点都有一条唯一的路径。该特性简化了故障传播的分析,因为它允许信号传输的确定性跟踪。节点支配关系:支配关系定义了节点之间的层次结构,这有利于识别电路内的关键路径。在故障仿真过程中关注这些关键路径可以提高效率。
[0041] 本申请方案的形成过程经历了以下技术难点:
[0042] 如何在电路图中引入额外的节点,以统一孤立的节点和子图,孤立节点和子图的存在会影响Dominator树的构建和划分的完整性,需要设计一种机制,将它们与主电路相连接;如何处理具有多个支配者的节点,以更好地反映电路结构,多支配者节点反映了电路中的重复结构,直接构建Dominator树会丢失这种信息,需要对这类节点进行特殊处理,以更准确地表示原始电路;如何根据Dominator树的结构设计度量指标,以指导电路分区,Dominator树提供了电路的层次结构信息,但需要进一步的分析才能确定哪些区域适合编译仿真,必须设计合适的度量指标,综合考虑扇入大小、逻辑深度等因素。
[0043] 基于此,本申请提供了一种基于支配树引导电路划分的混合故障仿真方案(HyFAST)。图1是根据本申请实施例的基于支配树引导电路划分的混合故障仿真方法的流程图,如图1所示,该方法可以包括以下步骤:
[0044] 步骤S1,通过引入伪根节点和分割受双重支配的第一节点,来构建与目标芯片的电路关系对应的优化支配树,所述第一节点受到多个支配节点影响、且与各个支配节点组成的所有支配路径是独立的。步骤S1包括:
[0045] 1)将所述目标芯片的原始电路流图中的孤立节点和子图连接到伪根节点,得到目标电路流图;
[0046] 2)根据电路关系将所述目标电路流图转换为原始支配树;
[0047] 3)基于双重支配属性对所述原始支配树中的所述双重支配节点进行节点分割,得到所述优化支配树:在所述原始支配树中确定受到多个支配节点影响、且所有支配路径是独立的第一节点,将所述第一节点分割为多个第二节点,并将每个所述第二节点连接至一个所述支配路径以替代所述第一节点,得到优化支配树,其中,任意两个所述支配路径连接的所述第二节点不同。
[0048] 步骤S2,根据所述优化支配树中候选区域的逻辑深度和扇入数量,识别所述目标芯片中适合编译仿真的电路区域来进行编译仿真,以简化所述目标芯片的电路结构。
[0049] 步骤S2包括:
[0050] 1)确定所述优化支配树中候选区域的逻辑深度和扇入数量,所述候选区域为拟进行编译融合的区域:从所述优化支配树的底层开始,按照预设顺序遍历每一层的节点,确定遍历到的第三节点与所述第三节点的父节点之间的邻接性,确定所述第三节点的父节点和所述父节点的各个子节点组成的区域为所述候选区域,获取所述候选区域的扇入计数,其中,所述扇入计数为编译融合后连接到所在节点或区域的输入数量。
[0051] 2)根据邻接性确定所述候选区域的融合优先级,按照所述融合优先级采用融合策略对所述候选区域进行编译融合:在所述邻接性表明所述候选区域中第三节点与所述第三节点的父节点在所述优化支配树中邻接、但在所述目标电路流图中不邻接的情况下,按照第一优先级采用融合策略对所述候选区域进行编译融合,在所述邻接性表明所述候选区域中的第三节点与所述第三节点的父节点在所述优化支配树中邻接、且在所述目标电路流图中邻接的情况下,按照第二优先级采用融合策略对所述候选区域进行编译融合,所述第二优先级低于所述第一优先级。
[0052] 具体融合时,在所述候选区域的扇入计数小于第一阈值的情况下,允许对所述候选区域进行编译融合,但不立即生成对应的指令函数序列;在所述候选区域的扇入计数大于第二阈值的情况下,不对所述候选区域进行编译融合;在所述候选区域的扇入计数大于等于所述第一阈值且小于等于所述第二阈值的情况下,直接将所述候选区域编译融合为一个复合节点,并生成对应的指令函数序列。
[0053] 3)将待测故障注入到编译融合得到的指令函数序列中进行故障仿真。
[0054] 步骤S3,基于所述优化支配树的层次结构采用前向传播方案和后向映射方案,来进行事件驱动仿真,其中,所述前向传播方案是利用所述优化支配树中子节点与父节点之间的汇聚发散关系来实现分层事件处理,所述后向映射方案用于从故障传播的终止节点开始将检测到的故障映射回故障注入点。步骤S3包括:
[0055] 1)基于所述优化支配树的层次结构确定故障注入节点和所述故障注入节点的前向传播节点所在的故障传输路径,从所述故障注入节点开始更新所述故障传输路径上节点的前向传播信息,并将新触发的事件按照在所述优化支配树的层次结构存入分层事件队列,在事件处理过程中,按照层次结构从下层到上层的顺序依次处理所述分层事件队列中的事件,其中,所述分层事件队列用于存储各个分层的不同事件;
[0056] 2)在前向传播仿真完成后,从故障传播的终止节点开始,利用所述优化支配树的层次结构和故障影响传播的可逆计算性,将检测到的故障映射回故障注入点。
[0057] 为了减少模拟时间,可尝试将编译仿真和事件驱动仿真直接结合,但由于电路分区不合理和缺乏对电路结构的分析,难以取得相应的效果,例如采用基于扇出自由区(FFRs)的电路分区方法,其关注小区域内的单个电路属性。该方法忽略了具有有利编译特性的复杂电路逻辑结构,忽略了电路的整体事件传播特性。
[0058] 为了捕捉更广泛的电路信息,本方案深入研究了电路内的内在支配关系,某些电路节点由于连接到关键逻辑门或因连接而对电路内的其他节点施加了主导影响。为了利用这种优势来指导电路区域划分和故障传播分析,可将电路图转换为优化的Dominator树。这种结构利用了电路中信号传播和逻辑门行为的固有优势,在一个Dominator树,一个节点(父节点)直接受其所有下级节点的影响,这种层次关系使父节点的事件能够包含其所有子节点的事件,从而允许事件处理集中在具有直接逻辑依赖关系的节点上。
[0059] 然而,要将编译仿真和事件驱动仿真的优势与最佳分区相结合,需要解决两个关键问题。一个关键问题是如何根据构建的Dominator树识别合适的电路区域以进行编译仿真,扇入小、逻辑深的区域更适合编译仿真,这些区域通常具有更少的输入和更复杂的逻辑路径,这有助于进一步减少仿真期间所需的事件和存储器访问次数。另一个关键问题是确定事件在eventdriven仿真中的排序方式,找到事件处理的最佳序列,最大限度地整合重复事件,允许在父节点上最大限度地重用事件,并最大限度地减少冗余事件是至关重要的。
[0060] 因此,基于构建的Dominator树,本申请解决了上述两个问题,从而实现了高效的混合仿真。为了便于识别基于Dominator树的编译仿真的合适区域,本方案提出了两个结合逻辑深度和低扇入属性的启发式度量。这些指标指导基于Dominator树的电路分区,旨在通过编译集成识别有利于更高性能优化的区域。在此基础上,为了实现更高效的故障仿真,可以通过编译实现故障注入,以实现经济高效的故障传播。为了解决事件驱动仿真中事件处理顺序的挑战,本方案提出了一个基于树的分层队列系统,该系统基于Dominator树上父节点事件收敛的观察属性,以及紧凑访问同级逻辑门的原则,以减少内存访问开销。在此基础上,本方案引入了前向事件传播和后向映射算法,利用树上父节点和子节点之间的收敛‑发散关系。
[0061] 本申请提出了一种基于优化Dominator树的电路分区方法,用于混合故障仿真。该方法充分利用了电路内在的支配关系,通过构建优化的Dominator树来指导电路划分。与现有方法相比,本申请具有以下创新点:
[0062] 引入伪根节点,统一连接孤立节点和子图,通过在原电路中添加一个虚拟节点,并将所有原始电路的主输出节点和主输入节点连接到该节点,本方法将分散的电路片段统一到一个连通图中,这确保了Dominator树的完整性,简化了后续的分析步骤;
[0063] 对多支配者节点进行分裂处理,细化Dominator树的结构,传统方法直接移除多支配者节点,导致Dominator树丢失电路的重要结构信息,本申请则根据支配者的数量和支配路径,将多支配者节点分裂为多个独立的节点,分裂后的节点作为各自支配者的子节点插入到Dominator树中,更准确地反映了电路的层次特性;
[0064] 设计基于邻接关系和扇入大小的度量指标,用于划分区域,与传统方法相比,本申请提出了两个新颖的度量:一是Dominator树节点与原电路邻接节点的比例,二是Dominator子树的平均扇入大小。前者反映了Dominator树与原电路结构的相似性,后者则衡量了子树内部的复杂度。综合考虑两个指标,可以识别出适合编译仿真的区域,即低扇入、逻辑深度大的区域。这类区域内部连接紧密,编译优化的效果更好。
[0065] 给出了基于Dominator树和度量指标的完整电路分区流程。本申请详述了优化Dominator树构建的各步骤,包括伪根节点引入、初始树构建、多支配者节点分裂等。在此基础上,给出了利用度量指标自动划分电路的方法。通过递归遍历Dominator树,计算每个子树的度量值,并根据预设阈值决定是否将其标记为编译仿真区域,整个流程自动化程度高,可显著降低电路划分的人工成本。
[0066] 通过上述步骤,通过引入伪根节点和分割受双重支配的第一节点,来构建与目标芯片的电路关系对应的优化支配树,所述第一节点受到多个支配节点影响、且与各个支配节点组成的所有支配路径是独立的;根据所述优化支配树中候选区域的逻辑深度和扇入数量,识别所述目标芯片中适合编译仿真的电路区域来进行编译仿真,以简化所述目标芯片的电路结构;基于所述优化支配树的层次结构采用前向传播方案和后向映射方案,来进行事件驱动仿真,所述前向传播方案是利用所述优化支配树中子节点与父节点之间的汇聚发散关系来实现分层事件处理,所述后向映射方案用于从故障传播的终止节点开始将检测到的故障映射回故障注入点,可以解决相关技术中芯片的故障仿真效率较低的技术问题。
[0067] 随着电路复杂度的不断增长,故障仿真的效率变得越来越瓶颈。本申请基于优化的Dominator树提供了一种高效的混合故障仿真方案,有效地整合了编译仿真和事件驱动仿真的优点,通过将电路建模为优化的支配者树,分区算法以支配关系为指导,高效准确地识别适合编译仿真的电路区域。此外,为了最大限度地减少事件驱动仿真中的事件数量,引入了基于Dominator树的层次结构的Forward Backward仿真模型。实践结果表明,与商用工具相比,该方案实现了21倍的最大加速,平均加速超过3倍。对于具有超过100k门的大型电路,加速效果尤其明显,作为一种可选的实施例,下文结合具体实施方式进一步详述本申请的技术方案:
[0068] 在混合故障仿真中,编译仿真通过预先确定电路中逻辑门的评估顺序并将其转换为机器指令来提高仿真速度。例如,在基于函数级编译的仿真加速中,可利用二分图匹配算法进行编译逻辑评估,然而,该编译仿真方法将其应用于整个电路,而没有考虑电路内部的差异性。这导致编译过程引入了大量冗余计算,降低了仿真效率。
[0069] 其未能充分利用电路的结构特性来指导编译仿真的应用范围。具体而言,电路中不同区域的逻辑特点差异很大,对编译优化的敏感性也不尽相同。将编译仿真应用于整个电路会忽略这种差异性,造成不必要的复杂度。特别地,对于扇出很大或逻辑深度较浅的区域,编译优化的效果并不明显,反而可能因引入额外的编译开销而降低仿真性能。此外,现有方法也缺乏一种根据支配关系在局部区域内进行编译融合的手段。大粒度的编译整合虽然加快了仿真速度,但也给测试响应分析带来困难。
[0070] 本申请的形成过程经历了以下技术难点:如何根据Dominator树的结构特性设计度量指标,以自动识别适合编译仿真的区域,单纯依靠人工经验难以处理大规模电路,需要建立定量的度量机制;在选定的编译仿真区域内,如何进一步细化compilation group以实现更优的编译加速,简单地将区域内所有节点编译为一个组会限制并行性,需要更细粒度的编译融合策略;如何在进行编译优化的同时最小化测试响应分析的复杂度,全局性的编译整合会模糊各个子区域的边界,给后续的故障效应分析带来不便,必须在两者间权衡。
[0071] 在混合故障仿真中,事件驱动仿真根据电路状态的变化触发逻辑计算,可避免无效的模拟。但该方法需要对每个事件进行内存访问现有的事件驱动仿真方法通常采用单一的事件队列,按照时间戳或门级的顺序处理事件。这种方式没有考虑电路内部的支配结构,导致事件冗余和频繁的内存访问,影响了仿真性能。
[0072] 基于此,本申请提出了通过支配树引导的混合故障仿真方法,称为HyFAST。HyFAST通过构建优化支配树,实现电路的逻辑、高效和精确的区域划分。基于此树进一步优化了编译仿真和事件驱动仿真算法,实现了编译仿真和事件驱动仿真的高效集成。完整的HyFAST仿真流程包括以下三部分:
[0073] 支配树的构建和优化:HyFAST首先构建一个包含电路关系的优化支配树。随后,引入伪根节点并分割某些双重支配节点,以优化支配树,增加其包含的电路信息。
[0074] 基于支配树的编译仿真:在构建的支配树引导下,识别适合编译仿真的电路区域并进行编译,在故障仿真过程中将故障注入到集成节点中。
[0075] 基于支配树的事件驱动仿真:在完成编译仿真后,对支配树进行事件驱动仿真。为了最小化冗余事件并提高事件的可重用性,本方案利用支配树的层次结构提出了一种优化的事件驱动算法。
[0076] 1)支配树的构建和优化
[0077] 为了全面捕捉电路信息并利用支配关系进行电路划分,从电路图中构建了一个增强的支配树。如图2中算法(增强的Dominator树构造算法)所示,利用从流图构建支配树的基本算法,该算法采用深度优先搜索和一种高效的方法来计算树中路径上定义的函数,从而实现较低的时间复杂度。
[0078] 在增强的Dominator树构造算法中,输入为CircuitGraph G=(V,E),输出为Dominator tree T;第1行表示初始化一个空树T;第2行表示创建伪根节点p;第3行表示,将p连接到所有POs和PPOs;第4行表示进行图树转换;第5‑12行表示,对于每个顶点v,如果v由多个(两个)支配节点支配,并且支配路径(到PO,PPO)是不想交的,那么将v分割成多个(两个)顶点v',对于每个顶点v',将v'插入T作为其各自Dominator的子项否则,直接将v插入T作为p的子项。
[0079] 在算法的第4行中,本方案将其表示为函数GraphToTree(),该函数需要一个以起始顶点为输入的流图,并生成一个基本支配树作为输出。
[0080] 然而,这个基本支配树在电路划分中并不充分,存在若干限制。首先,整合具有孤立节点的所有树是复杂的,难以聚合测试结果并支持高效的事件传播。此外,在基线支配树的构建过程中,某些节点可能没有单一的支配点,而是同时受到多个支配点的影响。对于这样的节点,传统支配树可能无法准确反映电路的逻辑结构和信号传播路径。为了解决上述问题,本申请提出了两个增强点:
[0081] 添加伪根节点(参见算法第2行):在构建树之前,为简化支配关系的定义,引入伪父节点(参考图3中的P‑R节点),将孤立节点和子图统一连接到伪根节点。该节点链接到所有主输出(PO)和伪主输出(PPO)点,作为支配树的根节点,代表电路的最终输出端口,在图3的左子图中展示了一个示例。然后,使用添加了伪根节点的电路图G作为函数GraphToTree()的输入,形成一个完整的支配树。
[0082] 通过利用伪根节点将所有输出点整合到一个实体下,这种方法使得可以在单个点聚合来自电路输出节点(PO和PPO)的数据,简化了后续处理和计算。它还确保每个电路生成唯一的支配树,伪根节点作为故障传播的终点。
[0083] 节点分割策略(算法第5‑13行):在构建树T后,基于双重支配属性进行节点分割(参考图3),更加精细地反映电路图中的某些特殊支配关系,丰富树对电路信息的表示。没有单一支配点而是受到多个支配点影响的节点是分割的候选对象。对于具有两个支配点的节点,如果其所有支配路径(到PO或PPO)是独立的,则可以使用节点分割策略将其分割为两个独立的节点并添加到支配树中。在图3右子图所示示例中,图中展示了一个节点分割机制。这里,一个具有双重支配属性(且到PO和PPO的路径独立)的节点被分割为两个独立的节点(G12’),节点G12到节点G12’的转换展示了分割操作及其对树结构的影响。
[0084] 节点分割增强了支配树的准确性,提供了对电路中复杂逻辑关系和信号传播路径的更精确表示。它还增加了树的范围,改进了基于树结构的事件遍历的可重用性,并优化了故障传播路径,从而提高了仿真效率。
[0085] 2)基于支配树的编译仿真
[0086] 基于构建的支配树,本申请提出了一种电路划分方法,用于选择适合编译仿真的电路区域,本方案首先对选定的电路区域进行编译融合,以简化电路结构,然后将故障注入到编译后的结果中。
[0087] 2.1)基于电路划分的编译融合
[0088] 本申请利用支配树提供的支配关系来帮助识别适合编译的关键区域。对电路图进行划分后,在子树基础上执行编译融合。编译仿真的主要挑战来自其静态性质,随着电路设计复杂度的增加,往往导致对不活动部分的冗余计算,从而产生大量冗余计算。为有效解决此问题,本申请基于支配树构建了两个指标,作为指导,帮助识别具有低扇入和深逻辑层次的电路区域,如扇出重汇。接下来,本申请将分别介绍这两个指标的定义以及基于这两个指标确定编译融合区域的方法以及编译融合策略。
[0089] 电路区域选择指标:为了基于支配树有效识别适合编译的电路区域,本申请构建了两个指标,以平衡所选区域的逻辑深度和扇入数量。
[0090] 支配树和电路图中的邻接性:该指标用于衡量电路节点在树和图中的邻接性是否一致。具体而言,当电路图转换为支配树后,有些节点在电路图中不邻接但在树中邻接。因此,在这种情况下有两类节点:在图中不邻接但在树中邻接的节点,以及在图和树中都邻接的节点。如图4所示,左侧说明了由于扇出重汇,G1和G4在树中邻接但在图中不邻接的情况,右侧则展示了在树和图中都邻接的节点情况。
[0091] 扇入计数:编译融合后连接到节点或区域的输入数量,这显著影响编译仿真的性能。注意,本方案预定义了一个扇入计数阈值。如果实际扇入计数等于该阈值,则被分类为“中等扇入计数”;如果低于该阈值,则被认为是“低扇入计数”;如果超过该阈值,则被标记为“高扇入计数”。
[0092] 电路区域选择方法:基于上述指标,本方案设计了一种搜索策略,系统地识别适合编译融合的区域,生成最终的编译结果。图5展示了相关示例。本方案从树的底部逐层遍历节点,按顺序进行。首先,基于“支配树和电路图中的邻接性”指标,本方案对树中邻接但在图中不邻接的所有节点优先进行融合。在这些路径上的所有节点进行编译融合。随后,基于该区域的扇入计数确定融合策略:
[0093] 中等扇入计数:直接进行编译融合并生成指令序列。
[0094] 低扇入计数:进行融合但不立即生成指令序列,允许将来可能的进一步融合。
[0095] 高扇入计数:不进行融合,独立处理这些节点。
[0096] 如图5的子图(1)和(2)所示,节点G12在支配树中邻接但在电路图中不邻接。G12的支配路径经过G10和G11,最终到达G7,从而划定了该区域。鉴于该区域的扇入计数等于预定义阈值,这些节点融合形成一个复合节点,记为COM1。
[0097] 接下来,遍历图中剩余的同时在图和树中邻接的节点,对从该节点到其父节点路径上的所有节点进行区域融合,然后基于该区域的扇入计数确定融合策略,策略与之前的情况一致。
[0098] 如图5的子图(3)和(4)所示,此时,所有在支配树中邻接但在电路图中不邻接的节点都已处理完毕,接下来,通过逐层遍历在支配树和电路图中都邻接的节点,首先处理的是G13,其支配路径到达G9,鉴于该区域的扇入计数低于阈值,进行临时融合。然后遍历到G5、G6和COM1,评估它们与父节点融合后的区域扇入计数。由于它们的扇入计数均超出阈值,因此不进行融合。
[0099] 当遍历到G8,其支配路径扩展至G4,鉴于该区域的扇入计数低于阈值,进行融合。随后对包含G9和G13的区域进行评估,即使在融合G4、G8、G9和G13之后,扇入计数仍低于阈值,因此保留该融合结果。
[0100] 继续遍历G2和G3,分析显示它们与父节点融合后的区域扇入计数超出阈值,因此决定不进行融合。最后评估先前形成的包含G4、G8、G9和G13的区域。将此区域与G1融合会超出扇入计数阈值,因此撤销与G1的融合,保留原始的G4、G8、G9和G13融合,即形成COM2节点。所有节点按顺序遍历完毕后,融合过程结束。通过这些操作,原始电路被划分为多个编译融合区域,为后续的编译仿真奠定了基础。
[0101] 编译融合策略:根据电路区域选择方法选择的节点,进行编译融合以维持电路性能并提高仿真效率,选定节点的逻辑功能被合并形成统一的表示,并编译为指令函数序列,相应地,更新支配树以反映融合,确保准确建模当前电路节点状态。
[0102] 2.2)编译故障注入
[0103] 为了在故障发生时模拟融合电路部分的逻辑门行为,需要将故障注入到融合电路区域内部。由于电路已经融合并编译,本方案通过直接将故障注入到已编译的指令函数序列中,几乎不改变原始指令函数序列,从而加速故障仿真,进一步减少故障注入引起的内存访问。编译故障注入示例如图6所示。
[0104] 编译故障注入策略包括:
[0105] 故障模型定义:根据电路的故障模型定义故障类型和注入位置(例如,卡住故障);
[0106] 故障节点选择:定位经过编译融合区域内的故障注入节点(逻辑门)的具体位置,并锁定相应的指令地址;
[0107] 故障注入:使用CALL指令直接访问故障注入指令,在与选定逻辑门对应的指令地址注入故障,并模拟故障传播。
[0108] 如图6所示,在COM1节点中G10门处的故障注入过程中,首先识别与G10对应的编译指令,用CALL指令替换它,将原始指令重新定位到故障注入指令序列的开始处,继续执行SA故障注入指令,随后使用JUMP指令恢复正常指令流。
[0109] 支配树的使用提供了一种灵活的方法来选择应融合并编译的电路部分,使算法能够适应不同的电路特性。通过使用本方案定义的支配树和两个指标,可以精确定位适合编译融合的区域。
[0110] 3)基于支配树的事件驱动仿真
[0111] 在完成编译仿真部分后,本方案提出了一种基于支配树的分层事件驱动仿真方法,以减少冗余事件传播。事件驱动仿真的性能瓶颈主要来自事件调度和计算引起的内存访问开销,此外,以前事件的相对随机触发顺序导致的分散内存访问增加了内存开销。
[0112] 为了减少冗余事件传播并优化内存访问,同时确保仿真准确性,本方案基于支配树的层次结构开发了一种前向‑后向仿真模型。前向传播仿真利用支配树中子节点和父节点之间的汇聚‑发散关系实现分层事件处理。同时,提出了相应的后向映射算法,以准确地将仿真结果映射回每个故障点并获得最终正确的仿真结果。事件分层队列的前向传播模拟和后向映射算法如图7所示。
[0113] 3.1)前向传播仿真
[0114] 前向传播(Forward)仿真旨在模拟故障在电路中的传播,从故障注入点开始,沿电路的逻辑路径传播到输出。在基于树状层次结构的上下文中,该过程从树的底层节点开始,向上推进,最终到达电路的输出点。
[0115] 利用支配树的结构来建立故障传播的明确路径,从而提高过程的效率。一旦故障注入到逻辑门中,其影响沿支配树的路径传播到可能受影响的其他逻辑门或最终输出点。支配树中从根节点到叶节点的唯一路径保证了故障传播的确定性。基于此,前向传播仿真的过程如下展开:
[0116] 初始化:准备一个数组以记录每个逻辑门的前向传播信息,数组长度与支配树中的节点数相匹配,该数组将用于后续的仿真状态跟踪,构建事件队列,当事件发生时,它们根据支配树中节点的层次进入队列;
[0117] 故障注入:根据定义的故障模型,将故障注入支配树的节点(通常是电路中的逻辑门或区域),在故障位置翻转逻辑值并触发事件,事件进入队列,如图7左侧所示,将故障注入树中所有节点,导致所有事件根据树的层次进入队列;
[0118] 分层队列事件处理:在处理事件时,按顺序从队列中检索相应事件,对于受故障影响的每个位(故障值与正确逻辑值不同的位),翻转该节点的正确逻辑值并触发事件,将故障影响传播到当前节点的父节点,在此过程中,将从当前节点传播到父节点的每个故障影响合并到父节点的错误逻辑状态中,通过将父节点的正确逻辑值与从当前节点传播到父节点的故障值进行异或操作,更新当前节点的前向传播信息,对于新触发的事件,根据电路层次将其输入队列。注意,如果在队列中单个节点有重复事件,它们会被合并,处理完此事件后,按顺序从队列中检索下一个事件。重复上述故障影响传播过程,直到队列为空,仿真终止。如图7左侧所示,优先处理与G5对应的事件。在从G5传播到G2的故障影响过程中,更新G5的前向传播信息。按顺序从队列中处理G6、COM1等的事件。
[0119] 在前向传播仿真中,事件按照相应层次排队并从下层到上层依次处理。通过这种过程,本方案利用支配树中子节点和父节点之间的汇聚‑发散关系实现分层事件处理。这种策略保证在处理父节点事件之前,所有来自子节点的事件都被处理和传播到父节点。它确保故障影响的有序传播和汇聚,并减少冗余事件触发和计算。通过建立分层事件队列来存储每个层次的不同事件,在事件处理过程中,本方案按层次依次处理事件。这产生了更有组织和紧凑的触发门内存访问模式,减少了缓存未命中并进一步降低了内存访问开销。
[0120] 3.2)后向映射方法
[0121] 后向映射(Backward)旨在确认在前向传播仿真完成后,故障是否可以在电路的输出端被观察到。本方案利用支配树的层次结构和故障影响传播的可逆计算性,将检测到的位从输出点映射回注入点。
[0122] 后向映射的核心原理是从故障传播的终点开始,逆向检查故障是否影响了电路的可观测输出。当前测试向量确定故障是否可以被检测到。具体的实现过程如下:
[0123] 终点信息收集:当每个故障影响到达树的伪根节点并传播到PO或PPO时,收集所有对应的故障影响检测信息,即伪根节点的后向映射信息;
[0124] 后向映射信息更新:在后向映射方法中,节点按照前向传播仿真中事件触发的逆序构建队列,从伪根节点下方的层次开始,即PO和PPO层,进行层次化向后遍历。这种传播方法确保在处理子节点的后向映射信息时,其父节点的后向映射信息已经更新。一个节点的后向传播信息等于其自身记录的前向传播信息与其父节点的后向映射信息的按位与操作。如图7右侧所示,图中节点G2的后向映射信息是通过布尔表达式"Backward(G2)=Forward(G2)AND Backward(G1)"计算得到的。更新顺序按照图中箭头表示的顺序,从G1开始,然后是COM2、G3等;
[0125] 结果分析:如果在后向映射信息中存在值为1的位,并且故障可以传播到对应节点的输出端口,则故障被检测到,获取所有故障的仿真结果。
[0126] 将本方案与商业工具进行了比较。数据分为两部分,对于门少于100k的电路:在较小规模的电路中,与商业工具TMAX相比,本方案的HyFAST实现了1.523倍的平均性能提升;与Tessent相比,HyFAST的性能提升平均为10.395倍等。对于超过100k门的电路:HyFAST在TMAX上实现了从最小1.88倍到最大6.14倍的加速,平均加速为3.078倍;与Tessent相比,加速更显着,范围从5.76倍到21.90倍,在大于100k门的电路上平均加速11.39倍等。
[0127] 可以观察到,HyFAST在各种电路复杂度(从数十万到近千万门)中取得了值得称道的成果。此外,与较小的电路相比,本方案的方法在较大的电路中表现出显着的优越增强。首先,较大电路中更大的电路深度和更广阔的支配树有效地减少了冗余事件的发生,从而优化了整体仿真效率。其次,大规模电路的特点是大量的逻辑门和事件,这需要大量的数据存储,从而概率在内存访问期间遇到缓存未命中会显着增加。通过实施事件排序和基于区域的编译融合等战略优化,本方案的方法显着优化了编译和事件驱动的模拟。这种细化导致电路事件数量的减少并减少相关联的存储器访问开销。
[0128] 扇入计数阈值的评估。本方案测试了所有电路的各种风扇计数阈值,图8给出了不同fanin计数阈值参数下HyFAST仿真性能的分析,以openE902和openC910电路为例。曲线①标出了故障模拟时间,曲线②标出计算节点事件触发调度的累计计数,曲线③标出位计算操作的累计数。数据表明,随着扇入计数阈值的增加,故障模拟时间的初始减少,在再次上升之前达到最低点,确定了一个最佳阈值范围。相应地,扇入计数阈值的升高与较少的事件触发和位操作的激增相关。这种模式强调了校准扇入计数阈值的必要性,该阈值将事件触发频率与位操作量相协调,以优化仿真效果。
[0129] HyFAST首先从电路图构建优化的支配者树,利用支配关系来指导电路分区并确定适合编译仿真的区域。此外,它通过利用Dominator树的层次结构优化事件驱动仿真范例中的事件传播过程。此优化可确保最大的事件可重用性,并减少要处理的事件总数。在各种标准基准电路上的实验结果证明了HyFAST的有效性,与商业工具相比,最高加速率为21倍,平均加速率超过3倍。对于具有超过100k门的大型电路,加速效果尤其明显。
[0130] 需要说明的是,此方法主要针对组合电路和全扫描电路。本申请提出了以下几点重要贡献:
[0131] 1)提出了一种结合编译仿真和事件驱动仿真的快速混合故障仿真方案(可称为HyFAST)。通过将电路图转换为优化的支配树,本方案可以更好地捕获和利用电路中的支配关系进行电路分区。
[0132] 2)为了识别适合编译仿真的电路区域,本方案分析了有利于编译仿真的电路结构特征与构建的Dominator树之间的关系。HyFAST集成了一种基于度量的电路选择方法,该方法结合了逻辑深度和低扇入的特性。
[0133] 3)HyFAST在事件驱动仿真范式下优化事件传播,确保每个父节点的事件得到充分利用。这减少了要处理的事件总数,从而提高了仿真效率。
[0134] 4)在一系列标准基准电路上的广泛实验结果表明,Hfast实现了平均加速与超过100k门的电路的商业工具相比,超过3倍。
[0135] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
[0136] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
[0137] 根据本申请实施例的另一个方面,还提供了一种用于实施上述基于支配树引导电路划分的混合故障仿真方法的基于支配树引导电路划分的混合故障仿真装置。图9是根据本申请实施例的一种可选的基于支配树引导电路划分的混合故障仿真装置的示意图,如图9所示,该装置可以包括:
[0138] 支配树构建单元101,用于通过引入伪根节点和分割受双重支配的第一节点,来构建与目标芯片的电路关系对应的优化支配树,所述第一节点受到多个支配节点影响、且与各个支配节点组成的所有支配路径是独立的;
[0139] 编译仿真单元103,用于根据所述优化支配树中候选区域的逻辑深度和扇入数量,识别所述目标芯片中适合编译仿真的电路区域来进行编译仿真,以简化所述目标芯片的电路结构;
[0140] 驱动仿真单元105,用于基于所述优化支配树的层次结构采用前向传播方案和后向映射方案,来进行事件驱动仿真,所述前向传播方案是利用所述优化支配树中子节点与父节点之间的汇聚发散关系来实现分层事件处理,所述后向映射方案用于从故障传播的终止节点开始将检测到的故障映射回故障注入点。
[0141] 此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在相应的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。
[0142] 根据本申请实施例的另一个方面,还提供了一种用于实施上述基于支配树引导电路划分的混合故障仿真方法的服务器或终端。
[0143] 图10是根据本申请实施例的一种终端的结构框图,如图10所示,该终端可以包括:一个或多个(图中仅示出一个)处理器1101、存储器1103、以及传输装置1105,如图10所示,该终端还可以包括输入输出设备1107。
[0144] 其中,存储器1103可用于存储软件程序以及模块,如本申请实施例中的基于支配树引导电路划分的混合故障仿真方法和装置对应的程序指令/模块,处理器1101通过运行存储在存储器1103内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的基于支配树引导电路划分的混合故障仿真方法。存储器1103可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1103可进一步包括相对于处理器1101远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0145] 上述的传输装置1105用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1105包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置1105为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
[0146] 其中,具体地,存储器1103用于存储应用程序。
[0147] 处理器1101可以通过传输装置1105调用存储器1103存储的应用程序,以执行下述步骤:
[0148] 通过引入伪根节点和分割受双重支配的第一节点,来构建与目标芯片的电路关系对应的优化支配树,其中,所述第一节点受到多个支配节点影响、且与各个支配节点组成的所有支配路径是独立的;根据所述优化支配树中候选区域的逻辑深度和扇入数量,识别所述目标芯片中适合编译仿真的电路区域来进行编译仿真,以简化所述目标芯片的电路结构;基于所述优化支配树的层次结构采用前向传播方案和后向映射方案,来进行事件驱动仿真,其中,所述前向传播方案是利用所述优化支配树中子节点与父节点之间的汇聚发散关系来实现分层事件处理,所述后向映射方案用于从故障传播的终止节点开始将检测到的故障映射回故障注入点。
[0149] 可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
[0150] 本领域普通技术人员可以理解,图10所示的结构仅为示意,终端可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图10其并不对上述电子装置的结构造成限定。例如,终端还可包括比图10中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图10所示不同的配置。
[0151] 本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read‑Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
[0152] 本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行基于支配树引导电路划分的混合故障仿真方法的程序代码。
[0153] 可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
[0154] 可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
[0155] 通过引入伪根节点和分割受双重支配的第一节点,来构建与目标芯片的电路关系对应的优化支配树,其中,所述第一节点受到多个支配节点影响、且与各个支配节点组成的所有支配路径是独立的;根据所述优化支配树中候选区域的逻辑深度和扇入数量,识别所述目标芯片中适合编译仿真的电路区域来进行编译仿真,以简化所述目标芯片的电路结构;基于所述优化支配树的层次结构采用前向传播方案和后向映射方案,来进行事件驱动仿真,其中,所述前向传播方案是利用所述优化支配树中子节点与父节点之间的汇聚发散关系来实现分层事件处理,所述后向映射方案用于从故障传播的终止节点开始将检测到的故障映射回故障注入点。
[0156] 可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
[0157] 可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0158] 上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
[0159] 上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
[0160] 在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0161] 在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
[0162] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0163] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0164] 以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。