用于基于fpga的硬件加速器的周期精确的和周期可再现的内存的制作方法
【专利摘要】本发明公开了一种使用场可编程门阵列(FPGA)来仿真被测器件(DUT)的操作的方法、系统及计算机程序产品。所述DUT包括具有一数量的输入端口的器件内存,所述FPGA与具有第二数量的输入端口的目标内存相关联,所述第二数量小于所述第一数量。在一个实施例中,在频率Fd和定义的时间周期下,将一组给定输入施加于所述器件内存,及在频率Ft下,将所述一组给定输入施加于所述目标内存。Ft大于Fd,并且维持所述器件内存与所述目标内存之间的周期精确性。在一个实施例中,通过从目标内存存储阵列中分离DUT内存接口协议,创建所述DUT内存的周期精确的模型。
【专利说明】用于基于FPGA的硬件加速器的周期精确的和周期可再现的内存
[0001]政府权益宣示
[0002]本发明在美国政府资助下所完成,由能源部((DOE))授权签约号B554331。美国政府享有本发明特定的权利。
【技术领域】
[0003]本发明一般地涉及仿真集成电路的操作,具体地说,涉及使用场可编程门阵列来仿真集成电路的操作。
【背景技术】
[0004]随着片上系统及单芯片上多处理器核心变得常见,仿真这些复杂的芯片便成为一种昂贵的挑战。基于场可编程门阵列(FPGA)的硬件加速器是用于仿真这些复杂系统的技术之一。这些硬件加速器的工作原理为将芯片设计(被测器件(DUT))分成多个小区块,然后在各种FPGA中实现这些区块。这些FPGA以与原始DUT设计同样的方式彼此之间相互连接。所述芯片或DUT仿真可在此专用FPGA硬件中执行而非将其在传统的仿真器中执行。传统的仿真器完全以软件编写并在通用计算机中执行。硬件仿真器相比于传统仿真器典型地能给出数个数量级的速度优势。
[0005]基于许多理由,期望将所述仿真加速。验证大型数字芯片所实施的仿真数量非常之大。为了在合理的时间内通过软件完成这些仿真,则需要部署大量的计算机及具有对应相关的费用。加速的仿真器可降低此数目。再者,在达到兴趣点(point of interest)之前,通常需要对电路进行仿真一段很长的时间。此长期仿真为连续的过程,其可能需对软件执行几天,且无法仅通过使用更多的计算机而加速。
[0006]在构建硬件仿真加速器过程中所引发众多设计上的挑战之一为周期精确性。基于FPGA的硬件加速器应在逐周期的基础上精确地匹配DUT的行为,这意味着:如果将所述DUT仿真于软件仿真器上或者当所述DUT被构建于单个或多个芯片中时,在任何给定的DUT时间周期,所有三个系统(硬件加速器、软件仿真器、DUT芯片)均应处于相同的状态下。随着DUT设计可包括不同种类的内存(寄存器阵列、SRAM、嵌入或外部DRAM),在设计硬件加速器中这变成显著的挑战。所有这些DUT内存类型必需被映射至FPGA片上内存或连接到FPGA的外部内存。
[0007]构建硬件仿真加速器中的另一设计上的挑战为周期再现性,其定义如下:由同样的初始条件所开始的多次执行,对所有DUT状态应获得相同的踪迹。每次仿真以全然相同的仿真条件实施,通过仿真器应获得完全相同的结果。例如,在某些情况下系统可在不同级别的优化上运行仿真。在最高级别的优化上,仿真运行得非常快,且用于检验无错误发生。如果某事发生错误,并且优化后的仿真将其进行标记,期望的是在较低级别的优化上再现此仿真,所述优化留下良好的踪迹供电路除错。这两种仿真的行为应完全相同,否则将无法以此方式实行电路的除错。尽管通常容易在仿真器的软件实施中确保此周期再现性特性,但是当软件技术由硬件加速器硬件所取代时,这变成显著的问题。在一种或多种情况中,此方面是与可将数字电路的仿真加速多少有关的更严格的限制之一。
[0008]对于实现有效的仿真除错,周期再现性是关键的,且此要求限制了整个加速系统的时钟和重设是如何运实施的。周期再现性的要求亦增加了 DUT内存如何映射到加速器平台上的显著挑战。由于DUT的内存构成系统状态的大部分,因此需要适当地初始化和维护此类内存的所有可寻址内容以匹配软件仿真及最终芯片实现的内容。
【发明内容】
[0009]本发明的各实施例提供一种使用场可编程门阵列(FPGA)来仿真被测器件(DUT)的操作的方法、系统及计算机程序产品。所述DUT包括具有一数量的输入端口的器件内存,所述FPGA与具有第二数量的输入端口的目标内存相关联,所述第二数量小于所述第一数量。在一个实施例中,所述方法包括:在频率Fd和定义的时间周期下,经由所述器件内存的所述输入端口将一组给定输入施加于所述器件内存;以及在频率Ft下,经由所述目标内存的所述输入端口将所述一组给定输入施加于所述目标内存。Ft大于Fd,并且在所述定义的时间周期下将所述一组给定输入中的所有输入施加于所述目标内存,以便维持所述器件内存与所述目标内存之间的周期精确性。
[0010]在一个实施例中,所述方法还包括通过从目标内存存储阵列中分离DUT内存接口协议,创建所述DUT内存的周期精确的模型。
[0011]在一个实施例中,所述方法还包括创建所述DUT内存的周期精确的且周期可再现的模型。这通过以下操作完成:在可停止的DUT时钟操作映射的DUT内存接口,在自由运行的时钟上操作所述目标内存,以及在所述可停止的DUT时钟和所述自由运行的时钟之间维护恒定的频率和相位关系。
[0012]在一个实施例中,所述器件内存具有数据宽度Wd,且所述目标内存具有数据宽度Wt0所述器件内存的所述输入端口包括一个或多个读取端口和一个或多个写入端口,并且Nd设定为等于所述器件内存的所述读取端口的数目或所述写入端口的数目中的较大者。At为表示在所述目标内存上执行读取或写入操作所耗费的定义的Ft时钟周期数的给定数值;以及 Fd 小于或等于(Ft) / ((ffd/fft) (At+Nd))。
[0013]在一个实施例中,所述DUT内存为DUT DRAM内存且所述目标内存为目标DRAM内存。所述方法还包括:隐藏所述目标DRAM内存的刷新,方式为:扰乱所述目标DRAM内存的地址以降低刷新所述目标DRAM内存的必要性;当所述DUT DRAM内存的刷新发生时,在所述目标DRAM内存中强制刷新;及当所述目标内存的刷新正在发生时,停止DUT时钟,并且在所述目标内存的刷新已完成之后,重启所述DUT时钟。
[0014]在一个实施例中,所述DUT内存为DUT DRAM内存且所述目标内存为目标DRAM内存,且在预定时间刷新所述目标DRAM内存。所述方法还包括:通过对所述目标内存过计时而隐藏所述目标内存的刷新,使得所述目标内存和所述DUT内存在不同频率下操作,以及通过使用所述DUT内存操作与所述目标内存操作之间的频率差而隐藏所述目标内存的刷新。
[0015]在一个实施例中,将命令序列施加于所述器件内存,以及所述方法还包括:使用所述目标内存来检测和标识施加于所述器件内存的不正确的命令序列。
[0016]在一个实施例中,所述方法还包括提供所述器件内存与所述目标内存之间的可编程地址转换,以便将所述器件内存中的地址转换成所述目标内存中的地址;及使用所述可编程地址转换来研究所述器件内存的性能优化。
[0017]在一个实施例中,使用一个或多个器件时钟来操作所述器件内存;以及在定义的时间处,将所述器件内存重设为定义的非零器件内存状态。当将所述器件内存重设为所述定义的非零器件内存状态时,停止所述一个或多个器件时钟中的所有器件时钟,以便为所述器件内存提供周期再现性。
[0018]在一个实施例中,使用第一可停止的时钟在所述频率Fd下操作所述器件内存,使用第二时钟在所述频率Ft下操作所述目标内存,以及在定义的条件下停止所述第一可停止的时钟。当所述第一时钟被停止时,自由运行所述第二时钟,以在所述第一时钟被停止期间将所述一组给定输入中的至少某些输入施加于所述目标内存;以及在所述第一与第二时钟之间维持恒定的相位关系。
[0019]在本发明的实施例中,所述目标内存是过计时的(hyper clocked),这意味着所述内存在比所述DUT时钟更高的时钟下操作,其中超出的内存时钟周期用于在所述目标内存的端口之间复用。由于并无超出的DUT周期被读入及写出端口之间的复用所消耗,所述过计时的内存模型维持周期精确性。
[0020]为了维持周期可再现的行为,本发明的实施例提供初始化电路,其使用复用的写入端口将已知状态预载到内存中。术语“预载”用于强调此时并无DUT时钟在运行中。复杂芯片的全部内存的初始化可涉及多个预载电路,且可针对预载选择性地选取内存系统的一些部分,以便保持硬件加速器的周期再现性。
【专利附图】
【附图说明】
[0021]图1示出根据本发明的一个实施例的包括多个场可编程门阵列(FPGA)器件的仿真系统;
[0022]图2示出FPGA器件的示意性架构;
[0023]图3示出自由运行及可停止的时钟的操作;
[0024]图4示出根据本发明的一个实施例的实现被测器件DRAM的目标内存模型的方块图。
【具体实施方式】
[0025]如本领域的技术人员将理解的,本发明的实施例可以体现为系统、方法或计算机程序产品。因此,本发明的实施例可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或组合了软件和硬件方面的实施例的形式,本文一般称为“电路”、“模块”或“系统”。此外,本发明的实施例可以采取体现在任何有形的表达介质(在介质中包含计算机可用程序代码)中的计算机程序产品的形式。
[0026]可以使用一个或多个计算机可用或计算机可读介质的任意组合。所述计算机可用或计算机可读介质例如可以是(但不限于)电、磁、光、电磁、红外线或半导体系统、装置、设备或传播介质。计算机可读介质的更具体的实例(非穷举列表)将包括以下项:具有一条或多条线的电连接、便携式计算机软盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦写可编程只读存储器(EPROM或闪存)、光纤、便携式光盘只读存储器(CDROM)、光存储设备、诸如那些支持因特网或内联网的传输介质或磁存储设备。注意,计算机可用或计算机可读介质甚至可以是程序被打印在其上的纸张或其他适合的介质,因为所述程序可以通过例如光扫描所述纸张或其他介质被电子地捕获,然后被编译、解释或另外以适合的方式被处理(如果必要),然后被存储在计算机存储器中。在此文档的上下文中,计算机可用或计算机可读介质可以是任何能够包含、存储、传送、传播或传输由指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合的程序的介质。所述计算机可用介质可以包括其中包含所述计算机可用程序代码(例如,在基带中或作为载波的一部分)的传播数据信号。可以使用任何适当的介质(包括但不限于无线、线缆、光缆、RF等)来传输所述计算机可用程序代码。
[0027]用于执行本发明的操作的计算机程序代码可以使用包含一种或多种编程语言的任意组合来编写,所述编程语言包括诸如Java、Smalltalk、C++之类的面向对象的编程语言以及诸如“C”编程语言或类似的编程语言之类的常规过程编程语言。所述程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为独立的软件包、部分地在用户计算机上并部分地在远程计算机上执行,或者完全地在远程计算机或服务器上执行。在后者的情况中,远程计算机可以通过包括局域网(LAN)或广域网(WAN)的任何类型网络与用户的计算机相连,或者可以与外部计算机进行连接(例如,使用因特网服务提供商通过因特网连接)。
[0028]下面将参考根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或方块图对本发明进行描述。将理解,所述流程图和/或方块图的方块以及所述流程图和/或方块图中的方块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供给通用计算机、专用计算机、或其他可编程数据处理装置的处理器以产生机器,以便通过所述计算机或其他可编程数据处理装置的处理器执行的所述指令产生用于实现在一个或多个流程图和/或方块图方块中指定的功能/操作的装置。这些计算机程序指令也可以被存储在能够引导计算机或其他可编程数据处理装置以特定方式执行功能的计算机可读介质中,以便存储在所述计算机可读介质中的所述指令产生一件包括实现在一个或多个流程图和/或方块图方块中指定的功能/操作的指令装置的制品。
[0029]所述计算机程序指令还可被加载到计算机或其他可编程数据处理装置,以导致在所述计算机或其他可编程装置上执行一系列操作步骤以产生计算机实现的过程,从而在所述计算机或其他可编程装置上执行的所述指令提供用于实现在一个或多个流程图和/或方块图方块中指定的功能/操作的过程。
[0030]本发明涉及使用场可编程门阵列(FPGA)来仿真集成电路的操作。更具体地说,本发明的实施例涉及当使用所述阵列为集成电路建模时,维护用于FPGA的周期精确的和周期可再现的内存。
[0031]FPGA通常用于仿真数字电路。VHDL和/或描述数字逻辑的Verilog代码(或其他类似代码)可被合成用于FPGA平台,然后运行大量的周期以观察其行为。大型数字电路一般远大于可被单个FPGA仿真的电路,且大型数字电路的仿真可需要多达10至100个FPGA。此外,大型数字电路的仿真可需要数种类型的操作,例如单步、创建踪迹、或修改注册值、或实施任何一个、一些、或所有的其他操作,所述其他操作在现代的仿真环境中为常见的。
[0032]使用大量的FPGA而实施的仿真器通常需要以这样的方式协调所有这些FPGA:测试下的数字电路的不同部分协调一致,并且即使当不同步的仿真事件可能发生时仍维持协调一致。例如,源自FPGA的注意请求需要在当前周期结束前传播至仿真器中所有FPGA,使得周期精确的信息得以保存且能从仿真器扫描出来(或以其他方式读出)。这表示在仿真器中实施(除其他特性外)断言、打印声明及单步的一种方式。
[0033]在FPGA仿真器基础设施中可实施一些电路及同步化协议,所述基础设施可允许大量的FPGA在逐周期的基础上同步,允许单步,允许系统中任一 FPGA在当前周期结束前停止仿真,和/或保证仿真的周期再现性与其是如何开始的无关。
[0034]用于同步的电路可归类成以下类型:高速时钟、起始电路、连续运行电路、及仅在仿真时运行的电路。起始电路在仿真开始时创建全局同步状态。所述起始电路包括全局重设同步、全局时钟同步、串行链路建立等。连续运行的电路在起始电路完成初始同步之后开始运行,且无论仿真是否进行均保持运行。这些电路包括串行链路本身、时钟握手采样、仿真命令处理等。仅在仿真期间运行的电路只有当仿真活动时才活动,它们包括所有功能性的可停止的时钟、仿真计数器等。
[0035]参阅图1,根据本发明的一个实施例,一种示意性系统包括:多个目标场可编程门阵列102,其根据目标系统的连接拓扑及映射部分而相互连接;以及控制模块,其耦合至所述多个目标场可编程门阵列。在一个非限制示例中,所述控制模块包括:执行主机控制软件的主机控制计算机116,耦合至所述主机控制计算机的全局控制场可编程门阵列110,以及耦合至所述全局控制场可编程门阵列和所述多个目标场可编程门阵列102的至少第一部分的至少第一局部控制场可编程门阵列114。
[0036]在一些实例中,图1的系统还可包括一组点对点自由运行的串行通信链路112。所述一组点对点自由运行的串行通信链路与依据所述连接拓扑的多个目标场可编程门阵列102相互连接。在一些实施例中,所述连接拓扑模拟所述目标系统的连接拓扑。这些实施例可包括至少一个路由器场可编程门阵列104,其与所述目标场可编程门阵列102的至少一部分相互连接。
[0037]所述全局控制场可编程门阵列110配置成在所述主机控制软件的控制下以起始、停止、及单步执行所述目标系统的仿真。所述至少第一局部控制场可编程门阵列114配置成直接地控制所述多个目标场可编程门阵列的至少第一部分,并自/向所述全局控制场可编程门阵列转发系统控制命令。
[0038]在一些实施例中,可具有两个或更多个局部控制场可编程门阵列114耦合至所述全局控制场可编程门阵列110,且每个局部控制场可编程门阵列可控制一个或多个目标场可编程门阵列102。在一些实施例中,所述全局控制场可编程门阵列110还可配置成从所述局部控制场可编程门阵列接收及聚合服务请求事件,并且停止仿真从所述多个目标场可编程门阵列发出的服务或错误事件报告。所述局部控制场可编程门阵列亦可负责直接控制所述多个目标场可编程门阵列102的对应(一个或多个)部分。在一些实施例中,通过所述局部控制场可编程门阵列直接控制所述多个目标场可编程门阵列的对应部分包括下载目标场可编程门阵列配置及内存映像初始化。
[0039]额外的元件包括配置为分配参考时钟信号107的平衡时钟分配网络106,以及耦合至所述控制模块且配置为分配重设信号至所述多个目标场可编程门阵列的平衡重设分配网络108。所述控制模块及所述平衡重设分配网络共同合作地配置成使用所述多个目标场可编程门阵列开始及控制所述目标系统的仿真。
[0040]参考图1和图2,多个局部时钟控制状态机226位于所述目标场可编程门阵列102中。所述局部时钟控制状态机耦合至所述平衡时钟分配网络并从该处获得参考时钟信号。所述多个局部时钟控制状态机被配置为生成一组同步后的自由运行及可停止的时钟227、229以维持目标系统仿真的周期精确的和周期可再现的执行。
[0041]在一个或多个实施例中,所述平衡时钟分配网络106以低偏斜分配所述参考时钟信号107。所述平衡重设分配网络108以低偏斜分配所述重设信号;在一个或多个实施例中,所述重设信号为电平敏感(level-sensitive)重设信号。在此所使用的“低偏斜”是相对于所述参考时钟信号,使得从最早到达的至最近到达的所述平衡重设分配网络108的总体偏斜相对于所述参考时钟信号的周期时间而言较小,以便确保其在或多或少于所述同样的参考时钟周期到达每个位置。
[0042]在一些实施例中,所述参考时钟信号107为装置中最高的时钟频率,以及在其他实施例中,所述参考时钟信号107为生成装置中最高的时钟频率的参考。在后者的情况中,所述多个目标场可编程门阵列102还包括多个锁相环,它们从所述参考生成最高的时钟频率。一些实施例包括所述多个目标场可编程门阵列102可存取的至少一个外部存储器件224并且包含用于执行所述目标系统的仿真的测试码。可在本发明的实施例中使用的基于FPGA的硬件加速器的更多细节已在2012年5月10日公开的美国公开第20120117413号中描述。
[0043]在仿真系统100的操作的一个实施例中,以规则间隔收集短促的快照以标识错误所起源的期间,以及接着在所标识的发生错误的期间中经由以更细粒度重放仿真来获得更完整的波形踪迹。例如,不是获取需要较长时间的完整仿真踪迹,而是每隔预定数目(例如数千)个周期取得快照,并且可找到其中发生错误的第一快照。可在错误被观察到之前的最后快照与错误被注意到的第一快照之间执行完整跟踪(逐周期快照)。
[0044]为了实现此仿真,重要的是实现周期精确性和周期再现性两者。在设计硬件加速器时这是显著的挑战,因为在相当多的部分中,DUT可包括不同种类的内存一寄存器阵列、SRAM、嵌入或外部DRAM。
[0045]当今芯片中的内存以容量、访问时间和功耗为基础而以数种形式存在。芯片设计者将寄存器阵列用于非常快速且小型的存储装置,典型地在数千字节的量级。寄存器阵列或寄存器文件为数千紧凑排列的寄存器。其他基础形式的内存为静态随机存取内存(SRAM)和动态随机存取内存(DRAM)。SRAM比DRAM快,但是占较大的面积及较多功耗,因此被用于几个兆字节的容量。DRAM较佳用于高密度且通常涵盖高兆字节至数千兆字节的空间。在硬件加速器中,这些内存可映射到在FPGA上或者在FPGA外的任何形式的内存。
[0046]周期精确性
[0047]在将DUT内存映射到基于FPGA的硬件加速器内存时,应考虑周期精确性的问题。此硬件加速器内存称为目标内存。
[0048]如先前所述,以寄存器文件或SRAM形式呈现的DUT内存可具有多个读/写端口。存在于FPGA上的内存(即目标内存)通常具有单个读出端口和单个写入端口。为了使用单端口内存对多端口内存建模,可使用简单的时分复用技术。在此技术中,所有的并行事件通过使用某些仲裁技术而串行化。此技术不足以维持映射的内存模型的周期精确性。在本发明的各实施例中,目标内存被过计时,这意味着所述内存以高于所述DUT时钟的时钟速率操作,其中额外内存时钟周期被用于端口之间的复用。随着无额外DUT周期消耗于多个读或写端口之间的复用,过计时的内存模型可维持周期精确性。
[0049]此技术亦可用于执行在所述DUT与所述目标内存之间的数据端口宽度匹配。例如,假设待建模的DUT内存是微处理器的二级高速缓存。现今微处理器的高速缓存线可宽至128字节或更宽。取决于高速缓存的大小,可能希望通过使用附接于FPGA的外部SRAM而为其建模。为了节省FPGA上的引脚,本发明的各实施例使用较小宽度的外部SRAM并且使用相同的过计时技术来执行构成DUT内存数据宽度所需的多个读出或写入。在本范例中,如果决定使用8位外部SRAM对L2高速缓存建模,则必须执行128个读出或写入操作以模仿DUT高速缓存的单个读出或写入的行为。为了保持DUT与目标内存模型之间的周期精确性,所有128个读出或写入操作必须在少于一个DUT时钟周期内完成。
[0050]DUT内存本身可花费多于单个周期来完成读出或写入,使得先前的限制可被放宽。此放宽以简单的代价可得到较高性能的系统。读或写的延迟时间(latencies)可基于操作的历史而变化,由此使得记录最坏情况数变得复杂,因此在低于单个DUT周期内完成目标内存的操作会比较容易,并且然后仅在达到期望延迟时间时才呈现结果。
[0051]为了概括此技术,令目标内存可被操作的最大频率为Ft。令欲被映射的DUT内存具有Nd个读或写端口(具有其中的较大者)。
[0052]Nd〉 = I (I)
[0053]令目标内存具有单个读端口或单个写端口。令DUT内存的数据宽度为Wd且目标内存的数据宽度为Wt。
[0054]ffd> = Wt (2)
[0055]在Wt>Wd的情况下,目标内存中多余的位可保持未使用。
[0056]令At为在目标内存上执行读出或写入操作所消耗的Ft时钟周期的最坏情况数。为了维持DUT时钟(具有频率Fd)以及目标内存时钟(具有频率Ft)的周期精确性,必须遵循以下等式:
[0057]Fd〈 = Ft/ ((ffd/fft) * (At+Nd)) (3)
[0058]等式(3)假设所述目标内存具有流水线架构(pipelined architecture)。可在本发明实施例中用于生成时钟信号的更多细节已描述于共同未决申请(代理人案号Y0R920120165US1),发明名称 “Generating Clock Signals For a Cycle Accurate, CycleReproducible FPGA Based Hardware Accelerator”,在此通过参考引入其全部内容。
[0059]当传输至目标FPGA内存时需要特殊处理的另一种形式的DUT内存为DRAM。DUT可使用嵌入式DRAM或单独DRAM芯片用于存储。在两种情况下,可使用SRAM或者DRAM作为目标内存以为DUT DRAM建模。
[0060]图4示出实施DUT DRAM的目标内存模型的方块图。图4的方块图显示映射至FPGA逻辑的DUT DRAM控制器402。此控制器所发出或接收的命令或数据可由协议处理机或数据解析器块404解释。此块404将接收DRAM命令,例如读出、写入、刷新、预充电、激活等,并将它们转换成适于目标内存410的内存控制器406的等同物。所述目标内存控制器406然后将采取这些转换后的命令并驱动片外目标内存。此内存可以以SRAM或DRAM的形式存在。
[0061]在此实施例中,此技术将DUT内存接口协议与内存容量分离。前者于FPGA逻辑中实施(使用DUT内存协议处理机404和错误检测及报告区块416)并且后者可使用可于硬件加速器板上提供的任何内存子系统(目标内存410)来建模。依此方式,类似DUT逻辑的剩余部分,DUT内存控制器402将在频率Fd下操作,而所述协议处理机404、所述目标内存控制器406、及所述目标内存阵列410将以如等式(3)导出的频率Ft操作。
[0062]将DUT内存接口协议与内存容量分离并且在DUT时钟率Fd下运行前者并在过时钟率Ft下运行后者可提供另一优点一可使Fd时钟生成器412成为可停止的,而Ft时钟生成器414可保持自由运行。可停止的以及自由运行的时钟二者皆应具有恒定的相位关系以维持周期再现性。为了使DUT时钟为可停止的应允许如硬件加速器的单步等特征。使用自由运行时钟操作目标内存允许针对目标内存使用DRAM。
[0063]图3示出自由运行的时钟信号与可停止的时钟信号的同步。如图中所示,使用异步状态机控制器226生成时钟相位,使它们全部在锁定步骤(为了清晰,简化版显示四个状态S1、S2、S3、S4)中运行。在一个或多个情况下,状态机控制器226相当灵活,能够在维持相位期间生成任何合理的时钟频率集合。在至少一些情况中,来自全局控制器110的“开始(go) ”信号可在任何时间被断言和/或取消断言以开始和/或停止仿真的执行。从图3的Dl可看出,在时钟控制器内部,将开始信号的取消断言延迟至时钟的第一不活动(inactive)(低)部分,从而避免潜在的时钟脉冲毛刺。此外,亦如图3所见,开始信号的上升沿被延迟D2,以允许可停止的时钟在正确的状态下继续。在此图中,时钟在S2后停止,并且只有继之以S3才可继续。具有较低频率(例如与Xl相比的x2、x4)的派生时钟由下降脉冲产生,而不是保持50%的占空比。此方案的优点为,当所有的时钟为不活动(低)时保证时间周期,此时间周期用作适当的时间窗口,以便以无毛刺的方式开始和/或停止时钟状态机。
[0064]图4的实施例中的DUT内存协议处理机应处理以下功能:
[0065]1.解释DUT内存协议;
[0066]2.错误检测及报告;
[0067]3.在DUT和目标内存之间的地址转换;
[0068]4.在DUT和目标内存之间的数据宽度匹配;
[0069]5.刷新补偿;及
[0070]6.支持各种DUT内存配置的架构探索。
[0071]除了在FPGA逻辑中对DUT内存协议本身建模之外,本发明的各实施例提供额外的检查逻辑,以由DUT逻辑的其余部分监视对所述协议的正确遵循,由此提供有价值的检验涵盖范围。例如,可插入测试电路以检查读后写操作对同一内存位置的正确计时并报告任何违规。
[0072]DRAM需要被周期性地刷新以维持其内容。此刷新应在目标内存中被精确地建模。如果目标内存为SRAM,则可通过在刷新期间停止SRAM时钟而对刷新建模,由此使得任何其他操作不可用。如果在刷新期间由所述DUT逻辑生成读或写指令,本发明的实施例为将出现错误标志的检测器416建模。
[0073]如果使用DRAM为目标内存建模,由于DUT以及目标内存二者皆具有其自己的刷新速率,所以必须处理两个单独的刷新。目标内存通常为过时钟以补偿如等式(3)所示的宽度和深度失配,因此针对DUT DRAM的刷新将不会与针对目标DRAM的刷新相重叠。此外,目标DRAM的刷新周期应始终对DUT逻辑不可见,否则目标内存模型将失去周期精确性。为解决此问题,本发明的各实施例提供两种方法。
[0074]一种方法是通过地址扰乱而最小化目标内存中所需的刷新。在DRAM中,将线性地址分成行、列、排(bank)及列队(rank)地址。如果将线性地址的低阶位分配给排及列队地址,不同的排将被更频繁地寻址,因此降低刷新的必要性。通过使用已知的伪随机二进制序列,可将这些低阶地址位进一步随机化,从而确保位中的变化。除了地址扰乱之外,当DUT内存需要刷新时,可在目标内存中强制刷新。两种技术一即地址扰乱和强制刷新一皆发生于过时钟速率且因此对DUT时钟周期为不可见,故可维持周期精确性。在极少的情况中,当目标内存确实需要刷新时,本发明的各实施例在刷新期间停止DUT时钟且当刷新结束时重启DUT时钟。在目标内存刷新期间DUT时钟不会行进,因此在DUT中没有状态改变,从而维持整体系统的周期精确性。此技术给出最高性能但伴随更高复杂性的缺点。
[0075]针对上述问题的第二种方法提供较简单的解决方案,并且具有较低或最小的性能代价。令Re为执行目标内存刷新所需的周期数,则等式(3)可扩充为:
[0076]Fd< = Ft/ ((ffd/fft) * (At+Rc+Nd)) (4)
[0077]因此,当计算可容许的DUT操作频率时,始终考虑目标刷新周期。
[0078]与SRAM相比,DRAM具有较大命令集。并非操作DRAM所需的所有命令均在SRAM中具有功能上的等同物。例如,不能在SRAM目标内存中为排激活命令显式建模。为了处理此命令,图4的方块图中的协议处理机检测此命令并使用其提取被激活的排的行地址。此行地址然后被用于形成用作目标内存的SRAM的线性地址。如果目标内存亦为DRAM,则所提取的行地址可被用于生成所述目标DRAM的地址。同样地,应解释模式设置寄存器命令以提取读出或写入延迟。这些延迟然后可用于在期望的时间将命令结果呈现给DUT逻辑。依此方式,可维持周期精确性。
[0079]周期再现性
[0080]为使硬件加速器展现周期再现性行为的特性,任何形式的内存必须在重设后以相同的状态起始。本发明的各实施例提供初始化电路以实现此周期再现性行为。所述电路使用复用的写入端口将已知状态预载到内存中。可找到简单模拟电路,其将所有内存内容初始化为零,但当需要伴随纠错码或奇偶校验存储数据时,简单模拟电路是没有用的。FPGA供应者提出包括在配置期间的二进制文件,以将所有内存内容初始化为已知状态。虽然在资源利用上此技术较优越,然而其并不灵活。在此披露的技术中的术语“预载”是用于强调此时应没有DUT时钟正在运行。复杂芯片的整个内存的初始化可涉及数个预载电路,尽管可能并不需要预载整个内存状态。例如,在微处理器中,为实现周期再现性,可能仅需预载整个内存模型的引导内存和主内存。因此,可以选择性地选择内存系统的预载部分,以便保持硬件加速器的周期再现性。
[0081]在任何计算机系统中,内存通常为最昂贵的资源。尽管仿真加速器的主要目的是以周期精确的和周期可再现的方式为DUT内存建模,但是也可将其用于系统的内存密度计算,其中内存密度计算是指,为获得最高性能而以正确数目的DRAM内存芯片填充DUT。将DRAM寻址空间分成行、列、排及列队地址。对于特定应用,可能期望对于相同总数的内存具有更多列队或较小的排以提供更高性能。具有此数据的先验知识可大幅降低系统成本。其亦可用于构建高度应用优化的系统。为获得此级别的优化,本发明的各实施例提供从DUTDRAM地址空间到目标内存地址空间的可编程地址转换。此可编程性工作类似切换面板,来自一侧的任何地址位可连接至另一侧的任何其他地址位。由于所有操作的延迟被精确地建模,并且在每一个内存位置之间存在一对一的对应,此应用可在数个不同配置中运行以研究性能影响。
[0082]出于示例和说明目的给出了对本发明的描述,并且所述描述并非旨在是穷举的或是将本发明限于所公开的形式。在不偏离本发明的范围的情况下,对于本领域的技术人员来说,许多修改和变化都将是显而易见的。实施例的选择和描述是为了最佳地解释本发明的原理、实际应用,并且当适合于所构想的特定使用时,使得本领域的其他技术人员能够理解本发明的具有各种修改的各种实施例。
【权利要求】
1.一种使用场可编程门阵列(FPGA)来仿真被测器件(DUT)的操作的方法,所述DUT包括具有一数量的输入端口的器件内存,所述FPGA与具有第二数量的输入端口的目标内存相关联,所述第二数量小于所述第一数量,所述方法包括: 在频率Fd和定义的时间周期下,经由所述器件内存的所述输入端口将一组给定输入施加于所述器件内存; 在频率Ft下,经由所述目标内存的所述输入端口将所述一组给定输入施加于所述目标内存,其中Ft大于Fd,以在所述定义的时间周期下将所述一组给定输入中的所有输入施加于所述目标内存,以便维持所述器件内存与所述目标内存之间的周期精确性。
2.如权利要求1所述的方法,还包括: 通过从目标内存存储阵列中分离DUT内存接口协议,创建所述DUT内存的周期精确的模型。
3.如权利要求1所述的方法,还包括通过在可停止的DUT时钟操作映射的DUT内存接口,创建所述DUT内存的周期精确的且周期可再现的模型,并且在自由运行的时钟上操作所述目标内存;以及其中所述可停止的DUT时钟和所述自由运行的时钟具有恒定的频率和相位关系。
4.如权利要求1所述的方法,其中: 所述器件内存具有数据宽度Wd,且所述目标内存具有数据宽度Wt ; 所述器件内存的所述输入端口包括一个或多个读取端口和一个或多个写入端口; Nd设定为等于所述器件内存的所述读取端口的数目或所述写入端口的数目中的较大者, At为表示在所述目标内存上执行读取或写入操作所耗费的定义的Ft时钟周期数的给定数值;及
Fd 小于或等于(Ft) / ((ffd/fft) (At+Nd))。
5.如权利要求1所述的方法,其中所述DUT内存为DUTDRAM内存且所述目标内存为目标DRAM内存,以及所述方法还包括: 隐藏所述目标DRAM内存的刷新,方式为: 扰乱所述目标DRAM内存的地址以降低刷新所述目标DRAM内存的必要性, 当所述DUT DRAM内存的刷新发生时,在所述目标DRAM内存中强制刷新;及 当所述目标内存的刷新正在发生时,停止DUT时钟,并且在所述目标内存的刷新已完成之后,重启所述DUT时钟。
6.如权利要求1所述的方法,其中所述DUT内存为DUTDRAM内存且所述目标内存为目标DRAM内存,且在预定时间刷新所述目标DRAM内存,以及所述方法还包括: 通过对所述目标内存过计时而隐藏所述目标内存的刷新,使得所述目标内存和所述DUT内存在不同频率下操作,以及通过使用所述DUT内存操作与所述目标内存操作之间的频率差而隐藏所述目标内存的刷新。
7.如权利要求1所述的方法,其中将命令序列施加于所述器件内存,以及所述方法还包括: 使用所述目标内存来检测和标识施加于所述器件内存的不正确的命令序列。
8.如权利要求1所述的方法,还包括: 提供所述器件内存与所述目标内存之间的可编程地址转换,以便将所述器件内存中的地址转换成所述目标内存中的地址;及 使用所述可编程地址转换来研究所述器件内存的性能优化。
9.如权利要求1所述的方法,还包括: 使用一个或多个器件时钟来操作所述器件内存; 在定义的时间处,将所述器件内存重设为定义的非零器件内存状态;及当将所述器件内存重设为所述定义的非零器件内存状态时,停止所述一个或多个器件时钟中的所有器件时钟,以便为所述器件内存提供周期再现性。
10.如权利要求1所述的方法,其中所述将一组给定输入施加于所述器件内存包括: 使用第一可停止的时钟在所述频率Fd下操作所述器件内存;以及 使用第二时钟在所述频率Ft下操作所述目标内存; 在定义的条件下停止所述第一可停止的时钟; 当所述第一时钟被停止时,自由运行所述第二时钟,以在所述第一时钟被停止期间将所述一组给定输入中的至少某些输入施加于所述目标内存;以及在所述第一与第二时钟之间维持恒定的相位关系。
11.一种用于仿真被测器件(DUT)的操作的系统,所述DUT包括具有一数量的输入端口的器件内存,所述系统包括: 至少一个场可编程门阵列(FPGA); 目标内存,其在通信上与所述FPGA关联,所述目标内存具有第二数量的输入端口,所述第二数量小于所述第一数量; DUT控制器,用于在频率Fd和定义的时间周期下,经由所述器件内存的所述输入端口将一组给定输入施加于所述器件内存;以及 目标内存控制器,用于在频率Ft下,经由所述目标内存的所述输入端口将所述一组给定输入施加于所述目标内存,其中Ft大于Fd,以在所述定义的时间周期下将所述一组给定输入中的所有输入施加于所述目标内存,以便维持所述器件内存与所述目标内存之间的周期精确性。
12.如权利要求11所述的系统,其中: 所述目标内存控制器通过从目标内存存储阵列中分离DUT内存接口协议,创建所述DUT内存的周期精确的模型。
13.如权利要求11所述的系统,其中: 使用可停止的DUT时钟来操作映射的DUT内存接口 ;以及 当以所述可停止的DUT时钟操作所述DUT内存接口时,通过在自由运行的时钟上操作所述目标内存,所述目标内存控制器创建所述DUT内存的周期精确的且周期可再现的模型;以及其中所述可停止的DUT时钟和所述自由运行的时钟具有恒定的频率和相位关系。
14.如权利要求11所述的系统,其中: 所述DUT内存为DUT DRAM内存且所述目标内存为目标DRAM内存;以及 所述目标内存控制器隐藏所述目标DRAM内存的刷新,方式为: 扰乱所述目标DRAM内存的地址以降低刷新所述目标DRAM内存的必要性, 当所述DUT DRAM内存的刷新发生时,在所述目标DRAM内存中强制刷新;及 当所述目标内存的刷新正在发生时,停止DUT时钟,并且在所述目标内存的刷新已完成之后,重启所述DUT时钟。
15.如权利要求11所述的系统,其中: 所述DUT内存为DUT DRAM内存且所述目标内存为目标DRAM内存,且在预定时间刷新所述目标DRAM内存;及 所述目标内存控制器通过对所述目标内存过计时而隐藏所述目标内存的刷新,使得所述目标内存和所述DUT内存在不同频率下操作,以及通过使用所述DUT内存操作与所述目标内存操作之间的频率差而隐藏所述目标内存的刷新。
16.一种制品,包括: 至少一个有形的计算机可读器件,其具有有形地体现在其中的计算机可读程序代码逻辑,以使用场可编程门阵列(FPGA)来仿真被测器件(DUT)的操作,所述DUT包括具有一数量的输入端口的器件内存,所述FPGA与具有第二数量的输入端口的目标内存相关联,所述第二数量小于所述第一数量,当执行时,所述计算机可读程序代码逻辑实施以下步骤:在频率Fd和定义的时间周期下,经由所述器件内存的所述输入端口将一组给定输入施加于所述器件内存; 在频率Ft下,经由所述目标内存的所述输入端口将所述一组给定输入施加于所述目标内存,其中Ft大于Fd,以在所述定义的时间周期下将所述一组给定输入中的所有输入施加于所述目标内存,以便维持所述器件内存与所述目标内存之间的周期精确性。
17.如权利要求16所述的制品,其中当执行时,所述计算机可读程序代码逻辑还实施以下步骤: 通过从目标内存存储阵列中分离DUT内存接口协议,创建所述DUT内存的周期精确的模型。
18.如权利要求17所述的制品,其中当执行时,所述计算机可读程序代码逻辑还实施以下步骤: 通过在可停止的DUT时钟操作映射的DUT内存接口,创建所述DUT内存的周期精确的且周期可再现的模型,并且在自由运行的时钟上操作所述目标内存;以及其中所述可停止的DUT时钟和所述自由运行的时钟具有恒定的频率和相位关系。
19.一种为用于基于场可编程门阵列(FPGA)的硬件加速器的周期精确的和周期可再现的内存建模的方法,所述方法包括: 在频率Fd和定义的时间周期下,将一组给定输入施加于被测器件(DUT)的内存,所述DUT的所述内存具有第一数量的输入端口 ; 在频率Ft下,将所述一组给定输入施加于与所述FPGA关联的目标内存,所述目标内存具有用于接收所述一组输入的第二数量的输入端口,所述第一数量大于所述第二数量,包括在所述定义的时间周期下将所述一组给定输入中的所有输入施加于所述目标内存; 通过从目标内存存储阵列中分离DUT内存接口协议,创建所述DUT内存的周期精确的模型,包括: 使用一个或多个第一可停止的器件内存时钟在所述频率Fd下操作所述器件内存 '及 使用一个或多个目标内存时钟在所述频率Ft下操作所述目标内存; 在定义的时间处,将所述器件内存重设为定义的非零器件内存状态;及 当将所述器件内存重设为所述定义的非零器件内存状态时,停止所述一个或多个器件内存时钟,以便为所述器件内存提供周期再现性。
20.如权利要求19所述的方法,还包括通过在可停止的DUT时钟操作映射的DUT内存接口,创建所述DUT内存的周期精确的且周期可再现的模型,并且在自由运行的时钟上操作所述目标内存;以及其中所述可停止的DUT时钟和所述自由运行的时钟具有恒定的频率和相位关系。
21.如权利要求19所述的方法,其中所述DUT内存为DUTDRAM内存且所述目标内存为目标DRAM内存,以及所述方法还包括: 隐藏所述目标DRAM内存的刷新,方式为: 扰乱所述目标DRAM内存的地址以降低刷新所述目标DRAM内存的必要性, 当所述DUT DRAM内存的刷新发生时,在所述目标DRAM内存中强制刷新;及当所述目标内存的刷新正在发生时,停止DUT时钟,并且在所述目标内存的刷新已完成之后,重启所述DUT时钟。
22.如权利要求19所述的方法,其中所述DUT内存为DUTDRAM内存且所述目标内存为目标DRAM内存,且在预定时间刷新所述目标DRAM内存,以及所述方法还包括: 通过对所述目标内存过计时而隐藏所述目标内存的刷新,使得所述目标内存和所述DUT内存在不同频率下操作,以及通过使用所述DUT内存操作与所述目标内存操作之间的频率差而隐藏所述目标内存的刷新。
23.一种为用于基于场可编程门阵列(FPGA)的硬件加速器器件的周期精确的和周期可再现的内存建模的系统,所述系统包括: 至少一个场可编程门阵列(FPGA); DUT控制器,用于在频率Fd和定义的时间周期下,将一组给定输入施加于被测器件(DUT)的内存,所述DUT具有第一数量的输入端口 ; 目标内存,其在通信上与所述FPGA关联,所述目标内存具有第二数量的输入端口,所述第二数量小于所述第一数量; 一个或多个可停止的器件内存时钟,用于在所述频率Fd下操作所述DUT的内存; 一个或多个目标内存时钟,用于在所述频率Ft下操作所述目标内存; 所述DUT控制器配置为:在定义的条件下停止所述一个或多个器件内存时钟,在定义的时间处将所述器件内存重设为定义的非零器件内存状态,以及当将所述器件内存重设为所述定义的非零器件内存状态时,停止所述一个或多个器件内存时钟,以便为所述器件内存提供周期再现性 '及 目标内存控制器,用于在频率Ft下经由所述目标内存的所述输入端口将所述一组给定输入施加于所述目标内存,以在所述定义的时间周期下将所述一组给定输入中的所有输入施加于所述目标内存,以便通过从目标内存存储阵列中分离DUT内存接口协议,创建所述DUT内存的周期精确的模型。
24.如权利要求23所述的系统,其中: 所述目标内存时钟为自由运行的时钟;及 所述目标内存控制器配置为:当以所述可停止的DUT时钟操作所述DUT内存接口时,通过在自由运行的时钟上操作所述目标内存,创建所述DUT内存的周期精确的且周期可再现的模型;以及其中所述可停止的DUT时钟和所述自由运行的时钟具有恒定的频率和相位关系O
25.如权利要求23所述的系统,其中: 所述DUT内存为DUT DRAM内存且所述目标内存为目标DRAM内存;以及所述目标内存控制器隐藏所述目标DRAM内存的刷新,方式为:扰乱所述目标DRAM内存的地址以降低刷新所述目标DRAM内存的必要性,以及当所述DUT DRAM内存的刷新发生时,在所述目标DRAM内存中强制刷新;以及 所述系统还包括一机制,用于当所述目标内存的刷新正在发生时,停止DUT时钟,并在所述目标内存的刷新已完成之后,重启所述DUT时钟。
【文档编号】G06F9/455GK104205052SQ201380017736
【公开日】2014年12月10日 申请日期:2013年1月7日 优先权日:2012年3月30日
【发明者】S·W·阿萨德, M·卡普尔 申请人:国际商业机器公司