验证实施置换相关函数的组件的硬件设计的制作方法

文档序号:18869976发布日期:2019-10-14 19:18阅读:147来源:国知局
验证实施置换相关函数的组件的硬件设计的制作方法

存在接收包括多个输入元素(x0,x1...xn-1)的输入向量x并为一组输入元素的至少两个不同排序(或置换)产生与置换相关的输出的许多函数。如果函数响应于第一输入向量产生第一输出,并且响应于作为第一输入向量的置换的第二输入向量产生第二输出,则称该函数产生与置换相关的输出,并且第二输出可以仅从第一输出和置换推导出来。这种函数在本文被称为置换相关函数(permutationrespectingfunction)。函数相对于其置换的输入向量置换集合(即,为输入向量和输入向量的置换产生与置换相关的输出)在本文中被称为相关的输入向量置换的集合或组。置换相关函数包括但不限于:关于一个或多个输入向量置换σ不变的函数f(即f(σx)=f(x));关于一个或多个输入向量置换σ等变的函数f(即σf(x)=f(σx));以及满足tσf(x)=f(σx)的函数,其中通过相关的输入向量置换组到输出的自同构组的同态将输入向量置换σ映射到输出转换tσ。

示例置换相关函数是排序函数fsort(a,b,c),排序函数fsort(a,b,c)接收包括三个输入元素a,b,c的输入向量并以升序输出包括输入元素的向量。该函数是置换相关函数,因为它关于所有输入向量置换都是不变的,即,它将为一组输入元素的任何置换产生相同的输出。例如,当函数fsort以任何顺序接收输入元素4、5和6时,函数fsort将输出4、5、6。具体来说,当函数fsort接收以下输入时将输出4、5、6:(i)a=4,b=5和c=6,(ii)a=4,b=6和c=5;(iii)a=5,b=4,c=6;(iv)a=5,b=6和c=4;(v)a=6,b=4,和c=5,或(vi)a=6,b=5,和c=4。其他置换相关函数的示例包括但不限于:输出多个输入元素的平均值的平均值函数;输出多个输入元素的中间值的中间值函数;输出多个输入元素的最大值的最大值函数;输出多个输入元素的最小值的最小值函数;以及接收代表方阵的条目的一组输入元素并输出该矩阵的行列式的函数。

许多电子设备(例如片上系统(soc)包括实施置换相关函数的组件。生成实施置换相关函数的组件通常包括:开发硬件设计,其描述实施置换相关函数的集成电路的结构和功能;验证或测试硬件设计,以确保根据设计制造的集成电路将按预期运行;以及一旦验证,根据硬件设计在集成电路制造系统中制造集成电路。验证实施置换相关函数的组件的硬件设计的操作或行为包括验证硬件设计的实例化根据函数为所有有效输入向量产生正确(或预期)的输出。

例如,硬件设计可以通过形式验证或基于模拟的验证进行验证。形式验证是使用硬件设计和数学推理的数学模型对硬件设计进行验证的系统过程。相比之下,基于模拟的验证是通过将刺激应用于硬件设计的实例化,并且响应于刺激监测硬件设计的实例化的输出来测试硬件设计的过程。

与基于模拟的验证相比,形式验证可以提高可控性。当完全模拟硬件设计所需的模拟测试信号或向量的数量变得无法管理时,就会出现低可控性。例如,32位比较器需要264个测试向量。这可能需要数百万年才能通过基于模拟的验证进行彻底地验证。通过执行形式验证,可以在不到一分钟内验证32位比较器。

虽然形式验证可以是用于穷尽地验证硬件设计的属性的有效方法,但只有当要验证的属性以形式验证工具能够解决由此呈现的数学问题的方式呈现时,才可以使用形式验证。具体地,在硬件设计的形式验证器件,硬件设计被表示为数学模型,要证明的属性也在数学上表示,并且数学推理用于基于该数学模型确定硬件设计的属性是否为真。换言之,在形式验证中,验证被表示为要解决的数学问题。一些数学问题将通过形式验证工具在合理的时间量内解决,而另一些则不行。当形式验证工具能够解决硬件设计和要验证的属性所呈现的数学问题时,则形式验证被认为是收敛的。然而,当形式验证工具不能解决硬件设计和要验证的属性所呈现的数学问题时,则形式验证不会收敛,也不会输出任何结果,并且验证是不确定的。

以下描述的实施例仅以示例的方式提供,并且不对实施方式进行限制,这些实施方式解决了用于验证实施置换相关函数的组件的硬件设计的已知方法和系统的任何或所有缺点。



技术实现要素:

本发明内容用于介绍以下具体实施方式中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

本文描述了用于验证实施置换相关函数的组件的硬件设计的方法和系统。该方法包括:形式验证硬件设计的实例化为有效输入向量的子集输出函数的正确结果;以及形式验证硬件设计的实例化是关于一个或多个输入向量置换中的每个的置换(即,硬件设计的实例化为输入向量和该输入向量的置换产生置换相关输出。选择子集和输入向量置换,使得可以经由一个或多个输入向量置换的组合由子集中的输入向量生成不在子集中的任何输入向量。

第一方面提供了一种验证实施置换相关函数的组件的硬件设计的方法,所述组件被配置为接收包含多个输入元素的输入向量并基于所述输入向量和所述函数生成输出,所述方法包括:在一个或多个处理器处验证硬件设计的实例化为有效输入向量子集的每个输入向量生成预期输出;以及在一个或多个处理器处针对一个或多个输入向量置换中的每个,验证硬件设计的实例化为有效输入向量的集合中的任何输入向量和该输入向量的置换生成置换相关输出;其中,可以通过将一个或多个输入向量置换中的一个或多个应用于该子集中的输入向量来获得不在有效输入向量子集中的每个有效输入向量。

第二方面提供了一种验证实施置换相关函数的组件的硬件设计的系统,所述系统包括:存储器,其包括:实施置换相关函数的组件的硬件设计,所述组件被配置为接收包含多个输入元素的输入向量并基于输入向量和函数生成输出;以及一个或多个验证工具;以及一个或多个处理器,其被配置为:使用一个或多个验证工具中的一个验证硬件设计的实例化为有效输入向量的子集的每个输入向量生成预期输出;以及使用一个或多个验证工具中的一个,针对一个或多个输入向量置换中的每个,验证硬件设计的实例化为有效输入向量的集合中的任何输入向量和该输入向量的置换生成置换相关输出;其中,可以通过将一个或多个输入向量置换中的一个或多个应用于该子集中的输入向量来获得不在有效输入向量的子集中的每个有效输入向量。

当在集成电路制造系统中进行处理时,实施置换相关函数的组件的硬件设计可以配置该系统以制造包含该组件的集成电路。可以提供一种非暂态计算机可读存储介质,其上存储有实施置换相关函数的组件的硬件设计,硬件设计在集成电路制造系统中处理时,使得集成电路制造系统制造包含该组件的集成电路。

可以提供一种集成电路制造系统,其包括:非暂态计算机可读存储介质,其上存储有实施置换相关函数的组件的硬件设计;布局处理系统,其被配置为处理硬件设计以生成包含组件的集成电路的电路布局描述;以及集成电路生成系统,其配置为根据电路布局描述制造包含该组件的集成电路。

可以提供用于执行如本文所述的方法的计算机程序代码。可以提供非暂态计算机可读存储介质,其上存储有计算机可读指令,计算机可读指令在计算机系统上执行时,使计算机系统执行本文所述的方法。

如对技术人员显而易见的,上述特征可以适当地组合,并可以与本文所述的示例的任何方面进行组合。

附图说明

现在将参考附图详细描述示例,在附图中:

图1是实施置换相关函数的示例组件的框图;

图2是用于验证实施置换相关函数的组件的硬件设计的示例方法的流程图;

图3是示例置换相关函数的输入空间的图表;

图4是示出示例输入向量置换和基于其的示例生成集的示意图;

图5是用于验证实施置换相关函数的组件的硬件设计的示例系统的框图;

图6是示例基于计算的设备的框图;

图7是可以实施实现置换相关函数的组件的示例计算机系统的框图;以及

图8是用于生成包含实施置换相关函数的组件的集成电路的示例性集成电路制造系统的框图。

附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框组或其他形状)代表了边界的一个示例。在一些示例中,一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,在所有图中使用共同的附图标记来指示相似的特征。

具体实施方式

以下描述通过示例的方式呈现,以使本领域技术人员能够制造和使用本发明。本发明不限于本文所述的实施例,并且对所公开实施例的各种修改对于本领域技术人员而言将显而易见。实施例仅通过示例的方式来描述。

虽然形式验证可以提供优于基于模拟的验证的优点,但申请人已知的用于形式验证实施置换相关函数的组件硬件设计的方法已被证明是低效的(例如,它们需要很长时间来完成)和/或无效的(例如,它们无法收敛,因此它们无法提供确定的答案)。例如,申请人已知的用于形式验证实施置换相关函数的组件的硬件设计方法包括形式验证硬件设计的实例化根据该函数响应于每个有效输入向量而产生正确的输出。在本文中,这可以被称为对实施置换相关函数的组件的硬件设计的朴素形式验证。当输入元素的数量很大时,这种方法已被证明是低效的(例如,被证明花费很长时间),和/或在函数复杂时是无效的(例如,无法收敛或无法产生结果)。应注意,申请人已知某事物的事实并不意味着它是众所周知的。

因此,本文描述了用于验证实施置换相关函数的组件的硬件设计的方法和系统,其中验证被分解为较小的验证的集合。具体地,该方法包括形式验证硬件设计的实例化为有效输入向量的子集输出函数的正确结果;以及形式验证硬件设计的实例化为关于一个或多个输入向量置换中的每一个的置换(即,硬件设计的实例化产生输入向量和该输入向量的置换的置换相关输出)。选择子集和输入向量置换,使得可以经由一个或多个输入向量置换的组合由子集中的输入向量生成不在子集中的任何输入向量。本文所述的方法已证明能够比使用朴素方法更快地验证实施置换相关函数的组件的硬件设计。本文所述的方法还能够验证朴素方法无法收敛(即无法提供确定的答案)的硬件设计。

如上所述,置换相关函数是接收包括多个输入元素(x0,x1...xn-1)的输入向量x并为同一组输入元素的至少两个置换产生置换相关输出的函数f。如果函数响应于第一输入向量x产生第一输出,并且响应于作为第一输入向量的置换的第二输入向量产生第二输出,则该函数产生置换相关输出,并且第二输出仅可以从第一输出和置换推导出来。

每个输入元素xi可以包含单个变量,或者可以包含多个变量(例如,每个输入元素本身可以是包含多个变量的向量或矩阵)。例如,在一些情况下,每个输入元素可能是b位二进制数,而在其他情况下,每个输入元素可以是b位二进制数的向量或矩阵,其中b是大于或等于1的整数。

输入向量x的置换σ是输入向量的x的输入元素xi的置换(即排序)。在输入向量x具有n个输入元素xi的情况下,将会有输入向量x的n!个置换。例如,对于一组输入元素{x0,x1,x2},包括三个输入元素(x0,x1,x2)的输入向量x将有3!=6个置换(或排序)σ,如下所示。一组n个输入元素的所有可能置换的集合在本文中被称为sym(n)。因此,sym(n)在n=3时为{σ0,σ1,σ2,σ3,σ4,σ5}。

σ0(x0,x1,x2)=(x0,x1,x2)

σ1(x0,x1,x2)=(x0,x2,x1)

σ2(x0,x1,x2)=(x1,x0,x2)

σ3(x0,x1,x2)=(x1,x2,x0)

σ4(x0,x1,x2)=(x2,x0,x1)

σ5(x0,x1,x2)=(x2,x1,x0)

符号f(σx)用于指代对于输入向量的x的置换σ的函数f的输出。例如,在输入向量包括三个输入元素的情况下,f(σ2x)是对于输入向量而言函数f的输出,其中x1和x2的顺序已交换。换句话说,f(σ2x)=f(σ2(x0,x1,x2))=f((x0,x2,x1))。

如上所述,置换相关函数包括但不限于:关于一个或多个输入向量置换σ是不变的函数f(即f(σx)=f(x));关于一个或多个输入向量置换σ是等变的函数f(即σf(x)=f(σx));以及满足tσf(x)=f(σx)的函数,其中通过从相关的输入向量集置换到输出的自同构组的同态,将输入向量置换σ映射到输出转换tσ。如本领域技术人员所知,自同构是将一些集合映射到自身的可逆函数。在相关的输入向量置换通过组同态与输出自同构相关的情况下,得出结论,如果任何相关的输入向量置换σa和σb满足σ=σaσb,则σ也是相关的并且因为

如上所述,示例置换相关函数是接收包括三个输入元素x0,x1,x2的输入向量x并且以升序输出包括输入元素的向量的排序函数fsort(x0,x1,x2)。该函数是置换相关函数,因为其对于所有输入向量置换都是不变的,即,它将为一组输入元素的任何置换产生相同的结果或输出。例如,函数fsort当以任何顺序接收包括4、5和6的输入向量时,将输出(4、5、6)。置换相关函数的另一个示例是对输入元素进行排序并且输出包括有序的索引列表的向量的索引排序函数h。该函数是置换相关函数,因为它对于所有输入向量置换都是等变的。例如,如果该函数接收到具有三个输入元素的输入向量,其中x0<x1<x2,则函数将输出(0,1,2),指示第0个输入元素是最小的输入元素,第1个输入元素是中间的输入元素,并且第二个输入元素是最大的输入元素。如果输入元素的顺序发生变化,则输出将相应地变化。例如,如果交换x0和x1的顺序,则输出中0和1的位置将相应地变化(即h(x1,x0,x2)=(1,0,2))。

满足tσf(x)=f(σx)的置换相关函数的示例是输出输入向量中的特定元素的索引(例如,最大元素或最小元素的索引)的索引函数。当最大元素是第一个元素时,该函数可以输出0;当最大元素是第二个元素时,该函数可以输出1,依此类推。满足tσf(x)=f(σx)的置换相关函数的另一个示例是h(a,c)=h((a,b),(c,d))=ab-cd,因为h(a,c)=-h(σa(a,c))=-h(c,a),其中σa交换两个输入元素a和c的位置

其他示例置换相关函数包括但不限于:输出一组输入元素的平均值的平均值函数;输出一组输入元素中间值的中间值函数;输出一组输入元素的最大值的最大值函数;输出一组输入元素的最小值的最小值函数;确定一组输入元素的交集的交集函数,例如确定光线或其他形状的交集的函数;输出元素是否出现在一组输入元素中的指示的搜索函数;对元素在一组输入元素中出现的次数进行计数的计数函数;与一组输入元素相加或相乘相关的函数,例如,求多个向量的点积的函数;求一组输入元素的平均值或标准偏差的函数;以及输出以预定方式与置换关联的函数。

置换相关函数可以是关于所有输入向量置换(即,对于所有σ∈sym(n))的置换,或者它可能仅是关于输入向量置换的子集(即,对于σ∈sym(n)的某个子集)的置换。例如,排序函数是关于所有输入向量置换的置换,因为不管输入向量中输入元素的顺序如何,它都将产生相同的输出。换句话说,排序函数将为输入向量x的任何置换产生相同的输出。仅关于输入向量置换的子集的置换的函数的示例是点积:f(a,b,c,d)=ab+cd,这是关于交换a和b的输入向量置换的置换,交换c和d的输入向量置换的置换,以及交换a和c以及b和d的输入向量置换的置换,但不是关于其它输入向量置换(例如交换a和c的输入向量置换)的置换。仅关于输入向量置换的子集的置换的函数的另一示例是g(a,b,c,d)=ad-bc,其计算2x2矩阵的行列式交换a和d或交换b和c的输入向量置换不改变输出,但交换a和b和交换c和d的输入向量置换将否定输出(g(b,a,d,c)=bc-ad=-(ad-bc)=-g(a,b,c,d)),使得t(ad)=t(bc)=恒等映射,并且t(ab)(cd)=否定。函数关于其置换的输入向量置换(即,该函数为输入向量和输入向量的置换产生置换相关的输出)在本文中被称为相关的输入向量置换e,其中

如图1所示,实施置换相关函数f的组件a100包括硬件逻辑,该硬件逻辑被配置为接收输入向量x,对于接收到的输入向量计算置换相关函数f的结果f(x),并且输出计算出的结果a(x)。符号a(x)在本文中用于指示组件a响应于输入向量x的输出。组件a按预期的a(x)=f(x)进行工作。类似于符号f(σx),符号a(σx)在本文中用于指代组件a响应于输入向量x的置换σ的输出。例如,在输入向量包括三个输入元素的情况下,a(σ2x)是组件a响应于输入向量的输出,其中交换了x1和x2的顺序。换句话说,a(σ2x)=a(σ2(x0,x1,x2))=a((x0,x2,x1)).

现在参考图2,图2示出了验证实施置换相关函数的组件的硬件设计的示例性方法200。方法200可以由基于计算的设备(例如但不限于,以下关于图6描述的基于计算的设备600)实施。例如,可能存在存储有计算机可读指令的计算机可读存储介质,计算机可读指令当在基于计算的设备上执行时,使基于计算的设备执行图2的方法200。

该方法包括形式验证硬件设计的实例化为有效输入向量的子集产生正确的结果;以及形式验证硬件设计为关于一个或多个输入向量置换的置换(即响应于输入向量集中的任何输入向量和的该输入向量的置换产生置换相关的输出)。如上所述,由组件实施的函数关于其置换的一组输入向量置换被称为相关的输入向量置换e,其中每个相关的输入向量置换由子集覆盖,或者可以由被验证的一个或多个输入向量置换生成。未被子集覆盖的相关的输入向量置换在本文中被称为相关输入向量置换r,其中r等于e或是e的子集。因此,

方法200在块202开始,其中,接收到实施置换相关函数的组件的硬件设计。

“硬件设计”是对集成电路的结构和功能的描述,当在集成电路制造系统中进行处理时,硬件设计使集成电路制造系统生成由硬件设计描述的集成电路。例如,如以下关于图8的更详细描述的,当在集成电路制造系统中处理硬件设计时,集成电路制造系统可以通过将硬件设计合成为硅来生成集成电路,或者通过将配置数据加载到现场可编程门阵列(fpga)来生成集成电路。

硬件设计可以用高级硬件描述语言(hdl)实施,例如但不限于寄存器传输级(rtl)语言。寄存器传输级语言的示例包括但不限于vhdl(vhsic硬件描述语言)和对于本领域技术人员来说明显的是,可以使用其他高级硬件描述语言,例如专有的高级硬件描述语言。

“硬件设计的实例化”是由硬件设计定义的硬件和/或硬件功能的表示。硬件设计的实例化包括但不限于:模拟由硬件设计定义的硬件行为的硬件设计的模拟模型、硬件设计的合成版本(例如网表)、硬件设计的硬件实施方式(例如集成电路或现场可编程门阵列(fpga))以及由形式验证工具生成的硬件设计的数学模型。硬件设计的实例化体现了采用可以被测试来验证硬件设计的形式的硬件设计。

因此,实现置换相关函数的组件的硬件设计是对实施置换相关函数的集成电路的结构和功能的描述,其在集成电路制造系统处进行处理时,使集成电路制造系统生成实施置换相关函数的集成电路。

一旦接收到实施置换相关函数的组件的硬件设计,方法200就进入块204。

在块204,形式验证硬件设计的实例化(即由硬件设计描述的组件的实例化)为有效输入向量的子集产生正确输出。具体地,如果表示有效输入向量x的输入空间是x使得所有输入向量x是x的元素(x∈x),则形式验证硬件设计的实例化为中的所有产生正确结果,其中为x的子集术语子集在本文中用于意指小于由其构成的集合的集合。相应地,子集包括的输入向量比输入空间x少。形成子集的输入向量可以被称为基本情况,并且形式验证硬件设计的实例化为子集中的输入向量产生正确的输出可以被称为形式验证基本情况。

选择子集使得输入空间x中的不在子集中的所有输入向量x是子集中的输入向量x的相关置换。换句话说,选择子集使得输入空间x中的每个输入向量x在子集中和/或是子集中的输入向量的相关置换。相应地,子集针对每组可能的输入元素(表示该组输入元素的一个置换或一个排序)包括至少一个输入向量。

在某些情况下,子集可以针对每组可能的输入元素集xi仅包括一个输入向量(这在本文中可以被称为最小大小的子集)。选择针对每组可能的输入元素集xi仅包括一个输入向量的子集减少了必须被验证的状态数,这可能允许对子集中输入向量的输出的正确性的形式验证更快地完成。在这些情况下,可以选择子集以包括输入集x中的所有输入向量x,其中输入元素xi按预定顺序。

优选地,子集包括输入向量,其中其输出易于推导。可以基于由组件实施的置换相关函数来选择子集测试表明,用于排序函数的好的子集是输入向量(其中输出等于输入)的子集相应地,对于将输入元素按升序排序的排序函数的子集可以包含输入元素xi按升序排列(即x0≤x1≤…≤xn-1)的输入向量。类似地,对于按降序对输入元素排序的排序函数的子集可以包括输入元素按降序排列(即x0≥x1≥…≥xn-1)的输入向量。

现在参考图3,图3示出了排序组件a的输入空间x的图表300,该排序组件a接收包括两个输入元素x0和x1的输入向量的x并且以升序输出包括输入元素x0和x1的向量。在这个示例中,有效输入向量的子集可以包括输入元素按升序排列(即x0≤x1)的输入向量。区域302表示输入空间x的一部分,其中输入元素x0和x1按升序(即子集)。在只有两个输入元素的情况下,将有两个置换,σ1(x0,x1)=(x0,x1)和σ2(x0,x1)=(x1,x0)。区域304表示输入空间x的一部分,其代表作为子集中的输入向量x的置换σ2(其可表示为)的输入向量x。因此,可以从图3看出,这两个区域302和304一起覆盖整个输入空间x,指示这是适当的子集应注意,其中x1=x2落在区域302和304两者的输入向量指示如果在块206中形式验证硬件设计是否是关于置换σ2的置换,则验证中将有一些冗余。

包括输入元素是升序或降序的输入向量的子集也可以适用于输出输入元素的最小值或最大值的最小值和最大值函数,以及返回输入向量中的中间值输入元素的中间值函数,因为这种基本情况的正确输出可以直接由输入向量确定。例如,最小值或最大值函数的输出将是按升序排序的输入向量的第一个或最后一个输入元素。指示特定元素是否在输入向量中的搜索函数的合适的子集可以是输入向量,其中特定元素是输入向量中的第一个元素,或者特定元素根本不在输入向量中。对元素出现在输入向量中的次数进行计数的计数函数的合适的子集可以是输入向量,其中元素在输入向量的开始处出现了预定的次数,而其他地方则没有。对于本领域技术人员来说明显的是,这些仅是示例性子集并且可以使用其他子集

在其他情况下,子集可具有多于最小数量的输入向量。例如,替代仅包括每组输入元素的一个输入向量的子集子集可以包含具有不同顺序的同一组输入元素的两个或更多个输入向量。

在一些情况下,可以扩展子集的大小(与最小大小的子集相比)因为在块206中具有更大的子集并且验证更少的输入向量置换可能更有效。例如,如果组件通过分别对输入元素的前半部分和输入元素的后半部分进行排序来实施排序函数,然后合并这两个半部分,则可能需要很长时间才能在块206中形式验证两个中间输入元素被转置的置换。这是因为两个半部分之间的差异将传播到合并阶段,而对于其他置换(例如,与同一半部分中的输入元素的转置相关的置换),可以在初始排序阶段后消除差异。在这个示例中,替代包括输入元素是升序的输入向量的子集使用包括输入向量的子集可能更有效,其中对前半部分进行排序,对后半部分进行排序。例如,如果输入元素的数量n是偶数,则子集可以包含输入向量集x,其中并且

如果输入元素xi是唯一的,将存在一组输入元素的n!置换。因为将存在输入元素按升序排列的一组输入元素的仅一个置换,所以输入元素按升序排列的输入向量的子集将包括每一组输入元素的仅一个输入向量。然而,存在一组输入元素的置换,其中输入元素的前半部分按升序排列,并且输入元素的后半部分按升序排列,因此输入元素的前半部分按升序排列并且输入元素的后半部分按升序排列的子集将包括每组输入元素的输入向量。因为存在一组输入元素的n!置换,该子集将比输入空间x小((n/2)!)2倍,但是其将比针对每组输入元素仅包含一个输入向量的子集大倍。表1示出了这种子集相对于输入空间x的大小差异以及这种子集相对于具有最小大小的子集的大小差异。

表1

另外或替代地,为了扩展子集的大小以覆盖在块206中验证无效的置换,当由组件实施的置换相关函数不是关于一组输入元素的所有可能的输入置换(即,函数不是关于所有σ∈sym(n)的置换)的置换时,也可以扩展子集具体地,在这些情况下,子集可以包含一组或多组输入元素的至少两个置换,其中至少两个置换包括函数不是相关其的置换的置换。

一般来说,在块206中未被验证的任何置换(要么因为在块206中验证无效,要么因为由组件实施的置换相关函数不是关于该置换的置换)由子集覆盖。例如,如果由组件实施的置换相关函数不是关于置换(其中,前两个输入元素(例如x0和x1)交换)的置换,则子集将包括所有组输入元素的输入向量(x0,x1,...,xn-1)和(x1,x0...xn-1)。

如上所述,形式验证是使用数学推理来验证硬件设计的属性的系统过程。相比之下,基于模拟的验证是通过将刺激应用于硬件设计的实例化并响应于刺激监测硬件设计的实例化的输出来测试硬件设计的过程。

形式验证硬件设计的实例化将响应于子集中的任何输入向量产生正确输出可以包括:形式验证一个或多个形式断言对于硬件设计为真或者成立,如果验证为真,则确定硬件设计的实例化将响应于子集中的任何输入向量产生正确的输出。在一些编程语言和工具中,断言也可以被称为“引理”,例如synopsys’hector。

如本领域技术人员所知,形式断言是一种语句或表达式,其指示形式属性对于硬件设计的实例化按预期运行必须为真。形式断言的示例格式是断言属性[formalpropertystatement],其指示formalpropertystatement必须为真。形式属性语句是捕获设计行为的语句或表达式。例如,硬件设计的信号a等于硬件设计的信号b的属性的形式属性语句可以是a=b。在hdl设计中,形式属性语句是检查hdl设计中特定行为的可执行语句。形式属性语句用于以形式化和明确的方式捕获硬件设计实例化所需或所期望的时间行为。

形式断言通常用断言语言来编写。断言语言(也可以被称为属性语言)以简洁、明确的方式捕获多个设计周期中的设计行为。虽然传统的硬件描述语言(hdl)(例如vhdl或verilogrtl)具有捕获单个周期行为的能力,但是它们过于详细以至于无法在更高级描述属性。具体而言,断言语言提供了以简洁的方式表达时间关系和复杂设计行为的手段。断言语言包括但不限于systemverilog断言(sva)、属性规范语言(psl)、断言库(ial)、openveratm断言(ova)、符号轨迹评估(ste)、硬件属性语言(hpl)、和开放验证库(ovl)。

在某些情况下,用于验证硬件设计的实例化的一个或多个形式断言为基本情况产生正确的输出,可以包括一个或多个形式断言,其断言仅从输入建立输出正确性的属性。例如,在基本情况的输出等于输入向量的全部或部分时,这种断言可能是合适的。例如,硬件设计用于实施排序函数的组件,该排序函数按升序输出包含输入元素的向量,并且基本情况包括输入元素按升序排列的输入向量,则一个或多个形式断言可以包含断言硬件设计实例化的输出向量等于硬件设计的实例化的输入向量的断言。

在其他情况下,用于验证硬件设计实例化的一个或多个形式断言为基本情况产生正确输出可以包括一个或多个形式断言,其断言通过将输出与组件的模型进行比较来建立输出的正确性的属性。例如,在基本情况的输出计算起来更复杂和/或在所有基本情况不常见的情况下,这种断言可能是合适的。例如,在硬件设计用于实施输出输入元素的乘积的乘法函数的组件的情况下,并且基本情况包括输入元素按升序排列的输入向量,则一个或多个形式断言可以包含将硬件设计的实例化的输出与组件的模型的输出进行比较的断言。

一旦建立了形式断言,就可以使用形式验证工具来形式验证一个或多个形式的断言对于硬件设计来说是为真或成立。形式验证工具是能够执行硬件设计的形式验证的软件工具。形式验证工具包括但不限于形式模型检验器(也可以被称为形式属性检验器),形式模型检查器被配置为形式验证集成电路硬件设计的属性;以及形式等价检验器,其被配置为形式验证两个设计的等价性(例如,两个集成电路硬件设计,或集成电路硬件设计和netlist等)。形式模型检验器的示例包括但不限于onespindv、mentorgraphics形式验证、vc形式验证、企业验证器和形式等价检验器的示例包括但不限于hector、顺序等价检查(sec)应用程序以及其他逻辑等价检验器(lec)和顺序逻辑等价检验器(slec)。

在形式验证中,硬件设计(例如,实施置换相关函数的组件的硬件设计)被转换为数学模型(例如,状态转换系统或流程图),从而提供硬件设计的实例化,其可以被测试以验证硬件设计,并且要验证的形式属性(例如断言的属性)使用精确语法或具有精确数学语法和语义的语言的数学逻辑来表示。

形式验证工具通过搜索硬件设计实例化的整个可到达状态空间(例如状态转换系统或流程图)来验证断言,而无需明确地遍历所有状态以确定是否存在硬件设计的实例化的有效状态(由形式约束定义),其中断言的属性不为真。例如,通过使用有效布尔编码(使用二进制决策图(bdd)或使用基于技术的高级sat(基于可满足性的有界模型检查)对状态进行编码来完成搜索。在一些情况下,工具可用于实施技术,例如但不限于抽象、对称、符号索引和不变量,以提高性能并实现可伸缩性。由于断言的形式验证从算法上和穷举地探索了随时间变化的所有有效输入值,因此以这种方式验证属性允许对所有有效状态彻底证明或否定属性。

一旦形式验证了硬件设计的实例化响应于子集中的每个输入向量x产生正确输出,方法200就进行到块206。

在块206,针对输入空间x中的输入向量集k,形式验证硬件设计的实例化是关于一个或多个相关输入向量置换中的每个的置换。具体地,针对一个或多个相关输入向量置换σ中的每个,验证硬件设计的实例化将为输入向量集k中的任何输入向量x和该输入向量的置换σx产生置换相关输出。选择在块206中验证的相关输入向量置换和要对其进行验证的输入向量集k,使得对于输入空间x中的每个输入向量x,对应的输出要么被明确地验证为正确的(块204),要么被验证为与明确验证的输出相关的置换(块206)。

形式验证硬件设计的实例化是关于针对输入向量集k上的一个或多个相关输入向量置换中每个的置换可以包括:对于一个或多个相关输入向量置换中的每个,形式验证一组断言对于硬件设计为真或成立,如果验证为真,则确定硬件设计的实例化是关于输入向量置换的置换。硬件设计的实例化是关于特定相关输入向量置换的形式验证可以与硬件设计的实例化是关于另一相关输入向量置换的形式验证单独或联合执行。具体地说,与特定输入向量置换对应的一个或多个断言的形式验证可以单独执行,或也可以与另一输入向量置换相对应的一个或多个断言的形式验证联合执行。例如,在某些情况下,硬件设计的实例化是关于不同的输入向量置换置换的形式验证可以串行或并行执行。

在一些情况下,在块206中验证的相关输入向量置换包括所有的相关输入向量置换(即所有输入向量置换σ∈r),以及验证它们的输入向量集是子集(即)。在函数使得所有输入向量置换是相关的情况下,则验证的相关输入向量置换可以包括所有输入向量置换。要注意的是,在这些情况下,存在n!相关置换,并且如果子集是最小大小,则子集大致包括|x|/n!输入向量,所以n!|x|/n!=|x|将进行验证,其验证次数与朴素验证期间进行的验证次数相同。然而,这些验证对于形式验证工具来说可能更容易完成。

在典型应用中,相关输入置换的集合r组成一个组。在这种情况下,针对每个相关输入向量置换,验证硬件设计的实例化的输出是与子集(对于任何)中的任何输入向量x和输入向量σx的置换相关的置换,验证硬件设计的实例化将为任何输入向量x和输入向量的任何相关输入向量置换σx产生置换相关的输出。换句话说,这验证了不在子集中的每个输入向量x输出是与已明确验证的输出相关的置换。下面描述了建立这种情况的数学证明。

然而,验证硬件设计的实例化是关于子集中的所有输入向量x上的每个相关输入向量置换的置换包括:为每个相关的输入向量置换生成一个或多个断言的集合,如果验证硬件设计为真,则验证硬件设计是关于该输入向量置换的置换。因为可能有多达n!相关输入向量置换(其中n是输入元素的数量),要生成的断言的数量随着n增加可能很快变得无法管理。例如,当n是3,n!等于6,然而当n是8,n!很快跳到40,320。

因此,在其他情况下,替代验证硬件设计的实例化是与子集中的输入向量x上的每个相关输入向量置换相关的置换,要验证的是硬件设计的实例化是关于输入集x中的所有输入向量x上的相关输入向量置换的生成集g中的每个输入向量置换的置换。因为生成集g通常仅包括相关输入向量置换的子集,所以验证硬件设计的实例化是与生成集g中的输入向量置换相关的置换包括:验证硬件设计是关于较少的置换,但在更多输入向量上(即在整个输入空间x上而不是子集上)的置换。

输入向量置换的生成集g是一组输入向量置换φi(例如g={φi|i=1,...,m}),由此可以生成所有相关输入向量置换r。因此,并且如果如下生成则r是组:相关输入向量置换σ可以由输入向量置换的生成集g生成,如果输入向量置换σ可以被写成生成集g中的输入向量置换φi的序列。具体地,相关输入向量置换σ可以由输入向量置换的生成集g生成,如果输入向量置换σ可以用以下的形式书写:

对于一些i0...ik∈{1,...m},s0...sk∈{1,-1},

其中,等于φi,并且是φi的逆置换或反置换,使得使所有元素保持相同的顺序。

对于输入向量置换的生成集g中的每个输入向量置换,,验证硬件设计的实例化响应于(i)输入空间x中的任何输入向量x;和(ii)输入向量x的置换的输出是置换相关的,验证硬件设计的实例化将为任何输入向量x和输入向量的任何相关置换σx产生置换相关输出。下面描述了建立这种情况的数学证明。

在一些情况下,生成集g可以仅包括相邻换位。换位是一种置换,其中交换n元素输入向量中的两个元素xi的位置(例如元素i与元素i+4交换),并且所有其他元素保持在同一位置。相邻换位是其中交换两个相邻元素的位置(例如元件i与元素i+1交换)的换位。交换第i元素和第(i+1)的相邻换位被表示为σat-i(例如,参见图4):

σat-ix=σat-i(x0,...,xi-1,xi,xi+1,xi+2,...,xn-1)=(x0,...,xi-1,xi+1,xi,xi+2,...,xn-1)

例如,置换σat-0交换第0个元素和第1个元素:

σat-0x=(x1,x0,x2,...,xn-1)

由于相邻换位是对输入向量的最小变化,因此形式验证工具通常(尽管并非总是)能够有效地证明:对于任何输入向量x和对于根据相邻换位σat-i的该输入向量的置换的输出是置换相关的。

可以很容易地看出,sym(n)中的任何输入向量置换σi可以由相邻换位的集合{σat-0,σat-1,...,σat-n-2}生成。例如,如上所述,如果输入向量x包括三个输入元素(即n=3),则有n!=6个置换,即sym(n)={σ0,σ1,σ2,σ3,σ4,σ5}。输入向量置换σi中的每个可以写成集合{σat-0,σat-1}中的一个或多个相邻换位的组合,如下所示:

σo(x0,x1,x2)=(x0,x1,x2)=σat-iσat-ix=x

σ1(x0,x1,x2)=(x0,x2,x1)=σat-1x

σ2(x0,x1,x2)=(x1,x0,x2)=σat-0x

σ3(x0,x1,x2)=(x1,x2,x0)=σat-1σat-0x

σ4(x0,x1,x2)=(x2,x0,x1)=σat-0σat-1x

σ5(x0,x1,x2)=(x2,x1,x0)=σat-1σat-0σat-1x

具体地,第一置换σ0可以通过两次执行任何相邻换位来生成(即通过交换任何两个元素,然后再次交换);第二置换σ1可以通过交换第1个和第2个元素(即通过执行置换σat-1)来生成;第三置换σ2可以通过交换第0个和第1个元素(即通过执行置换σat-0)来生成;第四置换σ3可以通过交换第0个和第1个元素(即通过执行置换σat-0)并且然后交换第1和第2个元素(即通过执行置换σat-1)来生成;第五置换σ4可以通过交换第1个和第2个元素(即通过执行置换σat-1)然后交换第0和第1个元素(即通过执行置换σat-0)来生成;并且第六置换σ5可以通过交换第1个和第2个元素(即通过执行置换σat-1),交换第0个和第1个元素(即通过执行置换σat-0),并且然后交换第1个和第2个元素(即通过执行置换σat-1)来生成。

因此,在一些情况下,生成集g可以包括{σat-0,σat-1,...,σat-n-2}(例如,参见图4)。验证硬件设计的实例化是关于这样的生成集中的每个置换的置换包括为n-1置换中的每个生成和验证一组断言。尤其是对于大的n,这大大减少了相对于验证每个相关的输入向量置换必须生成的断言的数量,因为可能有多达n!相关输入向量置换。

使用这样的生成集,还可以允许将在其上验证了置换的输入向量减少到输入空间x中的输入向量x的子集,而不是输入空间x中的所有输入向量x。因为相邻换位是自逆的(即),验证硬件设计的实例化是关于输入向量的子集上的每个相邻换位σat-i(其中xi和xi+1按升序(即xi≤xi+1))的置换,验证了硬件设计的实例化是关于输入空间x中的所有x上的相邻换位的置换。这是因为如果证明了对于所有x(其中xi≤xi+1)而言a(x)=a(σat-ix),则对于输入集中的任何输入向量x,要么xi<xi+1表示其将在方程式的左侧上出现,xi>xi+1表示其将在方程式的右侧上出现,要么xi=xi+1表示其将在方程式的左侧和右侧上出现。以这种方式减少输入空间会减少输入向量的数量,由此置换被因子2验证。尽管这看起来像是微不足道的减少,但它可以显著减少形式验证硬件设计的实例化是与相邻换位有关的置换的时间量。与上述类似,验证a(x)=a(σat-ix)可以被减少到输入向量的子集,其中xi和xi+1是降序。

在其他情况下,生成集g可以包括一个或多个相邻换位和循环置换。循环置换(被表示为σc)是每个元素移动到下一个位置,最后位置的元素移动到第1个(或第0个)位置的置换。换句话说,第0个元素移动到第1个位置,第1个元素移动到第2个位置,依此类推,使得第i元素移动到第(i+1)位置,直到移动到第(n-1)位置的第(n-2)元素。第(n-1)元素然后移动到第0个位置(例如,参见图4):

σcx=(xn-1,x0,x1,...,xn-2)

可以很容易地示出,sym(n)中的任何输入向量置换σi可以从置换集{σat-0,σc}生成。例如,如上所述,如果输入向量x包括三个输入元素(即n=3),则有n!=6个置换,即sym(n)={σ0,σ1,σ2,σ3,σ4,σ5}。每个输入向量置换σi可以写成集合中一个或多个置换的组合{σat-0,σc},如下图所示:

σ0(x0,x1,x2)=(x0,x1,x2)=σat-0σat-0x=x

σ1(x0,x1,x2)=(x0,x2,x1)=σat-0σcx

σ2(x0,x1,x2)=(x1,x0,x2)=σat-0x

σ3(x0,x1,x2)=(x1,x2,x0)=σcσcx

σ4(x0,x1,x2)=(x2,x0,x1)=σcx

σ5(x0,x1,x2)=(x2,x1,x0)=σcσat-0x

具体地,如果第一置换是标识图,并且可以通过执行σat-0两次来生成;第二置换σ1可以通过循环元素(即通过执行置换σc)并然后交换第0和第1个元素(即通过执行置换σat-0)来生成;第三置换σ2可以通过交换第0和第1个元素(即通过执行置换σat-0)来生成;第四置换σ3可以通过循环元素(即通过执行置换σc)然后通过再次循环元素(即通过执行置换σc)来生成;第五置换σ4可以通过循环元素(即通过执行置换σc)来生成,并且第六置换σ5可以通过交换第0和第1个元素(即通过执行置换σat-0),然后循环元素(即通过执行置换σc)来生成。

因此,在一些情况下,生成集g可以包括{σat-0,σc}(例如,参见图4)。验证硬件设计的实例化是关于这样的生成集g中的每个输入向量置换的置换包括:只为两个置换生成和验证一组断言。这大大减少了,尤其是对于大型n,相对于验证每个相关输入向量置换必须生成的断言的数量,因为可能有多达n!相关的输入向量置换,以及相对于验证包括n-1相邻换位的生成集中的每个输入向量置换。然而,由于形式验证工具往往更擅长于验证相似的事物,而不是不同的事物——并且x将与σcx大大不同因为所有的元素都将在不同的位置上——一些形式验证工具可能无法有效地验证硬件设计的实例化是关于循环置换的置换。然而,这可能取决于形式验证工具和/或组件的配置(例如内部结构)。

对于本领域技术人员来说明显的是,这些只是示例性生成集,并且可以使用其他合适的生成集。例如,其他生成集包括任何的相邻换位(例如σat-1)和循环置换。

一旦形式验证硬件设计的实例化是关于一组输入向量k上的一个或多个相关输入向量置换中的每个的置换已经完成,方法200可以结束,或者方法200可以继续到块208。

在块208,用于执行验证的形式验证工具可以输出一个或多个信号,所述一个或多个信号指示验证是否成功。例如,当使用形式验证工具验证断言时,形式验证工具可以输出指示断言是否为真的信号(即,对于硬件设计的所有有效状态或状态序列,断言属性为真),其也可以在本文中称为成功验证的断言。输出可能为:是,断言有效或已成功验证;否,断言无效(即,不为真或对于至少一个有效状态或状态序列是失败的)或未成功验证;或形式验证是非总结性的。形式验证可以是非总结性的,例如,因为运行形式验证工具的计算设备内存不足,或者因为形式验证工具已经确定了在预定的时间段后没有取得一定量的进展。

在断言无效或未成功验证,则形式验证工具还可以输出指示导致断言失败的硬件设计状态或状态序列的信息。例如,形式的验证工具可以输出验证的跟踪,指示故障发生在什么点、状态或状态序列。一旦已经输出信号,指示验证是否成功,方法200可能结束,或方法200可能继续进行块210。

在块210,可以确定(多个)输出信号是否指示验证成功。如果(多个)输出信号指示验证成功,从而指示硬件设计的实例化将对输入空间中的所有输入向量正确工作,则方法200可继续到块214,其中硬件设计定义的组件以硬件实施。然而,如果(多个)输出信号指示至少有一个验证不成功,从而指示硬件设计的实例化不会对输入空间中的所有输入向量正确地工作,则方法200可以继续到块212,其中修改硬件设计以改正硬件设计中导致了意想不到的行为的错误。一旦已修改了硬件设计,可重新验证修改后的硬件设计(例如,对于修改后的硬件设计可重复使用块202-210)。

尽管在图2的示例性方法200中,块204和206是按顺序执行的,但在其他示例中,它们可以相反顺序执行(例如,块206可以在块204之前执行)和/或它们可以并行执行。

尽管在图2的示例性方法200中,关于块204和206描述的验证是通过形式验证完成的,但在其他示例中,可以通过其他合适的验证方法完成验证。例如,替代地,可以通过基于模拟的验证来实施关于块204和206描述的一个或多个验证。

现在参考图5,其示出了用于执行图2的方法200的示例性系统500。系统500可以由一个或多个基于计算的设备实施,例如下文关于图6所述的基于计算的设备600。例如,图5的系统500的一个或多个组件可以被实施为计算机可读指令,当在基于计算的设备上执行时,该计算机可读指令使基于计算的设备执行下面所述的组件的功能。

系统500包括组件的硬件设计,该组件实施了:置换相关函数502;形式验证工具504;一组基本情况断言和条件506;以及对于要验证的每个输入向量置换的一组置换断言和条件508。根据断言的格式,系统500还可以包括硬件设计510的第二个实例和/或硬件设计512的模型。具体地,如果一个或多个断言将硬件设计的实例化的输出与硬件设计的另一个实例化进行比较,则系统500可以包括硬件设计的第二个实例,并且如果一个或多个断言将硬件设计的实例化的输出与硬件设计的模型的输出进行比较,系统500可以包括硬件设计514的模型。通常,形式验证工具504被配置为使用数学推理在关联条件下形式验证对于硬件设计为真的断言。

如上所述,硬件设计是对集成电路的结构和功能的描述,当在集成电路制造系统中进行处理时,使集成电路制造系统生成由硬件设计描述的集成电路。因此,对于实施置换相关函数的组件的硬件设计502、512是对实施置换相关函数的集成电路的结构和功能的描述,当在集成电路制造系统中进行处理时,该描述导致集成电路制造系统生成实施置换相关函数的集成电路。

如上所述,形式验证工具504是能够对硬件设计执行形式验证的软件工具。形式验证工具包括但不限于:被配置为形式验证硬件设计的属性的形式模型检验器(其也可以被称为形式属性检验器),以及被配置为形式验证两个设计的等价性的形式等价检验器(例如,两个硬件设计、硬件配置和netlist,或硬件设计和硬件设计模型等)。

尽管图5示出了单个形式验证工具504,但在其他示例中,系统可以包括多个形式验证工具,这些形式验证工具允许形式验证要并行执行的基本情况断言和置换断言。在有多个形式验证工具的情况下,所有的形式验证工具都可以是同一类型(例如,所有的形式验证工具都可以是形式模型检验器,或者所有的形式验证工具都可以是形式等价检验器),或者,两个或更多个的形式验证工具可以是不同类型(例如,形式验证工具中的至少一个可以是形式模型检验器,并且至少一个形式验证工具可以是形式等价检验器)。在一些情况下,形式验证工具可能具有不同的类型,因为在这些情况下,使用形式模型检验器验证某些断言和使用形式等价检验器验证其他断言可能更有效。例如,如下面更详细描述的,在一些情况下,使用形式模型检验器验证基本情况断言和使用形式等价检验器验证置换断言可能更有效。

基本情况断言和条件506包括一个或多个断言和一个或多个条件(在这些条件下验证了断言),使得如果一个或多个断言在指定条件下被验证为对于硬件设计为真,那么将验证硬件设计502的实例化产生对于输入空间的输入向量的子集的正确(或预期)结果。

在一些情况下,基本情况断言506可以包括断言仅基于硬件设计的单个实例的信号和/或状态来确定输出正确的属性的断言。例如,在组件实施按升序对输入元素排序的函数的情况下,基本情况断言可以包括输出等于输入的状态的断言。下面是这样的断言的示例,其中有三个输入元素xi和三个输出元素yi:

断言属性((x0==y0)&&(x1==y1)&&(x2==y2))

在这些情况下,形式验证包括评估硬件设计的单个实例的状态。由于形式模型检验器被优化,以可以在几个时钟周期内验证单个设计的属性,因此在这些情况下,使用形式模型检验器验证这样的基本情况断言可能是有益的。然而,虽然在这些情况下使用形式模型检验器可能提供某些优势(例如,在效率方面),但本领域技术人员将理解,这并不排除使用形式等价检验器来验证这种基本情况断言。

在其他情况下,基本情况断言506可以包括断言属性的断言,该属性通过将硬件设计的实例化的输出与硬件设计模型的输出进行比较来确定输出是正确的(或是预期的输出)。下面是这样的断言的示例,其中a是硬件设计的组件,并且m是组件的模型,yi是输出元素:

断言属性((a.y0==m.y0)&&(a.y1==m.y1)&&(a.y2==m.y2))

在这些情况下,形式验证包括将组件的硬件设计的实例化和组件模型进行比较。由于形式等价检验器是为比较两种设计而设计和优化的,因此在这些情况下,使用形式等价检验器来验证这种基本情况断言可能是有益的。然而,在这些情况下使用形式等价检验器可以提供某些优点(例如,在效率方面),本领域技术人员会理解,这并不排除使用形式模型检验器来验证这样的基本情况断言。组件的模型通常是高级模型(例如用c编写),其模拟组件的行为。

对于块206中验证的每个置换,将有一组置换断言和条件508。每组置换断言都包括一个或多个断言以及一个或多个条件(在这些条件下对断言进行验证),使得如果一个或多个断言在指定条件下被验证为对于硬件设计为真,那么将验证硬件设计的实例化是关于一组输入向量上的输入向量置换(即硬件设计为任何输入向量和该输入向量的置换产生置换相关的输出)的置换。

特定置换的置换断言508可以包括断言属性的断言,该属性通过将硬件设计的第一个实例化的输出与硬件设计的第二实例化的输出进行比较来确定硬件设计的实例化关于该特定置换。下面是这样的断言的示例,其中a1是硬件设计的第一个实例化的组件,a2是硬件设计的第二个实例化的组件,并且yi是输出元素:

断言属性((a1.y0==a2.y0)&&(a1.y1==a2.y1)&&(a1.y2==a2.y2))

在这些情况下,形式验证包括对组件的硬件设计的两个实例执行比较。由于形式等价检验器是为比较两种设计而设计和优化的,因此在这些情况下,使用形式等价检验器来验证这种置换断言可能是有益的。然而,在这些情况下使用形式等价检验器可能提供某些优点(例如,在效率方面),本领域技术人员会理解,这并不排除使用形式模型检验器来验证这样的置换断言。

每一组断言和条件506、508都绑定到适当的(多个)硬件设计和/或模型,以便能够验证断言的属性。然后,(多个)硬件设计、模型(如果需要)、基本情况断言和条件、置换断言和条件以及绑定被加载到形式验证工具(或形式验证工具)中。然后,形式验证工具被配置为在关联条件下验证硬件设计的每一组断言。换句话说,形式验证工具被配置为在基本情况条件下形式验证对于硬件设计而言基本情况断言是否为真;并且对于每一组置换断言,形式验证在关联置换条件下对于硬件设计而言置换断言是为真。在有多个形式的验证工具的情况下,可以并行执行两个或更多个的断言验证,以缩短完成验证的时间。

如上所述,在形式验证中,将硬件设计转换为数学模型(例如状态转换系统或流程图),从而提供硬件设计的实例化,可以对该硬件设计进行测试以验证硬件设计,并且使用数学逻辑来表示要验证的形式属性(例如断言属性),该数学逻辑使用精确的语法或具有精确数学语法和语义的语言。

通过搜索硬件设计的实例化的整个可到达状态空间(例如状态转换系统或流程图)来验证形式断言,而不明显遍历所有状态。例如,搜索是通过使用有效的布尔编码(使用二进制决策图(bdd))或使用基于技术的高级sat(基于可满足性的有界模型检查)对状态进行编码来完成的。在一些情况下,可以使用工具来实施技术,例如但不限于抽象、对称、符号索引和不变量,以提高性能并实现可伸缩性。

当使用形式验证工具504验证断言时,形式验证工具504可以输出该断言是否有效(即,对于所有有效状态或状态序列,断言属性为真)的指示,其在本文中也可以被称为成功验证的断言。输出可能为:是,断言有效或已成功验证;否,断言无效(即,不为真的或对于至少一个有效状态或状态序列为失败的)或未成功验证;或形式验证是非总结性的。形式验证可能是非总结性的,例如,因为运行形式验证工具的计算设备内存不足,或者因为形式验证工具已经确定了在预定的时间段后没有取得一定量的进展。

在断言无效或未成功验证的情况下,形式验证工具504还可以输出指示导致断言失败的硬件设计的状态或状态序列的信息。例如,形式验证工具504可以输出验证的跟踪,从而指示故障发生在什么点、状态或状态序列。

在验证中的一个是经由其他验证方法执行的情况下,系统可以另外地或替代地包括一个或多个其他验证工具。例如,在一个或多个验证是经由基于模拟的验证来执行的情况下,系统可以包括模拟引擎。

如本领域技术人员所知的,模拟引擎是能够对硬件设计执行基于模拟的验证的软件工具。具体而言,模拟引擎响应于测试集中的每个输入向量(例如,子集中的每个输入向量)来监测硬件设计的一个或多个例式的输出)以确定特定属性(例如,实例化的输出相对于函数是正确的,或者硬件设计的两个不同实例化的输出产生相关输入向量的置换相关输出)。

模拟引擎可以使用任何已知的方法执行基于模拟的验证。例如,模拟引擎可以接收硬件设计(在例如hdl中),将hdl转换为另一种语言(例如c),并且在c代码上执行模拟;模拟引擎可以接收硬件设计,作为例如hdl,并且直接对hdl执行模拟;或者模拟引擎可以实施硬件中的硬件设计,并且对硬件执行模拟。一旦模拟完成,模拟引擎就可以输出硬件设计是否通过了模拟的指示。

数学证明1

以下是一数学证明,其确定:假设满足对于所有的x∈x存在φ∈r使得对于子集中的所有输入向量x,对于相关置换的组r中的所有输入向量σ,形式验证a(x)=a(σx),将确定对于输入空间x中的所有输入向量x,a(x)=a(σx)。

引理:如果对于每一个和σ∈r,有a(x)=a(σx),则对于每个x∈x和σ∈r,a(x)=a(σx)。

证明:选择x∈x和σ∈r。存在置换φ使得使y=φx。继而x=φ-1y且a(x)=a(φ-1y)=a(y)。类似地,存在置换ψ使得使其=ψ(σx)。继而a(z)=a(ψ-1z)=a(σx).。所以这就足以证明a(z)=a(y).。

由于y和z两者是x的置换,其遵循y和z是彼此的置换:置换τ=ψσφ-1使得由于τy=z且a(y)=a(τy).

数学证明2

以下是数学证明,其确定了:对于生成所有相关置换r的组的集合g中的每个输入向量置换ρ,并且对于输入空间x中的所有输入向量x,形式验证a(x)=a(ρx),将确定对于输入空间x中的所有输入向量x,对于r中的所有σ,a(x)=a(σx)。

引理:对于组件a和生成集g={φi|i=1,...,m},对于r,如果对于i=1,...,m以及所有x∈x,a(x)=a(φix),则对于所有σ∈r和所有x∈x,a(x)=a(σx)。

证明:由于{φi|i=1,...,m}生成r,则对于一些i0...ik∈{1,...m},s0...sk∈{1,-1},证明通过对k的归纳进行。

当k=0时,在a(x)=a(σx)=a(φix)的情况下,对于一些i,σ=φi,或者在后一种情况下,可以观察到根据引理的假设:对于所有y,a(y)=a(φiy),从而对于

假设结果适用于长度为k的所有生成器字符串作为归纳假设,其遵循:并且通过对基本情况的论证:

测试结果

以下是对三个组分a1、a2和a3的验证的总结,这些均实施了排序函数,该排序函数接收包括n个输入元素x0到xn-1的输入向量x并且输出按升序的输入元素的向量。a2通过将所有的输入元素相互进行比较并查看每个元素大多少倍,实施了排序函数。a1和a3实施了奇数-偶数合并排序,其工作是通过对输入的子集进行排序,并然后将这些子集合并在一起,然后再次对它们进行排序。a1和a3在比较方法方面不同。

对每个组件执行了以下形式验证:

·朴素验证——通过形式验证了对于输入空间x中的所有输入向量x,组件的实例化的输出是否等于c模型的输出(其工作类似于a2),形式验证了组件的实例化的输出对于输入空间x中的所有可能的输入向量x都是正确的。

·基本情况规范——通过形式验证了根据规范的结果,形式验证了组件的实例化的输出对于输入元素按升序的所有输入向量x是否是正确的(根据规范)。

·基本情况c模型——形式验证了组件的实例化的输出对于输入元素按升序的输入空间x中的所有输入向量x的c模型的输出匹配。

·相邻换位——形式验证了对于相邻换位σat-0、σat-1、σat-2、σat-3、σat-4、σat-5、σat-6中的每个,对于输入集x中的所有输入向量x,aj(x)=aj(σat-ix),其中,j是正在验证的组件的编号并且相邻换位σat-i交换第i和第(i+1)个输入元素。

·循环——形式验证了对于输入集x中的所有x,aj(x)=aj(σcx),其中j是正在验证的组件的编号,并且σc是循环置换,在该循环置换中,每个输入元素移位一个位置,并且最后一个输入元素(即,第(n-1)个输入元素)移位到第一个位置(即,位置零)。

·扩大的基本情况——形式验证了对于输入空间x中的所有x,组件的实例化的输出是否正确(根据规范),其中,通过根据规范对输出进行形式验证,输入元素的前半部分按升序,并且输入元素的后半部分按升序。

表2总结了:当有8个输入元素(即n=8)并且每个输入元素xi包括8位二进制数时,针对组件a1、a2、a3中的每个完成以上列出的形式验证中的每个所花费的时间(以秒为单位)。要注意的是,表2中所记录的是相邻换位形式验证是对于单个相邻换位验证要完成的平均值或平均时间。还要注意的是,这是一组代表性的完成时间,以及对于输入元素的其他数量和输入元素中的其他位数可以看到的完成时间之间的类似关系。还要注意的是,表2中的“na”值表示验证没有在合理时间内完成。

表2

表2示出了验证组件的实例化将为基本情况(输入元素按升序的输入向量)产生正确结果的时间明显小于验证组件的实例化将为所有输入产生正确结果的时间。这是所预期的,因为在基本情况验证中验证的输入向量的数量明显小于在朴素验证中验证的输入向量的数量。具体地,在朴素验证中,输入空间x中的所有输入向量x被验证,而在基本情况下只验证了输入元素x按升序的那些输入向量x。按升序的输入元素大致等于输入空间x中的输入向量的1/n!。

表2还显示了验证组件的实例化是否是关于相邻换位的置换在平均值上花的时间更少。由于可能有多达n-1个要验证的相邻换位,表2指示可以通过验证组件是否为基本情况产生正确的结果,并且然后验证组件是否是关于n-1个相邻换位的置换(即使相邻换位验证是按顺序执行的),更快地验证组件a2。至于组件a1和a3,表2似乎指示,尽管验证组件的实例化是否是关于所有相邻换位的置换的总时间可能大于完成朴素验证的时间,但如果并行执行相邻换位的验证,则可以在比朴素验证更短的时间内完成。

然而,当相邻换位验证被相邻换位破坏时,可以看出,一些相邻换位验证比其他相邻换位验证花费的时间要长得多。这在表3中示出,表3显示了完成组件a1的每个相邻换位验证(即,形式验证组件的实例化是否为关于相邻换位的置换)的时间(以秒为单位)。要注意的是,a3的结果是相似的。

表3

可以看出,完成a1的相邻换位验证的总时间的大约97%是验证a1是否是关于相邻换位σat-3的置换所花费的时间。这指示,即使相邻换位的验证是并行执行的,执行朴素验证所花的时间也比验证组件的实例化是否是关于相邻换位σat-3的置换所花的时间要少。.

我们发现,如果没有最小大小的基本情况(即,没有输入元素按升序的输入向量的基本情况),则扩大基本情况的集合,以从相关置换组r的生成集g中排除第四个相邻换位σat-3(即,基本情况包括输入向量,其中输入元素的前半部分按升序,输入元素的后半部分按升序),第四个相邻换位σat-3的验证不需要执行。从表2可以看出,以这种方式增加基本情况的数量只会将针对规范验证基本情况正确性的时间从6秒增加到38秒。这将针对a1的最快的验证时间从13281秒(3小时41分钟)减少到574秒(10分钟以下)。如果并行执行基本情况验证和相邻换位验证,则验证时间可减少至265秒,这刚好小于完成朴素验证时间的2%。可以通过进一步扩展基本情况以进一步包括要验证的下一个最慢的相邻换位(即在这种情况下,σat-1)并且不验证相邻换位来减少完成对a1的验证的时间。

表2还显示了形式验证工具通常发现验证测试组件(a1、a2和a3)的实例化置换是否是关于循环置换σc的置换的困难。验证a2是关于循环置换的置换花费891秒来完成,这明显比针对a2的朴素验证更长。验证工具甚至无法在合理的时间内完成针对a1或a3的循环置换的验证。对于其他数量的输入元素和对于具有另一位数的输入元素,可以看到类似的模式。因此,使用包括循环置换的生成集似乎不是验证组件的硬件设计(以类似于a1、a2和/或a3的类似方式实施排序函数)的有效方式。然而,从表2中可以看出,形式验证工具能够完成属性形式验证的容易程度可能取决于正在验证的组件的内部结构,因此使用包含循环置换(或其他复杂置换)的生成集对于实施另一个置换相关函数或以另一种方式实施排序函数的组件的硬件设计进行验证可能是有效的。

图6示出了基于计算的示例性设备600的各种组件,该示例性设备600可以被实施为计算和/或电子设备的任何形式,并且其中可以实施本文所述的方法和系统的实施例。

基于计算的设备600包括一个或多个处理器602,所述一个或多个处理器602可以是用于处理计算机可执行指令的微处理器、控制器或任何其他适合类型的处理器,以控制设备的操作,以便验证实施置换相关函数的组件的硬件设计的属性。在一些示例中,例如,在使用芯片架构上的系统的情况下,处理器602可以包括一个或多个固定函数块(也被称为加速度器),所述一个或多个固定函数块实施了验证组件的硬件设计(以硬件而非软件或固件的方式实施置换相关函数)的一部分方法。可以在基于计算的设备上提供包括操作系统604或任何其他适合的平台软件的平台软件,以使应用软件(例如形式验证工具504)能够在设备上执行。

计算机可执行指令可以使用由基于计算的设备600可访问的任何计算机可读介质提供。例如,计算机可读介质可以包括计算机存储介质,例如存储器606和通信介质。计算机存储介质(即非暂时性机器可读介质),例如存储器606,包括以任何方法或技术实施的易失性和非易失性介质、可移除和不可移除介质,以用于存储信息,例如计算机可读指令、数据结构、程序模块或其他数据。计算机存储介质包括但不限于ram、rom、eprom、eeprom、闪速存储器或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光学存储、盒式磁带、磁带、磁盘存储或其他磁性存储设备、或可以用于存储信息以供由计算设备访问的任何其他非传输介质。相比之下,通信介质可以包含计算机可读指令、数据结构、程序模块或经调制的数据信号中的其他数据,例如载波或其他传输机制。如本文所定义,计算机存储介质不包括通信介质。尽管计算机存储介质(即非暂时性机器可读介质,例如存储器606)被显在基于计算的设备600内,但要意识到的是,存储可以经由网络或其他通信链路(例如,使用通信接口608)进行分布或远程定位和访问。

基于计算的设备600还包括输入/输出控制器610,所述输入/输出控制器610被布置为将显示信息输出到显示设备612,所述显示设备612可以与基于计算的设备600分开或集成在一起。显示信息可以提供图形用户界面。输入/输出控制器610还被布置为接收和处理来自一个或多个设备的输入,实施一个或多个设备例如为用户输入设备614(例如鼠标或键盘)。该用户输入可以用于启动验证。在实施例中,如果显示设备612是触敏式显示设备,则其也可以起到用户输入设备614的作用。输入/输出控制器610还可以将数据输出到除显示设备以外的设备,例如本地连接的打印设备(图6中未显示)。

图7显示了计算机系统,在该计算系统中可以实施组件100,组件100实施置换相关函数。计算机系统包括cpu702、gpu704、存储器706和其他设备714,其他设备714例如为显示器716、扬声器718和相机720。gpu704被显示为包含组件100。在其他示例中,组件100可以在cpu702中实施。计算机系统的部件可以经由通信总线722相互通信。

实施本文所述的置换相关函数的组件可以包含在集成电路的硬件中。通常,上述函数、方法、技术或组件中的任何一项可以在软件、固件、硬件(例如,固定逻辑电路)或其任何组合中实施。术语“模块”、“功能”、“组件”、“元素”、“单元”、“块”和“逻辑”在本文中可用于通常表示软件、固件、硬件或其任何组合。在软件实施方式的情况下,模块、功能、组件、元素、单元、块或逻辑表示在处理器上执行时进行指定任务的程序代码。本文所述的算法和方法可由执行代码的一个或多个处理器执行,该代码使(多个)处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪速存储器、硬盘存储器和任何其他存储设备,这些存储设备可以使用磁、光和其他技术来存储指令或其他数据,并且其可以由机器访问。

本文所用的术语计算机程序代码和计算机可读指令指的是处理器的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表示的代码。可执行代码包括二进制代码、机器代码、字节码、定义集成电路的代码(例如硬件描述语言或netlist)、以及以编程语言代码(c语言、java或opencl)表示的代码。例如,可执行代码可以是任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中适当地执行、处理、解释、编译、执行时,其使得支持可执行代码的计算机系统的处理器执行由代码指定的任务。

处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路、或其集合或部分,这些具有处理能力使其能够执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、片上系统、状态机、介质处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。

其旨在包含定义如本文所述的硬件的配置的软件,例如hdl(硬件描述语言),因为其用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上以集成电路定义数据集(也可以称为硬件设计)的形式编码有计算机可读程序代码,当在集成电路制造系统中处理(即运行)时,其将系统配置为制造包括本文所述的任何装置的计算设备。例如,集成电路定义数据集可以是集成电路描述。

因此,在集成电路制造系统中,可以提供一种制造组件的方法,该组件用于实施本文所述的置换相关函数。此外,还可以提供集成电路定义数据集,当在集成电路制造系统中进行处理时,其使得制造实施置换相关函数的组件的方法被执行。

集成电路定义数据集可以采用计算机代码的形式,例如作为netlist,用于配置可编程芯片的代码;作为定义适合在任何级别的集成电路中制造的硬件的硬件描述语言,包括如寄存器传输级(rtl)代码;作为高级电路表示,例如verilog或vhdl;以及作为低级电路表示,例如oasis(rtm)和gdsii。逻辑上定义适合于集成电路中制造的硬件的较高级表示(例如rtl)可以在计算机系统中处理,该计算机系统被配置为:在包含电路元素定义和用于组合那些元素的规则的软件环境的背景下生成集成电路的制造定义,以便生成从而由表示定义的集成电路的制造定义。与通常在计算机系统上执行以定义机器的软件的情况一样,可能需要一个或多个中间用户步骤(例如提供命令、变量等),以便被配置为生成集成电路的制造定义的计算机系统执行定义集成电路的代码,以便生成该集成电路的制造定义。

现在将关于图8描述在集成电路制造系统处处理集成电路定义数据集(例如硬件设计)以将该系统配置为制造实施置换相关函数的组件的示例。

图8显示了集成电路(ic)制造系统802的示例,所述集成电路制造系统802被配置为制造实施本文任何示例中所述的置换相关函数的组件。具体来说,集成电路制造系统802包括布局处理系统804和集成电路生成系统806。ic制造系统802被配置为:接收ic定义数据集/硬件设计(例如,定义实施本文任何示例中所述的置换相关函数的组件),处理ic定义数据集,并且根据ic定义数据集生成ic(例如,其将组件体现为本文的任何示例中所描述的组件)。ic定义数据集的处理将ic制造系统802配置为制造集成电路,该集成电路体现实施如本文任何示例中所述的置换相关函数的组件。

布局处理系统804被配置为接收和处理ic定义数据集/硬件设计,以确定电路布局。例如就逻辑组件(例如nand、nor、and、or、mux和触发器组件)而言,本领域中已知从ic定义数据集确定电路布局的方法,例如,可能涉及合成rtl代码以确定要生成的电路的门级表示。可以通过确定逻辑组件的位置信息,从电路的门级表示确定电路布局。这可以自动完成,也可以有用户参与,以便优化电路布局。当布局处理系统804确定了电路布局时,其可以向ic生成系统806输出电路布局定义。例如,电路布局定义可以是电路布局描述。

如本领域所知,ic生成系统806根据电路布局定义生成ic。例如,ic生成系统806可以实施半导体器件制造工艺以生成集成电路,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,电子电路逐步在由半导体材料制成的晶片上产生。电路布局定义可以是掩模的形式,该掩模可以用于根据电路定义生成ic的光刻工艺中。替代地,提供给ic生成系统1006的电路布局定义可以采用计算机可读代码的形式,ic生成系统1006可以用其来形成用于生成ic的适合的掩模。

由ic制造系统802执行的不同过程可全部在一个位置实施,例如由一方实施。替代地,ic制造系统802可以是分布式系统,使得一些过程可以在不同的位置执行,并且可以由不同的各方执行。例如,可以在不同的位置和/或由不同的各方执行以下几个阶段中的一些:(i)合成表示ic定义数据集的rtl代码以形成要生成的电路的门级表示;(ii)基于门级表示生成电路布局;(iii)根据电路布局形成掩模;以及(iv)使用掩模制造集成电路。

在其他示例中,在集成电路制造系统中对集成电路定义数据集的处理可以将该系统配置为制造实施置换相关函数的组件,而不需要处理ic定义数据集来确定电路布局。例如,集成电路定义数据集可以定义可重构处理器(例如fpga)的配置,并且该数据集的处理可以配置ic制造系统以生成具有该定义的配置的可重构处理器(例如,通过将配置数据加载到fpga)。

在一些实施例中,集成电路制造定义数据集/硬件设计在集成电路制造系统中进行处理时,可以使得集成电路制造系统生成如本文所述的设备。例如,以关于图8如上所述的方式由集成电路制造定义数据集配置集成电路制造系统可以使得如本文所述的设备被制造。

在一些示例中,集成电路定义数据集可以包括在数据集定义的硬件上运行或与数据集处定义的硬件结合的软件。在图8所示的示例中,ic生成系统还可以通过集成电路定义数据集/硬件设计被配置为:在制造集成电路时,根据集成电路定义数据集处定义的程序代码将固件加载到集成电路,或以其他方式向集成电路提供与集成电路一起使用的程序代码。

在本申请中,在设备、装置、模块和/或系统(以及本文所实施的方法)中阐述的概念的实施方式,在与已知实施方式相比时,可能会提高性能改进。性能改进可以包括一个或多个增加的计算性能、减少的延迟、增加的吞吐量和/或降低的功耗。在制造这样的设备、装置、模块和系统(例如集成电路中)的过程中,性能改进可以针对物理实施方式进行权衡,从而改进制造方法。例如,性能改进可以针对布局区域进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,本申请中阐述的提高设备、装置、模块和系统(例如减小的硅区)的物理实施方式的概念可针对改进性能进行权衡。例如,这可以通过在预先定义的区域预算内制造模块的多个实例来完成。

申请人在此单独地公开本文所述的每个单独特征和两个或更多个这样的特征的任何组合,以至于根据本领域技术人员的公知常识这样的特征或组合能够基于本说明书作为一个整体来执行,而不考虑这样的特征或特征组合是否解决了本文所公开的任何问题。鉴于上述描述,本领域技术人员将明显的是可以在本发明范围内进行各种修改。

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