掌桥专利:专业的专利平台
掌桥专利
首页

用于对片上系统进行后仿真的方法和仿真平台

文献发布时间:2024-04-18 19:53:33


用于对片上系统进行后仿真的方法和仿真平台

技术领域

本申请涉及集成电路技术领域。具体地,涉及用于对片上系统进行后仿真的方法和仿真平台。

背景技术

集成电路片上系统(SoC)的设计和验证是一个非常耗时和繁复的过程。一个产品从最初构想、到设计、验证、流片、测试最后到量产要经过少则数个月长则数年的时间。在集成电路片上系统的设计过程中,经常需要进行仿真与验证来检查所设计的片上系统是否能够按照设想那样执行。集成电路片上系统设计验证过程中需要进行功能前仿真和时序后仿真。其中功能前仿真是针对寄存器传输级(Register Transfer Level,RTL)的仿真,主要是通过仿真验证所设计电路的逻辑功能正确性,仿真速度快。时序后仿真是基于由基本门单元组成的网表(Netlist),同时将网表的门级电路延迟和各种门级电路之间的连线延迟等考虑在内进行仿真。时序后仿真主要是通过仿真发现设计潜在的约束和时序问题。并且由于后仿真中考虑进去了电路元件以及路径的延迟,导致仿真速度慢,经常一个集成电路片上系统的后仿真需要花费数个小时甚至数天的时间。

为了加快对集成电路片上系统的后仿真,层次化设计和验证应运而生。所谓层次化是指在产品设计的初期就将整个大规模集成电路划分为多个相对独立的子系统,分派给不同的工程师或团队来分别进行设计和验证,以便将庞大的设计对象划分成几个相对独立的部分并行开展设计和验证,以缩短产品研发设计和验证的周期,尤其是缩短后仿真验证的时间。

然而,现有对集成电路片上系统的设计和验证的这种层次化方法一般是在产品设计初期就提前划分好层次。在后续仿真验证环节,要基于这种划分好的固定的层次进行设计和验证,而验证工程师无法基于应用场景和仿真效率需求来灵活地自定义选择要进行仿真验证的模块,从而使得在进行仿真验证的时候经常要连同实际上并不关注或者不需要的一些模块一起进行后仿真,导致后仿真的时间依然很长,后仿真的效率依然低下。同时,现有层次化设计和验证后产生的错误或者警告还需要手动机械地逐个进行处理,一方面给验证工程师带来繁冗的验证工作量,另一方面也容易出错。

发明内容

针对现有技术中存在的缺陷,本公开提出了一种用于对片上系统进行后仿真的方法和仿真平台。这种后仿真的方法和平台能够在现有层次化设计和验证的基础上,根据实际应用场景需要而定义待后仿真的自定义子系统以及其所包括的目标模块,实现灵活自定义的模块间联合后仿真验证,极大地提高后仿真验证的效率。进一步地,可以从多个版本的后仿真文件中选择目标版本的后仿真文件以进行后仿真。同时还实现对后仿真验证中报告的错误或警告进行自动化处理,从而进一步提升后仿真验证的效率,并进一步缩短产品开发的周期。此外,本公开的后仿真的方法和仿真平台是极其用户友好的,用户可以通过简单地在仿真命令中输入相关参数,便可以实现基于特定后仿真文件、对自定义子系统的后仿真以及后仿真之后的处理,从而提升后仿真效率,缩短产品开发周期。

在一个方面中,本公开提出了一种用于对片上系统进行后仿真的方法,所述片上系统包括多个模块,所述方法包括:根据仿真命令在仿真平台中配置待后仿真的自定义子系统;将所述片上系统的除了所述自定义子系统之外的其他模块用空壳文件替代;根据仿真命令确定所述自定义子系统的后仿真文件,以及基于所述后仿真文件对所述自定义子系统进行后仿真。

在一个实施例中,根据仿真命令在仿真平台中配置待后仿真的自定义子系统包括:根据仿真命令中的子系统参数生成用于定义所述自定义子系统的子系统代码;以及根据所述子系统代码确定所述自定义子系统所包括的目标模块。

在一个实施例中,所述仿真平台支持所述片上系统的多个版本的后仿真文件。根据仿真命令确定所述自定义子系统的后仿真文件包括:根据仿真命令中的版本参数指定目标版本的后仿真文件;以及根据所述子系统代码来从所述目标版本的后仿真文件中提取所述自定义子系统的后仿真文件。

在一个实施例中,根据仿真命令中的版本参数指定目标版本的后仿真文件包括:根据仿真命令中的版本参数生成用于定义所述目标版本的后仿真文件的信息的版本代码;以及根据所述版本代码来从所述多个版本的后仿真文件中选择所述目标版本的后仿真文件。

在一个实施例中,所述后仿真文件包括网表、标准延迟格式文件以及标准单元库,并且所述方法还包括:对所述自定义子系统的后仿真文件中的标准延迟格式文件进行反标以获得带有反标后的时序信息的网表。

在一个实施例中,所述方法还包括:对反标过程中报告的错误进行归类以将相同类型的错误输出到同一文件中,同时提供与所述错误中的每一个错误相关的信息;以及对反标过程中报告的警告进行归类以将相同类型的警告输出到同一文件中,同时提供与所述警告中的每一个警告相关的信息自定义子系统。

在一个实施例中,所述方法还包括:在对所述自定义子系统进行后仿真时,比较所述自定义子系统的目标模块所包括的特定元器件和路径上的实际延迟量与标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估所述自定义子系统的后仿真的准确性。

在一个实施例中,所述方法还包括:设置时间点和关键字以从所述自定义子系统的后仿真中报告出的时序违例中过滤掉所述时间点之前的时序违例以及包括所述关键字的时序违例;以及将过滤之后剩余的时序违例按照时间排序以及按照路径分组并分别输出到两个文件中,同时提供与剩余的时序违例中的每一个时序违例相关的信息。

在一个实施例中,其中所述多个版本的后仿真文件包括:在所述片上系统的不同设计阶段、由不同的人员或者基于不同的工艺角产生的不同版本的后仿真文件。

在另一方面中,本公开还提出了一种用于对片上系统进行后仿真的仿真平台,所述片上系统包括多个模块,所述仿真平台包括:子系统配置单元,用于根据仿真命令在所述仿真平台中配置待后仿真的自定义子系统;虚设单元,用于将所述片上系统的除了所述自定义子系统之外的其他模块用空壳文件替代;后仿真文件确定单元,用于根据仿真命令确定所述自定义子系统的后仿真文件;以及后仿真单元,用于基于所述后仿真文件对所述自定义子系统进行后仿真。

在一个实施例中,所述子系统配置单元包括:子系统定义单元,用于根据仿真命令中的子系统参数生成用于定义所述自定义子系统的子系统代码;以及目标模块确定单元,用于根据所述子系统代码确定所述自定义子系统所包括的目标模块。

在一个实施例中,所述仿真平台支持所述片上系统的多个版本的后仿真文件,所述后仿真文件确定单元包括:版本指定单元,用于根据仿真命令中的版本参数指定目标版本的后仿真文件;以及后仿真文件提取单元,用于根据所述子系统代码来从所述目标版本的后仿真文件中提取所述自定义子系统的后仿真文件。

在一个实施例中,所述版本指定单元包括:版本定义单元,用于根据仿真命令中的版本参数生成用于定义所述目标版本的后仿真文件的信息的版本代码;以及版本选择单元,用于根据所述版本代码来从所述多个版本的后仿真文件中选择所述目标版本的后仿真文件自定义子系统。

在一个实施例中,所述后仿真文件包括网表、标准延迟格式文件以及标准单元库,并且所述仿真平台还包括:反标单元,用于对所述自定义子系统的后仿真文件中的标准延迟格式文件进行反标以获得带有反标后的时序信息的网表。

在一个实施例中,所述仿真平台还包括反标后处理单元,用于对反标过程中报告的错误进行归类以将相同类型的错误输出到同一文件中,同时提供与所述错误中的每一个错误相关的信息;以及对反标过程中报告的警告进行归类以将相同类型的警告输出到同一文件中,同时提供与所述警告中的每一个警告相关的信息。

在一个实施例中,所述仿真平台还包括评估单元,用于在对所述自定义子系统进行后仿真时,比较所述自定义子系统的目标模块所包括的特定元器件和路径上的实际延迟量与标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估所述自定义子系统的后仿真的准确性。

在一个实施例中,所述仿真平台还包括时序违例处理单元,用于设置时间点和关键字以从所述自定义子系统的后仿真中报告出的时序违例中过滤掉所述时间点之前的时序违例以及包括所述关键字的时序违例;以及将过滤之后剩余的时序违例按照时间排序以及按照路径分组并分别输出到两个文件中,同时提供与剩余的时序违例中的每一个时序违例相关的信息。

在另一方面中,本公开还提出了一种用于对片上系统进行后仿真的仿真平台,其特征在于,所述仿真平台支持所述片上系统的多个版本的后仿真文件,所述仿真平台被配置成用于:根据仿真命令中的版本参数生成用于定义目标版本的后仿真文件的信息的版本代码;根据所述版本代码来从所述多个版本的后仿真文件中选择所述目标版本的后仿真文件;从当前版本的后仿真文件切换到所述目标版本的后仿真文件;以及基于所述目标版本的后仿真文件对所述片上系统进行后仿真。

在另一方面中,本公开还提出了一种计算设备,其包括根据本公开的实施例所述的仿真平台。

在又一方面中,本公开还提出了一种其上存储有指令的机器可读介质,所述指令当被机器执行时使得所述机器执行根据本公开的实施例的用于对片上系统进行后仿真的方法。

本公开内容包括在本公开内容中所阐明的两个、三个、四个或更多特征或元素的任何组合,而无论这样的特征或元素是否被清楚地组合或以其他方式在本文中描述的特定示例实现方式中被记载。本公开内容意图被整体阅读,使得本公开内容的任何单独的特征或元素应当被视为可组合的,除非本公开内容的上下文清晰地另行规定。

附图说明

现在将参考附图描述本公开的具体示例性实施例。通过阅读以下详细描述连同附图,本公开内容的特征、方面和优点将是显而易见的。在附图中:

图1示出数字集成电路设计的流程;

图2a示出根据本公开的实施例的用于配置自定义子系统的片上系统的示意图;

图2b和图2c示出根据本公开的实施例的另外的用于配置自定义子系统的片上系统的示意图;

图3示出根据本公开的实施例的用于具体说明自定义子系统的配置的四核GPU系统的示意图;

图4示出根据本公开的实施例的用于对自定义子系统进行后仿真的方法;

图5示出根据本公开的实施例的用于基于目标版本的后仿真文件来对片上系统进行后仿真的方法;

图6示出根据本公开的实施例的另外的用于对片上系统进行后仿真的方法;

图7示出根据本公开的实施例的用于对片上系统进行后仿真的仿真平台;以及

图8示出根据本公开的实施例的计算设备的示意图。

具体实施方式

现在将在下文中参考附图更充分地描述本公开内容的一些实现方式,在所述附图中示出本公开内容的一些而不是所有实现方式。事实上,本公开内容的各种实现方式可以用许多不同的形式被具体化并且不应当被解释为受限于本文中所阐明的实现方式;相反,提供这些示例实现方式是为了更好地把本公开内容的范围传达给本领域技术人员。

为了便于理解本公开的原理,在图1中示出数字集成电路设计的一般流程。数字集成电路设计包括前端和后端两个阶段。前端和后端之间并没有明显的界限。一般地,将图1中虚线上面的阶段称为前端,虚线下面的阶段称为后端。前端的第一阶段——算法或硬件架构设计与分析的目的是完成芯片中数字部分的高层次算法或架构的分析与建模,为硬件提供一个正确的软件功能模型,更为重要的是,通过大量的高层次仿真和调试,为RTL实现提供总体性的设计指导。第二阶段——RTL实现的目的是依据第一阶段的结果,完成由高层次描述到用Verilog HDL或VHDL等硬件语言以寄存器之间的传输为基础对电路的描述。第三阶段运行代码风格检查,目的在于排除RTL代码中跨时钟域、Lint等问题。第四阶段是进行功能验证,目的在于在无延迟的理想情况下,通过大量的仿真,发现电路设计过程中的人为或者非人为引起的漏洞或者错误。这个阶段是上文提到的前仿真。功能验证的主要指标是功能覆盖率。下一个阶段是逻辑综合,其目的是将RTL级设计中所得到的程序代码翻译成实际电路的各种元器件以及它们之间的连接关系,然后用一张表来表示,这张表就称为门级网表。逻辑综合阶段实现将代码映射到与工艺库相关的网表。下面进行静态时序分析,相对动态仿真的类穷举式验证方法而言,从静态分析的角度,保证设计中所有的路径,满足内部时序单元对建立时间和保持时间的要求。即无论起点是什么,信号都可以被及时地传递到该路径的终点,并且在电路正常工作所必需的时间段内保持恒定。下一阶段是一致性验证。RTL代码和逻辑综合后的网表都可以抽象为两幅由节点和边构成的图,一致性验证阶段采用了类似于直接比较两幅图是否一致的方法,来确定逻辑综合生成的网表是否正确。下一阶段是时序仿真。相比于功能仿真,时序仿真将RTL代码替换为网表,然后需要加载标准延迟格式文件(SDF)文件和工艺库模型。时序仿真的目的在于,在考虑进去单元和路径延迟等近似实际工作的条件下,观察功能是否还能保持正确。相对于功能前仿真,时序仿真也称为后仿真。

数字集成电路的后端设计又称物理设计,将网表格式的文本转化成一个个有物理大小和位置的单元、连线(布局与布线(placement and routing))。并且在实现过程中要满足面积、功耗、性能等要求。在图1中,为了简便起见,后端仅仅示出了布局布线这一步骤。然而实际上,后端还需要进行很多步骤,例如提取延迟信息、运行DRC(设计规则检查)和LVS(版图与电路图的一致性检查)等。由于布局布线阶段调整了电路元器件的布局和连线,计算得到布局布线后的标准延迟格式文件,再重新进行时序后仿真。

整个ASIC设计流程都是一个反复迭代的过程,数字和模拟集成电路设计验证都是这样。在任何一步不能满足约束条件或者不能实现功能的时候,都需要重复之前的步骤,甚至重新设计RTL代码。所以虽然图1中使用了一些向下的箭头连接各个阶段,但是实际上,在任何一步结束之后如果没有达到要求都可能需要返回到之前的步骤重新修改再进行仿真验证。直到最终获得所设计的片上系统的GDSII文件进行流片。数字集成电路设计可以包括但不限于图1中所示出的阶段。另外,图1中所示出的一些阶段的顺序可以改变。并且其中的一些阶段可以根据需要而合并或者省略。

针对包括许多模块的大规模集成电路片上系统的情况,可以对整个片上系统所包括的所有模块进行后仿真。然而,也有可能在一种应用场景下需要用到其中的一些模块。而在另一种应用场景下需要用到的是其中的另一些模块。为了在后仿真过程中,支持对于这些以及其他应用场景的灵活性适配,进一步提高后仿真的效率,本公开提出一种灵活自定义子系统内模块间联合仿真的方法和仿真平台。并且支持后仿真之后进行自动化的仿真后处理。

图2a示出根据本公开的实施例的用于配置自定义子系统的片上系统200的示意图。片上系统200包括分别用于实现不同功能的模块201-206。片上系统200可以是大规模或者超大规模集成电路片上系统,例如数字集成电路、模拟集成电路或者模/数混合集成电路片上系统。在一个实施例中,模块201-206可以包括电源模块、扬声器、存储器、编解码器、传感器、滤波器或其他功能模块。虽然在图2a中示出的片上系统200仅仅包括六个模块201-206,然而这仅仅是示意性的。实际上片上系统200内部可以包括更多(例如,数十个、数百个)或者更少的模块。在对片上系统200进行后仿真时,可以对整个片上系统200的所有模块进行后仿真。然而,在其中的一些模块的功能并不关注的情况下,对整个片上系统200的后仿真会花费很多时间,后仿真的效率极低。

在本公开的实施例中,可以根据实际应用场景从所述片上系统的多个模块中选择一个或多个模块组成自定义子系统来进行后仿真。例如模块201是图形处理器(GPU),模块202是双倍数据速率(DDR)存储器,模块203是显示器。在仅仅需要仿真验证GPU对DDR的数据存储和访问操作的情况下,并不需要联合模块203的显示器以及模块204-206一起进行后仿真。而仅仅需要对模块201和模块202进行后仿真即可。本公开中提及的“自定义子系统”是根据后仿真的需要对片上系统200的所有功能模块中的一个或多个模块组合形成的待后仿真的子系统。例如,模块201和模块202组成自定义子系统A,以及模块202和模块203组成另一自定义子系统B。为了便于区分和解释本公开的原理,将“自定义子系统”所包括的模块称为“目标模块”。对“自定义子系统”的后仿真实质上是对所述自定义子系统所包括的目标模块的后仿真。例如,对自定义子系统A的后仿真实质是对所述自定义子系统A所包括的目标模块201和202进行后仿真。

图2a中公开了直接对片上系统200所包括的模块配置自定义子系统。此外,片上系统也可以包括多个子系统,每个子系统中包括多个模块。所述多个子系统可以是根据现有层次化方法在设计初期被划分开来分别进行设计和验证的,也可以是以其他方式划分的。在这种情况下,有可能每个子系统中仍然包括大量模块,而其中的一些模块在一些场景下应用不到。此时,对整个子系统进行后仿真仍然需要花费很多时间,仿真效率依然不高。另外,还有可能需要一个子系统中的一些模块连同另一个子系统中的一些模块一起进行后仿真。而现有的层次化设计和验证方法由于基于设计初期划分好的固定的层次进行设计验证,无法满足后仿真中在各种应用场景和仿真效率需求下的灵活的后仿真的需求。根据本公开的用于后仿真的方法不仅可以实现对每个子系统进行后仿真,还可以实现对子系统的部分模块进行后仿真,并且可以实现对跨不同子系统的多个模块进行后仿真,从而进一步提高后仿真的效率。

图2b和图2c中公开了根据本公开的实施例的另外的用于配置自定义子系统的片上系统的示意图。在图2b中,片上系统200包括子系统E和子系统F。其中,子系统E包括模块201-203,子系统F包括模块204-206。在一个实施例中,待后仿真的自定义子系统C被配置为包括子系统F中的模块205和206作为目标模块。在其他实施例中,待后仿真的自定义子系统C也可以包括子系统F中的其他模块或者子系统E中的模块作为目标模块。在图2c中,片上系统200包括子系统E和子系统F。其中,子系统E包括模块201-203,子系统F包括模块204-206。在一个实施例中,待后仿真的自定义子系统D被配置为包括子系统E中的模块202和子系统F中的模块205作为目标模块。在其他实施例中,待后仿真的自定义子系统D也可以包括子系统E和F中的其他模块作为目标模块。换言之,根据本公开的配置自定义子系统的方法可以实现同一子系统内部分模块的后仿真,也可以实现跨不同子系统的多个模块之间的后仿真。

图3示出根据本公开的实施例的用于具体说明自定义子系统的配置的四核GPU系统的示意图。图3中示出的四核GPU系统300包括第一GPU核、第二GPU核、第三GPU核、第四GPU核以及各个GPU核通用的模块。各个GPU核可以包括各自的功能模块,例如处理器、缓冲器等。通用模块可以包括电源模块、时钟模块以及显示器等。每个GPU核可以称为一个子系统。在后仿真时,可以对各个GPU核分别连同通用模块进行后仿真。然而,各个GPU核的设计可能只有细微差别。在其中一个GPU核(例如,第一GPU核)的功能和时序已经通过后仿真验证的情况下,可以仅仅对其他GPU核(例如,第二GPU核至第四GPU核)内的与第一GPU核存在差异的那部分模块进行后仿真,以提高后仿真的效率。在一个实施例中,可以配置自定义子系统使之包括第二GPU核的模块305(例如,该模块305与第一GPU核内的相应模块存在差异)连同所需的通用模块(例如通用模块313-316中的电源模块和时钟模块)以进行后仿真。在另一个实施例中,例如仅仅为了调试某个模块,但是相应子系统内的配合该模块进行调试的其他模块尚且没有通过仿真验证,但是在当前后仿真中不关注所述其他模块的功能和时序。此时,可以利用其他子系统内的已经通过仿真验证的相应模块连同该待调试模块一起进行后仿真。例如,可以配置待后仿真的自定义子系统,使之包括第二GPU核的模块306(其可以作为待调试模块)以及第一GPU核的模块301(其已经通过仿真验证,并且可以配合第二GPU核的模块306进行所需的调试)连同一个或多个通用模块(例如模块315)作为目标模块以进行后仿真。因此,本公开所提出的自定义子系统的后仿真方法支持跨多个子系统的多个模块的联合后仿真。

要指出的是,片上系统中可以包括多个子系统,例如第一GPU核到第四GPU核。除了所述多个子系统之外,片上系统还可以包括其他模块,例如多个通用模块。在另外的实施例中,片上子系统可以包括多个子系统,而不包括除了所述多个子系统之外的其他模块。在这种情况下,每个子系统都可以包括部分或者全部通用模块。然而,无论片上系统的所有模块是否被包括在已有的子系统中,以及已有的子系统是如何划分的,都不影响本公开提出的配置自定义子系统以用于后仿真的方法的实施。换言之,本公开提出的配置自定义子系统的用于后仿真的方法能够独立于片上系统中可能存在的已有子系统的划分而按需要进行配置,以包括不同的已有子系统中存在的不同模块作为目标模块来进行后仿真。还要指出的是,虽然上文用多核GPU的实施例来说明根据本公开的用于后仿真的方法,然而本公开的方法可以适用于任何其他片上系统,例如多核CPU系统等。

图4示出根据本公开的实施例的用于对自定义子系统进行后仿真的方法。在步骤S11中,根据仿真命令中的子系统参数生成用于定义自定义子系统的子系统代码。在步骤S12中,根据所述子系统代码确定所述自定义子系统所包括的目标模块。在步骤S13中,将所述片上系统的除了所述自定义子系统之外的其他模块用空壳(dummy)文件替代。在步骤S14中,对所述自定义子系统进行后仿真。可以根据应用场景、后仿真效率或者其他需求配置自定义子系统。在图2中所示的情况下,自定义子系统A的目标模块是模块201-202。自定义子系统B的目标模块是模块202-203。在其他没有示出的情况下,自定义子系统可以包括其他模块作为目标模块。如此可以实现仅仅对自定义子系统所包括的目标模块进行后仿真,从而大大提升片上系统后仿真的效率。

要指出的是,集成电路芯片的开发的最终目的是获得集成有集成电路片上系统的芯片。在本公开的加快对片上系统的后仿真的方法中,可以在后仿真时,根据应用场景或者仿真效率的需求等自定义子系统来进行后仿真。对自定义子系统的配置可以非常灵活。每个验证工程师可以根据自己的需要进行配置。在一个实施例中,自定义子系统可以仅仅包括一个模块,在另一个实施例中,自定义子系统可以是片上系统的所有模块中的一个或多个模块所能够组成的实现某一功能的最小自定义子系统。最小自定义子系统具有最高的灵活适配性,后续任何较大自定义子系统的后仿真都可以通过添加其所包括的最小自定义子系统来实现。在集成电路片上系统所包括的模块非常多(例如几百个或者上千个)的情况下,根据需要配置一个或多个自定义子系统,然后进行后仿真可以更加简便快速地实现对整个片上系统的中感兴趣的目标模块的后仿真。

以上结合图4的实施例阐述了用于对包括多个模块的片上系统的自定义子系统进行后仿真的方法。通过所述方法,可以实现多个模块之间或者多个子系统的不同模块之间灵活自定义的后仿真。相对于现有技术中在设计初期对大规模集成电路的层次化,结合图4所描述的后仿真的方法可以实现在后仿真的时候灵活配置待后仿真的自定义子系统,以及确定其目标模块,而用空壳文件替代不需要或者不关注的模块,从而不对其进行后仿真。大大节省了后仿真所需要的时间,提升了后仿真的效率。

集成电路片上系统的设计验证是一个繁复的迭代过程,涉及到前端、后端多个不同工程师或团队之间的协同工作。经常在仿真验证阶段甚至后端布局布线阶段遇到不可修复的警告或者错误的情况下,需要返回上一步甚至是重新修改RTL代码,然后重复进行仿真验证、布局布线等。因此,虽然集成电路片上系统的设计验证最终要得到版图对应的GDSII文件,并将它交付给代工厂进行流片。但是,在片上系统的开发的整个过程中,可能存在许多版本的片上系统的后仿真文件可以用于搭建仿真环境。例如,在图1中阐述的逻辑综合阶段之后会得到片上系统的一个网表以及其所对应的标准延迟格式文件。这个阶段虽然也调用了厂商的器件库,但是器件之间的连接仅仅是简单的逻辑连接。这一阶段得到的标准延迟格式文件中包括对应的网表中所有器件的延迟信息而不包括器件连线上的路径延迟。在图1中的后端布局布线调整之后,得到一个考虑进去路径延迟的标准延迟格式文件。即使是在同一研发阶段,由于编辑标准单元库、修改RTL代码、添加了约束条件、修复一些时序违例等都会导致网表以及其对应的标准延迟格式文件变化。因此,在集成电路片上系统的设计验证过程中,片上系统的后仿真文件也定期会更新,例如每两周更新一次版本。因此,在仿真平台内部存储有许多(例如,数十个)不同阶段得到的、或者不同日期更新的、或者不同工程师定义的、或者针对不同应用场景的、或者基于不同工艺角的片上系统的后仿真文件的版本。图4中公开的用于后仿真的方法可以配置自定义子系统,然后对配置好的自定义子系统进行后仿真。本公开中的对片上系统的后仿真的方法还可以实现根据仿真命令中的版本参数自动切换到所有版本中的任何一个版本的后仿真文件来对整个片上系统进行后仿真。

在图5中示出根据本公开的实施例的基于片上系统的目标版本的后仿真文件来对片上系统进行后仿真的方法500。在步骤S21中,根据仿真命令中的版本参数生成用于定义目标版本的后仿真文件的信息的版本代码。在步骤S22中,根据所述版本代码来从所述多个版本的后仿真文件中选择目标版本的后仿真文件。版本代码可以用于隔离目标版本与其他版本的后仿真文件。片上系统的后仿真文件的多个版本包括不同人员在不同日期、或者在片上系统的不同设计阶段、或者基于不同的工艺角或应用场景产生的片上系统的后仿真文件的版本。在其他实施例中,后仿真文件还可以包括存储器(memory)的库文件。后仿真文件是否包括存储器的库文件取决于片上系统设计和后仿真的需要,例如片上系统设计是否用到存储器以及存储器的库文件在片上系统的开发过程中是否发生变化等。不同的工艺角对应于不同的门延迟。一般把NMOS和PMOS晶体管的速度波动范围限制在由四个角所确定的矩形内。这四个角分别是:快NFET和快 PFET(FF),慢NFET和慢PFET(SS),快NFET和慢PFET(FS),慢NFET和快PFET(SF)。中心典型范围的工艺角是TT。在一个实施例中,工艺角可以仅包括TT、SS和FF三种。

用户或者验证工程师可以基于应用场景和仿真效率的需求在命令框中输入待执行后仿真的片上系统的目标版本的版本参数。仿真平台可以自动生成定义片上系统的后仿真文件的版本信息的硬件语言的版本代码。并基于版本代码自动选择片上系统的目标版本后仿真文件。

在步骤S23中,仿真平台从当前版本的后仿真文件自动切换到片上系统的目标版本的后仿真文件。在步骤S24中,基于所述目标版本的后仿真文件来对所述片上系统进行后仿真。在一个实施例中,自动切换到片上系统的目标版本的后仿真文件包括将默认的后仿真文件自动替换为片上系统的目标版本的后仿真文件。在另一个实施例中,自动切换到片上系统的目标版本的后仿真文件包括从当前加载的片上系统的其他版本的后仿真文件切换到片上系统的目标版本的后仿真文件。而无需从数十、数百个后仿真文件版本中手动选择其中的一个来执行。对于一些大规模集成电路片上系统而言,产品开发周期长,中间版本的后仿真文件多,各个版本的命名可能非常相似,现有的这种手动选择后仿真文件的版本是耗时的并且非常容易出错。而一旦选择错误,用户或者验证工程师可能并不容易发现,导致浪费后仿真时间同时损失后仿真的有效性。根据本公开关于图5所阐述的方法,可以根据用户或者验证工程师输入的仿真命令中的版本参数,实现完全自动切换到片上系统的目标版本的后仿真文件,节省后仿真时间,并减少后仿真中版本选择的失误,从而进一步提升后仿真的效率。

相比于图4中阐述的对自定义子系统所包括的目标模块进行后仿真而言,图5中阐述的后仿真方法可以自动切换片上系统的目标版本的后仿真文件。关于图4和图5所阐述的实施例可以单独地分开使用,或者二者可以结合在一起使用,例如先选择后仿真的片上系统的目标版本的后仿真文件,再从片上系统的所有模块的后仿真文件中提取出要真正执行后仿真的自定义子系统的后仿真文件。

替代地,也可以同时执行关于图4和图5所阐述的实施例。例如,用户或者验证工程师可以同时在命令框中输入版本参数和子系统参数两者。图6示出根据本公开的实施例的用于对包括多个模块的片上系统(例如片上系统200和300)进行后仿真的方法600。其中片上系统包括多个模块。图6中所示的方法结合了图4中自定义子系统的配置以及图5中目标版本的后仿真文件的选择。在步骤S31中,根据仿真命令在仿真平台中配置待后仿真的自定义子系统。其中所述自定义子系统可以包括所述多个模块中的至少一个模块。可以根据应用场景、后仿真效率或者其他需求进行自定义子系统的配置。在一个实施例中,步骤S31可以包括根据仿真命令中的子系统参数生成用于定义所述自定义子系统的子系统代码;以及根据所述子系统代码确定所述自定义子系统所包括的目标模块。其中所述子系统参数已经提前定义在仿真平台中。验证工程师或者其他用户可以直接通过根据应用场景以及仿真效率需求等在仿真命令中输入相应子系统参数,仿真平台就可以确定待后仿真的自定义子系统所包括的目标模块。

在步骤S32中,将所述片上系统的除了所述自定义子系统之外的其他模块用空壳文件替代,因为在当前后仿真中,用户不关注这些其他模块。在图2中所示的自定义子系统A的情况下,将模块203-206用空壳文件替代。如此可以实现仅仅对所述自定义子系统所包括的目标模块进行后仿真,从而大大节省后仿真时间。

在步骤S33中,根据仿真命令确定所述自定义子系统的后仿真文件。仿真平台支持片上系统的多个版本的后仿真文件。在一个实施例中,步骤S33可以包括根据仿真命令中的版本参数指定目标版本的后仿真文件;以及根据所述子系统代码来从所述目标版本的后仿真文件中提取所述自定义子系统的后仿真文件。仿真平台可以根据仿真命令中的版本参数生成用于定义所述目标版本的后仿真文件的信息的版本代码,然后根据所述版本代码来从所述多个版本的后仿真文件中选择所述目标版本的后仿真文件。其中,所述多个版本的后仿真文件包括在所述片上系统的不同设计阶段、由不同的人员开发或者基于不同的工艺角产生的不同版本的后仿真文件。并且所述后仿真文件包括网表、标准延迟格式文件以及标准单元库。在其他实施例中,后仿真文件还可以包括存储器(memory)的库文件。后仿真文件是否包括存储器的库文件取决于片上系统设计和后仿真的需要,例如片上系统设计是否用到存储器以及存储器的库文件在片上系统的开发过程中是否发生变化等。

在步骤S34中,基于所述后仿真文件对所述自定义子系统进行后仿真。如此实现了根据仿真命令中的子系统参数和版本参数来配置自定义子系统并对自定义的子系统进行后仿真。这样,可以通过同时传递两种参数到仿真平台,自动控制片上系统后仿真文件的版本选择,并选择待真正进行后仿真的自定义子系统及其所包括的目标模块。因此可以在同一仿真平台上实现不同版本的后仿真文件的切换以及自定义子系统的灵活的后仿真验证。这可以进一步提升后仿真的效率。

本公开提及的后仿真文件包括网表、标准延迟格式(SDF)文件以及标准单元库。在一些实施例中,后仿真文件还可以包括存储器的库文件。其中网表可以是对片上系统进行逻辑综合之后得到的网表,也可以是带有对标准延迟格式文件反标后的时序信息的网表。标准延迟格式(SDF)文件可以是与综合后的网表相对应的标准延迟格式文件。也可以是在对片上系统进行后端布局布线之后经过提取寄生参数再计算得到的标准延迟格式文件。标准延迟格式文件把布局布线过程中器件延迟和线延迟的信息保留下来,据此可以在路径时序分析时将整条路径的时序计算出来。在标准延迟格式文件中可以指定固有延迟、互连延迟、端口延迟、时序检查、时序约束、和路径脉冲等。

在对自定义子系统进行后仿真时,可以首先将布局布线后得到的标准延迟格式文件反标到对应的网表中以得到带有反标的时序信息的网表,从而对该网表进行后仿真。在对标准延迟格式文件进行反标的过程中会报告许多错误或者警告。根据本公开的后仿真的方法和仿真平台还可以实现对任意自定义子系统所包括的目标模块的标准延迟格式文件进行反标时出现的SDF反标日志的自动分析,把反标过程中报告出的错误进行归类以将相同类型的错误输出到同一文件中,同时提供与所述错误中的每一个错误相关的信息;和/或把反标过程中报告出的警告自动进行归类,使得相同类型的警告被输出到同一文件中,并提供与每一个警告相关的信息,从而提升SDF反标分析和确认的效率。

此外,在对片上系统进行时序后仿真中,报告的结果中有相当一部分都是时序违例(Timing Violation)。所谓的时序违例是指违反了建立时间或者保持时间,使得采样时钟不能够采集到数据的情况。验证工程师需要花费很多精力去分析这些时序违例是否是真正的时序问题导致的。根据本公开的方法还能够实现对任意自定义子系统后仿真中出现的时序违例自动化地进行过滤和分析。在一个实施例中,可以设置时间点和关键字,以从后仿真过程中报告的时序违例中自动过滤掉该时间点之前的时序违例以及包括该关键字的时序违例。再把过滤后剩余的时序违例按照时间排序或者按照路径分组以分别输出到两个文件中,并提供每一个时序违例相关的信息,从而提高时序违例分析和确认的效率。时间点可以是自定义子系统的目标模块时钟异步复位的时间点。关键字可以是任何数字、字母或者正则表达式,例如“DFT”。

对于大规模或者超大规模集成电路片上系统的设计而言,由于片上系统中包括的模块和连线繁多。经过布局布线之后得到的SDF文件与网表不一定完全对应。在对自定义子系统进行后仿真时,例如在后仿真的初期,可以例如在波形窗口中、也可以直接比较自定义子系统的目标模块所包括的元器件和路径的实际延迟量与相应标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估自定义子系统的后仿真的准确性,并把握后仿真的进程。

要指出的是,虽然图4、图5和图6中用箭头来连接各个后仿真的步骤,但是这仅仅是示意性的。实际上,这些后仿真步骤之间的顺序可以互换,只要与本公开的原理不相违背即可。还要指出的是,虽然本公开中基于集成电路片上系统的后仿真来展开,然而本公开公开的方法不限于应用到集成电路片上系统中。相反,本公开公开的方法可以经过简单的适应性调整而应用于任何形态为集成电路芯片的产品上,例如可以应用于片上网络(NOC)或包括一个或多个功能模块的其他芯片上。另外,本公开中阐述的方法也可以以程序指令的形式被存储在计算机可读存储介质中,并且当所述程序指令在一个或多个处理器上被执行时使得所述一个或多个处理器执行根据本公开的用于对片上系统进行后仿真的方法。

图7示出根据本公开的实施例的用于对片上系统进行后仿真的仿真平台700。其中所述片上系统包括多个模块。仿真平台700中的各个单元可以分别被配置成实施根据本公开的实施例的方法。在一个实施例中,仿真平台700中可以包括子系统配置单元701、虚设(dummy)单元702、后仿真文件确定单元703以及后仿真单元704。其中子系统配置单元701用于根据仿真命令在所述仿真平台中配置待后仿真的自定义子系统。虚设单元702用于将所述片上系统的除了所述自定义子系统之外的其他模块用空壳文件替代。后仿真文件确定单元703用于根据仿真命令确定所述自定义子系统的后仿真文件。后仿真单元704用于基于所述后仿真文件对所述自定义子系统进行后仿真。

子系统配置单元701包括子系统定义单元705和目标模块确定单元706。其中子系统定义单元705用于根据仿真命令中的子系统参数生成用于定义所述自定义子系统的子系统代码。所述目标模块确定单元706用于根据所述子系统代码确定所述自定义子系统所包括的目标模块。本公开提出的仿真平台支持片上系统的多个版本的后仿真文件。所述后仿真文件确定单元703包括版本指定单元707和后仿真文件提取单元708。所述版本指定单元707用于根据仿真命令中的版本参数指定目标版本的后仿真文件。所述后仿真文件提取单元708用于根据所述子系统代码来从所述目标版本的后仿真文件中提取所述自定义子系统的后仿真文件。所述版本指定单元707可以包括版本定义单元709和版本选择单元710。其中所述版本定义单元709用于根据仿真命令中的版本参数生成用于定义所述目标版本的后仿真文件的信息的版本代码。所述版本选择单元710用于根据所述版本代码来从所述多个版本的后仿真文件中选择所述目标版本的后仿真文件。仿真平台700还可以包括其他单元,例如反标单元711、反标后处理单元712、评估单元713以及时序违例处理单元714。其中反标单元711用于对自定义子系统的后仿真文件中的标准延迟格式文件进行反标以获得带有反标后的时序信息的网表。反标后处理单元712用于对反标过程中报告的错误进行归类以将相同类型的错误输出到同一文件中,同时提供与所述错误中的每一个错误相关的信息;以及对反标过程中报告的警告进行归类以将相同类型的警告输出到同一文件中,同时提供与所述警告中的每一个警告相关的信息。评估单元713用于在对所述自定义子系统进行后仿真时,比较所述自定义子系统的目标模块所包括的特定元器件和路径上的实际延迟量与标准延迟格式文件中记录的对应元器件和对应路径的延迟信息,以评估所述自定义子系统的后仿真的准确性,便于用户或者验证工程师把握仿真进度。时序违例处理单元714用于设置时间点和关键字,以从后仿真报告的时序违例中过滤掉所述时间点之前的时序违例以及包括所述关键字的时序违例;以及将过滤之后剩余的时序违例按照时间排序以及按照路径分组并分别输出到两个文件中,同时提供与剩余的时序违例中的每一个时序违例相关的信息。

在一个实施例中,图7示出的仿真平台700还可以包括存储单元715,例如用于存储片上系统的多个版本的后仿真文件。替代地,也可以不包括存储单元715,而将片上系统的多个版本的后仿真文件存储在远程存储器中或者存储在云端。在其他实施例中,仿真平台700还可以包括其他未被示出的单元,例如仿真命令输入单元、自动布局布线单元、标准延迟格式(SDF)文件生成单元等等。图7中示出的仿真平台700仅仅是示意性的,没有示出各个单元之间详细的交互。另外,仿真平台700的一些单元可以组合在一起或者拆分成多个单元,只要与本公开阐述的原理不相违背即可。此外,仿真平台700可以被配置成软件产品、硬件装置或者固件。仿真平台700可以是EDA工具厂商提供的,也可以是用户根据需要自己开发定制的。要指出的是,虽然对应于图6中示出的用于后仿真的方法来说明图7中的仿真平台所包括的各个单元的功能。然而,图7中的仿真平台还可以用于实施结合图4和图5公开的用于后仿真的方法。

图8示出根据本公开的实施例的计算设备800。计算设备800可以包括根据本公开的实施例的如上文中所阐述的仿真平台。计算设备800还包括但不限于处理器、至少一个通信电路、存储装置、显示屏、相机、芯片集、电池、天线以及I/O子系统等。其中处理器可以是能够处理来自寄存器和/或存储装置的电子数据以将该电子数据变换成可以被存储在寄存器和/或存储装置中的其他电子数据的任何设备或设备的部分。处理器可以是中央处理器(CPU),其一部分,或者可以是多核CPU。通信电路可以用于通过计算设备中的天线或者无线地将数据从计算设备800传递给外部组件,或者将来自外部的数据传递到计算设备800。通信电路可以实现现有的以及未来开发的无线通信标准或协议中的任一个。此外,计算设备800中可以包括多个通信电路。其中的一些专用于较短程通信,而另一些专用于较长程通信。存储装置可以是适合永久或者临时存储数据的任何装置,例如易失性存储器(例如DRAM)、非易失性存储器(例如ROM)、闪速存储器等。计算设备800还可以包括存储器控制器(虽然在图8中没有示出),用于控制存储装置的操作。计算设备800中的显示屏幕可以是任何能够显示图形或者视频的屏幕,例如触摸屏。计算设备800内的I/O子系统可以用于连接计算设备800内部的各个组件或者用于将计算设备800与其外部的组件连接。计算设备800内的芯片集可以包括任何其他组件,包括但不限于数字信号处理器、密码处理器、触摸屏控制器、功率放大器、GPS系统、图形处理单元等。计算设备800可以是移动端(例如智能手机)内的计算设备,或者可以是桌面型或者工作站中的计算设备。

应当理解,为了清楚起见,参考不同的功能单元对本公开的实施例进行了描述。显然,在不偏离本公开的情况下,每个功能单元的功能可以被实现在单个单元中、实现在多个单元中、或作为其他功能单元的一部分来实现。因此,本公开可以被实施在单个单元中,或者可以在物理上和功能上被分布在不同的单元和电路之间。

应当理解的是,尽管第一、第二、第三等术语在本文中可以用来描述各种设备、元件、部件或阶段,但是这些设备、元件、部件或阶段不应当由这些术语所限制。这些术语仅用来将一个设备、元件、部件或阶段与另一个设备、元件、部件或阶段相区分。

尽管已经结合一些实施例描述了本公开,但是其不意图被限于在本文中所阐述的特定形式。相反地,本公开的范围仅由所附权利要求来限制。另外,尽管单独的特征可以被包括在不同的权利要求中,但是这些特征可以组合。特征在权利要求中的次序不暗示特征必须以其工作的任何特定次序。此外,在权利要求中,词语“包括”不排除其他元件,并且术语“一”不排除多个。

相关技术
  • 一种片上系统架构性能仿真平台
  • 用于对片上系统进行后仿真的方法和仿真平台
  • 用于对片上系统进行后仿真的方法和仿真平台
技术分类

06120116339468