从仿真器状态至HDL模拟器的转换 相关申请
本申请要求于2007年5月9日提交的美国临时申请No.60/917,015(档案号No.02986.P064Z)、于2007年5月9日提交的美国临时申请No.60/917,024(档案号No.02986.P066Z)、于2007年5月9日提交的美国临时申请No.60/917,027(档案号No.02986.P067Z)以及于2007年5月9日提交的美国临时申请No.60/917,033(档案号No.02986.P068Z)的权益;这些申请通过引用整体地结合到本文中。本申请与题为“Techniques for Use withAutomated Circuit Design and Simulations”(档案号No.02986.P066)的于2008年5月8日提交的申请no.12/117,705、题为“Techniques for Use withAutomated Circuit Design and Simulations”(档案号No.02986.P067)的于2008年5月8日提交的申请no.12/117,711以及题为“Techniques for Use withAutomated Circuit Design and Simulations”(档案号No.02986.P068)的于2008年5月8日提交的申请no.12/117,714在同一日提交。除本段、标题、发明内容、权利要求以及摘要之外,这四个申请是相同的。
【技术领域】
本发明的实施例总体上涉及自动化电路设计和/或电路模拟。
背景技术
集成电路(IC或芯片)被用于包括例如个人计算机、嵌入式控制器、蜂窝电话、及其它通信设备的多种系统。电路设计者常常采用计算机辅助技术进行电路进行设计和模拟。已开发了诸如硬件描述语言(HDL)的标准语言来描述数字电路以辅助复杂数字电路的设计和模拟。包括但不限于VHDL和Verilog的多种硬件描述语言已逐渐成为行业标准。VHDL和Verilog是通用硬件描述语言,其允许使用抽象数据类型来定义门级、寄存器传输级(RTL)或行为级的硬件模型。随着器件工艺继续进步,已开发了各种产品设计工具以使HDL适合用于新的器件和设计风格。
在用HDL代码设计集成电路时,首先写代码并由HDL编译程序进行编译。HDL源代码在某一层级描述电路元件,且编译程序由此编译产生RTL网表(netlist)。RTL网表通常是技术无关网表,因为其与特定供应商的集成电路(诸如,现场可编程门阵列(FPGA)或专用集成电路(ASIC)等)的技术/架构无关。RTL网表对应于电路元件的示意性表示(与行为表示相反)。然后执行关联(映射)操作,以从技术无关RTL网表转换到可以用来产生供应商的技术/架构中的电路的技术专用网表。FPGA供应商利用不同的技术/架构来实现其集成电路内的逻辑电路。因此,映射技术无关RTL网表以产生专用于特定供应商的技术/架构的网表。
在编写并编译HDL代码之后,将集成电路(IC或芯片)或包括多个IC的系统的设计验证至正确。不断进步的处理技术及设计尺寸和复杂性方面的迅速发展已导致对复杂电路(包括但不限于ASIC)设计进行验证存在问题,这难以使用传统模拟工具和技术来解决。当前的模拟工具的示例包括ModelSim、VCS和NCSIM模拟工具。
结果,某些设计者使用诸如FPGA的多个IC来构造模型板。然而,仍然存在调试硬件设计的问题。当在调试期间检测到错误时,设计者可能尝试从电路分接(tap)感兴趣的信号,并使用逻辑分析器来确定错误的原因。JTAG(联合测试行动小组)是用于通过访问关于子块的信息来测试并调试集成电路的子块的著名技术。然而,这是艰难的过程且常常无效,尤其是在间歇性错误的情况下。可以使用模拟器来调试错误。然而,已经发生的错误常常难以重复和重构。此外,根据复杂性,模拟可能花费相当量的时间来到达已发生错误的点。
【发明内容】
在某些实施例中,一种方法包括从芯片中的电路获取初始条件信号,并将至少一些所述初始条件信号的值与模拟中所使用的硬件描述语言(HDL)中的对象相关联,其中,所述HDL用于描述所述芯片中的电路的至少一些部分。
在某些实施例中,一种方法包括接收对设计电路的描述,并生成用于调试的复制电路。该复制电路保留所述设计电路的功能,但可包括不同的实现方式或包括各种修改,以便促进调试或简化复制电路。
在某些实施例中,一种方法包括接收对包括设计储存元件的电路的描述。所述方法还包括生成附加描述,该附加描述包括对作为硬件替代的一部分的复制储存元件的描述,其中所述复制储存元件包括与控制电路一起使用地原始储存电路和用于提供对该原始储存电路中的未暴露的状态的访问的信号访问电路。
在某些实施例中,一种方法包括接收对包括设计模块的电路的描述,所述设计模块包括具有一些未被描述的电路细节的第一电路,该第一电路用于向设计逻辑提供信号。未被描述的电路包括黑盒子电路或专用电路,该黑盒子电路或专用电路不提供有关该电路内部工作的详细信息。所述方法还包括生成对包括复制模块的描述的附加描述,所述复制模块包括复制逻辑和延迟电路,所述复制逻辑为所述设计逻辑的复本,所述延迟电路用于接收来自所述第一电路的输出信号,其中所述延迟电路的输出被提供给所述复制逻辑。
如下所述,可以通过方法、装置、系统、芯片、软件、信号和运行软件或处理信号的计算机来实现其它实施例。
【附图说明】
通过参考以下说明和用来示出本发明的实施例的附图,可以理解本发明的实施例。然而,本发明的实施例不限于这些图的细节。
图1是根据本发明的某些实施例的包括计算机、接口以及芯片的系统的方框图表示。
图2是根据本发明的某些实施例的包括计算机、制造设备、接口以及芯片的系统的方框图表示。
图3是示出了根据本发明的某些实施例的生成用于配置或制造芯片的文件的程序的各种方面的流程图。
图4是示出了根据本发明的某些实施例的使芯片工作的各种方面的流程图。
图5是示出了根据本发明的某些实施例的在模拟器中使用初始条件信号和输入信号的各种方面的流程图。
图6是根据本发明的某些实施例的芯片中的具有相关电路的逻辑和复制逻辑(replicated logic)的方框图表示。
图7是根据本发明的某些实施例的芯片中的逻辑和相关电路及另一芯片中的复制逻辑和相关电路的方框图表示。
图8是根据本发明的某些实施例的具有相关电路的逻辑和复制逻辑的方框图表示。
图9是示出了本发明的某些实施例的各种方面的流程图。
图10是根据本发明的某些实施例的RAM硬件替代的方框图表示。
图11是根据本发明的某些实施例的用于确定异步时钟信号之间的相位关系的系统的方框图表示。
图12和图13均是图11的系统的时序图。
图14是根据本发明的某些实施例的用于确定异步时钟信号之间的相位关系的系统的方框图表示。
图15是图14的系统的时序图。
图16是根据本发明的某些实施例的用于确定异步时钟信号之间的相位关系的系统的方框图表示。
图17是图16的系统的时序图。
图18-图20均是根据本发明的某些实施例的设计模块和复制模块及相关电路的方框图表示。
图21是根据本发明的某些实施例的具有在快照(snapshot)解决方案中使用的电路的芯片的方框图表示。
图22是根据本发明的某些实施例的图19的芯片的一部分的示例的方框图表示。
图23是根据本发明的某些实施例的图21的芯片的一部分的示例的方框图表示。
图24是根据本发明的某些实施例的图22的电路的一部分的示例的方框图表示。
图25是根据本发明的某些实施例的图23的电路的一部分的示例的方框图表示。
图26是根据本发明的某些实施例的图21的芯片的一部分的示例的方框图表示。
图27是根据本发明的某些实施例的在快照解决方案中使用的电路的方框图表示。
图28是根据本发明的某些实施例的在时分复用器解决方案中使用的电路的方框图表示。
图29和图30均是根据本发明的某些实施例的用于图28的系统的时序图。
图31是根据本发明的某些实施例的在时分复用器解决方案中使用的电路的方框图表示。
图32是根据本发明的某些实施例的在时分复用器解决方案中使用的电路的方框图表示。
图33是图32的系统的时序图。
图34示出了可以用于本发明的示例性计算机系统。
【具体实施方式】
以下说明和附图是本发明的实施例的示例性说明且不应将其理解为限制本发明。描述了许多特定细节以提供对本发明的实施例的理解。然而,在某些情况下,未描述某些众所周知或常规细节以免使本发明含糊难懂。
本文所述的本发明的某些实施例包括在发生错误或感兴趣的其它事件之前,对有问题的逻辑设计的状态进行捕捉。本公开涵盖本发明的三个范畴:(1)逻辑复制解决方案,(2)快照解决方案,以及(3)时分复用器解决方案。此外,存在可以用于本发明的任何范畴的多个发明特征(在第III节中描述)。本发明的某些实施例包括多于一个的解决方案和多于一个的所列附加特征。其它实施例包括用于对电路进行设计、从芯片提出初始条件信号和输入信号、并在模拟中使用该初始条件信号和输入信号的程序。本说明书中所使用的术语“芯片”包括“模块”。以下目录给出本公开的大纲。
I.系统概述
II.逻辑复制解决方案
III.某些实施例的附加特征
A.功能等效但不同的复制模块(replicated module)
B.使初始条件与模拟器中的HDL代码相关联
C.生成硬件替代列表
D.访问内部状态
E.形式验证流技术
F.划分
G.黑盒子
H.多时钟域
I.用较快时钟对较慢时钟采样
J.用较快时钟对由较慢时钟生成的信号采样
K.单独FPGA或ASIC中的复制
IV.快照解决方案
V.时分复用器解决方案
VI.附加信息和实施例
本公开使用短语“在某些实施例中”和“在其它实施例中”来指示本文所述的各种发明中的一个或多个的实现。对“某些实施例”的不同引用不一定指示相同的实施例。某些方法、装置、系统以及芯片可以包括多于一个的实施例。
I.系统概述
测试逻辑设计是通过运行模拟来分析故障的重要步骤。在模拟中可以使用导致实际错误的一组初始条件和输入来重新产生问题,以使得设计者能够最终找到消除该问题的解决方案。在示例性配置中,测试芯片直至发生故障。还通过接口来连接芯片以允许记录导致故障的输入和条件。该信息随后被馈送到模拟程序以分析问题的原因。
参照图1,芯片(或模块)14通过接口16(其可以是JTAG接口)与计算机20对接。在某些实施例中,芯片14包括由计算机20中的程序通过JTAG接口16来配置的门阵列。该配置允许可通过JTAG接口看见芯片的各种信号。如本文详细描述的那样,在配置芯片14之后,使该芯片工作,以便收集其中发生错误或另一感兴趣事件的电路的初始条件信号(“初始条件”)和输入信号。本发明的某些实施例包括使输入信号延迟直至发生触发条件(例如错误条件),并随后冻结该延迟输入信号。某些复制寄存器或所添加的寄存器(以及某些实现方式中的其它存储器)的内容保持初始条件,所述内容为那些寄存器中被冻结的一组延迟输入信号的开头处或附近的(以及其它存储器)的内容。因此,所述延迟输入信号是导致触发条件的输入信号。所述初始条件和输入信号可以被提供给模拟器,以模拟(特别地)导致触发条件的感兴趣电路的工作。
所述初始条件和输入信号通过JTAG接口16被提供给计算机20中的模拟器。通常,数据不是从接口被直接提供给模拟器,而是通过另一软件程序。所述模拟器包括在处理器22中运行的存储在存储器24中的软件程序。借助于初始条件和输入信号,所述模拟器可以详细地模拟芯片并尝试发现错误或其它感兴趣事件的性质。因此,可以将模拟器用于调试及其它目的。进行编程和配置的计算机不一定是进行模拟的计算机。其它实施例不包括门阵列且使用除JTAG之外的接口。
为了分析故障,常常需要早期的数据传播,因为一旦发生故障,数据已显著地改变,从而掩蔽了故障的原因。此外,数据处理难以反向运行,因此,不能执行数据回溯以获取较早的数据。在示例性配置中,制造具有延迟输入的新芯片模块,从而提供错误的早期迹象,以允许逐步进行模拟。
图2示出一种系统,其中计算机30包括用于向制造设备40提供芯片制造文件以制造芯片(或模块)38的程序。图1的组件可以包括多于一个的计算机和制造设备的位于不同的位置并在不同的时间工作的各种部件。在制造芯片38之后,使该芯片38工作以收集与其中发生错误或另一感兴趣事件的电路相关的初始信号和输入信号。该初始条件和输入信号通过接口42被提供给计算机30中的模拟器。所述模拟器包括在处理器32中运行的存储在存储器34中的软件程序。借助于初始条件和输入信号,模拟器可以详细地模拟芯片,并尝试发现错误或其它感兴趣事件的性质。提供制造文件的计算机不一定是进行模拟的计算机。
以下是与某些实施例相关的过程的概述。然而,在其它实施例中,细节可以不同于所列内容。设计者可以在源代码中选择一个或多个模块进行分析。可以选择某些信号以用作用于调试硬件的触发器。这些信号的状态可以由设计者来指定,以定义用于触发调试硬件的精确条件。调试硬件被合成,生成网表,且最终设计完成逻辑配置(place and route)。各种软件可用于这些过程。例如,可以将合成工具用于硬件合成。然后将设计放置在诸如FPGA或ASIC的硬件器件中。运行硬件。一旦已检测到触发条件,则所有调试硬件连同用于该调试硬件中的延迟的先进先出电路(FIFO)一起被冻结。由控制计算机来获取FIFO和调试硬件的状态。此信息被变换成可以被软件模拟器使用的形式。所述设计被导入模拟器,并施加初始条件信号和输入信号。设计者或其他人员可以使用模拟器来调试硬件模块。在不同的实现方式中,存在不同程度的人为参与和程序实现的自动化。
本文所讨论的电路可以用于多种类型的芯片,举例来说,包括微处理器、嵌入式控制器、芯片组、蜂窝电话芯片。
图3是生成用于配置或制造芯片的文件的流程图。计算机20或30中的程序生成电路功能和布局或对电路的其它描述的文件(方框50)。在某些情况下,所述描述可以包括比电路的功能和布局的完整描述少的内容。修订文件或生成新文件以包括对应于在本公开的第I.-VI.节中描述的一个或多个解决方案的电路(方框52)。例如,程序对电路(被称为设计电路或原始电路)的描述进行分析,并使用在分析中获得的至少某些信息来生成用于电路的修订后的文件或新文件的附加描述。而且,除对设计电路的描述之外,还可以使用各种其它信息来生成新电路。描述的分析量取决于各种因素,包括多少信息被单独地提供给分析程序和程序必须为其本身收集多少信息。分析量还可以根据对程序给出的特定命令而变化。某些命令包括比其它命令更多的分析。分析的范围可以根据实现方式及其它情况而从大范围变为相对很小。
可以由与在方框50中相同的程序或由不同的程序来得出修订后的文件。例如,修订后的文件可以指定被复制的电路组件。基于该修订后的文件而生成芯片配置或制造文件(方框54)。然后,响应于该配置或制造文件来配置或制造芯片(方框56)。
存在各种用于表示本文所述的电路的技术。以下是简化概述。例如,可以编译电路的文本表示(例如以HDL)以生成第一寄存器传输级(RTL)网表。RTL网表可以示出寄存器及其它逻辑,该寄存器及其它逻辑被互连以通过在文本表示中描述的电路显示数据流。编译程序的示例是逻辑合成编译程序,其通常是在通用计算机系统上运行的计算机程序,虽然在某些实施例中,计算机系统可以是特定专用计算机系统。逻辑合成编译程序的示例是来自加利福尼亚州桑尼维尔的Synplicity公司的程序。
可以使第一RTL网表关联(映射)到诸如FPGA的目标架构,以生成用于调试电路的模型板。通常由集成电路的提供商来确定所述目标架构。目标架构的示例包括来自诸如Altera、Xilinx、Lucent Technologies、先进微器件(AMD)以及莱迪思半导体等供应商的FPGA和复杂可编程逻辑器件。关联(映射)操作可以将期望电路的RTL级描述转换成使用目标架构的构造块实现的等效电路。可以生成技术专用网表。随后可以使用逻辑配置软件工具来生成目标架构中的电路的设计。
调试过程可以识别电路中的有问题区域。设计者可以使用本文所述的解决方案,诸如选择复制电路的一部分以进行进一步分析。在本示例中,复制所选电路部分,并添加相关电路。可以重新编译该电路的文本表示以生成修订后的(例如第二)RTL网表。可以使该修订后的RTL网表关联(映射)到目标架构,诸如FPGA、ASIC或诸如微处理器、通信芯片等的其它芯片。本发明不限于这些细节。可以使用各种其它程序。例如,复制电路的结合不必始终返回到源代码描述。复制电路的实现可以在RTL网表中进行,或者可以通过逐步修改或添加设计RTL网表而实现。
图4是用于如本文所描述的那样使芯片工作以获得初始条件和输入信号的流程图。使芯片工作(方框60)。响应于触发条件而生成触发信号(方框62)。根据本公开的第I.-VI.节中所描述的一个或多个解决方案来获得初始条件和输入信号(方框64)。所述初始条件和输入信号被提供给芯片接口(方框66)。
图5是用于使用初始条件和输入信号来执行模拟的流程图。已根据本公开的第I.-VI.节中所描述的一个或多个解决方案获得的初始条件和输入信号被接收以供模拟器使用(方框70)。基于所述初始条件和输入信号来执行模拟(方框72)。通过模拟来识别关于与触发条件相关的电路工作的细节(方框74)。模拟器可以使用各种测试或程序。
图3-图5的流程图仅仅是某些实施例的概述。其它实施例可不遵循该流程图或包括其不同细节。在实际的实现方式中,可以使用各种附加程序和结构。
本文所使用的术语“设计电路”、“设计存储器”和“设计寄存器”指的是在利用本公开所描述的技术之一对电路(或对附加电路的描述)进行分析和添加之前,作为初始设计(或对设计的描述)的一部分的电路、存储器和寄存器。设计电路可能被称为原始电路或起点处的电路。然而,设计电路可以包括众所周知的特征。如下文所解释的那样,电路(或对电路的描述)添加的示例包括逻辑复制和相关电路、快照寄存器和相关电路、以及复用器和解复用器及相关电路。
II.逻辑复制解决方案
用于获得初始条件信号和输入信号的逻辑复制解决方案包括对逻辑进行复制,以提供设计逻辑未提供的信息。图8(类似于美国专利6,904,574的图3)示出了具有复制逻辑的系统。图8提供包括设计逻辑块202和复制逻辑块204的芯片中的电路的示例。例如,假设原始设计的调试表现出逻辑块202存在问题。因此,选择逻辑块202,并复制作为复制逻辑块204,以实现问题的进一步分析。例如使用图3的程序(方框52)来生成复制逻辑204。延迟逻辑212(诸如FIFO)使提供给复制逻辑块204的输入信号延迟。延迟逻辑212可以包括诸如FIFO的典型电路逻辑和元件,其促使输入信号在比输入将到达设计逻辑块202的时间稍晚的时间到达复制逻辑块204。这样,可以在看到设计逻辑块202中发生错误之后,对该错误进行分析,因为该错误将在稍后时间出现在复制逻辑块204中。
触发逻辑230被插入电路中,以设置使电路的复制部分暂停的触发条件。还可以插入一个或多个控制器以控制触发逻辑。在本示例中,触发逻辑230具有两个输出:断点信号218,其在被声明(asserted)时能够使得时钟控制逻辑214停止运行;以及延迟暂停信号,其在被声明时能够使得延迟逻辑212停止运行。所述延迟暂停信号还促使复制逻辑204将其寄存器和存储器内容冻结。
时钟控制逻辑214控制提供给复制逻辑块204的时钟信号。时钟控制逻辑214可以包含允许提供给复制逻辑块204的时钟信号暂停以便在存在某些条件时使复制逻辑停止执行的典型逻辑和电路元件。时钟控制逻辑214还可以允许逐个时钟地单步遍历复制逻辑,以分析错误。可以设置断点218以便在存在某些条件时使时钟暂停,诸如在发生触发条件时。在某些实施例中,在正常工作期间,对电路进行时钟控制的系统时钟流过时钟控制逻辑214中的锁存器,并充当复制逻辑块204的时钟。断点信号可以将时钟切换到系统时钟的锁存版本,这可以由时钟控制信号来控制,以允许时钟信号暂停和逐个周期地单步递进。可以从复制逻辑204中的寄存器和存储器获得初始条件信号,且可以从延迟逻辑212获得输入信号。本发明不需要包括所示和所述的细节,而是可以以其它方式来实现。
在某些实施例中,本发明公开了实现逻辑复制解决方案的各种创新方式。在一种实施例中,可以提供附加串行电路以便连续地从复制模块接收数据。例如,图6包括芯片100,芯片100包括设计电路104和复制模块106。设计电路104包括被测试设计逻辑110和附加逻辑112。被测试设计逻辑110可以被称为设计模块。被测试设计逻辑110和附加逻辑112是意图在感兴趣芯片的生产版本中使用的电路。当然,在设计的生产版本完成之前,可以修改设计电路。在本示例中,被测试设计逻辑110包括寄存器116和118,且可以包括多种其中组件,诸如附加寄存器、存储器、各种电路以及某些实施例中的固件。复制模块106包括被测试复制逻辑130,该被测试复制逻辑130包括类似于被测试设计逻辑110中的电路,包括类似于寄存器116和118的寄存器138和140。
在工作中,设计逻辑110和复制逻辑130均接收相同的输入,但复制逻辑130接收输入的延迟版本。例如,设计逻辑110从导体114接收输入信号(包括数据输入),并从附加逻辑112接收附加输入信号(包括信号中的附加数据)。复制逻辑130通过延迟电路134从导体114接收输入信号,并通过延迟电路136从附加逻辑112接收附加输入信号。在图6的示例中,延迟电路134和136是FIFO,该FIFO具有等于输入信号的宽度的宽度,以及等于用于给定类型的情况和/或信令的期望延迟的深度。由来自导体126的一个或多个时钟信号对设计逻辑110、设计逻辑130、FIFO 134以及FIFO 136进行时钟控制。虽然只由一个时钟信号来对FIFO 134和136进行时钟控制,但也可以由多于一个的时钟信号来对逻辑110和130进行时钟控制。可以存在由一个或多个其它时钟信号来进行时钟控制的图6未示出的附加FIFO。
所述输入信号可以包括不同类型的信号,包括数据、地址、控制以及其它信号。有时,这些输入信号仅被称为数据信号,虽然它们可以不仅仅包括传统数据。设计和复制模块可以包括存储器和寄存器。
例如,使用图3的程序(方框52)来设计复制模块106。程序的不同实现方式具有不同程度的设计者参与。例如,在某些实现方式中,设计者下命令,且程序生成复制模块。在其它实现方式中,设计者给出关于复制模块的更多细节,并且在某些实现方式中,设计者可以交互地参与复制模块的设计。
在工作中,触发逻辑122监视设计逻辑110。当发生被称为触发条件的特定感兴趣事件时,触发逻辑122向FIFO 134和136提供使FIFO停止响应时钟信号的触发信号。该触发信号还前进到复制逻辑130,以冻结寄存器138和140中的寄存器值。触发逻辑122还向控制电路124提供促使控制电路124进入控制模式的信号,在控制模式下,使得FIFO 134和136的内容可作为用于模拟器的输入信号,且使得复制逻辑130的某些内容可作为用于模拟器的初始条件。可以将寄存器138和140链接在一起以提供初始条件。图6示出了其中也受到触发逻辑的影响的寄存器138和140在控制逻辑124的控制下通过复用器144、寄存器146、复用器148以及寄存器150来提供初始条件信号的示例。复用器144还可以接收JTAG链的输入。控制电路124可以是JTAG控制电路。控制电路124或其它电路可以考虑FIFO 134和136的输出与寄存器146和150的内容之间的任何时间延迟。复用器144、148和寄存器146、150的电路组合仅表示在芯片之外获得初始条件的特定方式。可以使用其它电路,诸如用于扫描并获取复制逻辑130中的寄存器值的串行扫描电路。
在一种实施例中,复制模块可以位于相同或不同芯片中。图7示出了设计电路104、触发逻辑122和控制电路124可以在芯片160中,而复制模块106可以在芯片162。将复制模块放在不同的芯片中的原因是在芯片160中可能没有用于该复制模块的足够空间。
III.某些实施例的附加特征
以下是某些附加特征,除非另外指示,否则其可以与三个主要解决方案(在第II、IV和V节中)中的每一个的某些实施例相结合地使用。然而,每个主要解决方案中的其它实施例不包括这些特征中的一个、某些或全部。此外,还可以脱离主要解决方案而使用这些附加特征中的某些特征。
A.功能等效但与设计电路不同的复制电路
在一种优选实施例中,复制模块保留设计模块的功能,但具有与设计模块不同的用于促进调试或用于简化复制电路的不同电路。复制电路可以在收集条件或输入以帮助分析潜在故障的焦点方面不同于设计电路。
复制模块可以具有电路修改方面的自由以促进调试。例如,在复制模块中可以抑制电路优化。复制模块的目的是提供用于调试模拟的初始条件和输入,因此,实际上可能出于调试的目的,需要在效率方面看起来无关的电路。一方面,在复制模块中执行硬件替代。例如,为了便于调试,可以用复制模块中的普通电路来代替设计模块中的专有电路。提供对未暴露状态的访问可能是困难的任务,硬件替代在提供对未暴露状态的访问以获得设计模块中的黑盒子(black box)的内部状态时可能特别有用。对诸如内部状态的未暴露状态的访问可以包括提供控制电路,以获取诸如存储器中的存储数据等模块内部状态。在另一方面,可以将设计模块划分以便复制模块只包含设计模块的一部分,或者省略设计模块的某些部分。所述划分还可以包括从设计模块内部提供给复制模块的多个延迟电路,例如以便解决各种时序问题。
B.使初始条件与模拟器中的HDL代码相关联
某些实施例包括使来自芯片的至少某些初始条件的值与模拟器中的HDL代码内的特定区段(location)相关联(亦即映射或关联)。所述特定区段可以是HDL中的对象,诸如信号、寄存器、导体、存储器等。在某些实施例中,这包括阻止用来将HDL设计关联到网表中的编译程序软件内的顺序优化。应避免的顺序优化的示例包括但不限于重新定时、管线化(pipelining)、布置复制(placement replication)和状态分配。在关联中使用的编译程序软件可以按照某一次序生成模块中的所有存储器和储存元件的列表,所述次序可以与模拟器处理器获得初始条件值的顺序相关联(映射或相关)。存储元件的名称可以被直接关联到可与软件模拟器兼容的信号实例。
与图1、图6和图9相结合地提供了一种示例。图1中的计算机20内的一个或多个程序生成用于生成图6的电路的电路功能和布局的文件(包括HDL代码形式的文件)(图9的方框240)。计算机20内的同一或另一程序修改并优化功能和布局设计(图9的方框242)。本文所使用的术语“优化”仅仅意指改善,而不一定达到数学最佳效果。配置或制造包括图6的电路的芯片(图9的方框244)。如结合图6所述那样,响应于触发信号,收集初始条件和输入信号,并使其可用于可以在计算机20或另一计算机上运行的模拟程序。使用关联技术来使所收集的初始条件与模拟器中的HDL代码内的特定区段相关联(图9的方框246(1))。例如,所述关联可以是用于FPGA的关联(映射)网表与HDL源代码之间的关联。当然,在图9的方框之间可以存在各种中间文件和修订后的文件。
在关联技术中可以使用各种试探法。一种此类试探法是电路组件的命名。可以建立扫描链中的初始条件状态的排序与HDL代码中所建立的数据相关元件的名称和区段之间的联系。源代码可以被用于所复制的所有逻辑。在黑盒子的情况下,例如没有内部器件的详细信息的电路块,可以将其输出作为到复制设计中的附加输入来处理。来自原始设计中的黑盒子的输出可以穿过FIFO到达复制电路中的那些输入。合成工具可以支持基于每个模块来禁用重新定时和顺序优化。其它实施例不包括本节的细节或包括其各种变体。
某些实施例提供一种通过抑制用来将HDL设计映射到网表中的编译程序软件内的顺序优化而将从硬件收集的初始条件的值与HDL代码内的特定区段相关联的方法。在映射中使用的编译程序软件将按照某一次序创建模块中的所有存储元件的列表,所述次序可以与处理器获得初始条件值的顺序相关联。存储元件的名称可以被直接关联到与软件模拟器兼容的信号实例。
C.生成硬件替代列表
某些实施例包括通过生成所有硬件替代的列表(该替代由编译程序在生成网表时执行)来关联从硬件收集的初始条件的值。该替代列表用来从物理实现(physical implementation)到与软件模拟器兼容的HDL级表示追溯信号名称和值。在一种实施例中,可以用等效电路来取代专有模块。所述等效电路可以例如通过提供对未暴露状态的访问来促进调试。
D.访问内部状态
当要复制存储元件时,精确的复制品可能不可用于调试目的,因为原始存储元件通常不访问内部状态。也就是说,原始存储器具有某些未暴露状态。复制存储器通常将提供对那些状态的访问。复制存储器可以是替代存储器(硬件替代的一种示例),因为其包括允许访问未暴露状态的附加结构。复制存储器可以包括允许访问存储器数据的控制电路。提供关联(映射)以关联模拟器中的HDL代码中的替代存储器。图9的流程图可以特别地应用于方框246的部分(2)。
图10示出了替代存储器。复制随机存取存储器(RAM)254可以与设计(原始)RAM相同。控制电路252在触发条件之后冻结RAM 254,并且还允许通过扫描链256对RAM 254的内容进行时钟输出(clock out),以便例如向外提供串行数据至控制计算机。来自复制模块的地址和来自复制模块的数据被提供给控制电路252和RAM 254。在某些实施例中,必要时,合成工具可以调用例如C库中的函数,该函数将返回指向包含替代RAM设计的网表的指针。
某些实施例包括电路和方法,该电路和方法通过替代包含诸如图10中的控制电路252等访问控制逻辑的专用RAM结构来处理复制逻辑中的各种形式的RAM。所述访问控制逻辑允许专用RAM结构在所有正常读/写信号和时钟被启用时像正常RAM一样工作。访问控制逻辑允许一旦检测到触发条件,则冻结RAM的工作。然后,访问控制逻辑允许将RAM的内容扫描输出到控制计算机。访问控制逻辑还可以包括允许RAM的内容的串行输出的扫描链。该RAM内容被用来收集RAM的初始条件,以用于软件模拟。其它实施例不包括本节的细节或者包括其变体。例如,还可以将RAM视作黑盒子。RAM的输出被馈入到延迟FIFO,该延迟FIFO向输入模块馈送类似于输入的项目。在不能推断RAM结构的情况下,例如RAM块(BlockRAM),这种方法是优选的。
某些实施例包括处理复制逻辑中的各种基本专有逻辑模块(例如,XilinxSRL16移位寄存器和Altera Altshifttap移位寄存器)的电路和方法。这包括用允许访问那些模块的内部状态的逻辑等效电路来替代这些专有模块。可以由计算机来扫描这些内部状态,并在软件模拟期间将其用作初始条件。例如,可以用具有可访问内部状态的等效电路来代替Xilinx SRL16移位寄存器(该移位寄存器表示具有用于连接到外部电路的输入和输出引脚的专有模块)。其它实施例不包括本节的细节或者包括其变体。
E.形式验证流技术
过去,已使用形式验证流技术来确认实际设计与HDL代码中的描述匹配。某些实施例包括通过使用形式验证流技术来关联来自硬件的初始条件的值。在图9中特别地通过方框246(3)提供了一种示例。其它实施例不包括此特征或者包括其变体。
F.划分
在一种实施例中,复制模块包括从设计模块内部到复制模块的各个位置的附加延迟电路。例如,第一延迟电路将设计模块的输入连接到复制模块的输入。第二(和可选的其它)延迟电路从设计模块的任何位置连接到复制模块中的适当位置。附加延迟电路可以提供模块之间的精确时序,尤其是对于多时钟域。
在某些实施例中,设计模块被划分成多个设计段。一方面,所述设计段可以被全部复制,每个复制段通过延迟电路连接到其各自的设计段。另一方面,只复制设计段的一部分,每个复制段通过延迟电路连接到其各自的设计段。在设计模块中,部分设计段可以被相互分离或嵌入。另一方面,不对设计段的至少一部分进行复制,并且被复制的每个设计段向延迟电路提供输出信号,其中延迟电路的输出被提供给复制段各自的位置。
G.黑盒子
设计模块可以被划分成段,且其中至少一个段(例如,黑盒子模块)未被复制。电路设计常常包括黑盒子,例如具有未知内部状态或行为的模块,诸如IP块或专用逻辑模块。本发明的某些实施例包括在不需要详细内部电路的情况下处理黑盒子和各种专有逻辑模块的电路和方法。在某些实施例中,具有未知行为的专有逻辑未被拷贝到复制逻辑中。作为替代,这种方法将设计模块中的专有模块的输出作为到复制逻辑内的其各自位置的附加输入来处理。例如,图20包括设计模块360和复制模块362。设计模块包括逻辑364,逻辑364的输出被提供给黑盒子366。黑盒子逻辑366为执行未知的各种功能的电路,虽然输入和输出信号是已知的。黑盒子逻辑366的输出被提供给设计模块360中的逻辑368,并且还被提供给复制模块362中的延迟电路FIFO 376以负责(account for)总的复制逻辑延迟。FIFO 376的输出被提供给逻辑378。在这方面,黑盒子逻辑366未在复制模块362中被直接复制。在图20的示例中,逻辑374的输出未被提供给逻辑378。在某些实施例中,逻辑374未被复制,且FIFO 376的输出被连接到其在复制模块内的各个输入位置。响应于触发条件,FIFO 376的内容被计算机获得,并用来在软件模拟中模拟专有逻辑366的输出。在一种实施例中,提供了延迟电路(未示出)以便将逻辑364的输入与复制逻辑374的输入相连。其它实施例不包括本节的细节或者包括其变体。
H.多时钟域
可以基于时钟域(每个时钟域接收单独的延迟输入)来划分设计模块。某些实施例包括处理由两个离散异步时钟进行时钟控制的两个逻辑电路之间的数据传输时序的电路和方法。此电路和方法可以包括使用“同步触发器(synchronizer flip-flop)”来对FIFO进行馈送,该FIFO的深度由两个时钟的相对频率来确定。图18示出设计模块302中的同步触发器312。所述电路和方法可以被扩展至用来使交织于(crossing)任何数目的时钟域之间的一个或多个信号同步。
许多设计使用多个独立时钟。当信号通路从一个时钟域跨越到另一个时钟域时,会出现时序问题。图18示出了信号从时钟1域转到时钟2域的示例。在设计模块302中,由时钟1进行时钟控制的触发器306接收到数据信号。触发器312的输出被提供给逻辑308,逻辑308是时钟1域的一部分。当然,可以并行地存在更多的数据信号。因此,触发器306和触发器312均表示多个并行触发器。逻辑308的输出被提供给由时钟2进行时钟控制的同步触发器312。触发器312的输出被提供给作为时钟2域的一部分的逻辑314。
复制模块304也接收时钟1和2,以便到复制模块的数据准确地仿真设计模块中的数据。复制模块304包括接收数据并由时钟1进行时钟控制的触发器326。该数据可以是被触发器306接收到的数据且可以被也可以不被延迟电路(未示出)延迟。触发器326的输出被提供给作为时钟1域的一部分的逻辑328。逻辑328的输出被提供给由时钟2进行时钟控制的同步触发器332。由合成工具来识别穿过时钟域边界的所有信号。
在图18的示例中,同步触发器332的输出未被传递到作为时钟2域的一部分的逻辑334(该逻辑334由时钟2进行时钟控制)。然而,在某些实施例中,触发器332的输出被用来收集电路的状态,例如作为寄存器312的内容的指示。在某些实施例中,不包括同步触发器332。
穿过时钟域的信号使用设计模块302中的同步器312。触发器312的输出在其被由时钟2进行时钟控制的FIFO 320延迟之后,提供给逻辑334。这保证逻辑334将得到与逻辑314相同的数据。响应于触发条件,FIFO 320被冻结,以便不接受新数据且其内容被扫描作为扫描链的一部分,以获得用于模拟器的输入信号。可以从逻辑334中的寄存器和存储器获得初始条件信号。
可以由与数据被时钟输入到FIFO中的相同时钟来对FIFO进行时钟控制。对于一个时钟域来说,FIFO的深度可以不同于另一域中的另一FIFO。可以计算该深度以便对所有域中的所有时钟提供相同的延迟时间量。一旦检测到触发条件,则可以冻结用于在时钟域之间载送信号的FIFO。FIFO的内容可以被时钟输出到扫描链以供在模拟中使用。
当设计中存在多个时钟时,可以遵循特定方针以保证域之间的时序是正确的。例如,在图19中,数据信号通过时钟1信号(时钟1)时钟而被输入到设计模块340中。在设计模块340和复制模块348内部,存在时钟2的时钟域流失(running off)。数据信号还通过深度N1的输入FIFO 344被提供给复制模块348。来自设计模块340的数据通过深度N2的域间FIFO 346被提供给复制模块348。复制模块346的总延迟可以取决于时钟1的周期和输入FIFO 346的深度N1。通常,延迟电路的总延迟与时钟的周期成反比。域间FIFO 346的目标可以是提供如下所述的延迟。假设时钟2的周期是已知的,则可以如下所述这样计算深度N2。如果P1是时钟1的周期且P2是时钟2的周期,则可导出N2:
(P1×N1)/(P2×N2)=1或如在实践中一样接近于1。
如果P1×N2能被P2整除,则:
N2=(P1×N1)/P2。
否则,N2可以是下式的模数部分:
N2=((P1×N1)/P2)+1。
N2可以具有足够的延迟量以补偿由输入FIFO引入的延迟。然而,仍存在不确定性,即来自FIFO 346的输出的数据是什么样的。根据在模拟开始时对两个时钟进行的相对校准,可能需要再一次对时钟2域中的复制硬件进行时钟控制。如果满足以下标准,则对于复制模块348需要再一次对时钟2进行时钟控制。使Y是数字:
Y=((P1×N1)/P2)+1
使T表示时间段:
T=fract(Y)×P2,
其中fract(Y)是Y的小数部分。然后,给定延迟D,其中T<D<P2,可能需要对硬件时钟2进行时钟控制再多一个周期。否则,每当D落在0与T之间时,可能不需要进行附加的时钟控制。
可能不能确定时钟1和2的活动边沿(active edge)之间的关系,直至已完成捕捉之后。因此,可以遵循以下顺序:过程开始;触发器条件发生;确定时钟的相位关系;如果满足用于时钟2的延迟条件,则发送时钟2的脉冲;以及收集寄存器和RAM的状态。其它实施例不包括本节的细节或者包括其变体。
I.用较快时钟对较慢时钟采样
某些实施例包括通过直接在设计中用较快时钟对较慢时钟采样来计算两个离散异步时钟之间的关系的电路和方法。如果每个时钟的频率和占空因数是已知的,则可以通过调整较慢时钟的偏移以与采样数据模式相匹配来计算一个时钟与另一个时钟之间的关系。此过程可以用来确定两个或更多时钟之间的关系。将每个较慢时钟信号与最快(最高频率)时钟信号相比较。请注意,虽然时钟一般是异步的,但在特定情况下,可以证明两个或更多时钟是同步的-但是所述电路和方法对此并无要求。
在多时钟设计中,每个时钟的频率是已知的。合成工具可以为每个域提供此信息。活动时钟边沿相互之间的关系在数据捕捉开始时是未知的。例如,在图6中,假设在导体126上向设计逻辑110和复制逻辑130提供图12的时钟信号(时钟)1和时钟信号(时钟)2。在时间t0,当导体126和114上的时钟和数据被提供给设计逻辑110时,时钟1和2具有特定的相位关系。表示此相位关系的一种方式是时钟1的上升沿与时钟2的随后的下一个上升沿之间的时间。在时间t0+延迟,导体114上的数据通过延迟电路134到达复制逻辑130。在时间t0+延迟,导体126上的时钟1和2之间的相位关系通常将与在时间t0时不同。
可以通过用设计中的最快时钟对那些时钟采样来分析每个时钟的时钟边沿,从而估计所述相位关系。时钟样本可以被存储在FIFO中,该FIFO可以被扫描,并由诸如电路、模拟器或其它软件等分析逻辑或模块来分析。在大多数情况下,增加样本的数目将减小边沿周围的模糊窗口(window ofambiguity)。可以以不同的方式来处理对时钟的采样。在所有时钟均具有例如至少约为50%的占空因数的情况下,由最快时钟直接对经采样的时钟进行采样,且结果被放入FIFO中。为了提高准确度,可以在最快时钟的上升沿和下降沿两者上对时钟采样。
例如,在图11中,触发器270和272接收时钟2作为输入。由时钟1来对触发器270进行时钟控制且由通过反相器274的反相时钟1来对触发器272进行时钟控制,以便触发器270在时钟1的上升沿上对时钟2采样且触发器272在时钟1的下降沿上对时钟2采样。触发器270和272中的采样值被时钟输入到FIFO 276中,FIFO 276可以被扫描,并由诸如电路或程序278等分析逻辑或模块来分析以确定时钟布置(clock placement)。在FIFO 276与电路或程序278之间可以存在附加电路。
图12提供时钟1和2的示例,且时钟2通过时钟1的上升沿和下降沿而被采样。本权利要求的电路和方法包括多于两个的时钟。例如,可以由时钟1以与时钟2相同的方式对类似于时钟2、但与时钟1和2不同相(并且可能还处于不同频率)的时钟3进行采样。如上文所解释的那样来确定第一和第二时钟信号的相位关系,该关系是至少一个特定时间(例如第一时间)。针对至少一个特定时间(例如可以与第一时间相同或不同的第二时间)来确定第一和第三时钟信号的相位关系。其它实施例不包括本节的细节或者包括其变体。
J.用较快时钟对根据较慢时钟生成的信号采样
某些实施例包括通过在较快时钟的采样周期内检测较慢时钟的每个边沿跳变(edge transition)来计算两个离散异步时钟之间的关系的电路和方法。如果每个时钟的频率和占空因数是已知的,则可以通过调整较慢时钟的偏移以与所检测的边沿数据模式相匹配来计算一个时钟与另一个时钟之间的关系。此电路和方法可以用来确定两个或更多时钟之间的关系。
处理时钟的此第二种方式可适用于将被采样的时钟具有例如基本小于50%的占空因数的情况。如果占空因数过小,则图11的采样器可能不能发现某些样本、乃至单个样本。例如,图13示出了具有远远小于50%的占空因数的时钟1和时钟2。如果在图11的电路中由时钟1来对时钟2采样,则结果可能如图13所示,其中输出是恒定的,因为时钟2的占空因数太窄以至于不能被时钟1捕捉。没有捕捉到可以用来校准时钟的有效数据。
与图11的电路相反,作为直接对时钟采样的替代,可以使用时钟来驱动例如图14所示的二次分频电路。这得到只有在检测到活动边沿时才改变的信号。参照图14,由时钟2(Clk2)进行时钟控制的触发器282的负(Q*)输出被反馈到其输入。触发器282的正(Q)输出作为输入被提供给由时钟1进行时钟控制的触发器284。触发器284的输出作为输入被提供给也由时钟1进行时钟控制的触发器286和异-或(XOR)门288。触发器286的Q输出也被提供给XOR门288。XOR 288的输出被提供给FIFO以供稍后分析。当在时钟1的采样周期期间出现活动时钟2边沿时,XOR门的输出为高。这产生如图15所示的结果,该图显示了时钟2的每个活动边沿映射到由时钟1域进行时钟控制的的正电平输出。因此,图14的电路与时钟2的占空因数无关。可以存在与时钟1(最高频率时钟)相比较的一个或多个附加时钟信号。该附加时钟信号可以是异相的,并可能具有与其它时钟不同的频率。图14可以被修改为包括附加触发器,以便电路对上升时钟边沿和下降时钟边沿进行响应。某些芯片可以具有多个采样器,某些与图11中的一样而某些与图14中的一样。其它实施例不包括本节的细节或者包括其变体。
图16和图17示出了图14和图15的可选方式。参照图16和图17,双时钟(双Clk1)是时钟1(clk1)的上升沿和下降沿上的脉冲。图16类似于图14,不同的是双Clk1被提供给触发器284和286的时钟输入端。结果得到的时序图在图17中示出,其中通过使用双Clk1进行Clk2正沿检测。还可以使用负沿检测。在电路的不同实施例中(诸如图11、图14和图16的那些及本公开所示的其它电路),可以修改电路,从而使得根据实施例在时钟信号的上升跳变处、在时钟信号的下降跳变处、或在时钟信号的上升和下降跳变处进行采样。也就是说,在某些实施例中,在上升跳变处进行采样;在其它实施例中,在下降跳变处进行采样;并且在另外的其它实施例中,在上升和下降跳变处进行采样。
K.单独FPGA或ASIC中的复制
某些实施例包括在单独的FPGA或ASIC器件中实现部分逻辑的复制的方法(诸如图3中的方法)。例如,在图6中,复制模块130与设计逻辑110在同一芯片中,而在图7中,复制模块130与设计模块110在不同的芯片中。本方法不仅仅适用于从一个芯片到另一芯片的复制,而且可以应用于从多个芯片到多个附加芯片的复制(例如2个芯片到4个芯片、3个芯片到6个芯片等)。在其它实施例中,多个芯片中的电路的复制部分可以被放置在单个芯片中或数目比原始芯片少的芯片中。例如,2个芯片中的电路的复制部分可以均被放置在一个附加芯片中,或者4个芯片中的电路的复制部分可以根据实现方式而被放置在1、2或3个芯片中。其它实施例不包括本节的细节或者包括其变体。
IV.快照解决方案
如上所述,可以使用各种快照技术来获得用于模拟的初始条件信号和输入信号。本快照解决方案不需要被调试逻辑的完整复制,并且通常包括以规则的间隔存储所选设计寄存器的快照。一种方法为设计模块中的储存元件创建具有预定深度的一系列调试储存寄存器(快照寄存器)。原始设计模块中的每个储存元件连接到一组新创建的储存元件。以周期性为基础,设计模块中的储存元件的值被选通到快照寄存器中。快照寄存器中的数据包含被测试设计模块中的寄存器在发生触发条件之前的可确定时间的初始条件。此数据随后被收集,并作为输入提供给软件模拟程序以用于调试。下面描述快照解决方案的某些实现方式。
图21示出了作为图1中的芯片14和图2中的芯片38的示例的芯片414。参照图21,芯片414包括设计存储器和复制存储器426、设计寄存器和快照寄存器428、以及在工作时从逻辑422-1……逻辑422-N接收输入信号的输入FIFO 430。所述输入信号可以包括各种形式的信号,包括数据、地址、控制以及使能信号。所述输入信号还可包括时钟信号,但该时钟信号在其它图中示出。响应于诸如错误或其它指定条件的触发条件(或事件),触发逻辑418提供促使存储器426、寄存器428以及FIFO 430中的某些或所有单元冻结其操作的触发信号。如下面详细地解释的那样,存储器426和寄存器428通过信号TdoMs和TdoRs来提供初始条件,且FIFO 430响应于来自JTAG控制器420的信号通过例如接口16向计算机20(在图1中)提供输入信号以供模拟器使用。一方面,复制存储器包含被延迟存储器输入FIFO延迟的存储器数据,意指复制存储器的内容是先前的若干时钟周期处的设计存储器的内容,所述若干时钟周期是存储器输入FIFO的长度。另一方面,快照寄存器包含规则间隔的设计寄存器的快照数据,所述规则间隔由快照脉冲来控制。
存在各种实现触发信号动作的方式。例如,所述触发信号可以包括多个信号,其中每个信号冻结不同的组件。具有多个信号的优点是可以使其被声明为用于不同的时间长度。
图22示出了设计存储器和复制存储器426中的设计和复制存储单元434-1……434-N,该设计和复制存储单元434-1……434-N接收输入信号1……输入信号N以及时钟、触发和JTAG信号。时钟信号对于每个存储单元来说可以是相同的,或者对于某些或全部存储单元来说可以是不同的。同样地,触发和JTAG信号对于每个存储单元来说可以是相同的,或者对于某些或全部存储单元来说可以是不同的。存储单元434-1……434-N提供输出信号TdoM1……TdoMN,其中的某些或全部可以用来提供初始条件信号。
图23示出了设计寄存器和快照寄存器428中的设计和快照寄存器单元436-1……436-N,该设计和快照寄存器单元436-1……436-N接收输入信号1……输入信号N以及时钟、触发和JTAG信号。时钟信号对于每个寄存器单元来说可以是相同的,或者对于某些或全部寄存器单元来说可以是不同的。同样地,触发和JTAG信号对于每个寄存器单元来说可以是相同的,或者对于某些或全部寄存器单元可以是不同的。寄存器单元436-1……436-N提供输出信号TdoR1……TdoRN,其中的某些或全部可以用来提供初始条件信号。请注意,到存储单元434-1中的输入不一定与到寄存器单元436-1中的输入匹配。此外,图21、图22和图23中的字母N的值不一定是相同的,并且在实际中通常是不同的。例如,图23中的N可以比图21和图22中的N大得多。除所示的那些之外,可以从许多寄存器提供初始条件信号。
图21、图22和图23本质上是示意性的,以传达某些实施例的某些方面,而不提供完整的电路布局。图21、图22和图23所示的那些组件之间可能存在中间电路。例如,来自逻辑422-1的相同信号不一定被直接施加于存储器426和寄存器428。其它实施例包括不同的细节。
快照解决方案与存储器和寄存器一同工作,所述存储器和寄存器接收具有相同频率的时钟信号,或接收具有不同频率的时钟。下面是在存储器426、寄存器428以及FIFO 430中的某些存储单元、寄存器单元以及FIFO接收与存储器426、寄存器428以及FIFO 430中的其它存储单元、寄存器单元以及FIFO不同的时钟信号的情况下,图21中的芯片414的示例。在以下示例中,时钟A具有高于时钟B的频率。
图24提供了设计和复制存储单元446和448的一种示例,其为图22中的单元434-1……434-N中的两者的示例。存储单元446包括设计存储器A1、存储器输入FIFO 450、再调用控制电路454、复制存储器A1以及串行输出控制电路456。存储单元448包括设计存储器B1、存储器输入FIFO 460、再调用控制电路464、复制存储器B1以及串行输出控制电路466。
设计存储器A1和FIFO 450从逻辑A1接收存储器输入信号,逻辑A1是图21的逻辑422-1……422-N中的一者或多者。由时钟A来对设计存储器A1和FIFO 450进行时钟控制。在触发条件之前,也由时钟A来对复制存储器A1进行时钟控制。再调用控制电路454从FIFO 450接收信号,并将其传递到复制存储器A1。FIFO 450的深度可以是最大再调用倒退长度,虽然在下文的解释中,倒退的实际周期数可以小于最大倒退长度,但是所述最大再调用倒退长度是可以倒退的最大周期数。一方面,最大再调用倒退长度是快照脉冲的间隔,表示快照寄存器内容的周期。然而,触发信号可以在两个快照脉冲之间的任何时间发生,因此,可以倒退的时钟周期的数目在1与最大再调用倒退长度之间变化。为了保证最小数目的倒退周期,分两阶段来设计快照寄存器(参见图25和以下说明),且FIFO 450的深度是最大再调用倒退长度的两倍。例如,对于具有两倍最大再调用倒退长度的FIFO、两阶段快照寄存器(存储1000时钟前的快照内容的阶段1,和存储2000时钟前的快照内容的阶段1)且由时钟A的1000个周期构成的快照脉冲周期,信号在时钟A的2000个周期内穿过FIFO 450。用此设计,阶段1快照内容存储触发之前的1与1000时钟周期之间的时钟周期的值。阶段2快照内容存储触发之前的1000与2000时钟周期之间的时钟周期的值。复制存储器内容存储触发之前的2000个时钟周期的设计存储器内容。
本文所使用的“时钟周期”并非必须等于时钟周期的时间段(period)。例如,根据实现方式,在双倍数据速率系统中,每时钟时间段可以存在两个时钟周期,并且在四倍数据速率系统中,每个时钟时间段可以存在四个时钟周期。然而,这对于每种实现方式是专用的。在某些实现方式中,即使是双倍数据速率或四倍数据速率时钟,时钟周期也可等于时钟信号的时间段。
同样地,设计存储器B1和FIFO 460从逻辑B1接收存储器输入信号,逻辑B1是图21的逻辑422-1……422-N中的一者或多者。由时钟B来对设计存储器B1和FIFO 460进行时钟控制,时钟B在本示例中具有低于时钟A的频率。在触发条件之前,也由时钟A来对复制存储器B1进行时钟控制。FIFO 460的深度被选择为与时钟B和时钟A的频率成比例,以便信号以与信号穿过FIFO 450相同的时间量穿过FIFO 460(虽然根据FIFO 450的频率和深度,信号以完全相同的时间量穿过也许是不可能的)。再调用控制电路464从FIFO 460接收信号,并将其传递到复制存储器B1。FIFO 450和460可以具有分别等于输入A1和B1的宽度的宽度。
请注意,设计存储器A1和B2及复制存储器A1和B1并非必须在时钟A和B的每个周期将信号写入其中,而是仅仅在满足其它条件(诸如,存在写入存储器的命令)时的那些周期才将信号写入其中。存储器可以具有使能输入(未示出)。因此,存储器输入信号A1和B2并非必须在每个时钟周期将信号写入存储器中。
当发生触发条件时,触发逻辑418(在图21中)提供促使FIFO 450和460、再调用控制电路454和464以及复制存储器A1和B1冻结(不再对时钟进行响应)的触发信号。在本示例中,如所讨论的那样,当组件被冻结时,复制存储器A1落后于设计存储器A1 2000个时钟,且复制存储器B1落后于设计存储器B1若干时钟。如下文将描述的那样,JTAG信号促使复制存储器A1和B1的某些或全部内容通过串行输出控制电路456和466作为TdoMemA1和TdoMemB1信号被写入,TdoMemA1和TdoMemB1信号是图22中的信号TdoM1……TdoMN的示例。
图25示出了两个示例性设计和快照寄存器单元476和478,其为图23中的设计和快照寄存器单元436-1……436-N的示例。寄存器单元476包括设计寄存器A1、阶段1寄存器488、阶段2寄存器492以及串行输出电路496。寄存器单元478包括设计寄存器B1、阶段1寄存器508、阶段2寄存器512以及串行输出电路516。计数器482、过零点检测电路484以及计数器阅读器和串行输出电路490为寄存器单元376和478提供服务。请注意,单个触发信号用于冻结寄存器单元476和488的某些组件。在图23中,可以存在一个触发信号或多于一个的触发信号。阶段1和阶段2寄存器可以被称为快照寄存器。寄存器单元476接收时钟A且设计寄存器B1接收时钟B,而初始条件输出TdoRegA1和TdoRegB1可以被同步。设计寄存器A1和B1将其寄存器值提供给逻辑,该逻辑可以与其它所示逻辑相同或不同。在某些实施例中,信号在时钟A和B的每个周期被写入设计寄存器A1和B1中(虽然可以重复相同的值),而在其它实施例中,只有当满足诸如使能信号的条件时,信号才被写入设计寄存器A1和B1中。
响应于时钟A的时钟周期,设计寄存器A1将来自由诸如图21中的逻辑422-1……422-N之一的逻辑提供的信号A1的比特位(bit)锁存。响应于时钟B的时钟周期,设计寄存器B1将来自由诸如图21中的逻辑422-1……422-N之一的逻辑提供的信号B1的比特位锁存。设计寄存器A1的比特位可用于逻辑和阶段1寄存器488。阶段1寄存器488中的比特位可用于阶段2寄存器492。阶段2寄存器492的比特位可用于响应于JTAG信号而工作的串行输出电路496。设计寄存器B1的比特位可用于逻辑(其可以不同于接收设计寄存器A1的比特位的逻辑)和阶段1寄存器508。阶段1寄存器508的比特位可用于阶段2寄存器512。阶段2寄存器512的比特位可用于响应于JTAG信号而工作的串行输出电路516。
虽然设计寄存器A1和B1可以分别在时钟A和时钟B的每个周期从寄存器输入信号A1和B1接收比特位,但阶段1和2寄存器488、492、508和512在它们通过来自过零点检测电路484的寄存器使能信号而被使能时,只锁存新信号。此使能如下发生。计数器482在时钟A的每个周期进行计数,并具有等于再调用长度的计数长度。在本示例中,再调用长度是计数长度1000(在本示例中,即为时钟A的1000个时钟周期)。当计数器482从计数长度倒数至零时,过零点检测电路484声明再调用寄存器使能信号,该信号使得阶段1寄存器488和508及阶段2寄存器492和512被使能。计数器482在达到零之后,回到全深计数(full-depth count)减一。因此,时钟A的每1000个时钟周期,阶段1和2寄存器488和492接收前一阶段的寄存器值。也就是说,阶段2寄存器492接收阶段1寄存器488的寄存器值,且阶段1寄存器488接收设计寄存器A1的寄存器值。因此,在过零点检测电路484提供使能信号时,阶段1寄存器488将保持设计寄存器A1的当前值,且阶段2寄存器492将保持先前的1000个时钟周期的设计寄存器A1的寄存器值。同样地,当声明使能信号时,阶段1寄存器508将设计寄存器B1的当前寄存器值锁存,且阶段2寄存器512接收阶段1寄存器508的寄存器值,该寄存器值为先前的1000个时钟A周期的寄存器B1的寄存器值。
当发生触发条件时,触发信号冻结计数器482,以使得阶段1和2寄存器488、492、508和512的寄存器值不变。作为一种示例,假设过零点检测电路482启用寄存器使能信号,以使得阶段1和2寄存器488、492、508和512被更新。然后,触发信号之后的55个时钟冻结计数器482,因此计数器的计数为1000-1-55=944。根据计数55,系统可以知道阶段1寄存器488和508中的值来自于先前的55个时钟周期,且阶段2寄存器492和512中的值来自于先前的1055个时钟周期。计数器读取和串行输出电路490提供该计数值以供控制电路使用(图25)。
图25中的触发信号与图24中相同,因此存储器A1和B1在与阶段1和2寄存器488、492、508和512相同的时间被冻结。由于存储器输入FIFO是指定数目的时钟周期的深度的两倍,所以复制存储器的内容与从触发时间之前的2000个周期起的设计存储器中的内容相同。在某些实施例中,时钟周期的数目可以由设计者指定。由于阶段2寄存器492具有从先前的1055个周期起的设计寄存器A1的寄存器值,所以JTAG控制信号通过使FIFO 450前进945个时钟周期(2000-1055=945)来使复制存储器A1的内容前进相同的时钟周期,以便将这945个时钟周期内的FIFO 450的内容通过再调用控制电路454提供给复制存储器A1。请注意,不是全部(如果有的话)这些存储器时钟周期都真正执行存储器写周期——这意味着存储器不一定在每个时钟周期都发生改变。在945个周期结束时,复制存储器A1是从先前的1055个周期起的设计存储器A1的快照。这与阶段2寄存器492和512的时钟周期时间相匹配。
图25所示的电路示出了一种示例性实施例,且其它变体在本发明的范围内。例如,可以由时钟B来对快照寄存器进行时钟控制,或者可以由没有使能端口的快照脉冲发生器来对快照寄存器进行时钟控制。
图26示出了由时钟A进行时钟控制的时钟A域输入FIFO 520和由时钟B进行时钟控制的时钟B域输入FIFO 522。FIFO 520接收被图24中的设计存储器A1和FIFO 450及图26中的设计寄存器A1接收到的存储器数据。FIFO 522接收被图24中的设计存储器B1和FIFO 460及图26中的设计寄存器B1接收到的存储器数据。FIFO 520的深度可以与图24中的FIFO 450的深度相匹配,且FIFO 522的深度可以与图26中的FIFO 460的深度相匹配。在本示例中,FIFO 520和522的输出不对设计逻辑进行馈送,但在其它实施例中可以。
FIFO 520和522响应于触发信号而停止接收输入信号。来自JTAG控制逻辑420(图21)的JTAG控制信号促使某些输入数据通过串行输出控制524而作为TdoA输入和TdoB输入被写出。触发条件之后的时间内的FIFO 520和522的内容被提供作为输入信号。在本示例中,这将是最近1055个周期的FIFO 520的输入信号和相关周期数目的FIFO 522的输入信号。在某些实施例中,这可以包括指针或其它机制,以使得FIFO 520前进945个周期以及FIFO 522前进一定量到达同一位置。
这里,可以在JTAG控制下提供复制存储器A1和B1及阶段2寄存器492和512的内容作为初始条件信号,且可以在JTAG控制下提供输入FIFO520和522的内容作为输入信号。可以存在提供初始条件信号的附加部分的附加复制存储器(或其它形式的存储器)和阶段2寄存器,并且可以存在附加FIFO以提供用于特定模拟的附加输入信号。请注意,还可以以与对上文讨论的存储器所做的相同的方式来复制用户设计中的诸如Xilinx SRL(移位寄存器)的其它存储器。在某些实施例中,可以控制通过由JTAG控制信号来操作SRL的输入而获取SRL的内容。例如,SRL的内容也可以落后于设计SRL 2000个时钟。
即使由时钟A来对图24-图26中的某些所示存储器、寄存器单元及FIFO进行时钟控制,且由时钟B来对其它各组件进行时钟控制,也不存在使不同组件同步的问题。相反,仅仅输出初始条件和输入信号以供使用。
存在可以实现快照解决方案的各种方式。例如,包括与图26的电路类似的电路的系统可以只包括单阶段的快照寄存器(亦即,只有阶段1寄存器488,而没有阶段2寄存器492)。包括与图26的电路类似的电路的系统可以包括多于两阶段的快照寄存器(例如阶段1寄存器488、阶段2寄存器492以及阶段3寄存器(未示出))。在以上示例中,FIFO 450是最大再调用倒退长度的两倍,但在其它实施例中,其可以是诸如大于最大再调用倒退长度的两倍的其它长度。
快照解决方案的一种示例性实施例包括用于设计模块的所选寄存器(或存储器或任何储存元件)的快照寄存器。一方面,复制所有寄存器。另一方面,只复制所选寄存器。复制模块还可包括例如FIFO的延迟电路,以存储设计模块的输入数据。延迟电路的深度应适用于快照脉冲的周期。如果对于每个设计寄存器存在多个快照寄存器,则延时电路的深度是多个快照周期。还可以提供用于设计模块的所选存储器部分的复制电路、用于访问存储器内容的控制电路以及用于复制存储器的输入的可选延迟电路。当发生触发条件时,存储器和快照寄存器可能不相互关联。在这种情况下,对存储器内容进行时钟控制若干时钟周期以便与快照寄存器的时序相匹配。
图27示出了可以在某些快照解决方案中使用的某些可选电路。参照图27,考虑包括诸如寄存器或存储元件的原始设计,例如触发器后面跟随着逻辑和另一触发器,类似于触发器544、逻辑548以及触发器552。提供图27的附加组件以实现快照解决方案。
输入信号被提供给触发器544和FIFO 542,其中两者都由时钟信号来进行时钟控制的。当然,可以存在许多信号通路,其中触发器544只处理其中之一。触发器544的输出被提供给逻辑548,逻辑548的输出被提供给触发器552,触发器552提供数据输出信号。触发器552和544的输出被提供给触发器554和556,触发器554和556又将其提供给触发器558和560。快照脉冲对触发器554、558、556和560进行时钟控制。在某些实施例中,设计者可以选择快照脉冲的频率。一旦检测到触发条件,则快照脉冲停止。响应于触发信号,触发器558和560的输出提供初始条件信号,且FIFO 542保持用于模拟器的输入信号。初始条件信号和输入信号可以被扫描输出到计算机或其它外部测试设备,并经重新格式化且呈现给模拟器以用于电路模拟。
快照解决方案存在的一个问题是触发条件可能在任何时间发生。同时,快照脉冲可能但不一定以规则的间隔发生。如果缓冲器深度是256,则快照脉冲将每256个时钟周期发生一次。触发可能在快照脉冲之后的第1与第255个时钟周期之间的任何时间发生。如果只存在一个触发器缓冲器,则可能存在多达255个时钟周期,但通常在触发条件之前将较少。通过加入触发器558和560,可管线传输(pipeline)另一快照周期(在这种情况下为256个周期)的快照结果,以便收集256与512周期之间的样本。FIFO 542的深度同样可以是双倍的。还可以提供附加电路以快速转发存储器内容,从而与快照寄存器的时序相匹配。
可以在具有不同于上文所示和所述的某些细节的各种其它实施例中实现快照解决方案。
快照解决方案可以与第III节中所述的特征相结合地使用。某些节的特征还可以在同一芯片中使用,但是它们可能不直接是快照方法的一部分。然而,快照解决方案的某些实施例的附加特征可以包括通过将RAM的输出路由到FIFO中来处理设计(原始)逻辑中的各种形式的RAM的方法。在某些实施例中,FIFO可以被系统计算机读取,并在软件模拟中用作来自RAM的输出。
V.时分复用器解决方案
存在各种用以实现时分复用器(TDM)解决方案的方式。本方法创建时分复用信道系统,并使用第二信道来保持延迟复制逻辑的所有寄存器和存储元件的状态。在原始设计模块中可以包括用于TDM解决方案的附加逻辑,且电路被复用器/解复用器对围绕(surrounded)。来自原始通路的数据被连接到复用器的一个输入端,而相同但通过延迟FIFO而被延迟的数据通路被连接到另一输入端。复用器将原始数据和延迟数据两者组合成同一通过设计逻辑的数据通路,所述设计逻辑通过时分复用来运行。通常,使用以两倍速度运行的时钟来对用于所述数据和延迟数据两者的设计逻辑进行时钟控制。例如,在每个偶数周期,原始数据被复用到设计模块管线中,而在每个奇数周期,延迟数据被复用输入。解复用器将数据分离回到其各自的数据流中。当检测到触发条件时,电路被冻结且延迟输出数据流处的值被捕捉而充当用于调试模拟的初始条件。
在一种实施例中,在时分复用器解决方案中,可以提供如下与触发条件相关的初始条件和输入信号。诸如通过FIFO来延迟输入信号。将输入信号和延迟输入信号复用,并提供给逻辑且随后解复用。延迟输出信号包括初始条件信号。可以在模拟器中检验输入信号以及来自延迟输出信号的初始条件信号,以便例如识别触发条件的原因。时分复用器解决方案可以被称为时间克隆方案。不需要复制逻辑,其结果是节省相当多的芯片空间和设计时间。
作为一种示例,图28示出了作为图1中的芯片14和图2中的芯片38的示例的芯片614。图29提供了用于图28的某些实施例中的某些信号的时序图,且图30提供了用于图28的其它实施例中的某些信号的时序图。
参照图28和图29,设计电路(或原始电路)包括寄存器624、逻辑638和寄存器644。为了提供初始条件和输入信号,由修订设计电路并对设计电路进行添加的至少一个程序(例如图3,方框52)来添加FIFO 628、复用器电路634、解复用器电路642、寄存器648和互连线路(interconnection)。该程序例如通过JTAG来提供对FIFO 628和寄存器648的内容的外部访问以供模拟程序使用。
寄存器624和FIFO 628接收数据输入信号(数据输入)。FIFO 628可以具有等于输入信号的宽度的宽度和对输入信号提供期望延迟的深度。寄存器可以是触发器。寄存器624提供单元(cell)(或可能的跳变之间的时间)T1i、T2i、T3i等中的信号,其中T1i意指将被输入到逻辑638中的第一数据单元。FIFO 628提供单元DT1i、DT2i、DT3i等中的信号,其中DT1i意指将被输入到逻辑638中的第一延迟数据单元。可以看出,单元T1i、T2i、T3i等和DT1i、DT2i、DT3i等的长度均是两个时钟周期。如果寄存器624和FIFO 624每隔时钟1的一个周期进行响应,则会发生这种情况。可以添加电路以促使这种情况发生。
由于FIFO 628使信号延迟,因此从FIFO 628中输出的初始延迟长度内的信号是无效数据。然而,如果直至初始延迟完成之前,未发生触发条件,则这将不是问题。为了便于说明,在图29中,通过FIFO 628实现的延迟仅仅是时钟1的两个时钟周期。然而,在实际中,延迟可能比两个时钟周期大得多。例如,其可以是1000个时钟周期或者更高或更低数目的时钟周期。
复用器634在例如奇数时钟周期期间将来自寄存器624的信号传递到逻辑638,并在偶数时钟周期期间将来自FIFO 628的信号传递到逻辑638。可以看出,从复用器634出来的信号具有是数据单元之间的跳变频率,该频率是从寄存器624和FIFO 628输出的信号的两倍。解复用器642在例如奇数时钟周期期间将来自逻辑638的信号(T1out、T2out等)传递到寄存器644,并在偶数时钟周期期间将来自逻辑638的信号(无效、DT1out、DT2out等)传递到寄存器648。通常,不能同时对寄存器644和648进行时钟控制,因此需要使一个停留(clock off)在时钟负沿。从图29中可以看出,从解复用器642出来的信号具有的单元长度是进入解复用器642中的信号的两倍。根据实现方式,可以出于各种目的来提供寄存器644的输出。响应于触发信号,FIFO 628和寄存器648冻结。通过例如JTAG接口,寄存器648的内容可以被用作用于模拟器的初始条件信号Tdos1,且FIFO 628的内容可以被用作用于模拟器的输入信号Tdos2。根据实现方式,将数据从复用器634通过逻辑638传递到解复用器642可能只花费一个时钟周期。在其它实施例中,可能花费多于一个时钟周期。在某些实施例中,在触发信号被施加于寄存器648之前可能存在一个或两个周期延迟。可以在判定哪些信号是初始条件信号时考虑该延迟。
并不是所有实施例都需要图28和图29的细节。例如,在某些实施例中,通常包含任何寄存器或状态信息的逻辑638能够处理相当于2X时钟的数据速率。在某些实施例中,也由2X时钟来对复用器634和/或解复用器642进行时钟控制。根据实现方式,其它组件也可以接收更高频率的时钟。可以使用双倍或四倍数据速率的信令。
图30提供了其中将2X时钟1信号用于进行时钟控制的图28的各种实现方式之一的时序图。在图30中,T1i、T2i等及无效、DT1i、DT2i等信号单元的长度等于时钟1的周期。复用器634提供信号T1i、无效、T2i、无效、T3i、DT1i、T4i、DT2i等,其中,这些单元具有等于2X时钟1的一个周期的长度。T1out、T2out等及无效、无效、DT1out、DT2out信号具有长度等于时钟1的周期的单元。在某些实施例中,图29和图30的信号在技术上不包括单元,但附图仍然示意性地示出了位于可能的跳变之间的时间。
图31示出了由时钟1进行时钟控制的时分复用器电路650和由时钟2进行时钟控制的另一时分复用器电路652。时钟1和2可以是异步的,且具有不同的频率。可选地,时钟1和2可以是相同的,或具有不同的频率,其中一个频率是另一个频率的整数倍。电路650与图28中的电路620相同,但是添加了对下降沿进行响应的寄存器630。寄存器630是可选的,其仅仅示出另一种可选方式。电路652包括寄存器654、接收输入信号2(数据输入)的FIFO 658以及(在某些实施例中)寄存器660。复用器664将来自寄存器654和来自寄存器660的信号复用,并将其提供给逻辑668。解复用器672接收来自逻辑668的输出信号,并将其解复用以便向寄存器674和678提供信号。当声明触发信号响应于触发条件时,FIFO 658和寄存器678被冻结,并提供用于模拟程序的输入数据和初始条件。如结合图28所述,可以由具有不同频率的时钟来对时分复用器电路620的不同组件进行时钟控制。同样地,可以由具有不同频率的时钟对时分复用器电路650和652进行时钟控制。
图32示出了时分复用器电路的另一实施例。触发器寄存器714、逻辑720和寄存器730为设计电路的一部分。提供图32的附加电路是为了收集与触发条件相关的初始条件和输入信号。在某些实施例中,由程序来自动设计图32(以及其它图)的附加电路。在不同的实现方式中,在此过程中存在不同的电路设计者参与。
图33是图32的电路的时序图。参照图32和图33,输入信号(数据输入)T1、T2、T3、T4等被复用器710和FIFO 704所接收,该FIFO 704通过信号TD1 TD2、TD3、TD4等将延迟数据提供给复用器710。FIFO 704具有通过信号接收多重并行数据的宽度。由2X时钟信号对触发器寄存器712和714进行时钟控制。由二次分频电路706导出1X时钟信号(可选地,可以通过将1X时钟乘以2来生成2X时钟)。1X时钟信号对FIFO 704、复用器710和解复用器724进行时钟控制。在一种优选实施例中,可以由2X时钟对逻辑720进行时钟控制,但在其它实施例中,由1X时钟对其进行时钟控制。可以由1X时钟(或者在其它实现方式中由2X时钟)对寄存器730和732进行时钟控制。作为示例,在每个奇数周期中,数据被复用输入,而在每个偶数周期中,延迟数据被复用输入。复用器710的输出(T1、TD1、T2、TD2、T3、TD3)被提供给寄存器712(Q1)以使输出延迟2X时钟的一个周期,并将其提供给寄存器714,寄存器714同样地使其延迟2X时钟的另一周期。在任一时刻,管线化(pipelined)寄存器712和714包含来自输入至复用器710的数据输入和延迟数据输入这两者的数据。
逻辑720可以提供相同频率、但被进一步延迟的输出(T1d、TD1d、T2d、TD2d等)。解复用器724可以提供数据输出信号(T1d、T2d、T3d等),以及半频率处的延迟数据输出信号(TD1d、TD2d、TD3d等),其分别被提供给寄存器730和寄存器732。图32的电路被允许运行至检测到触发条件为止。那时,FIFO 704和寄存器732被冻结并提供用于模拟/调试的输入信号和初始条件。可以以各种方式来修改图32的时分复用器电路。
用时分复用,可以使用相同的设计逻辑(例如逻辑638或逻辑720)来确定实时寄存器和延迟寄存器两者的下一个状态。使用TDM方法的设计内的公共元件处理的数据是原始设计内的公共元件处理的数据的两倍。如果通过公共元件的传播延迟显著,则可以降低时钟速度,以适当地确保电路功能。可以与在第III节中所述的特征相结合地使用TDM方案。
VI.附加信息和实施例
本发明不局限于任何特定类型的信令。输入和时钟信号可以是单端或差动信号。时钟可以包括“监视器(eye)”。时钟控制可以是单数据速率、双倍数据速率、四倍数据速率等。在双倍数据速率中,可以使用单时钟信号的上升或下降沿,或者可以使用两个异相时钟。信号可以被分组或不分组。时钟信号可以在芯片内部或外部生成。其可以与数据信号分开或者被嵌入数据中并从该数据恢复出来。
本文所述的用于设计、配置、制造、运行、调制、收集用于模拟的初始条件信号和输入信号的程序(诸如图3中的程序以及结合图4和图5使用的那些程序)可以通过因特网(诸如通过下载信号)或通过诸如CD ROM、DVD、闪存或其它存储器的存储介质来提供。一旦被接收到,程序可以被存储在计算机存储器或其它存储器中。在某些实施例中,执行芯片中的功能的指令可以被硬线连接到电路。在其它实施例中,可以通过固件和/或软件来发起至少某些功能。此类固件或软件可以通过因特网或通过诸如CD ROM、DVD、闪存或其它存储器的储存介质来提供。在某些情况下,逻辑只包括电路,在其它情况下,逻辑包括响应于软件或固件而工作的电路。
附图本质上是示意性的,而并非意为表示实际电路布局。此外,在实际实现方式中,在芯片中将存在各种附加电路,并且在附图所示的电路之间可能存在电路。所示的组件可以具有各种附加输入端和输出端。本发明的各种实施例可以包括不同于本文所示和所述的那些细节的细节。
虽然寄存器是一种存储器,但其每次保持一比特位,而本公开中所提及的存储器每次保持多于一个比特位。在某些图中,单个寄存器(或触发器)被示为接收输入信号。然而,这些寄存器可以表示接收并行数据比特位的多个并行寄存器。例如,在图25中,设计寄存器A1、阶段1寄存器488以及阶段2寄存器492均可以表示接收并行信号的多个并行寄存器。
在某些实施例中,寄存器中的比特位可以是多级比特位,该多级比特位保持多于一比特位的信息。也就是说,在某种情况下,信号仅仅具有高压或低压,而在其它情况下,信号具有多个水平,以使每比特位表示多于两个值。上述解决方案可以被修改,以整合多级信令。
在某些实现方式中,FIFO具有固定深度,且在其它实现方式中,FIFO具有在制造或配置之后可以改变的深度。计数器可以倒数至零或另一值,或者它们可以从零或另一值开始正数。本发明的许多方法可以用数字处理系统来执行,诸如传统的通用计算机系统。还可以使用被设计或编程为只执行有限功能的专用计算机。
如果本说明书陈述组件、特征、结构或特性“可以”、“可能”或“也许”被包括,则不要求包括该特定组件、特征、结构或特性。如果本说明书或权利要求提及“一个”结构,则其并不意味着只存在一个该结构。
本发明的一个实施例可以是电路设计和被实现为被存储在机器可读介质中的计算机程序的合成计算机辅助设计软件,所述机器可读介质诸如为CD ROM、磁性硬盘或光盘或各种其它可选储存设备。此外,本发明功能的许多方法可以用数字处理系统来实现,诸如传统的通用计算机系统。还可以使用被设计或编程为只执行一种功能的专用计算机。
图34示出了可以用于本发明的典型计算机系统的一个示例。该计算机系统可以用来执行在HDL代码中描述的设计的逻辑合成。请注意,虽然图34示出了计算机系统的各种组件,但其并不意图表示将组件互连的任何特定架构或方式,因为此类细节与本发明没有密切关系。应注意的是,图34的架构仅仅是出于说明的目的而提供的,并且结合本发明所使用的计算机系统或其它数字处理系统不限于此特定架构。还应认识到,具有较少组件或可能更多组件的网络计算机及其它数据处理系统也可用于本发明。图34的计算机系统可以是例如IBM或苹果麦金塔(Macintosh)计算机。
如图34所示,作为一种数据处理系统的计算机系统1101包括被耦合到微处理器1103、ROM 1107、易失性RAM 1105和非易失性存储器1106的总线1102。可以是来自英特尔、摩托罗拉公司或IBM的微处理器的微处理器1103被耦合到高速缓冲存储器1104。总线1102将这些各种组件互连在一起,并且将这些组件1103、1107、1105和1106互连到显示控制器和显示设备1108及诸如输入/输出(I/O)设备的外围设备,所述输入/输出(I/O)设备可以是鼠标、键盘、调制解调器、网络接口、打印机、扫描仪、视频摄像机及本领域中众所周知的其它设备。通常,输入/输出设备1110通过输入/输出控制器1109耦合到系统。易失性RAM 1105通常被实现为需要连续供电以刷新或保持存储器中的数据的动态RAM(DRAM)。非易失性存储器1106通常是磁性硬盘驱动器、磁性光驱、光驱、DVD RAM或即使系统掉电之后也保持数据的其它类型的存储器系统。通常,非易失性存储器还可以是随机存取存储器,虽然对此并无要求。虽然图34显示了非易失性存储器是直接耦合到数据处理系统中的其它组件的本地设备,但应认识到,本发明可以利用远离系统的非易失性存储器,诸如通过诸如调制解调器或以太网接口的网络接口耦合到数据处理系统的网络存储设备。如本领域中众所周知的那样,总线1102可以包括通过各种桥接器、控制器和/或适配器相互连接的一个或多个总线。在一个实施例中,I/O控制器1109包括用于控制USB外围设备的USB(通用串行总线)适配器和/或用于控制IEEE-1394外围设备的IEEE-1394总线适配器。
通过本说明书显而易见的是,本发明的方法可以至少部分地在软件中体现。也就是说,可以在计算机系统或其它数据处理系统中响应于其处理器执行包含在存储器中的指令序列来实现所述技术,所述处理器诸如为微处理器,所述存储器诸如为ROM 1107、易失性RAM 1105、非易失性存储器1106、高速缓冲存储器1104或远程存储设备。在各种实施例中,可以与软件指令相结合地使用硬线连接电路以实现本发明。因此,所述技术不限于硬件电路和软件的任何特定组合,也不限于由数据处理系统执行的指令的任何特定源。另外,通过本说明书,各种功能和操作被描述为由软件代码来执行或引起,以简化说明。然而,本领域技术人员将认识到此类表达的意思是所述功能是由诸如微处理器1103的处理器执行代码而引起的。
可以使用机器可读介质来存储软件和数据,所述软件和数据在被数据处理系统执行时促使系统执行本发明的各种方法。此可执行软件和数据可以被存储在包括例如ROM 1107、易失性RAM 1105、非易失性存储器1106和/或高速缓冲存储器1104在内的各种不同位置中。此软件和/或数据的一部分可以被存储在这些存储设备中的任何一者中。
因此,机器可读介质包括以机器(例如,计算机、网络设备、个人数字助理、制造工具、具有一组的一个或多个处理器的任何设备等等)可访问的形式提供(即,存储和/或发送)信息的任何机构。例如,机器可读介质包括可记录/非可记录媒介(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘储存介质、光学储存介质、闪存设备等等)以及信号传播的电学、光学、声学或其它形式(例如,载波、红外信号、数字信号等)等。
虽然已根据多个实施例描述了本发明,但本发明不应只限于所述的那些实施例,而是可以在不脱离随附权利要求的精神和范围的修改和变更的情况下来实施。因此,应将本说明书视为说明性而不是限制性的。