专利名称:用于硬件仿真器的存储器反绕和重构的制作方法
技术领域:
本发明的领域一般涉及用于验证集成电路以及电子系统设计的硬件逻辑仿真系统,更具体而言,涉及用于根据及时反馈的任何已知检验点恢复存储器电路中所存储的数据的方法和设备,该存储器电路构成数字电路设计的一部分。
背景技术:
本申请请求2003年1月23日提交的序列号为60/442,176的美国临时申请的权益。序列号为60/442,176的该美国临时申请的内容全部在此引入作为参考。
硬件逻辑仿真系统是在多个可编程集成电路设计中实现用户设计的公知设备。这样的逻辑仿真系统可以从多个销售商处获得,包括美国加州圣何塞的Cadence Design Systems公司以及其它公司。典型的仿真系统使用可编程逻辑芯片或者可编程地互连的处理器芯片。在基于可编程逻辑芯片(例如,现场可编程门阵列或FPGA)的仿真系统中,包含在用户设计(在此称为“验证中的设计”或“DUV”)中的逻辑被编程到逻辑芯片中,以使得包括于DUV中的逻辑在可编程逻辑设备中采用实际的操作形式。在基于处理器的仿真系统中,用户的设计被这样处理,以便使得其功能看起来像是在处理器中产生的。该逻辑自身并非是在基于处理器的仿真系统中实现的,这意味着DUV在处理器中并没有采用实际操作的形式。使用可编程逻辑设备的硬件逻辑仿真系统的实例可以参见例如专利号为5,109,353,5,03 6,473,5,475,830和5,960,191的美国专利。专利号为5,109,353,5,036,473,5,475,830和5,960,191的美国专利在此被引入作为参考。
使用处理器芯片的硬件逻辑仿真系统的例子可以参考例如专利号5,551,013、6,035,117和6,051,030。在此美国专利号5,551,103、6,035,117和6,051,030引入以供参考。
DUV通常以设计的网表描述形式来提供。该网表可以从许多源推导而来,包括从硬件描述语言推导而来。网表描述(或者本领域普通技术人员所称的“网表”)是对电路部件以及该部件之间的电互连的描述。该部件包括所有那些实现逻辑电路所需的电路元件,比如组合逻辑(例如,门)以及时序逻辑(例如触发器和锁存器)。在现有技术的仿真系统中,比如Cadence Design Systems公司制造和销售的那些仿真系统,网表被编译以便使它处于可由仿真系统使用的形式。在基于FPGA的仿真器中,DUV被编译为允许逻辑门(无论是时序逻辑还是组合逻辑)在FPGA中得以实现的形式。在基于处理器的仿真系统中,DUV被编译为一系列的将被处理器芯片上的处理器执行的语句。没有任何逻辑被实现到这些处理器中。
硬件仿真系统的一个主要用途是调试DUV,从而使得用户的设计一旦在实际的硅中生产就不包含任何的功能错误。目前,电路设计师使用仿真器来执行这种调试已经许多年了,因为替换方法,模拟比仿真慢得多。模拟是基于软件的方法,其中,设计和测试台(testbench)被编译为机器可执行的模型并在工作站或PC中执行。仿真器中的测试台通常被表示为直接与DUV交互的目标板。
为了调试DUV,随着时间的过去,设计师需要查看设计信号的活动。其原因就是数字电路由一个或多个时钟驱动,并且在驱动设计(即,DUV)的各个时钟跳变期间都可能发生差错。当随着时间评估设计信号时,设计师至少面临两个问题。一个问题是要观察哪个信号(即,要观察DUV中的哪个节点)。第二个问题是什么时候观察信号(即,在什么时钟跳变时和/或事件的哪个汇合处,有时也被称为触发器)。这两个问题给模拟和仿真工具带来了严重的挑战。首先,电路设计通常是非常巨大的(例如,百万数量级的门)。其次,设计师希望观察的信号数目也成正比地增大。第三,因为需要观察设计信号的时间窗(在这里被称为“跟踪窗口”)在模拟或仿真之前很难预测,所以,调试设计的设计师更喜欢该跟踪窗口尽可能得大。
为了应对这些问题,电路设计师使用了各种方法。一种这样的方法是在模拟器中前后紧接地(lockstep)运行DUV。使用这种方法,模拟的进度在交互操作中由设计师控制。设计师可以运行模拟,停止并观察信号,继续,以及重复该过程。当停止模拟时,设计师可以检查设计中任何信号的状态。第二种方法是执行具有信号转存(dump)的自由运行的模拟。使用“自由运行”的方法,模拟被自由地执行而不用用户的干涉,并且要在模拟期间进行观察的信号在模拟期间被转存出去。注意以下这点非常重要,被转存出去的信号必须在模拟开始前被指定。这些模拟方法虽然有效,但是非常慢。第三种方法是使用如下仿真器来仿真DUV,该仿真器允许完全看到固定大小的跟踪窗口。在这种方法中,仿真器自由地运行,并且由DUV在如下仿真器中产生的信号被存储特定长的时间,所述仿真器允许完全观看。最后一种方法是用可以有限看到并可以重现的仿真器来仿真DUV。使用这种方法,在仿真期间存储有限的信息。设计师可能需要运行仿真几次以便获得足够的信息以供分析。
为了提供对DUV的可见性,设计验证行业已经努力了好多年。现有技术仿真系统在这个领域提供了相当的功能。大多数的现有技术仿真器提供了各种不同方法来“探测(probing)”DUV中的各个节点,从而使得那个节点处的信号是可观察的。例如,在授予Liu等人专利号为5,425,036的美国专利中教导了一种允许使用许多FPGA中存在的“回读(readback)”功能来探测信号。在授予Barbier等人的专利号为5,777,489的美国专利中,FPGA有制造到该FPGA上的扫描链,所述扫描链允许跟踪FPGA上的所有状态元素。在专利号为5,943,490的美国专利中还描述了另外一种方法,它将扫描链编程到FPGA中从而允许跟踪状态元素中选定的子集。在授予Wang等人的专利号为6,446,249的美国专利中,逻辑元件(它们实现DUV中的逻辑)中的每一个都具有相应的探测触发器,所述探测触发器可以由探测序列存储器随机访问,并且其内容在探测流中读出。
无论现有技术系统使用哪种方法来捕获由DUV创造的各种信号的值,也没有哪种现有技术系统能够为包括存储器的DUV的那些部分提供任何调试措施。事实上,即使考虑了这个问题的现有技术仿真器也只能把这种存储器视为“黑匣子”,这意味着现有技术仿真器只不过忽略了DUV中的存储器,并且只允许捕获黑匣子的输出信号。例如,参见Marantz等人的序列号为6,061,511的美国专利申请(更具体地,参见第6栏第21-30行)。
因为存储器是任何DUV中的一个重要部分,所以需要一种允许仿真器恢复所有存储在DUV的存储器中任何存储单元中的数据的调试方法。还需要一种不要求中断或减慢验证过程以便存储周期性快照(snapshot)的调试环境。
发明内容
本发明的各种实施例提供了一种用于恢复正被仿真的电路设计中的存储器的新颖方法,故而允许看到存储在其中的数据。这些实施例允许存储器在预定时间间隔内对于及时反馈的任何已知检验点(即,发生触发的点)被恢复。该各种实施例能够做到这点,是因为对每个设计存储器的所有写操作都被捕获,这不同于现有技术。在优选实施例中,写操作在循环缓冲器中被捕获。当设计中的检验点出现时,通过将捕获的(即,存储的)写操作以反向顺序(如果期望,以一个时钟周期一个时钟周期的方式)施加给DUV来执行存储器重现。在重现了所有的写操作后,每个设计存储器中的内容被恢复,以保持在对应于捕获写操作的循环缓冲器的底部(或第一条目)的那个时刻它所存储的内容。用于恢复存储器的时间间隔的长度,是由所述循环缓冲器的深度来确定的。
与现有技术相比,本发明的各种实施例允许看到的不仅仅是触发器和组合信号。在整个跟踪窗口期间都可以观察DUV中所有的存储器。它还允许在电路设计者所希望的点开始重现。
在一个方面,公开了一种用于验证电路设计按期望工作的方法。该电路设计包括随机存取存储器(RAM)。该RAM包括至少一个写端口、多个用于存储数据的存储单元。该多个存储单元中的每一个都包括一个地址。该方法包括在硬件逻辑仿真系统中仿真电路设计。就在将数据写到RAM的多个存储单元中选定的一个之前,该方法包括读取存储在RAM的多个存储单元中选定的一个中的数据。该方法还包括将在RAM的多个存储单元中选定的一个中读取的数据存储在缓冲器内选定的存储单元。在检验点之后,该方法包括将存储在缓冲器内选定存储单元中的数据转移到RAM中多个存储单元中选定的一个中。该方法还包括在该转移步骤后观察存储在RAM的多个存储单元中选定的一个中的数据。
在另一个方面,所述读取存储在RAM的多个存储单元中选定的一个中的数据的步骤包括为RAM中至少一个写端口中的每一个将相应的影子(shadow)读端口插入到电路设计中以及由相应影子读端口来实施读操作,以便存储在RAM的多个存储单元中选定的一个中的数据由该相应的影子读端口来读取。
在另一个方面,所述存储步骤还包括排列缓冲器内选定的存储单元,以便存储在缓冲器内的数据以后进先出的方式输出。
在另一个方面,所述转移步骤还包括确定输入到缓冲器的地址,以便缓冲器内选定的存储单元中的每一个都以后进先出的方式读出。该方法还包括将来自缓冲器内选定存储单元中的每一个的数据放置在RAM上至少一个写端口之一上。该方法还包括将来自缓冲器内选定存储单元中的每一个的、被放置在RAM上至少一个写端口之一上的数据写到RAM中多个存储单元中选定的一个中。
在另一个方面,所述观察步骤还包括在所述写步骤之后观察RAM中的每个存储单元。
在另一个方面,所述存储步骤还包括排列缓冲器内选定的存储单元,以便存储在缓冲器内的数据以先进先出的方式输出。
在另一个方面,所述转移步骤还包括将输入到缓冲器的地址递增,以便缓冲器内选定存储单元中的每一个都以先进先出的方式读出。该方法还包括将来自缓冲器内选定存储单元中的每一个的数据放置在RAM上至少一个写端口之一上。该方法还包括将来自缓冲器内选定存储单元中的每一个的、被放置在RAM上至少一个写端口之一上的数据写到RAM中多个存储单元中选定的一个中,从而以预定时间将RAM内的每个存储单元恢复到在其中存储的状态。
在另一个方面,公开了一种用于验证电路设计按期望工作的设备。该电路设计包括随机存取存储器(RAM)。该RAM包括具有数据输入和地址输入的写端口、读端口和多个用于存储数据的存储单元。该多个存储单元中的每一个都包括一个地址。该写端口具有数据输入和地址输入。该设备包括对应于该写端口的影子读端口。该影子读端口包括从写端口的地址输入那里接收地址的地址输入、以及数据输出。该设备还包括缓冲器。该缓冲器与RAM的地址输入通信。该缓冲器还与影子读端口的数据输出通信。该缓冲器具有地址输出和数据输出。该设备还包括第一多路复用器,它馈送写端口上的地址输入。该第一多路复用器具有与缓冲器的地址输出通信的第一输入。该第一多路复用器具有与RAM的地址输入通信的第二输入。该设备包括第二多路复用器,它馈送写端口上的数据输入。该第二多路复用器具有与缓冲器的数据输出通信的第一输入。该第二多路复用器具有与RAM的数据输入通信的第二输入。该第一多路复用器和第二多路复用器中的每一个都具有在第一模式和第二模式之间切换的选择输入。
在另一个方面,该缓冲器与状态机通信。
在另一个方面,该第一模式允许第一多路复用器将来自RAM的地址输入的信号馈送到写端口上的地址输入,还允许第二多路复用器将来自RAM的数据输入的信号馈送到写端口上的数据输入。
在另一个方面,该第二模式允许第一多路复用器将来自缓冲器的地址输出的信号馈送到写端口上的地址输入,还允许第二多路复用器将来自缓冲器的数据输出的信号馈送到写端口上的数据输入。
在另一个方面,该设备还包括与缓冲器通信的状态机。
在另一个方面,当该设备处于第二模式时,该状态机控制存储在缓冲器内的哪些数据和地址被从缓冲器的地址输出和数据输出那里读出。
在另一个方面,公开了一种用于验证电路设计按期望工作的设备,该电路设计包括随机存取存储器(RAM),而该RAM包括第一写端口和第二写端口。第一写端口包括第一数据输入和第一地址输入。第二写端口包括第二数据输入和第二地址输入。该RAM还包括第一设计数据输入、第一设计地址输入、第二设计数据输入、第二设计地址输入以及多个用于存储数据的存储单元。该多个存储单元中的每一个都包括一个地址。该设备包括对应于第一写端口的第一影子读端口。该第一影子读端口包括从第一设计地址输入接收地址的地址输入。该第一影子读端口还包括数据输出。该设备也包括对应于第二写端口的第二影子读端口。该第二影子读端口包括从第二设计地址输入接收地址的地址输入。第二影子读端口还包括数据输出。还存在与第一设计地址输入以及第一影子读端口的数据输出通信的第一缓冲器。第一缓冲器具有地址输出和数据输出。该设备还包括第二缓冲器。第二缓冲器与第二设计地址输入通信。第二缓冲器还与第二影子读端口的数据输出通信。第二缓冲器具有地址输出和数据输出。馈送第一写端口上的第一地址输入的第一多路复用器被包括进来。该第一多路复用器具有与第二缓冲器的地址输出通信的第一输入。第一多路复用器具有与第一设计地址输入通信的第二输入。第二多路复用器馈送第一写端口上的第一数据输入。第二多路复用器具有与第二缓冲器的数据输出通信的第一输入。第二多路复用器具有与第一设计数据输入通信的第二输入。第三多路复用器馈送第二写端口上的第一地址输入。第三多路复用器具有与第一缓冲器的地址输出通信的第一输入。第三多路复用器具有与第二设计地址输入通信的第二输入。第四多路复用器馈送第二写端口上的第一数据输入。第四多路复用器具有与第一缓冲器的数据输出通信的第一输入。第四多路复用器具有与第二设计数据输入通信的第二输入。所述第一多路复用器、第二多路复用器、第三多路复用器和第四多路复用器中的每一个都具有在第一模式和第二模式之间切换的选择输入。
在另一个方面,公开了一种用于操纵包括随机存取存储器(RAM)的电路设计以便调试该电路设计的方法。该RAM包括写端口和多个用于存储数据的存储单元。该多个存储单元中的每一个都包括一个地址。该方法包括将对应于写端口的影子读端口插入在电路设计中。该影子读端口包括从集成电路设计接收地址的地址输入。该影子读端口还包括数据输出。该方法还包括调度该影子读端口就在写端口将数据写入选定的存储器地址之前来读取存储在所述选定存储地址中的数据。该方法还包括将该影子读端口的数据输出互连到缓冲器。该缓冲器将在所述调度步骤中读取的数据存储在选定的存储单元中。该缓冲器包括数据输出和地址输出。该方法还包括将第一多路复用器插入在电路设计中以便该第一多路复用器馈送写端口上的地址输入。该第一多路复用器具有与来自电路设计的地址输入通信的第一输入。该方法还包括在电路设计中插入第二多路复用器以便该第二多路复用器馈送写端口上的数据输入。该第二多路复用器具有与来自电路设计的数据输入通信的第一输入。该方法还包括将缓冲器的地址输出互连到第一多路复用器的第二输入。该方法还包括将缓冲器的数据输出互连到第二多路复用器的第二输入。在检验点后,该方法包括将存储在缓冲器内选定存储单元中的数据转移到RAM的多个存储单元中选定的一个中。然后,该方法包括在所述转移步骤后观察存储在RAM的多个存储单元中选定的一个中的数据。
在另一个方面,所述转移步骤还包括以后进先出的顺序发送存储在缓冲器内选定存储单元中的数据,以便RAM的多个存储单元中选定的一个中的每一个都被反绕到所述检验点之前保持的状态。
在另一个方面,所述观察步骤还包括以先进后出的顺序发送存储在缓冲器内选定存储单元中的数据,以便RAM的多个存储单元中选定的一个中的每一个都被恢复到所述检验点之前保持的状态。
在又一个方面,公开了一种通过使用功能验证系统来验证电路设计按期望工作的方法,其中,该电路设计包括随机存取存储器(RAM)。该RAM包括至少一个写端口和多个存储单元。该方法包括在功能验证系统中运行电路设计。就在将数据写入RAM之前,读取所述数据。该方法还包括在缓冲器中存储该数据。在检验点,以与将数据写入缓冲器的顺序相反的顺序读取存储在该缓冲器中的数据。当该数据从缓冲器中读出时,将该数据写入RAM中。
在另一个方面,该功能验证系统包括硬件逻辑验证系统。
在又一个方面,该硬件逻辑验证系统可以包括基于处理器的仿真系统。该硬件逻辑验证系统也可以包括基于现场可编程门阵列(FPGA)的仿真系统。
在又一个方面,该功能验证系统包括软件模拟器。
在又一个方面,公开了一种用于验证电路设计按期望工作的方法。该电路设计包括随机存取存储器(RAM)。该RAM包括至少一个写端口和多个存储单元,该方法包括在第一功能验证系统中运行电路设计。就在将数据写入RAM之前,先读取该数据。将该数据转移到第一功能验证系统外的系统。在检验点,重构在该外部系统中的数据以便以预定时间创建重构的存储器,该重构的存储器对应于RAM中的多个存储单元。所述重构步骤包括以后进先出的顺序读取先前存储的数据并将该先前存储的数据写入外部系统中的存储器,从而创建所述重构的存储器。
在又一个方面,在重构该数据后,该重构的存储器被转移到第一功能验证系统。该重构的存储器被写入RAM中。
在另一个方面,在重构该数据后,重构的存储器被转移到第二功能验证系统。第一功能验证系统可以包括硬件逻辑验证系统。第二功能验证系统可以包括软件模拟器。
在另一个方面,公开了一种通过使用功能验证系统来验证电路设计按期望工作的方法。该电路设计包括随机存取存储器(RAM),而该RAM包括至少一个写端口和多个存储单元。该方法包括在功能验证系统中运行电路设计,将所有的写操作保存在缓冲器内。该写操作中的每一个都包括地址和将要存储在该地址的数据。该地址和要被存储在该地址的数据按照对应于写操作发生顺序的时间顺序来存储。通过重现存储在缓冲器中的写操作中的每一个来重构RAM的映射,该RAM的映射至少由在写操作期间数据发生变化的地址组成。该映射被写入所述功能验证系统。
在另一个方面,该功能验证系统可以包括硬件逻辑验证系统。该硬件逻辑验证系统可以是基于处理器的仿真系统。该硬件逻辑验证系统也可以是基于现场可编程门阵列(FPGA)的仿真系统。该功能验证系统也可以包括软件模拟器。
在另一个方面,公开了一种通过使用第一功能验证系统来验证电路设计按期望工作的方法。该电路设计包括随机存取存储器(RAM),而该RAM包括至少一个写端口和多个存储单元。该方法包括在第一功能验证系统中运行电路设计并将所有的写操作保存在缓冲器内。该写操作中的每一个都包括地址和将要存储在该地址的数据。该地址和要被存储在该地址的数据按照对应于所述写操作发生顺序的时间顺序来存储。通过重现存储在缓冲器中的写操作中的每一个来重构RAM的映射,该映射至少由在写操作期间有数据变化的地址组成。该映射被写入第二功能验证系统。
在另一个方面,该第一功能验证系统可以包括硬件逻辑验证系统。该硬件逻辑验证系统可以是基于处理器的仿真系统。该硬件逻辑验证系统可以是基于现场可编程门阵列(FPGA)的仿真系统。该第一功能验证系统也可以包括软件模拟器。
在另一个方面,该第二功能验证系统可以包括软件模拟器。该第二功能验证系统也可以包括硬件逻辑验证系统。
现在将参照附图更具体地描述本发明的上述以及其它实施例,包括元件的实现和组合的各种新颖细节,并且这些都在权利要求中指出来了。应该理解,仅仅通过示例的方式而不是限制本发明的方式显示了在本发明中实施的特定方法和电路。正如本领域那些普通技术人员将会理解的,在不背离本发明范围的情况下,可以在许多各种各样的实施例中采用本发明的原理和特征。
通过参照其中显示了本发明各个方面的示例性实施例的附图,本发明的新颖的技术特征和优点将会显而易见。
图1是显示在影子读端口插入DUV后其存储器的逻辑图。
图2是显示具有插入其中的反绕逻辑的DUV中的存储器的逻辑图。
图3是显示具有插入其中的影子读端口和反绕逻辑的DUV中的多端口存储器的逻辑图。
图4是显示允许存储在DUV中的存储器被重构的电路的逻辑图。
图5是图示多端口存储器的框图。
图6是显示如何组织存储在循环缓冲器中的存储器的图。
图7是图示如何在时间段上进行存储器反绕的时间线。
图8是展示在此公开的实施例中系统如何跟踪时间排序或写操作的表。
图9是用于利用单端口RAM来实现多端口存储器的电路示意图。
具体实施例方式
打开附图,现在将描述本发明的优选设备和方法。
正如现在将看到的,一个实施例具有三个主要部分。这些部分是“捕获”、“反绕”或“重构”、和“重现”。当DUV正在仿真器中运行时执行捕获,在本发明各种实施例的背景下,捕获是指存储器写操作的捕获。正如现在将显示的,存储器写操作数据被捕获到循环缓冲器中。这个循环缓冲器的深度决定了用于反绕或重构的时间间隔的长度,即跟踪窗口。
首先,必须要注意,这里对各种实施例的大多数讨论将在逻辑门的背景下进行。在基于处理器的仿真系统中,该方法通过将逻辑编译为将由处理器执行的布尔表达式来实现。对于仿真系统的用户,基于处理器的仿真器的输出类似于基于FPGA的仿真器的输出。但是,仿真器的输出产生的方式是不同的。在基于FPGA的仿真系统中,在这里提到的逻辑将通过逻辑元件(有时被称为可配置逻辑块或者CLB)来实现。这里公开的各种实施例可以应用到两种类型的仿真器。
现在将参照图1来讨论捕获存储器写操作的方式。如上所述,现今,几乎每个DUV都包含存储器电路20。对典型的存储器电路20进行安排,以使得他们具有多个存储单元(没有显示)。每个存储单元具有可以存储特定数目比特的地址。典型地,存储器电路按它们具有的存储单元的数目(经常被称为存储器电路的“深度”)以及在每个单元可以存储的位的数目(经常被称为存储器电路的“宽度”)加以分类。因此,具有32,000个单元且每个单元包含8位的存储器电路会被称为“32K乘8(thirty-two thousand by eight)”(即,32K×8)存储器电路。当存储器电路具有多个端口时,该存储器电路进一步通过写端口的数目和读端口的数目来定义。在DUV中实现的典型多端口存储器中,数据可以通过多个端口写到存储单元以及通过多个读端口从存储单元读出。
为了捕获存储器写操作,DVU的网表被修改。对于DUV中每个存储器中的每个写端口20,影子读端口30被创建并且插入到DUV中。优选地,影子读端口30的创建以及插入到DUV中都在编译期间进行,不过它也可以在其它时间进行。影子读端口30包括地址输入32和数据输出38。写端口20包括接收要写入DUV的存储器中的数据的数据输入24以及将指向数据将要写入到的特定存储单元的地址输入22。地址网34(address net)将地址数据提供给地址端口22。由网36(net)来将写数据提供给数据输入24。
此外还使用了循环缓冲器40。虽然具有芯片内存储器的处理器模块或FPGA可以这样被设计,以使得循环缓冲器被包含在其中,但是,优选地,循环缓冲器40是诸如动态随机存取存储器(DRAM)之类的独立的存储器芯片。在基于处理器的仿真器中,将在执行周期的每一步通过影子读端口30来捕获DUV中的每个存储器写操作。在本优选的基于处理器的仿真器中,执行周期像下面这样出现。在仿真期间,包含处理器的每个模块(例如,集成电路)上的序列发生器通过编程的步数增加,并且可以重复,一直到被仿真支持工具暂停。序列发生器的每次转动对应于被仿真的设计的单个时钟周期。序列发生器将仿真的路径时钟周期有效地划分成多个步骤,例如,256个步骤,其中,每一步骤都对应于对被仿真设计的一个逻辑门的评估。在基于FPGA的仿真器中,没有任何执行。
与基于处理器的系统相比,基于FPGA的系统不使用可用于定义执行周期的单个中央时钟。FPGA系统通常可以接受一组异步的时钟,这意味着通常每个时钟都可以不是源自另一个时钟。在一些FPGA系统中,甚至不可能知道哪些信号是时钟信号。任何输入信号都可以充当时钟。
正如还可以从图1看出的,DUV被这样修改,使得DUV中存在的通常与DUV中存储器的地址端口22通信的地址网34(address net)也与影子读端口30上的地址端口32以及循环缓冲器40上的数据输入42通信。同样地,影子读端口30上的数据引脚38将从存储器读出的数据输出到数据网(data net)35,然后再输入到循环缓冲器40。正如将在稍后描述的,循环缓冲器40被用于存储器反绕。这些修改使得地址网34和数据网35必须脱离芯片并被规定路线到循环缓冲器40,该循环缓冲器40优选地为独立的存储器芯片。
注意,优选地,DUV中的存储器存取是确定性的。这样,当仿真器正在运行其上的DUV时,每个影子读端口30的读操作被调度成在通过存储器的相应写端口24进行的存储器写操作之前执行。其理由是,当DUV在向存储器20中的地址写数据时,该存储器20的读端口被设置为在写发生之前“读”那个地址。这个影子读操作的结果被存储在循环缓冲器40中(存储在那个地址的数据和地址本身都被存储起来)。该读操作的结果被存储在循环缓冲器40中。这样,该循环缓冲器40将保存用户设计中的存储器的内容(对于每个存储单元数据连同它的地址一起被存储)。注意,这个会正确地工作,因为影子读端口30上的写地址网34和输出引脚38同步地将此信息写入循环缓冲器40。
正如从图1看出的,循环缓冲器40具有地址引脚。当这里描述的原理在基于处理器的仿真系统中实现时,循环缓冲器40上的地址引脚与状态机45通信,所述状态机控制在其中存储的数据的寻址。这个状态机在每个执行周期都递增所述地址(即,单元是针对每个存储单元与来自于DUV中的存储器20的地址存储在一起的数据)。当处于下面参照图1到图3描述的反绕模式时,该状态机在每个执行周期递减地址。
反绕模式将参照图2讨论。在初始设计的执行到达用户定义的检验点时执行反绕。反绕包括重现在跟踪窗口期间捕获的每个存储器写操作。当然,在一些实施例中,仅仅需要重现选定数目的写操作。为了使反绕工作,本优选的实施例要求在DUV中应该存在附加的反绕逻辑。像影子读端口30一样,本优选的实施例将这个反绕逻辑插入到DUV中,优选地在编译期间进行。
除了将影子读端口30插入到DUV中,反绕逻辑也被插入到DUV中,优选地在编译时进行。优选地,反绕逻辑由第一多路复用器50和第二多路复用器52组成。优选地,第一多路复用器50是两输入的多路复用器,第一输入是来自循环缓冲器40的数据输出,而第二输入是来自DUV的地址信号。第一多路复用器50的选择输入54是为正常仿真模式或反绕模式设置的信号。优选地,第二多路复用器52也是两输入的多路复用器,第一输入是来自循环缓冲器的数据输出,而第二输入是来自DUV的数据信号。选择输入54与第一多路复用器50的相同,即,在正常仿真模式和反绕模式之间作出选择的信号。当仿真器处于仿真模式时,第一多路复用器50和第二多路复用器54在它们的选择输入上接收信号,所述信号从DUV选择地址和设计信号,这意味着存储器20如图1中一样操作。与此相反,当仿真器处于反绕模式时,第一多路复用器50和第二多路复用器54在其选择输入上接收信号,所述信号从循环缓冲器40选择地址和设计信号。这个反绕信号以大约相同的时间呈现在第一多路复用器50和第二多路复用器54的选择输入上,驱动循环缓冲器40的时钟开始递减,以使得存储在循环缓冲器40中的数据和地址信息被输出到第一多路复用器50上的相应数据输入以及第二多路复用器54上的相应地址输入。
现在将参照图1和图2讨论DUV中存储器的操作。在跟踪窗口期间,DUV由诸如来自目标系统、测试向量、模拟激励等的信号之类的外部信号连同一个或多个时钟信号加以训练(exercise)。当被仿真的设计试图通过第一写端口20将数据写入存储器时,该数据(例如,要存储的字)在数据网36上被输入到存储器,而那个字的地址将在地址网34上被输入到存储器。该数据信号穿过数据网36到达多路复用器52上的第二输入,而该地址穿过地址网34到达多路复用器50的第二输入。注意,在跟踪窗口期间,多路复用器50和52的选择输入54被这样设置,使得第一多路复用器50和第二多路复用器52选择来自用户设计的输入。
为了顾及存储器反绕,影子读操作被调度在每个写操作之前。影子读操作利用影子读端口30并且涉及与使用写端口20写入的地址相同的地址。这样,正被传送到写端口20的地址也被输入到影子读端口30。通过将这个地址发送到影子读端口30,存储在那个地址中的数据被通过影子读端口的数据输出38输出到循环缓冲器40。在存储器反绕实施例中,该地址和数据被以后进先出(“LIFO”)的安排存储在循环缓冲器40中,这使得用户可以一步一步地(一步是执行周期的一部分)递减DUV中存储器的状态,一直到到达跟踪窗口的开始。如上所述,与循环缓冲器40上的地址引脚通信的状态机45控制这个过程。
紧接着对特定的存储器地址进行影子读操作之后,就会进行对相同存储器地址的写操作。但是,因为存储在那个存储器地址的先前值现在存储在循环缓冲器40中,所以它在稍后的时间可用于恢复。在写操作期间,来自地址网34的存储器地址穿过多路复用器50并进入写端口20的地址输入。同样地,要被写入那个地址的数据从网36穿过多路复用器52并进入写端口20,它将该数据写入该存储器中选定的地址。
当碰到检验点时,仿真器通常都会进入反绕模式。这样的检验点可以是触发器、事件集、用户选择的具体的时间点,或者是某个其它条件。为了进入反绕模式,第一多路复用器50和第二多路复用器52上的选择输入54被这样设置,以使得存储器地址以及存储在该地址的数据分别通过多路复用器50和52,并通过写端口20。一旦选择信号被切换到反绕,该仿真器就在反绕模式中操作。当处于反绕模式时,与循环缓冲器40上的地址引脚通信的状态机45开始递减。这使得DUV中存储器的内容被恢复,逐步地递减一直到到达期望点。注意,存储器的内容只能反绕回到它们在跟踪窗口的开始处的状态。这是因为循环缓冲器没有存储在跟踪窗口外存储的存储器内容。因为选择输入54的值是这样的,第一多路复用器50和第二多路复用器52上的选择输入54都被这样设置,以使得循环缓冲器40中的存储器地址和存储在该地址的数据以重现模式被通过多路复用器50和52,所以,写端口20将存储在循环缓冲器40中的数据写在相应的地址。因为循环缓冲器40具有LIFO的安排,所以,用户可以在执行周期中一步一步地反绕存储器的状态,因而以与设计运行通过跟踪窗口的顺序相反的顺序递减设计中的状态。
在全部设计内容(即,存储在存储器中的数据、存储在状态设备中的数据以及DUV的主输入值)被恢复到它们在目标执行周期中所具有的值后,该仿真器进入重现模式。该目标执行周期是设计仿真中用户需要看到存储器状态以便调试该设计的时间点。它可以是许多东西,例如具体的时间点或存储器具体的状态。恢复状态设备的内容以及主输入的值的方式不在本公开文本范围之内。
多端口存储器使用这里公开的原理被安排的方式将参照图3进行描述。如上所述,在这里公开的各种实施例通过将对应每个写端口的影子读端口插入到DUV中来修改DUV。在包含多于一个写端口的多端口存储器中,将插入多于一个影子读端口。换句话说,在优选实施例中,在用户设计的存储器中,对于每个写端口都有一个影子读端口。还是如上所述,各种实施例将反绕逻辑插入到优选地包含多路复用器的DUV中,该多路复用器将地址和数据输入馈送到写端口。
图3的逻辑图显示了DUV中具有两个写端口的存储器100的示范实施例。图3的例子仅仅是一个例子,因为本发明的各种实施例并不局限于只有两个写端口的存储器。第一写端口120a具有地址输入和数据输入。第一写端口120a上的地址输入是多路复用器150a的输出。第一写端口120a上的数据输入是多路复用器152a的输出。正如上面所述的实施例,多路复用器150a优选地具有两个输入,第一个是为DUV的存储器中第一写端口运送写地址的网。到多路复用器150a的第二输入是存储在第二循环缓冲器140b中的地址。将来自第二循环缓冲器140b的地址输出放置在多路复用器152a的输入上的原因将在下面进行讨论。优选地,多路复用器152a具有两个输入。到多路复用器152a的第一输入是运送要被存储在DUV的存储器中的数据的网。到多路复用器152a的第二输入是存储在第二循环缓冲器140b中的数据。将从第二循环缓冲器140b输出的数据放置在多路复用器152a的输入上的原因将在下面进行讨论。多路复用器150a和152a将在正常模式和反绕模式之间选择的“开关”作为它们的选择输入。优选地,多路复用器150a和152a在编译时被插入。同样地,第一影子读端口130a被插入到DUV中,优选地是在编译时被插入。到第一影子读端口130a的输入是为DUV的存储器中的第一写端口120a运送写地址的网134b。第一影子读端口130a的输出被输入到第一循环缓冲器140a数据输入。第一循环缓冲器140a具有一输入,所述输入接收来自第一状态机145a的输出。如上所述,第一状态机145a在反绕期间对第一循环缓冲器140a中的存储单元进行寻址。如上所述,第一影子读端口130a的输出是存储在该存储器地址的数据以及该存储器地址。
第二写端口120b上的地址输入是多路复用器150b的输出。第二写端口120b上的数据输入是多路复用器152b的输出。正如在上述实施例中,多路复用器150b具有两个输入,第一个是为DUV的存储器中的第二写端口运送写地址的网。到多路复用器150b的第二个输入是存储在第一循环缓冲器140a中的地址。将从第一循环缓冲器140a输出的地址放置在多路复用器152b的输入上的原因将在下面讨论。多路复用器152b具有两个输入,到多路复用器152b的第一个输入是运送要被存储在DUV的存储器中的数据的网。到多路复用器152b的第二个输入是存储在第一循环缓冲器140a中的数据。将从第一循环缓冲器140a输出的数据放置在多路复用器152b的输入上的原因将在下面讨论。多路复用器150a和152a将在正常模式和反绕模式之间选择的“开关”作为它们的选择输入。优选地,多路复用器150a和152a在编译时被插入。同样地,第二影子读端口130b被插入到DUV中,优选地是在编译时被插入。到第二影子读端口130b的输入是为DUV的存储器中的第一写端口运送写地址的网。第二影子读端口130b的输出是存储在该存储器地址的数据以及该存储器地址。
对于具有如图3的实例中的多个端口的存储器,每一个写端口(例如,写端口120a和120b)被馈送来自于对应于另一个写端口(将被称为镜像写端口)的影子读端口的数据。在图3的实例中,第一循环缓冲器140a捕获来自于第一影子读端口130a的数据,所述第一影子读端口130a对应DUV存储器的第一写端口而被插入到DUV中。同样地,第二循环缓冲器140b捕获来自于第二影子读端口130b的数据,所述第二影子读端口130b对应DUV存储器的第二写端口而被插入到DUV中。第二循环缓冲器140b具有一输入,所述输入接收来自第二状态机145b的输出。如上所述,第二状态机145b在反绕期间寻址第二循环缓冲器140b中的存储单元。在存储器反绕期间,第一循环缓冲器140a通过第二写端口120b馈送相同的存储器实例(例如,存储器地址连同存储在该地址的数据)。因此,在这个实例中,在反绕期间,第二写端口120b充当第一写端口120a的镜像写端口。同样地,第一写端口120a充当第二写端口120b的镜像写端口。
现在将讨论使用镜像写端口的原因。在跟踪窗口期间,DUV由诸如来自目标系统、测试向量、模拟激励等的信号之类的外部信号加以训练。当被仿真的设计试图通过第一写端口120a将数据写入存储器时,所述数据(例如,要存储的字)在数据网136a上被输入到存储器,而那个字的地址将在地址网134a上被输入到存储器。在跟踪窗口期间,多路复用器150a和152a的选择输入154被这样设置,使得该地址以及该地址的数据被从那里穿过并进入第一写端口120a。为了考虑存储器反绕,影子读操作被调度到每个写操作之前。影子读操作利用第一影子读端口130a并包含与使用第一写端口120a写入的相同地址。因此,发送到第一写端口120a的地址也被输入到第一影子读端口130a。通过把这个地址发送到第一影子读端口130a,存储在DUV的该地址中的数据通过第一影子读端口130a的数据输出138被输出到第一循环缓冲器140a。
紧接着对特定存储器地址进行影子读操作之后,就会对该相同存储器地址进行写操作。但是,因为存储在该存储器地址的先前值现在存储在第一循环缓冲器140a中,所以,在稍后的时间它对于恢复而言是可用的。在写操作期间,来自地址网134a的存储器地址穿过多路复用器150a并进入第一写端口120a的地址输入。同样地,要写入到那个地址的数据从网136a穿过多路复用器152a并进入第一写端口120a,第一写端口120a将该数据写入存储器中选定的地址。
如上所述,当仿真器进入反绕模式时,第一多路复用器150a和第二多路复用器150b上的选择输入154都被这样设置,以使得存储在第一循环缓冲器140a中的该存储器地址以及存储在该地址上的数据被分别传递通过多路复用器150b和152b,并通过第二写端口120b。第二写端口120b然后将此数据写入正确的地址。换句话说,当反绕时,第二写端口120b充当第一写端口120a的镜像写端口。使用镜像写端口的原因如下。当仿真器运行通过跟踪窗口时,数据被写到存储单元。在每个写操作期间,存储在这些单元的数据被影子读端口从DVU的存储器中读出来并存储在循环缓冲器140a和140b中,地址也是如此。当存储器进入反绕时,执行周期被重现,这意味着要被存储在特定地址的数据必须通过其镜像写端口写入。
如果没有使用镜像端口,在基于处理器的仿真系统中的存储器写操作将肯定是错误的。例如,假设在某个周期,具有两个写端口的存储器的两个端口都向相同的地址A写数据。再假设端口二在端口一写数据D1之后写数据D2。还假设在这两个写操作之前地址A的数据是D。影子读端口一将为地址A存储数据D,然后,影子读端口二将为这个相同的地址A存储数据D1。如果在反绕期间,写端口没有被镜像,那么,端口一将在端口二写数据D1之前写数据D。在这两个写操作之后,地址A将存储错误的值D1而不是正确的初始值D。一方面,如果端口被镜像,那么,在反绕期间,端口一将写入通过影子读端口二捕获的数据,即数据D1,此后,端口二将写入通过影子读端口一捕获的数据,即数据D。因此,在两个写操作之后,正确的初始数据D被存储在地址A上。
注意,写端口的镜像是根据它们在单个执行周期内的调度在设计编译期间建立的。对于被调度在从执行周期开始向前数的第N步进行写的写端口,其镜像写端口是被调度在从执行周期尾部向后数的第N步进行写的那个写端口。
注意,图3所示的多端口存储器仅仅是示例。也可以使用许多更多端口的存储器,包括奇数个端口的存储器。例如,在具有五个端口的多端口存储器中,即端口一、端口二、端口三、端口四以及端口五,端口五将充当端口一的镜像写端口(反之亦然),端口四将充当端口二的镜像写端口(反之亦然),而端口三将充当它自己的镜像写端口。
现在将参照图4讨论恢复DUV存储器内容的方式。在这个实施例中,在捕获阶段,每个写端口的数据和地址值从仿真或模拟时间的开始(时间零点)被直接记录。可以在每个主时钟周期或仅仅在有写存储器的请求时捕获数据,从而降低了记录数据的量。在仅仅存在写请求时捕获数据的情况下,在恢复阶段期间,数据可以被组织在块中以便只需要知道每个块开始的时间。
在这个特定实施例中没有使用影子读端口。但是,DUV通过插入附加的逻辑而得到修改。在这个实施例中,DUV通过插入第一多路复用器62和第二多路复用器64而得到修改。优选地,第一多路复用器62是两输入的多路复用器,而其输出将地址输入馈送到写端口20。优选地,第二多路复用器64是两输入的多路复用器,但其输出馈送到写端口20的数据输入。到第一多路复用器62的第一输入是来自DUV(即,用户的设计)的地址网34。到第二多路复用器64的第一输入是来自DUV的数据网36。在这个实施例中,仿真器中安装了充当线性缓冲器60的存储器电路(例如,存储器芯片)。线性缓冲器60从地址网34接收地址数据,而从数据网36接收要被存储在该地址中的数据。线性缓冲器60具有将存储器地址发送到第一多路复用器62上第二输入的第一输出。线性缓冲器还具有将特定存储器地址的数据输出到第二多路复用器64上第二输入的第二输出。第一多路复用器62和第二多路复用器64都具有在正常模式和重构模式之间选择的选择输入。
为了进入恢复阶段,到第一多路复用器62和第二多路复用器64的选择输入54被切换到重构模式。这导致第一多路复用器62和第二多路复用器64将从线性缓冲器60输入的数据输出。优选地,线性缓冲器60被安排为FIFO排列,这意味着从跟踪窗口的时间零点一直到用户想要恢复的时间点,写操作被重现。这样,不同于上述循环缓冲器40,驱动线性缓冲器60的状态机65不需要递减。优选地,状态机65与驱动DUV的时钟同步,从而使得线性缓冲器60与DUV的存储器20中的写操作同步地增加它自己的存储单元。注意,存储器芯片(或者芯片内存储器,如果使用了这个安排的话)必须足够大到捕获存储器从跟踪窗口的时间零点开始产生的所有数据。因为这种方法需要大量的存储器,一部分线性缓冲器60可以驻留在仿真器内,而另一部分线性缓冲器60可以驻留在控制仿真器的工作站中。
参照图4描述的实施例的一种变形是周期性地存储DUV中全部存储器的内容(类似于拍摄存储器全部内容的“快照”)。优选地,拍摄快照的周期是非常长的周期(例如,相隔几十万或几百万个周期)。在这个实施例中,恢复过程首先会将存储器内容从最近存储的快照恢复到DUV的存储器中。优选地,将被恢复的快照就是恰好在用户想要恢复的时间点之前拍摄的快照。在用该快照恢复了存储器内容之后,DUV使用上述方法重现从快照时间开始的写操作。这种实施例的优点是它不需要线性缓冲器60存储从跟踪窗口的时间零点开始的写操作的全部历史记录。这样,就可以使用更小的线性缓冲器60。
与上述相同的原理可用来实现这里公开的用于基于FPGA的仿真系统的方法。在实现中有些不同,这将在下面讨论。实现中最大的不同是因为这样一个事实,即在基于FPGA的系统中,没有单个中央时钟可用来定义与基于处理器的系统中存在的基本时钟一样的基本时钟。FPGA系统通常可以接受一组异步时钟(即,一个不能从另一个中推导出来),然而基于处理器的仿真器虽然也能够用异步时钟仿真设计,但是它在内部是同步地运转的。事实上,在一些FPGA系统中,该系统甚至可以不知道输入到仿真器的哪些信号是时钟信号。任何输入信号都可以充当时钟。
在FPGA系统中,多端口存储器中写操作发生的顺序也是一个问题,因为在两个写端口之间同时发生的写顺序可能要根据两个写请求之间细微的时间差来确定。因为写请求不是用中央时钟来定时的,所以必须构建更精巧的机制来处理不同写端口之间的写顺序。
在基于FPGA的系统中,有至少两种方法用来实现这里公开的原理。第一种方法将参照图5-7来描述,它依赖于“事件驱动”的方法。图5显示了具有两个写端口的多端口存储器。写端口一由地址输入A1和数据输入D1组成。写端口二由地址输入A2和数据输入D2组成。在基于FPGA的系统中,没有定义周期的基本时钟(即,没有如上所述的执行周期)。反之,在仿真期间具体的预定点,除了存储在DUV内RAM中的数据,DUV的全部状态的内容的快照被存储在循环缓冲器中(图6)。这在图7中图示,图7显示了具有仿真开始、第一预定点和第二预定点的时间线。在仿真期间,每个写操作被同时存储在DUV的RAM中和循环缓冲器中。注意,在一些实施例中,除了DUV状态的其它内容以外,来自写操作的数据也被存储在不同的循环缓冲器中。和基于处理器的实现一样,影子读端口可以用于这个操作,虽然其它实现也是可能的。在每次写循环缓冲器之后,循环缓冲器地址前进一。在每个预定点,将一个记号写入循环缓冲器以便表明存储在循环缓冲器的这个单元的写操作对应于预定点。这在图6中显示。注意,预定点最好由验证系统的用户来设置。
当数据通过不同的写端口写入相同的存储单元时,该数据被以与它们被写到该存储单元的顺序相同的顺序一个接一个地存储在循环缓冲器中。换句话说,根据它们写入到DUV内RAM的存储单元的顺序,来自不同写端口的数据将一个接一个地写入循环缓冲器。这样,在反绕期间就没必要知道哪个写端口将该数据写到特定的存储单元,因为写入到DUV的数据以正确的顺序存储在循环缓冲器中。这意味着反绕阶段只需要一个写端口将该数据写入到被仿真的DUV的RAM中。
注意,这个实现使得不需要使用镜像写端口。其原因是,不像基于处理器的系统,从循环缓冲器写数据的正确顺序不必在反绕期间通过以相反的顺序重新连接端口(即,通过写端口的镜像端口)来实现。在这个实施例中,可以依靠存储在循环缓冲器中的写操作的时间排序来实现正确的排序。这在存储在循环缓冲器的数据将仅仅通过一个写端口被写入RAM中的情况下尤其如此,而不管DUV中的RAM实际上有多少个写端口。注意,如果在基于处理器的系统中使用类似的结构,写端口的镜像在基于处理器的系统中并不是必需的。
应该注意,这个实施例也可以实现在基于处理器的系统中,它使得在使用基于处理器的验证系统时不必使用镜像写端口。
在这种方法中,写入到循环缓冲器的地址数目取决于写操作的数目(它随着DUV所做的事情变化)。这要求每个存储器实例具有它自己的循环缓冲器,所以,它可以独立于其它存储器实例的循环缓冲器前进。
现在将讨论一种可选的实施例。在这种实施例中,基本时钟由系统在内部产生。这个基本时钟必须足够快(例如,具有足够高的频率),从而能够对任何网进行采样而不会错过系统中最快时钟的任何跳变。换句话说,这个基本时钟的频率必须被设置得足够高,以便在DUV中没有任何信号可以在该基本时钟的一个周期内改变多于一次。因为验证系统的用户应该对DUV有足够的了解,所以,用户应该选择基本时钟的频率。该基本时钟可以用来定义“周期”,从而使得基本时钟的每个周期类似于基于处理器的系统的执行周期。在基本时钟的每个这种周期期间,对任何存储器的每个写端口只能进行单个写操作。这样,写操作被以与基于处理器的系统相同的方式存储起来。剩下的就与用户在基于处理器的系统中要做的事情或多或少地相同。
只要DUV中的每个存储器具有不多于一个写端口,就可以使用上面针对基于处理器的系统描述的方法。但是,当DUV中的存储器具有多个写端口时,就需要不同的方法。当两个或更多写端口在基本时钟的相同周期期间被用来将数据写入DUV的存储器中时,问题就产生了。如上所述,如果通过不同写端口的写存储器的顺序不能被维持,那么存储器重构就不会准确。
另一种变形是在存储器实例的导向(steering)逻辑中加入特别的电路,该电路用于监控写操作并确定来自不同写端口的实际写顺序,然后再以这样一种方式记录该数据,所述方式使得重构阶段可以在每个周期内以确切的相反顺序重现它们。这个实施例根据重构阶段写操作的时间排序来实现为不同写端口以正确的顺序写数据的期望效果。图8是显示系统如何跟踪写操作时间排序的实例的表。这意味着重构阶段实际上可以通过单个写端口将所有数据从循环缓冲器写回到存储器实例中,因为该顺序是通过在时间域对它们进行正确的定序来确定的。这再次使得不需要使用镜像端口。
图8显示了对两端口的存储器进行的存储器写操作。前两列显示了给定周期的第一写操作,而后两列显示了给定周期的第二写操作。转向图8中显示的实例,在第一周期中,也就是第一行,在端口2之前写端口1。在第二周期中,只有端口1有写操作。在第三周期中,端口1经受写操作。在第四周期中,端口2在端口1之前有写操作。在第五周期,端口1和端口2都没有经受写操作。在最后的周期中,只有端口1经受写操作。
在许多情况下,仿真系统可以通过使用“包装器(wrapper)”方法来实现具有多个写端口的存储器(在此,我们称之为“逻辑存储单元”)。该包装器使用更简单的具有更少写端口(典型地,只是单个写端口)的存储器结构(我们称之为“物理存储单元”)200。利用时域复用将写端口复用到逻辑存储单元200的逻辑电路被使用。这意味着在设计的单个时钟周期期间,逻辑存储单元写端口被使用更高频率的时钟来复用,所以,每个写端口可以使用不同的时隙写物理存储单元。当使用这种包装器方法时,这里描述的用于反绕和重构存储器内容的任何方法既可以应用到逻辑存储单元的写端口,也可以应用到物理存储单元的写端口。
该包装器方法将参照图9进行解释。存储单元200是具有地址输入A、数据输入D以及写使能输入WE的单端口存储器。为了将这个存储单元200转换为双端口存储器,附加电路被添加。多路复用器205将地址输入馈送到存储器200。多路复用器210将数据输入馈送到存储单元200。多路复用器205具有来自端口1的地址输入A1的第一输入和来自端口2的地址输入A2的第二输入。多路复用器210具有来自端口1的数据输入D1的第一输入和来自端口2的数据输入D2的第二输入。状态机215具有来自端口1的写使能WE1的第一输入和来自端口2的写使能WE2的第二输入。状态机215具有接收快速时钟信号的时钟输入,所述快速时钟信号最好具有比仿真器运行的频率快得多的频率。状态机215具有驱动多路复用器205和210选择输入的第一输入。状态机215具有驱动多路复用器220选择输入的第二输入。来自端口1的写使能WE1驱动多路复用器220上的第一输入,而来自端口2的写使能WE2驱动多路复用器220上的第二输入。
已经根据用仿真器硬件来执行存储器恢复讨论了这里描述的各种实施例。但是,这里公开的各种实施例也可以通过工作站上的软件来执行,而不是用仿真器硬件内的软件。使用软件来执行存储器恢复的方式如下。当重构的存储器要被写到不同于DUV开始在其上运行的仿真器的验证系统中时,DUV的存储器中的内容与在捕获阶段从写操作中记录的数据一起被转移到控制该仿真器的工作站。然后,软件程序将使用上述方法来重构存储器的内容,并且把已重构的存储器的内容转移到替换验证系统。诸如软件模拟器之类的可选逻辑验证系统允许使用该模拟器来分析DUV的存储器操作。当重构的存储器将被写回到最初运行DUV的相同仿真器时,RAM的内容就不必被读入工作站。缓冲器(跟踪或线性)的内容被转移到工作站,存储器在这里被重构。重构后,工作站仅仅将已经变化的那些地址转移回到仿真器。注意,如果使用了这种方法,必须跟踪地址以便知道写入的地址,这样可以防止将数据写入不正确的地址。不管重构的存储器是被转移到仿真器还是诸如另一个仿真器或软件模拟器之类的另一个验证系统,这个重构过程既可以对存储器的全部内容进行,也可以只是对在捕获阶段(即,跟踪窗口)受写操作影响的那部分存储器进行。通过选择性地对DUV中在跟踪窗口期间受写操作影响的那部分存储器执行重构,需要在仿真器和工作站之间来回转移的数据量就被显著地降低了。此外,对网表的必要操纵也会更少,因为,例如在到写端口的输入处将不需要多路复用器(多路复用器50,52)。
还要注意,这里描述的方法也可以用在其它系统中以便来模拟设计,例如使用专用硬件的模拟加速引擎或软件模拟器。但是,可能需要进行一些修改。例如,在软件模拟器中,不需要多路复用器来在原始设计写操作和恢复写操作(即,来自循环或线性缓冲器的写数据)之间进行选择。此外,当在软件模拟器中恢复存储器内容时,存储器恢复方法可以通过独立的程序来完成,该独立的程序并不是模拟器的一部分。
因此,这里公开的各种实施例可以用于模拟或仿真数字设计。此外,当使用测试向量来仿真设计或者当仿真器用目标系统运行时(即,在电路仿真期间),这里公开的各种实施例是有用的。
这里公开的各种实施例可以采用包括一系列指令的计算机程序的形式。这些指令可以在计算机可用的介质上提供。例如,计算机可用的介质的通用形式包括软盘、软磁盘、硬盘、磁带、任何其它磁介质;CD-ROM、任何其它光介质;穿孔卡、纸带、任何其它具有孔模式的物理介质;RAM、ROM、PROM(即,可编程只读存储器)、EPROM(即,可擦除可编程只读存储器)(包括FLASH-EPROM)、任何其它存储器芯片;或者盒式磁盘、载波或任何其它介质。
这样,已经参照具体的实施例描述了本发明的各种实施例。但是,很显然,可以在不背离本发明更广泛的精神和范围的情况下可以对它们进行各种修改和改变。例如,读者应该理解,这里描述的处理流程图中显示的处理动作的排序和组合仅仅是示例性的,而本发明可以使用不同或附加的处理动作或者处理动作的不同组合或排序来执行。因此,应该以示例性的而不是限制性的意义来看待说明书和附图。在随后的权利要求以及它们的合法等效物的范围内,本发明的范围是没有限制的。
权利要求
1.一种用于验证电路设计按期望工作的方法,该电路设计包括随机存取存储器,该随机存取存储器包括至少一个写端口、多个用于存储数据的存储单元,所述多个存储单元中的每一个包括一个地址,该方法包括在硬件逻辑仿真系统中仿真电路设计;就在将数据写到随机存取存储器的多个存储单元中选定的一个之前,读取存储在随机存取存储器的多个存储单元中选定的一个中的所述数据;将在随机存取存储器的多个存储单元中选定的一个中读取的数据存储在缓冲器内选定的存储单元,其中,所述缓冲器内所述选定的存储单元中的每一个都被这样安排,以使得存储在所述缓冲器内的数据后进先出地输出;在检验点之后,将存储在所述缓冲器内所述选定存储单元中的数据转移到随机存取存储器中的多个存储单元中选定的一个中。
2.如权利要求1所述的方法,其中,在所述转移步骤之后,该方法包括在所述转移步骤后观察存储在随机存取存储器的多个存储单元中选定的一个中的数据。
3.如权利要求1所述的方法,其中,所述读取所述存储在随机存取存储器的多个存储单元中选定的一个中的数据的步骤包括针对随机存取存储器中至少一个写端口中的每一个,将相应的影子读端口插入到电路设计中;和由所述相应的影子读端口来实施读操作,以便所述存储在随机存取存储器的多个存储单元中选定的一个中的数据由所述相应的影子读端口来读取。
4.如权利要求1所述的方法,其中,所述转移步骤还包括递减被输入到所述缓冲器的地址,以便所述缓冲器内的所述选定的存储单元中的每一个都被后进先出地读出;将来自所述缓冲器内所述选定的存储单元中的每一个的数据放置在随机存取存储器上至少一个写端口之一上;和将来自所述缓冲器内所述选定的存储单元中的每一个的、被放置在随机存取存储器上至少一个写端口之一上的数据写到随机存取存储器中的多个存储单元中选定的一个中。
5.如权利要求4所述的的方法,其中,所述观察步骤还包括在权利要求4的所述写步骤之后,观察随机存取存储器中的至少一些存储单元。
6.一种用于验证电路设计按期望工作的设备,该电路设计包括随机存取存储器,该随机存取存储器包括具有数据输入和地址输入的写端口,该随机存取存储器还包括读端口和多个用于存储数据的存储单元,所述多个存储单元中的每一个包括一个地址,该写端口具有数据输入和地址输入,该设备包括对应于该写端口的影子读端口,所述影子读端口包括从地址输入接收地址的地址输入以及数据输出;缓冲器,所述缓冲器与随机存取存储器的地址输入通信,所述缓冲器还与所述影子读端口的数据输出通信,所述缓冲器具有地址输出和数据输出;第一多路复用器,它馈送写端口上的地址输入,所述第一多路复用器具有与所述缓冲器的所述地址输出通信的第一输入,所述第一多路复用器具有与随机存取存储器的地址输入通信的第二输入;第二多路复用器,它馈送写端口上的数据输入,所述第二多路复用器具有与所述缓冲器的所述数据输出通信的第一输入,所述第二多路复用器具有与随机存取存储器的数据输入通信的第二输入;以及所述第一多路复用器和所述第二多路复用器中的每一个都具有在第一模式和第二模式之间切换的选择输入。
7.如权利要求6的设备,其中,所述缓冲器与状态机通信。
8.如权利要求6的设备,其中,所述第一模式允许由所述第一多路复用器将来自随机存取存储器的地址输入的信号馈送到写端口上的地址输入,还允许由所述第二多路复用器将来自随机存取存储器的数据输入的信号馈送到写端口上的数据输入。
9.如权利要求8的设备,其中,所述第二模式允许由所述第一多路复用器将来自所述缓冲器地址输出的信号馈送到写端口上的地址输入,还允许由所述第二多路复用器将来自所述缓冲器的数据输出的信号馈送到写端口上的数据输入。
10.如权利要求9的设备,还包括与所述缓冲器通信的状态机。
11.如权利要求10的设备,其中,当所述设备处于所述第二模式时,所述状态机控制存储在所述缓冲器内的哪些数据和地址被从所述缓冲器的所述地址输出和所述数据输出中读出。
12.一种用于验证电路设计按期望工作的设备,该电路设计包括随机存取存储器,该随机存取存储器包括第一写端口和第二写端口,所述第一写端口包括第一数据输入和第一地址输入,所述第二写端口包括第二数据输入和第二地址输入,该随机存取存储器还包括第一设计数据输入、第一设计地址输入、第二设计数据输入、第二设计地址输入以及多个用于存储数据的存储单元,所述多个存储单元中的每一个都包括一个地址,该设备包括对应于第一写端口的第一影子读端口,该第一影子读端口包括从第一设计地址输入接收地址的地址输入,所述第一影子读端口还包括数据输出;对应于第二写端口的第二影子读端口,该第二影子读端口包括从第二设计地址输入接收地址的地址输入,所述第二影子读端口还包括数据输出;第一缓冲器,所述第一缓冲器与所述第一设计地址输入通信,所述第一缓冲器还与所述第一影子读端口的所述数据输出通信,所述第一缓冲器具有地址输出和数据输出;第二缓冲器,所述第二缓冲器与所述第二设计地址输入通信,所述第二缓冲器还与所述第二影子读端口的所述数据输出通信,所述第二缓冲器具有地址输出和数据输出;第一多路复用器,它馈送第一写端口上的第一地址输入,所述第一多路复用器具有与所述第二缓冲器的所述地址输出通信的第一输入,所述第一多路复用器具有与第一设计地址输入通信的第二输入;第二多路复用器,它馈送第一写端口上的第一数据输入,所述第二多路复用器具有与所述第二缓冲器的所述数据输出通信的第一输入,所述第二多路复用器具有与第一设计数据输入通信的第二输入;第三多路复用器,它馈送第二写端口上的第一地址输入,所述第三多路复用器具有与所述第一缓冲器的所述地址输出通信的第一输入,所述第三多路复用器具有与第二设计地址输入通信的第二输入;第四多路复用器,它馈送第二写端口上的第一数据输入,所述第四多路复用器具有与所述第一缓冲器的所述数据输出通信的第一输入,所述第四多路复用器具有与第二设计数据输入通信的第二输入;以及所述第一多路复用器、第二多路复用器、第三多路复用器和第四多路复用器中的每一个都具有在第一模式和第二模式之间切换的选择输入。
13.一种用于操纵包括随机存取存储器的电路设计以便调试该电路设计的方法,该随机存取存储器包括写端口和多个用于存储数据的存储单元,所述多个存储单元中的每一个都包括一个地址,该方法包括在电路设计中插入对应于写端口的影子读端口,所述影子读端口包括从电路设计接收地址的地址输入,该影子读端口还包括数据输出;调度所述影子读端口,以便就在写端口将数据写入选定的存储器地址之前,读取存储在所述选定存储地址中的数据;将所述影子读端口的所述数据输出互连到缓冲器,所述缓冲器将在所述调度步骤中读取的数据存储在选定的存储单元中,所述缓冲器包括数据输出和地址输出;在电路设计中插入第一多路复用器,以便所述第一多路复用器馈送写端口上的地址输入,所述第一多路复用器具有与电路设计的地址输入通信的第一输入;在电路设计中插入第二多路复用器,以便所述第二多路复用器馈送写端口上的数据输入,所述第二多路复用器具有与电路设计的数据输入通信的第一输入;将所述缓冲器的所述地址输出互连到所述第一多路复用器的第二输入;将所述缓冲器的所述数据输出互连到所述第二多路复用器的第二输入;以及在检验点后,将存储在所述缓冲器内所述选定存储单元中的数据转移到随机存取存储器的多个存储单元中选定的一个中。
14.如权利要求13的方法,其中,所述转移步骤还包括以后进先出的顺序发送存储在所述缓冲器内所述选定存储单元中的数据,以便随机存取存储器的多个存储单元中选定的一个中的每一个被反绕到所述检验点之前保持的状态。
15.如权利要求13的方法,还包括,在所述转移步骤之后,在所述转移步骤后观察存储在随机存取存储器的多个存储单元中选定的一个的至少一些数据。
16.一种通过使用功能验证系统来验证电路设计按期望工作的方法,该电路设计包括随机存取存储器,该随机存取存储器包括至少一个写端口和多个存储单元,该方法包括在功能验证系统中运行电路设计;就在将数据写入随机存取存储器之前,读取所述数据;在缓冲器中存储所述数据;在检验点,以与将所述数据写入所述缓冲器的顺序相反的顺序读取存储在所述缓冲器中的数据;以及当所述数据从所述缓冲器中读出时,将所述数据写入所述随机存取存储器中。
17.如权利要求16的方法,其中,该功能验证系统包括硬件逻辑验证系统。
18.如权利要求17的方法,其中,所述硬件逻辑验证系统是基于处理器的仿真系统。
19.如权利要求17的方法,其中,所述硬件逻辑验证系统是基于现场可编程门阵列的仿真系统。
20.如权利要求16的方法,其中,该功能验证系统包括软件模拟器。
21.一种用于验证电路设计按期望工作的设备,该电路设计包括随机存取存储器,该随机存取存储器包括至少一个写端口和多个存储单元,该设备包括运行装置,用于在功能验证系统中运行电路设计;读取装置,用于就在将数据写入随机存取存储器之前,读取所述数据;存储装置,用于将数据存储在缓冲器中;读取装置,用于在检验点以与将所述数据写入所述缓冲器的顺序相反的顺序读取存储在所述缓冲器中的数据;和写入装置,用于当所述数据从所述缓冲器中读出时,将所述数据写入所述随机存取存储器中。
22.如权利要求21的设备,其中,该功能验证系统包括硬件逻辑验证系统。
23.如权利要求22的设备,其中,所述硬件逻辑验证系统是基于处理器的仿真系统。
24.如权利要求22的设备,其中,所述硬件逻辑验证系统是基于现场可编程门阵列的仿真系统。
25.如权利要求21的设备,其中,该功能验证系统包括软件模拟器。
26.一种用于验证电路设计按期望工作的方法,该电路设计包括随机存取存储器,该随机存取存储器包括至少一个写端口和多个存储单元,该方法包括在第一功能验证系统中运行电路设计;就在将新数据写入随机存取存储器内的地址之前,读取存储在所述随机存取存储器内所述地址的先前存储的数据;将所述先前存储的数据转移到第一功能验证系统以外的系统;以及在检验点,在所述外部系统中重构所述先前存储的数据以便创建重构的存储器,所述重构的存储器在预定时间对应于随机存取存储器中的多个存储单元,所述重构步骤包括以后进先出的顺序读取所述先前存储的数据;将所述先前存储的数据写入所述外部系统中的存储器,从而创建所述已重构的存储器。
27.如权利要求26的方法,还包括在重构所述数据后,将所述重构的存储器转移到所述第一功能验证系统;以及将所述重构的存储器写入随机存取存储器中。
28.如权利要求26的方法,还包括在重构所述数据后,将所述重构的存储器转移到第二功能验证系统。
29.如权利要求28的方法,其中,所述第二功能验证系统包括软件模拟器。
30.如权利要求26的方法,其中,所述第一功能验证系统包括硬件逻辑验证系统。
31.一种通过使用功能验证系统来验证电路设计按期望工作的方法,该电路设计包括随机存取存储器,该随机存取存储器包括至少一个写端口和多个存储单元,该方法包括在功能验证系统中运行电路设计;将所有的写操作保存在缓冲器内,所述写操作中的每一个都包括地址和要存储在所述地址的数据,所述地址和要被存储在所述地址的所述数据按照对应于所述写操作发生顺序的时间顺序存储;通过重现存储在所述缓冲器中的所述写操作中的每一个来重构随机存取存储器的映射;以及将所述映射写入所述功能验证系统。
32.如权利要求31的方法,其中,该功能验证系统包括硬件逻辑验证系统。
33.如权利要求32的方法,其中,所述硬件逻辑验证系统是基于处理器的仿真系统。
34.如权利要求32的方法,其中,所述硬件逻辑验证系统是基于现场可编程门阵列的仿真系统。
35.如权利要求31的方法,其中,该功能验证系统包括软件模拟器。
36.一种通过使用第一功能验证系统来验证电路设计按期望工作的方法,该电路设计包括随机存取存储器,该随机存取存储器包括至少一个写端口和多个存储单元,该方法包括在第一功能验证系统中运行电路设计;将所有的写操作保存在缓冲器内,所述写操作中的每一个都包括地址和要存储在所述地址的数据,所述地址和要被存储在所述地址的所述数据按照对应于所述写操作发生顺序的时间顺序存储;通过重现存储在所述缓冲器中的所述写操作中的每一个来重构随机存取存储器的映射,所述映射至少包括在所述每一个写操作期间写入所述地址的所述数据;以及将所述映射写入第二功能验证系统。
37.如权利要求36的方法,其中,该第一功能验证系统包括硬件逻辑验证系统。
38.如权利要求37的方法,其中,所述硬件逻辑验证系统是基于处理器的仿真系统。
39.如权利要求37的方法,其中,所述硬件逻辑验证系统是基于现场可编程门阵列的仿真系统。
40.如权利要求36的方法,其中,该第一功能验证系统包括软件模拟器。
41.如权利要求36的方法,其中,该第二功能验证系统包括软件模拟器。
42.如权利要求36的方法,其中,该第二功能验证系统包括硬件逻辑验证系统。
43.一种通过使用功能验证系统来验证电路设计按期望工作的设备,该电路设计包括随机存取存储器,该随机存取存储器包括至少一个写端口和多个存储单元,该设备包括运行装置,用于在功能验证系统中运行电路设计;保存装置,用于将所有的写操作保存在缓冲器内,所述写操作中的每一个都包括地址和要存储在所述地址的数据,所述地址和要被存储在所述地址的所述数据按照对应于所述写操作发生顺序的时间顺序存储;重构装置,用于通过重现存储在所述缓冲器中的所述写操作中的每一个来重构随机存取存储器的映射,所述映射至少包括在每个所述写操作期间写入所述地址的所述数据;和写入装置,用于将所述映射写入所述功能验证系统。
44.如权利要求43的设备,其中,该功能验证系统包括硬件逻辑验证系统。
45.如权利要求44的设备,其中,所述硬件逻辑验证系统是基于处理器的仿真系统。
46.如权利要求44的设备,其中,所述硬件逻辑验证系统是基于现场可编程门阵列的仿真系统。
47.如权利要求43的设备,其中,该功能验证系统包括软件模拟器。
48.一种用于通过使用第一功能验证系统来验证电路设计按期望工作的设备,该电路设计包括随机存取存储器,该随机存取存储器包括至少一个写端口和多个存储单元,该设备包括运行装置,用于在第一功能验证系统中运行电路设计;保存装置,用于将所有的写操作保存在缓冲器内,所述写操作中的每一个都包括地址和要存储在所述地址的数据,所述地址和要被存储在所述地址的所述数据按照对应于所述写操作发生顺序的时间顺序存储;重构装置,用于通过重现存储在所述缓冲器中的所述写操作中的每一个来重构随机存取存储器的映射,所述映射至少包括在所述每一个写操作期间写入所述地址的所述数据;和写入装置,用于将所述映射写入第二功能验证系统。
49.如权利要求48的设备,其中,该第一功能验证系统包括硬件逻辑验证系统。
50.如权利要求49的设备,其中,所述硬件逻辑验证系统是基于处理器的仿真系统。
51.如权利要求49的设备,其中,所述硬件逻辑验证系统是基于现场可编程门阵列的仿真系统。
52.如权利要求48的设备,其中,该第一功能验证系统包括软件模拟器。
53.如权利要求48的设备,其中,该第二功能验证系统包括软件模拟器。
54.如权利要求48的方法,其中,该第二功能验证系统包括硬件逻辑验证系统。
55.一种用于验证电路设计按期望工作的设备,该电路设计包括随机存取存储器,该随机存取存储器包括至少一个写端口和多个存储单元,该设备包括运行装置,用于在第一功能验证系统中运行电路设计;读取装置,用于就在将新数据写入随机存取存储器内的地址之前,读取存储在所述随机存取存储器内的所述地址的先前存储的数据;转移装置,用于将所述先前存储的数据转移到第一功能验证系统以外的系统;和重构装置,用于在检验点,在所述外部系统中重构所述先前存储的数据以便创建重构的存储器,所述重构的存储器在预定时间对应于随机存取存储器中多个存储单元,所述重构装置包括读装置,用于以后进先出的顺序读取所述先前存储的数据;写装置,用于将所述先前存储的数据写入所述外部系统中的存储器,由此创建所述重构的存储器。
56.如权利要求55的设备,还包括转移装置,用于在重构所述数据后,将所述重构的存储器转移到所述第一功能验证系统;和写入装置,用于将所述重构的存储器写入随机存取存储器中。
57.如权利要求55的设备,还包括转移装置,用于在重构所述数据后,将所述重构的存储器转移到第二功能验证系统。
58.如权利要求57的设备,其中,所述第二功能验证系统包括软件模拟器。
59.如权利要求55的设备,其中,所述第一功能验证系统包括硬件逻辑验证系统。
全文摘要
一种用于调试具有随机存取存储器的电路设计的方法和设备。该电路设计在硬件逻辑仿真器上被仿真。仿真器仿真的RAM可以被反绕到先前状态,然后再重现。仿真器仿真的RAM还可以被重构到跟踪窗口期间的某个点所保持的RAM状态。
文档编号G01R31/28GK1573695SQ20041000355
公开日2005年2月2日 申请日期2004年1月29日 优先权日2003年1月23日
发明者P·贝勒特斯基, A·克菲尔, T·-C·林 申请人:快速转动设计系统公司