CN117709294B - 集成电路的约束验证方法、装置、电子设备、介质及产品 - Google Patents
集成电路的约束验证方法、装置、电子设备、介质及产品 Download PDFInfo
- Publication number
- CN117709294B CN117709294B CN202410160714.2A CN202410160714A CN117709294B CN 117709294 B CN117709294 B CN 117709294B CN 202410160714 A CN202410160714 A CN 202410160714A CN 117709294 B CN117709294 B CN 117709294B
- Authority
- CN
- China
- Prior art keywords
- constraint
- design
- command
- instance
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012795 verification Methods 0.000 title claims abstract description 144
- 238000000034 method Methods 0.000 title claims abstract description 131
- 238000013461 design Methods 0.000 claims abstract description 453
- 238000004364 calculation method Methods 0.000 claims abstract description 91
- 230000004044 response Effects 0.000 claims description 78
- 230000008569 process Effects 0.000 claims description 55
- 238000012942 design verification Methods 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 9
- 230000000875 corresponding effect Effects 0.000 description 27
- 238000001514 detection method Methods 0.000 description 17
- 238000005516 engineering process Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000011960 computer-aided design Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000013178 mathematical model Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Abstract
本申请属于集成电路设计技术领域,并且提出了集成电路的约束验证方法、装置、电子设备、介质及产品,所述集成电路的约束验证方法包括:获取待验证电路的设计文件以及约束验证命令;基于所述约束命令,对所述设计文件中的各约束对象的设计约束进行配置,并且将配置得到的约束数据设置为只读状态;在所述约束数据的约束下,根据所述计算命令,对所述设计文件进行验证计算,得到所述待验证电路在设计约束下的验证结果。本申请可以解决多线程调用约束导致计算耗时大、设计效率低的问题,可以实现单线程的约束数据配置,避免多线程计算中频繁访问约束数据且对约束对象层层递归地查询约束的问题,节约计算消耗,提升调用效率,提高验证计算的效率。
Description
技术领域
本申请涉及集成电路设计技术领域,尤其涉及一种集成电路的约束验证方法、装置、电子设备、介质及产品。
背景技术
随着制造技术和设计技术的进步,电子系统的约束验证方法发生了深刻的变革,从电子计算机辅助设计(Computer Aided Design,CAD)、电子计算机辅助工程(ComputerAided Engineering,CAE)到电子设计自动化(Electronic Design Automation,EDA),设计的自动化程度越来越高,设计的复杂性也越来越强。
集成电路EDA是指利用计算机辅助设计软件,来完成超大规模集成电路芯片的功能设计、综合、验证、物理设计(例如包括布局、布线、版图、设计规则检查等)等流程的设计方式。EDA技术已逐渐成为现代电子设计的有力工具,没有EDA技术的支持,要完成超大规模集成电路的设计和制造是不可想象的,集成电路设计人员需要使用EDA工具设计几十万到数百亿晶体管的复杂集成电路,以减少设计偏差、提高流片成功率及节省流片费用。
在集成电路EDA工具的设计过程中,需要根据用户约束设计来计算出基于当前约束的结果。约束设计例如可以包含时钟约束、UPF(Unified Power Format,统一电源格式或统一低功耗设计格式)约束或者一些自定义约束(例如工艺库约束、电压约束)等,以用于设置各种类型的约束值。
在相关技术中,为了在复杂集成电路的海量多层级数据中访问到目标约束数据,EDA工具会在多层级的数据结构中一层一层地递归查询,其访问过程通常是多线程的,以通过并行计算来提高处理效率,其计算规模相当复杂,并且为了避免数据错误的情况发生,在并行计算的过程中通常涉及大量的加解锁操作或原子操作,这就导致了大量、高频的层层约束调用,使得计算链路较长,计算耗时增大,设计效率降低。
发明内容
本申请提供一种集成电路的约束验证方法、装置、电子设备、介质及产品,以至少解决相关技术中多线程调用约束导致计算耗时大、设计效率低的问题。本申请的技术方案如下:
根据本申请的第一方面,提供一种集成电路的约束验证方法,所述集成电路的约束验证方法包括:获取待验证电路的设计文件以及约束验证命令,其中,所述约束验证命令包括约束命令和计算命令,所述约束命令用于给定在集成电路设计验证过程中的设计约束,所述计算命令用于给定在集成电路设计验证过程中需要执行的验证计算;基于所述约束命令,对所述设计文件中的各约束对象的设计约束进行配置,并且将配置得到的约束数据设置为只读状态;在所述约束数据的约束下,根据所述计算命令,对所述设计文件进行验证计算,得到所述待验证电路在设计约束下的验证结果。
根据本申请的第二方面,提供一种集成电路的约束验证装置,所述集成电路的约束验证装置包括:获取单元,被配置为获取待验证电路的设计文件以及约束验证命令,其中,所述约束验证命令包括约束命令和计算命令,所述约束命令用于给定在集成电路设计验证过程中的设计约束,所述计算命令用于给定在集成电路设计验证过程中需要执行的验证计算;配置单元,被配置为基于所述约束命令,对所述设计文件中的各约束对象的设计约束进行配置,并且将配置得到的约束数据设置为只读状态;计算单元,被配置为在所述约束数据的约束下,根据所述计算命令,对所述设计文件进行验证计算,得到所述待验证电路在设计约束下的验证结果。
根据本申请的第三方面,提供一种电子设备,所述电子设备包括:处理器;用于存储处理器可执行指令的存储器,其中,所述处理器可执行指令在被所述处理器运行时,促使所述处理器执行根据本申请所述的集成电路的约束验证方法。
根据本申请的第四方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行根据本申请所述的集成电路的约束验证方法。
根据本申请的第五方面,提供一种计算机程序产品,包括计算机指令,所述计算机指令被处理器执行时实现根据本申请所述的集成电路的约束验证方法。
本申请提供的技术方案至少带来以下有益效果:
本申请的技术方案可以先基于约束命令,对待验证电路的设计文件中的各约束对象的设计约束进行配置,并且可以将配置后的约束数据设置为只读状态,从而可以在这样的约束数据的约束下,根据计算命令,对设计文件进行验证计算,得到待验证电路在设计约束下的验证结果,如此,可以实现单线程的约束数据配置,并且在计算过程中使约束数据处于只读状态,不会再修改或更新约束数据,可以避免多线程计算中频繁访问约束数据并且需要对约束对象层层递归地查询约束的问题,可以节约在处理约束数据上的计算消耗,提升约束的调用效率,从而提高验证计算的效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理,并不构成对本申请的不当限定。
图1是根据本申请的示例性实施例示出的约束验证方法的示意性流程图。
图2是根据本申请的示例性实施例示出的约束验证方法中对设计约束进行配置的步骤的示意性流程图。
图3是根据本申请的示例性实施例示出的约束验证方法中确定优先级规则的步骤的示意性流程图。
图4是根据本申请的示例性实施例示出的约束验证方法中确定当前命令与其他命令之间是否存在冲突的步骤的示意性流程图。
图5是根据本申请的示例性实施例示出的约束验证方法中基于状态机来响应约束验证命令的步骤的示意性流程图。
图6是根据本申请的示例性实施例示出的约束验证方法中状态机的运行过程的示意图。
图7是根据本申请的示例性实施例示出的约束验证装置的框图。
图8是根据本申请的示例性实施例示出的电子设备的框图。
具体实施方式
为了使本领域技术人员更好地理解本申请的技术方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与本申请的一些方面相一致的装置和方法的例子。
在此需要说明的是,在本申请中出现的“若干项之中的至少一项”均表示包含“该若干项中的任意一项”、“该若干项中的任意多项的组合”、“该若干项的全体”这三类并列的情况。例如“包括A和B之中的至少一个”即包括如下三种并列的情况:(1)包括A;(2)包括B;(3)包括A和B。又例如“执行步骤一和步骤二之中的至少一个”,即表示如下三种并列的情况:(1)执行步骤一;(2)执行步骤二;(3)执行步骤一和步骤二。
如前所述,在相关技术中,存在多线程调用约束导致计算耗时大、设计效率低的问题。
例如,对于诸如低功耗验证工具的EDA工具而言,需要验证在当前约束设计下各模块、各类型功耗值等,各类型功耗例如是漏电功耗等静态功耗、或者开关功耗、内部功耗等动态功耗。因此,EDA工具的诸如获取电容、进行简单的综合映射(mapping)等各类型计算的接口会频繁调用约束设置接口(该接口专用于设置和获取约束值)。同时,约束设计有一般的固定优先级设定,EDA工具需要根据优先级和约束设计返回正确的约束值。
由于全局数据(global data)可以在程序中任意一个位置访问,因此通常使用全局数据存储所有约束数据,EDA工具在根据当前约束设计更新约束数据时,只需要更新全局数据,速度很快。此外,EDA工具在获取约束值时,可以每次都在全局约束数据中根据优先级进行计算,或者,也可以在首次计算后,将相应的约束数据存储到临时存储数据中以便后续重复使用。
然而,EDA工具在获取约束值时,尽管单次计算耗时很少(例如若干微秒),但是若每次都在全局约束数据中根据优先级进行计算,在计算链路较长(例如涉及上亿次计算)时,会导致高频调用的约束设置接口消耗时间过多。对此,若不采用每次都进行计算的方式,而是在首次计算后,将相应约束数据存储到临时存储变量中以便后续重复使用,则需要相应配套大量加解锁操作或原子操作,并且在更新约束数据时,不仅需要更新全局数据,也需要更新或清理临时存储数据,操作过程复杂,不利于查错。
鉴于上述问题,本申请的示例性实施例提出一种集成电路的约束验证方法、集成电路的约束验证装置、电子设备、计算机可读存储介质及计算机程序产品,其能够解决或至少缓解上述问题。
在本申请的示例性实施例的第一方面,提供一种集成电路的约束验证方法,下面将参照图1至图8进行详细描述。
根据本申请的示例性实施例的集成电路的约束验证方法可以应用于集成电路电子设计自动化软件对待验证电路在设计约束下进行验证的场景,例如,用户终端上可以加载有集成电路电子设计自动化软件。
用户终端可以获取待验证电路的设计文件以及约束验证命令,其中,约束验证命令可以包括约束命令和计算命令,约束命令用于给定在集成电路设计验证过程中的设计约束,计算命令用于给定在集成电路设计验证过程中需要执行的验证计算。
用户终端可以基于约束命令,对设计文件中的各约束对象的设计约束进行配置,并且将配置得到的约束数据设置为只读状态,并且可以在约束数据的约束下,根据计算命令,对设计文件进行验证计算,得到所述待验证电路在设计约束下的验证结果。
根据本申请的示例性实施例的集成电路的约束验证方法,可以实现单线程的约束数据配置,并且在计算过程中使约束数据处于只读状态,不会再修改或更新约束数据,可以避免多线程计算中频繁访问约束数据并且需要对约束对象层层递归地查询约束的问题,可以节约在处理约束数据上的计算消耗,提升约束的调用效率,从而提高验证计算的效率。
上述用户终端可以是诸如平板电脑、笔记本电脑、数字助理、可穿戴设备等,然而,上面约束验证方法的实施场景仅是一示例场景,根据本申请的示例性实施例的约束验证方法还可以应用于其他应用场景,例如也可以是用户在用户终端(例如,手机、台式电脑、平板电脑等)通过网络向服务器生成约束验证请求,并且可以将待验证电路的设计文件以及约束验证命令发送至服务器,服务器可以通过执行根据本申请的示例性实施例的约束验证方法来完成对待验证电路在设计约束下的验证,这里,服务器可以是独立服务器,也可以是服务器集群,还可以是云计算平台或虚拟化中心。
下面将参照图1描述根据本申请的示例性实施例的一种集成电路的约束验证方法的具体步骤。如图1所示,该约束验证方法可以包括以下步骤:
在步骤S110,可以获取待验证电路的设计文件以及约束验证命令。
这里,约束验证命令可以包括约束命令和计算命令。约束命令可以用于给定在集成电路设计验证过程中的设计约束,计算命令可以用于给定在集成电路设计验证过程中需要执行的验证计算。
作为示例,设计约束可以包括但不限于时钟约束、UPF约束或者诸如工艺库约束、电压约束等自定义约束,设计约束可以给定其所针对的约束对象的任意参数的约束值,在验证计算中,可以在这样的设计约束下对待验证的电路进行验证计算。
这里,用户可以通过约束命令指定具体的约束设计等信息,例如,通过自定义约束命令“set_target_library”对约束对象的工艺库进行约束、或者通过自定义约束命令“set_voltage”对约束对象的电压进行约束等。约束对象可以理解为约束命令的执行对象或者约束设计的设置对象,例如为集成电路设计中的模块或实例。待验证电路可以是已设计的集成电路,待验证电路的设计文件例如可以是编写好的HDL(Hardware DescriptionLanguage,硬件描述语言)代码文件。
在步骤S120,可以基于约束命令,对设计文件中的各约束对象的设计约束进行配置,并且将配置得到的约束数据设置为只读状态。
在该步骤中,可以根据约束命令中给定的设计约束,对约束对象的设计约束进行配置,生成或更新约束对象的约束数据,以供后续计算中使用。这里,在约束数据配置完成后,可以将约束数据设置为只读状态,以避免在后续计算中被更新或修改,提高约束数据的调用效率。
这里,基于约束命令对设计文件中的各约束对象的设计约束进行配置的示例过程将在下文中详细描述。
在步骤S130,可以在约束数据的约束下,根据计算命令,对设计文件进行验证计算,得到待验证电路在设计约束下的验证结果。
在该步骤中,在完成设计文件信息的载入和相应约束数据的配置后,即可基于约束数据,根据计算命令进入验证计算的过程,例如功耗计算、低功耗设计检查等,以得到待验证电路在设计约束下的验证结果。如此,可以通过先配置约束数据、再执行计算的方式,提前配置好各层级约束对象的约束数据,在计算过程中无需层层递归查询不同层级对象的设计约束,避免了高频调用的约束数据导致耗时多、操作复杂的问题。
这里,验证计算例如可以指的是对待验证电路中的待验证参数进行计算检查,验证待验证参数是否符合设计约束的要求,以为后续设计或电路调整提供指导。尽管上面给出了验证计算可以为功耗计算、低功耗设计检查等,但是其不限于此,也可以根据实际需要对待验证电路中的感兴趣的参数进行验证,本申请对此不作特别限制。
下面将结合图2至图6详细描述基于约束命令对设计文件中的各约束对象的设计约束进行配置的示例过程。
作为示例,在上述步骤S120中,如图2所示,可以通过以下方式对设计文件中的各约束对象的设计约束进行配置:
在步骤S210,可以确定约束命令在设计文件中的约束对象。
作为示例,约束对象例如可以包括模块、实例等。约束命令中可以指定其设计约束所针对的约束对象。
在步骤S220,可以根据预设的优先级规则和约束命令,配置约束对象的约束数据。
在该步骤中,优先级规则可以指定针对同一约束对象配置不同设计约束的优先级顺序,例如,在针对同一约束对象先后给出多个约束命令的情况下,可以根据优先级顺序来配置约束数据。根据本申请的实施例,优先级规则可以根据实际设计需要而设置。
在一示例中,优先级规则可以基于设计约束的约束来源类型确定,这里,约束来源类型可以包括未定义约束来源类型的第一类型、来自父亲节点(例如上级实例)的第二类型、来自模块的第三类型以及来自实例的第四类型。
在该示例中,优先级规则可以指定以下优先级顺序:第一类型的优先级低于第二类型的优先级,第二类型的优先级低于第三类型的优先级,第三类型的优先级低于第四类型的优先级。这里,约束数据包括对约束对象进行设计的设计约束值以及约束来源类型。这里,约束来源类型也可以认为是“约束粒度”,约束粒度越小,优先级越高。
通过上述方式,可以区分不同的约束来源类型对不同设计约束的优先级进行排序,使得在不同约束命令的设计约束存在冲突的情况下,可以根据约束来源类型,将粒度更小的约束作为最终的约束,确保配置约束数据的准确性。
基于上述示例,替代地或附加地,在另一示例中,优先级规则还可以基于设计约束的时间属性来确定。具体来说,在根据当前的约束命令配置约束对象的约束数据时,该约束对象可以存在初始设计约束,这里,初始设计约束例如可以是在当前的约束命令之前的在先约束命令给定的。
在该示例中,如图3所示,可以通过以下方式确定优先级规则:
在步骤S310,可以在约束对象当前存在第一设计约束的情况下,确定第一设计约束的约束来源类型与当前约束命令的第二设计约束的约束来源类型是否一致。
在步骤S320,可以若第一设计约束的约束来源类型与第二设计约束的约束来源类型一致,则确定第一设计约束与第二设计约束的命令类型是否一致。
在该步骤中,若第一设计约束与第二设计约束的命令类型一致,则确定第二设计约束的优先级高于第一设计约束的优先级;若第一设计约束与第二设计约束的命令类型不一致,则确定第二设计约束的优先级低于第一设计约束的优先级。
在步骤S330,可以若第一设计约束的约束来源类型与第二设计约束的约束来源类型不一致,则按照约束来源类型确定第二设计约束与第一设计约束之间的优先级。
具体来说,针对同一约束对象,可以在不同时间节点给定约束命令,这些先后给定的约束命令的设计约束具有不同的时间属性,可以在考虑各设计约束的时间属性的情况下来判定相应的设计约束的优先级顺序。
例如,如上文参照图3所述,对于相同约束来源类型的设计约束而言,可以根据命令类型来判断优先级顺序,具体来说,在命令类型一致的情况下,可以采用“后来者居上”原则判断优先级顺序,确定在后约束命令的设计约束的优先级高于在先约束命令的设计约束,例如在步骤S320中,在第一设计约束与第二设计约束的命令类型一致的情况下,第二设计约束的优先级高于第一设计约束的优先级。在命令类型不一致的情况下,可以采用“后来者居下”原则判断优先级顺序,确定在后约束命令的设计约束的优先级低于在先约束命令的设计约束,例如在步骤S320中,在第一设计约束与第二设计约束的命令类型不一致的情况下,第二设计约束的优先级低于第一设计约束的优先级。这里,命令类型可以与约束命令所针对的约束对象的参数有关,例如,针对同一对象的不同参数的约束命令可以认为是属于不同的命令类型。
具体来说,每个实例(Instance)和每个模块(Module)可以各自对应有一个约束(Constraint)类指针存储约束数据,该约束数据可以包含约束值和约束来源类型。约束类指针可以默认为空指针,即无任何约束。在约束来源类型相同的情况下,对于相同命令类型的初始优先级的约束,后来者的最终优先级可以更高;对于不同命令类型的初始优先级的约束,后来者的最终优先级可以更低。
对于不同约束来源类型的设计约束而言,在步骤S330中,可以按照约束来源类型确定第二设计约束与第一设计约束之间的优先级,例如,如上面的示例中所描述的,第一类型的优先级低于第二类型的优先级,第二类型的优先级低于第三类型的优先级,第三类型的优先级低于第四类型的优先级,该示例已在上文中详细描述,在此不再赘述。
在该示例中,当初次为实例或者模块设置约束数据时,创建一个对应的约束类,并且将约束类中的约束来源类型初始化为未定义约束来源类型;实例对应的约束来源类型支持上述4种,即未定义约束来源类型、来自父亲节点(例如上级实例)的类型、来自模块的类型以及来自实例的类型,模块对应的约束来源类型只支持未定义约束来源类型和来自模块的类型。这将在后文中结合模块和实例的约束数据的具体配置过程详细描述。
根据本申请的实施例,考虑不同设计约束的时间属性的原因在于:在实际的电路设计和验证过程中,通常会对同一设计进行多次约束验证处理,在多次处理的过程中可能会产生一些错误,使得在先处理与在后处理的约束设计之间产生冲突。对此,通过采用上述方法,可以考虑设计约束的时间属性来进行约束取舍,这使得对于同一约束对象而言,在当前约束命令与在先约束命令各自指示的约束粒度(或者说约束来源类型)不同的情况下,优先考虑在先约束命令,避免了当前约束命令与在先约束命令之间可能存在的冲突,有效保证了约束设计的稳定性,提高了验证结果的可靠度。
在步骤S230,可以基于约束对象的约束数据,配置设计文件中与约束对象相关联的关联对象的约束数据。
具体来说,在设计文件中,不同约束对象之间可能存在一定的关联性,例如模块与基于模块实例化得到的实例、父亲实例与儿子实例等,在某约束对象的约束数据被更新后,可以进一步对与其相关联的关联对象的约束数据进行更新。如此,可以响应于约束命令,对设计文件中的各约束对象及相关的关联对象进行全面的设计约束配置,以使得无需在后续的验证计算过程中层层递归地处理不同层级或不同模块内的对象的约束数据,简化验证计算的过程,提高验证效率。
下面将分别以约束对象为模块和实例为例对配置约束数据的过程进行示例描述。
在一示例中,约束对象可以包括模块,在该示例中,可以通过以下方式配置约束对象的约束数据:响应于模块当前不存在设计约束,为模块创建设计约束,并且基于约束命令,配置模块的约束数据;响应于模块当前存在设计约束,利用约束命令中的约束数据更新模块当前的约束数据。
例如,假设存在约束对象为模块m1,针对其的约束命令的类型为A,约束值为A1,约束来源类型为来自模块的类型T2(即,针对模块本身的约束类型)。
响应于接收到该约束命令,可以对模块m1的约束数据进行配置。在配置过程中,可以先检测模块m1当前是否存在设计约束(也可以称为初始设计约束)。
若模块m1当前无设计约束,可以为模块m1创建对应的约束类,并且可以基于当前接收的约束命令,配置模块m1的约束数据,例如可以将模块m1的约束值为A1,并且将该设计约束的约束来源类型设置为T2。
若模块m1当前有设计约束,可以直接利用约束命令中的约束数据更新模块当前的约束数据,例如可以将模块m1的约束值直接更新为A1,将该设计约束的约束来源类型设置为T2。
在上述过程中,如上文中提到的,对于模块而言,其所对应的约束来源类型只支持未定义约束来源类型和来自模块的类型,因此即使在模块存在设计约束的情况下,其当前接收到的约束命令中的设计约束的优先级也与其已存在的设计约束的优先级相同,即均为来自模块的类型,因此,可以直接利用当前的约束命令进行约束数据的更新,而无需具体比较二者的优先级,从而可以简化约束数据的配置过程,提高配置效率。
在约束对象包括模块的情况下,还可以对与模块相关联的关联对象的约束数据进行配置。这里,关联对象可以包括通过对模块实例化得到的关联实例,在该示例中,可以通过以下方式配置关联对象的约束数据:响应于关联实例当前不存在设计约束,为关联实例创建设计约束,并且将模块的约束数据作为关联实例的约束数据;响应于关联实例当前存在设计约束,通过比较关联实例当前的设计约束与约束命令中的设计约束的优先级,配置关联对象的约束数据。
这里,可以响应于关联实例当前的设计约束的优先级高于约束命令中的设计约束的优先级,保持关联实例的约束数据不变;可以响应于关联实例当前的设计约束的优先级低于约束命令中的设计约束的优先级,利用约束命令中的约束数据更新关联实例当前的约束数据。
以上述作为约束对象的模块m1为例,可以查找模块m1所有的例化关联实例,以对每个关联实例的约束数据进行配置。
具体来说,以任一关联实例I_m1为例,若关联实例I_m1无设计约束,可以为该关联实例I_m1创建对应的约束类,并且将模块的约束数据作为关联实例的约束数据,例如可以将该关联实例I_m1的约束值设置为A1,将该关联实例I_m1的设计约束的约束来源类型设置为T2。
若关联实例I_m1已有设计约束,并且该设计约束的约束来源类型为T_inst,若类型T_inst的优先级高于类型T2,则跳过对该关联实例I_m1的约束数据的配置;若类型T_inst的优先级低于或等于类型T2,则可以更新该关联实例I_m1的约束值为A1和约束来源类型为T2。可以通过这样的方式对模块m1的每个关联实例进行约束数据配置。
通过上述方式,可以在配置模块的约束数据的基础上进一步对基于模块实例化得到的实例的约束数据进行更新,从而可以响应于约束命令,在执行验证计算之前,完成对模块及相关的关联对象的设计约束配置,使得在后续验证计算中可以直接调用各对象相应的约束数据,提高验证计算的速度。
在另一示例中,约束对象可以包括实例,在该示例中,可以通过以下方式配置约束对象的约束数据:响应于实例当前不存在设计约束,为实例创建设计约束,并且基于约束命令,配置实例的约束数据;响应于实例当前存在设计约束,通过比较实例当前的设计约束与约束命令中的设计约束的优先级,配置实例的约束数据。
这里,响应于实例当前的设计约束的优先级高于约束命令中的设计约束的优先级,保持实例的约束数据不变;响应于实例当前的设计约束的优先级低于约束命令中的设计约束的优先级,利用约束命令中的约束数据更新实例的约束数据。
例如,假设存在约束对象为实例I1,针对其的约束命令的类型为B,约束值为B1,约束来源类型为来自实例的类型T3(即,针对实例本身的约束类型)。
响应于接收到该约束命令,可以对实例I1的约束数据进行配置。在配置过程中,可以先检测实例I1当前是否存在设计约束(也可以称为初始设计约束)。
若实例I1当前无设计约束,可以为实例I1创建对应的约束类,并且可以基于当前接收的约束命令,配置实例I1的约束数据,例如可以将实例I1的约束值为B1,并且将该设计约束的约束来源类型设置为T3。
若实例I1当前有设计约束,可以比较实例当前的设计约束与约束命令中的设计约束的优先级,配置实例的约束数据。这里,若实例I1当前的设计约束的优先级高于约束命令中的设计约束的优先级,可以保持实例的约束数据不变;若实例I1当前的设计约束的优先级低于或等于约束命令中的设计约束的优先级,可以利用约束命令中的约束数据更新实例的约束数据。
在上述示例中,由于约束命令中的设计约束的约束来源类型设置为T3,实例I1当前的设计约束的优先级必然低于或等于约束命令中的设计约束的优先级,因此可以直接利用约束命令中的约束数据更新模块当前的约束数据,例如可以将实例I1的约束值直接更新为B1,将该设计约束的约束来源类型设置为T3。
在上述过程中,如上文中提到的,对于实例而言,其所对应的约束来源类型支持4种类型,即未定义约束来源类型、来自父亲节点(例如上级实例)的类型、来自模块的类型以及来自实例的类型,因此在实例存在设计约束的情况下,可以对当前接收到的约束命令中的设计约束的优先级与已存在的设计约束的优先级进行比较,以根据比较结果进行约束数据配置,从而可以实现更准确的约束数据配置。
在上述两个示例中,均涉及对实例的约束数据的配置,例如通过约束命令直接对实例进行约束数据配置或者根据模块的约束命令对其相关的关联实例进行约束数据配置,在这些示例中,基于对实例的约束数据的配置,可以进一步对该示例的子孙实例进行约束数据配置。
具体来说,若实例不是叶子节点,则可以迭代查找该实例下的所有儿子节点,根据优先级规则决定是否更新当前实例下所有子孙的约束数据,例如可以层层更新每个实例的儿子实例。例如,根据本申请的实施例的约束验证方法还可以包括:响应于当前实例的约束数据被更新,确定当前实例的儿子实例;响应于儿子实例当前不存在设计约束,为儿子实例创建设计约束,并且将当前实例的更新后的约束数据作为儿子实例的约束数据;响应于儿子实例当前存在设计约束,通过比较儿子实例当前的设计约束与当前实例的更新后的设计约束的优先级,配置儿子实例的约束数据。
这里,可以响应于儿子实例当前的设计约束的优先级高于当前实例的更新后的设计约束的优先级,保持儿子实例以及儿子实例的后裔的约束数据不变;可以响应于儿子实例当前的设计约束的优先级低于或等于当前实例的更新后的设计约束的优先级,利用当前实例的更新后的约束数据更新儿子实例的约束数据以及儿子实例的后裔的约束数据。
以上述作为约束对象的实例I1(或关联实例I_m1)为例,在该实例I1(或关联实例I_m1)的约束数据被更新的情况下,可以查找该实例的儿子实例I2。若其儿子实例I2当前不存在设计约束,可以为儿子实例I2创建设计约束,并且将实例I1(或关联实例I_m1)的更新后的约束数据作为儿子实例I2的约束数据;响应于儿子实例I2当前存在设计约束,在一种实现中,可以比较儿子实例I2当前的设计约束与实例I1(或关联实例I_m1)的更新后的设计约束的优先级,配置儿子实例I2的约束数据。
这里,若儿子实例I2当前的设计约束的约束来源类型T_child的优先级高于实例I1(或关联实例I_m1)的更新后的设计约束的约束来源类型的优先级(例如实例I1的更新后的设计约束的约束来源类型T3的优先级、或关联实例I_m1的更新后的设计约束的约束来源类型T2的优先级),可以保持儿子实例I2以及儿子实例I2的后裔的约束数据不变,即放弃对儿子实例I2以及儿子实例I2的后裔的约束配置。若儿子实例I2当前的设计约束的约束来源类型T_child的优先级低于或等于实例I1(或关联实例I_m1)的更新后的设计约束的优先级,可以利用实例I1(或关联实例I_m1)的更新后的约束数据更新儿子实例I2的约束数据以及儿子实例I2的后裔的约束数据,例如,对于实例I1,可以更新儿子实例I2的约束值为B1、约束来源类型为来自父亲节点的类型T1。
或者,在另一种实现中,可以直接将儿子实例I2当前的设计约束的约束来源类型T_child的优先级与T1的优先级进行比较,若儿子实例I2当前的设计约束的约束来源类型T_child的优先级高于T1的优先级,可以保持儿子实例I2以及儿子实例I2的后裔的约束数据不变;若儿子实例I2当前的设计约束的约束来源类型T_child的优先级低于或等于T1的优先级,对于实例I1而言,可以更新儿子实例I2的约束值为B1、约束来源类型为T1。
这里,可以迭代更新实例I1(或关联实例I_m1)下的所有子孙的约束数据,例如在更新儿子实例I2后,可以继续更新儿子实例I2的儿子实例,依次列推,直至实例I1(或关联实例I_m1)下的所有子孙实例的约束数据被配置完成。
在上述示例中,可以在配置实例的约束数据的基础上进一步对其所有子孙实例的约束数据进行更新,从而可以响应于约束命令,在执行验证计算之前,完成对实例及其后裔的设计约束配置,使得在后续验证计算中可以直接调用各对象相应的约束数据,提高验证计算的速度。
上面描述了对于一个约束对象执行单个约束命令的过程,然而本申请的实施例不限于此,约束命令也可以包括针对同一约束对象的多个命令。
在一示例中,可以根据优先级规则,比较多个命令之间的优先级,若当前命令的优先级高于其他任一命令,则可以继续执行针对当前命令的约束数据配置;若当前命令的优先级低于或等于该其他任一命令,则可以对当前命令与该其他任一命令进行冲突检测,以根据冲突检测的结果,执行针对当前命令的约束数据配置。这里,冲突检测可以用于判断同一约束对象的不同设计约束之间是否存在冲突。
附加地或替代地,在另一示例中,在约束命令包括针对同一约束对象的多个命令的示例中,如图4所示,集成电路的约束验证方法还可以包括以下步骤:
在步骤S410,可以在根据预设的优先级规则和约束命令中的每个命令,配置约束对象的约束数据之前,基于预设的冲突判断规则,判断当前命令与其他命令之间是否存在冲突。
在步骤S420,可以响应于当前命令与其他命令之间不存在冲突,基于优先级规则和当前命令,配置约束对象的约束数据。
在步骤S430,可以响应于当前命令与其他命令之间存在冲突,放弃基于当前命令对约束对象的约束数据的配置。
这里,冲突判断规则可以指定约束对象的不同设计约束之间需满足的关系。
具体来说,在接收到针对同一对象的多个约束命令的情况下,若这些约束命令的设计约束之间无关联关系,即在执行这些约束命令中的任一约束命令时,无需考虑这些约束命令中的其他约束命令,则可以基于上面描述的过程,逐一执行各个约束命令。若这些约束命令的设计约束之间存在关联关系,例如在执行这些约束命令中的任一约束命令时,需要考虑这些约束命令中的其他约束命令的设计约束,则需要先判断这些设计约束之间是否存在冲突,在无冲突的情况下,执行约束命令;在存在冲突的情况下,可以放弃对约束命令的执行。
在接收到针对同一对象的多个约束命的情况下,可以先基于冲突判断规则,检测这些约束命令之间是否有错误或者冲突,若检测未通过,可以放弃本次约束数据的更新,并提示原因;若检测通过,可以正常配置约束数据,例如可以基于上面描述的过程,逐一执行各个约束命令。这里,冲突判断规则可以是根据实际需要而预先设定的,在执行该约束验证方法时可以直接调用。
例如,假设对于某约束对象,可以接收到三个约束命令A、B和C,其可以分别对约束对象的三种参数进行约束,例如可以指定约束对象的长度、宽度和高度等,用户在约束命令中可以分别给出对这三种参数的取值的约束,例如长度、宽度和高度各自的取值等。对于这三方面设计约束,可以预先设定冲突判断规则,例如:当约束命令A的取值为A1时,约束命令B的可取值为B2,约束命令C的可取值为C1;当约束命令A的取值为A2时,约束命令B的可取值为B1或B2,约束命令C的可取值为C2。
基于上述冲突判断规则,在接收到三个约束命令A、B和C后,可以判断各约束命令中的取值是否满足冲突判断规则,若满足,则可以继续执行对约束数据的配置,例如可以基于上面描述的过程,逐一执行各个约束命令;若不满足,则可以放弃对约束数据的配置。
作为示例,多个命令分别可以指定针对约束对象的不同参数设置的约束值,冲突判断规则可以指定约束对象的各参数之间需满足的取值关系,在该示例中,可以通过以下方式判断当前命令与其他命令之间是否存在冲突:基于冲突判断规则,确定与第一参数的约束值满足取值关系的第二参数的第一取值范围;响应于任意其他命令所指定的第二参数的约束值在第一取值范围内,确定当前命令与任意其他命令之间不存在冲突;响应于任意其他命令所指定的第二参数的约束值不在第一取值范围内,确定当前命令与任意其他命令之间存在冲突。
这里,第一参数可以为当前命令所针对的参数,第二参数可以为任意其他命令所针对的参数。此外,本文所述的取值范围(例如这里所述的第一取值范围以及将在下文中描述的第二取值范围)可以理解为参数的可取值范围或者可取值集合,其可以是一个连续的范围,例如,约束对象的某参数n的取值范围可以为[1,3](即,n可以取大于1、小于3的任意值),或者约束对象的某参数n的取值范围可以为{1,3}(即,n可以取1或3)。
作为示例,假设对于某约束对象接收到三个约束命令A、B和C,约束命令A、B和C中指定的约束值分别为A1、B1和C1。以当前命令为命令A为例,第一参数的约束值为A1,第二参数可以为两个,分别由约束命令B和C给定约束值,即约束值B1和约束值C1。对此,可以基于上文中描述的冲突判断规则(即,当约束命令A的取值为A1时,约束命令B的可取值为B2,约束命令C的可取值为C1),确定与第一参数的约束值A1满足取值关系的第二参数的第一取值范围,即约束命令B所针对的第二参数的第一取值范围为B2,约束命令C所针对的第二参数的第一取值范围为C1。由此可见,当前的约束命令B所指定的约束值B1不在相应的第二参数的第一取值范围内,确定当前命令A与另一命令B之间存在冲突。
仍以上述示例为例,若约束命令A、B和C中指定的约束值分别为A1、B2和C1,则基于上文中描述的冲突判断规则,可以确定当前的约束命令B所指定的约束值B2在相应的第二参数的第一取值范围内,确定当前命令A与另一命令B之间不存在冲突。
通过上述方式,可以在对同一对象设置多个约束命令的情况下根据预设的冲突判断规则对各设计约束进行取舍,以避免由于多个约束命令之间的冲突引起后续验证计算过程中的错误调用,而导致验证结果不准确。
在执行判断当前命令与其他命令之间是否存在冲突的步骤之前,约束验证方法还可以包括:判断针对约束对象的不同参数设置的各约束值是否在预设的第二取值范围内;响应于约束值在相应的第二取值范围内,执行判断当前命令与其他命令之间是否存在冲突的步骤;响应于约束值不在相应的第二取值范围内,退出约束验证方法的执行。
这里,约束对象的每个参数可以对应有相应的第二取值范围,针对约束对象的任一参数设置的第一取值范围小于或等于针对该参数设置的第二取值范围。
具体来说,第二取值范围可以是对根据约束对象的参数的设计需求而设定的,例如约束命令A、B和C所针对的参数的第二取值范围分别可以为{A1, A2}、{B1, B2}和{C1,C2}。在接收到用户输入的约束命令后,可以对约束命令中指定的约束值进行检测,若其在相应的第二取值范围内,则可以继续执行上面描述的冲突判断步骤;若其不在相应的第二取值范围内,例如,用户输入的约束命令A中指定第一参数的约束值为A3,则可以退出当前的约束验证流程,并且可以向用户提示命令错误。
这里,由于第二取值范围是对于参数的所有可选值范围,而第一取值范围是在该第二取值范围的基础上根据冲突判断规则进行的可选值约束,因此,对于同一参数,第一取值范围可以小于或等于第二取值范围,例如以上述约束命令B所针对的参数为例,其第二取值范围可以为{B1, B2},而当约束命令A的取值为A1时,约束命令B的第一取值范围为{B2}。
通过上面的方式,可以对多个约束命令进行一致性检测,从而可以在考虑各约束命令之间的关联性的情况下配置约束数据,避免由于不同参数之间的取值冲突导致后续计算错误。
下面将描述在考虑多个约束命令之间的一致性检测的情况下进行约束数据配置的示例过程。
在一示例中,假设存在约束对象为模块m1,针对其的约束命令的类型为A,约束值为A1,约束来源类型为来自模块的类型T2。
响应于接收到该约束命令,可以对模块m1的约束数据进行配置。在配置过程中,可以检测模块m1当前是否存在设计约束以及检测当前约束命令与其他约束命令之间是否存在冲突。
若模块m1当前无设计约束,可以为模块m1创建对应的约束类,并且可以基于当前接收的约束命令,配置模块m1的约束数据,例如可以将模块m1的约束值设置为A1,并且将该设计约束的约束来源类型设置为T2。
若模块m1当前有设计约束,可以比较当前约束命令A的约束来源类型T2的优先级与模块m1已有设计约束中与当前约束命令不同类型的任一其他约束命令指定的约束来源类型T_other的优先级。若T_other<T2,则可以不检测该其他约束命令指定的约束值与当前约束命令是否存在冲突,进而继续比较与下一个其他约束命令指定的约束来源类型的优先级。
在比较当前约束命令A的约束来源类型T2与任一其他约束命令的约束来源类型T_other的优先级时,若T_other ≥ T2,则可以根据冲突判断规则,检测当前约束命令中指定的约束值A1与该其他约束命令指定的约束值(例如约束命令B中指定的约束值、约束命令C中指定的约束值)的一致性(即是否存在冲突)。若一致性检测未通过,则可以放弃针对该约束命令的约束数据配置,并且打印冲突信息;若一致性检测通过,则可以检测下一个其他约束命令。若与所有其他约束命令之间的一致性检测均通过,则可以基于当前接收的约束命令A,配置模块m1的约束数据。
接下来,还可以查找模块m1实例化得到的所有关联实例,并基于当前约束命令A配置这些关联实例的约束数据。以对关联实例I_m1的约束数据进行配置为例,首先检测关联实例I_m1当前是否存在设计约束。
若关联实例I_m1当前无设计约束,可以为关联实例I_m1创建对应的约束类,并且可以基于当前约束命令A,配置关联实例I_m1的约束数据,例如可以将关联实例I_m1的约束值设置为A1,并且将其约束来源类型设置为T2。
若关联实例I_m1当前有设计约束,则可以比较关联实例I_m1已有设计约束中与当前约束命令同一命令类型的约束命令指定的约束来源类型T_inst与T2之间的优先级。若T_inst>T2,可以放弃对关联实例I_m1及其后裔的约束数据的配置,进而继续检测下一个关联实例当前是否存在设计约束;否则,可以进一步比较关联实例I_m1已有设计约束中与当前约束命令不同命令类型的任一其他约束命令指定的约束来源类型T_other与T2之间的优先级。若T_other<T2,则可以不检测该其他约束命令指定的约束值与当前约束命令是否存在冲突,进而继续比较与下一个其他约束命令指定的约束来源类型的优先级;若T_other ≥T2,则可以根据冲突判断规则,检测当前约束命令中指定的约束值A1与该其他约束命令指定的约束值的一致性。若一致性检测未通过,则可以放弃针对该约束命令的约束数据配置,并且打印冲突信息;若一致性检测通过,则可以检测下一个其他约束命令。若与所有其他约束命令之间的一致性检测均通过,则可以基于当前约束命令A,配置关联实例I_m1的约束数据。
在另一示例中,假设存在约束对象为实例I1,针对其的约束命令的类型为B,约束值为B1,约束来源类型为来自实例的类型T3。
响应于接收到该约束命令,可以对实例I1的约束数据进行配置。在配置过程中,可以检测实例I1当前是否存在设计约束以及检测当前约束命令与其他约束命令之间是否存在冲突。
若实例I1当前无设计约束,可以为实例I1创建对应的约束类,并且可以基于当前接收的约束命令,配置实例I1的约束数据,例如可以将实例I1的约束值设置为B1,并且将该设计约束的约束来源类型设置为T3。
若实例I1当前有设计约束,可以比较当前约束命令B的约束来源类型T3的优先级与实例I1已有设计约束中与当前约束命令不同类型的任一其他约束命令指定的约束来源类型T_other的优先级。若T_other<T3,则可以不检测该其他约束命令指定的约束值与当前约束命令是否存在冲突,进而继续比较与下一个其他约束命令指定的约束来源类型的优先级。
在比较当前约束命令B的约束来源类型T3与任一其他约束命令的约束来源类型T_other的优先级时,若T_other ≥ T3,则可以根据冲突判断规则,检测当前约束命令中指定的约束值B1与该其他约束命令指定的约束值(例如约束命令A中指定的约束值、约束命令C中指定的约束值)的一致性(即是否存在冲突)。若一致性检测未通过,则可以放弃针对该约束命令的约束数据配置,并且打印冲突信息;若一致性检测通过,则可以检测下一个其他约束命令。若与所有其他约束命令之间的一致性检测均通过,则可以基于当前接收的约束命令B,配置实例I1的约束数据。
进一步地,以上述作为约束对象的实例I1(或关联实例I_m1)为例,在该实例I1(或关联实例I_m1)的约束数据被更新的情况下,可以查找该实例的儿子实例I2。若其儿子实例I2当前不存在设计约束,可以为儿子实例I2创建设计约束,并且将实例I1(或关联实例I_m1)的更新后的约束数据作为儿子实例I2的约束数据;响应于儿子实例I2当前存在设计约束,在一种实现中,可以通过比较儿子实例I2当前的设计约束的约束来源类型T_child与实例I1(或关联实例I_m1)的更新后的设计约束的优先级,配置儿子实例I2的约束数据。
若儿子实例I2的约束来源类型T_child的优先级高于实例I1(或关联实例I_m1)的约束来源类型的优先级,则可以放弃对该儿子实例及其后裔的约束数据的配置;若儿子实例I2的约束来源类型T_child的优先级低于或等于实例I1(或关联实例I_m1)的约束来源类型的优先级,则可以进行一致性检测,根据冲突判断规则,检测当前约束命令中指定的约束值与该儿子实例已有的所有其他约束的一致性(即是否存在冲突)。若与所有其他约束之间的一致性检测均通过,则可以基于当前约束命令,配置该儿子实例的约束数据。
根据本申请的实施例,约束验证方法可以应用于电子设计自动化工具,可以通过状态机来控制上述约束验证方法的执行过程。
作为示例,在执行上面所述的获取待验证电路的设计文件以及约束验证命令的步骤之前,约束验证方法还可以包括:为电子设计自动化工具创建状态机,以使电子设计自动化工具基于状态机来响应约束验证命令。
具体来说,状态机可以使得电子设计自动化工具包含以下程序状态中的至少一个:初始状态,用于初始化电子设计自动化工具;第一状态,用于读取设计文件;第二状态,用于对设计文件中的各约束对象的设计约束进行配置;第三状态,用于在设计约束下对设计文件进行验证计算。
具体来说,针对EDA工具,可以通过创建状态机来确定约束验证命令的可执行空间。状态机(state machine)可以是有限状态机(finite-state machine,FSM)或有限状态自动机(finite-state automaton,FSA)的简称,其可以表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。在给定一个状态机的情况下,给定状态机的当前状态以及输入,则状态机的输出状态可以明确的运算出来。
对于状态机而言,一个状态机至少包含两个状态(State),可以通过事件(Event)来触发预设的操作,事件可以是执行某个操作的触发条件或者口令,在事件发生后,可以执行相应的动作(Action),在编程时,一个动作可以对应一个函数。状态机可以从一个状态变换(Transition)为另一个状态,以实现对步骤的切换控制。
对于上述约束验证方法而言,如图5所示,可以通过以下方式基于状态机来响应约束验证命令:
在步骤S510,可以响应于接收到设计文件的读取命令,状态机从初始状态切换到第一状态,并且在第一状态中读取设计文件并为设计文件设置默认的约束数据。
在步骤S520,可以响应于约束命令,状态机从第一状态切换到第二状态,并且在第二状态中执行对设计文件中的各约束对象的设计约束进行配置的步骤,例如上述步骤S120。
在步骤S530,可以响应于完成对设计文件中的各约束对象的设计约束进行配置的步骤,状态机从第二状态切换回第一状态。
在步骤S540,可以响应于计算命令,状态机从第一状态切换到第三状态,并且在第三状态中执行对设计文件进行验证计算的步骤,例如上述步骤S130。
在步骤S550,可以响应于完成对设计文件进行验证计算的步骤,状态机从第三状态切换回第一状态。
例如,如图6所示,在程序启动后,状态机可以进入状态S_start。在执行其他可以在状态S_start运行的命令后,可以保持在状态S_start。这里,状态S_start可以为初始状态,其可以表示程序启动、以及执行可在S_start执行的命令(例如设置程序执行参数或默认值的命令)。
然后,可以执行读入用户设计的命令的过程,在进入该命令时,状态机的状态可以变更为状态S_design,并且在读入用户设计命令后,更新一遍约束数据。在该步骤中,程序可以载入用户提供的设计文件,建立约束设计的服务对象,例如通过执行用于读取设计文件的命令“read_design user_desgins”来载入设计文件。这里,状态S_design可以为读入设计之后的状态,例如在程序响应读入用户设计的命令之后、在约束数据更新完成后、以及在基于约束数据计算完成后。
这里,需要说明的是,在状态S_design中更新一遍约束数据,是将诸如模块或实例的各个对象的约束数据更新为程序的默认值,尽管都是更新约束数据,但是该动作与后续将描述的状态S_constraint中执行约束命令分别是两个不同的动作。
然后,可以执行约束命令,在进入该约束命令时,状态机可以立即更新状态为状态S_constraint,在该约束命令执行完成时,可以更新状态为状态S_design。状态S_constraint可以为约束设置中,该状态可以表示程序正在进行约束数据更新。
在执行约束命令完成后,可以执行计算命令,在进入该计算命令时,状态机可以更新状态为状态S_compute,在该计算命令执行完成时,可以更新状态为状态S_design。这里,状态S_compute可以表示计算中,在该状态中,程序可以基于约束数据进行计算。
在上述过程中,可以先响应于约束命令,执行对各约束对象进行约束数据更新的过程,在约束命令执行结束后,EDA工具在另一特定状态下进行基于约束数据的计算操作,响应于计算命令,执行验证计算的过程,这使得可以在状态机的限定下,实现基于状态机控制的无锁、无原子操作的高频约束设置和更新,单线程更新约束数据,从而在后期使用过程约束数据只读,大大提升了约束设置接口的调用效率。
根据本申请的实施例的约束验证方法,约束数据的更新过程是线性的,可以针对各个模块以及实例,单线程递归地依次进行更新,并且要求全部约束数据更新完毕,才能开始基于约束数据的数值计算,因此,在获取约束值的过程中,高频访问的约束设置接口无锁、无原子操作,其访问效率大大提升。
在本申请的示例性实施例的第二方面,提供一种集成电路的约束验证装置,该集成电路的约束验证装置可以应用于工具命令语言环境,其中,如图7所示,约束验证装置可以包括获取单元100、配置单元200和计算单元300。
获取单元100被配置为获取待验证电路的设计文件以及约束验证命令,其中,约束验证命令包括约束命令和计算命令,约束命令用于给定在集成电路设计验证过程中的设计约束,计算命令用于给定在集成电路设计验证过程中需要执行的验证计算。
配置单元200被配置为基于约束命令,对设计文件中的各约束对象的设计约束进行配置,并且将配置得到的约束数据设置为只读状态。
计算单元300被配置为在约束数据的约束下,根据计算命令,对设计文件进行验证计算,得到待验证电路在设计约束下的验证结果。
作为示例,配置单元200还被配置为:确定约束命令在设计文件中的约束对象;根据预设的优先级规则和约束命令,配置约束对象的约束数据;基于约束对象的约束数据,配置设计文件中与约束对象相关联的关联对象的约束数据,其中,优先级规则指定针对同一约束对象配置不同设计约束的优先级顺序。
作为示例,约束对象包括模块,其中,配置单元200还被配置为通过以下方式配置约束对象的约束数据:响应于模块当前不存在设计约束,为模块创建设计约束,并且基于约束命令,配置模块的约束数据;响应于模块当前存在设计约束,利用约束命令中的约束数据更新模块当前的约束数据。
作为示例,约束对象包括模块,关联对象包括通过对模块实例化得到的关联实例,其中,配置单元200还被配置为通过以下方式配置关联对象的约束数据:响应于关联实例当前不存在设计约束,为关联实例创建设计约束,并且将模块的约束数据作为关联实例的约束数据;响应于关联实例当前存在设计约束,通过比较关联实例当前的设计约束与约束命令中的设计约束的优先级,配置关联对象的约束数据,其中,响应于关联实例当前的设计约束的优先级高于约束命令中的设计约束的优先级,保持关联实例的约束数据不变;响应于关联实例当前的设计约束的优先级低于或等于约束命令中的设计约束的优先级,利用约束命令中的约束数据更新关联实例当前的约束数据。
作为示例,约束对象包括实例,其中,配置单元200还被配置为通过以下方式配置约束对象的约束数据:响应于实例当前不存在设计约束,为实例创建设计约束,并且基于约束命令,配置实例的约束数据;响应于实例当前存在设计约束,通过比较实例当前的设计约束与约束命令中的设计约束的优先级,配置实例的约束数据,其中,响应于实例当前的设计约束的优先级高于约束命令中的设计约束的优先级,保持实例的约束数据不变;响应于实例当前的设计约束的优先级低于或等于约束命令中的设计约束的优先级,利用约束命令中的约束数据更新实例的约束数据。
作为示例,配置单元200还被配置为:响应于当前实例的约束数据被更新,确定当前实例的儿子实例;响应于儿子实例当前不存在设计约束,为儿子实例创建设计约束,并且将当前实例的更新后的约束数据作为儿子实例的约束数据;响应于儿子实例当前存在设计约束,通过比较儿子实例当前的设计约束与当前实例的更新后的设计约束的优先级,配置儿子实例的约束数据,其中,响应于儿子实例当前的设计约束的优先级高于当前实例的更新后的设计约束的优先级,保持儿子实例以及儿子实例的后裔的约束数据不变;响应于儿子实例当前的设计约束的优先级低于或等于当前实例的更新后的设计约束的优先级,利用当前实例的更新后的约束数据更新儿子实例的约束数据以及儿子实例的后裔的约束数据。
作为示例,优先级规则基于设计约束的约束来源类型确定,约束来源类型包括未定义约束来源类型的第一类型、来自父亲节点的第二类型、来自模块的第三类型以及来自实例的第四类型,其中,优先级规则指定以下优先级顺序:第一类型的优先级低于第二类型的优先级,第二类型的优先级低于第三类型的优先级,第三类型的优先级低于第四类型的优先级,其中,约束数据包括对约束对象进行设计的设计约束值以及约束来源类型。
作为示例,通过以下方式确定优先级规则:在约束对象当前存在第一设计约束的情况下,确定第一设计约束的约束来源类型与当前约束命令的第二设计约束的约束来源类型是否一致;若第一设计约束的约束来源类型与第二设计约束的约束来源类型一致,则确定第一设计约束与第二设计约束的命令类型是否一致;若第一设计约束与第二设计约束的命令类型一致,则确定第二设计约束的优先级高于第一设计约束的优先级;若第一设计约束与所述第二设计约束的命令类型不一致,则确定第二设计约束的优先级低于第一设计约束的优先级;若第一设计约束的约束来源类型与第二设计约束的约束来源类型不一致,则按照约束来源类型确定第二设计约束与第一设计约束之间的优先级。
作为示例,约束命令包括针对同一约束对象的多个命令,其中,配置单元200还被配置为:在根据预设的优先级规则和约束命令中的每个命令,配置约束对象的约束数据之前,基于预设的冲突判断规则,判断当前命令与其他命令之间是否存在冲突;响应于当前命令与其他命令之间不存在冲突,基于优先级规则和当前命令,配置约束对象的约束数据;响应于当前命令与其他命令之间存在冲突,放弃基于当前命令对约束对象的约束数据的配置,其中,冲突判断规则指定约束对象的不同设计约束之间需满足的关系。
作为示例,多个命令分别指定针对约束对象的不同参数设置的约束值,冲突判断规则指定约束对象的各参数之间需满足的取值关系,其中,配置单元200还被配置为通过以下方式判断当前命令与其他命令之间是否存在冲突:基于冲突判断规则,确定与第一参数的约束值满足取值关系的第二参数的第一取值范围,其中,第一参数为当前命令所针对的参数,第二参数为任意其他命令所针对的参数;响应于任意其他命令所指定的第二参数的约束值在第一取值范围内,确定当前命令与任意其他命令之间不存在冲突;响应于任意其他命令所指定的第二参数的约束值不在第一取值范围内,确定当前命令与任意其他命令之间存在冲突。
作为示例,在执行判断当前命令与其他命令之间是否存在冲突的步骤之前,配置单元200还被配置为:判断针对约束对象的不同参数设置的各约束值是否在预设的第二取值范围内,其中,约束对象的每个参数对应有相应的第二取值范围;响应于约束值在相应的第二取值范围内,执行判断当前命令与其他命令之间是否存在冲突的步骤;响应于约束值不在相应的第二取值范围内,退出约束验证方法的执行,其中,针对约束对象的任一参数设置的第一取值范围小于或等于针对该参数设置的第二取值范围。
作为示例,约束验证装置应用于电子设计自动化工具,其中,约束验证装置还包括状态机创建单元,状态机创建单元被配置为:在执行获取待验证电路的设计文件以及约束验证命令的步骤之前,为电子设计自动化工具创建状态机,以使电子设计自动化工具基于状态机来响应约束验证命令,其中,状态机使得电子设计自动化工具包含以下程序状态中的至少一个:初始状态,用于初始化电子设计自动化工具;第一状态,用于读取设计文件;第二状态,用于对设计文件中的各约束对象的设计约束进行配置;第三状态,用于在设计约束下对设计文件进行验证计算。
作为示例,约束验证装置通过以下方式基于状态机来响应约束验证命令:响应于接收到设计文件的读取命令,状态机从初始状态切换到第一状态,并且在第一状态中读取设计文件并为设计文件设置默认的约束数据;响应于约束命令,状态机从第一状态切换到第二状态,并且在第二状态中执行对设计文件中的各约束对象的设计约束进行配置的步骤;响应于完成对设计文件中的各约束对象的设计约束进行配置的步骤,状态机从第二状态切换回第一状态;响应于计算命令,状态机从第一状态切换到第三状态,并且在第三状态中执行对设计文件进行验证计算的步骤;响应于完成对设计文件进行验证计算的步骤,状态机从第三状态切换回第一状态。
关于上述实施例中的装置,其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图8是根据一示例性实施例示出的一种电子设备的框图。如图8所示,电子设备10包括处理器101和用于存储处理器可执行指令的存储器102。这里,处理器可执行指令在被处理器运行时,促使处理器执行如上述示例性实施例所述的集成电路的约束验证方法。
作为示例,电子设备10并非必须是单个的设备,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。电子设备10还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的服务器。
在电子设备10中,处理器101可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器101还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。
处理器101可运行存储在存储器102中的指令或代码,其中,存储器102还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,网络接口装置可采用任何已知的传输协议。
存储器102可与处理器101集成为一体,例如,将RAM或闪存布置在集成电路微处理器等之内。此外,存储器102可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储器102和处理器101可在操作上进行耦合,或者可例如通过I/O端口、网络连接等互相通信,使得处理器101能够读取存储在存储器102中的文件。
此外,电子设备10还可以包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。电子设备10的所有组件可经由总线和/或网络而彼此连接。
在示例性实施例中,还可提供一种计算机可读存储介质,当计算机可读存储介质中的指令由服务器的处理器执行时,使得服务器能够执行如上述示例性实施例所述的集成电路的约束验证方法。计算机可读存储介质例如可以是包括指令的存储器,可选地,计算机可读存储介质可以是:只读存储器(ROM)、随机存取存储器(RAM)、随机存取可编程只读存储器(PROM)、电可擦除可编程只读存储器(EEPROM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪存、非易失性存储器、CD-ROM、CD-R、CD+R、CD-RW、CD+RW、DVD-ROM、DVD-R、DVD+R、DVD-RW、DVD+RW、DVD-RAM、BD-ROM、BD-R、BD-R LTH、BD-RE、蓝光或光盘存储器、硬盘驱动器(HDD)、固态硬盘(SSD)、卡式存储器(诸如,多媒体卡、安全数字(SD)卡或极速数字(XD)卡)、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘以及任何其他装置,所述任何其他装置被配置为以非暂时性方式存储计算机程序以及任何相关联的数据、数据文件和数据结构并将所述计算机程序以及任何相关联的数据、数据文件和数据结构提供给处理器或计算机使得处理器或计算机能执行所述计算机程序。上述计算机可读存储介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,此外,在一个示例中,计算机程序以及任何相关联的数据、数据文件和数据结构分布在联网的计算机系统上,使得计算机程序以及任何相关联的数据、数据文件和数据结构通过一个或多个处理器或计算机以分布式方式存储、访问和执行。
在示例性实施例中,还可提供一种计算机程序产品,该计算机程序产品包括计算机指令,计算机指令被处理器执行时实现如上述示例性实施例所述的集成电路的约束验证方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由权利要求指出。
此外,还需要说明的是,尽管上面参照具体附图描述了各步骤的若干示例,但是应理解的是,本申请的实施方式不限于示例中给出的组合,不同附图中出现的步骤可以相结合,在此不作出穷举。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由权利要求来限制。
Claims (17)
1.一种集成电路的约束验证方法,其特征在于,所述集成电路的约束验证方法包括:
获取待验证电路的设计文件以及约束验证命令,其中,所述约束验证命令包括约束命令和计算命令,所述约束命令用于给定在集成电路设计验证过程中的设计约束,所述计算命令用于给定在集成电路设计验证过程中需要执行的验证计算;
基于所述约束命令,对所述设计文件中的各约束对象的设计约束进行配置,并且将配置得到的约束数据设置为只读状态;
在所述约束数据的约束下,根据所述计算命令,对所述设计文件进行验证计算,得到所述待验证电路在设计约束下的验证结果;
其中,所述基于所述约束命令,对所述设计文件中的各约束对象的设计约束进行配置,包括:
确定所述约束命令在所述设计文件中的约束对象;
根据预设的优先级规则和所述约束命令,配置所述约束对象的约束数据;
基于所述约束对象的约束数据,配置所述设计文件中与所述约束对象相关联的关联对象的约束数据。
2.根据权利要求1所述的集成电路的约束验证方法,其特征在于,所述优先级规则指定针对同一约束对象配置不同设计约束的优先级顺序。
3.根据权利要求1所述的集成电路的约束验证方法,其特征在于,所述约束对象包括模块,其中,通过以下方式配置所述约束对象的约束数据:
响应于所述模块当前不存在设计约束,为所述模块创建设计约束,并且基于所述约束命令,配置所述模块的约束数据;
响应于所述模块当前存在设计约束,利用所述约束命令中的约束数据更新所述模块当前的约束数据。
4.根据权利要求1所述的集成电路的约束验证方法,其特征在于,所述约束对象包括模块,所述关联对象包括通过对所述模块实例化得到的关联实例,其中,通过以下方式配置所述关联对象的约束数据:
响应于所述关联实例当前不存在设计约束,为所述关联实例创建设计约束,并且将所述模块的约束数据作为所述关联实例的约束数据;
响应于所述关联实例当前存在设计约束,通过比较所述关联实例当前的设计约束与所述约束命令中的设计约束的优先级,配置所述关联对象的约束数据,
其中,响应于所述关联实例当前的设计约束的优先级高于所述约束命令中的设计约束的优先级,保持所述关联实例的约束数据不变;响应于所述关联实例当前的设计约束的优先级低于或等于所述约束命令中的设计约束的优先级,利用所述约束命令中的约束数据更新所述关联实例当前的约束数据。
5.根据权利要求1所述的集成电路的约束验证方法,其特征在于,所述约束对象包括实例,其中,通过以下方式配置所述约束对象的约束数据:
响应于所述实例当前不存在设计约束,为所述实例创建设计约束,并且基于所述约束命令,配置所述实例的约束数据;
响应于所述实例当前存在设计约束,通过比较所述实例当前的设计约束与所述约束命令中的设计约束的优先级,配置所述实例的约束数据,
其中,响应于所述实例当前的设计约束的优先级高于所述约束命令中的设计约束的优先级,保持所述实例的约束数据不变;响应于所述实例当前的设计约束的优先级低于或等于所述约束命令中的设计约束的优先级,利用所述约束命令中的约束数据更新所述实例的约束数据。
6.根据权利要求4或5所述的集成电路的约束验证方法,其特征在于,所述集成电路的约束验证方法还包括:
响应于当前实例的约束数据被更新,确定当前实例的儿子实例;
响应于所述儿子实例当前不存在设计约束,为所述儿子实例创建设计约束,并且将当前实例的更新后的约束数据作为所述儿子实例的约束数据;
响应于所述儿子实例当前存在设计约束,通过比较所述儿子实例当前的设计约束与当前实例的更新后的设计约束的优先级,配置所述儿子实例的约束数据,
其中,响应于所述儿子实例当前的设计约束的优先级高于当前实例的更新后的设计约束的优先级,保持所述儿子实例以及所述儿子实例的后裔的约束数据不变;响应于所述儿子实例当前的设计约束的优先级低于或等于当前实例的更新后的设计约束的优先级,利用当前实例的更新后的约束数据更新所述儿子实例的约束数据以及所述儿子实例的后裔的约束数据。
7.根据权利要求1所述的集成电路的约束验证方法,其特征在于,所述优先级规则基于设计约束的约束来源类型确定,所述约束来源类型包括未定义约束来源类型的第一类型、来自父亲节点的第二类型、来自模块的第三类型以及来自实例的第四类型,
其中,所述优先级规则指定以下优先级顺序:所述第一类型的优先级低于所述第二类型的优先级,所述第二类型的优先级低于所述第三类型的优先级,所述第三类型的优先级低于所述第四类型的优先级,
其中,所述约束数据包括对约束对象进行设计的设计约束值以及所述约束来源类型。
8.根据权利要求1所述的集成电路的约束验证方法,其特征在于,通过以下方式确定所述优先级规则:
在所述约束对象当前存在第一设计约束的情况下,确定所述第一设计约束的约束来源类型与当前约束命令的第二设计约束的约束来源类型是否一致;
若所述第一设计约束的约束来源类型与所述第二设计约束的约束来源类型一致,则确定所述第一设计约束与所述第二设计约束的命令类型是否一致;
若所述第一设计约束与所述第二设计约束的命令类型一致,则确定所述第二设计约束的优先级高于所述第一设计约束的优先级;
若所述第一设计约束与所述第二设计约束的命令类型不一致,则确定所述第二设计约束的优先级低于所述第一设计约束的优先级;
若所述第一设计约束的约束来源类型与所述第二设计约束的约束来源类型不一致,则按照约束来源类型确定所述第二设计约束与所述第一设计约束之间的优先级。
9.根据权利要求1所述的集成电路的约束验证方法,其特征在于,所述约束命令包括针对同一约束对象的多个命令,其中,所述集成电路的约束验证方法还包括:
在根据预设的优先级规则和所述约束命令中的每个命令,配置所述约束对象的约束数据之前,基于预设的冲突判断规则,判断当前命令与其他命令之间是否存在冲突;
响应于当前命令与其他命令之间不存在冲突,基于所述优先级规则和当前命令,配置所述约束对象的约束数据;
响应于当前命令与其他命令之间存在冲突,放弃基于当前命令对所述约束对象的约束数据的配置,
其中,所述冲突判断规则指定所述约束对象的不同设计约束之间需满足的关系。
10.根据权利要求9所述的集成电路的约束验证方法,其特征在于,所述多个命令分别指定针对所述约束对象的不同参数设置的约束值,所述冲突判断规则指定所述约束对象的各参数之间需满足的取值关系,其中,通过以下方式判断当前命令与其他命令之间是否存在冲突:
基于所述冲突判断规则,确定与第一参数的约束值满足所述取值关系的第二参数的第一取值范围,其中,所述第一参数为当前命令所针对的参数,所述第二参数为任意其他命令所针对的参数;
响应于所述任意其他命令所指定的第二参数的约束值在所述第一取值范围内,确定当前命令与所述任意其他命令之间不存在冲突;
响应于所述任意其他命令所指定的第二参数的约束值不在所述第一取值范围内,确定当前命令与所述任意其他命令之间存在冲突。
11.根据权利要求10所述的集成电路的约束验证方法,其特征在于,在执行所述判断当前命令与其他命令之间是否存在冲突的步骤之前,所述约束验证方法还包括:
判断针对所述约束对象的不同参数设置的各约束值是否在预设的第二取值范围内,其中,所述约束对象的每个参数对应有相应的第二取值范围;
响应于所述约束值在相应的第二取值范围内,执行所述判断当前命令与其他命令之间是否存在冲突的步骤;
响应于所述约束值不在相应的第二取值范围内,退出所述约束验证方法的执行,
其中,针对所述约束对象的任一参数设置的第一取值范围小于或等于针对该参数设置的第二取值范围。
12.根据权利要求1所述的集成电路的约束验证方法,其特征在于,所述约束验证方法应用于电子设计自动化工具,其中,在执行所述获取待验证电路的设计文件以及约束验证命令的步骤之前,所述约束验证方法还包括:
为所述电子设计自动化工具创建状态机,以使所述电子设计自动化工具基于所述状态机来响应所述约束验证命令,
其中,所述状态机使得所述电子设计自动化工具包含以下程序状态中的至少一个:
初始状态,用于初始化所述电子设计自动化工具;
第一状态,用于读取所述设计文件;
第二状态,用于对所述设计文件中的各约束对象的设计约束进行配置;
第三状态,用于在设计约束下对所述设计文件进行验证计算。
13.根据权利要求12所述的集成电路的约束验证方法,其特征在于,通过以下方式基于状态机来响应所述约束验证命令:
响应于接收到所述设计文件的读取命令,所述状态机从初始状态切换到第一状态,并且在所述第一状态中读取所述设计文件并为所述设计文件设置默认的约束数据;
响应于所述约束命令,所述状态机从第一状态切换到第二状态,并且在所述第二状态中执行所述对所述设计文件中的各约束对象的设计约束进行配置的步骤;
响应于完成所述对所述设计文件中的各约束对象的设计约束进行配置的步骤,所述状态机从所述第二状态切换回所述第一状态;
响应于所述计算命令,所述状态机从所述第一状态切换到第三状态,并且在所述第三状态中执行所述对所述设计文件进行验证计算的步骤;
响应于完成所述对所述设计文件进行验证计算的步骤,所述状态机从所述第三状态切换回所述第一状态。
14.一种集成电路的约束验证装置,其特征在于,所述集成电路的约束验证装置包括:
获取单元,被配置为获取待验证电路的设计文件以及约束验证命令,其中,所述约束验证命令包括约束命令和计算命令,所述约束命令用于给定在集成电路设计验证过程中的设计约束,所述计算命令用于给定在集成电路设计验证过程中需要执行的验证计算;
配置单元,被配置为基于所述约束命令,对所述设计文件中的各约束对象的设计约束进行配置,并且将配置得到的约束数据设置为只读状态;
计算单元,被配置为在所述约束数据的约束下,根据所述计算命令,对所述设计文件进行验证计算,得到所述待验证电路在设计约束下的验证结果;
其中,所述配置单元还被配置为:
确定所述约束命令在所述设计文件中的约束对象;
根据预设的优先级规则和所述约束命令,配置所述约束对象的约束数据;
基于所述约束对象的约束数据,配置所述设计文件中与所述约束对象相关联的关联对象的约束数据。
15.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器,
其中,所述处理器可执行指令在被所述处理器运行时,促使所述处理器执行根据权利要求1至13中任一项所述的集成电路的约束验证方法。
16.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行根据权利要求1至13中任一项所述的集成电路的约束验证方法。
17.一种计算机程序产品,包括计算机指令,其特征在于,所述计算机指令被处理器执行时实现根据权利要求1至13中任一项所述的集成电路的约束验证方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410160714.2A CN117709294B (zh) | 2024-02-05 | 2024-02-05 | 集成电路的约束验证方法、装置、电子设备、介质及产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410160714.2A CN117709294B (zh) | 2024-02-05 | 2024-02-05 | 集成电路的约束验证方法、装置、电子设备、介质及产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117709294A CN117709294A (zh) | 2024-03-15 |
CN117709294B true CN117709294B (zh) | 2024-04-30 |
Family
ID=90162820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410160714.2A Active CN117709294B (zh) | 2024-02-05 | 2024-02-05 | 集成电路的约束验证方法、装置、电子设备、介质及产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117709294B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8316332B1 (en) * | 2010-07-07 | 2012-11-20 | Cadence Design Systems, Inc. | Constraint minimization method for formal verification |
CN107194065A (zh) * | 2017-05-19 | 2017-09-22 | 郑州云海信息技术有限公司 | 一种pcb设计中检查并设定约束值的方法 |
CN113239655A (zh) * | 2020-05-21 | 2021-08-10 | 台湾积体电路制造股份有限公司 | 半导体电路的约束确定系统和方法 |
CN113850046A (zh) * | 2021-09-09 | 2021-12-28 | 爱芯元智半导体(上海)有限公司 | 验证实例生成方法、装置、电子设备及存储介质 |
CN116306396A (zh) * | 2023-03-10 | 2023-06-23 | 昆仑芯(北京)科技有限公司 | 芯片验证方法及装置、设备和介质 |
CN116542190A (zh) * | 2023-06-02 | 2023-08-04 | 英诺达(成都)电子科技有限公司 | 用户设计综合方法、装置、设备、介质及产品 |
CN116911240A (zh) * | 2023-09-12 | 2023-10-20 | 深圳鸿芯微纳技术有限公司 | 电子自动化设计软件的命令配置方法、装置、设备及介质 |
CN117094276A (zh) * | 2023-09-08 | 2023-11-21 | 昆腾微电子股份有限公司 | 时序路径修复方法、装置、电子设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7802222B2 (en) * | 2006-09-25 | 2010-09-21 | Cadence Design Systems, Inc. | Generalized constraint collection management method |
US9202005B2 (en) * | 2013-08-28 | 2015-12-01 | Synopsys, Inc. | Development and debug environment in a constrained random verification |
US10073938B2 (en) * | 2016-06-29 | 2018-09-11 | International Business Machines Corporation | Integrated circuit design verification |
-
2024
- 2024-02-05 CN CN202410160714.2A patent/CN117709294B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8316332B1 (en) * | 2010-07-07 | 2012-11-20 | Cadence Design Systems, Inc. | Constraint minimization method for formal verification |
CN107194065A (zh) * | 2017-05-19 | 2017-09-22 | 郑州云海信息技术有限公司 | 一种pcb设计中检查并设定约束值的方法 |
CN113239655A (zh) * | 2020-05-21 | 2021-08-10 | 台湾积体电路制造股份有限公司 | 半导体电路的约束确定系统和方法 |
CN113850046A (zh) * | 2021-09-09 | 2021-12-28 | 爱芯元智半导体(上海)有限公司 | 验证实例生成方法、装置、电子设备及存储介质 |
CN116306396A (zh) * | 2023-03-10 | 2023-06-23 | 昆仑芯(北京)科技有限公司 | 芯片验证方法及装置、设备和介质 |
CN116542190A (zh) * | 2023-06-02 | 2023-08-04 | 英诺达(成都)电子科技有限公司 | 用户设计综合方法、装置、设备、介质及产品 |
CN117094276A (zh) * | 2023-09-08 | 2023-11-21 | 昆腾微电子股份有限公司 | 时序路径修复方法、装置、电子设备及存储介质 |
CN116911240A (zh) * | 2023-09-12 | 2023-10-20 | 深圳鸿芯微纳技术有限公司 | 电子自动化设计软件的命令配置方法、装置、设备及介质 |
Non-Patent Citations (2)
Title |
---|
FPGA 软件开发系统布局模块的设计与实现;白利琼;中国优秀硕士学位论文全文数据库 信息科技辑;20170715(第07期);第I138-92页 * |
验证平台的可重用性研究;詹文法;中国优秀博硕士学位论文全文数据库 (硕士)信息科技辑;20040915(第03期);第I135-118页 * |
Also Published As
Publication number | Publication date |
---|---|
CN117709294A (zh) | 2024-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20150339434A1 (en) | Virtual hierarchical layer propagation | |
US10380289B2 (en) | Multi-sided variations for creating integrated circuits | |
KR101103952B1 (ko) | 어셈블리 데이터의 작성을 지원하는 장치 및 방법 | |
US9032346B2 (en) | Method and apparatus for creating and managing waiver descriptions for design verification | |
KR20220131334A (ko) | 반도체 설계 및 제조를 위한 통합된 재료-대-시스템들 시뮬레이션 및 검증 | |
CN116821437B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
US5353433A (en) | Method and apparatus for organizing and analyzing timing information | |
US11755294B2 (en) | Systems and methods for generating service access points for RTE services in code or other RTE service information for use with the code | |
CN117709294B (zh) | 集成电路的约束验证方法、装置、电子设备、介质及产品 | |
CN116501415B (zh) | 命令执行方法及装置、电子设备、计算机可读存储介质 | |
US9996656B2 (en) | Detecting dispensable inverter chains in a circuit design | |
CN109710698A (zh) | 一种数据汇聚方法、装置、电子设备及介质 | |
EP3246861A1 (en) | Method and system for managing constraint-based violations in a product data management environment | |
US20050050488A1 (en) | System and method for determining a highest level signal name in a hierarchical VLSI design | |
US8726206B1 (en) | Deadlock detection method and related machine readable medium | |
CN116467975B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN117391002B (zh) | 一种ip核扩展描述方法及ip核生成方法 | |
CN117907812A (zh) | 电路检测方法及装置、电子设备、存储介质、程序产品 | |
US7650579B2 (en) | Model correspondence method and device | |
JP2005038430A (ja) | 回路パラメータの異なる組合せにおける制約パラメータの測定 | |
US20240104278A1 (en) | Graph representation of a circuit simulation waveform | |
CN110750956A (zh) | 逻辑闸阶层验证方法以及验证系统 | |
US20230126888A1 (en) | Computation of weakly connected components in a parallel, scalable and deterministic manner | |
US20020193974A1 (en) | Efficient production of disjoint multiple traces | |
US20230205949A1 (en) | Full chip power estimation using machine learning |
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 |