用于验证排序器的方法和系统与流程

文档序号:26939656发布日期:2021-10-12 14:59阅读:114来源:国知局
用于验证排序器的方法和系统与流程

1.本发明涉及用于验证排序器的方法和系统。


背景技术:

2.诸如片上系统(soc)等许多电子装置包括实施排序功能的元件,称为“排序器”。此类排序器可以实施不同类型的排序算法(例如,冒泡排序算法或归并排序算法,以及许多其它众所周知的算法)。此类排序器还可以与不同类型的数据,例如文本或数字一起工作。就本文而言,算法或数据类型并不重要。在所有情况下,都期望能够验证排序器是否正确工作。
3.可以例如通过形式验证或基于模拟的验证来验证硬件设计。形式验证是使用硬件设计的数学模型和数学推理来验证硬件设计的系统性过程。相反,基于模拟的验证是这样的过程,其中通过将刺激应用于硬件设计的实例化并监测硬件设计的实例化响应于该刺激的输出来测试硬件设计。
4.与基于模拟的验证相比,形式验证可以提高可控性。当彻底模拟硬件设计所需的模拟测试信号或矢量的数量变得难以管理时,就会出现可控性差的情况。例如,一个32位比较器需要2
64
个测试矢量。通过基于模拟的验证进行彻底验证可能需要数百万年的时间。通过执行形式验证,可以在不到一分钟的时间内验证32位比较器。
5.在形式验证中,将硬件设计变换成数学模型(例如,状态变换系统或流程图),从而提供硬件设计的实例化,可以测试该实例化以验证硬件设计,使用数学逻辑,使用精确的语法或使用具有精确的数学语法和语义的语言,来表示要验证的形式属性。
6.使用形式验证工具(即能够执行硬件设计形式验证的软件工具)来执行形式验证。一些形式验证工具,例如形式等价校验器(例如,hector和其它逻辑等价校验器(lec)和顺序逻辑等价校验器(slec))擅长验证与数据转换(例如算术运算)有关的属性,但通常仅可用于在有限时间段内验证属性。其他验证工具,诸如形式属性校验器,也可以称为形式模型校验器(例如,onespin 360dv
tm
、mentor graphicsformal verification、vc formal、enterprise verifier和),擅长在无限时间段内验证属性,但在验证与数据转换(诸如算术运算)相关的属性方面表现不佳。
7.虽然形式验证可以是彻底验证硬件设计的属性的有效方法,但是只有当待验证的属性以形式验证工具可以解决由此提出的数学问题的方式呈现时,情况才如此。当形式验证工具能够解决由硬件设计和待验证的属性提出的数学问题时,则形式验证就可以收敛。然而,当形式验证工具无法解决硬件设计和待验证的属性所提出的数学问题时,形式验证就不会收敛,并且不会输出任何结果,并且验证没有结论。
8.虽然排序器在概念上是简单的,但排序器的常规或“朴素”形式变型涉及复杂性,导致收敛缓慢,这种情况对于大量多组输入来说变得越来越明显。替代验证方法有其自身
的缺点。模拟测试是可能的,但是随着输入的数量及其位宽度的增加,可能变得计算成本过高而无法实行。任何非全面测试还带来了设计足够的测试数据集的问题,并带来了检测不到错误的可能。另一个选项是针对另一个排序器执行等价性校验。然而,根据另一个排序器是否基于相同的底层算法,这带来了不同的问题。如果它是基于相同的算法,那么有可能两个排序器都发生相同的错误,该错误表现为算法或可能实现其的方式的人为错误。这种错误将无法通过等价性校验检测到(即,由于两个排序器都将输出错误结果,但来自每个排序器的结果将是相同的,因此它们将看起来相互印证两个排序器都在正常工作)。另一方面,如果另一排序器不是基于相同算法,则存在更大可能验证不会收敛,使得等价性校验得不到结论。
9.下面描述的实施例仅以举例的方式提供,并且不限制解决了验证排序器的硬件设计的已知方法和系统的任何或所有缺点的实现方式。


技术实现要素:

10.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
11.公开了验证排序器的硬件设计的方法和系统。所述方法包括生成接受扩展输入的排序器的硬件设计的修改版本,以及执行形式验证,包括:实施约束,即扩展输入集合中的每个输入的最低有效位表示唯一值;以及对于扩展输入集合,形式验证排序器的硬件设计的修改版本的各方面。
12.根据第一方面,提供了一种验证排序器硬件设计的方法,所述排序器接受每个位宽度都为m的基础输入,所述方法包括如下步骤中的一个或多个:生成所述排序器的所述硬件设计的修改版本,所述修改版本接受位宽度为m+q的扩展输入;以及执行形式验证,包括:实施约束,即,扩展输入集合中的每个输入的q个最低有效位表示唯一值;以及对于扩展输入集合形式验证排序器的硬件设计的修改版本的各方面。
13.任选地,执行形式验证的步骤还可包括:实施约束,即,扩展输入集合中的每个扩展输入的m个最高有效位等于用于接收基础输入集合的排序器的硬件设计的未修改版本的基础输入集合的相应最高有效位;并且其中,对于扩展输入集合形式验证排序器的硬件设计的修改版本的各方面包括形式验证所述排序器的所述硬件设计的所述修改版本的每个排序输出的m个最高有效位等于由接收所述基础输入集合的所述排序器的所述硬件设计的未修改版本获得的相应输出。
14.任选地,基础输入集合由n个输入构成,并且进一步任选地,扩展输入集合中的每个输入的q个最低有效位可以表示从0到n

1的唯一值。
15.任选地,基础输入集合由n个输入构成,并且q≥n。进一步任选地,扩展输入集合中的每个输入的q个最低有效位可以实施唯一独热编码。
16.任选地,对于扩展输入的所述集合,形式验证排序器的硬件设计的修改版本的各方面包括:形式验证扩展输入的集合与排序器的硬件设计的修改版本的输出的集合之间的集合等同性。进一步任选地,执行形式验证进一步包括通过以下方式之一形式验证排序:通
过形式验证排序器的硬件设计的修改版本的输出的排序,进一步对于扩展输入集合形式验证排序器的硬件设计的修改版本的各方面;或形式验证排序器的硬件设计的未修改版本的输出的排序。
17.任选地,形式验证集合等同性可包括验证输出中的每个都出现为输入。形式验证排序可以包括验证排序器的硬件设计的修改版本的输出是按顺序的,并且相邻输出不等同。替代地,形式验证集合等同性可包括验证输入中的每个都出现为输出。形式验证排序可以包括验证排序器的硬件设计的修改版本或未修改版本的输出是按顺序的。
18.任选地,执行形式验证的所述步骤进一步包括实施以下约束:基础输入集合中的所有输入都是排序器的硬件设计的未修改版本的有效输入,并且扩展输入集合中的所有输入都是排序器的硬件设计的修改版本的有效输入。
19.任选地,执行形式验证进一步包括输出指示验证是否成功的一个或多个信号的步骤。
20.任选地,所述方法还包括在形式验证不成功的情况下修改排序器的硬件设计的步骤。
21.任选地,如果形式验证成功,所述方法还包括根据用于排序器的硬件设计制造包括排序器的集成电路的步骤。
22.根据第二方面,提供了一种使用集成电路制造系统制造集成电路的方法,所述集成电路包括根据排序器的硬件设计的排序器,所述硬件设计已根据第一方面的任何变化进行验证。
23.根据第三方面,提供了一种使用集成电路制造系统来制造包括排序器的集成电路的方法,该方法包括:根据第一方面的任何变化的方法验证排序器的硬件设计,其中,硬件设计的形式为包括排序器的集成电路的计算机可读描述;以及使用布局处理系统处理计算机可读描述,以生成包括排序器的集成电路的电路布局描述;以及使用集成电路生成系统制造包括排序器的集成电路。
24.根据第四方面,提供了一种用于验证排序器硬件设计的系统,所述排序器接受每个位宽度都为m的基础输入,所述系统包括如下一者或多者:存储器,所述存储器被配置成存储:排序器的硬件设计的修改版本,所述修改版本接受位宽度为m+q的扩展输入;以及形式验证工具;以及一个或多个处理器,所述一个或多个处理器被配置成使用所述形式验证工具通过如下方式执行形式验证:实施约束,即,扩展输入集合中的每个输入的q个最低有效位表示唯一值;以及对于扩展输入集合形式验证排序器的硬件设计的修改版本的各方面。
25.任选地,一个或多个处理器被配置成使用形式验证工具进一步通过如下方式执行形式验证:实施约束,即,扩展输入集合中的每个扩展输入的m个最高有效位等于用于接收基础输入集合的排序器的硬件设计的未修改版本的基础输入集合的相应最高有效位;并且对于扩展输入集合形式验证排序器的硬件设计的修改版本的各方面包括形式验证所述排序器的所述硬件设计的所述修改版本的每个排序输出的m个最高有效位等于由接收所述基础输入集合的所述排序器的所述硬件设计的未修改版本获得的相应输出。
26.任选地,基础输入集合由n个输入构成,并且扩展输入集合中的每个输入的q个最低有效位可以表示从0到n

1的唯一值。
27.任选地,基础输入集合由n个输入构成,并且q≥n。扩展输入集合中的每个输入的q个最低有效位可以实施唯一独热编码。
28.任选地,对于扩展输入集合,形式验证排序器的硬件设计的修改版本的各方面还包括:形式验证扩展输入的集合与排序器的硬件设计的修改版本的输出的集合之间的集合等同性。
29.任选地,执行形式验证进一步包括通过以下方式之一形式验证排序:通过形式验证排序器的硬件设计的修改版本的输出的排序,进一步对于扩展输入集合形式验证排序器的硬件设计的修改版本的各方面;或形式验证排序器的硬件设计的未修改版本的输出的排序。
30.任选地,形式验证集合等同性可包括验证输出中的每个都出现为输入。形式验证排序可以包括验证排序器的硬件设计的修改版本的输出是按顺序的,并且相邻输出不等同。替代地,形式验证集合等同性可包括验证输入中的每个都出现为输出。形式验证排序可以包括验证排序器的硬件设计的修改版本或未修改版本的输出是按顺序的。
31.任选地,所述一个或多个处理器被配置成使用形式验证工具进一步实施以下约束来执行形式验证:基础输入集合中的所有输入都是排序器的硬件设计的未修改版本的有效输入,并且扩展输入集合中的所有输入都是排序器的硬件设计的修改版本的有效输入。
32.任选地,所述一个或多个处理器被配置成使用形式验证工具,通过进一步输出指示验证是否成功的一个或多个信号来执行形式验证。
33.根据第五方面,提供了计算机可读代码,所述计算机可读代码被配置成在运行所述代码时使根据所述第一方面或所述第二方面的任何变化的方法被执行。
34.根据第六方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上编码有根据第五方面所述的计算机可读代码。
35.根据第七方面,提供了一种验证排序器硬件设计的方法,所述排序器接受每个位宽度都为m的基础输入,所述方法包括如下步骤中的一个或多个:生成所述排序器的所述硬件设计的修改版本,所述修改版本接受位宽度为m+q的扩展输入;以及执行形式验证,包括:实施约束,即,扩展输入集合中的每个输入的q个最低有效位将每个基础输入表示为唯一值;以及通过如下方式来形式验证接受每个位宽度均为m的基础输入的排序器的硬件设计:针对扩展输入集合对排序器的硬件设计的修改版本的各方面进行形式验证。
36.根据第八方面,提供了一种用于验证排序器硬件设计的系统,所述排序器接受每个位宽度都为m的基础输入,所述系统包括如下一者或多者:存储器,所述存储器被配置成存储:排序器的硬件设计的修改版本,所述修改版本接受位宽度为m+q的扩展输入;以及形式验证工具;以及一个或多个处理器,所述一个或多个处理器被配置成使用所述形式验证工具通过如下方式执行形式验证:实施约束,即,扩展输入集合中的每个输入的q个最低有效位将每个基础输入表示为唯一值;以及通过如下方式来形式验证接受每个位宽度均为m的基础输入的排序器的硬件设计:针对扩展输入集合对排序器的硬件设计的修改版本的各方面进行形式验证。
37.一种排序器的硬件设计在集成电路制造系统中被处理时可以配置所述系统以制造所述排序器。可以提供一种非暂时性计算机可读存储介质,其上存储有根据上述第一方面验证的排序器的硬件设计,该硬件设计在集成电路制造系统中被处理时使集成电路制造
系统制造体现该排序器的集成电路。
38.可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂时性计算机可读存储介质,其上存储有根据上述第一方面验证的排序器的硬件设计;布局处理系统,该布局处理系统被配置为处理硬件设计以生成体现排序器的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造排序器。
39.可提供用于执行本文中描述的任一方法的计算机程序代码。可提供非暂时性计算机可读存储介质,在其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使所述计算机系统执行本文中描述的任何方法。
40.如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
41.现在将参考附图详细描述示例,在附图中:
42.图1是示例性排序器的框图;
43.图2a至图2c示出了比较排序器的输入和输出的示例,其中图2a示出了没有输入的多重性或任何误差的示例,图2b示出了在存在输入的多重性和误差的情况下比较输入与输出的示例,图2c示出了在存在输入的多重性和误差的情况下比较输出与输入的示例;
44.图3是示出排序器的输入的框图;
45.图4是示出排序器的修改输入的框图;
46.图5是示出形式验证排序器的方法的框图;
47.图6是示出形式验证排序器的方法的流程图;
48.图7是用于验证排序器的硬件设计的示例性系统的框图;
49.图8是示例性基于计算的装置的框图;
50.图9是其中可实现排序器的示例性计算机系统的框图;以及
51.图10是用于生成体现排序器的集成电路的示例性集成电路制造系统的框图。
52.附图示出了各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同附图标记来指示相似特征。
具体实施方式
53.通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开的实施例的各种修改对于所属领域的技术人员而言将是显而易见的。仅通过示例的方式描述实施例。
54.当考虑排序器时,有三个要求需要常规形式验证力图证实:(i)输出被正确排序;(ii)每个输出与输入相同(或反之);以及(iii)输入和输出具有相同的多重性(即,每个输入在输出中出现正确次数)。
55.这三个要求是按照复杂性增加的顺序提出的。输出有序的要求相对容易验证。每个输出也是输入的要求通常也是可以验证的,但可能比有序属性更难。然而,第三要求往往
验证起来最复杂,并且可能使排序器的形式验证缓慢,甚至导致无法收敛,特别是在排序器的大小(即,其接收的输入的数量)增加时。
56.现在参考图1和图2a至图2c进一步考虑多重性问题。
57.图1示出了接受输入x
i
的集合x并产生输出y
i
的集合y的排序器100。根据集合x和y是严格集合还是多重集合,排序器100形式验证的要求有所不同。在本文件中,术语“严格集合”用于指代没有任何重复值的集合,而“多重集合”用于指代其中多个元素可能具有相同值的集合。可能知道或可能不知道某个集合是严格集合还是多重集合,并且在本文件中使用未限定术语“集合”本身并不具体为严格集合或多重集合(即,其是一般术语),尽管使用的上下文可能暗示其在特定环境中指代一者或另一者。
58.验证两个严格集合(即在任一集合内没有任何重复值)之间的等同性在形式验证中相对廉价。给定相同大小的严格集合x={x
i
}和y={y
i
}其中i=0,

,11,要显示集合的等同性,只需要显示(或者,),于是,根据鸽巢原理,由此可以看出,所述集合是等同的。
59.换句话说,对于严格集合排序器,可以通过将每个输入x
i
与每个输出y
i
进行比较以确认其存在于输出集合y中,从而确认每个输入出现于输出的集合中。只要各个输入是唯一的,并且输出与输入一样多,那么如果每个输入被校验并确认作为输出存在,那么也可以确认集合是等同的。这在图2a中以图形方式示出,其中,每个输入是唯一的,并且映射到输出。在这种情况下,如果已知输入和输出集合为相同大小,则可以推断出输入和输出的集合是等同的。类似地,可以通过校验每个输出y
i
出现于输入集合x中而确定相同结论。
60.然而,当比较多重集合时出现复杂性,其中,可能其中包含的多个元素具有相同的值。在验证排序器的上下文中,如果某些输入具有相同的值,则仅仅逐个校验(即,不考虑可能的多重性)每个输入映射到对应输出是不够的。这是因为这样考虑可能导致具有相同值的两个输入被认为映射到相同输出。在这样的情况下,可能会得出这样的结论:每个输入都有对应的输出,因此,排序器已经毫无错误地通过了所有输入。然而,如图2b中所示,这种结论可能是错误的。
61.在图2b的示例中,已经提供了元素的多重集合{a,b,c,c}作为排序器的输入集合(尽管示例中不需要排序器重新排序)。排序器错误地将输入通过为输出的多重集合{a,b,b,c}。也就是说,输入多集的第三和第四要素具有相同的值,即,它们都是“c”。输入多重集合中只有一个“b”,作为第二元素出现。然而,“c”元素中的一个被错误地通过为“b”,意味着“b”在输出多重集合中出现两次,而“c”仅出现一次。
62.如箭头所示,校验图2b的每个输入元素具有对应的输出(不考虑多重性),似乎表明不存在错误。类似地,通过从输出开始并校验它们各自具有对应的输入,如图2c中所示(表示相同情境,但箭头指示从输出开始校验),不会检测到错误。在这种情况下,如果还校验输入和输出中的元素的多重性,则仅会通过常规方法检测到错误。如上所述,在计算方面这样校验相对复杂,特别是在输入空间增加时,因此这种校验是缓慢的。
63.图3示出了多重集合排序器的输入x
i
。个体输入具有位宽度m,并且可以有n个这些输入到排序器。
64.对排序器设计的输入通常是可以参数化的,以使其易于改变(例如,为不同的输入大小生产类似排序器)。已经确定,通过考虑如下情况,可以用此来验证排序器的设计:将宽
度为m的每个基础输入的长度扩展另外的q位,以生成长度为m+q的扩展输入。在图4中示出了这种情况,其中,另外的q位已经被添加为输入的最低有效位(lsb)。
65.虽然增加每个输入的长度可能是加快排序器验证的反直觉步骤,因为处理更长的输入似乎会增加排序器的复杂性,但它允许将额外的q位用作原始输入的唯一标识符。也就是说,从位宽度为m的基础输入的多重集合开始,可以将额外q位附加到每个基础输入,额外的位可以充当每个输入的唯一“标签”。如下所述,唯一标签可以用于简化验证。还应指出,验证排序器的复杂性更多地取决于输入的数目而不是输入的长度,使得如下所述增加输入的长度对于所获得的总体优势而言是有价值的。
66.为输入多重集合之内的每个输入提供唯一标签所需的位数q取决于多重集合的大小和唯一标签的格式。
67.在一种方法中,标签可以从值“0”开始递增,对于多重集合中的每个输入增加“1”。在这种方法中,每个标签的唯一值可以在位中编码,其中n是输入的数目,使得这种类型的编码是简单而高效的,但是对于每个新标签,唯一值不需要从“0”开始,按“1”递增——其他方法只需要更大的q,(即,因此通常)。例如,如果唯一标签从最低值2开始,则与从0开始相比,可能需要额外的位。
68.作为另一种方法的示例,可以使用“独热”编码。也就是说,在任何给定的标签中,q位中的每个都可以被设置为“0”,除了一个位被设置为“1”。对于每个不同的标签,不同的位被设置为“1”。在这种方法中,在效率最高的情况下,所需位数q将与输入的数目n相同(即,q=n),但再次可能使用更多位,并且该技术仍然有效(即,因此通常q≥n)。
69.因此,即使位宽度为m的原始基础输入不是唯一的,扩展输入也可以由附加的q位而变为唯一。此外,通过附加唯一的q位至原始基础输入作为lsb,与原始基础输入相比,没有修改正确的排序顺序。这是因为基础输入的原始m位被保留为扩展输入的最高有效位(msb),因此扩展输入将按与对应基础输入相同的顺序被排序。
70.上文的考虑允许以改进方法形式地验证排序器。实质上,可以省去直接验证多重集合等同性的步骤。这是通过考虑原始(或“实施”)排序器设计的修改(或“验证”)版本来实现的,其中,与实施设计相比,修改设计接受具有额外q位的扩展输入,并且q位对于每个输入代表唯一值。可以通过如下方式来在形式上验证实施设计:证明验证设计的输入和输出之间的集合等同性,还证明实施设计和验证设计的输出之间的m个最高有效位之间的等同性。当然,仍然需要验证输出是有序的。这样一来,实施设计的形式验证包括形式验证验证设计的各方面。
71.图5示出了这种方法。原始实施模型未经直接验证,至少未经完全验证。相反,实施设计用于导出修改验证模型,以用于形式验证中。陈述了关于实施模型的输入502和验证模型的输入506的假设(也称为“条件”)。至少在其输入和输出之间存在集合等同性,并且验证模型的输出508与输入实施模型相同(除了包括唯一标签之外)的意义上,使用断言来证明验证模型提供了正确输出508。根据实施方式的详细情况(下文将更详细地讨论),可以向实施或验证模型应用另一断言以证明输出的正确排序。因此,可以推断实施模型工作正确。
72.为了执行形式验证,可以对验证做出以下约束(可以将其实现为假设语句):
73.(1)假设所有输入对于实施模型和验证模型有效;
74.(2)假设每个对应输入对(即,实施模型的未扩展输入,以及验证模型的对应扩展输入)的m个最高有效位相等(因此两个不同模型的输入仅在低有效性唯一性位中不同);以及
75.(3)假设为了生成验证模型的输入而添加到基础输入的q位是唯一的(具有已知格式,例如上述格式中的一种)。
76.假设(1)有效地限制了验证以考虑有意义的输入(因此忽略了因输入不正确而产生的错误,这些错误对于理解排序器设计的正确性无用)。假设(2)规定验证在每个模型中考虑相同的基础输入。假设(3)消除了在确定验证模型的正确性时考虑多重性问题的任何需要,因为已知验证模型的每个输入都是唯一的。
77.然后,可以进行形式验证,以证明以下断言:
78.(a)断言验证模型的输入和输出集合(具有唯一元素)等同;
79.(b)断言每个模型的对应输出的m个最高有效位等同;
80.(c)断言输出是有序的。
81.应认识到,断言(a)至(c)与前述用于验证各个排序器设计的三个常规要求不同,所述三个常规要求即(i)输出被正确排序;(ii)每个输出与输入相同(或反之);以及(iii)输入和输出具有相同的多重性。要求(i)与断言(c)相似,但断言(c)不一定需要参照实施模型进行验证(取决于如何验证断言(a),如下所述)。而且,虽然断言(a)类似于先前的要求(ii),但它适用于验证模型而不是实施模型。最重要的是,就对验证的影响而言,由于验证模型中所考虑的输入的唯一性质,较早前的要求(iii)被免除,并且对于断言(b),仅保持表明,无论有无验证模型的额外q位,模型都以相同方式工作。
82.应当指出,与常规/朴素方法相反,验证断言(a)在从输入开始时不允许得出与从输出开始时相同的结论。也就是说,如果测试是否所有输入都出现为输出,那么在验证断言时能够推断出的结论与测试是否所有输出都作为输入而存在时稍有不同。这与以下事实相关:由于额外的q位,已经知道输入是唯一的。因此,如果通过测试是否每个输入都出现为输出来验证断言(a),则可以得出结论:每个输出都是唯一的,因为每个输入都是唯一的。然而,如果通过测试是否每个输出都出现为输入来验证断言(a),则无法直接推断每个输出是唯一的,因为仍然存在两个输出已被映射到相同输入的可能性。
83.换句话说,两个输入映射到相同输出的可能性在逻辑上被每个输入是唯一的要求排除(即使在故障排序器的情况下也如此)。因此,如果输入和输出集合大小相同,那么如果每个(唯一)输入都可以被映射到输出,则输出也必须是唯一的。然而,输入是唯一的要求在逻辑上并不排除多个输出可以被映射回到单个输入的可能性(例如,在故障排序器的情况下)。错误的输出多重集合可能有两个值都被映射到单个(唯一)输入。
84.例如,如果唯一输入元素的严格集合{a,b,c,d}被排序器错误地通过为元素的多重集合{a,b,c,c},则校验每个输入元素出现为输出元素将识别d未出现为输出元素。因此,校验将识别出错误。然而,在相同情境中,校验每个输出元素是否出现为输入元素将不会识别d作为输入而存在而未作为输出而存在。因此,仅从这种校验无法识别出错误。
85.因此,就实施验证而言,如果通过校验每个输出是否出现为输入而实施等同性断言(断言(a)),那么就应该通过确保输出元素都在序列中并且有序输出中的相邻元素并不
等同来针对验证模型严格校验排序断言(断言(c))。例如,如果从最大到最小校验排序,则应当校验一个值是否严格小于,而不是仅仅小于或等于前一值。
86.相反,如果通过校验每个输入是否出现为输出而实施等同性断言(断言(a)),那么就可以通过校验输出元素在序列中而无需确保相邻元素并不等同,在验证模型或实施模型上不那么严格地校验排序断言(断言(c))。这是因为对其他断言的成功验证已经使得有可能得出输出将不等同的结论。因此,在从最大到最小校验排序的示例中,可以简单地校验一个值是否小于或等于前一值。应当注意,如果参照实施模型校验排序断言,则验证模型本身未完整得到形式验证,因此仅验证模型的一些方面被验证,以有助于实施模型的形式验证。
87.现在参考图6,其示出了验证排序器的硬件设计的示例性方法600。方法600可以由基于计算的装置,诸如但不限于以下关于图8描述的基于计算的装置800来实现。例如,可能存在其上存储有计算机可读指令的计算机可读存储介质,计算机可读指令在基于计算的装置处执行时使基于计算的装置执行图6的方法600。
[0088]“硬件设计”是对集成电路的结构和功能的描述,其在集成电路制造系统中被处理时致使集成电路制造系统生成由硬件设计描述的集成电路。例如,如下面参考图10更详细地描述的那样,当在集成电路制造系统中处理硬件设计时,集成电路制造系统可以通过将硬件设计合成到硅中或者通过将配置数据加载到现场可编程门阵列(fpga)中来生成集成电路。
[0089]
可以以高级硬件描述语言(hdl),例如但不限于寄存器传输级(rtl)语言,来实现硬件设计。寄存器传输级语言的示例包括但不限于vhdl(vhsic硬件描述语言)和对于本领域技术人员显而易见的是,可以使用其他高级硬件描述语言,诸如专有高级硬件描述语言。
[0090]“硬件设计的实例化”是由硬件设计定义的硬件和/或硬件功能的表示。硬件设计的实例化包括但不限于:集成电路硬件设计的仿真模型,其模拟由硬件设计定义的硬件的行为;硬件设计的合成版本(例如,网表);硬件设计的硬件实现(例如,集成电路或现场可编程门阵列(fpga));以及由形式验证工具生成的硬件设计的数学模型。硬件设计的实例化以可以被测试以验证硬件设计的形式来体现硬件设计。
[0091]
因此,排序器的硬件设计是对实现排序功能的集成电路的结构和功能的描述,当在集成电路制造系统中被处理时,该描述使集成电路制造系统生成实现排序功能的集成电路。
[0092]
方法600包括通过如下方式来对硬件设计的实例化(等价于前述实施模型)进行形式验证:同时考虑与未修改实例化相比接受扩展输入的硬件设计的修改实例化(等价于前述验证模型)。针对未修改实例化考虑输入的基础多重集合,而针对修改实例化考虑输入的扩展集合,扩展集合对应于上文所考虑的具有附带唯一标签的基础多重集合。经形式验证,至少在其输入和输出之间存在集合等同性的意义上,修改实例化利用扩展输入正确地工作,并且还经形式验证,修改实例化的输出与从未修改实例化获得的输出对应(即,在基础未扩展部分中相同)。进一步参考未修改或修改实例化(取决于上文已讨论的情况)来验证发生了正确排序。
[0093]
如上文针对实施模型所述,用于未修改实例化的输入的多重集合可以表示为n个输入,每个的位宽度为m位。如上文针对验证模型所述,用于修改实例化的输入的集合可以
表示为n个输入,每个的位宽度为(m+q)位,其中q是扩展位编码,作为扩展输入的lsb,为每个输入编码的唯一标签。对于每个实例化,输出的多重集合或集合将具有与输入相同的格式。
[0094]
方法600在框602处开始,在此接收用于排序器的硬件设计。
[0095]
一旦已经接收用于排序器的硬件设计,方法600就前进至框604。
[0096]
在框604处,经形式验证,至少在其输入和输出之间存在集合等同性的意义上,修改实例化利用扩展输入正确地工作,并且还经形式验证,修改实例化的输出与从未修改实例化获得的输出对应(即,具有相同的m个msb)。也就是说,为了校验输出是否对应,校验修改实例化的第一输出的m个msb是否与未修改实例化的第一输出相同,等等。如果未相对于修改实例化验证输出的正确排序,则框604还可以包括相对于未修改实例化验证正确排序。
[0097]
如上所述,形式验证是使用数学推理来验证硬件设计的一个或多个属性的系统性过程。相反,基于模拟的验证是这样的过程,其中通过将刺激应用于硬件设计并且监测硬件设计响应于该刺激的输出来测试硬件设计。
[0098]
形式验证包括形式验证一个或多个形式断言为真或成立,如果验证其为真,则确定硬件设计的实例化将响应于任何输入而产生正确的输出。在一些编程语言和工具(诸如,synopsys的hector)中,断言也可被称为“引理”。
[0099]
如本领域的技术人员所知,形式断言是指示形式属性必须为真的语句或表达式,以使硬件设计的实例化如预期那样运行。形式断言的一种示例性格式是断言属性[formal property statement],指示该formal property statement必须为真。形式属性语句是捕获设计行为的语句或表达式。例如,对于硬件设计的信号a等于硬件设计的信号b的属性,形式属性语句可以是a=b。在hdl设计中,形式属性语句为可执行语句,其校验hdl设计内的特定行为。形式属性语句用于以形式化且明确的方式捕获硬件设计的实例化的所需的或期望的时间行为。
[0100]
形式断言通常以断言语言编写。断言语言(也可被称为属性语言)以简洁明确的方式在一个或多个设计周期内捕获设计行为。虽然传统的硬件描述语言(hdl)(诸如vhdl或verilog rtl)具有捕获单个周期行为的能力,但它们过于详细,无法在更高的层次上描述属性。具体地,断言语言提供了以简洁的方式表达时间关系和复杂设计行为的手段。断言语言包括但不限于systemverilog assertions(sva)、property specification language(psl)、assertion library(ial)、openvera
tm assertions(ova)、symbolic trajectory evaluation(ste)、hardware property language(hpl)、以及open verification library(ovl)。
[0101]
如上所述,在这种情况下,然后可以执行形式验证以证明以下断言:
[0102]
(a)断言修改实例化的输入和输出等同;
[0103]
(b)断言每个实例化的对应输出的m个最高有效位等同;
[0104]
(c)断言输出矢量是有序的(在修改或未修改实例化上,同时考虑到上文讨论的考虑因素)。
[0105]
一旦已经确立形式断言,就可以使用形式验证工具来形式验证针对硬件设计的一个或多个形式断言为真或成立。形式验证工具为能够执行硬件设计的形式验证的软件工具。形式验证工具包括但不限于形式模型校验器(也可以被称为形式属性校验器),所述形
式模型校验器被配置成形式验证集成电路硬件设计的一个或多个属性;以及形式等价性校验器,所述形式等价性校验器被配置成形式验证两种设计(例如,两种集成电路硬件设计或集成电路硬件设计和网表,或硬件设计和硬件设计模型等)的等价性。形式模型校验器的示例包括但不限于onespinmentor graphicsformal verification、vc formal、enterprise verifier,以及形式等价性校验器的示例包括但不限于hector、sequential equivalence checking(sec)app,以及其他逻辑等价性校验器(lec)和顺序逻辑对等校验器(slec)。
[0106]
在形式验证中,硬件设计(例如,用于排序器的硬件设计)被转换成数学模型(例如,状态变换系统或流程图),从而提供硬件设计的实例化,可对实例化进行测试来验证硬件设计,并且使用数学逻辑,使用精确的语法或使用具有精确的数学语法和语义的语言,表示待验证的形式属性(例如,断言的属性)。在这种情况下,如上所述,还产生并测试了修改实例化。
[0107]
形式验证工具通过搜索硬件设计的修改和未修改实例化的整个可到达状态空间(例如,状态转换系统或流程图)来验证断言,而无需显式遍历所有状态来确定是否存在(如形式约束所定义的)其中断言的属性不为真的有效状态。例如,通过使用二进制决策图(bdds)或使用基于高级sat(基于可满足性的有界模型检查)的技术,使用有效的布尔编码对状态进行编码,来完成搜索。在某些情况下,可以使用工具来实现技术,例如但不限于抽象、对称、符号索引和不变量,以提高性能并实现可伸缩性。因为断言的形式验证随时间的推移通过算法详尽地探索所有的有效输入值,因此以这种方式验证属性允许对于所有有效状态对属性进行详尽地证明。
[0108]
一旦形式验证完成,方法600可以结束,或者方法600可以进行到框606。
[0109]
在框606处,用于执行验证的形式验证工具可输出指示验证是否成功的一个或多个信号。例如,当形式验证工具用于验证断言时,形式验证工具可输出信号,该信号指示断言是否为真(即,针对硬件设计的所有有效状态或状态序列,断言的属性为真),这在本文中也可以被称为断言被成功验证。输出可能是“是”,断言有效或已成功验证;“否”,断言无效(即至少针对一个有效状态或状态序列,它不为真或失败)或尚未成功验证;或形式验证没有结论。形式验证可能没有结论,例如,因为运行形式验证工具的计算装置的存储器已用尽,或者因为形式验证工具已确定在预定义的时间段之后未取得一定量的进展。
[0110]
当断言无效或尚未被成功验证时,形式验证工具还可以输出信息以指示导致断言失败的硬件设计的状态或状态序列。例如,形式验证工具可以输出验证的轨迹,以指示在什么点、状态或状态序列发生了故障。一旦输出指示验证是否成功的信号,方法600就可以结束,或者方法600可前进至框608。
[0111]
在框608处,可确定一个或多个输出信号是否指示验证成功。如果一个或多个输出信号指示验证成功,从而指示排序器的硬件设计的实例化将针对输入空间中的所有输入矢量正确运行,则方法600可前进至框612,在该框中,在硬件中实现由硬件设计定义的排序器。然而,如果一个或多个输出信号指示验证不成功,从而指示硬件设计的实例化将不会针对输入空间中的所有输入矢量正确运行,则方法600可前进至框610,在该框中修改硬件设计以校正造成意外行为的硬件设计中的错误。一旦修改了硬件设计,就可以重新验证修改
后的硬件设计(例如,对于修改后的硬件设计,可以重复框602

608)。
[0112]
现在参考图7,该图示出了用于执行图6的方法600的示例性系统700。系统700可由一个或多个基于计算的装置,诸如下面参考图8所述的基于计算的装置800来实现。例如,图7的系统700的部件中的一个或多个部件可被实现为计算机可读指令,当这些计算机可读指令在基于计算的装置处执行时使基于计算的装置执行该部件的下文所述的功能。
[0113]
系统700包括排序器702的硬件设计的未修改实例;形式验证工具704;以及一组断言和条件706。如上文所论述,所呈现的用于检验排序器的硬件设计的方法依赖于结合硬件设计的修改实例化作出的断言。因此,系统700还包括硬件设计的修改实例。一般来讲,形式验证工具704被配置为使用数学推理在相关联的条件下形式验证对硬件设计的断言为真。
[0114]
形式验证工具704是能够对集成电路硬件设计执行形式验证的软件工具,上文结合图6论述了其示例。
[0115]
断言和条件706对应于上文论述的那些。即,以下是验证的条件(也称为“约束”),这些条件可以作为假设语句实施:
[0116]
(1)假设所有输入对于实施模型和验证模型有效;
[0117]
(2)假设每个对应输入对(即,实施模型的未扩展输入,以及验证模型的对应扩展输入)的m个最高有效位相等(因此两个不同模型的输入仅在低有效性唯一性位中不同);以及
[0118]
(3)假设添加到验证模型的输入的q位是唯一的(具有已知格式,例如上述格式中的一种)。
[0119]
此外,以下为断言:
[0120]
(a)断言验证模型的输入和输出(具有唯一元素)等同;
[0121]
(b)断言每个模型的对应输出的m个最高有效位等同;
[0122]
(c)断言输出矢量是有序的(在修改或未修改实例化上,同时考虑到上文讨论的考虑因素)。
[0123]
如果在指定条件下,所述断言被验证为对于硬件设计为真,那么将验证硬件设计702的实例化为所有有效输入产生正确(或预期)结果。
[0124]
当使用形式验证工具704来验证断言时,形式验证工具704可输出断言是否有效的指示(即,针对所有有效状态或状态序列,被断言的属性为真),也可以被称为断言被成功验证。输出可能是“是”,断言有效或已成功验证;“否”,断言无效(即至少针对一个有效状态或状态序列,它不为真或失败)或尚未成功验证;或形式验证没有结论。形式验证可能是没有结论的,例如,因为运行形式验证工具704的基于计算的装置的存储器已用尽,或者因为形式验证工具704已确定在预定义的时间段后未取得一定量的进展。
[0125]
当断言无效或尚未被成功验证时,形式验证工具704还可以输出信息以指示导致断言失败的硬件设计的状态或状态序列。例如,形式验证工具704可以输出验证的轨迹,以指示在什么点、状态或状态序列发生了故障。
[0126]
现在将考虑针对排序器的示例性硬件设计执行的一些验证结果。
[0127]
测试了以下形式验证方法:
[0128]
·
朴素

直接形式验证设计,其中的常规断言是:(i)输出被正确排序;(ii)所有输入出现在输出上;以及(iii)输入和输出具有相同的多重性(即每个输入出现在输出中正确
的次数)。换句话说,这是常规的、全面的形式验证,而没有上文讨论的关于多重性的任何优化。
[0129]
·
唯一扩展

自然编码

使用扩展输入宽度m+q的验证模型,通过应用上文讨论的唯一标签方法对设计进行形式验证,其中
[0130]
·
唯一扩展

独热编码

使用扩展输入宽度m+q的验证模型,通过应用上文讨论的唯一标签方法对设计进行形式验证,其中q=n。
[0131]
针对实施双调归并排序算法的硬件设计,对于参数空间n∈{4,6,8}和m∈{8,16,32}获得比较结果。针对仅利用唯一扩展方法执行的验证,获得n=16,m∈{8,16}和n=32,m=16的额外结果。
[0132]
表l总结了完成上文所列每项形式验证所需花费的时间(以秒为单位)。第一列指示正在排序的值的数量n,并且对于n的每个值第二列指示被测试的不同位宽度,m。最后三列指示验证所花费的时间根据不同方法而收敛(按照顺序:朴素、唯一扩展

自然编码、唯一扩展

独热编码)。应注意,表1中的值“na”对应于未执行的测试,因为针对n=16和n=32的测试仅针对上述自然编码执行。还应指出,在不同计算机环境中,使用不同验证工具,这些类型的测试结果的特定值将不同。尽管如此,这些结果例示了可以获得的益处。
[0133]
表1
[0134][0135]
可以看出,对于n的较小值,解决时间在宽范围内相当,对于所有三种方法来说,具有相同的数量级。实际上,在n的这些值处,解决时间如此之快,以致于值中的噪声或误差(例如,由于主计算机上的其它过程使用资源等)意味着无法得出强结论。
[0136]
但是,随着n增大,计算复杂性也会增加,由此可以看出,对于n=6,朴素方法花费的解决时间比n=4长一个数量级,对于n=8,再次比n=6长一个数量级。相比之下,两种唯
904、内存906和其它装置914,例如显示器916、扬声器918和相机920。gpu 904被示出为包括排序器100。在其他示例中,排序器100可以在cpu 902上实现。计算机系统的部件可通过通信总线922彼此通信。
[0143]
虽然图9示出了图形处理系统的实施方式,但是应理解,可以针对人工智能加速器系统绘制类似的框图—例如,通过用神经网络加速器(nna)替代gpu 904,或者添加nna作为额外单元。在这种情况下,排序器100可以在nna中实施。
[0144]
本文中所描述的排序器可以在集成电路上体现为硬件。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
[0145]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
[0146]
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、nna、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
[0147]
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可提供一种计算机可读存储介质,其上编码有集成电路定义数据集(也可被称为硬件设计)形式的计算机可读程序代码,当在集成电路制造系统中进行处理(即,运行)时,该计算机可读程序代码将系统配置为制造包括本文所述的任何设备的计算装置。集成电路定义数据集可以是例如集成电路描述。
[0148]
因此,可提供一种在集成电路制造系统处制造如本文所描述的排序器的方法。此外,可提供一种集成电路定义数据集,其在集成电路制造系统中处理时使制造排序器的方法得以执行。
[0149]
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级
表示法(诸如rtl)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
[0150]
现在将关于图10描述在集成电路制造系统处处理集成电路定义数据集(例如,硬件设计)以便将系统配置为制造排序器的示例。
[0151]
图10示出了集成电路(ic)制造系统1002的示例,该集成电路制造系统被配置为制造如本文中任何示例中描述的排序器。具体来说,ic制造系统1002包括布局处理系统1004和集成电路生成系统1006。ic制造系统1002被配置成接收ic定义数据集/硬件设计(例如,定义如本文的任一示例中所描述的排序器),处理ic定义数据集,并且根据ic定义数据集生成ic(例如,其体现如本文的任一示例中所描述的排序器)。ic定义数据集的处理将ic制造系统1002配置成制造体现如本文的任一示例中所描述的排序器的集成电路。
[0152]
布局处理系统1004被配置为接收和处理ic定义数据集/硬件设计以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip

flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到ic生成系统1006。电路布局定义可以是例如电路布局描述。
[0153]
如本领域已知的,ic生成系统1006根据电路布局定义来生成ic。举例来讲,ic生成系统1006可实现生成ic的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1006的电路布局定义可呈计算机可读代码的形式,ic生成系统1006可使用所述计算机可读代码来形成用于生成ic的合适掩码。
[0154]
由ic制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1002可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
[0155]
在其它示例中,在集成电路制造系统处对集成电路定义数据集进行处理可将系统配置成制造排序器,而无需对ic定义数据集进行处理来确定电路布局。举例来说,集成电路定义数据集可以定义例如fpga的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有所述定义的配置的可重新配置的处理器。
[0156]
在一些实施例中,当集成电路制造定义数据集/硬件设计在集成电路制造系统中进行处理时,可使集成电路制造系统生成如本文所述的装置。例如,通过集成电路制造定义
数据集,以上面参考图10描述的方式对集成电路制造系统进行配置,可以制造出如本文所述的设备。
[0157]
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图10所示的示例中,ic生成系统可由集成电路定义数据集/硬件设计进一步被配置为在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或者以其他方式向集成电路提供程序代码,用于与集成电路一起使用。
[0158]
与已知的实现方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实现方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
[0159]
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1