具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
下面,将参照附图来描述根据本发明实施例的修复电路中的保持时间违例的方法和装置。
首先,参照图2来描述根据本发明实施例的修复电路中的保持时间违例的方法。
如图2所示,在步骤S201中,创建所述电路的拓扑图,该拓扑图中的支路表示所述电路中发生保持时间违例的信号路径,所述支路上的节点表示所述信号路径上发生保持时间违例的元件的端口(例如输入端口或输出端口)。
通常,设计人员使用各种元件来设计电路(例如集成电路)。所述元件可以包括各种时序单元(例如知识产权(IP)核、寄存器等)以及各种组合单元(例如与门、非门等)。在时序单元之间可以形成一条或多条信号路径。例如,当一个时序单元的输出端口(在本说明书中,与输出管脚可互换地使用)直接地或者经由一个或多个组合单元连接到另一个时序单元的输入端口(在本说明书中,与输入管脚可互换地使用)时,在这两个时序单元之间形成信号路径。当电路工作时,信号从时序电路的输出端口沿着信号路径流到另一个时序电路的输入端口,从而实现设计的功能。当对电路进行分析时,可以根据电路的拓扑,找出电路中的所有信号路径以及这些信号路径上的所有元件。
此外,如上文所述,在电路设计后期,可以针对电路的每个信号路径,计算该信号路径上的各个元件的输入端口和输出端口处的保持时间余量,从而根据该保持时间余量来确定在所述信号路径上是否发生保持时间违例。在信号路径上发生保持时间违例意味着在该信号路径上的所有元件处(即,其输入端口和输出端口处)都发生保持时间违例。这样,可以找出电路中所有发生保持时间违例的信号路径以及该信号路径上的所有元件(即发生保持时间违例的元件)。应当注意,当多条发生时间违例的信号路径经过一个输入端口或输出端口,并且针对所述多条路径分别计算的该端口处的保持时间余量存在多个不同的值时,可以将绝对值最大的值(其对应于最严重的保持时间违例)作为该端口处的保持时间余量。
然后,可以根据电路中发生保持时间违例的各条信号路径、以及这些信号路径上发生保持时间违例的元件,创建该电路的拓扑图。在本发明的实施例中,所述拓扑图可以是有向无环图(DAG),并且在下文中,以DAG为例来进行描述。DAG中的支路表示电路中发生保持时间违例的信号路径,所述支路上的节点表示所述信号路径上发生保持时间违例的元件的输入端口或输出端口。创建电路的DAG的方法是本领域公知的,在这里不再赘述。图3示例性地示出了根据本发明实施例的电路的DAG。在该示例中,电路包括时序电路(IP核和寄存器)以及组合电路(非门和与门),该IP核的输出端口分别经由不同的组合电路与各个寄存器的输入端口连接,从而形成多条信号路径,在这些信号路径上(其各个元件处)发生了保持时间违例。在图3中,为了便于描述,将该DAG中的各个节点命名为A、B、C、…、X、Y、Z,并且在各个节点旁边标注的数字表示该节点处的保持时间余量(例如以毫秒为单位),如上文所述,保持时间余量为负表示该节点对应的端口处发生了保持时间违例。应当认识到,所述拓扑图不限于DAG,在其他实施例中,可以使用其他形式的拓扑图。此外,在其他实施例中,除了发生保持时间违例的信号路径及其元件以外,所建立的拓扑图也可以包括电路中的没有发生保持时间违例的信号路径及其元件。
应当注意,当在电路的某个元件的输入端口或输出端口处发生保持时间违例时,出于某些原因,可能不允许修复该输入端口或输出端口处的保持时间违例。例如,如果对该输入端口或输出端口处的保持时间违例的修复操作会使得在电路中发生新的时序违例(尤其是建立时间违例),则不允许在该输入端口或输出端口处修复保持时间违例。在本发明的实施例中,对于DAG中的每个节点(其对应于发生保持时间违例的元件的输入端口或输出端口),可以根据该节点处的建立时间余量(通常为正值)和保持时间余量(负值)来确定是否允许在该节点处修复保持时间违例。例如,可以设置参数SetupSlack+V1*HoldSlack,其中SetupSlack是该节点处的建立时间余量,V1是经验值(例如3),HoldSlack是该节点处的保持时间余量,所述建立时间余量和保持时间余量可以使用本领域公知的方法获得。当该参数小于0时,这意味着该节点处的建立时间余量不够大,在这种情况下,如果在该节点处修复保持时间违例,则可能导致出现新的建立时间违例,因此不应当在该节点处修复保持时间违例,反之,如果该参数不小于0,则说明建立时间余量足够大,可以在该节点处修复保持时间违例。可以对DAG中的所有节点计算上述参数,以确定不允许修复保持时间违例的节点(为便于描述,以下称为不可修复节点),并且在DAG图中将不可修复节点标识出。在图3所示的DAG示例中,假设节点B、U、V、Z为不可修复节点,因此例如用“X○”标识出。
返回图2,在步骤S202中,将所述电路划分为多个区域。
具体地,可以按照任何适当的方式将所述电路划分为多个区域(或称为瓦片(tile)),从而产生所述电路的瓦片图。图4示意性地示出了根据本发明实施例的通过将电路划分为三个区域(瓦片)而产生的瓦片图的示例。为简单起见,在图4中没有画出具体的电路元件。应当注意,所述区域的形状不限于矩形,而是可以是任意形状,并且每个区域的大小也可以根据需要灵活地选择。通过划分电路,可以确定在步骤S201中创建的DAG中的各个节点所在的电路区域。
然后,可以计算每个区域(瓦片)的电路元件密度。例如,可以计算在每个区域内放置的所有电路元件占据的面积(即,所有电路元件映射到该区域所在平面上的面积)与该区域的总面积之比,作为该区域的电路元件密度。这样,可以确定该电路的DAG中的各个节点对应的区域的电路元件密度。应当注意,如果某个区域(瓦片)由于某些限制而不能放置任何元件或者不能增加任何元件时,则可以将该区域的电路元件密度设置为无穷大,以避免在随后的修复操作中在该区域插入新的元件。
返回图2,在步骤S203中,根据所述DAG中的节点对应的区域的电路元件密度,选择性地在所述节点对应的区域中放置保持时间校正元件以修复其保持时间违例。例如,可以将所述节点对应的区域的电路元件密度与密度阈值进行比较,并且响应于所述节点对应的区域的电路元件密度没有超过该密度阈值,在所述节点对应的区域中放置保持时间校正元件以修复其保持时间违例。
具体地,首先,可以建立节点列表,该节点列表包括所述DAG中可修复其保持时间违例的所有节点(为便于描述,以下称为可修复节点),其中,可以根据节点列表中的各个可修复节点的输入路径数量(即,从DAG的各个支路的起始节点到达该可修复节点的不同路径数量)数量和输出路径数量(即,从该可修复节点到DAG的各个支路的最后的节点的不同路径数量)以及保持时间余量,对节点列表中的各个节点进行排序。例如,可以计算各个可修复节点的输入路径数量和输出路径数量的乘积,并且按照乘积从大到小的顺序将各个可修复节点排序,其中,如果两个或多个可修复节点的输入路径数量和输出路径数量的乘积相等,则可以按照所述两个或多个可修复节点的保持时间余量的绝对值从大到小(即,从保持时间违例程度严重到保持时间违例轻微)的顺序将这些节点排序,如果两个可修复节点的保持时间余量相同,则可以任意地将它们排序。在图3所示的示例中,节点A的输入路径(即从IP核的输出管脚到节点A的路径)只有一条,节点A的输出路径(即,从节点A到各个寄存器的输入管脚的路径)有8条,即,路径A-C-D-E-F-G、A-C-D-E-F-H、A-I-X-J-K-L、A-I-X-J-K-M、A-N-O-P-Q-K-L、A-N-O-P-Q-K-M、A-N-S-Y-T-Z-U和A-N-S-Y-T-Z-V,因此节点A的输入路径数量和输出路径数量的乘积为8。类似地,可以确定其他节点的输入路径数量和输出路径数量的乘积,并且按照上文所述的方式,根据所述乘积以及保持时间余量将各个节点排序。在本发明的实施例中,所述节点列表还可以包括DAG中的不可修复节点,在这种情况下,可以将不可修复节点排在所有可修复节点之后,也可以不将其与可修复节点一起排序,并且在所述不可修复节点之间,可以按照上文所述的方式排序,也可以不进行排序。在其他实施例中,所述节点列表可以不包括所述不可修复节点。
所建立的节点列表可以根据实际需要而采用任何适当的形式。例如,对于图3所示的DAG,可以按照上文所述的方式,建立如下表1所示的节点列表,其中,斜体字母表示的节点是对应的区域的电路元件密度超过密度阈值的节点:
表1
在表1中,使用各个节点的输入路径数量与输出路径数量的乘积作为各个节点的序号,其中序号大的节点在后续操作中将先被处理。对于序号相同的两个或多个节点,按照保持时间余量的绝对值的大小从左向右排列这些节点,使用节点的位置表示其顺序,其中左侧的节点在后续操作中将先被处理。此外,在表1中,不可修复节点位于与可修复节点不同的栏中,以表示排序在可修复节点之后。应当认识到,表1只是示例性的,也可以采用其他形式的节点表。例如,可以按照上述排序方式,简单地建立以下节点队列:A-R-K-O-P-Q-N-W-S-Y-T-L-M-C-D-E-F-I-X-J-G-H-B-Z-U-V。
在建立节点列表之后,可以按照节点列表中的各个节点的顺序,根据所述各个节点对应的区域的电路元件密度,选择性地在所述各个节点对应的区域中处放置保持时间校正元件以修复其保持时间违例。
具体地,可以按照节点列表中的每个节点的顺序,将每个节点对应的区域的电路元件密度与密度阈值进行比较。所述密度阈值可以是根据设计需要和/或其他因素灵活选择的值。当节点列表中的某个节点对应的区域的电路元件密度超过所述密度阈值时,这意味着该节点对应的区域的元件密度过大,因此不在该区域中插入新的元件以修复该节点处的保持时间违例。反之,当节点列表中的某个节点对应的区域的电路元件密度不超过所述密度阈值时,这意味着该节点对应的区域存在较大的空闲空间,因此可以在该区域中插入保持时间校正元件以修复该节点处的保持时间违例。所述保持时间校正元件可以是能够引入时间延迟的任何种类的元件,例如本领域公知的缓冲器或延迟元件。由于每种保持时间校正元件能够引入的时间延迟量是已知的,因此,可以根据该节点处的保持时间余量与每种时延元件能够引入的时间延迟量,确定最终插入的保持时间校正元件的种类和数量,然后,将该保持时间校正元件插入到该节点对应的区域中,从而修复该节点处的保持时间违例。使用保持时间校正元件校正节点处的保持时间违例的具体方式是本领域公知的,在这里省略其详细描述。在对该节点执行了所述修复操作之后,可以从节点列表中删除该节点(即修复了保持时间违例的节点)以及与该节点处于相同信号路径上的所有节点。进行该删除操作的原因是:当在所述节点对应的区域中通过插入保持时间校正元件而修复了保持时间违例时,与所述节点处于相同信号路径上的所有节点的保持时间余量都会发生变化,因此不应当基于原来的保持时间余量对这些节点进行保持时间违例修复。
下面结合图3所示的例子来描述该修复操作。在图3所示的例子中,按照各个节点的顺序,首先确定节点A对应的区域的电路元件密度是否超过密度阈值,得到肯定的结果,因此不在节点A对应的区域中放置保持时间校正元件以修复其保持时间违例。接下来,检查节点R对应的区域的电路元件密度是否超过密度阈值,得到肯定的结果,因此不在节点R对应的区域中放置保持时间校正元件以修复其保持时间违例。接下来,由于节点K对应的区域的电路元件密度没有超过密度阈值,因此,在节点K对应的区域中插入保持时间校正元件来修复其保持时间违例。然后,可以从节点列表中删除节点K以及与节点K处于相同信号路径上的节点,即节点A、I、X、J、L、M、N、O、P、Q、B、W。通过该删除操作获得表2所示的节点列表。
表2
然后,对于表2所示的节点列表中的节点K之后的其他可修复节点,重复上述操作,直到检查了节点列表中的所有可修复节点为止。对于图3所示的例子,在对于节点列表中的所有可修复节点执行了上述操作之后,可以获得下表3所示的节点列表。
表3
可以看到,表3中的节点均为不可修复节点或者对应的区域的元件密度超过密度阈值的可修复节点。
在完成上述操作之后,对于节点列表中剩余的每个可修复节点(其为对应的区域的电路元件密度超过所述密度阈值的可修复节点),可以找出在该节点对应的区域周围的、电路元件密度没有超过所述密度阈值的区域(为便于描述,以下称为替代区域),并且通过在该替代区域中,而不是该节点对应的区域中,插入如下所述的保持时间校正元件链来修复该节点处的保持时间违例。
具体地,可以在与所述剩余的可修复节点对应的区域的距离不超过预设的距离阈值的区域中,找出电路元件密度不超过所述密度阈值的一个区域作为所述替代区域。所述距离阈值可以根据电路的实际情况灵活地设定,使得所述替代区域与所述剩余的可修复节点对应的区域直接相邻或者间隔一个或多个区域。
然后,可以在所选择的替代区域中插入至少一个保持时间校正元件(例如延迟元件)来修复该节点处的保持时间违例。由于所插入的保持时间校正元件与该节点之间存在的一定的距离,因此,除了保持时间校正元件以外,还需要在该节点和保持时间校正元件之间插入至少一个驱动元件(例如缓冲元件),用于将所述至少一个保持时间校正元件连接到所述节点,并且驱动所述至少一个保持时间校正元件以使其能够工作。这样,所述至少一个保持时间校正元件和至少一个驱动元件形成保持时间校正元件链。
在本发明的实施例中,可以使用两种类型的保持时间校正元件链,即图5A所示的大延迟型保持时间校正元件链以及图5B所示的低变化型保持时间校正元件链。如图5A和5B所示,这两种类型的保持时间校正元件链包括具有至少一个保持时间校正元件的保持时间校正元件组以及具有至少一个驱动元件的驱动元件组。图5A所示的大延迟型保持时间校正元件链中的每个保持时间校正元件能够引入的时间延迟大,因此只需要较少的保持时间校正元件来引入所需的时间延迟量,从而占据的空间小,然而,由于制造工艺等导致的保持时间校正元件的特性变化对电路的影响较大,因此容易引起新的时序违例(例如建立时间违例)。图5B所示的低变化型保持时间校正元件链中的每个保持时间校正元件能够引入的时间延迟小,因此需要较多的保持时间校正元件来引入所需的时间延迟量,从而占据的空间大,然而,由于制造工艺等导致的保持时间校正元件的特性变化对电路的影响较小,因此不容易引起新的时序违例。
当要插入保持时间校正元件链以修复某个剩余的可修复节点的保持时间违例时,可以根据该节点处的建立时间余量和保持时间余量,选择要插入的保持时间校正元件链的类型。例如,可以设置参数SetupSlack+V2*HoldSlack,其中V2是大于V1的经验值,例如5。对于该可修复节点,可以计算该参数的值,如果该参数大于0,这意味着建立时间余量足够大,即使保持时间校正元件的特性变化对电路的影响较大,也不容易引起新的时序违例,因此可以选择大延迟型保持时间校正元件链以减小占据的空间,反之,如果该参数小于0,这意味建立时间余量不够大,因此可以选择低变化型保持时间校正元件链以避免引起新的时序违例。然后,可以根据该可修复节点处的保持时间余量以及所述替代区域与该可修复节点对应的区域之间的距离,确定保持时间校正元件链中的保持时间校正元件的数量和驱动元件的数量,并且将由此确定的保持时间校正元件链插入所述替代区域,以修复所述可修复节点处的保持时间违例。然后,同样,从节点列表中删除与修复了保持时间违例的该可修复节点以及与其处于相同的信号路径上的所有节点,并且对于节点列表中的剩余可修复节点重复上述操作,直到对于节点列表中的所有可修复节点都执行了上述操作为止。
这样,利用根据本发明实施例的上述方法,可以修复电路中的保持时间违例,而不会在电路元件密度过大的区域插入新的元件,也不会导致布线的拥塞。此外,上述方法不需要移动已经放置在电路中的元件及其输入/输出管脚,从而避免因为元件/管脚的移动而产生新的时序违例。
应当注意,由于在上述方法中删除了某些节点而没有对其执行保持时间违例的修复,因此即使经过上述操作,在电路中可能仍然存在保持时间违例。在这种情况下,可以对电路重新进行时序分析,并且在确定发生保持时间违例时再次利用上述方法修复所述保持时间违例。然而,相对于传统方法,只需要将根据本发明实施例的方法重复较少的次数。
前面已经参考附图描述了实现本发明的方法的各个实施例。本领域技术人员可以理解的是,上述方法既可以以软件方式实现,也可以以硬件方式实现,或者通过软件与硬件相结合的方式实现。并且,本领域技术人员可以理解,通过以软件、硬件或者软硬件相结合的方式实现上述方法中的各个步骤,可以提供一种基于相同发明构思的修复电路中的保持时间违例的装置。即使该装置在硬件结构上与通用处理设备相同,由于其中所包含的软件的作用,使得该装置表现出区别于通用处理设备的特性,从而形成本发明的实施例的装置。本发明中所述装置包括若干单元或模块,所述单元或模块被配置为执行相应步骤。本领域的所述技术人员通过阅读本说明书可以理解如何编写程序实现所述单元或模块执行的动作。
下面将参考附图6具体描述根据本发明的实施例的修复电路中的保持时间违例的装置。由于所述装置与方法基于相同的发明构思,因此其中相同或相应的实现细节同样适用于与上述方法对应的装置,由于其在上文中已经进行了详细和完整的描述,因此在下文中可能不再进行赘述。
如图6所示,根据本发明的实施例的修复电路中的保持时间违例的装置600可以包括拓扑图创建设备601、电路划分设备602和违例修复设备603。
拓扑图创建设备601可以创建所述电路的拓扑图,该拓扑图中的支路表示所述电路中发生保持时间违例的信号路径,所述支路上的节点表示所述信号路径上的所有元件(即,发生保持时间违例的元件)的端口(例如输入端口或输出端口)。如上文所述,在本发明的实施例中,所述拓扑图可以是DAG。在其他实施例中,所述拓扑图也可以是其他类型的拓扑图。拓扑图创建设备601可以按照上文所述的方式创建所述电路的拓扑图,在这里不再赘述。在其他实施例中,除了发生保持时间违例的信号路径及其元件以外,所建立的拓扑图也可以包括电路中的没有发生保持时间违例的信号路径及其元件。
电路划分设备602可以将所述电路划分为多个区域。具体地,电路划分设备602可以按照任何适当的方式将所述电路划分为多个区域(瓦片),从而产生所述电路的瓦片图。所述区域可以是任意形状,并且每个区域的大小也可以根据需要灵活地选择。由此,可以确定拓扑图创建设备601创建的DAG中的各个节点所在的电路区域。此外,电路划分设备602还可以计算每个区域(瓦片)的电路元件密度。例如,电路划分设备602可以计算在每个区域内放置的所有电路元件占据的面积与该区域的总面积之比,作为该区域的电路元件密度。这样,电路划分设备602可以确定该电路的DAG中的各个节点对应的区域的电路元件密度。应当注意,如果某个区域(瓦片)由于某些限制而不能放置任何元件或者不能增加任何元件时,则电路划分设备602可以将该区域的电路元件密度设置为无穷大。
违例修复设备603可以根据所述DAG中的节点对应的区域的电路元件密度,选择性地在所述节点对应的区域中放置保持时间校正元件以修复其保持时间违例。例如,违例修复设备603可以将所述节点对应的区域的电路元件密度与密度阈值进行比较,并且响应于所述每个节点对应的区域的电路元件密度没有超过该密度阈值,在所述节点对应的区域中放置保持时间校正元件以修复其保持时间违例。
下面,将参照图7具体描述违例设备603。如图7所示,违例修复设备603可以包括列表建立单元6031和修复单元6032。
列表建立单元6031可以建立节点列表,该节点列表包括所述DAG中可修复其保持时间违例的所有节点(为便于描述,以下称为可修复节点),其中,可以根据节点列表中的各个可修复节点的输入路径数量和输出路径数量以及保持时间余量,对节点列表中的各个节点进行排序。列表建立单元6031可以按照上文所述的方式来执行这一排序操作,在这里省略其详细描述。所建立的节点列表可以根据实际需要而采用任何适当的形式。
在建立节点列表之后,修复单元6032可以按照节点列表中的各个节点的顺序,根据所述各个节点对应的区域的电路元件密度,选择性地在所述各个节点对应的区域中放置保持时间校正元件以修复其保持时间违例。具体地,修复单元6032可以按照节点列表中的每个节点的顺序,将每个节点对应的区域的电路元件密度与上文所述的密度阈值进行比较。当节点列表中的某个节点对应的区域的电路元件密度超过所述密度阈值时,修复单元6032不在该区域中插入新的元件以修复该节点处的保持时间违例。反之,当节点列表中的某个节点对应的区域的电路元件密度不超过所述密度阈值时,修复单元6032可以在该区域中插入保持时间校正元件以修复该节点处的保持时间违例。所述保持时间校正元件可以是能够引入时间延迟的任何种类的元件,例如本领域公知的缓冲器或延迟元件。由于每种保持时间校正元件能够引入的时间延迟量是已知的,因此,违例修复设备603可以根据该节点处的保持时间余量与每种时延元件能够引入的时间延迟量,确定最终插入的保持时间校正元件的种类和数量,然后,将该保持时间校正元件插入到该节点对应的区域中,从而修复该节点处的保持时间违例。修复单元6032使用保持时间校正元件校正节点处的保持时间违例的具体方式是本领域公知的,在这里省略其详细描述。在对该节点执行了所述修复操作之后,修复单元6032可以从节点列表中删除该节点(即修复了保持时间违例的节点)以及与该节点处于相同信号路径上的所有节点。
在完成上述操作之后,对于节点列表中剩余的每个可修复节点(其为对应的区域的电路元件密度超过所述密度阈值的可修复节点),修复单元6032可以找出在该可修复节点对应的区域周围的、电路元件密度没有超过所述密度阈值的区域(即上述替代区域),并且通过在该替代区域中,而不是该可修复节点对应的区域中,插入保持时间校正元件链来修复该可修复节点处的保持时间违例。如上文所述,所述保持时间校正元件链包括放置在所述替代区域中的至少一个保持时间校正元件以及将所述至少一个保持时间校正元件连接到所述可修复节点的至少一个驱动元件。具体地,修复单元6032可以根据该可修复节点处的建立时间余量和保持时间余量,选择要插入的保持时间校正元件链的类型。例如,修复单元6032可以在参数SetupSlack+V2*HoldSlack大于0时选择上文所述的大延迟型保持时间校正元件链以减小占据的空间,而在该参数小于0选择低变化型保持时间校正元件链以避免引起新的时序违例。然后,修复单元6032可以确定保持时间校正元件链中的保持时间校正元件的数量和驱动元件的数量,并且将所确定的保持时间校正元件链插入所述替代区域。接下来,修复单元6032可以从节点列表中删除与修复了保持时间违例的该可修复节点以及与其处于相同的信号路径上的所有节点,并且对于节点列表中的剩余可修复节点重复上述操作,直到对于节点列表中的所有可修复节点都执行了上述操作为止。
这样,利用根据本发明实施例的上述装置,可以修复电路中的保持时间违例,同时避免在电路元件密度过大的区域插入更多的元件以及避免布线的拥塞。此外,上述装置不需要移动已经放置在电路中的元件及其输入/输出管脚,从而可以避免因为元件/管脚的移动而产生新的时序违例。
在利用上述装置对电路进行了一次保持时间违例修复操作之后,如上文所述,可以对电路重新进行时序分析,并且在确定发生保持时间违例时再次利用上述装置修复所述保持时间违例,直到电路中不再发生保持时间违例为止。
应当认识到,上文所述的根据本发明实施例的方法和装置只是说明性的,而非限制性的,本领域技术人员可以对其进行适当的修改和改变,而不背离本发明的范围。例如,尽管在上文中先执行步骤S201,然后执行步骤S202,但这不是限制性的,也可以先执行步骤S202,再执行步骤S201。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。