CN115983171B - 用于对片上***进行后仿真的方法和仿真平台 - Google Patents
用于对片上***进行后仿真的方法和仿真平台 Download PDFInfo
- Publication number
- CN115983171B CN115983171B CN202310258993.1A CN202310258993A CN115983171B CN 115983171 B CN115983171 B CN 115983171B CN 202310258993 A CN202310258993 A CN 202310258993A CN 115983171 B CN115983171 B CN 115983171B
- Authority
- CN
- China
- Prior art keywords
- simulation
- post
- subsystem
- file
- custom
- 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
- 238000004088 simulation Methods 0.000 title claims abstract description 463
- 238000000034 method Methods 0.000 title claims abstract description 108
- 238000007689 inspection Methods 0.000 claims description 47
- 230000008569 process Effects 0.000 claims description 27
- 238000004458 analytical method Methods 0.000 claims description 19
- 238000012545 processing Methods 0.000 claims description 10
- 238000002372 labelling Methods 0.000 claims description 8
- 238000001914 filtration Methods 0.000 claims description 6
- 238000011156 evaluation Methods 0.000 claims description 5
- 238000000605 extraction Methods 0.000 claims description 4
- 238000013461 design Methods 0.000 description 34
- 238000012795 verification Methods 0.000 description 30
- 230000006870 function Effects 0.000 description 14
- 238000003860 storage Methods 0.000 description 9
- 230000001934 delay Effects 0.000 description 8
- 238000011161 development Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000012942 design verification Methods 0.000 description 6
- 230000015572 biosynthetic process Effects 0.000 description 4
- 238000003786 synthesis reaction Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000012356 Product development Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 230000002441 reversible effect Effects 0.000 description 3
- 238000012300 Sequence Analysis Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000012804 iterative process Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000005266 casting Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003071 parasitic effect Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Images
Landscapes
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
本申请了公开了用于对片上***进行后仿真的方法和仿真平台。所述片上***包括多个模块,所述方法包括:为所述片上***内的多个模块中的每一个模块创建时序检查白名单;以及关闭对自定义子***的目标模块的时序检查白名单内所包括的元器件的时序检查,以对所述自定义子***进行后仿真。
Description
技术领域
本申请涉及集成电路技术领域。具体地,涉及用于对片上***(SoC)进行后仿真的方法和仿真平台。
背景技术
集成电路片上***的设计和验证是一个非常耗时和繁复的过程。一个产品从最初构想、到设计、验证、流片、测试最后到量产要经过少则数个月长则数年的时间。在集成电路片上***的设计过程中,经常需要进行仿真与验证来检查所设计的片上***是否能够按照设想那样执行。集成电路片上***设计验证过程中需要进行功能前仿真和时序后仿真。其中功能前仿真是针对寄存器传输级(Register Transfer Level,RTL)的仿真,主要是通过仿真验证所设计电路的逻辑功能正确性,仿真速度快。时序后仿真是基于由基本门单元组成的网表(Netlist),同时将网表的门级电路延迟和各种门级电路之间的连线延迟等考虑在内进行仿真。时序后仿***要是通过仿真发现设计潜在的约束和时序问题。并且由于后仿真中考虑进去了电路元件以及路径的延迟,导致仿真速度慢,经常一个集成电路片上***的后仿真需要花费数个小时甚至数天的时间。
另外,相对于前仿真而言,对集成电路片上***的后仿真过程中会报告出大量时序违例,这严重拖慢了后仿真的进程。所谓的时序违例是指违反了建立时间或者保持时间或者其他时序约束,使得采样时钟不能够正确采集到数据的情况。验证工程师需要花费大量精力去分析这些时序违例是设计问题造成的真正的时序违例,还是可以忽略的虚假时序违例。这给验证工程师带来繁冗的验证工作量。
发明内容
针对现有技术中存在的缺陷,本申请提出了一种用于对片上***进行后仿真的方法和仿真平台。这种后仿真的方法和仿真平台能够为片上***所包括的所有模块中的每一个模块创建时序检查白名单。从而实现在对整个片上***中的自定义子******进行后仿真时自动关闭对时序检查白名单上的元器件的时序检查。从而大大减少对片上***进行后仿真时报告出的时序违例的数量。另外,根据本公开的用于后仿真的方法和仿真平台还可以根据仿真命令配置待后仿真的自定义子***,并进一步根据仿真命令确定所述自定义子***的后仿真文件,以对所述自定义子***进行后仿真。另外,本申请提出的用于对片上***进行后仿真的方法和仿真平台还可以通过分析片上***或自定义子***的后仿真报告,将报告的时序违例是虚假时序违例的相关元器件添加到相应模块的时序检查白名单中,从而在下次仿真时可以避免对该元器件再次进行时序检查,以进一步减少后仿真报告的时序违例的数量。
因此,不是对整个片上***进行后仿真,而是对片上***的期望的自定义子***进行后仿真从而提高后仿真的效率。不是关闭对片上***所有模块的时序检查白名单中的元器件的时序检查,而是关闭所配置的自定义子***所包括的目标模块的时序检查白名单中的元器件的时序检查,从而减少了片上***后仿真中报告出的虚假时序违例的数量,并且避免了自定义子***外的其他模块由于用空壳文件替代而报告的对应寄存器不存在的错误,从而使得对片上***的后仿真更加顺畅。此外,不是使用针对片上***的每个模块的固定不变的时序检查白名单,而是在每次对片上***的后仿真报告进行分析时,都对参与后仿真的模块的时序检查白名单进行更新维护,将报告的时序违例是虚假时序违例的相关元器件添加到相应时序检查白名单中,从而进一步减少后仿真中报告出的时序违例的数量,减少验证工程师的工作量。另外,本公开提出的用于后仿真的方法和仿真平台是极其用户友好的,用户只需要简单地在仿真命令中输入相应参数,便能够实现上述自定义子***的配置、关闭自定义子***所包括目标模块的时序检查白名单内的元器件的时序检查、自定义子***的后仿真文件的确定以及自定义子***的后仿真,从而提升后仿真效率,进一步缩短产品开发周期。
此外,本申请提出的用于对片上***进行后仿真的方法和仿真平台还可以针对片上***后仿真报告出的时序违例按照时间点和关键字进行过滤,以过滤掉后仿真报告中的一部分虚假时序违例,从而进一步减少验证工程师的工作量。
在一个方面中,本申请提出了一种用于对片上***进行后仿真的方法,所述片上***包括多个模块,所述方法包括:为所述多个模块中的每一个模块创建时序检查白名单;以及关闭对自定义子***的目标模块的时序检查白名单内所包括的元器件的时序检查,以对所述自定义子***进行后仿真。
在一个实施例中,所述方法还包括:根据仿真命令在仿真平台中配置所述自定义子***;将所述片上***的除了所述自定义子***之外的其他模块用空壳文件替代;根据仿真命令确定所述自定义子***的后仿真文件,以及基于所述后仿真文件对所述自定义子***进行后仿真。
在一个实施例中,其中根据仿真命令在仿真平台中配置所述自定义子***包括:根据仿真命令中的子***参数生成用于定义所述自定义子***的子***代码;以及根据所述子***代码确定所述自定义子***所包括的目标模块。
在一个实施例中,其中所述仿真平台支持所述片上***的多个版本的后仿真文件,根据仿真命令确定所述自定义子***的后仿真文件包括:根据仿真命令中的版本参数指定目标版本的后仿真文件;以及根据所述子***代码来从所述目标版本的后仿真文件中提取所述自定义子***的后仿真文件。
在一个实施例中,其中根据仿真命令中的版本参数指定目标版本的后仿真文件包括:根据仿真命令中的版本参数生成用于定义所述目标版本的后仿真文件的信息的版本代码;以及根据所述版本代码来从所述多个版本的后仿真文件中选择所述目标版本的后仿真文件。
在一个实施例中,其中每一个模块的所述时序检查白名单包括:跨时钟域的第一级寄存器列表以及附加元器件列表。
在一个实施例中,所述方法还包括:对所述自定义子***的后仿真报告进行分析,以将报告的时序违例是虚假时序违例的相关元器件添加到所述附加元器件列表。
在一个实施例中,后仿真文件包括网表、标准延迟格式(SDF)文件以及标准单元库,并且所述方法还包括:对所述自定义子***的后仿真文件中的标准延迟格式文件进行反标以获得带有反标后的时序信息的网表。
在一个实施例中,所述方法还包括:对反标过程中报告的错误进行归类以将相同类型的错误输出到同一文件中,同时提供与所述错误中的每一个错误相关的信息;以及对反标过程中报告的警告进行归类以将相同类型的警告输出到同一文件中,同时提供与所述警告中的每一个警告相关的信息。
在一个实施例中,所述方法还包括:在对所述自定义子***进行后仿真时,比较所述自定义子***的目标模块所包括的特定元器件和路径上的实际延迟量与标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估所述自定义子***的后仿真的准确性。
在一个实施例中,所述方法还包括:设置时间点和关键字以从所述自定义子***的后仿真中报告出的时序违例中过滤掉所述时间点之前的时序违例以及包括所述关键字的时序违例;以及将过滤之后剩余的时序违例按照时间排序以及按照路径分组并分别输出到两个文件中,同时提供与剩余的时序违例中的每一个时序违例相关的信息。
在一个实施例中,所述时间点包括发生时钟异步复位的时刻。
在一个实施例中,其中所述片上***是多核GPU***,并且所述多核GPU***的每个GPU核包括所述多个模块中的至少一个模块。
在另一方面中,本申请还公开了一种用于对片上***进行后仿真的仿真平台,所述片上***包括多个模块,所述仿真平台包括:时序检查白名单创建单元,被配置成为所述多个模块中的每一个模块创建时序检查白名单;以及时序检查设置单元,被配置成关闭对自定义子***的目标模块的时序检查白名单内所包括的元器件的时序检查,以对所述自定义子***进行后仿真。
在一个实施例中,所述仿真平台还包括:子***配置单元,被配置成根据仿真命令在仿真平台中配置所述自定义子***;虚设单元,被配置成将所述片上***的除了所述自定义子***之外的其他模块用空壳文件替代;后仿真文件确定单元,被配置成根据仿真命令确定所述自定义子***的后仿真文件;以及后仿真单元,被配置成基于所述后仿真文件对所述自定义子***进行后仿真。
在一个实施例中,所述仿真平台还包括:子***定义单元,被配置成根据仿真命令中的子***参数生成用于定义所述自定义子***的子***代码;以及目标模块确定单元,被配置成根据所述子***代码确定所述自定义子***所包括的目标模块。
在一个实施例中,其中所述仿真平台支持所述片上***的多个版本的后仿真文件,所述后仿真文件确定单元包括:目标版本指定单元,被配置成根据仿真命令中的版本参数指定目标版本的后仿真文件;以及后仿真文件提取单元,被配置成根据所述子***代码来从所述目标版本的后仿真文件中提取所述自定义子***的后仿真文件。
在一个实施例中,其中每一个模块的所述时序检查白名单包括:跨时钟域的第一级寄存器列表以及附加元器件列表。
在一个实施例中,所述仿真平台还包括后仿真分析单元,被配置成:对所述片上***的后仿真报告进行分析,以将报告的时序违例是虚假时序违例的相关元器件添加到所述附加元器件列表。
在一个实施例中,所述评估单元仿真平台还包括评估单元,被配置成:在对所述自定义子***进行后仿真时,比较所述自定义子***的目标模块所包括的特定元器件和路径上的实际延迟量与标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估所述自定义子***的后仿真的准确性。
在一个实施例中,所述仿真平台还包括时序违例处理单元:被配置成:设置时间点和关键字以从所述自定义子***的后仿真中报告出的时序违例中过滤掉所述时间点之前的时序违例以及包括所述关键字的时序违例;以及将过滤之后剩余的时序违例按照时间排序以及按照路径分组并分别输出到两个文件中,同时提供与剩余的时序违例中的每一个时序违例相关的信息。
在一个实施例中,所述时间点包括发生时钟异步复位的时刻。
在一个方面中,本申请还提出了一种计算设备,包括根据本文中阐述的用于对片上***进行后仿真的仿真平台。
在一个方面中,本申请还提出了一种其上存储有指令的机器可读介质,所述指令当被机器执行时使得所述机器执行根据本文中阐述的用于对片上***进行后仿真的方法。
本公开内容包括在本发明内容中所阐明的两个、三个、四个或更多特征或元素的任何组合,而无论这样的特征或元素是否被清楚地组合或以其他方式在本文中描述的特定示例实现方式中被记载。本公开内容意图被整体阅读,使得本公开内容的任何单独的特征或元素应当被视为可组合的,除非本公开内容的上下文清晰地另行规定。
附图说明
现在将参考附图描述本发明的具体示例性实施例。通过阅读以下详细描述连同附图,本公开内容的特征、方面和优点将是显而易见的。在附图中:
图1示出数字集成电路设计的流程;
图2示出根据本公开的实施例的用于对片上***进行后仿真的方法的流程图;
图3a示出根据本公开的实施例的用于配置自定义子***的片上***的示意图;
图3b和图3c示出根据本公开的实施例的另外的用于配置自定义子***的片上***的示意图;
图4示出根据本公开的实施例的用于具体说明自定义子***的配置的四核GPU***的示意图;
图5示出根据本公开的实施例的用于对自定义子***进行后仿真的流程图;
图6示出根据本公开的实施例的用于基于目标版本的后仿真文件对片上***后仿真的方法的流程图;
图7示出根据本公开的实施例的结合了关于图2、图5以及图6所描述的方法的对片上***进行后仿真的方法的流程图;
图8示出根据本公开的实施例的用于对片上***进行后仿真的仿真平台;以及
图9示出根据本公开的实施例的计算设备的示意图。
具体实施方式
现在将在下文中参考附图更充分地描述本公开内容的一些实现方式,在所述附图中示出本公开内容的一些而不是所有实现方式。事实上,本公开内容的各种实现方式可以用许多不同的形式被具体化并且不应当被解释为受限于本文中所阐明的实现方式;相反,提供这些示例实现方式是为了更好地把本公开内容的范围传达给本领域技术人员。
为了便于理解本发明的原理,在图1中示出数字集成电路设计的一般流程。数字集成电路设计包括前端和后端两个阶段。前端和后端之间并没有明显的界限。一般地,将图1中虚线上面的阶段称为前端,虚线下面的阶段称为后端。前端的第一阶段——算法或硬件架构设计与分析的目的是完成芯片中数字部分的高层次算法或架构的分析与建模,为硬件提供一个正确的软件功能模型,更为重要的是,通过大量的高层次仿真和调试,为RTL实现提供总体性的设计指导。第二阶段——RTL实现的目的是依据第一阶段的结果,完成由高层次描述到用VerilogHDL或VHDL等硬件语言以寄存器之间的传输为基础对电路的描述。第三阶段运行代码风格检查,目的在于排除RTL代码中跨时钟域、Lint等问题。第四阶段是进行功能验证,目的在于在无延迟的理想情况下,通过大量的仿真,发现电路设计过程中的人为或者非人为引起的漏洞或者错误。这个阶段是上文提到的前仿真。功能验证的主要指标是功能覆盖率。下一个阶段是逻辑综合,其目的是将RTL级设计中所得到的程序代码翻译成实际电路的各种元器件以及它们之间的连接关系,然后用一张表来表示,这张表就称为门级网表。逻辑综合阶段实现将代码映射到与工艺库相关的网表。下面进行静态时序分析,相对动态仿真的类穷举式验证方法而言,从静态分析的角度,保证设计中所有的路径,满足内部时序单元对建立时间和保持时间的要求。即无论起点是什么,信号都可以被及时地传递到该路径的终点,并且在电路正常工作所必需的时间段内保持恒定。下一阶段是一致性验证。RTL代码和逻辑综合后的网表都可以抽象为两幅由节点和边构成的图,一致性验证阶段采用了类似于直接比较两幅图是否一致的方法,来确定逻辑综合生成的网表是否正确。下一阶段是时序仿真。相比于功能仿真,时序仿真将RTL代码替换为网表,然后需要加载标准延迟格式(SDF)文件和工艺库模型。时序仿真的目的在于,在考虑进去单元和路径延迟等近似实际工作的条件下,观察功能是否还能保持正确。相对于功能前仿真,时序仿真也称为后仿真。
数字集成电路的后端设计又称物理设计,将网表格式的文本转化成一个个有物理大小和位置的单元、连线(布局与布线(placement and routing))。并且在实现过程中要满足面积、功耗、性能等要求。在图1中,为了简便起见,后端仅仅示出了布局布线这一步骤。然而实际上,后端还需要进行很多步骤,例如提取延迟信息、运行DRC(设计规则检查)和LVS(版图与电路图的一致性检查)等。由于布局布线阶段调整了电路元器件的布局和连线,计算得到布局布线后的标准延迟格式文件,再重新进行时序后仿真。
整个ASIC设计流程都是一个反复迭代的过程,数字和模拟集成电路设计验证都是这样。在任何一步不能满足约束条件或者不能实现功能的时候,都需要重复之前的步骤,甚至重新设计RTL代码。所以虽然图1中使用了一些向下的箭头连接各个阶段,但是实际上,在任何一步结束之后如果没有达到要求都可能需要返回到之前的步骤重新修改再进行仿真验证。直到最终获得所设计的片上***的GDSII文件进行流片。数字集成电路设计可以包括但不限于图1中所示出的阶段。另外,图1中所示出的一些阶段的顺序可以改变。并且其中的一些阶段可以根据需要而合并或者省略。
在片上***的后仿真中,会报告出大量的时序违例。其中一部分是不满足时序约束而需要调整设计的时序违例或者是时序约束本身设置的问题导致的时序违例。还有相当一部分是可以忽略掉的虚假的时序违例。通常,跨时钟域(CDC)设计、可测性设计(DFT)以及异步复位等情况都会造成虚假时序违例。大规模集成电路片上***通常包括数十甚至数百个模块,其中的一些模块之间可能采用同一时钟,或者采用不同时钟。通常,大规模集成电路片上***中都会采用多个时钟。在对异步信号进行组合逻辑运算之前,需要利用同步器将信号同步。例如,在利用较慢(频率较低)的时钟信号去采样较快(频率较高)的跨时钟域信号的情况下,一般要求在接收时钟域中,较快的跨时钟域信号需要保持更长的时间来保证能够被较慢的时钟信号正确采样到。因此片上***的所有模块中的跨时钟域的第一级寄存器产生的时序违例都是虚假时序违例。在对片上***进行后仿真之前可以关闭对片上***的各个模块中的跨时钟域的第一级寄存器的时序检查,或者对其不执行时序检查。不执行时序检查意味着这些元器件所执行的虽然仍然是带有时序信息的时序后仿真,然而不再验证这些元器件是否满足设定的时序约束条件。从而减少在片上***的后仿真时报告的虚假时序违例的数量。
图2示出根据本公开的实施例的用于对片上***进行后仿真的方法200。在步骤S11中,可以为片上***的多个模块中的每一个模块创建时序检查白名单。其中,可以在片上***的当前的后仿真之前已经完成所述创建步骤。替换地,也可以在片上***的当前后仿真的同时利用片上***的后仿真文件(例如网表)为每个模块创建所述时序检查白名单。如上文所阐述的,每一个模块的跨时钟域的第一级寄存器报告出的时序违例是虚假时序违例,因此在一个实施例中,时序检查白名单可以包括片上***的所有模块中每一个模块的跨时钟域的第一级寄存器的列表。在一个实施例中,可以基于每一个模块的后仿真文件(例如网表)中记载的各个元器件之间以及与时钟之间的连接关系,生成每一个模块的跨时钟域的第一级寄存器的列表。
在一个实施例中,时序检查白名单还可以包括附加元器件列表。用户、前端工程师或者验证工程师可以根据经验或者通过对每一个模块之前参与的后仿真的后仿真报告的分析来将相应模块内特定的元器件添加到附加元器件列表中,从而在对片上***进行后仿真时,免于对所述附加元器件列表中列举的元器件进行时序检查。在一个实施例中,可以对片上***的后仿真报告进行分析,以将报告的时序违例是虚假时序违例的相关元器件添加到附加元器件列表中,从而实现对每个模块的时序检查白名单的更新和维护,以在最大程度上减少片上***的后仿真中报告的虚假时序违例,进而减少相关工程师的工作量,提高后仿真的效率,缩短产品的开发周期。例如,通过对片上***的后仿真报告进行分析,发现用于可测性设计(DFT)的电路中的特定寄存器报告出的时序违例是虚假时序违例,便可以将所述特定寄存器添加到所述附加元器件列表中,以在片上***的下一次后仿真时跳过对所述特定元器件的时序检查。在一个实施例中,可以通过关键字匹配的方法从相应模块所包括的所有元器件中找出专用于可测性设计的所述特定寄存器,并将其添加到所述附加元器件列表中。在一个实施例中,也可以分析片上***的多次后仿真的后仿真报告(例如对报告出虚假时序违例的元器件的种类或者与其他元器件的连接关系进行全面分析),以基于分析的结果更新和维护片上***的每一个模块的时序检查白名单中的附加元器件列表。其中,所述多次后仿真可以是不同工程师在不同的工艺角下对片上***进行的后仿真。其中的分析可以是人工分析,也可以采用任何机器学习方法进行所述分析。在另外的实施例中,验证工程师也可以独立于对后仿真报告的分析而根据其他的需要(例如后仿真效率或者应用场景告),关闭/跳过对参与后仿真的模块的特定元器件的时序检查。
上面结合图2中的步骤S11阐述了本申请中为片上***中的每个模块创建时序检查白名单的原理。要指出的是,对时序违例的分析是个极其严谨的工作。如果将真正的时序违例确定为虚假时序违例而忽略掉,会导致相应模块的某个功能异常,甚至最终流片得到有缺陷的成品。这对验证工程师的经验和精力都提出极大的挑战。因此,在创建时序检查白名单的过程中,需要确认报告出的与特定元器件相关的时序违例是虚假时序违例,才可以将所述特定元器件添加到时序检查白名单中的附加元器件列表中。虽然创建时序检查白名单需要花费一些时间,然而如以上所描述的,可以预先执行时序检查白名单的创建的操作。另外,还可以将创建好的每个模块的时序检查白名单可以作为集合统一存储在仿真平台的存储器中或者云端,使得每个获得授权的工程师都能够访问和利用它们,从而能够提高每个工程师对本次以及以后的每次后仿真的后仿真报告分析的效率。
在步骤S12中,可以关闭对包括在片上***的所述多个模块中的每一个模块的时序检查白名单内的元器件的时序检查,以对片上***进行后仿真。在另一个实施例中,也可以根据需要而关闭片上***的所有模块中的部分模块的时序检查白名单中的元器件的时序检查。例如,在对片上***的子***进行后仿真的情况下,可以仅仅关闭待后仿真的子***所包括的模块的时序检查白名单中的元器件的时序检查。而不需要关闭不参与后仿真的其他模块的时序检查白名单中的元器件的时序检查,从而避免导致在对子***的后仿真时报告出找不到所述其他模块中的相应元器件的错误,以致拖慢后仿真进程。
针对包括许多模块的大规模集成电路片上***的情况,可以对整个片上***所包括的所有模块进行后仿真。然而,也有可能在一种应用场景下需要用到其中的一些模块。而在另一种应用场景下需要用到的是其中的另一些模块。为了在后仿真过程中,支持对于这些以及其他应用场景的灵活性适配,进一步提高后仿真的效率,本公开的用于后仿真的方法和仿真平台还根据需要(例如不同应用场景或效率需求等)来灵活配置待后仿真的自定义子***。并且支持后仿真之后进行自动化的仿真后处理。
下面结合图3a、图3b以及图3c来说明根据本公开的实施例的灵活配置自定义子***的示例。其中,图3a示出根据本公开的实施例的用于配置自定义子***的片上***300的示意图。片上***300包括分别用于实现不同功能的模块301-306。片上***300可以是大规模或者超大规模集成电路片上***,例如数字集成电路、模拟集成电路或者模/数混合集成电路片上***。在一个实施例中,模块301-306可以包括电源模块、扬声器、存储器、编解码器、传感器、滤波器或其他功能模块。虽然在图3a中示出的片上***300仅仅包括六个模块301-306,然而这仅仅是示意性的。实际上片上***300内部可以包括更多(例如,数十个、数百个)或者更少的模块。在对片上***300进行后仿真时,可以对整个片上***300的所有模块进行后仿真。然而,在其中的一些模块的功能并不关注的情况下,对整个片上***300的后仿真会花费很多时间,后仿真的效率极低。
在本公开的实施例中,可以根据实际应用场景从所述片上***的多个模块中选择一个或多个模块组成自定义子***来进行后仿真。例如模块301是图形处理器(GPU),模块302是双倍数据速率(DDR)存储器,模块303是显示器。在仅仅需要仿真验证GPU对DDR的数据存储和访问操作的情况下,并不需要联合模块303的显示器以及模块304-306一起进行后仿真。而仅仅需要对模块301和模块302进行后仿真即可。本公开中提及的“自定义子***”是根据后仿真的需要对片上***300的所有功能模块中的一个或多个模块组合形成的待后仿真的子***。例如,模块301和模块302组成自定义子***A,以及模块302和模块303组成另一自定义子***B。为了便于区分和解释本公开的原理,将“自定义子***”所包括的模块称为“目标模块”。对“自定义子***”的后仿真实质上是对所述自定义子***所包括的目标模块的后仿真。例如,对自定义子***A的后仿真实质是对所述自定义子***A所包括的目标模块301和302进行后仿真。
图3a中公开了直接对片上***300所包括的模块配置自定义子***。此外,片上***也可以包括多个子***,每个子***中包括多个模块。所述多个子***可以是根据现有层次化方法在设计初期被划分开来分别进行设计和验证的,也可以是以其他方式划分的。在这种情况下,有可能每个子***中仍然包括大量模块,而其中的一些模块在一些场景下应用不到。此时,对整个子***进行后仿真仍然需要花费很多时间,仿真效率依然不高。另外,还有可能需要一个子***中的一些模块连同另一个子***中的一些模块一起进行后仿真。而现有的层次化设计和验证方法由于基于设计初期划分好的固定的层次进行设计验证,无法满足后仿真中在各种应用场景和仿真效率需求下的灵活的后仿真的需求。根据本公开的用于后仿真的方法不仅可以实现对每个子***进行后仿真,还可以实现对子***的部分模块进行后仿真,并且可以实现对跨不同子***的多个模块进行后仿真,从而进一步提高后仿真的效率。
图3b和图3c中公开了根据本公开的实施例的另外的用于配置自定义子***的片上***的示意图。在图3b中,片上***300包括子***E和子***F。其中,子***E包括模块301-303,子***F包括模块304-306。在一个实施例中,待后仿真的自定义子***C被配置为包括子***F中的模块305和306作为目标模块。在其他实施例中,待后仿真的自定义子***C也可以包括子***F中的其他模块或者子***E中的模块作为目标模块。在图3c中,片上***300包括子***E和子***F。其中,子***E包括模块301-303,子***F包括模块304-306。在一个实施例中,待后仿真的自定义子***D被配置为包括子***E中的模块302和子***F中的模块305作为目标模块。在其他实施例中,待后仿真的自定义子***D也可以包括子***E和F中的其他模块作为目标模块。换言之,根据本公开的配置自定义子***的方法可以实现同一子***内部分模块的后仿真,也可以实现跨不同子***的多个模块之间的后仿真。换言之,根据本公开的用于后仿真的方法和仿真平台支持在片上***后仿真时自定义子***的最大程度上的灵活配置。
图4示出根据本公开的实施例的用于具体说明自定义子***的配置的四核GPU***的示意图。图4中示出的四核GPU***400包括第一GPU核、第二GPU核、第三GPU核、第四GPU核以及各个GPU核通用的模块。各个GPU核可以包括各自的功能模块,例如处理器、缓冲器等。通用模块可以包括电源模块、时钟模块以及显示器等。每个GPU核可以称为一个子***。在后仿真时,可以对各个GPU核分别连同通用模块进行后仿真。然而,各个GPU核的设计可能只有细微差别。在其中一个GPU核(例如,第一GPU核)的功能和时序已经通过后仿真验证的情况下,可以仅仅对其他GPU核(例如,第二GPU核至第四GPU核)内的与第一GPU核存在差异的那部分模块进行后仿真,以提高后仿真的效率。在一个实施例中,可以配置自定义子***使之包括第二GPU核的模块405(例如,该模块405与第一GPU核内的相应模块存在差异)连同所需的通用模块(例如通用模块413-416中的电源模块和时钟模块)以进行后仿真。在另一个实施例中,例如仅仅为了调试某个模块,但是相应子***内的配合该模块进行调试的其他模块尚且没有通过仿真验证,但是在当前后仿真中不关注所述其他模块的功能和时序。此时,可以利用其他子***内的已经通过仿真验证的相应模块连同该待调试模块一起进行后仿真。例如,可以配置待后仿真的自定义子***,使之包括第二GPU核的模块406(其可以作为待调试模块)以及第一GPU核的模块401(其已经通过仿真验证,并且可以配合第二GPU核的模块406进行所需的调试)连同一个或多个通用模块(例如模块415)作为目标模块以进行后仿真。因此,本公开所提出的自定义子***的后仿真方法支持跨多个子***的多个模块的联合后仿真。
要指出的是,片上***中可以包括多个子***,例如第一GPU核到第四GPU核。除了所述多个子***之外,片上***还可以包括其他模块,例如多个通用模块。在另外的实施例中,片上子***可以包括多个子***,而不包括除了所述多个子***之外的其他模块。在这种情况下,每个子***都可以包括部分或者全部通用模块,其中的一些子***之间可以存在交叉(换言之,不同子***包括同一模块)。然而,无论片上***的所有模块是否被包括在已有的子***中,以及已有的子***是如何划分的,都不影响本公开提出的配置自定义子***以用于后仿真的方法的实施。换言之,本公开提出的配置自定义子***的用于后仿真的方法能够独立于片上***中可能存在的已有子***的划分而按需要进行配置,以包括不同的已有子***中存在的不同模块作为目标模块来进行后仿真。还要指出的是,虽然上文用多核GPU的实施例来说明根据本公开的用于后仿真的方法,然而本公开的方法可以适用于任何其他片上***,例如多核CPU***等。
图5示出根据本公开的实施例的用于对自定义子***进行后仿真的方法500。在步骤S21中,根据仿真命令中的子***参数生成用于定义自定义子***的子***代码。在步骤S22中,根据所述子***代码确定所述自定义子***所包括的目标模块。在步骤S23中,将所述片上***的除了所述自定义子***之外的其他模块用空壳(dummy)文件替代。在步骤S24中,对所述自定义子***进行后仿真。可以根据应用场景、后仿真效率或者其他需求灵活配置自定义子***。在图3中所示的情况下,自定义子***A的目标模块是模块301-302。自定义子***B的目标模块是模块302-303。在其他没有示出的情况下,自定义子***可以包括其他模块作为目标模块。如此可以实现仅仅对自定义子***所包括的目标模块进行后仿真,从而大大提升片上***后仿真的效率。
要指出的是,集成电路芯片的开发的最终目的是获得集成有集成电路片上***的芯片。在本公开的加快对片上***的后仿真的方法中,可以在后仿真时,根据应用场景或者仿真效率的需求等自定义子***来进行后仿真。对自定义子***的配置可以非常灵活。每个验证工程师可以根据自己的需要进行配置。在一个实施例中,自定义子***可以仅仅包括一个模块,在另一个实施例中,自定义子***可以是片上***的所有模块中的一个或多个模块所能够组成的实现某一功能的最小自定义子***。最小自定义子***具有最高的灵活适配性,后续任何较大自定义子***的后仿真都可以通过添加其所包括的最小自定义子***来实现。在集成电路片上***所包括的模块非常多(例如几百个或者上千个)的情况下,根据需要配置一个或多个自定义子***,然后进行后仿真可以更加简便快速地实现对整个片上***的中感兴趣的目标模块的后仿真。
以上结合图5的实施例阐述了用于对包括多个模块的片上***的自定义子***进行后仿真的方法。通过所述方法,可以实现多个模块之间或者多个子***的不同模块之间灵活自定义的后仿真。相对于现有技术中在设计初期对大规模集成电路的层次化,结合图4所描述的后仿真的方法可以实现在后仿真的时候灵活配置待后仿真的自定义子***,以及确定其目标模块,而用空壳文件替代不需要或者不关注的模块,从而不对其进行后仿真。大大节省了后仿真所需要的时间,提升了后仿真的效率。此外,结合图5描述的后仿真方法是极其用户友好的,用户可以通过简单地在仿真命令中输入子***参数,便实现子***的配置和后仿真,从而在提升用户体验的同时提高了片上***后仿真的效率,缩短了片上***的开发周期。
集成电路片上***的设计验证是一个繁复的迭代过程,涉及到前端、后端多个不同工程师或团队之间的协同工作。经常在仿真验证阶段甚至后端布局布线阶段遇到不可修复的警告或者错误的情况下,需要返回上一步甚至是重新修改RTL代码,然后重复进行仿真验证、布局布线等。因此,虽然集成电路片上***的设计验证最终要得到版图对应的GDSII文件,并将它交付给代工厂进行流片。但是,在片上***的开发的整个过程中,可能存在许多版本的片上***的后仿真文件可以用于搭建仿真环境。例如,在图1中阐述的逻辑综合阶段之后会得到片上***的一个网表以及其所对应的标准延迟格式文件。这个阶段虽然也调用了厂商的器件库,但是器件之间的连接仅仅是简单的逻辑连接。这一阶段得到的标准延迟格式文件中包括对应的网表中所有器件的延迟信息而不包括器件连线上的路径延迟。在图1中的后端布局布线调整之后,得到一个考虑进去路径延迟的标准延迟格式文件。即使是在同一研发阶段,由于编辑标准单元库、修改RTL代码、添加了约束条件、修复一些时序违例等都会导致网表以及其对应的标准延迟格式文件变化。因此,在集成电路片上***的设计验证过程中,片上***的后仿真文件也定期会更新,例如每两周更新一次版本。因此,在仿真平台内部存储有许多(例如,数十个)不同阶段得到的、或者不同日期更新的、或者不同工程师定义的、或者针对不同应用场景的、或者基于不同工艺角的片上***的后仿真文件的版本。图5中公开的用于后仿真的方法可以配置自定义子***,然后对配置好的自定义子***进行后仿真。本公开中的对片上***的后仿真的方法可以进一步实现根据仿真命令中的版本参数自动切换到所有版本中的任何一个版本的后仿真文件来对整个片上***进行后仿真。
在图6中示出根据本公开的实施例的基于片上***的目标版本的后仿真文件来对片上***进行后仿真的方法600。在步骤S31中,根据仿真命令中的版本参数生成用于定义目标版本的后仿真文件的信息的版本代码。在步骤S32中,根据所述版本代码来从所述多个版本的后仿真文件中选择目标版本的后仿真文件。版本代码可以用于隔离目标版本与其他版本的后仿真文件。片上***的后仿真文件的多个版本包括不同人员在不同日期、或者在片上***的不同设计阶段、或者基于不同的工艺角或应用场景产生的片上***的后仿真文件的版本。在其他实施例中,后仿真文件还可以包括存储器(memory)的库文件。后仿真文件是否包括存储器的库文件取决于片上***设计和后仿真的需要,例如片上***设计是否用到存储器以及存储器的库文件在片上***的开发过程中是否发生变化等。不同的工艺角对应于不同的门延迟。一般把NMOS和PMOS晶体管的速度波动范围限制在由四个角所确定的矩形内。这四个角分别是:快NFET和快 PFET(FF),慢NFET和慢PFET(SS),快NFET和慢PFET(FS),慢NFET和快PFET(SF)。中心典型范围的工艺角是TT。在一个实施例中,工艺角可以仅包括TT、SS和FF三种。
用户或者验证工程师可以基于应用场景和仿真效率的需求在命令框中输入待执行后仿真的片上***的目标版本的版本参数。仿真平台可以自动生成定义片上***的后仿真文件的版本信息的硬件语言的版本代码。并基于版本代码自动选择片上***的目标版本后仿真文件。
在步骤S33中,仿真平台从当前版本的后仿真文件自动切换到片上***的目标版本的后仿真文件。在步骤S34中,基于所述目标版本的后仿真文件来对所述片上***进行后仿真。在一个实施例中,自动切换到片上***的目标版本的后仿真文件包括将默认的后仿真文件自动替换为片上***的目标版本的后仿真文件。在另一个实施例中,自动切换到片上***的目标版本的后仿真文件包括从当前加载的片上***的其他版本的后仿真文件切换到片上***的目标版本的后仿真文件。可以看出,根据本公开的后仿真的方法和仿真平台是极其用户友好的,可以通过简单地在仿真命令中输入版本参数便能够实现片上***的目标版本的后仿真文件的选择,而无需从数十、数百个后仿真文件版本中手动选择其中的一个来执行。对于一些大规模集成电路片上***而言,产品开发周期长,中间版本的后仿真文件多,各个版本的命名可能非常相似,现有的这种手动选择后仿真文件的版本是耗时的并且非常容易出错。而一旦选择错误,用户或者验证工程师可能并不容易发现,导致浪费后仿真时间同时损失后仿真的有效性。根据本公开关于图6所阐述的方法,可以根据用户或者验证工程师输入的仿真命令中的版本参数,实现完全自动切换到片上***的目标版本的后仿真文件,节省后仿真时间,并减少后仿真中版本选择的失误,从而进一步提升用户体验,提高后仿真的效率,缩短产品开发周期。
相比于图5中阐述的对自定义子***所包括的目标模块进行后仿真而言,图6中阐述的后仿真方法可以自动切换片上***的目标版本的后仿真文件。关于图5和图6所阐述的方法实施例可以单独地分开使用,或者二者可以结合在一起使用,例如先选择后仿真的片上***的目标版本的后仿真文件,再从片上***的所有模块的后仿真文件中提取出要真正执行后仿真的自定义子***的后仿真文件。替代地,也可以同时执行关于图5和图6所阐述的方法实施例。例如,用户或者验证工程师可以同时在命令框中输入版本参数和子***参数两者。
图7示出根据本公开的实施例的结合了关于图2、图5以及图6所描述的方法的对片上***(例如片上***300和400)进行后仿真的方法700。其中片上***包括多个模块。在步骤S41中,可以为片上***的多个模块中的每一个模块创建时序检查白名单。关于时序检查白名单的创建的具体操作与上文结合图2所描述的创建操作类似。在步骤S42中,根据仿真命令在仿真平台中配置待后仿真的自定义子***。其中所述自定义子***可以包括所述多个模块中的至少一个模块。可以根据应用场景、后仿真效率或者其他需求进行自定义子***的配置。在一个实施例中,步骤S42可以包括根据仿真命令中的子***参数生成用于定义所述自定义子***的子***代码;以及根据所述子***代码确定所述自定义子***所包括的目标模块。其中所述子***参数已经提前定义在仿真平台中。验证工程师或者其他用户可以直接通过根据应用场景以及仿真效率需求等在仿真命令中输入相应子***参数,仿真平台就可以确定待后仿真的自定义子***所包括的目标模块。
在步骤S43中,将所述片上***的除了所述自定义子***之外的其他模块用空壳文件替代,因为在当前后仿真中,用户不关注这些其他模块。在图3中所示的自定义子***A的情况下,将模块303-306用空壳文件替代。如此可以实现仅仅对所述自定义子***所包括的目标模块进行后仿真,从而大大节省后仿真时间。
在步骤S44中,可以关闭对自定义子***的目标模块的时序检查白名单内所包括的元器件的时序检查,以对所述自定义子***进行后仿真。关闭目标模块内时序检查白名单内的元器件的时序检查,所述元器件仍然正常参与到自定义子***的后仿真,只是不会报告与之相关的虚假时序违例,从而减少验证工程师或者其他人员对后仿真报告的分析和处理的工作量。
在步骤S45中,根据仿真命令确定所述自定义子***的后仿真文件。仿真平台支持片上***的多个版本的后仿真文件。在一个实施例中,步骤S45可以包括根据仿真命令中的版本参数指定目标版本的后仿真文件;以及根据所述子***代码来从所述目标版本的后仿真文件中提取所述自定义子***的后仿真文件。仿真平台可以根据仿真命令中的版本参数生成用于定义所述目标版本的后仿真文件的信息的版本代码,然后根据所述版本代码来从所述多个版本的后仿真文件中选择所述目标版本的后仿真文件。其中,所述多个版本的后仿真文件包括在所述片上***的不同设计阶段、由不同的人员开发或者基于不同的工艺角产生的不同版本的后仿真文件。并且后仿真文件包括网表、标准延迟格式文件以及标准单元库。在其他实施例中,后仿真文件还可以包括存储器(memory)的库文件。后仿真文件是否包括存储器的库文件取决于片上***设计和后仿真的需要,例如片上***设计是否用到存储器以及存储器的库文件在片上***的开发过程中是否发生变化等。
在步骤S46中,基于所提取的自定义子***的后仿真文件对所述自定义子***进行后仿真。虽然图7中结合步骤S41-S46说明了用于对片上***的自定义子***进行后仿真的方法。然而,不是所有的步骤都是必须的,例如可以省略图7中虚线框中指示的步骤中的一些或全部。图7中的每个步骤也可以包括多个子步骤。并且图7还可以包括其他步骤,例如后仿真之后的处理步骤。
在一个实施例中,根据本公开的方法还可以对所述片上***的后仿真报告进行分析,以将报告的时序违例是虚假时序违例的相关元器件添加到时序检查白名单中的附加元器件列表中,从而实现对时序检查白名单的更新和维护,进一步减少后仿真报告出的时序违例的数量。这种时序检查白名单的维护和更新可以由仿真平台中专门的后仿真分析单元来执行。如此实现了根据仿真命令中的子***参数和版本参数来配置自定义子***、关闭或跳过自定义子***内目标模块的时序检查白名单的元器件的时序检查、基于目标版本下的后仿真文件对自定义的子***进行后仿真以及时序检查白名单的更新和维护。这样,可以通过同时传递两种参数到仿真平台,自动控制片上***后仿真文件的版本选择,并选择待真正进行后仿真的自定义子***及其所包括的目标模块,同时跳过自定义子***的目标模块的时序检查白名单内的元器件的时序检查。因此可以在同一仿真平台上实现不同版本的后仿真文件的切换以及自定义子***的灵活的后仿真验证,并进一步减少了后仿真中报告出的虚假时序违例的数量。这可以进一步提升用户体验,提高后仿真的效率,缩短产品的开发周期。
本公开提及的后仿真文件包括网表、标准延迟格式(SDF)文件以及标准单元库。在一些实施例中,后仿真文件还可以包括存储器的库文件。其中网表可以是对片上***进行逻辑综合之后得到的网表,也可以是带有对标准延迟格式文件反标后的时序信息的网表。标准延迟格式(SDF)文件可以是与综合后的网表相对应的标准延迟格式文件。也可以是在对片上***进行后端布局布线之后经过提取寄生参数再计算得到的标准延迟格式文件。标准延迟格式文件把布局布线过程中器件延迟和线延迟的信息保留下来,据此可以在路径时序分析时将整条路径的时序计算出来。在标准延迟格式文件中可以指定固有延迟、互连延迟、端口延迟、时序检查、时序约束、和路径脉冲等。
在对自定义子***进行后仿真时,可以首先将布局布线后得到的标准延迟格式文件反标到对应的网表中以得到带有反标的时序信息的网表,从而对该网表进行后仿真。在对标准延迟格式文件进行反标的过程中会报告许多错误或者警告。根据本公开的后仿真的方法和仿真平台还可以实现对任意自定义子***所包括的目标模块的标准延迟格式文件进行反标时出现的SDF反标日志的自动分析,把反标过程中报告出的错误进行归类以将相同类型的错误输出到同一文件中,同时提供与所述错误中的每一个错误相关的信息;和/或把反标过程中报告出的警告自动进行归类,使得相同类型的警告被输出到同一文件中,并提供与每一个警告相关的信息,从而提升SDF反标分析和确认的效率。
此外,根据本公开的方法还能够实现对片上***或片上***的自定义子***的后仿真中报告的时序违例自动化地进行过滤和分析。在一个实施例中,可以设置时间点和关键字,以从后仿真过程中报告的时序违例中自动过滤掉该时间点之前的时序违例以及包括该关键字的时序违例。再把过滤后剩余的时序违例按照时间顺序排序或者按照路径分组以分别输出到两个文件中,并提供每一个时序违例相关的信息,从而提高时序违例分析和确认的效率。时间点可以是自定义子***的目标模块时钟异步复位的时间点。关键字可以是任何数字、字母或者正则表达式,例如“DFT”。
对于大规模或者超大规模集成电路片上***的设计而言,由于片上***中包括的模块和连线繁多。经过布局布线之后得到的SDF文件与网表未必完全对应。在后仿真中,例如在后仿真的初期,可以例如在波形窗口中直观地比较正在进行后仿真的目标模块所包括的元器件和路径的实际延迟量与相应标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估片上***的后仿真的有效性,并把握后仿真的进程。替换地,也可以快速直接执行所述比较。
要指出的是,虽然图2、图5、图6和图7中用箭头来连接各个后仿真的步骤,但是这仅仅是示意性的。实际上,这些后仿真步骤之间的顺序可以互换,只要与本公开的原理不相违背即可。还要指出的是,虽然本申请中基于集成电路片上***的后仿真来展开,然而本申请公开的方法不限于应用到集成电路片上***中。相反,本申请公开的方法可以经过简单的适应性调整而应用于任何形态为集成电路芯片的产品上,例如可以应用于片上网络(NOC)或包括一个或多个功能模块的其他芯片上。另外,本公开中阐述的方法也可以以程序指令的形式被存储在计算机可读存储介质中,并且当所述程序指令在一个或多个处理器上被执行时使得所述一个或多个处理器执行根据本公开的用于对片上***进行后仿真的方法。
图8示出根据本公开的实施例的用于对片上***进行后仿真的仿真平台800。仿真平台800中的各个单元可以分别被配置成实施根据本公开的实施例的方法。在一个实施例中,仿真平台800中可以包括时序检查白名单创建单元801和时序检查设置单元802。其中,时序检查白名单创建单元801可以被配置成为片上***的多个模块中的每一个模块创建时序检查白名单。时序检查白名单中的元器件在相应模块参与到后仿真时可以免于进行时序检查。时序检查白名单可以包括片上***的每一个模块的第一级寄存器的列表以及附加元器件列表。时序检查设置单元602可以被配置成关闭对包括在所述多个模块中的至少一个模块(或者每一个模块)的时序检查白名单内的元器件的时序检查。在对片上***的自定义子***进行后仿真的情况下,可以关闭所述自定义子***的目标模块的时序检查白名单中所包括的元器件的时序检查,而不关闭所述自定义子***之外的片上***的其他模块的时序检查白名单中的元器件的时序检查,从而避免在后仿真中由于找不到所述其他模块中的相应元器件而报告错误,拖慢后仿真的进程。
在一个实施例中,仿真平台800还可以包括子***配置单元803、虚设(dummy)单元804以及后仿真文件确定单元805。其中子***配置单元803用于根据仿真命令在所述仿真平台中配置待后仿真的自定义子***。虚设单元804用于将所述片上***的除了所述自定义子***之外的其他模块用空壳文件替代。后仿真文件确定单元805用于根据仿真命令确定所述自定义子***的后仿真文件。仿真平台还可以包括后仿真单元(未示出),用于基于所述后仿真文件对所述自定义子***进行后仿真。
子***配置单元803包括子***定义单元806和目标模块确定单元807。其中子***定义单元806用于根据仿真命令中的子***参数生成用于定义所述自定义子***的子***代码。所述目标模块确定单元807用于根据所述子***代码确定所述自定义子***所包括的目标模块。本公开提出的仿真平台支持片上***的多个版本的后仿真文件。所述后仿真文件确定单元805包括版本指定单元808和后仿真文件提取单元809。所述版本指定单元808用于根据仿真命令中的版本参数指定目标版本的后仿真文件。所述后仿真文件提取单元809用于根据所述子***代码来从所述目标版本的后仿真文件中提取所述自定义子***的后仿真文件。所述版本指定单元808可以包括版本定义单元810和版本选择单元811。其中所述版本定义单元810用于根据仿真命令中的版本参数生成用于定义所述目标版本的后仿真文件的信息的版本代码。所述版本选择单元811用于根据所述版本代码来从所述多个版本的后仿真文件中选择所述目标版本的后仿真文件。仿真平台800还可以包括其他单元,例如后仿真分析单元812、评估单元813、存储单元814以及时序违例处理单元815。其中后仿真分析单元812用于对所述片上***的后仿真报告进行分析,以将报告的时序违例是虚假时序违例的相关元器件添加到时序检查白名单中的附加元器件列表中,从而实现对时序检查白名单的更新和维护,进一步减少后仿真报告出的时序违例的数量。评估单元813用于在对所述自定义子***进行后仿真时,比较所述自定义子***的目标模块所包括的特定元器件和路径上的实际延迟量与标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估所述自定义子***的后仿真的准确性,便于用户或者验证工程师把握仿真进度。存储单元814用于存储片上***的多个版本的后仿真文件。替代地,也可以不包括存储单元814,而将片上***的多个版本的后仿真文件存储在远程存储器中或者存储在云端。时序违例处理单元815用于设置时间点和关键字,以从后仿真报告的时序违例中过滤掉所述时间点之前的时序违例以及包括所述关键字的时序违例;以及将过滤之后剩余的时序违例按照时间排序以及按照路径分组并分别输出到两个文件中,同时提供与剩余的时序违例中的每一个时序违例相关的信息。另外,虽然没有示出,然而仿真平台800还可以反标单元,用于对自定义子***的后仿真文件中的标准延迟格式文件进行反标以获得带有反标后的时序信息的网表;以及反标后处理单元,用于对反标过程中报告的错误进行归类以将相同类型的错误输出到同一文件中,同时提供与所述错误中的每一个错误相关的信息;以及对反标过程中报告的警告进行归类以将相同类型的警告输出到同一文件中,同时提供与所述警告中的每一个警告相关的信息。
仿真平台800还可以包括其他未被示出的单元,例如仿真命令输入单元、自动布局布线单元、标准延迟格式(SDF)文件生成单元等等。图8中示出的仿真平台800仅仅是示意性的,没有示出各个单元之间详细的交互。另外,仿真平台800的一些单元可以组合在一起或者拆分成多个单元,只要与本公开阐述的原理不相违背即可。此外,仿真平台800可以被配置成软件产品、硬件装置或者固件。仿真平台800可以是EDA工具厂商提供的,也可以是用户根据需要自己开发定制的。要指出的是,虽然对应于图7中示出的用于后仿真的方法来说明图8中的仿真平台所包括的各个单元的功能。然而,图8中的仿真平台还可以用于实施结合图2、图5和图6公开的用于后仿真的方法。
图9示出根据本发明的实施例的计算设备900。计算设备900可以包括根据本发明的实施例的如上文中所阐述的仿真平台。计算设备900还包括但不限于处理器、至少一个通信电路、存储装置、显示屏、相机、芯片集、电池、天线以及I/O子***等。其中处理器可以是能够处理来自寄存器和/或存储装置的电子数据以将该电子数据变换成可以被存储在寄存器和/或存储装置中的其他电子数据的任何设备或设备的部分。处理器可以是中央处理器(CPU),其一部分,或者可以是多核CPU。通信电路可以用于通过计算设备中的天线或者无线地将数据从计算设备900传递给外部组件,或者将来自外部的数据传递到计算设备900。通信电路可以实现现有的以及未来开发的无线通信标准或协议中的任一个。此外,计算设备900中可以包括多个通信电路。其中的一些专用于较短程通信,而另一些专用于较长程通信。存储装置可以是适合永久或者临时存储数据的任何装置,例如易失性存储器(例如DRAM)、非易失性存储器(例如ROM)、闪速存储器等。计算设备900还可以包括存储器控制器(虽然在图9中没有示出),用于控制存储装置的操作。计算设备900中的显示屏幕可以是任何能够显示图形或者视频的屏幕,例如触摸屏。计算设备900内的I/O子***可以用于连接计算设备900内部的各个组件或者用于将计算设备900与其外部的组件连接。计算设备900内的芯片集可以包括任何其他组件,包括但不限于数字信号处理器、密码处理器、触摸屏控制器、功率放大器、GPS***、图形处理单元等。计算设备900可以是移动端(例如智能手机)内的计算设备,或者可以是桌面型或者工作站中的计算设备。
应当理解,为了清楚起见,参考不同的功能单元对本公开的实施例进行了描述。显然,在不偏离本公开的情况下,每个功能单元的功能可以被实现在单个单元中、实现在多个单元中、或作为其他功能单元的一部分来实现。因此,本公开可以被实施在单个单元中,或者可以在物理上和功能上被分布在不同的单元和电路之间。
应当理解,尽管第一、第二、第三等术语在本文中可以用来描述各种设备、元件、部件或阶段,但是这些设备、元件、部件或阶段不应当由这些术语所限制。这些术语仅用来将一个设备、元件、部件或阶段与另一个设备、元件、部件或阶段相区分。
尽管已经结合一些实施例描述了本公开,但是其不意图被限于在本文中所阐述的特定形式。相反地,本公开的范围仅由所附权利要求来限制。另外,尽管单独的特征可以被包括在不同的权利要求中,但是这些特征可以组合。特征在权利要求中的次序不暗示特征必须以其工作的任何特定次序。此外,在权利要求中,词语“包括”不排除其他元件,并且术语“一”不排除多个。
Claims (20)
1.一种用于对片上***进行后仿真的方法,其特征在于,所述片上***包括多个模块,所述方法包括:
为所述多个模块中的每一个模块创建时序检查白名单,其中每一个模块的所述时序检查白名单包括:跨时钟域的第一级寄存器列表以及附加元器件列表;
关闭对自定义子***的目标模块的时序检查白名单内所包括的元器件的时序检查,以对所述自定义子***进行后仿真;以及
对所述自定义子***的后仿真报告进行分析,以将报告的时序违例是虚假时序违例的相关元器件添加到所述附加元器件列表。
2.根据权利要求1所述的方法,还包括:
根据仿真命令在仿真平台中配置所述自定义子***;
将所述片上***的除了所述自定义子***之外的其他模块用空壳文件替代;
根据仿真命令确定所述自定义子***的后仿真文件,以及
基于所述后仿真文件对所述自定义子***进行后仿真。
3.根据权利要求2所述的方法,其中根据仿真命令在仿真平台中配置所述自定义子***包括:
根据仿真命令中的子***参数生成用于定义所述自定义子***的子***代码;以及
根据所述子***代码确定所述自定义子***所包括的目标模块。
4.根据权利要求3所述的方法,其中所述仿真平台支持所述片上***的多个版本的后仿真文件,根据仿真命令确定所述自定义子***的后仿真文件包括:
根据仿真命令中的版本参数指定目标版本的后仿真文件;以及
根据所述子***代码来从所述目标版本的后仿真文件中提取所述自定义子***的后仿真文件。
5.根据权利要求4所述的方法,其中根据仿真命令中的版本参数指定目标版本的后仿真文件包括:
根据仿真命令中的版本参数生成用于定义所述目标版本的后仿真文件的信息的版本代码;以及
根据所述版本代码来从所述多个版本的后仿真文件中选择所述目标版本的后仿真文件。
6.根据权利要求1-5中任一项所述的方法,其中后仿真文件包括网表、标准延迟格式文件以及标准单元库,并且所述方法还包括:
对所述自定义子***的后仿真文件中的标准延迟格式文件进行反标以获得带有反标后的时序信息的网表。
7.根据权利要求6所述的方法,还包括:
对反标过程中报告的错误进行归类以将相同类型的错误输出到同一文件中,同时提供与所述错误中的每一个错误相关的信息;以及
对反标过程中报告的警告进行归类以将相同类型的警告输出到同一文件中,同时提供与所述警告中的每一个警告相关的信息。
8.根据权利要求2所述的方法,还包括:在对所述自定义子***进行后仿真时,比较所述自定义子***的目标模块所包括的特定元器件和路径上的实际延迟量与标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估所述自定义子***的后仿真的准确性。
9.根据权利要求2所述的方法,还包括:
设置时间点和关键字以从所述自定义子***的后仿真中报告出的时序违例中过滤掉所述时间点之前的时序违例以及包括所述关键字的时序违例;以及
将过滤之后剩余的时序违例按照时间排序以及按照路径分组并分别输出到两个文件中,同时提供与剩余的时序违例中的每一个时序违例相关的信息。
10.根据权利要求9所述的方法,其中所述时间点包括发生时钟异步复位的时刻。
11.根据权利要求1所述的方法,其中所述片上***是多核GPU***,并且所述多核GPU***的每个GPU核包括所述多个模块中的至少一个模块。
12.一种用于对片上***进行后仿真的仿真平台,其特征在于,所述片上***包括多个模块,所述仿真平台包括:
时序检查白名单创建单元,被配置成为所述多个模块中的每一个模块创建时序检查白名单,其中每一个模块的所述时序检查白名单包括:跨时钟域的第一级寄存器列表以及附加元器件列表;
时序检查设置单元,被配置成关闭对自定义子***的目标模块的时序检查白名单内所包括的元器件的时序检查,以对所述自定义子***进行后仿真;以及
后仿真分析单元,被配置成:对所述自定义子***的后仿真报告进行分析,以将报告的时序违例是虚假时序违例的相关元器件添加到所述附加元器件列表。
13.根据权利要求12所述的仿真平台,还包括:
子***配置单元,被配置成根据仿真命令在仿真平台中配置所述自定义子***;
虚设单元,被配置成将所述片上***的除了所述自定义子***之外的其他模块用空壳文件替代;
后仿真文件确定单元,被配置成根据仿真命令确定所述自定义子***的后仿真文件;以及
后仿真单元,被配置成基于所述后仿真文件对所述自定义子***进行后仿真。
14.根据权利要求13所述的仿真平台,还包括:
子***定义单元,被配置成根据仿真命令中的子***参数生成用于定义所述自定义子***的子***代码;以及
目标模块确定单元,被配置成根据所述子***代码确定所述自定义子***所包括的目标模块。
15.根据权利要求14所述的仿真平台,其中所述仿真平台支持所述片上***的多个版本的后仿真文件,所述后仿真文件确定单元包括:
目标版本指定单元,被配置成根据仿真命令中的版本参数指定目标版本的后仿真文件;以及
后仿真文件提取单元,被配置成根据所述子***代码来从所述目标版本的后仿真文件中提取所述自定义子***的后仿真文件。
16.根据权利要求13所述的仿真平台,还包括评估单元,被配置成:
在对所述自定义子***进行后仿真时,比较所述自定义子***的目标模块所包括的特定元器件和路径上的实际延迟量与标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估所述自定义子***的后仿真的准确性。
17.根据权利要求13所述的仿真平台,还包括时序违例处理单元,被配置成:
设置时间点和关键字以从所述自定义子***的后仿真中报告出的时序违例中过滤掉所述时间点之前的时序违例以及包括所述关键字的时序违例;以及
将过滤之后剩余的时序违例按照时间排序以及按照路径分组并分别输出到两个文件中,同时提供与剩余的时序违例中的每一个时序违例相关的信息。
18.根据权利要求17所述的仿真平台,其中所述时间点包括发生时钟异步复位的时刻。
19.一种计算设备,其特征在于,包括根据权利要求12-18中任一项所述的仿真平台。
20.一种其上存储有指令的机器可读介质,所述指令当被机器执行时使得所述机器执行根据权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310258993.1A CN115983171B (zh) | 2023-03-17 | 2023-03-17 | 用于对片上***进行后仿真的方法和仿真平台 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310258993.1A CN115983171B (zh) | 2023-03-17 | 2023-03-17 | 用于对片上***进行后仿真的方法和仿真平台 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115983171A CN115983171A (zh) | 2023-04-18 |
CN115983171B true CN115983171B (zh) | 2023-06-09 |
Family
ID=85962721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310258993.1A Active CN115983171B (zh) | 2023-03-17 | 2023-03-17 | 用于对片上***进行后仿真的方法和仿真平台 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115983171B (zh) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636509B (zh) * | 2013-11-08 | 2019-05-28 | 恩智浦美国有限公司 | 门级仿真中验证时序问题的***及方法 |
TWI533154B (zh) * | 2014-09-17 | 2016-05-11 | 瑞昱半導體股份有限公司 | 數位電路設計方法及相關的電腦程式產品 |
CN106407489B (zh) * | 2015-07-31 | 2019-11-22 | 展讯通信(上海)有限公司 | 一种时序约束检查方法 |
CN112000173B (zh) * | 2020-08-20 | 2022-03-29 | 飞腾信息技术有限公司 | 一种检查跨时钟域多位信号时序违反的方法及*** |
CN112613259B (zh) * | 2020-12-18 | 2022-06-10 | 海光信息技术股份有限公司 | 片上***后仿真方法、装置及电子设备 |
CN114266040A (zh) * | 2021-12-14 | 2022-04-01 | 中国电子科技集团公司第二十八研究所 | 一种Linux主机入侵检测方法 |
CN114626324B (zh) * | 2022-02-24 | 2023-12-12 | 深圳市紫光同创电子有限公司 | Fpga电路后仿真验证方法、装置、电子设备及存储介质 |
CN115470748A (zh) * | 2022-08-25 | 2022-12-13 | 芯原微电子(成都)有限公司 | 一种芯片仿真加速方法、装置、电子设备及存储介质 |
-
2023
- 2023-03-17 CN CN202310258993.1A patent/CN115983171B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115983171A (zh) | 2023-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1885295B (zh) | 使用逻辑单元建置集成电路 | |
US7206967B1 (en) | Chip debugging using incremental recompilation and register insertion | |
US7472361B2 (en) | System and method for generating a plurality of models at different levels of abstraction from a single master model | |
US8122398B2 (en) | Conversion of circuit description to an abstract model of the circuit | |
US6083269A (en) | Digital integrated circuit design system and methodology with hardware | |
US9589096B1 (en) | Method and apparatus for integrating spice-based timing using sign-off path-based analysis | |
JPH05143674A (ja) | 回路図形データベースからの自動論理モデル作成方法 | |
US9041431B1 (en) | Partial reconfiguration and in-system debugging | |
US7437701B1 (en) | Simulation of a programming language specification of a circuit design | |
JP2010531000A (ja) | 回路エミュレーションの入力及び遅延入力のマルチプレクシング | |
CN112069763B (zh) | 修正电路的方法 | |
KR20220148913A (ko) | 초기 단계 회로 설계에서 기계 학습 기반 메트릭 예측 | |
US6658628B1 (en) | Developement of hardmac technology files (CLF, tech and synlib) for RTL and full gate level netlists | |
US10235485B1 (en) | Partial reconfiguration debugging using hybrid models | |
US6959272B2 (en) | Method and system for generating an ATPG model of a memory from behavioral descriptions | |
US10437946B1 (en) | Using implemented core sources for simulation | |
US8868396B1 (en) | Verification and debugging using heterogeneous simulation models | |
CN117350208A (zh) | 时序逻辑元件性能检查方法及设备 | |
CN107784185B (zh) | 一种门级网表中伪路径的提取方法、装置及终端设备 | |
US8893068B1 (en) | Techniques to generate a more accurate simulation model | |
US7571086B2 (en) | Incremental circuit re-simulation system | |
JP5056511B2 (ja) | 検証支援プログラム、該プログラムを記録した記録媒体、検証支援装置、および検証支援方法 | |
CN115983171B (zh) | 用于对片上***进行后仿真的方法和仿真平台 | |
US8739093B1 (en) | Timing characteristic generation and analysis in integrated circuit design | |
CN112861455B (zh) | Fpga建模验证***及方法 |
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 |