CN111936998B - 数据变换流水线的硬件设计的验证 - Google Patents
数据变换流水线的硬件设计的验证 Download PDFInfo
- Publication number
- CN111936998B CN111936998B CN201980024352.1A CN201980024352A CN111936998B CN 111936998 B CN111936998 B CN 111936998B CN 201980024352 A CN201980024352 A CN 201980024352A CN 111936998 B CN111936998 B CN 111936998B
- Authority
- CN
- China
- Prior art keywords
- data transformation
- pipeline
- hardware design
- transformation pipeline
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3323—Design verification, e.g. functional simulation or model checking using formal methods, e.g. equivalence checking or property checking
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01R—MEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
- G01R31/00—Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
- G01R31/28—Testing of electronic circuits, e.g. by signal tracer
- G01R31/317—Testing of digital circuits
- G01R31/3181—Functional testing
- G01R31/3183—Generation of test inputs, e.g. test vectors, patterns or sequences
- G01R31/318342—Generation of test inputs, e.g. test vectors, patterns or sequences by preliminary fault modelling, e.g. analysis, simulation
- G01R31/318357—Simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2119/00—Details relating to the type or aim of the analysis or the optimisation
- G06F2119/12—Timing analysis or timing optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/323—Translation or migration, e.g. logic to logic, hardware description language [HDL] translation or netlist translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/36—Circuit design at the analogue level
- G06F30/367—Design verification, e.g. using simulation, simulation program with integrated circuit emphasis [SPICE], direct methods or relaxation methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/39—Circuit design at the physical level
- G06F30/398—Design verification or optimisation, e.g. using design rule check [DRC], layout versus schematics [LVS] or finite element methods [FEM]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Image Processing (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Multi Processors (AREA)
- Advance Control (AREA)
Abstract
用于通过形式验证来验证数据变换流水线的硬件设计的方法和***,所述数据变换流水线包括一个或多个数据变换元件,所述一个或多个数据变换元件对一个或多个输入执行数据变换,其中,所述形式验证在简化形式验证工具必须执行的数据变换计算的条件下执行。在一个实施方案中,通过以下操作来验证所述数据变换流水线的所述硬件设计:在所述数据变换流水线之间的基本上等同的数据变换元件响应于相同输入产生相同输出的约束下,针对预定交易集合,形式验证所述硬件设计的实例化的输出产生与另一数据变换流水线的硬件设计的实例化相同的输出。
Description
背景技术
许多电子装置,诸如片上***(SoC),都包括实现数据变换流水线的硬件。如本领域技术人员所知,流水线包括处理元件的集合,其中,所述集合中的处理元件的输出是到所述集合中的处理元件的输入。数据变换流水线是一种被配置成对一个或多个输入的集合执行数据变换的流水线。术语“数据变换”在本文中用来表示可以对数据集合执行或应用以产生新数据的任何操作(例如数学运算,诸如但不限于算术运算,包括加法、减法、乘法、除法等)。因此,数据变换流水线接收一个或多个输入的集合,并输出对输入的集合执行数据变换的结果。数据变换流水线包括至少一个数据变换元件,所述数据变换元件被配置成对输入的集合执行数据变换,但是它也可以包括其他类型的处理元件。当流水线针对输入的集合生成输出时,该流水线被称为执行“交易”。因此,如果流水线针对输入的相同集合生成输出,则称该流水线执行相同的交易。
数据变换流水线可以是线性或非线性流水线,并且可以具有单个处理元件或多个处理元件。图1-3示出了实例数据变换流水线,其被配置成对输入的集合执行算术计算。图1示出了第一实例数据变换流水线100,其被配置成计算八个输入的总和(a0+a1+a2+a3+a4+a5+a6+a7)。图1的数据变换流水线100包括单个数据变换元件102、寄存器104和控制逻辑106。数据变换元件102在八个周期(编号为0至7)的每一个中接收输入ai,并且将该输入与先前输入bi的总和(即,寄存器104在先前周期中的值)相加并将新的总和存储在寄存器104中。控制逻辑106被配置成在每个周期中将寄存器104的值提供给数据变换元件102,并且在第八个周期之后(即,在已生成总和a0+a1+a2+a3+a4+a5+a6+a7之后)输出寄存器104的值。控制逻辑106还被配置成在重置时以及在输出寄存器104的值之后将寄存器104的值设置为0。在数据变换元件102被配置成在单个周期中生成两个输入(ai和bi)的总和的情况下,可以预期在八个周期之后输出流水线的输出。然而,可能存在随机的外部事件,诸如停止或中断,这些事件会以一个或多个时钟周期影响通过流水线的数据移动。
图2示出了被配置成计算(a+b)*c的第二实例数据变换流水线200。数据变换流水线200包括两个数据变换元件202、204、寄存器206和控制逻辑208。第一数据变换元件202被配置成计算输入a和b的总和并将该总和y存储在寄存器206中。第二数据变换元件204被配置成计算寄存器206的值(即,第一数据变换元件202的输出y)与输入c的乘积。控制逻辑208控制寄存器206的操作,以确保在正确的时间将寄存器206的值提供给第二数据变换元件204。
图3示出了被配置成计算(a+b)的第三实例数据变换流水线300。数据变换流水线300包括两个处理元件302、304、寄存器306和控制逻辑308。第一处理元件302是被配置成计算输入a和b的总和的数据变换元件。第二处理元件304不是数据变换元件,因为它不变换对其输入的数据,它仅存储寄存器306的值(即,数据变换元件302的输出)y,直到下游部件请求结果为止。控制逻辑308控制寄存器306的操作,以确保在正确的时间将寄存器306的值提供给第二处理元件304。
生成实现数据变换流水线的硬件通常包括:开发对实现数据变换流水线的集成电路的结构和/或功能进行描述的硬件设计;验证或测试硬件设计,以确保根据该设计制造的集成电路会按预期运行;以及一旦经过验证,便根据硬件设计在集成电路制造***中制造集成电路。
在一些情况下,验证数据变换流水线的硬件设计可以包括:验证硬件设计的实例化对数据变换产生正确的结果,而不管何时执行变换。具体而言,因为数据变换流水线可以在重置后的任何时间(例如,重置后立即,或者例如,重置后的10,000个周期)执行变换,并且延迟量可变(例如,由于停止或中断),所以重要的是要验证不管何时执行变换,硬件设计的实例化都会为变换产生正确的结果。
在其他情况下,验证数据变换流水线的硬件设计可以包括验证硬件设计的实例化总是(不管何时执行变换)产生与另一相似的硬件设计的实例化相同的结果。这种类型的验证可以被称为验证硬件设计在功能上是等同的。当修改原始硬件设计时可以使用这种类型的验证,以验证经修改的硬件设计会产生与原始硬件设计相同的结果。
可以例如通过形式验证或基于模拟的验证来验证硬件设计。形式验证是使用硬件设计的数学模型和数学推理来验证硬件设计的***性过程。相反,基于模拟的验证是这样的过程,其中通过将刺激应用于硬件设计的实例化并监视硬件设计的实例化响应于该刺激的输出来测试硬件设计。
在形式验证中,将硬件设计转换成数学模型(例如,状态转换***或流程图),从而提供硬件设计的实例化,可以测试该实例化以验证硬件设计,使用数学逻辑,使用精确的语法或使用具有精确的数学语法和语义的语言,来表示要验证的形式特性。
使用形式验证工具(即能够执行硬件设计形式验证的软件工具)来执行形式验证。形式验证工具包括但不限于:形式等同检查器,诸如OneSpin 360DVTM、Mentor GraphicsFormal Verification、VC Formal、EnterpriseVerifier和以及形式特性检查器(也可以称为形式模型检查器),诸如HECTOR,以及其他逻辑等同检查器(LEC)和顺序逻辑等同检查器(SLEC))。一些形式验证工具(在本文中可称为算术形式验证工具)擅长验证与数据变换相关的特性(诸如算术运算),但通常只能用于在有限的时间段内证明特性。其他验证工具(在本文中可称为无限时间形式验证工具)擅长在无限时间段内验证特性,但不擅长验证与数据变换(诸如算术运算)相关的特性。
因为现有的形式验证工具擅长验证与数据变换相关的特性或者擅长在无限时间内验证特性,而不是两者兼而有之,所以很难使用现有的形式验证工具在无限时间内验证数据变换的硬件设计的实例化的输出。因此,很难使用现有的形式验证工具来验证数据变换流水线的硬件设计的实例化始终会正确地变换数据,或者始终会以与另一种硬件设计的实例化相同的方式来变换数据,而不管何时执行变换。
下面描述的实施方案仅以实例的方式提供,并且不限制克服了验证数据变换流水线的硬件设计的已知方法和***的任何或所有缺点的实现方案。
发明内容
提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
本文描述了用于经由形式验证来验证数据变换流水线的硬件设计的方法和***,所述数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,其中,所述形式验证在对所述形式验证工具必须执行的数据变换计算进行简化的一个或多个条件下执行。在一个实施方案中,通过以下操作来验证所述数据变换流水线的所述硬件设计:在所述数据变换流水线之间的基本上等同的数据变换元件响应于相同输入产生相同输出的约束下,针对预定交易集合,形式验证所述硬件设计的实例化的输出产生与另一数据变换流水线的硬件设计的实例化相同的输出。在另一实施方案中,通过以下操作来验证所述数据变换流水线的所述硬件设计:用功能元件替换所述硬件设计中的所述数据变换元件中的一个或多个,所述功能元件被形式验证工具视为其组合输入的未评估函数,使得在形式验证期间,所述功能元件针对相同的输入会产生相同的输出;并且形式验证针对交易集合中的每个交易,所述数据变换流水线的经修改的硬件设计的实例化产生一个或多个输出的集合,所述一个或多个输出的集合与该交易的一个或多个输出的参考集合匹配。
第一方面提供了一种验证第一数据变换流水线的硬件设计的计算机实现的方法,所述第一数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,所述方法包括在一个或多个处理器处执行以下操作:针对预定交易集合,形式验证所述第一数据变换流水线的所述硬件设计的实例化的一个或多个输出的集合与第二数据变换流水线的硬件设计的实例化的一个或多个输出的集合匹配,其中,所述第二数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,所述第二数据变换流水线的数据变换元件基本上等同于所述第一数据变换流水线的数据变换元件;其中,在约束下执行所述形式验证,所述约束是所述第一数据变换流水线和所述第二数据变换流水线的所述基本上等同的数据变换元件响应于相同的输入产生相同的输出。
第二方面提供了一种用于验证第一数据变换流水线的硬件设计的***,所述数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,所述***包括:存储器,所述存储器被配置成存储:所述第一数据变换流水线的所述硬件设计;第二数据变换流水线的硬件设计,所述第二数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,所述第二数据变换流水线的数据变换元件基本上等同于所述第一数据变换流水线的数据变换元件;以及形式验证工具;以及一个或多个处理器,所述一个或多个处理器被配置成:针对预定交易集合,使用所述形式验证工具形式验证所述第一数据变换流水线的所述硬件设计的实例化的一个或多个输出的集合与所述第二数据变换流水线的硬件设计的实例化的一个或多个输出的集合匹配;其中,在约束下执行所述形式验证,所述约束是所述第一数据变换流水线和所述第二数据变换流水线的所述基本上等同的数据变换元件响应于相同的输入产生相同的输出。
数据变换流水线的硬件设计在集成电路制造***中被处理时将所述***配置成制造所述数据变换流水线。可以提供一种非暂时性计算机可读存储介质,其上存储有数据变换流水线的硬件设计,所述数据变换流水线的硬件设计在集成电路制造***中被处理时致使所述集成电路制造***制造体现所述数据变换流水线的集成电路。
可以提供一种集成电路制造***,所述集成电路制造***包括:非暂时性计算机可读存储介质,其上存储有用于数据变换流水线的硬件设计;布局处理***,所述布局处理***被配置成处理计算机可读描述以生成体现所述数据变换流水线的集成电路的电路布局描述;以及集成电路生成***,所述集成电路生成***被配置成根据所述电路布局描述制造体现所述数据变换流水线的集成电路。
可以提供用于执行如本文所述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,当在计算机***处执行时,所述计算机可读指令使计算机***执行如本文所述的方法。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是第一实例数据变换流水线的框图;
图2是第二实例数据变换流水线的框图;
图3是第三实例数据变换流水线的框图;
图4是验证数据变换流水线的硬件设计的第一实例方法的流程图;
图5是第一数据变换流水线和第二数据变换流水线的第一实例集合的框图,其中,第一数据变换流水线和第二数据变换流水线是不同的;
图6是第一数据变换流水线和第二数据变换流水线的第二实例集合的框图,其中,第一数据变换流水线和第二数据变换流水线是相同的;
图7是验证数据变换流水线的硬件设计的实例***的框图;
图8是实施图4的方法的形式验证步骤以验证数据变换流水线的硬件设计在功能上等同于另一数据变换流水线的硬件设计的实例方法的流程图;
图9是实施图4的方法的形式验证步骤以验证数据变换流水线的硬件设计一致的实例方法的流程图;
图10是第一数据变换流水线和第二数据变换流水线的第一实例集合的框图,其中,数据变换元件已经被黑匣子元件替换;
图11是第一数据变换流水线和第二数据变换流水线的第二实例集合的框图,其中,数据变换元件已经被黑匣子元件替换;
图12是验证数据变换流水线的硬件设计的第二实例方法的流程图;
图13是根据图12的方法验证数据变换流水线的硬件设计的实例***的框图;
图14是示例性基于计算的装置的框图;
图15是其中可实现数据变换流水线的实例计算机***的框图;以及
图16是可用于生成体现数据变换流水线的集成电路的实例集成电路制造***的框图。
附图示出了各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同附图标记来指示相似特征。
具体实施方式
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于所属领域的技术人员而言将是显而易见的。仅通过示例的方式描述实施方案。
“硬件设计”是对集成电路的结构和/或功能的描述,其在集成电路制造***中被处理时致使集成电路制造***生成由硬件设计描述的集成电路。例如,如下面参考图16更详细地描述的那样,当在集成电路制造***中处理硬件设计时,集成电路制造***可以通过将硬件设计合成到硅中或者通过将配置数据加载到现场可编程门阵列(FPGA)中来生成集成电路。
可以以高级硬件描述语言(HDL),例如但不限于寄存器传输级(RTL)语言,来实现硬件设计。寄存器传输级语言的示例包括但不限于VHDL(VHSIC硬件描述语言)和对于本领域技术人员显而易见的是,可以使用其他高级硬件描述语言,诸如专有高级硬件描述语言。
“硬件设计的实例化”是由硬件设计定义的硬件和/或硬件功能的表示。硬件设计的实例化包括但不限于:硬件设计的仿真模型,其模拟由硬件设计定义的硬件的行为;硬件设计的合成版本(例如网表);硬件设计的硬件实现(例如集成电路或现场可编程门阵列(FPGA));以及由形式验证工具生成的硬件设计的数学模型。硬件设计的实例化以可以被测试以验证硬件设计的形式来体现硬件设计。
因此,数据变换流水线的硬件设计是对实现数据变换流水线的集成电路的结构和/或功能的描述,其在集成电路制造***处被处理时会致使集成电路制造***生成实现数据变换流水线的集成电路。如上所述,数据变换流水线包括至少一个数据变换元件,所述数据变换元件被配置成对一个或多个输入的集合执行数据变换。因此,数据变换流水线的硬件设计包括对流水线的每个数据变换元件的结构和/或功能的描述。
如上所述,因为现有的形式验证工具通常擅长验证与数据变换相关的特性(诸如算术运算)或者擅长在无限时间内验证特性,但不能两者兼而有之,所以很难使用现有的形式验证工具在无限时间内验证数据变换的硬件设计的实例化的输出——例如,验证数据变换流水线的硬件设计的实例化始终会产生交易的正确结果,而不管重置之后何时执行变换;或者验证数据变换流水线的硬件设计的实例化始终会产生与另一数据变换流水线的硬件设计的实例化相同的结果。
例如,擅长验证数据变换的形式验证工具(即算术形式验证工具)可以能够形式验证数据变换流水线的实例化在一个或多个预定条件(例如没有停止或中断)下会产生从流水线的预定状态(例如重置之后出现的状态)对输入的集合执行的数据变换(即执行的交易)的正确结果。例如,这可以通过以下操作来实现:经由算术形式验证工具形式验证由硬件设计的实例化在一个或多个预定条件下从预定状态(例如重置之后出现的状态)对输入的集合执行的变换的结果与被配置成模拟数据变换流水线的行为的测试台部件的结果相匹配。因为形式验证工具验证输出匹配所有可能的输入集合,所以这验证了硬件设计的实例化会针对任何输入的集合产生正确的结果。然而,这仅验证了当从预定状态(例如从重置产生的状态)执行变换时,硬件设计的实例化会产生正确的结果。如果从流水线的另一状态(例如,第一次交易和停止之后出现的状态或两次交易和两次停止之后出现的状态)对输入的集合执行变换,则无法验证硬件设计的实例化会产生正确的结果。
为了验证硬件设计的实例化会产生从另一状态(例如重置之后的一段时间内出现的状态)对输入的集合执行的变换(即执行的交易)的正确结果,可以将形式验证工具配置成验证由硬件设计的实例化从另一预定状态(例如在重置、第一次交易和停止之后出现的状态)对输入的集合执行的变换的结果。虽然验证从流水线的多个状态执行的变换的结果会增加遇到模糊错误或漏洞的机会,但这仍仅验证硬件设计的实例化会产生从被明确测试的预定状态(例如从重置出现的状态,以及在对输入的集合执行第一次交易和停止之后出现的状态)而不是从流水线的任何其他状态执行的变换(即执行的交易)的正确结果。
然而,发明人认识到,如果已经例如经由算术形式验证工具验证,硬件设计的实例化在预定状态集合(例如,一旦开始计算则不停止或中断)下会产生从预定状态(例如重置之后出现的状态)对任何输入集合执行的变换的正确结果,验证硬件设计的实例化始终会产生对任何输入集合执行的变换的正确结果而不管何时执行变换可以通过来完成,验证从预定状态(例如从重置出现的状态)对输入集合的硬件设计的实例化执行的变换的结果与由硬件设计的实例化从任何其他状态执行的相同变换(即相同输入)的结果匹配。
然而,这不能简单地通过以下操作来完成:使用擅长在无限时间内证明特性的形式验证工具(即无限时间形式验证工具)验证由输入集合的硬件设计的实例化从预定状态执行的变换的结果与由相同输入集合的硬件设计的实例化从任何其他流水线状态执行的变换的结果匹配。这是因为擅长在无限时间内验证特性的形式验证工具通常不能有效地验证数据变换的结果,因此不能验证数据变换元件的输出。
因为可以使用算术形式验证工具来验证流水线将产生从预定状态对任何输入集合执行的变换的正确结果,所以剩下要验证的是不管何时对输入的集合执行变换,流水线都会产生相同的结果。换句话说,剩下要验证的是流水线一致。为了验证这一点,没有必要验证由硬件设计的实例化从流水线的任何其他状态执行的变换的结果是绝对正确的,仅是在给定相同输入的情况下,流水线将产生相同的输出。换句话说,剩下要验证的是,当为流水线提供相同的输入时,不管流水线的状态如何,数据都将以相同的方式移动通过流水线——即流水线的控制逻辑如预期的那样起作用。因此,剩下要验证的是,当流水线执行相同的交易(即处理相同的输入)时,它将产生相同的输出。
因此,本文描述了经由形式验证来验证数据变换流水线的硬件设计的方法和***,该数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,其中,形式验证在一个或多个条件或约束下执行,所述条件或约束简化了形式验证工具必须执行的数据变换计算,从而增加了形式验证收敛的可能性。所述一个或多个条件或约束被配置成限制对数据变换流水线的控制,但不限制数据变换流水线的输入。
关于图4至图11描述了验证第一数据变换流水线的硬件设计的第一实施方案。在该实施方案中,该方法包括针对预定交易集合形式验证第一数据变换流水线的硬件设计的实例化的输出与第二数据变换流水线的硬件设计的实例化的输出匹配。第二数据变换流水线还包括对一个或多个输入执行数据变换的一个或多个数据变换元件。第二数据变换流水线的数据变换元件中的至少一个基本上等同于第一数据变换流水线的数据变换元件。在约束下执行形式验证,所述约束是第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换响应于相同的输入产生相同的输出。
在第二数据变换流水线与第一数据变换流水线不同的情况下,则该方法可用于验证第一数据变换和第二数据变换的硬件设计在功能上是等同的。相反,在第二数据变换流水线与第一数据变换流水线相同的情况下,该方法可用于验证硬件设计一致(即,硬件设计的实例化会响应于相同的输入生成相同的输出,而不管何时处理输入)。注意,这并不能验证硬件设计的实例化始终会产生正确的结果,仅是验证硬件设计的实例化会产生相同的结果。然而,此验证与对硬件设计的实例化针对从流水线的特定状态对任何输入集合执行的数据变换产生正确结果的验证(如上所述,其可以使用算术形式验证工具来执行)的组合详尽地验证了硬件设计的实例化始终会产生变换的正确结果。
下面参考图12至图13描述验证数据变换流水线的硬件设计的第二实施方案。在该实施方案中,该方法包括:生成数据变换流水线的硬件设计的版本,其中,将所选的数据变换元件的集合替换为或链接到功能元件,该功能元件被形式验证工具视为其输入的未评估函数,使得在形式验证期间功能元件将针对相同的输入产生相同的输出;以及形式验证数据变换流水线的硬件设计的版本的实例化针对任何交易都会产生一个或多个输出的集合,所述一个或多个输出的集合与该交易的一个或多个输出的参考集合相匹配。
在某些情况下,验证数据变换流水线的硬件设计的版本的实例化对于任何交易都会产生与该交易的一个或多个输出的参考集合匹配的一个或多个输出的集合可以包括形式验证硬件设计的版本的实例化一致(即,不管何时执行交易,它始终会对交易产生相同的结果)。在其他情况下,验证数据变换流水线的硬件数据的版本的实例化对于任何交易都会产生与该交易的一个或多个输出的参考集合匹配的一个或多个输出的集合可以包括形式验证硬件设计的版本的实例化在功能上等同于另一数据变换流水线的硬件设计的实例化。
现在参考图4,其示出了验证第一数据变换流水线的硬件设计的第一实例方法400。方法400可以由基于计算的设备,例如但不限于以下参考图14描述的基于计算的设备1400,来实现。例如,可能存在其上存储有计算机可读指令的计算机可读存储介质,计算机可读指令在基于计算的装置处执行时使基于计算的装置执行图4的方法400。
方法400开始于框402,其中,针对预定交易集合,形式验证第一数据变换流水线的硬件设计的实例化的输出与第二数据变换流水线的硬件设计的实例化的输出匹配(即,两个数据变换流水线的硬件设计在功能上等同)。如上所述,数据变换流水线包括至少一个数据变换元件,该数据变换元件被配置成对一组一个或多个输入执行数据变换,但是它还可以包括其他类型的处理元件。因此,第一数据变换流水线和第二数据变换流水线中的每一个包括至少一个数据变换元件,所述数据变换元件对一个或多个输入执行数据变换(例如算术运算)。
第二数据变换流水线的数据变换元件中的至少一个与第一数据变换流水线的至少一个数据变换元件基本上等同或在功能上等同。如果两个数据变换元件响应于相同的输入产生相同的输出,则称它们为基本上等同。例如,第一数据变换流水线和第二数据变换流水线可各自包括被配置成计算两个输入的乘积的数据变换元件。在第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件对响应于相同的输入产生相同的输出的约束下执行形式验证。例如,如果第一数据变换流水线中的数据变换元件A与第二数据变换流水线中的数据变换元件B基本上等同,则在数据变换元件A和数据变换元件B响应于相同的输入产生相同的输出的约束下执行形式验证。
一个数据变换流水线中的数据变换元件可以基本上等同于其他数据变换流水线中的多于一个的数据变换元件。在这些情况下,形式验证可以在约束或约束集合下执行,即每对基本上等同的数据变换元件对响应于相同的输入产生相同的输出。例如,如果第一数据变换流水线包括数据变换元件A和B,并且第二数据变换流水线包括数据变换元件C和D。数据变换元件A可以基本上等同于数据变换元件C和D,并且数据变换元件B也可以基本上等同于数据变换元件C和D。在此实例中,形式验证可以在以下约束下执行:(i)数据变换元件A和C响应于相同的输入产生相同的输出;(ii)数据变换元件A和D响应相同的输入产生相同的输出;(iii)数据变换元件B和C响应于相同的输入产生相同的输出;以及(iv)数据变换元件B和D响应于相同的输入产生相同的输出。
在本文描述的实例中,假定基本上等同的数据变换元件是组合的(即,没有存储的数据),但是,本文描述的方法和技术也可以应用于基本上等同的数据变换元件是非组合的情况,只要非组合元件的状态也被考虑在内。
在某些情况下,第一数据变换流水线和第二数据变换流水线可以不同。换句话说,在某些情况下,第一数据变换流水线和第二数据变换流水线的硬件设计是不同的硬件设计。如以下关于图8更详细地描述的,验证两种不同的硬件设计的实例化的输出可用于验证两种硬件设计的实例化在功能上是等同的(即,它们始终会响应于相同的输入产生相同的输出)。在其他情况下,第一数据变换流水线和第二数据变换流水线可以相同。换句话说,在某些情况下,第一数据变换流水线和第二数据变换流水线的硬件设计可以是同一硬件设计的两个副本。如以下关于图9更详细地描述的,验证同一硬件设计的两个副本的实例化的输出可以用于验证硬件设计的实例化是一致的(即,其始终会响应于相同的输入产生相同的输出,而不管何时处理输入(即,不管处理输入时流水线的状态))。
形式验证第一数据变换流水线和第二数据变换流水线的硬件设计的实例化输出与预定交易集合匹配可以包括:生成一个或多个要验证的断言;将一个或多个断言链接到第一数据变换流水线和第二数据变换流水线的硬件设计;以及使用形式验证工具来形式验证一个或多个断言对于第一数据变换流水线的硬件设计是正确(或成立)的,并输出一个或多个信号来指示一个或多个断言是否已被成功验证。
断言是表明期望特定的特性适用于硬件设计(即总是为真)的语句。形式为“assert property[evaluable expression]”的断言被称为“断言”“evaluableexpression”所指定的特性。如果对于任何有效输入,对于硬件设计而言,断言的特性(例如,evaluable expression(可计算表达式))被求值为假,则硬件设计将无法按预期运行,并且会出现错误。例如,在示例断言“assert propertya=b”中;如果在任何时候a都不等于b,则表明硬件设计将无法按预期运行,并且会出现错误。
断言用于以形式且明确的方式捕获硬件设计的所需的时间和组合行为。然后可以验证硬件设计,以确定其符合断言所捕获的要求。因为断言逐周期捕获实例化行为,所以可以将它们用于验证中间行为。
断言通常以断言语言表示。断言语言,也可以称为特性语言,以简洁,明确的方式捕获跨多个硬件设计周期(例如,时钟周期)的硬件设计行为。传统的硬件描述语言(HDL)(例如RTL语言)具有捕获单个周期行为的能力,但它们过于详细,无法在更高层次上描述特性。具体地说,断言语言提供了以简洁的方式表达时间关系和复杂硬件设计行为的手段。断言语言包括但不限于***Verilog断言(SVA)、特性规范语言(PSL)、尖锐断言库(IAL)、Synopsys OVA(OpenVera断言)、符号轨迹评估(STE)、SystemC验证(SCV)、0-In、Specman和OpenVera库(OVL)。
为了验证第一硬件设计和第二硬件设计的实例化针对预定交易集合会产生相同的输出,可以生成一个或多个断言,如果被证明是正确的,则可以确定第一数据变换流水线的硬件设计的实例化在执行预定交易集合中的任何一个时的输出与第二数据变换流水线的硬件设计的实例化在执行相同交易时的输出匹配。所述一个或多个断言可以比较由两个实例化从相同的状态执行交易的输出。例如,如下面关于图8所描述的,当该方法用于验证两个不同的硬件设计的实例化始终产生相同的输出时,所述一个或多个断言可以被配置成当它们从相同的状态执行相同的交易时对硬件设计的实例化的输出进行比较。相反,如下面关于图9所描述的,当该方法用于验证硬件设计的实例化一致(即,其始终会产生交易的相同输出,而不管何时执行交易)时,可以将所述一个或多个断言配置成对硬件设计的实例化在从不同的状态执行相同的交易时的输出进行比较。例如,可以将第二数据变换流水线的硬件设计的实例化在从预定流水线状态执行交易时的输出与第一数据变换流水线的硬件设计的实例化在从任何其他流水线状态执行相同交易时的输出进行比较。下面介绍在这些情况下可以使用的实例断言。
一旦生成一个或多个断言,就将所述一个或多个断言链接到第一数据变换流水线和第二数据变换流水线的硬件设计。可以通过以下操作将所述一个或多个断言链接到第一数据变换流水线和第二数据变换流水线的硬件设计:将所述一个或多个断言合并到一个硬件设计中并绑定或链接硬件设计;或将所述一个或多个断言绑定到第一数据变换流水线和第二数据变换流水线的硬件设计。具体而言,可以将所述一个或多个断言绑定到第一数据变换流水线和第二数据变换流水线的硬件设计的相关信号,以确定实例化何时执行了一个预定交易,并确定任何预定交易被执行时输出是否匹配。
一旦将所述一个或多个断言链接到第一数据变换流水线和第二数据变换流水线的硬件设计,则将第一数据变换流水线和第二数据变换流水线的硬件设计、所述一个或多个断言以及绑定加载到形式验证工具中,并且将形式验证工具配置成验证所述一个或多个断言对于第一数据变换流水线的硬件设计为真。
通过搜索硬件设计的实例化的整个可到达状态空间(例如状态转换***或流程图)来验证断言,而无需显式遍历所有状态。例如,通过使用二进制决策图(BDDS)或使用基于高级SAT(基于可满足性的有界模型检查)的技术,使用有效的布尔编码对状态进行编码,来完成搜索。在某些情况下,可以使用工具来实现技术,例如但不限于抽象、对称、符号索引和不变量,以提高性能并实现可伸缩性。因为特性的形式验证随着时间推移通过算法详尽地探索所有有效输入值,所以以这种方式验证特性允许针对所有有效状态对特性进行详尽地证明或反证。
如上所述,在图4的方法400中,在一个或多个约束下执行形式验证,所述约束是第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件对响应于相同的输入产生相同的输出。例如,如果第一数据变换流水线和第二数据变换流水线各包括被配置成计算两个输入的乘积的数据变换元件,则可以将这两个数据变换元件视为基本上等同,并且可以在约束下执行形式验证,所述约束是这两个数据变换元件响应于相同的输入会产生相同的输出。发明人认识到,在这样的约束下执行形式验证会大大增加形式验证收敛的可能性(即产生结论性答案,诸如是、断言成立、或否、至少一个断言不成立)。这是因为约束充当提示,可以简化形式验证工具执行的计算。
在某些情况下,约束可以通过一个或多个假设语句来实现。如本领域技术人员已知的,假设语句被形式验证工具解释为对形式验证期间硬件设计的实例化行为的约束。具体而言,当假设某个特性时,形式验证工具会限制输入使得该特性成立。因此,假设定义了一种环境,在该环境中可以验证硬件设计的特性。
如下面更详细描述的,当该方法用于验证两个硬件设计在功能上等同(即,两个硬件设计的实例化始终会响应于相同的输入产生相同的输出)时,假设可以表明无论何时第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件在相同的时间或在相关的时间点接收相同的输入,它们的输出相同。相反,当使用该方法来验证硬件设计一致(即,硬件设计的实例化针对任何交易会产生相同的输出,而不管何时执行交易)时,假设可以表明第二数据变换流水线的基本上等同的数据变换元件是否接收输入集合并产生输出集合作为从预定状态执行的交易的一部分,第一数据变换流水线的基本上等同的数据变换元件是否接收其会产生相同的输出集合的相同的输入集合。在这些情况下,基本上等同的数据变换元件将是等同的。下面结合图8和图9描述在这些情况下可以使用的实例假设。
当使用形式验证工具来验证断言时,形式验证工具可以输出断言是否有效的指示(即,对于所有有效状态或状态序列而言,被断言的特性为真),也可以被称为断言被成功验证。输出可能是“是”,断言有效或已成功验证;“否”,断言无效(即至少针对一个有效状态或状态序列,断言的特性不为真或失败)或尚未成功验证;或形式验证没有结论。形式验证可能是没有结论的,例如,因为运行形式验证工具的基于计算的设备的存储器已用尽,或者因为形式验证工具已确定在预定义的时间段后未取得一定量的进展。
在断言无效或尚未成功验证的情况下,形式验证工具还可以输出信息以指示导致断言的特性失败的硬件设计状态或状态序列。例如,形式验证工具可以输出验证的轨迹,以指示在什么点、状态或状态序列发生了故障。
一旦形式验证完成,则方法400可以结束,或者该方法可以进行到框404。
在框404处,可以确定数据变换流水线的硬件设计的第一版本的验证是否成功。如上所述,当使用形式验证工具来验证用于硬件设计的断言时,形式验证工具可以输出指示该断言是否有效的信号或一组信号(即,所断言的特性对于所有有效状态或状态序列都为真)。在这些情况下,可以基于输出信号来进行关于验证是否成功的确定。
如果确定验证成功(指示硬件设计的实例化如预期的那样工作),则方法400可以进行到框406,其中,制造由硬件设计描述的体现数据变换流水线的集成电路。然而,如果确定对第一数据变换流水线的硬件设计的验证不成功(指示硬件设计中存在错误),则方法400可以进行到框408,其中,修改第一数据变换的硬件设计以纠正意外行为导致的硬件设计错误。一旦修改了硬件设计,就可以重新验证修改后的硬件设计(例如,对于修改后的硬件设计,可以重复框402-408)。
在一些情况下,在执行形式验证之前,第一数据变换流水线和第二数据变换流水线中的至少一个的基本上等同的数据变换元件可以用更简单的逻辑来替换。具体而言,因为形式验证是在验证第一数据变换流水线和第二数据变换流水线的硬件设计实例化的输出匹配,而并非验证两者都是“正确的”,所以重要的是通过流水线的控制逻辑移动数据是正确的,因而可以用更简单的逻辑替换基本上等同的数据变换元件。具体而言,第一和/或第二数据变换流水线的基本上等同的数据变换元件可以被黑匣子化(即,用黑匣子元件替换)。
例如,图5和图6示出了实例第一数据变换流水线和第二数据变换流水线502、504、602、604,其每个都包括多个数据变换元件506、508、510、512、606、608、610、612。在图5的实例中,第一数据变换流水线和第二数据变换流水线502、504是不同的,但是包括基本上等同的数据变换元件506、510。因此,在该实例中,可以将基本上等同的数据变换元件506、510中的一个或两个黑匣子化(即,用黑匣子元件替换)。相反,在图6的实例中,第一数据变换流水线和第二数据变换流水线602、604是相同的,因此第一数据变换流水线602的数据变换元件606、608中的每一个在第二数据变换流水线604中具有相同的数据变换元件610、612。因此,该实例中的所有数据变换元件都具有基本上等同的数据变换元件。因此,在图6的实例中,任何或所有数据变换元件606、608、610、612可以被黑匣子化(即,用黑匣子元件替换)。
用黑匣子元件替换硬件设计中的部件的过程被称为黑匣子处理部件。如本领域技术人员所知,当硬件设计中的部件被黑匣子化时,它会切出驱动部件输出的逻辑,并使输出“自由”,这意味着输出可以取任何值,而与输入无关。因此,即使黑匣子元件在两个不同的时间接收到相同的输入值,它也可以生成不同的输出值。黑匣子处理可以替代地被描述为用截止点或止动点替换驱动数据变换元件的输出的逻辑。
因为对数据变换流水线的数据变换元件进行黑匣子处理会从流水线中移除变换逻辑(无限时间形式验证工具通常无法处理),所以,被黑匣子化的数据变换元件越多,形式验证会收敛的可能性就越高(即产生结论性的答案)。这是因为对数据变换元件进行黑匣子处理意味着形式验证工具不必计算该数据变换元件的结果。然而,被黑匣子化的数据变换元件越多,漏报的可能性就越高(即,即使硬件设计中没有错误形式验证也会失败的可能性就越高)。这是因为移除某些信号的驱动逻辑可能意味着硬件设计的一个或多个以前无法达到的状态变为可以达到。其中某些状态可能会致使形式验证失败,但在实际的硬件设计中无法达到,因此这是假失败(即漏报)。
具体而言,如果没有将基本上等同的数据变换元件黑匣子化,则形式验证比在没有约束的情况下执行的形式验证更可能收敛但较不可能收敛,如果第一数据变换流水线和/或第二数据变换流水线的基本上等同的数据变换元件被黑匣子化。但是,漏报的可能性为零。相反,如果第一数据变换流水线和第二数据变换流水线两者的基本上等同的数据变换元件都被黑匣子化,则形式验证的收敛可能性将大大提高。这是因为形式验证工具执行的数据变换较少。然而,漏报的可能性增加。这是因为现在可能出现漏报(即,无法达到的状态现在可以达到)。然而,如果仅对第一数据变换流水线和第二数据变换流水线中的一个的基本上等同的数据变换元件黑匣子化——即,如果对第一数据变换流水线的基本上等同的数据变换元件黑匣子化并且不对第二数据变换流水线的基本上等同的数据变换元件黑匣子化,或者如果对第二数据变换流水线的基本上等同的数据变换元件黑匣子化并且不对第一数据变换流水线的基本上等同的数据变换元件黑匣子化——则形式验证更可能收敛,如果没有数据变换元件被黑匣子化,但较不可能收敛,如果两个数据变换流水线的基本上等同的数据变换元件被黑匣子化。然而,漏报的可能性较低,如果两个数据变换流水线的基本上等同的数据变换元件被黑匣子化。这被总结在下面示出的表1中。
表1
然而,本文所述的验证方法的一个重要好处是,不管对哪个或多少个数据变换元件黑匣子化,都不会出现误报(即,如果硬件设计中存在错误,则形式验证不会成功,因为第一数据变换流水线会致使硬件设计的实例化以错误的方式起作用)。
如果第一数据变换元件的基本上等同的数据变换元件被黑匣子化,则约束控制替换对应的数据变换元件的黑匣子元件的输出。这是因为控制黑匣子元件的输出的约束仍基于输入以相同的方式被控制(即,基本上等同的数据变换元件的基于对其的输入的输出信号,如果基本上等同的数据变换元件被黑匣子元件替换,输出(即输出信号))。这导致黑匣子元件以确定性方式起作用。在没有约束的情况下,第一数据变换流水线的任何黑匣子化元件的输出都是“自由”的,这意味着它们可以独立于输入取任何值,从而可以对相同的输入生成不同的输出。因此,如果第一数据变换元件的黑匣子元件的输出未受到约束的控制,则形式验证可能会失败,因为不可避免地会出现硬件设计的实例化接收相同的流水线输入但产生不同的输出的情况,即使设计被恰当地配置。
如果第一数据变换流水线的数据变换元件未被黑匣子化并且第二数据变换流水线的数据变换元件被黑匣子化(即表1中的方法2),并且将第二数据变换流水线的较早交易与第一数据变换流水线的较晚交易进行比较,则称假设向后传播。具体而言,当不存在满足直到并包括周期n的假设但周期n中的断言失败时,形式验证工具认为在一个或多个约束(例如假设)下评估的断言在周期n中是有效的。这意味着,过去不可避免地导致假设失败的任何状态现在(或在过去)都将被排除。这可以致使假设向后传播。
如果使用的验证方法存在漏报的可能性(即,对一个或多个数据变换元件黑匣子化的方法),则限制或约束可以在一个或多个黑匣子元件的输出上被替换,以确保黑匣子元件不会生成不期望的输出或具有不期望特性的输出(即不能由对应的数据变换元件有效生成的输出)。例如,可以通过生成假设并将该假设链接到第一数据变换流水线的硬件设计,对黑匣子元件施加这样的限制。例如,如果数据变换元件被配置成生成输入的平方,则下游部件可以预期数据变换元件输出大于或等于零的数字。在该实例中,可以为黑匣子元件生成假设,该假设替换该数据变换元件,该数据变换元件表明黑匣子元件的输出大于或等于零。类似地,如果数据变换元件被配置成输出输入的sine,则可以为黑匣子元件生成假设,该假设替换该数据变换元件,该数据变换元件表明黑匣子元件的输出介于-1与1两者之间。通常,在形式验证期间不会假定某个特性直到其被证明是真实的。例如,在生成假设之前——该假设表明数据变换元件(或替换它的黑匣子元件)的输出等于或大于零——通常会(通过形式验证或其他验证方式)验证数据变换元件的输出始终大于或等于零。对于本领域技术人员显而易见的是,这些仅是实例,并且可以对黑匣子元件的输出施加其他限制或约束。在某些情况下,如果无法通过对黑匣子元件的输出施加约束或限制来移除与特定验证方法相关联的误报,则该特定方法可能不被视为可行的验证方法。
现在参考图7,其示出了根据第一实施方案的验证第一数据变换流水线的硬件设计的实例***700。***700可以由一个或多个基于计算的设备,例如如下面参考图14所描述的基于计算的设备1400,来实现。例如,图7的***700的一个或多个部件可以被实现为计算机可读指令,当由基于计算的设备执行时,指令使得基于计算的设备执行下面描述的部件的功能。
***700包括第一数据变换流水线702的硬件设计,第二数据变换流水线704的硬件设计,一个或多个假设706,一个或多个形式断言708以及形式验证工具710。
第一数据变换流水线702和第二数据变换流水线704的硬件设计分别包括对第一数据变换流水线或第二数据变换流水线的结构和/或功能的描述。第一数据变换流水线和第二数据变换流水线各自包括一个或多个数据变换元件,所述一个或多个数据变换元件被配置成对一个或多个输入的集合执行数据变换。第一数据变换流水线和第二数据变换流水线旨在在功能上是等同的(即,它们旨在响应于相同的流水线输入产生相同的流水线输出)。第一数据变换流水线和第二数据变换流水线可以相同,也可以不同。在任何一种情况下,第一数据变换流水线中至少有一个数据变换元件基本上等同于第二数据变换流水线中的数据变换元件。在一些情况下,第一和/或第二数据变换元件的基本上等同的数据变换元件可以被黑匣子化。上面描述了将第一数据变换流水线和第二数据变换流水线中的一个或两个的基本上等同的数据变换元件进行黑匣子处理的优缺点。
一个或多个假设706约束第一数据变换流水线的基本上等同的数据变换元件(或对应的黑匣子元件)的行为,以与第二数据变换流水线的对应的数据变换元件相同的方式起作用。换句话说,所述一个或多个假设约束了第一数据变换流水线的基本上等同的数据变换元件的行为,使得当第一数据变换流水线的基本上等同的数据变换元件接收与第二个数据变换流水线的其对应的数据变换元件相同的输入时产生相同的输出。将所述一个或多个假设链接到第一数据变换流水线和第二数据变换流水线的硬件设计,使得第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件的输入被链接。
如以下更详细描述的,当***用于验证两个硬件设计在功能上等同(即,硬件设计的实例化始终会响应于相同的输入产生相同的输出)时,假设可以表明无论何时第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件在相同的时间或在相关的时间点接收相同的输入,它们的输出是相同的。相反,当***用于验证单个硬件设计是否一致(即,不管何时执行交易,硬件设计的实例化将对任何交易产生相同的输出)时,假设可以表明如果第二数据变换流水线的基本上等同的数据变换元件接收一个或多个输入的集合并产生一个或多个输出的集合作为从预定状态执行的交易的一部分,如果第一数据变换流水线的基本上等同的数据变换元件在任何时间接收相同的输入集合,其会产生相同的输出集合。在这些情况下,因为两个硬件设计相同,所以基本上等同的数据变换元件将相同。
断言708包括一个或多个断言,如果对于第一数据变换流水线的硬件设计被验证为是真实的,则其证明第一硬件设计和第二硬件设计的实例化会针对预定交易集合产生相同的输出。如本领域技术人员所知,断言是预期特定特性适用于硬件设计的语句(即,始终为真)。如以下更详细地描述的,当***700被用于验证两个不同的硬件设计的实例化总是产生相同的输出时,可以将所述一个或多个断言被配置成比较硬件设计的实例化在从相同的状态执行相同的交易时的输出。相反,当***700用于验证硬件设计的实例化一致(即,不管何时执行交易,将始终产生交易的相同输出)时,可以将所述一个或多个断言配置成将第二数据变换流水线的硬件设计的实例化在从预定流水线状态执行交易时的输出与第一数据变换流水线的硬件设计的实例化在从任何其他流水线状态执行相同交易时的输出进行比较。下面介绍在这些情况下可以使用的实例断言。
将所述一个或多个断言708链接到第一数据变换流水线和第二数据变换流水线的硬件设计,使得所述一个或多个断言被连接到硬件设计的相关信号,以便能够评估被断言的特性。如上所述,可以通过将所述一个或多个断言708绑定到第一数据变换流水线和第二数据变换流水线的硬件设计来将所述一个或多个断言链接到硬件设计。
如上所述,形式验证工具710是能够对硬件设计进行形式验证的软件工具。因为形式验证理想地是在无限时间内验证所述一个或多个断言,所以使用无限时间形式验证工具可能是有利的。
在形式验证工具710中加载第一数据变换流水线702的硬件设计,第二数据变换流水线704的硬件设计,所述一个或多个假设706,所述一个或多个断言708和绑定(如果有)。然后将形式验证工具710配置成形式验证所述一个或多个断言对于第一数据变换流水线的硬件设计是真实的。
当使用形式验证工具710来验证断言时,形式验证工具710可以输出断言是否有效的指示(即,对于所有有效状态或状态序列而言,被断言的特性为真),也可以被称为断言被成功验证。输出可能是“是”,断言有效或已成功验证;“否”,断言无效(即至少针对一个有效状态或状态序列,它不为真或失败)或尚未成功验证;或形式验证没有结论。形式验证可能是没有结论的,例如,因为运行形式验证工具710的基于计算的设备的存储器已用尽,或者因为形式验证工具710已确定在预定义的时间段后未取得一定量的进展。
当断言无效或尚未被成功验证时,形式验证工具710还可以输出信息以指示导致断言失败的硬件设计的状态或状态序列。例如,形式验证工具710可以输出验证的轨迹,以指示在什么点、状态或状态序列发生了故障。
现在参考图8,其示出了实现图4的方法400的步骤402的实例方法800,此时,方法400用于验证第一数据变换流水线的硬件设计在功能上等同于第二数据变换流水线的硬件设计(即,第一数据变换流水线的硬件设计的实例化和第二数据变换流水线的硬件设计的实例化始终会响应于相同的输入产生相同的输出)。
在图8的方法800中,第一数据变换流水线和第二数据变换流水线是不同的(即,它们不相同),但是在第一数据变换流水线和第二数据变换流水线中至少有一对基本上等同的数据变换元件。具体而言,第一数据变换流水线的至少一个数据变换元件基本上等同于第二数据变换流水线的至少一个数据变换元件。如果两个数据变换元件相同或在功能上等同,则它们“基本上等同”。如果两个数据变换元件始终响应于相同的输入产生相同的输出,则它们在功能上是等同的。第一数据变换流水线和第二数据变换流水线中的基本上等同的数据变换元件对可以手动地(例如,由人)标识或者可以自动地标识。例如,可以将基于计算的装置(诸如图14的基于计算的装置1400)配置成通过标识第一数据变换流水线和第二数据变换流水线的硬件设计中的相同代码段来自动标识基本上等同的数据变换元件。
在图8的方法800中,通过形式验证第一数据变换流水线和第二数据变换流水线的硬件设计的实例化对于任何流水线集合输入会产生相同的输出来验证第一数据变换流水线和第二数据变换流水线的硬件设计的功能等同。在约束下执行形式验证,所述约束是第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件响应于相同的输入产生相同的输出。如上所述,发明人认识到,在这种约束下执行形式验证可以显著地提高形式验证会收敛的可能性。
方法800开始于框802,其中,使用形式验证工具形式验证第一数据变换流水线和第二数据变换流水线的硬件设计的实例化对于任何流水线输入集合会产生相同的输出集合。
形式验证第一数据变换流水线和第二数据变换流水线的硬件设计的实例化对于任何流水线输入集合会产生相同的输出集合可以包括生成一个或多个断言并形式验证所述一个或多个断言。例如,在某些情况下,第一数据变换流水线和第二数据变换流水线的硬件设计的实例化的输入可以被绑在一起,使得在形式验证期间实例化接收相同的输入。在这些情况下,可能会产生断言,表明对于任何输入集合,对应的输出集合是相同的。
在第一数据变换流水线和第二数据变换流水线被配置成以相同数量的周期(例如,第一数据变换流水线和第二数据变换流水线均被配置成以5个周期处理交易)处理交易(即流水线输入集合)的情况下,断言可以简单地表明第一数据变换流水线和第二数据变换流水线的硬件设计的实例化的输出是相同的。以下是实例SV断言,其可以在这种情况下使用,其中first_pipe_output是第一数据变换流水线的硬件设计的实例化的输出,而second_pipe_output是第二数据变换流水线的硬件设计的实例化的输出:
assert_output:assert property(first_pipe_output==second_pipe_output)
对于本领域技术人员将显而易见的是,该断言表明,第一数据变换流水线的硬件设计的实例化的输出(first_pipe_output)等于用于第二数据变换流水线的硬件设计的实例化的输出(second_pipe_output)。形式验证工具通过在断言不真实(即输出不匹配)时确定是否存在第一数据变换流水线的硬件设计的实例化的状态来验证断言。如果没有这样的状态,则称断言被成功验证。因此,如果存在第一数据变换流水线的硬件设计的实例化的至少一个状态,而硬件设计的实例化的输出不匹配,则该断言会失败。
在第一数据变换流水线和第二数据变换流水线未被配置成以相同数量的周期(例如,第一数据变换流水线可以被配置成以5个周期处理交易,而第二数据变换流水线可以被配置成以7个周期处理交易)处理交易(即流水线输入集合)的情况下,断言考虑了输出之间的延迟或偏移。例如,以下是实例SV断言,其可以在以下情况下被使用:在第二数据变换流水线产生第二交易的输出的n个周期之后,第一数据变换流水线产生交易的输出,其中,first_pipe_output是第一数据变换流水线的硬件设计的实例化的输出,而second_pipe_output是第二数据变换流水线的硬件设计的实例化的输出。如本领域技术人员所知,$past(a,b)是SV运算符,其返回a,b个周期之前(或过去的b个周期)的值。
assert_output:assert property(first_pipe_output==$past(second_pipe_output,n))
对于本领域技术人员将显而易见的是,该断言表明,第一数据变换流水线的硬件设计的实例化的输出(first_pipe_output)等于n个周期之前的第二数据变换流水线的硬件设计的实例化的输出(second_pipe_output)。
形式验证在约束下执行,所述约束是如果第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件同时或在相关的时间点接收到相同的输入,则它们会响应于输入产生相同的输出。例如,图5的实例第一数据变换流水线502和第二数据变换流水线504可以包括一对基本上等同的数据变换元件506和510。在该实例中,可以在约束下执行形式验证,所述约束是数据变换元件506和数据变换元件510同时或在相关时间点接收相同的输入时产生相同的输出。在存在多对基本上等同的数据变换元件的情况下,可以将约束应用于基本上等同的数据变换元件对的任何组合。例如,约束可以应用于:仅一对基本上等同的数据变换元件;多于一对的基本上等同的数据变换元件;或所有成对的基本上等同的数据变换元件。
在某些情况下,一对或多对基本上等同的数据变换元件可以是时间对齐的。当两个基本上等同的数据变换元件对于相同的交易会在同一时间(即,在同一周期中)接收相同的输入时,被称为“时间对齐”。在这些情况下,与那些基本上等同的数据变换元件对有关的约束可以是当基本上等同的数据变换元件在它们产生相同输出的同时接收相同的输入时。在某些情况下,一对或多对基本上等同的数据变换元件可以是时间偏移的。当两个数据变换元件对于相同的交易在相关的时间点(例如,间隔固定的周期数)会接收相同的输入时,被称为“时间偏移”。例如,数据变换元件510可以总是在数据变换元件506接收到特定交易的输入两个周期之后接收该交易的输入。在这些情况下,与那些基本上等同的数据变换元件对相关的约束可以是,当基本上等同的数据变换元件在相关的时间点(例如,间隔固定的周期数)接收到相同的输入时,它们会产生相同的输出。在某些情况下,一对或多对基本上等同的数据变换元件对可能没有固定的时间关系,但是可能会出现有限的偏移集合。例如,基本上等同的数据变换元件可以偏移5、7和9个周期中的一个。在这些情况下,与那些基本上等同的数据变换对有关的约束可以是当基本上等同的数据变换元件在相关时间点的预定集合中的一个接收到相同的输入时(例如,周期偏移的预定集合中的一个处),它们会产生相同的输出。
如上所述,约束可以被实现为一个或多个假设语句。以下示出针对图5的基本上等同的数据变换元件506、510用SV编写的实例假设,其中,基本上等同的数据变换元件506、510是时间对齐的(即,它们将同时接收到相同交易的输入)。在该实例假设中,input_DTE_first_pipe是第一数据变换流水线502的数据变换元件(DTE)506的输入,input_DTE_second_pipe是第二数据变换流水线的数据变换元件(DTE)510的输入,output_DTE_first_pipe是第一数据变换流水线502的数据变换元件(DTE)506的输出,output_DTE_second_pipe是第二数据变换流水线的数据变换元件(DTE)510的输出。
assume property((input_DTE_first_pipe==input_DTE_second_pipe)|->(output_DTE_first_pipe==output_DTE_second_pipe));
如本领域技术人员将理解的,该实例假设假定,如果第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件506、510的输入是相同的(input_DTE_first_pipe==input_DTE_second_pipe),那么第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件506、510的对应输出是相同的((output_DTE_first_pipe==output_DTE_second_pipe))。
测试表明,在这种约束下执行形式验证会增加形式验证会收敛的可能性。一旦形式验证完成,方法800就结束。
在一些情况下,在执行框802的形式验证之前,可以执行框804至812中的一个或多个。例如,在执行框802的形式验证之前,可以在框804处标识第一数据变换流水线和第二数据变换流水线中的潜在的基本上等同的数据变换元件对的列表。第一数据变换流水线和第二数据变换流水线中的潜在的基本上等同的数据变换元件对可以手动地(例如,由人)标识或可以自动地标识。例如,可以将基于计算的装置(诸如图14的基于计算的装置1400)配置成通过标识第一数据变换流水线和第二数据变换流水线的硬件设计中的相同代码段来自动标识基本上等同的数据变换元件。一旦标识出潜在的基本上等同的数据变换元件对的列表,方法800就可以进行到框806。
在框806处,确定在框804中标识的基本上等同的数据变换元件的任何潜在对是否不相同(即,在各个硬件设计中不是由相同的代码形成或由相同的代码定义)。如果确定至少一对基本上等同的数据变换元件不相同,则方法800可以进行到框808,否则方法800可以直接进行到框802,其中,基本上等同的数据变换元件对的潜在列表用作第一数据变换流水线的硬件设计的形式验证中的基本上等同的数据变换元件对的列表。
在框808处,在框804中标识的至少一对基本上等同的数据变换元件不相同的情况下,则针对每一对不相同的基本上等同的数据变换元件验证基本上等同的数据变换元件在功能上是等同的。验证一对数据变换元件在功能上等同可以包括形式验证(例如,通过形式验证一个或多个断言)两个数据变换元件始终响应于相同的输入产生相同的输出。一旦完成对不同数据变换元件对的功能等同的验证,方法800就进行到框810。
在框810处,确定框808中的验证是否成功。如果所有验证都成功,则方法800直接进行到框802,其中,潜在的基本上等同的数据变换元件对的列表用作第一数据变换流水线的硬件设计的形式验证中的基本上等同的数据变换元件对的列表。然而,如果框808中的验证中的至少一个不成功,则方法800进行到框812,其中,潜在的基本上等同的数据变换元件对的列表被更新以排除框808中的验证不成功所针对的任何对。然后,方法800进行到框802,其中,在对第一数据变换流水线的硬件设计的形式验证中使用潜在的基本上等同的数据变换元件对的更新列表。这样,约束(例如假设)将仅施加于相同或已被证明在功能上等同的数据变换元件对。这是因为,在形式验证期间,除非被证明是正确的,否则不能安全地假设两个不相同的数据变换元件会响应于相同的输入产生相同的输出。
现在参考图9,其示出了实现图4的方法400的步骤402的实例方法900,此时,方法400用于验证第一数据变换流水线的硬件设计一致(即,硬件设计的实例化始终会对相同的交易(即相同的流水线输入集合)产生相同的结果,而不管何时执行交易)。在该方法900中,第一数据变换流水线和第二数据变换流水线是相同的(即,它们是相同的)。换句话说,在该方法900中,第一数据变换流水线和第二数据变换流水线的硬件设计是同一硬件设计的两个副本。
在图9的方法900中,通过以下操作来验证第一数据变换流水线的硬件设计的一致性:验证数据变换流水线的硬件设计的实例化是否从预定状态执行交易,硬件设计的实例化会产生相同的输出,数据变换流水线的硬件设计的实例化是否从任何其他状态执行相同的交易。这是通过以下操作来完成的:当第二数据变换流水线的硬件设计的实例化从预定流水线状态(即在硬件设计的实例化重置之后出现的状态)执行交易(本文中被称为观察的交易)时,记录流水线的输入和输出以及一个或多个数据变换元件的输入和输出。所记录的数据可以被统称为观察的交易数据。然后形式验证,如果第一数据变换流水线的硬件设计的实例化执行观察的交易,则它会产生记录的流水线输出。形式验证工具将验证从任何状态执行观察的交易时,第一数据变换流水线的硬件设计的实例化的输出与每个可能的观察的交易(即每个可能的输入集合)的记录的流水线输出匹配。这验证了对于任何观察的交易(即,对于任何流水线输入集合),不管何时执行观察的交易,硬件设计的实例化都会针对观察的交易产生相同的输出。
方法900在框902处开始,其中,生成捕获模块的硬件设计。将捕获模块配置成捕获第二数据变换流水线的观察的交易数据。观察的交易数据包括:观察的交易(即从流水线的预定状态执行的交易)的流水线输入和输出的记录;以及来自观察的交易的一个或多个数据变换元件的输入和输出的记录。在数据变换元件的输出表示流水线输出的情况下,那么流水线输出可以不与数据变换元件的输入和输出分开记录,而可以从相关数据变换元件的输出中得出。类似地,在一个或多个数据变换元件的输入表示流水线输入的情况下,那么流水线输入可以不与数据变换元件的输入和输出分开记录。在某些情况下,可以将捕获模块配置成将输入和输出记录在一个或多个存储元件(例如一个或多个寄存器)中。
因此,捕获模块的硬件设计定义了逻辑的功能和结构,所述逻辑被配置成监视第二数据变换流水线的硬件设计的实例化的至少一个数据变换元件(或对应的黑匣子元件)的输入和输出信号,并且在一个或多个存储元件(例如,一个或多个寄存器)中存储从流水线的预定状态执行的交易的每个输入和输出信号的值。换句话说,将该逻辑配置成捕获由第二数据变换流水线的硬件设计的实例化从流水线的预定状态执行的交易的至少一个数据变换元件(或对应的黑匣子元件)的输入和输出。
诸如,图1的实例数据变换流水线100被配置成计算八个输入的总和(a0+a1+a2+a3+a4+a5+a6+a7)。图1的数据变换流水线100包括单个数据变换元件102,其被配置成输出两个输入的总和。为了执行交易(计算八个输入的总和),在八个周期中使用数据变换元件102——在这八个周期中的每个周期中,数据变换元件102接收两个输入——一个新的输入值和一个代表先前输入的总和的输入——并输出两个输入的总和。因此,针对从预定状态执行的交易捕获第二数据变换流水线的硬件设计的实例化的数据变换元件102的输入和输出信号包括捕获从预定状态开始的八个连续周期的数据变换元件102的输入和输出信号(假设没有停止或其他扩展计算的事件)。在这种情况下,因为流水线的输入(a0,a1,a2,a3,a4,a5,a6,a7)是数据变换元件102的输入的子集,并且流水线输出(y7)等于数据变换元件102的一个输出,所以流水线输入和输出可以从为数据变换元件记录的输入和输出中得出,而不需要单独存储或记录。
类似地,图2的实例数据变换流水线200被配置成计算(a+b)*c。图2的实例数据变换流水线200包括两个数据变换元件——被配置成计算输入a和b的总和的第一数据变换元件202,以及被配置成计算第一数据变换元件的输出y与输入c的乘积的第二数据变换元件204。因此,为了执行交易,在第一周期中使用数据变换元件202,而在第二周期中使用第二数据变换元件204。因此,针对从预定状态执行的交易捕获第二数据变换流水线的硬件设计的实例化的数据变换元件202、204的输入和输出信号包括:在从预定状态开始的第一周期中捕获第一数据变换元件202的输入和输出信号,以及在从流水线的预定状态开始的第二周期中捕获第二数据变换元件204的输入和输出信号。
在本文中描述的是从流水线的预定状态执行交易的情况下,流水线的“状态”这一表述在本文中用于描述硬件设计的可变元件及其当前值。在某些情况下,预定状态可以是在重置之后立即出现的状态。然而,对于本领域技术人员将显而易见的是,这仅是实例,并且可以将流水线的其他状态用作预定状态。例如,在其他情况下,预定状态可以是在重置、第一次随机交易和停止之后出现的状态。
捕获模块的硬件设计可以例如以硬件描述语言(HDL)(诸如VHDL)来实现,或者可以以基于断言的语言(诸如但不限于SVA)来实现。以下是表示图1的实例数据变换流水线100的硬件设计的捕获模块的硬件设计的实例SVA代码。在该实例中,add.a是数据变换元件102的输入a,add.b是数据变换元件102的输入b,add.y是数据变换元件102的输出y,stored_add_a是用于将输入a的值存储到数据变换元件102的寄存器,stored_add_b是用于将输入b的值存储到数据变换元件102的寄存器,stored_add_y是用于将输出y的值存储到数据变换元件102的寄存器,cycles_since_reset是重置后的周期数,以及MAX_CYCLES是记录数据变换元件102的输入和输出的最大周期数(对于图1的实例数据变换流水线100,当计数从0开始时,其可以为7)。
always@(posedge clk)
begin
if(cycles_since_reset<=MAX_CYCLES)
begin
stored_add_a[cycles_since_reset]<=add.a;
stored_add_b[cycles_since_reset]<=add.b;
stored_add_y[cycles_since_reset]<=add.y;
end
end
对于本领域技术人员将显而易见的是,该实例捕获模块致使数据变换元件102的输入(a和b)和输出(y)在重置之后的每个周期分别被添加到stored_add_a、stored_add_b和stored_add_y中,直到MAX_CYLES(对于图1的实例数据变换流水线100,如果第一周期为周期0,则其可以为7)。表2至4示出了可以存储在寄存器(stored_add_a、stored_add_b和stored_add_y)中的实例,其中,ai、bi、yi表示重置之后周期i中的输入和输出。存储在寄存器中的数据一起形成了观察的交易数据。
表2
表3
表4
一旦生成了捕获模块的硬件设计,方法900就进行到框904。
在框904处,将捕获模块的硬件设计链接到第二数据变换流水线的硬件设计,使得:(i)将捕获模块连接到第二数据变换流水线的适当信号,以便能够监视并获取相关数据变换元件的输入和输出;以及(ii)出于形式验证的目的,将捕获模块的硬件设计和第二数据变换流水线的硬件设计视为一个硬件设计。因此,一旦捕获模块的硬件设计被链接到第二数据变换流水线的硬件设计,当形式验证工具创建第二数据变换流水线的硬件设计的实例时,则其包括捕获模块的实例。
在某些情况下,可以通过将捕获模块的硬件设计合并到第二数据变换流水线的硬件设计中,来将捕获模块的硬件设计链接到第二数据变换流水线的硬件设计。在其他情况下,可以通过将捕获模块绑定到第二数据变换流水线的硬件设计,来将捕获模块的硬件设计链接到第二数据变换流水线的硬件设计。例如,在第二数据变换的硬件设计在VHDL中实现而捕获模块的硬件设计在SV中实现的情况下,可以将VHDL示例绑定到SV示例。一旦将捕获模块的硬件设计链接到第二数据变换流水线的硬件设计,方法900就进行到框906。
在框906处,使用形式验证工具来形式验证,如果第一数据变换流水线的硬件设计的实例化从流水线的任何状态执行观察的交易,则其产生观察的交易数据中记录的流水线输出。如上所述,交易是由流水线的输入定义的。因此,如果第一数据变换流水线的硬件设计的实例化对观察的交易数据中记录的相同流水线输入执行交易,则称其执行观察的交易。例如,由图1的实例数据变换流水线100执行的交易的流水线输入可以是a0、a1、a2、a3、a4、a5、a6和a7。如果观察的交易数据分别为a0、a1、a2、a3、a4、a5、a6和a7记录流水线输入3、4、2、6、8、3、9、10,则形式验证证明如果数据变换流水线的硬件设计的第一版本的实例化从流水线的任何状态分别为a0、a1、a2、a3、a4、a5、a6和a7接收3、4、2、6、8、3、9、10,则第一数据变换流水线的硬件设计的实例化的输出与观察的交易数据中记录的流水线输出匹配。注意,这仅是实例,并且在形式验证期间,形式验证工具将为所有可能的观察的交易(即,为所有可能的流水线输入集合)验证特性。
验证如果第一数据变换流水线的硬件设计的实例化从流水线的任何状态执行观察的交易则其产生观察的交易数据中记录的流水线输出,可以包括生成一个或多个断言以及验证所述一个或多个断言。例如,可以生成断言,该断言确定如果第一数据变换流水线的硬件设计的实例化以与观察的交易数据中记录的流水线输入相同的顺序接收到相同的流水线输入,则其产生观察的交易数据中记录的流水线输出。以下是可以使用的实例SV断言,其中,当第一数据变换流水线的硬件设计的实例化执行观察的交易(即,以与观察的交易数据中记录的相同的顺序处理相同的流水线输入集合)时,expect_watched_output_on_first_pipe为高,并且现在预期已经完成交易并准备输出结果,first_pipe_output是观察的交易的第一数据变换流水线的硬件设计的实例化的输出,并且stored_output是观察的交易数据中记录的流水线输出:
assert_output:assert property(expect_watched_output_on_first_pipe|->(stored_output==first_pipe_output)
对于本领域技术人员将显而易见的是,该断言表明,如果第一数据变换流水线的硬件设计的实例化执行观察的交易,则第一数据变换流水线的硬件设计的实例化的输出等于监视的交易数据中记录的流水线输出。
在约束下执行形式验证,所述约束是如果在观察的交易数据中记录输入和输出的第一数据变换流水线的一个或多个数据变换元件接收到观察的交易数据中记录的输入集合,则该数据变换元件输出记录的输出集合。
如上所述,约束可以被实现为一个或多个假设语句。以下示出针对图1的数据变换流水线100的数据变换元件102用SV编写的实例假设。在该实例假设中,stored_add_a[i]是在第ith个周期中记录在数据变换元件102的观察的交易数据中的第一输入a,stored_add_b[i]是在第ith个周期中记录在数据变换元件102的观察的交易数据中的第二输入b,stored_add_y[i]是在第ith个周期中记录在数据变换元件102的观察的交易数据中的输出y,first_pipe_add_a是第一数据变换流水线的硬件设计的实例化的数据变换元件102的第一输入a,first_pipe_add_b是第一数据变换流水线的硬件设计的实例化的数据变换元件102的第二输入b,first_pipe_add_y是第一数据变换流水线的硬件设计的实例化的数据变换元件102的输出y,并且在该实例中MAX_CYCLES为7。
Generate
for(i=0;i<=MAX_CYCLES;i=i+1)begin:add_assumptions
assume_add:assume property((stored_add_a[i]==first_pipe_add_a)&&(stored_add_b[i]==first_pipe_add_b)|->(stored_add_y[i]==first_pipe_add_y));
end
end
如对于本领域技术人员将显而易见的,该实例假设假定,如果对于任何周期(i)(stored_add_a[i]==first_pipe_add_a)&&(stored_add_b[i]==first_pipe_add_b),第一数据变换流水线的硬件设计的数据变换元件102的第一输入和第二输入与数据变换元件的观察的交易数据中记录的第一输入和第二输入的集合匹配,则第一数据变换流水线的硬件设计的实例化的数据变换元件102的输出等于在该周期(i)(stored_add_y[i]==first_pipe_add_y))中数据变换元件102的观察的交易数据中记录的输出。
测试表明,在这样的约束下执行形式验证会大大增加形式验证会收敛的可能性。一旦形式验证完成,方法900就结束。
如上所述,在一些情况下,在执行框906的形式验证之前,可以将第一数据变换流水线和第二数据变换流水线的基本上等同的数据变换元件中的一个或多个黑匣子化,以提高形式验证会收敛的可能性。因为在图9的方法900中,第一数据变换流水线和第二数据变换流水线是相同的,所以第一数据变换流水线中的每个数据变换元件具有第二数据变换流水线中的相同的数据变换元件。因此,第一数据变换和第二数据变换的所有数据变换元件都“基本上等同于”其他数据变换流水线中的数据变换元件。这意味着,如上所述,只要在形式验证期间约束该数据变换元件或第一数据变换元件中的对应数据变换元件的输出,则第一数据变换流水线或第二数据变换流水线中的任何数据变换元件都可以被黑匣子化。
如上所述,在第一数据变换流水线的数据变换元件被黑匣子化的情况下,对其输出的约束致使黑匣子元件在形式验证期间以确定性方式起作用。如上所述,约束可以通过一个或多个假设语句来实现。如本领域技术人员所知,硬件设计中的假设语句由形式验证工具解释为对形式验证期间硬件设计的实例化的行为的约束。具体而言,当假设某个特性时,形式验证工具会限制输入使得该特性成立。因此,假设定义了一种环境,在该环境中可以验证硬件设计的特性。因此,表明黑匣子元件的输出相对于存储的输入以某种方式起作用的假设有效地致使黑匣子元件在关于存储的输入的形式验证期间以确定性方式起作用。具体而言,假设可以表明,如果黑匣子元件的输入与对应的数据变换元件的观察的交易数据中记录的输入集合匹配,则黑匣子元件的输出就是对应的数据变换元件针对该输入集合记录在观察的交易数据中的输出。这有效地致使黑匣子元件以观察的交易数据中提出的方式来响应观察的交易数据中记录的输入数据。
例如,在第一数据变换流水线1002和第二数据变换流水线1004是数据变换流水线的情况下——诸如图1所示,其包括接收两个输入并输出两个输入之和的单个数据变换元件102——硬件设计中针对每个数据变换流水线1002、1004的数据变换元件102可以用黑匣子元件1006替换,如图10所示,其接收两个输入并生成单个输出。通过对数据变换元件102进行黑匣子处理,从硬件设计中移除了执行加法(a+b)的逻辑。
如上所述,在该实例中,将第二数据变换流水线的硬件设计链接到捕获模块,该捕获模块被配置成从预定状态(假设没有停止或扩展计算的其他事件)捕获第二数据变换流水线的硬件设计的实例化的黑匣子元件1006的输入和输出信号(ai、bi、yi)。然后,形式验证当第一数据变换流水线1002的硬件设计的实例化接收到捕获模块以相同顺序记录的流水线输入时,其产生捕获模块记录的流水线输出。
在约束(例如假设1008)下执行形式验证,所述约束是如果第一数据变换流水线1002的硬件设计的实例化的黑匣子元件1006的输入(a和b)与捕获模块记录的输入集合匹配,则输出(y)等于捕获模块针对该输入集合记录的输出。这有效地致使黑匣子元件1006根据观察的交易数据来起作用。例如,如果观察的交易数据记录第二数据变换流水线1004的硬件设计的实例化的黑匣子元件1006的输入a=2和b=7以及输出y=26,则当第一数据变换流水线1002的硬件设计的实例化的黑匣子元件1006接收输入a=2和b=7时,其会输出y=26。因此,虽然在形式验证期间将第二数据变换流水线的黑匣子元件1006视为具有“自由”输出,但将第一数据变换流水线的黑匣子元件1006在关于该黑匣子元件的存储输入的形式验证期间视为具有确定性输出。
在另一个实例中,其中,第一数据变换流水线1102和第二数据变换流水线1104是数据变换流水线,诸如图2的数据变换流水线200,其包括接收两个输入并输出两个输入之和的第一数据变换元件202,以及接收两个输入并输出两个输入的乘积的第二数据变换元件204,第一数据变换流水线和第二数据变换流水线的硬件设计中的每个数据变换元件202、204可以用对应的黑匣子元件1106、1108替换,如图11所示。具体而言,每个第一数据变换元件202可以用接收两个输入并具有“自由”输出的黑匣子元件1106替换,并且第二数据变换元件204用接收两个输入并具有“自由”输出的黑匣子元件1108替换。通过对数据变换元件202、204进行黑匣子处理,从硬件设计中移除了执行加法(a+b)和乘法(y*c)的逻辑。
如上所述,在该实例中,将第二数据变换流水线的硬件设计链接到捕获模块,该捕获模块被配置成在第一周期中从流水线的预定状态捕获第一黑匣子元件1106的输入和输出信号,并且在第二周期中从流水线的预定状态捕获第二黑匣子元件1108的输入和输出信号。然后,形式验证当第一数据变换流水线1102的硬件设计的实例化接收到捕获模块以相同顺序记录的流水线输入时,其产生捕获模块记录的流水线输出。
在第一约束(例如,假设1110)下执行形式验证,所述第一约束是如果第一数据变换流水线1102的硬件设计的实例化的第一黑匣子元件1106的输入(a和b)与该元件的观察的交易数据中记录的输入集合匹配,则输出(y)等于该元件的观察的交易数据中记录的对应输出;以及在第二约束(例如,假设1112)下执行形式验证,所述第二约束是第一数据变换流水线的硬件设计的实例化的第二黑匣子元件1108的输入(y和c)与该元件的观察的交易数据中记录的输入集合匹配,则输出(z)等于该元件的观察的交易数据中记录的对应输出。这致使第一数据变换流水线1102的硬件设计的实例化中的每个黑匣子元件1106、1108在接收到记录的输入集合时产生记录的输出,否则输出是“自由的”。例如,如果观察的交易数据记录了该数据变换元件的输入4和6的集合以及输出8,则当第一数据变换流水线的硬件设计的实例化中的对应的黑匣子元件接收到输入4和6时,其会输出8。
尽管图9的方法900被描述为利用被测数据变换流水线的硬件设计的两个副本来实现——即第二数据变换流水线的硬件设计的实例化的数据变换元件的输入/输出(即,第一数据变换流水线的硬件设计的第二副本)被记录用于从流水线的预定状态执行的交易,并将其与从流水线的任何状态执行的交易的第一数据变换流水线的硬件设计的实例化的输入/输出(即,第一数据变换流水线的硬件设计的第一副本)进行比较——但是在其他实例中,该方法可以利用被测数据变换流水线的硬件设计的单个副本来实现。在这些情况下,可以首先将硬件设计配置成从预定状态执行交易,并且捕获模块记录设计的实例化的相关数据变换元件的输入/输出;然后,可以将硬件设计重新配置成从任何状态执行交易,并将硬件设计的实例化的相关数据变换元件的输入/输出与记录的输入/输出进行比较。以这种方式,当硬件设计被配置成从预定状态执行交易时,硬件设计充当第二数据变换流水线的硬件设计,并且当硬件设计被配置成从任何状态执行交易时,硬件设计充当第一数据变换流水线的硬件设计,如上面使用的术语第一数据变换流水线和第二数据变换流水线那样。
现在参考图12至13,其描述了验证数据变换流水线的硬件设计的第二实施方案。在该实施方案中,生成数据变换流水线的硬件设计的版本,其中,所选的数据变换元件的集合被替换为或链接到功能元件,该功能元件被形式验证工具视为其输入的未评估函数,使得在形式验证期间,功能元件将响应于相同的输入产生相同的输出;并且形式验证对于交易集合中的每个交易,数据变换流水线的硬件设计的版本的实例化都会产生一个或多个输出的集合,所述一个或多个输出的集合与该交易的一个或多个输出的参考集合相匹配。
在某些情况下,验证对于交易集合中的每个交易,数据变换流水线的硬件设计的版本的实例化都会产生一个或多个输出的集合,所述一个或多个输出的集合与该交易的一个或多个输出的参考集合相匹配,其可以包括形式验证硬件设计的版本的实例化一致(即,不管交易何时执行,它始终会产生交易的相同结果)。在这些情况下,交易的一个或多个输出的参考集合可以是当实例化从流水线的预定状态执行交易时,由数据变换流水线的硬件设计的版本的实例化生成的一个或多个输出的集合。
在其他情况下,验证对于交易集合中的每个交易,数据变换流水线的硬件设计的版本的实例化都会产生一个或多个输出的集合,所述一个或多个输出的集合与该交易的一个或多个输出的参考集合相匹配,其可以包括形式验证硬件设计的版本的实例化在功能上等同于另一数据变换流水线的硬件设计的实例化。其他数据变换流水线包括至少一个数据变换元件,所述至少一个数据变换元件基本上等同于被测数据变换流水线的数据变换元件。在这些情况下,用于交易的一个或多个输出的参考集合可以是当实例化执行交易时,由其他数据变换流水线的硬件设计的版本的实例化生成的一个或多个输出的集合。
现在参考图12,其示出了验证数据变换流水线的硬件设计的第二实例方法1200。方法1200开始于框1202,其中,生成数据变换流水线的硬件设计的版本,其中,流水线的数据变换元件的所选集合(其可以是所有数据变换元件或数据变换元件的子集合)被功能元件替换,所述功能元件被视为数据变换元件的输入的未评估函数。未评估函数F是符号对象,使得这意味着形式验证工具将能够验证F(x)=F(x),但是形式验证工具无法验证F(x)=anything else,这将失败。
被替换为功能元件的特定数据变换元件集合可以基于该方法是否正用于验证数据变换流水线的硬件设计一致,或者该方法是否正用于验证硬件数据变换流水线的硬件设计在功能上等同于另一数据变换流水线的硬件设计。在使用该方法来验证数据变换流水线的硬件设计一致(即,不管何时执行交易,它始终会对交易产生相同的结果)的情况下,则数据变换流水线的数据变换元件的任何组合可以用功能元件替换。相反,在使用该方法来验证数据变换流水线的硬件设计在功能上等同于另一数据变换流水线的硬件设计(即,两个硬件设计的实例化对相同的输入会产生相同的结果)并且其他数据变换流水线的至少一个数据变换基本上等同于被测数据变换流水线的数据变换元件的情况下,则可以用功能元件替换基本上等同的数据变换元件的任何组合。
诸如,为了验证图1的实例数据变换流水线100的硬件设计一致,可以通过用被视为未评估函数F(a,b)=y的功能元件替换数据变换元件102来生成形式验证中使用的硬件设计的版本,使得无论何时接收到a和b的相同集合,输出y将是相同的,但不假设F的其他特性。类似地,为了验证图2的实例数据变换流水线200的硬件设计一致,可以通过用对应的功能元件替换第一数据变换元件202和第二数据变换元件204中的一个或两个来生成用于形式验证的硬件设计的版本。例如,可以用被视为未评估函数F(a,b)=y的功能元件替换第一数据变换元件202,使得无论何时接收到a和b的相同集合,输出y都会是相同的;并且用被视为未评估函数G(y,c)=z的功能元件替换第二数据变换元件204,使得无论何时y的相同集合被接收到,输出z都会是相同的。
相反,为了验证图5的第一实例数据变换流水线502的硬件设计在功能上等同于图5的第二实例数据变换流水线504的硬件设计,其中仅存在一对基本上等同的数据变换元件(即,数据变换元件506、510),仅第一实例数据变换元件的硬件设计中的第一数据变换元件506可以被替换为被视为其输入的未评估函数的功能元件,使得无论何时接收到相同的输入集合,输出都会是相同的。
用功能元件替换数据变换元件意味着,如果在任何时候相同的输入集合通过相同的功能元件,则数据变换流水线应产生相同的结果(假设控制逻辑按预期工作)。
一旦已经生成了数据变换流水线的硬件设计的版本,则方法1200进行到框1204。
在框1204处,形式验证对于交易集合中的每个交易,在框1202中生成的数据变换流水线的硬件设计的版本的实例化产生与一个或多个输出的参考集合匹配的一个或多个输出的集合。交易集合可以包括可以由数据变换流水线执行的所有有效交易,或者可以仅包括可以由数据变换流水线执行的有效交易的子集。
在某些情况下,形式验证对于交易集合中的每个交易,数据变换流水线的硬件设计的版本的实例化都会产生与该交易的一个或多个输出的参考集合匹配的一个或多个输出的集合,可以包括形式验证数据变换流水线的硬件设计的版本的实例化是一致的(即,数据变换流水线的硬件设计的版本的实例化针对相同的交易会产生相同的结果(或输出),而不管何时执行交易(即,不管执行交易时流水线的状态))。在这些情况下,交易的一个或多个输出的参考集合可以是当实例从流水线的预定状态执行交易时由数据变换流水线的硬件设计的版本的实例化生成的一个或多个输出的集合。如上所述,通过交易的输入来定义交易。因此,如果数据变换流水线的硬件设计的版本的实例化处理相同的输入集合,则将其称为执行相同的交易。例如,图1的实例数据变换流水线100的交易的输入是a0、a1、a2、a3、a4、a5、a6和a7。在该实例中,如果数据变换流水线的硬件设计的版本的实例化从流水线的一个状态(即从重置出现的状态)针对a0、a1、a2、a3、a4、a5、a6、a7=3、4、2、6、8、3、9、10执行交易并从流水线的另一状态针对a0、a1、a2、a3、a4、a5、a6、a7=3、4、2、6、8、3、9、10执行交易,则将其称为执行相同的交易。
形式验证数据变换流水线的硬件设计的版本的实例化一致可以包括:将数据变换流水线从预定状态执行交易时数据变换流水线的硬件设计的版本的实例化的输出与数据变换流水线从任何状态执行交易时数据变换流水线的硬件设计的版本的实例化的输出进行比较。这可以使用数据变换的硬件设计的版本的两个副本或数据变换流水线的硬件设计的版本的单个副本来实现。例如,形式验证数据变换流水线的硬件设计的版本的实例化一致可以包括:当相同的交易由两个实例化执行时,形式验证被配置成从预定状态执行交易的硬件设计的版本的第一副本的实例化的输出与被配置成从任何状态执行交易的硬件设计的版本的第二副本的实例化的输出相匹配。可选地,形式验证数据变换流水线的硬件设计的版本的实例化一致可以包括:首先将数据变换流水线的硬件设计的版本配置成从预定状态执行交易,并记录硬件设计的版本的实例化的输出;然后将数据变换流水线的硬件设计的版本配置成从任何状态执行交易,并将硬件设计的版本的实例化的输出与记录的输出进行比较。
在其他情况下,针对交易集合中的每个交易,形式验证数据变换流水线的硬件设计的版本的实例化都会产生一个或多个输出的集合,所述一个或多个输出的集合与该交易的一个或多个输出的参考集合相匹配,可以包括:形式验证硬件设计的版本的实例化在功能上等同于另一数据变换流水线的硬件设计的版本的实例化。其他数据变换流水线包括至少一个数据变换元件,所述至少一个数据变换元件基本上等同于被测数据变换流水线的数据变换元件。在这些情况下,形式验证可以将数据变换流水线的硬件设计的版本的输出与其他数据变化流水线的硬件设计的版本的输出进行比较,其中,其他数据变换流水线中的基本上等同的数据变换元件中的一个或多个已被替换为功能元件,所述功能元件用于替换被测数据变换流水线中的基本上等同的数据变换元件。因此,在这些情况下,交易的一个或多个输出的参考集合可以是由其他数据变换流水线的硬件设计的版本的实例化在所述实例化执行交易时生成的一个或多个输出的集合。
在任何一种情况下,针对多个交易中的每个交易,形式验证数据变换流水线的硬件设计的版本的实例化都会产生一个或多个输出的集合,所述一个或多个输出的集合与该交易的一个或多个输出的参考集合相匹配,可以包括:生成一个或多个断言,将所述一个或多个断言链接到数据变换流水线的硬件设计的版本,使用形式验证工具形式验证所述一个或多个断言对于数据变换流水线的硬件设计的版本为真(或适用),以及输出一个或多个信号以指示所述一个或多个断言是否被成功验证。
一旦形式验证完成,方法1200可以结束,或者方法1200可以进行到框1206。
在框1206处,可以确定数据变换流水线的硬件设计的版本的验证是否成功。如上所述,当使用形式验证工具来验证用于硬件设计的断言时,形式验证工具可以输出指示该断言是否有效的信号或一组信号(即,所断言的特性对于所有有效状态或状态序列都为真)。在这些情况下,对验证是否成功的确定可以基于形式验证工具的输出信号。
如果确定成功完成了对数据变换流水线的硬件设计的版本的验证——表明硬件设计的实例化将为任何交易产生与该交易的一个或多个输出的参考集合相匹配的一个或多个输出的集合(即,实例化是一致的,或者实例化在功能上等同于另一设计的实例化)——则方法1200可以进行到框1210,其中,制造由硬件设计描述的体现数据变换流水线的集成电路。然而,如果确定对数据变换流水线的硬件设计的版本的验证不成功——表明在硬件设计中存在错误——则方法1200可以进行到框1208,其中,修改硬件设计以校正硬件设计中由意外行为引起的错误。一旦修改了硬件设计,就可以重新验证修改后的硬件设计(例如,对于修改后的硬件设计,可以重复框1202-1210)。
图12的验证方法1200比上面描述的图4的用于验证数据变换流水线的硬件设计一致的验证方法400简单得多,因为它不涉及存储观察的交易数据,也不涉及根据观察的交易数据控制数据变换元件或黑匣子元件的输出。然而,图12的验证方法1200通常仅对以上述方式解释这种功能元件的形式验证工具才可行。具体而言,图12的验证方法1200通常仅对于将这些功能元件解释为其输入的未评估函数的形式验证工具才可行。
在某些情况下,可以对功能元件中的一个或多个的输出施加约束或限制,以确保功能元件不会生成不期望的输出或具有不期望的特性的输出(即,不能由对应的数据变换元件有效生成的输出)。例如,可以通过在数据变换流水线的硬件设计的版本中添加假设来对功能元件施加这种限制。例如,如果将数据变换元件配置成生成输入的平方,则数据变换元件无法有效输出负数。因此,下游部件可以预期数据变换元件输出大于或等于零的数字。在该实例中,可以为功能元件生成替换该数据变换元件的假设,该假设表明功能元件的输出大于或等于零。类似地,如果将数据变换元件配置成输出输入的sine,则可以为功能元件生成替换该数据变换元件的假设,该假设表明功能元件的输出在-1和1之间。对于本领域技术人员将显而易见的是,这些仅是实例,并且可以对功能元件施加其他约束或限制。
现在参考图13,其示出了根据第二实施方案的验证数据变换流水线的硬件设计的实例***1300,其中,验证了数据变换流水线的硬件设计的版本——其中流水线的一个或多个数据变换元件被功能元件替换——会针对交易集合的每个交易生成与该交易的一个或多个输出的参考集合相匹配的一个或多个输出的集合。
***1300包括:数据变换流水线的硬件设计的版本1302,其中,一个或多个数据变换元件已经被功能元件替换;一个或多个形式断言1304;以及形式验证工具1306。在使用***1300来验证不同数据变换流水线的两个硬件设计在功能上等同的情况下,***1300还可以包括其他数据变换流水线的硬件设计的版本,其中,一个或多个数据变换元件已被功能元件替换。一般而言,将形式验证工具1306配置成形式验证一个或多个断言1304对于数据变换流水线的硬件设计的版本1302为真,以验证数据变换流水线的实例化针对任何交易会生成与该交易的一个或多个输出的参考集合相匹配的一个或多个输出的集合。
数据变换流水线的硬件设计的版本1302是这样的数据变换流水线的硬件设计的版本:其中,对数据变换流水线的数据变换元件的选定集合中的每一个的结构和/或功能的描述已经被替换为对功能元件的结构和/或功能的描述,所述功能元件被形式验证工具视为其输入的未评估函数。换句话说,数据变换流水线的硬件设计的版本描述了初始硬件设计的数据变换流水线,只是数据变换元件的选定集合中的每一个已经被替换为对应的功能元件。
类似地,如果存在其他数据变换流水线的硬件设计版本,则所述其他数据变换流水线的硬件设计的该版本是所述其他数据变换流水线的硬件设计的这样的版本:其中,对数据变换流水线的数据变换元件的选定集合中的每一个的结构和/或功能的描述已经被替换为对功能元件的结构和/或功能的描述,所述功能元件被形式验证工具视为其输入的未评估函数。在这些情况下,被功能元件替换的数据变换元件的选定集合是基本上等同的数据变换元件(即,在其他数据变换流水线中具有基本上等同的数据变换元件的数据变换元件),并且每对基本上等同的数据变换元件被替换为相同的功能元件。
断言1304包括一个或多个形式断言,如果对数据变换流水线的硬件设计的版本验证为真,则该断言可确定数据变换的硬件设计的实例化针对任何交易产生与该交易的一个或多个输出的参考集合相匹配的一个或多个输出的集合。如上所述,断言是预期特定特性对于硬件设计成立(即,始终为真)的声明。
在数据变换流水线的硬件设计的版本的实例化针对任何交易产生与该交易的一个或多个输出的参考集合相匹配的一个或多个输出的集合的情况下,如果数据变换流水线的硬件设计的版本的实例化对于对相同输入执行的变换会产生相同的输出,而不管何时执行交易(即,不管执行变化时流水线的状态),则一个或多个断言1304可以断言如果数据变换流水线的硬件设计的版本的实例化执行其曾经见过的交易,则输出是相同的。
在数据变换流水线的硬件设计的版本的实例化针对任何交易产生与一个或多个输出的参考集合相匹配的一个或多个输出的集合的情况下,如果数据变换流水线的硬件设计的版本的实例化在功能上等同于另一数据变换流水线的硬件设计的实例化,则所述一个或多个断言1304可以断言两个硬件设计的版本的实例化的输出始终是相同的。
将所述一个或多个断言1304链接到数据变换流水线的硬件设计的版本1302、1308,使得所述一个或多个断言连接到数据变换流水线的硬件设计的版本的相关信号以能够评估断言的特性。如上所述,可以通过以下操作将所述一个或多个断言链接到硬件设计的版本:将所述一个或多个断言合并到数据变换流水线的硬件设计的版本中,或者将所述一个或多个断言1304绑定到数据变换流水线的硬件设计的版本。
形式验证工具1306是能够对硬件设计执行形式验证的软件工具。因为形式验证理想地在无限时间内验证断言,所以使用无限时间形式验证工具可能是有利的。
将数据变换流水线的硬件设计的版本1302、1308;一个或多个断言1304;以及绑定(如果有)加载到形式验证工具1306中。然后,将形式验证工具1306配置成针对数据变换流水线的硬件设计的版本形式验证所述一个或多个断言1304为真。
如上所述,形式验证工具1306可以输出信息,以指示是否成功验证了断言和/或是否一个或多个断言没有被成功验证,从而指示导致断言失败的硬件设计的状态或状态序列。
尽管图12和图13的方法1200和***1300被描述为包括:生成数据变换的硬件设计的版本(其中,至少一个数据变换元件被替换为功能元件),然后针对交易集合中的每个交易形式验证硬件设计的版本的实例化的输出的集合与该交易的输出的参考集合相匹配,但在其他实例中,取代用功能元件替换数据变换元件,可以通过将数据变换元件链接到功能元件来生成硬件设计的版本,使得在形式验证期间,功能元件提供有关数据变换元件的输出的提示。以这种方式,功能元件以与图4至图11的方法和***的约束相同的方式起作用。具体而言,形式验证工具可以通过避免使用数据变换元件的全部复杂性来使用功能元件抽象来简化形式验证,不管所验证的特性不依赖于数据变换的细节,而仅取决于它始终会响应于相同的输入给出相同的输出这一事实。对于确实依赖于数据变换细节的其他特性,此抽象可能无法帮助验证,但是可以将数据变换的其他特性(例如,平方仅产生正输出)施加给功能元件(例如,作为一个或多个假设)以提高收敛性。在某些情况下,可能需要数据变换的全部细节来进行验证,而功能元件抽象将不提供任何帮助,但这是非常罕见的。
在其他实例中,可以组合使用功能元件的两种使用来验证数据变换流水线的硬件设计。特别地,在一些实例中,可以将一个或多个数据变换元件链接到功能元件,使得该功能元件在形式验证期间提供有关数据变换元件的输出的提示;并且一个或多个其他数据变换元件可以用功能元件替换。
此外,尽管图4至图11的方法和***以及图12和图13的方法和***在上面被描述为分离且不同的,但在其他实例中,两种方法的组合可以用于验证数据变换流水线的硬件设计。特别地,在其他实例中,可以通过针对交易的预定集合形式验证第一数据变换流水线的硬件设计的实例化的一个或多个输出的集合与第二数据变换流水线的硬件设计的实例化的一个或多个输出的集合相匹配来验证第一数据变换流水线的硬件设计,其中,(i)在约束下执行形式验证,所述约束是第一数据变换流水线和第二数据变换流水线的一对基本上等同的数据变换元件响应于相同的输入产生相同的输出;以及(ii)第一数据变换流水线和第二数据变换流水线的另一对基本上等同的数据变换元件可以在形式验证之前被替换为或链接到功能元件。在这些实例中,如上所述,在形式验证之前,可以用黑匣子元件替换被约束的一对基本上等同的数据变换元件中的一个或多个。
图14示出了示例性基于计算的设备1400的各种部件,该设备可以被实现为任何形式的计算和/或电子设备,并且在该设备中可以实现本文描述的方法和***的实施方案。
基于计算的装置1400包括:一个或多个处理器1402,其可以是微处理器;控制器或任何其他合适类型的处理器,用于处理计算机可执行指令以控制装置的操作,以便验证数据变换流水线的硬件设计。在一些实例中,例如,在使用片上***架构的情况下,处理器1402可以在硬件(而不是软件或固件)中包括一个或多个固定的功能块(也被称为加速器),其实现验证数据变换流水线的硬件设计的方法的一部分。可以在基于计算的设备上提供包括操作***1404的平台软件或任何其他合适的平台软件,以使诸如形式验证工具之类的应用软件能够在该设备上执行。
可以使用可由基于计算的装置1400访问的任何计算机可读介质来提供计算机可执行指令。计算机可读介质可以包括例如计算机存储介质,诸如存储器1406和通信介质。诸如存储器1406之类的计算机存储介质(即非暂时性机器可读介质)包括以用于存储诸如计算机可读指令、数据结构或程序模块或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存存储器或其他存储技术、CD-ROM、数字多功能盘(DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储装置,或可用于存储信息以供计算装置访问的任何其他非传输介质。相反,通信介质可以在诸如载波之类的调制数据信号或其他传输机制中体现计算机可读指令、数据结构、程序模块或其他数据。如本文所定义,计算机存储介质不包括通信介质。尽管在基于计算的设备1400内示出了计算机存储介质(即,非暂时性机器可读介质,例如存储器1406),但是应当理解,存储器可以是分布式的或位于远程的,并且可以经由网络或其他通信链路(例如,使用通信接口1408)来访问。
基于计算的装置1400还包括输入/输出控制器1410,该输入/输出控制器被布置为将显示信息输出到显示装置1412,该显示装置可以与基于计算的装置1400分离或成一体。显示信息可以提供图形用户界面。输入/输出控制器1410还被布置为接收和处理来自一个或多个装置(例如,用户输入装置1414(例如,鼠标或键盘))的输入。该用户输入可以用于发起验证。在一个实施方案中,如果显示装置1412是触敏显示装置,则其也可以充当用户输入装置1414。输入/输出控制器1410还可以将数据输出到除显示装置之外的装置,例如本地连接的打印装置(图14中未示出)。
图15示出其中可以实现本文描述的任何数据变换流水线的计算机***。计算机***包括CPU 1502、GPU 1504、存储器1506和其他装置1514,例如显示器1516、扬声器1518及相机1520。在GPU 1504上实现数据变换流水线1510(诸如但不限于以上参照图1至图3描述的任何数据变换流水线100、200或300)。在其他实例中,数据变换流水线1510可以在CPU1502上实现。计算机***的组件可通过通信总线1522彼此通信。
一般来说,上文所述的功能、方法、技术或部件中的任一个可以在软件、固件、硬件(例如,固定逻辑电路***)或其任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方案的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并可以由机器存取的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机***的处理器执行由所述代码指定的任务。
处理器、计算机或计算机***可以是任何种类的设备、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上***、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机***可以包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式(即硬件设计)的计算机可读程序代码,当在集成电路制造***中进行处理(即运行)时,该计算机可读程序代码将该***配置成制造包括本文所述的任何设备(例如,数据变换流水线)的装置(例如,处理器或其他基于计算的装置)。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造***中制造如本文所述的数据变换流水线的方法。此外,可以提供一种集成电路定义数据集(例如,硬件设计),当在集成电路制造***中进行处理时,该集成电路定义数据集使得制造数据变换流水线的方法得以执行。
集成电路定义数据集(例如,硬件设计)可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包含作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机***上处理,该计算机***被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机***处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机***配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将参考图15描述在集成电路制造***处处理集成电路定义数据集(例如,硬件设计)以便将***配置成制造数据变换流水线的实例。
图16示出了集成电路(IC)制造***1602的实例,其被配置成制造如本文任一实例中所述的数据变换流水线。特别地,IC制造***1602包括布局处理***1604和集成电路生成***1606。IC制造***1602被配置成接收IC定义数据集(诸如,定义如本文任何实例中描述的数据变换流水线的硬件设计)、处理IC定义数据集以及根据IC定义数据集来生成IC(例如,其体现如本文任何实例中所述的数据变换流水线)。通过对IC定义数据集的处理,将IC制造***1602配置成制造体现如本文任何实例中描述的数据变换流水线的集成电路。
布局处理***1604被配置为接收和处理IC定义数据集(例如,硬件设计)以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理***1604已经确定电路布局时,其可将电路布局定义输出到IC生成***1606。电路布局定义可以是例如电路布局描述。
如所属领域中已知,IC生成***1606根据电路布局定义来生成IC。举例来说,IC生成***1606可实施生成IC的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成***1606的电路布局定义可呈计算机可读代码的形式,IC生成***1606可使用所述计算机可读代码来形成用于生成IC的合适掩码。
由IC制造***1602执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造***1602可以是分布式***,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他实例中,集成电路定义数据集在集成电路制造***处的处理可以将***配置成制造其中IC定义数据集不进行处理以便确定电路布局的数据变换流水线。举例来说,集成电路定义数据集可以定义例如FPGA的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将IC制造***配置成(例如,通过将配置数据加载到FPGA)生成具有所述定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造***中处理时,集成电路制造定义数据集可以使集成电路制造***生成如本文中描述的设备。举例来说,通过集成电路制造定义数据集,以上文关于图16描述的方式对集成电路制造***的配置,可制造出如本文中所描述的装置。
在一些示例中,集成电路定义数据集可以包含在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图16中展示的示例中,IC生成***可由集成电路定义数据集进一步被配置成在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实施方式相比,在本申请中阐述的概念在设备、装置、模块和/或***中(以及在本文中实施的方法中)的实施方式可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类设备、装置、模块和***(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或***的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和***的物理实施方式的改进(例如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (32)
1.一种验证第一数据变换流水线的硬件设计的计算机实现的方法(400),所述第一数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,所述方法(400)包括在一个或多个处理器处执行以下操作:
针对预定交易集合,形式验证所述第一数据变换流水线的所述硬件设计的实例化的一个或多个输出的集合与第二数据变换流水线的硬件设计的实例化的一个或多个输出的集合匹配,其中,所述第二数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,所述第二数据变换流水线的数据变换元件功能上等同于所述第一数据变换流水线的数据变换元件(402);
其中,在约束下执行所述形式验证,所述约束是如果所述第一数据变换流水线和所述第二数据变换流水线的所述功能上等同的数据变换元件接收到相同的输入,则所述第一数据变换流水线和所述第二数据变换流水线的所述功能上等同的数据变换元件产生相同的输出。
2.如权利要求1所述的方法(400),其中,所述第一数据变换流水线和所述第二数据变换流水线是不同的。
3.如权利要求2所述的方法(400),其中,所述预定交易集合包括从所述第一数据变换流水线的有效状态执行的有效交易。
4.如权利要求2或权利要求3所述的方法(400),其中,所述约束在于:当所述第一数据变换流水线和所述第二数据变换流水线的所述硬件设计的实例化中的所述功能上等同的数据变换元件同时接收相同的输入时,它们响应于所述输入产生一个或多个输出的相同集合。
5.如权利要求2或权利要求3所述的方法(400),其中,所述约束在于:当所述第一数据变换流水线和所述第二数据变换流水线的所述硬件设计的实例化的所述功能上等同的数据变换元件在不同的但相关的时间点接收相同的输入时,它们响应于所述输入产生一个或多个输出的相同集合。
6.如权利要求5所述的方法(400),其中,所述不同的时间点通过预定数量的周期而相关,或者其中,所述不同的时间点是多个预定相关时间点中的一个。
7.如权利要求2或权利要求3所述的方法(400),其中,所述第一数据变换流水线和所述第二数据变换流水线的所述功能上等同的数据变换元件是相同的。
8.如权利要求2或权利要求3所述的方法(400),其中,所述第一数据变换流水线和所述第二数据变换流水线的所述功能上等同的数据变换元件是不同的,并且所述方法还包括形式验证所述第一数据变换流水线和所述第二数据变换流水线的所述功能上等同的数据变换元件在功能上是等同的(808)。
9.如权利要求1至3中任一项所述的方法(400),其中,验证所述第一数据变换流水线的所述硬件设计包括验证所述第一数据变换流水线的所述硬件设计和所述第二数据变换流水线的所述硬件设计在功能上是等同的(802)。
10.如权利要求1所述的方法(400),其中,所述第一数据变换流水线和所述第二数据变换流水线是相同的。
11.如权利要求10所述的方法(400),其中,所述第一数据变换流水线和所述第二数据变换流水线的所述功能上等同的数据变换元件是相同的数据变换元件。
12.如权利要求10或权利要求11所述的方法(400),还包括在所述形式验证之前将所述第二数据变换流水线的所述硬件设计链接到捕获模块的硬件设计(904),所述捕获模块被配置成:当所述第二数据变换流水线的所述硬件设计的实例化从所述第二数据变换流水线的预定状态执行交易时,记录所述第二数据变换流水线的一个或多个输入的集合和从所述第二数据变换流水线的一个或多个输出的集合,并且记录到所述第二数据变换流水线的所述功能上等同的数据变换元件的一个或多个输入的集合和从所述第二数据变换流水线的所述功能上等同的数据变换元件的一个或多个输出的集合。
13.如权利要求12所述的方法(400),其中,所述约束在于:当所述第一数据变换流水线的所述硬件设计的实例化的所述功能上等同的数据变换元件接收所述数据变换元件的被记录的所述一个或多个输入的集合时,所述第一数据变换流水线的所述硬件设计的所述实例化的所述功能上等同的数据变换元件产生所述数据变换元件的对应的被记录的所述一个或多个输出的集合。
14.如权利要求12所述的方法(400),其中,针对预定交易集合,形式验证所述第一数据变换流水线的所述硬件设计的所述实例化的所述输出与所述第二数据变换流水线的所述硬件设计的所述实例化的所述输出匹配包括:如果所述第一数据变换流水线的所述硬件设计的实例化接收被记录的一个或多个流水线输入的集合,则形式验证所述第一数据变换流水线的所述硬件设计的所述实例化的所述一个或多个输出的集合与被记录的一个或多个流水线输出的集合匹配(906)。
15.如权利要求12所述的方法(400),其中,所述第二数据变换流水线的所述预定状态是在重置所述第二数据变换流水线的所述硬件设计的所述实例化之后产生的状态。
16.如权利要求12所述的方法(400),其中,所述捕获模块被配置成在重置所述第二数据变换流水线的所述硬件设计的所述实例化之后,以预定数量的周期记录到所述第二数据变换流水线的所述硬件设计的实例化的所述功能上等同的数据变换元件的所述一个或多个输入的集合和从所述第二数据变换流水线的所述硬件设计的实例化的所述功能上等同的数据变换元件的所述一个或多个输出的集合。
17.如权利要求16所述的方法(400),其中,所述预定数量的周期等于所述第二数据变换流水线执行交易的最小数量的周期。
18.如权利要求12所述的方法(400),还包括:形式验证所述第二数据变换流水线的所述硬件设计的实例化对于对从所述第二数据变换流水线的所述预定状态的输入的任意集合执行的变换生成正确输出。
19.如权利要求10或权利要求11所述的方法(400),其中,验证所述第一数据变换流水线的所述硬件设计包括验证所述第一数据变换流水线的实例化对于相同的交易将生成相同的输出,而不管何时执行所述交易(906)。
20.如权利要求1所述的方法(400),还包括:在所述形式验证之前,用黑匣子元件替换所述第一数据变换流水线的所述功能上等同的数据变换元件和/或用黑匣子元件替换所述第二数据变换流水线的所述功能上等同的数据变换元件;并且其中,当所述第一数据变换流水线的所述功能上等同的数据变换元件被替换为黑匣子元件时,所述约束限制所述黑匣子元件的行为。
21.如权利要求1所述的方法(400),还包括:在所述形式验证之前,用黑匣子元件替换所述第一数据变换流水线的所述功能上等同的数据变换元件,而不用黑匣子元件替换所述第二数据变换流水线的所述功能上等同的数据变换元件;并且其中,所述约束限制与所述第一数据变换流水线的所述功能上等同的数据变换元件相对应的所述黑匣子元件的行为。
22.如权利要求1所述的方法(400),还包括:在所述形式验证之前,用黑匣子元件替换所述第二数据变换流水线的所述功能上等同的数据变换元件,而不用黑匣子元件替换所述第一数据变换流水线的所述功能上等同的数据变换元件。
23.如权利要求1所述的方法(400),还包括:在所述形式验证之前,用黑匣子元件替换所述第一数据变换流水线的所述功能上等同的数据变换元件,并且用黑匣子元件替换所述第二数据变换流水线的所述功能上等同的数据变换元件;并且其中,所述约束限制与所述第一数据变换流水线的所述功能上等同的数据变换元件相对应的所述黑匣子元件的行为。
24.如权利要求20至23中任一项所述的方法(400),其中,所述形式验证在第二约束或约束集合下执行,所述第二约束或约束集合确保每个黑匣子元件不生成不能由对应的所述数据变换元件有效生成的输出。
25.如权利要求1至3、10至11和20至23中任一项所述的方法(400),其中,每个约束被实施为一个或多个假设语句。
26. 如权利要求1至3、10至11和20至23中任一项所述的方法(400),其中:
所述第二数据变换流水线的第二数据变换元件功能上等同于所述第一数据变换流水线的另一数据变换元件;并且
所述方法还包括:在所述形式验证之前,用函数元件替换所述第二数据变换流水线的所述第二数据变换元件和所述第一数据变换流水线的其他数据变换元件中的每一个,所述函数元件通过形式验证工具被处理为其输入的未评估函数,使得在形式验证期间,所述函数元件响应于一个或多个输入的相同集合产生一个或多个输出的相同集合。
27.如权利要求1至3、10至11和20至23中任一项所述的方法(400),还包括输出指示所述形式验证是否成功的一个或多个控制信号。
28.如权利要求1至3、10至11和20至23中任一项所述的方法(400),还包括:响应于对所述形式验证不成功的确定(404),修改所述第一数据变换流水线的所述硬件设计以生成所述第一数据变换流水线的经修改的硬件设计(408)。
29.如权利要求1至3、10至11和20至23中任一项所述的方法(400),还包括:响应于对所述形式验证成功的确定(404),根据所述硬件设计使用集成电路制造***来制造体现所述第一数据变换流水线的集成电路(406)。
30.如权利要求1至3、10至11和20至23中任一项所述的方法(400),其中,当在集成电路制造***处被处理时,所述第一数据变换流水线的所述硬件设计配置所述集成电路制造***以制造体现所述第一数据变换流水线的集成电路。
31.一种用于验证第一数据变换流水线的硬件设计的***(700),所述第一数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,所述***(700)包括:
存储器,所述存储器被配置成存储:
所述第一数据变换流水线的所述硬件设计(702);
第二数据变换流水线的硬件设计(704),所述第二数据变换流水线包括对一个或多个输入执行数据变换的一个或多个数据变换元件,所述第二数据变换流水线的数据变换元件功能上等同于所述第一数据变换流水线的数据变换元件;以及
形式验证工具(710);以及
一个或多个处理器,所述一个或多个处理器被配置成:
针对预定交易集合,使用所述形式验证工具形式验证所述第一数据变换流水线的所述硬件设计的实例化的一个或多个输出的集合与所述第二数据变换流水线的硬件设计的实例化的一个或多个输出的集合匹配;
其中,在约束(706)下执行所述形式验证,所述约束是如果所述第一数据变换流水线和所述第二数据变换流水线的所述功能上等同的数据变换元件接收到相同的输入,则所述第一数据变换流水线和所述第二数据变换流水线的所述功能上等同的数据变换元件产生相同的输出。
32.一种计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令当在计算机***处执行时致使所述计算机***执行如权利要求1至3、10至11和20至23中任一项所述的方法。
Applications Claiming Priority (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1805722.4A GB2572632B (en) | 2018-04-05 | 2018-04-05 | Verification of hardware design for data transformation pipeline |
GB1805722.4 | 2018-04-05 | ||
GB1805723.2A GB2572633A (en) | 2018-04-05 | 2018-04-05 | Verification of hardware design for data transformation pipeline |
GB1805723.2 | 2018-04-05 | ||
GB1818105.7A GB2572664B (en) | 2018-04-05 | 2018-11-06 | Verification of hardware design for data transformation pipeline |
GB1818108.1 | 2018-11-06 | ||
GB1818105.7 | 2018-11-06 | ||
GB1818108.1A GB2572665B (en) | 2018-04-05 | 2018-11-06 | Verification of hardware design for data transformation pipeline |
PCT/GB2019/050961 WO2019193334A2 (en) | 2018-04-05 | 2019-04-04 | Verification of hardware design for data transformation pipeline |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111936998A CN111936998A (zh) | 2020-11-13 |
CN111936998B true CN111936998B (zh) | 2023-01-06 |
Family
ID=64655325
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980024443.5A Pending CN111954884A (zh) | 2018-04-05 | 2019-04-04 | 数据变换流水线的硬件设计的验证 |
CN201980024352.1A Active CN111936998B (zh) | 2018-04-05 | 2019-04-04 | 数据变换流水线的硬件设计的验证 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980024443.5A Pending CN111954884A (zh) | 2018-04-05 | 2019-04-04 | 数据变换流水线的硬件设计的验证 |
Country Status (6)
Country | Link |
---|---|
US (4) | US11126771B2 (zh) |
EP (2) | EP3776281A2 (zh) |
KR (2) | KR102323748B1 (zh) |
CN (2) | CN111954884A (zh) |
GB (2) | GB2572665B (zh) |
WO (2) | WO2019193354A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2572665B (en) * | 2018-04-05 | 2020-07-08 | Imagination Tech Ltd | Verification of hardware design for data transformation pipeline |
GB2588134B (en) | 2019-10-08 | 2021-12-01 | Imagination Tech Ltd | Verification of hardware design for data transformation component |
GB2607107B (en) | 2021-05-28 | 2024-05-01 | Imagination Tech Ltd | Methods and systems for measuring the security of an electronic device comprising hardware and software |
US11853195B2 (en) | 2021-09-13 | 2023-12-26 | International Business Machines Corporation | Methods and systems to discover special outcomes in an instruction set architecture via formal methods |
CN117150998B (zh) * | 2023-10-31 | 2024-01-19 | 上海合见工业软件集团有限公司 | 一种硬件模块等价性验证*** |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6507874B1 (en) * | 1998-01-07 | 2003-01-14 | Microsoft Corporation | System for efficient routing and translation of data |
US6526544B1 (en) | 1999-09-14 | 2003-02-25 | Lucent Technologies Inc. | Directly verifying a black box system |
JP3974300B2 (ja) * | 1999-11-18 | 2007-09-12 | 松下電器産業株式会社 | Ipベースlsi設計システムおよび設計方法 |
US6665627B2 (en) * | 2001-03-30 | 2003-12-16 | Intel Corporation | Method and apparatus for evaluating and correcting the tester derating factor (TDF) in a test environment |
KR100429573B1 (ko) * | 2001-12-24 | 2004-05-03 | 주식회사 하이닉스반도체 | 레지스터 전송레벨 코드의 생성방법 |
US7356424B2 (en) * | 2003-09-26 | 2008-04-08 | Texas Instruments Incorporated | Diagnostic compiler for pipeline analog-to-digital converter, method of compiling and test system employing the same |
US7350168B1 (en) * | 2005-05-12 | 2008-03-25 | Calypto Design Systems, Inc. | System, method and computer program product for equivalence checking between designs with sequential differences |
US7389479B2 (en) | 2005-12-20 | 2008-06-17 | Synopsys, Inc. | Formally proving the functional equivalence of pipelined designs containing memories |
US7890901B2 (en) * | 2006-03-24 | 2011-02-15 | International Business Machines Corporation | Method and system for verifying the equivalence of digital circuits |
US8555039B2 (en) * | 2007-05-03 | 2013-10-08 | Qualcomm Incorporated | System and method for using a local condition code register for accelerating conditional instruction execution in a pipeline processor |
US8121825B2 (en) * | 2008-04-30 | 2012-02-21 | Synopsys, Inc. | Method and apparatus for executing a hardware simulation and verification solution |
US10140196B2 (en) * | 2008-06-04 | 2018-11-27 | Oracle International Corporation | System and method for configuring a sliding window for testing an event processing system based on a system time |
US10102091B2 (en) * | 2008-06-04 | 2018-10-16 | Oracle International Corporation | System and method for supporting a testing framework for an event processing system using multiple input event streams |
WO2010053603A1 (en) * | 2008-11-07 | 2010-05-14 | Intrinsity, Inc. | Method for piecewise hierarchical sequential verification |
US7996803B2 (en) | 2009-01-30 | 2011-08-09 | International Business Machines Corporation | Automated use of uninterpreted functions in sequential equivalence |
US8181134B2 (en) | 2009-10-16 | 2012-05-15 | International Business Machines Corporation | Techniques for performing conditional sequential equivalence checking of an integrated circuit logic design |
US20120030224A1 (en) * | 2010-07-29 | 2012-02-02 | Activepath Ltd. | Enabling active content in messaging using automatic data replacement |
US20180089341A1 (en) * | 2012-06-04 | 2018-03-29 | Reveal Design Automation | Self Equivalence in Hardware Designs |
GB2508233A (en) | 2012-11-27 | 2014-05-28 | Ibm | Verifying logic design of a processor with an instruction pipeline by comparing the output from first and second instances of the design |
JP6273733B2 (ja) * | 2013-09-20 | 2018-02-07 | 富士通株式会社 | 演算処理装置、情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム |
US9420323B2 (en) * | 2013-12-19 | 2016-08-16 | The Nielsen Company (Us), Llc | Methods and apparatus to verify and/or correct media lineup information |
GB2526052B (en) * | 2014-03-31 | 2016-04-13 | Imagination Tech Ltd | Deadlock detection using assertions |
US9268597B2 (en) * | 2014-04-01 | 2016-02-23 | Google Inc. | Incremental parallel processing of data |
US10275386B2 (en) * | 2014-06-27 | 2019-04-30 | Advanced Micro Devices, Inc. | Memory physical layer interface logic for generating dynamic random access memory (DRAM) commands with programmable delays |
US9009468B1 (en) * | 2014-08-26 | 2015-04-14 | MagicCube, Inc. | System for transaction authentication |
US9363087B2 (en) * | 2014-10-02 | 2016-06-07 | Microsoft Technology Licensing, Inc. | End-to-end security for hardware running verified software |
GB2537939B (en) * | 2015-05-01 | 2018-05-02 | Imagination Tech Ltd | Control path verification of hardware design for pipelined process |
GB2550614B (en) * | 2016-05-25 | 2019-08-07 | Imagination Tech Ltd | Assessing performance of a hardware design using formal verification and symbolic tasks |
GB2551524B (en) * | 2016-06-20 | 2018-08-22 | Imagination Tech Ltd | Livelock detection in a hardware design using formal verification |
GB2554942B (en) * | 2016-10-14 | 2018-11-21 | Imagination Tech Ltd | Verifying firmware binary images using a hardware design and formal assertions |
GB2572665B (en) * | 2018-04-05 | 2020-07-08 | Imagination Tech Ltd | Verification of hardware design for data transformation pipeline |
-
2018
- 2018-11-06 GB GB1818108.1A patent/GB2572665B/en active Active
- 2018-11-06 GB GB1818105.7A patent/GB2572664B/en active Active
-
2019
- 2019-04-01 US US16/372,138 patent/US11126771B2/en active Active
- 2019-04-03 US US16/373,774 patent/US10719646B2/en active Active
- 2019-04-04 WO PCT/GB2019/050991 patent/WO2019193354A1/en active Application Filing
- 2019-04-04 CN CN201980024443.5A patent/CN111954884A/zh active Pending
- 2019-04-04 CN CN201980024352.1A patent/CN111936998B/zh active Active
- 2019-04-04 EP EP19717561.5A patent/EP3776281A2/en active Pending
- 2019-04-04 KR KR1020207031790A patent/KR102323748B1/ko active IP Right Grant
- 2019-04-04 EP EP19717579.7A patent/EP3776282A1/en active Pending
- 2019-04-04 KR KR1020207031916A patent/KR102282981B1/ko active IP Right Grant
- 2019-04-04 WO PCT/GB2019/050961 patent/WO2019193334A2/en unknown
-
2020
- 2020-06-09 US US16/896,388 patent/US10984162B2/en active Active
-
2021
- 2021-09-17 US US17/478,739 patent/US11663385B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20190311075A1 (en) | 2019-10-10 |
US11663385B2 (en) | 2023-05-30 |
GB2572665A (en) | 2019-10-09 |
US10719646B2 (en) | 2020-07-21 |
CN111954884A (zh) | 2020-11-17 |
US20190311074A1 (en) | 2019-10-10 |
GB2572665A8 (en) | 2020-06-17 |
WO2019193354A1 (en) | 2019-10-10 |
GB2572664A (en) | 2019-10-09 |
US10984162B2 (en) | 2021-04-20 |
EP3776281A2 (en) | 2021-02-17 |
WO2019193334A3 (en) | 2019-11-28 |
US11126771B2 (en) | 2021-09-21 |
US20220004690A1 (en) | 2022-01-06 |
KR102282981B1 (ko) | 2021-07-28 |
EP3776282A1 (en) | 2021-02-17 |
KR20200139788A (ko) | 2020-12-14 |
US20200302104A1 (en) | 2020-09-24 |
WO2019193334A2 (en) | 2019-10-10 |
CN111936998A (zh) | 2020-11-13 |
GB201818105D0 (en) | 2018-12-19 |
GB2572664B (en) | 2020-07-08 |
GB2572665B (en) | 2020-07-08 |
KR102323748B1 (ko) | 2021-11-08 |
GB201818108D0 (en) | 2018-12-19 |
KR20200139235A (ko) | 2020-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111936998B (zh) | 数据变换流水线的硬件设计的验证 | |
Alur et al. | Theory in practice for system design and verification | |
US11455451B2 (en) | Verifying a hardware design for a component that implements a permutation respecting function | |
US20230097314A1 (en) | Verification of hardware design for component that evaluates an algebraic expression using decomposition and recombination | |
US11995386B2 (en) | Verification of hardware design for data transformation component | |
US12032886B2 (en) | Verifying a hardware design for a multi-stage component | |
GB2572633A (en) | Verification of hardware design for data transformation pipeline | |
US11783105B2 (en) | Method and system for verifying a sorter | |
US8448109B1 (en) | Vector evaluation of assertions | |
GB2572632A (en) | Verification of hardware design for data transformation pipeline |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |