具体实施方式
此说明书在被称为“模拟仿真器”(“SEmulator”)或“模拟仿真”(“SEmulation”)系统的环境下并通过这些系统描述本发明的不同实施例。整个说明书中,使用了术语“模拟仿真系统”,“模拟仿真器系统”,“模拟仿真器”,或仅仅是“系统”。这些术语指根据本发明的用于下列四种操作模式的任意组合的不同装置和方法实施例:(1)软件模拟,(2)通过硬件加速模拟,(3)内电路仿真(ICE),以及(4)后模拟分析,包括它们相应的配置或预处理阶段。在其他时候,可以使用术语“模拟仿真”。此术语代表在此所述的新的处理。
同样的,如“可重新配置的计算(RCC)阵列系统”或“RCC计算系统”这样的术语指模拟/协同校验系统中包含主处理器,软件内核和用户设计的软件模型的部分。如“可重新配置的硬件阵列”或“RCC硬件阵列”这样的术语指模拟/协同校验系统中包含用户设计的硬件模型的部分,在一个实施例中还指包含可重新配置的逻辑元件阵列的部分。
说明书中还使用到了“用户”和用户的“电路设计”或“电子设计”。“用户”是通过其界面使用模拟仿真系统的人,可能是电路的设计者或参与了一些或未参与设计过程的测试/调试人员。“电路设计”或“电子设计”为定制设计的系统或部件,可以是软件或硬件,其可以被模拟仿真系统模型化以实现测试/调试。在许多情况下,“用户”也设计了“电路设计”或“电子设计”。
说明书还使用了如“导线”,“导线线路”,“导线/总线线路”和“总线”这样的术语。这些术语指不同的导电线路。每条线路可以是两点间的单线或点间的多线。这些术语可以互换使用,因为“导线”可以包括一条或多条导电线,“总线”也可以包括一条或多条导电线。
此说明书根据提纲进行展开。首先,说明书介绍了模拟仿真系统的大致概观,包括四种操作模式和硬件实现方案的概述。其次,说明书对模拟仿真系统进行了详细的讨论。在一些情况下,一些图会显示其前面的图中所示实施例的变体。此时,使用相同的序号表示相同的部件/单元/过程。说明书的提纲如下:
I.概述
A.模拟/硬件加速模式
B.利用目标系统模式仿真
C.后模拟分析模式
D.硬件实现方案
E.模拟服务器
F.存储器模拟
G.协同校验系统
II.系统描述
HI.模拟/硬件加速模式
IV.利用目标系统模式仿真
V.后模拟分析模式
VI.硬件实现方案
A.概述
B.地址指示器
C.门控数据/时钟网络分析
D.FPGA阵列和控制
E.使用更密集FPGA芯片的替代实施例
F.TIGF逻辑装置
VII.模拟服务器
VIII.存储器模拟
IX.协同校验系统
X.范例
------------------------------------
I.概述
本发明的各个实施例一般具有四种操作模式:(1)软件模拟,(2)通过硬件加速模拟,(3)内电路仿真(ICE),以及(4)后模拟分析。包括这些模式的系统和方法的不同实施例至少具有下列特征中的一些:
(1)具有一个单一紧密耦合模拟引擎的一软件和硬件模型,一个软件内核,一循环接一循环控制软件和硬件模型;(2)编译处理过程中的自动部件类型分析,用于软件和硬件模型的生成和分区;(3)具有在软件模拟模式、通过硬件加速模式模拟、内电路仿真模式,和后模拟分析模式之间转换(一循环接一循环)的能力;(4)透过软件组合部件重建的完全硬件模型可见度;(5)具有软件时钟和门控时钟/数据逻辑的双缓冲时钟模型,以避免竞态状态;以及(6)从过去模拟进程中的任意选择点重新模拟或用硬件加速用户电路设计的能力。最终结果是具有完全HDL功能和仿真器执行性能的灵活的快速模拟器/仿真器系统与方法。
A.模拟/硬件加速模式
模拟仿真器系统通过自动部件类型分析,可以将用户的定制电路设计以软件和硬件进行模型化。整个用户电路设计用软件模型化,而估算部件(即存储器元件,组合部件)则用硬件模型化。部件类型分析有助于进行硬件模型化。
存在于通用处理器系统主存储器中的软件内核充当模拟仿真器系统的主程序,主程序负责控制其不同模式和功能的总体操作和执行。只要有任何的测试平台程序激活,内核就估算激活的测试平台分量,估算时钟分量,检测时钟边沿以更新寄存器和存储器以及传递组合逻辑数据,和推进模拟时间。此软件内核为模拟器引擎的紧密耦合特性提供硬件加速引擎。对于软件/硬件边界,模拟仿真器系统提供了大量输入/输出地址空间-REG(寄存器),CLK(软件时钟),S2H(软件到硬件),以及H2S(硬件到软件)。
模拟仿真器具有在四种操作模式之间选择变换的能力。系统的使用者可以开始模拟、停止模拟、断言输入值、检查值、逐循环单步执行,以及转回或转向四个不同的模式。例如,系统可以在一段时间内在软件中模拟电路,通过硬件模型加速模拟,然后再返回软件模拟模式。
通常,模拟仿真系统为用户提供可以“看见”每个模型元件的能力,无论其是在软件还是在硬件中模型化。由于多种原因,组合部件不像寄存器那样“可见”,并且因此,获取组合部件数据是很困难的。一个原因是用于可重新配置的电路板中将用户电路设计的硬件部分模型化的FPGA(可现场编程门阵列)一般将组合部件模拟为查找表(look-up table,LUT),而不是实际的组合部件。因此,模拟仿真系统读取寄存器中的值并重新生成组合部件。因为需要一些开销以重新生成组合部件,所以此再生成过程并不总在执行;而是仅在用户需要的时候执行。
因为软件内核存在于软件端,所以提供时钟边沿检测机制引发所谓软件时钟的生成,该软件时钟将启动输入送到硬件模型的各个寄存器中。通过双缓冲电路设备严格控制时序,使软件时钟启动信号在数据之前进入寄存器模型中。一旦这些输入寄存器模型的数据稳定下来,软件时钟同步门控数据,以确保共同门控所有的数据值而无任何发生占用时间扰乱的危险。
软件模拟也很快,因为系统记录所有的输入值和选定的寄存器值/状态,因此通过减少输入/输出操作的数量最小化了开销。用户可以有选择地对记录频率进行选择。
B.利用目标系统模式仿真
模拟仿真系统可以在其目标系统环境中仿真用户的电路。目标系统向硬件模型输出数据用于估算,硬件模型也向目标系统输出数据。此外,软件内核控制此模式的操作,使得用户仍可以选择开始、停止、断言值、检查值、单步执行,以及从一个模式向另一个的转换。
C.后模拟分析模式
工作记录为用户提供了模拟进程的历史记录。不同于已知的模拟系统,模拟仿真系统并不记录模拟过程中的每个单值、内部状态,或值变化。模拟仿真系统仅基于记录频率(即,每N个周期记录1个记录)记录选定的值和状态。在后模拟阶段,如果用户需要检查在刚结束的模拟进程中点X周围的多个数据,则用户先转到最接近点X并暂时位于X之前的一个记录点上,比方说记录点Y。接着,用户从选定记录点Y到目标点X进行模拟以获得模拟结果。
还将描述VCD随选系统。此VCD随选系统允许用户根据需要观察任何模拟目标范围(即,模拟时间),而不需重新进行模拟。
D.硬件实现方案
模拟仿真系统在可重新配置的电路板上实现FPGA芯片阵列。基于硬件模型,模拟仿真系统将用户电路设计的每个选定部分分区、映射、寄存,以及路由布线在FPGA芯片上。因此,例如一个具有16个芯片的4×4阵列可以将展开于这16个芯片上的大型电路模型化。此互连方案使得每个芯片可以在2次“跳跃”或连结之内对另一芯片进行访问。
每个FPGA芯片为每个输入/输出地址空间(即,REG,CLK,S2H,H2S)提供一个地址指示器。关于特定地址空间的所有地址指示器的组合都是链接在一起的。于是,在数据传输过程中,每个芯片中的字数据被顺序地选出/选入主FPGA总线和PCI总线,对于每个芯片中的选定地址空间一次一个字,并且一次一个芯片,直到访问到对应于选定地址空间的所需字数据为止。利用一个传递字选择信号完成字数据的顺序选择。此字选择信号穿过一个芯片中的地址指示器,并接着传递到下一个芯片中的地址指示器,此过程继续直到最后的芯片或系统对地址指示器进行初始化。
在可重新配置的电路板中的FPGA总线系统工作时的带宽是PCI总线的两倍,但速度仅为PCI总线的一半。因此,FPGA芯片被分成若干组以利用更大带宽的总线。此FPGA总线系统的处理能力可以比得上PCI总线系统的处理能力,所以并没有因为总线速度的降低而损失性能。可以通过机载电路板延伸组长度来实现扩展。
在本发明的另一实施例中,使用更密集的FPGA芯片。一种更密集的芯片为Altera 10K130V和10K250V芯片。这种芯片的使用改变了电路板的设计,使得每个电路板上仅使用四个FPGA芯片,而不是八个不密集的FPGA芯片(如Altera 10K100)。
模拟系统中的FPGA阵列通过一个特殊的板互连结构制造在主板上。每个芯片可以有多达8组互连,其中互连在单一电路板上和不同的板之间根据邻接的直接相邻互连(即,N[73:0],W[73:0],E[73:0]),以及“单跳跃”(one-hop)相邻互连排列(即,NH[27:0],SH[27:0],XH[36:0],XH[72:37]),不包括局部总线连接。每个芯片可以直接与相邻的邻居芯片连接,或在单跳中与位于其上、下、左、右的非邻接芯片相连接。在X方向(东-西),阵列为环形。在Y方向(北-南),阵列为网格状。
互连可以在单一电路板上单独连接逻辑装置与其他部件。但是,板间连接器可以在不同电路板间连接这些板和互连,以便(1)在经由主板的PCI总线和阵列板之间,以及(2)在任何两个阵列板之间传递信号。
一个主板连接器将电路板与主板连接,并且因此与PCI总线、电源,和地电位连接。对于一些电路板,主板连接器不用于与主板的直接连接。在一个六电路板结构中,仅板1、3和5与主板直接连接,同时板2、4和6依靠其相邻板实现与主板的连接。因此,每隔一个板就有一个与主板直接连接,并且这些板的互连与局部总线通过排列在焊接面到元件面的板间连接器相互连接。PCI信号仅通过一个板(通常为第一电路板)进行发送。电源和地电位被接至其他的主板连接器用于那些电路板。位于焊接面到元件面之间的各个板间连接器实现了PCI总线部件,FPGA逻辑装置,存储器装置和各个模拟系统控制电路间的通信。
E.模拟服务器
在本发明的另一实施例中,具有模拟服务器以允许多个用户访问相同的可重新配置的硬件单元。在一个系统结构中,网络中的多个工作站或非网络环境中的多个用户/处理可以访问相同的基于服务器的可重新配置硬件单元,以对相同或不同的用户电路设计进行检查/调试。访问通过分时处理完成,其中一个调度程序确定多个用户的访问优先级,交换作业,并在预定用户间选择性的锁住硬件模型访问。在一种情景下,每个用户可以访问服务器以将他/她的独立用户设计第一次映射到可重新配置的硬件模型,在此情况下系统对设计进行编译以生成硬件和软件模型,执行群集操作,执行布局及布线操作,生成位流配置文件,并且在可重新配置的硬件单元中重新配置FPGA芯片以将用户设计的硬件部分模型化。当一个用户使用硬件模型加速其设计并将硬件状态下载到他自己的存储器中以供软件模拟时,可以释放硬件单元以供另一个用户访问。
服务器向多个用户或处理提供对可重新配置的硬件单元的访问,以实现加速和硬件状态交换的目的。模拟服务器包括调度程序,一个或多个设备驱动器,以及可重新配置的硬件单元。模拟服务器中的调度程序基于优先循环算法。服务器调度程序包括一个模拟作业队列表,一个优先级分类器,以及一个作业交换程序。本发明的恢复和回放功能使非网络多重处理环境以及网络多用户环境更加便利,其中可以下载前一个检查点的状态数据,并且可以恢复关于此检查点的整个模拟状态,用于回放调试或按一循环接一循环地步进。
F.存储器模拟
本发明的存储器模拟或存储器交换方式提供了一种模拟系统管理关于用户设计的已配置硬件模型的不同存储区的有效途径,硬件模型被程式化在可重新配置硬件单元上的FPGA芯片阵列中。本发明的存储器模拟方式提供了一种结构和方案,其中与用户设计有关的大量存储器区块被映射到模拟系统的SRAM存储器装置中,而不是用来配置和模型化用户设计的逻辑装置内。存储器模拟系统包括一个存储器状态机,一个估算状态机,以及其相关的逻辑电路,用来控制和连接:(1)主计算系统和其相关存储器系统,(2)模拟系统中与FPGA总线连接的SRAM存储器装置,以及(3)FPGA逻辑装置,其包含正在调试的已配置和程式化的用户设计。根据本发明的一个实施例,存储器模拟系统的操作通常如下。模拟写/读循环分成三个周期---DMA(直接存储器存取)数据传输、估算,以及存储器存取。
存储器模拟系统的FPGA逻辑装置端包括一个估算状态机,一个FPGA总线驱动器,以及一个逻辑接口,用于每个存储器区块N与用户设计中用户自身存储器接口的连接,以处理:(1)FPGA逻辑装置间的数据估计,以及(2)FPGA逻辑装置和SRAM存储器装置间的写/读存储器存取。连同FPGA逻辑装置端,FPGA输入/输出控制器端包括一个存储器状态机和接口逻辑,以处理(1)主计算系统和SRAM存储器装置,以及(2)FPGA逻辑装置和SRAM存储器装置之间的DMA(直接存储器存取)、写和读操作。
G.协同校验系统
本发明的一个实施例为协同校验系统,其包括一个可重新配置的计算系统(在下文称为“RCC计算系统”)和一个可重新配置的计算硬件阵列(在下文称为“RCC硬件阵列”)。在一些实施例中,不需要目标系统和外部输入/输出设备,因为它们可以模拟于软件之中。在另一些实施例中,目标系统和外部输入/输出设备实际上与协同校验系统连接以获得速度并使用实际数据,而不是模拟测试平台数据。因此,协同校验系统可以包括RCC计算系统和RCC硬件阵列并结合其它功能,以在使用实际的目标系统和/或输入/输出设备的同时,调试用户设计的软件部分和硬件部分。
RCC计算系统还包括时钟逻辑(用于时钟边沿检测和软件时钟生成),用于测试用户设计的测试平台程序,以及设备模型,其用于用户决定在软件中模拟的任何输入/输出设备,以代替使用真实的物理输入/输出设备。当然,用户可以决定在一个调试进程中使用真实的输入/输出设备以及模拟的输入/输出设备。软件时钟被提供给外部接口作为用于目标系统和外部输入/输出设备的外部时钟脉冲源。该软件时钟的使用实现了处理输入和输出数据必需的同步。因为RCC计算系统生成的软件时钟是调试进程的时基,所以模拟和硬件加速数据与在协同校验系统和外部接口间传输的任何数据同步。
当目标系统和外部输入/输出设备与协同校验系统连接时,必须在协同校验系统和其外部接口之间提供输出接脚数据。协同校验系统包括一个控制逻辑,其提供:(1)RCC计算系统和RCC硬件阵列,以及(2)外部接口(其与目标系统和外部输入/输出设备连接)和RCC硬件阵列之间的流量控制。因为RCC计算系统具有整个设计在软件中的模型,包括用户设计模型化在RCC硬件阵列中的部分,所以RCC计算系统还必须具有通向经过外部接口和RCC硬件阵列之间的所有数据的入口。控制逻辑确保了RCC计算系统拥有这些数据的入口。
II.系统描述
图1显示了本发明一实施例的高层概观图。工作站10通过PCI总线系统50与可重新配置的硬件模型20和仿真接口30连接。可重新配置的硬件模型20通过PCI总线50以及电缆61与仿真接口30连接。目标系统40通过电缆60与仿真接口30连接。在另一些实施例中,当在特定的测试/调试进程中不需要在目标系统环境下仿真用户电路设计时,在此装置中则不具有包含仿真接口30和目标系统40的内电路仿真装置70(如虚线框中所示)。没有内电路仿真装置70,可重新配置的硬件模型20通过PCI总线50与工作站10进行通信。
协同内电路仿真装置70,可重新配置的硬件模型20在目标系统中模拟或模仿用户的一些电子子系统的电路设计。为了确保在目标系统环境下对用户的电子子系统电路设计的正确操作,必须将在目标系统40和模拟电子子系统间的输入和输出信号提供给可重新配置的硬件模型20以供估算。因此,目标系统40对于可重新配置的硬件模型20的输入和输出信号通过电缆60途经仿真接口30和PCI总线50传输。或者,目标系统40的输入/输出信号可通过仿真接口30和电缆61传输至可重新配置的硬件模型20。
控制数据和一些独立的模拟数据通过PCI总线50在可重新配置的硬件模型20和工作站10之间传递。事实上,工作站10运行控制整个模拟仿真系统操作的软件内核,并且必须具有与可重新配置的硬件模型20的接口(读/写)。
工作站10包括计算机,键盘,鼠标,显示器和合适的总线/网络接口,使用户可以进入并修改描述电子系统电路设计的数据。工作站范例包括Sun Microsystems公司的SPARC或ULTRA-SPARC工作站或基于Intel/Microsoft的计算站。如所属技术领域中的技术人员所知的,工作站10包括一个CPU11,一根局部总线12,一个主机/PCI桥接器13,一根存储器总线14,以及主存储器15。工作站10,可重新配置的硬件模型20和仿真接口30中具有与本发明有关的软件模拟、硬件加速模拟、内电路仿真,以及后模拟分析的各种形式。体现在软件中的算法在一个测试/调试进程中储存在主存储器15中并利用CPU11通过工作站的操作系统执行。
如所属技术领域中的技术人员所知的,当通过启动固件将操作系统载入工作站10的存储器中后,控制系统转到其初始化编码以建立必要的数据结构,载入并初始化设备驱动器。接着控制系统转到命令行解释程序(CLI),CLI提示用户指出将要运行的程序。操作系统接下来确定运行程序所需的存储器数量,定位存储器区块,或分配存储器区块并直接或通过BIOS(基本输入输出系统)访问存储器。在完成存储器载入过程后,开始执行应用程序。
本发明的一个实施例是一种特定的模拟仿真应用程序。在其执行过程中,应用程序需要操作系统提供多种服务,包括但不限于,对磁盘文件的读出和写入,执行数据通信,以及连接显示器/键盘/鼠标。
工作站10具有适当的用户接口,以允许用户输入电路设计数据,编辑电路设计数据,监视模拟和仿真进程,同时获得结果,以及本质上控制模拟和仿真过程。尽管图1中未显示,但用户接口包括可利用键盘和鼠标输入并显示在显示器上的用户可访问的菜单驱动选项和命令集。用户通常使用具有键盘90的计算站80。
用户通常建立电子系统的特定电路设计并将其所设计系统的HDL(硬件描述语言)(一般为RTL级结构)编码说明输入工作站10。本发明的模拟仿真系统在其它操作中执行部件类型分析,用于划分硬件和软件之间的模型化。模拟仿真系统用软件模型化行为级,RTL级和门级编码。对于硬件模型化来说,系统可以模型化RTL级和门级编码;但是,RTL级设计必须在硬件模拟之前与门级设计合成。门级编码可被直接处理成可用的源设计数据库格式,用于硬件模拟。使用RTL级和门级编码,系统自动执行部件类型分析以完成划分步骤。基于发生在软件编译时间中的划分分析,系统将电路设计的一些部分映射入硬件以通过硬件加速来快速模拟。用户还可将模型化的电路设计与目标系统相连以进行真实环境下的内电路仿真。因为软件模拟和硬件加速引擎紧密耦合,所以通过软件内核,用户可以使用软件模拟模拟整个电路设计,通过使用所映射电路设计的硬件模型来加速测试/调试过程,返回模拟部分,并返回硬件加速直到测试/调试过程完成。按每一循环周期模式以及按用户意愿在软件模拟和硬件加速之间变换是本实施例的有价值的特点之一。此特点在调试过程中尤其有用,其使得用户可以使用硬件加速模式快速的进入特定的点或周期,并接着使用软件模拟检测其后的多个点以调试电路设计。此外,模拟仿真系统使得用户可以看见所有的部件,无论部件的内部实现是用硬件还是用软件。模拟仿真系统通过从硬件模型中读取寄存器值并接着当用户要求此读取时,使用软件模型重新建立组合部件完成此过程。将在下文中更充分的讨论这些及其他特点。
工作站10与总线系统50相连。总线系统可为任何可用的总线系统,其使不同主体,例如工作站10,可重新配置的硬件模型20和仿真接口30实现可操作的连接。总线系统最好足够快以为用户提供实时或接近实时的结果。一种此类总线系统为外设部件互连(PCI)标准中所述的总线系统,其内容以引用的方式并入本文。目前,PCI标准的2.0版提供了33MHz的总线速度。2.1版提供了对66MHz总线速度的支持。从而,工作站10,可重新配置的硬件模型20和仿真接口30将遵循PCI标准。
在一个实施例中,在PCI总线上处理工作站10和可重新配置的硬件模型20之间的通信。在此总线系统中还可发现其他的PCI适用设备。这些设备可以以和工作站10,可重新配置的硬件模型20和仿真接口30连接相同或不同等级连接至PCI总线。每个不同等级的PCI总线,例如PCI总线52,通过PCI到PCI桥接器51与另外等级的PCI总线连接,例如PCI总线50(如果存在的话)。在PCI总线52上,可能连接有两个PCI设备53和54。
可重新配置的硬件模型20包括现场可编程门阵列(FPGA)芯片阵列,其可被程式化配置和重新配置以模拟用户电子系统设计的硬件部分。在此实施例中,硬件模型可重新配置;也就是说,其可重新配置其硬件以适合即将开始的特定计算或用户电路设计。例如,如果需要许多加法器和乘法器,则系统就配置有许多加法器和乘法器。当需要其他的计算单元或功能时,它们也将模拟或形成在系统之中。这样,可以最优化系统以执行专门的计算或逻辑操作。可重新配置的系统同时也具有灵活性,使得用户在制造,测试或使用过程中较少的遇到硬件故障。在一个实施例中,可重新配置的硬件模型20包括一个由FPGA芯片组成的计算元件二元阵列,以向不同用户电路设计和应用提供计算资源。后文将会讨论更详细的硬件配置过程。
两种此类FPGA芯片,包括Altera和Xilinx公司所销售的芯片。在一些实施例中,通过使用现场可编程设备将可重新配置的硬件模型重新配置。但是,本发明的其他实施例可能通过使用专用集成电路(ASIC)技术实现。在其他一些实施例可为定制集成电路的形式。
在典型的测试/调试环境下,将使用可重新配置的设备模拟/仿真用户的电路设计,使得在真正的原形制造之前可以进行适当的改变。但是,在其他一些情况下,可以使用实际的ASIC或定制集成电路,尽管这样剥夺了用户快速经济的改变可能的非功能电路设计以重新模拟和重新仿真的能力。然而有时,此类ASIC或定制集成电路已经制造完成并容易获得,使可重新配置结合的芯片进行的仿真更为可取。
根据本发明,工作站中的软件,结合其外部硬件模型,与现有系统相比为终端用户提供了程度更高的灵活性,控制性和性能。为了运行模拟和仿真,将确定电路设计的模型和相关参数(如,输入测试平台激励,总系统输出,中间结果)并提供给模拟软件系统。用户可以使用原理图获取工具或合成工具定义系统电路设计。用户以电子系统的电路设计(一般为简单示意图的形式)为开始,接着使用合成工具将其转变为HDL(硬件描述语言)形式。也可由用户直接编写HDL。作为范例的HDL语言包括Verilog和VHDL(VHSIC硬件描述语言);但是,也可使用其他语言。以HDL表示的电路设计包括许多并行部件。每个部件为一个编码序列,其即定义了电路元件的行为又控制了模拟的执行。
模拟仿真系统分析这些部件以确定其部件类型,并且编译程序利用这些部件类型信息建立软件和硬件中不同的执行模式。此后,用户可使用本发明的模拟仿真系统。设计者可以通过对模拟模型应用多个激励,例如输入信号和测试向量图型的模拟来验证电路的精确性。如果在模拟过程中电路未按计划运转,则用户通过修改电路示意图或HDL文件重新定义电路。
图2中的流程图显示了本发明该实施例的应用。算法开始于步骤100。在将HDL文件载入系统后,系统对电路设计进行编译,划分并映射到适当的硬件模型。将在下文详细讨论编译,划分和映射步骤。
在运行模拟之前,系统必须运行一个复位序列,以在硬件加速模型起作用之前去除软件中所有的未知“x”值。本发明的一个实施例使用一2位宽数据通路提供总线信号的4个状态值---“00”为逻辑低,“01”为逻辑高,“10”为“z”,“11”为“x”。如所属技术领域的技术人员所知,软件模型可以处理“0”,“1”,“x”(总线争用或未知值)和“z”(无驱动器或高阻抗)。相比而言,硬件无法处理未知值“x”,所以根据特定适用编码而不同的复位序列将寄存器值复位成全“0”或全“1”。
在步骤105,用户确定是否模拟电路设计。通常,用户首先以软件模拟开始启动系统。因此,如果步骤105的决定为“是”,则在步骤110开始软件模拟。
用户可以停止模拟并检查值(如步骤115所示)。事实上,用户可以在测试/调试进程中的任何时间停止模拟,如从步骤115展开的虚线内所示,转至硬件加速模式,ICE模式和后模拟模式中各个结点。执行步骤115将用户带到了步骤160。
在停止之后,系统内核读回硬件寄存器部件的状态以重新生成整个软件模型,如果用户期望检查组合部件值,则还包括组合部件。在恢复整个软件模型之后,用户可以检查系统中的任何信号值。在停止和检查之后,用户可以继续在唯模拟模式或硬件加速模式中运行。如流程图中所示,步骤115转到停止/值检查程序。停止/值检查程序开始于步骤160。在步骤165,用户必须确定是否在此点停止模拟并检查值。如果步骤165的结果为“是”,则步骤170停止当前可能正在进行的模拟并检查各个值以检验电路设计的正确性。在步骤175,算法返回分支点,即步骤115。在此,用户可以继续模拟并为剩余的测试/调试进程停止/检查值或前进到内电路仿真步骤。
同样的,如果步骤105的结果为“否”,则算法将继续硬件加速确定步骤120。在步骤120,用户确定是否通过模型化电路设计的硬件部分加速模拟来加快测试/调试过程。如果步骤120的结果为“是”,那么在步骤125开始硬件模型加速。在系统编译过程中,模拟仿真系统将一些部分映射到硬件模型中。在此,当需要硬件加速时,系统将寄存器和组合部件移到硬件模型中并将输入和估算值移到硬件模型中。因此,在硬件加速过程中,估算以增加的速度长时期发生在硬件模型中。内核将测试平台输出写入硬件模型,更新软件时钟,接着按一循环接一循环模式读取硬件模型输出值。如果用户需要,可以通过利用寄存器值重新生成组合部件以输出寄存器值和组合部件,使来自用户电路设计(整个电路设计)的整个软件模型的值可用。因为需要软件介入来重新生成这些组合部件,所以并非在每个循环周期都提供整个软件模型值的输出;而是仅在用户需要时提供这些值。此说明书将在其后讨论组合部件的重新生成过程。
此外,如步骤115所示,用户可以在任何时间停止硬件加速模式。如果用户想要停止,算法进入步骤115和160以转到停止/值检查程序。在此,如在步骤115中,用户可以在任何时间停止硬件加速模拟过程并检查模拟过程的结果值,或者用户可以继续硬件加速模拟过程。停止/值检查程序转到步骤160,165,170和175,其在上文中已有介绍。在步骤125后返回主程序,用户可以在步骤135确定是否继续硬件加速模拟或执行纯模拟。如果用户想要进一步模拟,则算法进入步骤105。如果不是,则算法进入步骤140的后模拟分析。
在步骤140,模拟仿真系统提供了多个后模拟分析特征。系统记录所有对硬件模型的输入。对于硬件模型输出,系统以用户定义的记录频率(如,1/10,000记录/周期)记录硬件寄存器部件的所有值。记录频率决定了输出值被记录的频度。对于1/10,000记录/周期的记录频率来说,每10,000个周期记录一次输出值。记录频率越高,记录下的用于后模拟分析的信息也越多。因为所选记录频率与模拟仿真速度有因果关系,所以用户应仔细选择记录频率。较高的记录频率将减低模拟仿真速度,因为在执行进一步模拟之前,系统必须花费时间和资源通过对存储器执行输入/输出操作来记录输出值。
关于后模拟分析,用户将选择期望模拟的特定点。然后用户可以在模拟仿真后接着将记录输入硬件模型以计算值变化和所有硬件部件的内部状态,通过运行软件模拟来进行分析。应注意使用了硬件加速器模拟所选定记录点的数据以分析模拟结果。该后模拟分析方法可以联接至任何的模拟波形观测仪以用于后模拟分析。随后将有更详细的讨论。
在步骤145,用户可以选择在其目标系统环境中仿真模拟的电路设计。如果步骤145的结果为“否”,算法终止并且模拟仿真过程终止于步骤155。如果期望结合目标系统进行仿真,则算法进入步骤150。此步骤涉及激活仿真接口板,将电缆和芯片引脚接头插入目标系统,以及运行目标系统以获取来自目标系统的系统输入/输出。来自目标系统的系统输入/输出包括目标系统和电路设计的仿真之间的信号。仿真的电路设计从目标系统接收输入信号,处理这些信号,将信号传送给模拟仿真系统用于进一步处理,并且将处理后的信号输出给目标系统。另一方面,仿真的电路设计将输出信号传送给目标系统,目标系统对信号进行处理,并且可能将处理后的信号输出回仿真的电路设计。按这种方法,可以在其自然的目标系统环境下评估电路设计的性能。在结合目标系统进行仿真之后,用户具有的结果可以验证电路设计或揭示其非功能特征。此时,如步骤135所示,用户可以再次进行模拟/仿真,全部停止以改进电路设计,或基于验证的电路设计进行集成电路的制造。
III.模拟/硬件加速模式
图3显示了根据本发明一实施例,在编译时间和运行时间中软件编译和硬件配置的高层图。图3显示了两组信息:一组信息区分了在编译时间和模拟/仿真运行时间中执行的操作;另一组信息显示了软件模型和硬件模型之间的划分。开始时,根据本发明一实施例的模拟仿真系统需要用户电路设计作为输入数据200。用户电路设计为某种HDL文件的形式(如Verilog,VHDL)。模拟仿真系统分析HDL文件,将行为级码,寄存器传送码和门级编码归纳为可供模拟仿真系统使用的形式。系统生成源设计数据库用于前端处理步骤205。现在,处理后的HDL文件可供模拟仿真系统使用。如所属技术领域的技术人员所知,分析过程将ASC II数据转换成内部二进制数据结构。请参见ALFRED V.AHO,RAVI SETHI,和JEFFREYD.ULLMAN的COMPILERS:PRINCIPLES,TECHNIQUES,ANDTOOLS(1988),其内容以引用的方式并入本文。
编译时间由过程225表示而运行时间由过程/单元230表示。如过程225所示,在编译时间内,模拟仿真系统通过执行部件类型分析编译处理后的HDL文件。部件类型分析将HDL部件分成组合部件,寄存器部件,时钟部件,存储器部件以及测试平台部件。实质上,系统将用户电路设计分成控制和估算部件。
模拟仿真编译程序210实质上将模拟的控制部件映射到软件中,将估算部件映射到软件和硬件中。编译程序210生成用于所有HDL部件的软件模型。软件模型形成于编码215中。此外,模拟仿真编译程序210使用HDL文件的部件类型信息,从程序库或模块发生器中选择或生成硬件逻辑块/元件,并生成用于特定HDL部件的硬件模型。最终结果为所谓的“位流”配置文件220。
在运行时间的准备期,编码形式的软件模型储存在主存储器中,与根据本发明一实施例的模拟仿真程序有关的应用程序也储存在主存储器中。在通用处理器或工作站240中处理此编码。基本上与此同时,用于硬件模型的配置文件220被用来将用户电路设计映射到可重新配置的硬件板250中。在此,电路设计已经在硬件中模型化的部分被映射并分配到可重新配置的硬件板250中的FPGA芯片中。
如上所述,对通用处理器或工作站240应用用户测试平台激励和测试向量数据以及其他测试平台资源235以用于模拟目的。此外,用户可以通过软件控制执行电路设计的仿真。可重新配置的硬件板250包含用户的仿真电路设计。该模拟仿真系统使用户可以选择性的在软件模拟和硬件仿真之间变换,以及按一循环接一循环模式在任何时间停止模拟或仿真过程,以检查模型中每个部件(寄存器或组合部件)的值。因此,模拟仿真系统在测试平台235和处理器/工作站240之间传送数据用于模拟,在测试平台235和可重新配置的硬件板250之间通过数据总线245和处理器/工作站240传送数据用于仿真。如果包括一个用户目标系统260,则仿真数据可以通过仿真接口255和数据总线245在可重新配置的硬件板250和目标系统260之间传送。内核存在于处理器/工作站240的存储器的软件模拟模型中,所以数据必须通过数据总线245在处理器/工作站240和可重新配置的硬件板250之间传送。
图4显示了根据本发明一实施例的编译过程流程图。图3中的编译过程由过程205和210表示。图4中的编译过程开始于步骤300。步骤301处理前端信息。在此,生成门级HDL编码。用户通过直接手写编码或使用一些形式的原理图获取或合成工具生成门级HDL编码以将初始电路设计转化为HDL形式。模拟仿真系统将HDL文件(ASC II格式)解析成二进制格式,从而将行为级编码,寄存器传送(RTL)级编码和门级编码归纳为可供模拟仿真系统使用的内部数据结构形式。系统生成包含解析后HDL编码的源设计数据库。
步骤302通过将HDL部件分成如部件类型资源303所示的组合部件,寄存器部件,时钟部件,存储器部件以及测试平台部件执行部件类型分析。模拟仿真系统生成用于寄存器和组合部件的硬件模型,并伴随一些例外情况,将在下文中讨论。测试平台和存储器部件被映射在软件中。一些时钟部件(如,派生的时钟)在硬件中模拟,其他则位于软件/硬件边界处(如,软件时钟)。
组合部件为无状态逻辑部件,其输出值为当前输入值的函数并且不依赖于输入值的历史。组合部件的范例包括基本门电路(如,与,或,异或,非),选择器,加法器,乘法器,移位器,和总线驱动器。
寄存器部件为简单的存储部件。寄存器的状态转变由时钟信号控制。一种寄存器的形式为边缘触发式,当检测到边缘时其发生状态改变。另一种寄存器的形式为锁存器形式,其为电平触发。示范例包括触发器(D-型,JK-型)以及电平敏感锁存器。
时钟部件为将周期信号传送给逻辑装置以控制其行为的部件。通常,时钟信号控制寄存器的更新。主时钟由自时序的测试平台程序生成。例如,用于生成时钟的典型测试平台Verilog程序如下:
always begin
Clock=0;
#5;
Clock=1;
#5;
end;
根据此编码,时钟信号初始于逻辑“0”。在5个时间单位后,时钟信号变为逻辑“1”。再在5个时间单位后,时钟信号返回逻辑“0”。主时钟信号一般用软件生成并且在典型用户电路设计中仅有少数(即,1-10个)主时钟。从由主时钟依次驱动的组合逻辑和寄存器的网络中生成派生的或门控时钟。在典型用户电路设计中有许多(即,1000或更多)派生的时钟。
存储器部件为块存储部件,其具有地址和控制线以访问特定存储位置中的单独数据。范例包括ROM(只读存储器),异步RAM(随机存贮器),和同步RAM。
测试平台部件为用于控制和监视模拟过程的软件处理。因此,这些部件不是在试验中的硬件电路设计的一部分。测试平台部件通过生成时钟信号,初始化模拟数据,并从磁盘/存储器中读取模拟测试向量图型来控制模拟。测试平台部件还通过检查值的变化,执行变值转储,检查信号值关系上的断言约束,将输出测试向量写入磁盘/存储器,并与不同的波形观测仪与调试程序连接来监视模拟过程。
模拟仿真系统按下列步骤执行部件类型分析。系统检查二进制源设计数据库。基于源设计数据库,系统可将元件归为上述部件类型的一种。连续赋值语句被归为组合部件。门基元(gate primitives)根据语言定义可为组合类型或寄存器类型的锁存器形式。初始化编码被看作初始化类型的测试平台。
不使用网络而驱动网络的始终处理(always process)为驱动器类型的测试平台。不驱动网络而读取网络的始终处理为监示器类型的测试平台。具有延迟控制或多重事件控制的始终处理为通用类型的测试平台。
具有单一事件控制并驱动单一网络的始终处理可为下列中的一种:(1)如果事件控制为边缘触发事件,那么此程序为一个边缘触发型寄存器部件。(2)如果在一程序中被驱动的网络未定义在所有可能的执行通路中,那么该网络为寄存器的锁存器类型。(3)如果在一程序中被驱动的网络定义在所有可能的执行通路中,那么该网络为组合部件。
具有单一事件控制但驱动多个网络的始终处理可分解成单独驱动每个网络的程序以分别取得其相应的部件类型。可使用分解过程确定部件类型。
步骤304生成用于所有HDL部件的软件模型,不考虑其部件类型。通过适当的用户接口,用户可以使用完整的软件模型模拟整个电路设计。使用测试平台程序驱动激励输入,测试向量图型,控制总体模拟,并监视模拟过程。
步骤305执行时钟分析。时钟分析包括两个一般步骤:(1)提取时钟提取和顺序映射,以及(2)时钟网络分析。提取时钟提取和顺序映射步骤包括将用户的寄存器部件映射到模拟仿真系统的硬件寄存器模型中,并接着从系统硬件寄存器部件中提取时钟信号。时钟网络分析步骤包括基于提取的时钟信号确定主时钟和派生的时钟,并分离门控时钟网络和门控数据网络。将结合图16进行更详细的说明。
步骤306执行滞留选择(residence selection)。与用户相结合,系统为硬件模型选择部件;也就是说,在所有可以在用户电路设计的硬件模型中实现的可能硬件部件中,一些硬件部件由于多种原因将不会在硬件中模拟。这些原因包括部件类型,硬件资源限制(即,停留在软件中的浮点运算和大型乘法运算),模拟和通信开支(即,停留在软件中测试平台程序之间的小型桥接器逻辑,以及停留在软件中由测试平台程序监视的信号),以及用户偏爱。由于包括性能和模拟监测的众多原因,用户可以迫使本应在硬件中模拟的特定部件留在软件中。
步骤307将所选硬件模型映射到可重新配置的硬件仿真板上。具体的说,步骤307获取连线表并将电路设计映射到特定的FPGA芯片中。此步骤包括将逻辑元件分组或群集。系统然后将每一组分配到一唯一FPGA芯片和将几个组分配到一个FPGA芯片中。总体上说,系统将元件组分配到FPGA芯片中。下文将结合图6进行更详细的说明。系统将硬件模型部件放入FPGA芯片网格中以最小化芯片间通信的开支。在一个实施例中,阵列包括一个4×4的FPGA阵列,一个PCI接口单元,以及一个软件时钟控制单元。FPGA阵列实现了用户电路设计的一部分,如上述此软件编译过程的步骤302-306中所确定的一样。PCI接口单元允许了可重新配置的硬件仿真模型通过PCI总线和工作站进行通信。软件时钟避免了多个时钟信号进入FPGA阵列时的竞态状态。此外,步骤307根据硬件模型间的通信进度表给FPGA芯片布线。
步骤308插入控制电路。这些控制电路包括输入/输出地址指示器和数据总线逻辑,其用于联系DMA引擎到模拟器(下文中将结合图11,12和14进行讨论),以及估算控制逻辑,以控制硬件状态转变和导线多重传输(下文中将结合图19和20进行讨论)。如所属技术领域中的技术人员所知,一个直接存储器存取(DMA)单元提供了外围设备和主存储器之间的附加数据通道,在其中外围设备可以直接访问(即,读,写)主存储器而不需CPU的介入。每个FPGA芯片中的地址指示器允许数据根据总线尺寸限制在软件模型和硬件模型之间移动。估算控制逻辑实质上为一个有限状态机,其确保在时钟和数据输入进入这些寄存器之前时钟启动到待断言的寄存器的输入。
步骤309生成用于将硬件模型映射到FPGA芯片的配置文件。实质上,步骤309将电路设计部件分配给每个芯片上的特定单元或门级部件。鉴于步骤307确定硬件模型组到特定FPGA芯片的映射,步骤309取得此映射结果并为每个FPGA芯片生成配置文件。
步骤310生成软件内核代码。内核为控制整个模拟仿真系统的软件代码序列。直到此点才可以生成内核,因为代码的一部分需要更新和估算硬件部件。仅在步骤309之后,才发生到硬件模型和FPGA芯片的正确映射。下文中将结合图5进行更详细的讨论。编译终止于步骤311。
如上文中结合图4所述,在确定软件和硬件模型之后,于步骤310生成软件内核代码。内核为模拟仿真系统中控制整个系统操作的一段软件。内核控制软件模拟以及硬件仿真的执行。因为内核也存在于硬件模型的中心,所以模拟器是与仿真器相结合的。与其他已知的协同模拟系统相比较,根据本发明一实施例的模拟系统不需要模拟器从外部与仿真器互相作用。内核的一个实施例为图5所示的控制回路。
参见图5,内核开始于步骤330。步骤331对初始化编码进行估算。控制回路开始于步骤332并结束于决策步骤339,不断的开始并循环直到系统观测不到有效的测试平台程序,在此情况下表示模拟或仿真进程已完成。步骤332估算有效的测试平台部件用于模拟或仿真。
步骤333估算时钟部件。这些时钟部件来自测试平台程序。通常,由用户规定所生成的供给模拟系统的时钟信号类型。在一个例子中(在上文结合部件类型分析时讨论过并复制在此),用户在测试平台程序中设计的时钟部件如下:
always begin
Clock=0;
#5;
Clock=1;
#5;
end;
在此时钟部件示例中,用户决定首先产生逻辑“0”信号,并且在5个模拟时间后,将产生一个逻辑“1”信号。此时钟生成过程将不断循环直到被用户停止。这些模拟时间由内核推进。
决策步骤334询问是否检测到任何有效的、将导致形成软件中一些类型的逻辑估算和可能硬件模型(如果仿真正在运行)的时钟边沿。内核用来检测有效时钟边沿的时钟信号为来自测试平台程序的时钟信号。如果决策步骤334的估算结果为“否”,则内核进入步骤337。如果决策步骤334的估算结果为“是”,则导致步骤335更新寄存器和存储器,步骤336传送组合部件。步骤336实质上维护组合逻辑,组合逻辑在断言一个时钟信号之后,需要一些时间通过组合逻辑网络传送值。一旦值已通过组合部件传送并已稳定,内核进入步骤337。
应注意寄存器和组合部件也在硬件中模拟,因此,内核控制模拟仿真系统的仿真器部分。事实上,内核可以在步骤334和335中加速对硬件模型的估算,无论是否检测到任何有效的时钟边沿。因此,不同于现有技术,根据本发明一实施例的模拟仿真系统可以通过软件内核并基于部件类型(如,寄存器,组合部件)加速硬件仿真器。此外,内核按每一循环周期模式控制软件和硬件模型的执行。实质上,仿真器硬件模型可以被特征化为运用模拟内核的通用处理器的模拟协同处理器,其可以运行模拟内核。协同处理器加速了模拟任务。
步骤337估算有效的测试平台部件。步骤338推进模拟时间。步骤339提供开始于步骤332的控制回路的边界。步骤339确定是否有任何的测试平台程序是有效的。如果有,那么将继续运行模拟和/或仿真并估算更多的数据。这样,内核循环到步骤332去估算任何有效的测试平台部件。如果没有测试平台程序是有效的,则完成模拟和仿真过程。步骤340终止模拟/仿真过程。总而言之,内核为控制整个模拟仿真系统操作的主控制回路。只要有任何测试平台程序是有效的,内核就估算有效的测试平台部件,估算时钟部件,检测时钟边沿以更新寄存器和存储器以及传送组合逻辑数据,并推进模拟时间。
图6显示了自动将硬件模型映射到可重新配置的电路板上的方法的一个实施例。连线表文件提供了硬件实现过程的输入。连线表描述了逻辑功能和其互连。硬件模型到FPGA实现过程包括三个独立的任务:映射,布局和布线。工具通常被称为“布局及布线”工具。使用的设计工具可以是Viewlogic Viewdraw(一种原理图获取系统),和Xilinx Xact布局及布线软件,或Altera的MAX+PLUS II系统。
映射任务将电路设计分成逻辑块,输入/输出块,和其他FPGA资源。尽管一些逻辑功能,例如触发器和缓冲器可直接映射到相应的FPGA资源中,但其他的逻辑功能,例如组合逻辑则必须使用映射算法在逻辑块中实现。用户通常可以对映射进行选择以获得最佳的密度或最佳的性能。
布局任务涉及从映射任务中取得逻辑和输入/输出块并将它们分配到FPGA阵列中的物理位置。目前的FPGA工具一般使用三种技术的组合:极小切割(minicut),模拟退火(simulating annealing),和常规力指向松弛(general force-directed relaxation,GFDR)。这些技术本质上确定了基于不同费用函数的最佳布局,费用函数依赖于互连的总网络长度或沿一组关键信号通路的延迟,以及其他的变量。Xilinx XC4000系列FPGA工具使用一种极小切割技术的变型进行初始布局,再使用GFDR技术对布局进行细微改进。
布线任务涉及确定用于互连多个经过映射和布局的块的布线路径。一种此类路由器,被称为迷宫路由器,可寻找两点间的最短路径。由于布线任务提供了芯片间的直接互连,所以与芯片有关的电路布局就很关键。
在开始时,可在门级连线表350或RTL357中描述硬件模型。RTL级编码可被进一步的合成为门级连线表。在映射过程中,可以使用合成器服务器360,例如Altera的MAX+PLUS II可编程逻辑开发工具系统和软件,产生用于映射目的的输出文件。合成器服务器360可以将用户的电路设计部件与程序库361中的任何标准的现有逻辑元件(例如,标准加法器或标准乘法器)相匹配,生成任何参数化和频繁使用的逻辑模块362(如,非标准的乘法器或非标准的加法器),并合成随机逻辑元件363(如,执行定制逻辑功能的基于检查表的逻辑)。合成器服务器还去除多余的逻辑和未使用的逻辑。输出文件实质上合成或优化了用户电路设计所需的逻辑。
当一些或所有的HDL处于RTL级时,电路设计部件处于足够高的级别,使得模拟仿真系统可以轻易的利用模拟仿真寄存器或部件将这些部件模型化。当一些或所有的HDL处于门级连线表层次时,电路设计部件可能为更加电路设计专业化,使用户电路设计部件到模拟部件的映射更加困难。因此,合成器服务器有能力生成任何基于标准逻辑元件变体或与这些变体无任何类似的随机逻辑元件或程序库标准逻辑元件的逻辑元件。
如果电路设计为门级连线表的形式,模拟仿真系统将首先执行分组或分类操作351。硬件模型结构基于分类过程,因为组合逻辑和寄存器是与时钟分离的。因此,共享一个公共主时钟或门控时钟信号的逻辑元件通过将它们集合在一起并共同安置在一个芯片上,可以被更好的服务。分类算法基于连通性驱动,分级析取,以及规则结构析取。如果描述是在结构化的RTL358中,那么模拟仿真系统可以将功能分解成更小的单元,如逻辑功能分解操作359所表示的一样。在任何阶段,如果需要逻辑合成或逻辑优化,则可用合成器服务器360根据用户的指令将电路设计转变为更有效的表示。对于分类操作351,由虚线箭头364表示其与合成器服务器的连接。对于结构化RTL358,由箭头365表示其与合成器服务器360的连接。对于逻辑功能分解操作359,由箭头366表示其与合成器服务器360的连接。
分群操作351基于功能和尺寸以选择性的方式将逻辑部件组成在一起。操作可能仅涉及一小型电路设计的一个群集或一大型电路设计的多个群集。无论如何,这些逻辑元件的群集将在后面步骤中使用以将其映射到指定的FPGA芯片中;也就是说,一个群集将指向一个特定的芯片,而另一个群集指向一个不同的芯片或可能与第一个群集指向相同的芯片。一个群集中的逻辑元件通常一起安置于一个芯片中,但是为了最优化目的,也可能不得不将一个群集分解到多个芯片中。
在分群操作351中形成群集后,系统执行布局及布线操作。首先,执行将群集安置入FPGA芯片的粗粒布局操作352。粗粒布局操作352首先将逻辑元件的群集安置于所选的FPGA芯片中。如果需要,系统可将合成器服务器360提供给粗粒布局操作352使用,如箭头367所示。在粗粒布局操作后执行细粒布局操作以细微调整初始的布局。模拟仿真系统使用基于引脚使用率要求,门电路使用率要求和门到门跳跃的费用函数确定粗粒和细粒布局操作的最佳布局。
群集怎样布局在特定芯片中是基于布局成本确定的,布局成本通过两个或多个电路(即,CKTQ=CKT1,CKT2,.....,CKTN)的费用函数f(P,G,D)和电路在FPGA芯片阵列中的相应位置计算而成,其中P一般指引脚使用/可用性,G一般指门电路使用/可用性,D为连通度矩阵M定义的门到门跳跃的距离或数量(如图7和图8所示)。模型化在硬件模型中的用户电路设计包含电路CKTQ的总的组合。定义每个费用函数,使得计算出的布局成本的计算值总体上有助于:(1)在FPGA阵列中,实现任何两个电路CKTN-1和CKTN之间“跳跃”的最小数量,以及(2)FPGA阵列中电路CKTN-1和CKTN的布局,以获得最低的引脚使用率。
在一个实施例中,费用函数F(P,G,D)被定义为:
此方程可简化为下列形式:
f(P,G,D)=C0*P+C1*G+C2*D
第一项(即,C0*P)基于所使用引脚的数量和可用的引脚数量生成第一布局成本值。第二项(即,C1*G)基于所使用门电路的数量和可用的门电路数量生成第二布局成本值。第三项(即,C2*D)基于在电路CKTQ(即CKT1,CKT2,.....,CKTN)中不同互连门电路间存在的跳跃的数量生成一布局成本值。通过迭代地累加这三个布局成本值产生总的布局成本值。常数C0,C1和C2代表加权常数,通过这三个加权常数,可以选择性地使从该费用函数得出的总的布局成本值,偏向在任何累加的布局成本计算过程中最为重要的一个因素或多个因素(即,引脚使用、门电路使用或门到门跳跃)。
随着系统为加权常数C0,C1和C2选择不同的相关值,重复计算布局成本。因此,在一个实施例中,在粗粒布局操作过程中,系统相对于C2为C0和C1选择较大值。在此重复过程中,系统确定在FPGA芯片阵列中电路CKTQ的初始布局中,最优化引脚使用/可用性和门电路使用/可用性比最优化门到门跳跃更重要。在随后的重复过程中,系统相对于C2为C0和C1选择较小值。在此重复过程中,系统确定最优化门到门跳跃比最优化引脚使用/可用性和门电路使用/可用性更重要。
在细粒布局操作过程中,系统使用相同的费用函数。在一个实施例中,关于选择C0,C1和C2的反复步骤与粗粒布局操作中的步骤是相同的。在另一个实施例中,细粒布局操作涉及让系统相对于C2为C0和C1选择较小值。
现在将解释这些变量和方程。为确定是否在FPGA芯片x或FPGA芯片y(在其他FPGA芯片中)中布置特定电路CKTQ,费用函数将检查引脚使用/可用性(P),门电路使用/可用性(G),和门到门跳跃(D)。基于费用函数变量P,G和D,费用函数f(P,G,D)生成在FPGA阵列的特定位置布置特定电路CKTQ的布局成本值。
引脚使用/可用性P还表示输入/输出容量。Pused为每个FPGA芯片的电路CKTQ所使用的引脚数量。Pavailable为在FPGA芯片中可用的引脚数量。在一个实施例中,Pavailable为264(44个引脚×6个互连/芯片),而在另一个实施例中,Pavailable为265(44个引脚×6个互连/芯片+1个附加引脚)。但是,可用引脚的特定数量取决于所使用的FPGA芯片的类型,每芯片所使用互连的总数量,以及每个互连所使用的引脚数量。因此,Pavailable可以有很大变化。所以,为估算费用函数F(P,G,D)方程的第一项(即,C0*P),要计算每个FPGA芯片的Pused/Pavailable的比率。这样,对于一个4×4 FPGA芯片阵列,要计算16个Pused/Pavailable比率。对于一给定的可用引脚数量来说,所使用的引脚数量越多,比率就越高。在计算出的16个比率中,选择最高的比率值。通过将所选最大比率Pused/Pavailable与加权常数C0相乘,从第一项C0*P中计算出第一布局成本值。因为此第一项依赖于计算出的比率Pused/Pavailable和为每个FPGA芯片计算出的比率中的特定最大比率,所以在其他因素相同的情况下,引脚使用率越高,布局成本值也越高。系统选择布局成本最低的布局。通常认为,所有其他因素都相同的情况下,达到在所有为不同布局计算的最大值中最小的一个最大比率Pused/Pavailable的特定布局为FPGA阵列中的最佳布局。
门电路使用/可用性G基于每个FPGA芯片所容许的门电路数量。在一个实施例中,基于阵列中电路CKTQ的位置,如果在每个芯片中所使用的门电路数量Gused高于一个固定阈值,那么此第二布局成本(C1*G)将被赋予一个值,表明布局不可行。类似的,如果在每个包含电路CKTQ的芯片中所使用的门电路数量等于或低于固定阈值,那么此第二项(C1*G)将被赋予一个值,表明布局可行。因此,如果系统开始时期望在一特定芯片中布置电路CKT1,并且此芯片不具有足够多的门电路以容纳电路CKT1,那么系统将通过费用函数得出此特定布局不可行的结论。通常,G具有很高的数字(如,无限)保证了费用函数将产生高的布局成本值,表明所期望的电路CKTQ的布局不可行,并且应该确定替代的布局。
在另一个实施例中,基于阵列中电路CKTQ的位置,计算每个芯片的比率Gused/Gavailable,其中Gused为每个FPGA芯片中电路CKTQ所使用的门电路数量,Gavailable为在FPGA芯片中可用的门电路数量。在一个实施例中,系统将FLEX 10K100芯片用于FPGA阵列。FLEX10K100芯片包含大约100,000个门电路。因此,在该实施例中,Gavailable等于100,000个门电路。这样,对于一个4×4 FPGA芯片阵列,要计算16个Gused/Gavailable比率。对于一给定的可用门电路数量来说,所使用的门电路数量越多,比率就越高。在计算出的16个比率中,选择最高的比率值。通过将所选最大比率Gused/Gavailable与加权常数C1相乘,从第二项C1*G中计算出第二布局成本值。因为此第二项依赖于计算出的比率Gused/Gavailable和为每个FPGA芯片计算出的比率中的特定最大比率,所以在其他因素相同的情况下,门电路使用率越高,布局成本值也越高。系统选择布局成本最低的布局。通常认为,在所有其他因素都相同的情况下,达到在所有为不同布局计算的最大值中最小的一个最大比率Gused/Gavailable的特定布局为FPGA阵列中的最佳布局。
在另一个实施例中,系统首先为C1选择一些值。如果比率Gused/Gavailable大于“1”,则此特定布局不可行(即,至少一个芯片不具有足够多的门电路用于此特定电路布局)。从而,系统将C1修改成非常大的数字(如,无限)并因此,第二项C1*G也将为非常大的数字,总的布局成本值f(P,G,D)也将很高。另一方面,如果比率Gused/Gavailable小于或等于“1”,那么此特定布局可行(即,每个芯片具有足够多的门电路以支持电路的实现)。从而,系统不修改C1并因此,第二项C1*G将具有一个特定值。
第三项C2*D代表需要互连的所有门电路之间的跳跃的数量。跳跃的数量也取决于互连矩阵。连通度矩阵提供了确定需要芯片-到-芯片互连的任何两个门电路之间电路通道的基础。并非每个门电路都需要门-到-门的互连。基于用户的原始电路设计和将群集划分到特定芯片,一些门电路不需要任何互连,因为与其各自输入(多个输入)和输出(多个输出)相连的逻辑元件(多个逻辑元件)位于相同芯片中。但是其他的门电路则需要互连,因为与其各自输入(多个输入)和输出(多个输出)相连的逻辑元件(多个逻辑元件)位于不同的芯片中。
为了理解“跳跃”,请参看图7中表格形式和图8中图像形式的连通度矩阵。在图8中,芯片间的每个互连,例如芯片F11和芯片F14间的互连602,代表44个引脚或44条导线线路。在其他实施例中,每个互连代表超过44个的引脚。再在其他实施例中,每个互连代表少于44个的引脚。
利用此互连方案,数据可以在两次“跳跃”或“跳转”中从一个芯片传到另一个芯片。因此,数据可以利用一次跳跃通过互连601从芯片F11传到芯片F12,数据可以利用两次跳跃通过互连600和606或互连603和610从芯片F11传到芯片F33。这些跳跃的示例为这些芯片组之间最短的跳跃路径。在一些情况下,信号的路径将穿过多个芯片,使得在一个芯片中的门电路和另一个芯片中的门电路之间跳跃的数量超过了最短跳跃路径。只有需要互连的电路通道必须被检测以确定门-到-门跳跃的数量。
连通度由所有需要芯片间互连的门电路间跳跃的总和表示。使用图7和图8的连通度矩阵,任何两芯片间的最短路径可以由一次或两次“跳跃”代表。但是,对于特定硬件模型实现来说,输入/输出容量可能限制了阵列中任何两门电路之间最短路径直接连接的数量,并且因此,这些信号将经过更长的路径(因此多于两次跳跃)以到达目的地。从而,对于一些门-到-门连接,跳跃的数量可能超过两次。通常,在其他条件相等的情况下,越少的跳跃次数将产生越低的布局成本。
第三项(即,C2*D)的详细形式如下:
此第三项为加权常数C2和总和部分(S...)的乘积。总和部分实质上为需要芯片到芯片互连的用户电路设计中每个门电路i和门电路j之间所有跳跃的总和。如上所述,并非所有的门电路都需要芯片间互连。对于那些需要芯片间互连的门电路i和门电路j来说,跳跃的次数已经确定。对于所有的门电路i和门电路j来说,将总的跳跃次数相加。
距离计算也可定义如下:
在此,M为连通度矩阵。连通度矩阵的一个实施例如图7所示。计算每个需要互连的门到门连接的距离。因此,对于每个门电路i和门电路j的关系,检验连通度矩阵M。更明确表示为,
建立包含阵列中所有芯片的矩阵,使得每个芯片具有可识别的编号。这些识别编号设置在矩阵的顶部作为列标题。同样的,将这些识别编号设置在矩阵的一侧作为行标题。在此矩阵中行和列相交的地方的特定表列值提供了行编号和列编号相交的两芯片之间的直接连通数据。对于芯片i和芯片j之间任何的距离计算,矩阵Mi,j中的表列值包括“1”(直接连接)或“0”(非直接连接)。指数k指的是连接需要互连的芯片i中任何门电路和芯片j中任何门电路所需的跳跃次数。
首先,应测试k=1的连通度矩阵Mi,j。如果表列值为“1”,则此芯片i中的门电路和芯片j中所选门电路之间存在直接连接。因此,指定指数或跳跃k=1作为Mi,j的结果并且此结果为两个门电路之间的距离。在此时,可以测试其他的门-到-门连接。但是,如果表列值为“0”,则不存在直接连接。
如果不存在直接连接,则应测试下一个k。这个新的k(即,k=2)可以通过将矩阵Mi,j与其自身相乘而计算出;换句话说,M2=M*M,其中k=2。
此将M与其自身相乘直到芯片i和芯片j的特定行和列的表列值的过程将继续,直到计算出的结果为“1”,此时选择指数k作为跳跃的次数。操作包括对矩阵M进行“与”操作,并接着对“与”操作的结果进行“或”运算。如果矩阵mi,l和ml,j之间“与”操作的结果为逻辑值“1”,那么在芯片i中所选门电路和芯片j中所选门电路之间存在连接,此连接通过任何芯片l并在k次跳跃之内;如果不是,则在此特定的k次跳跃之内不存在连接并且需要进一步的计算。矩阵mi,l和ml,j为被定义用于硬件模型化的连通度矩阵M。对于任何需要互连的给定门电路i和门电路j来说,包含用于矩阵mi,l中门电路i的FPGA芯片的行和包含用于门电路j和ml,j的FPGA芯片的列进行逻辑“与”操作。对单独的“与”后地分量进行“或”操作以确定对于指数或跳跃k的结果Mi,j值是“1”还是“0”。如果结果是“1”,则存在连接并且指定指数k为跳跃的次数。如果结果是“0”,则不存在连接。
下面的例子表明了这些原则。参见图35(A)到35(D)。图35(A)显示了由云状物1090表示的用户的电路设计。此电路设计1090可以简单或复杂。电路设计109的一部分包括“或”门1091和两个“与”门1092和1093。“与”门1092和1093的输出与“或”门1091的输入连接。这些门电路1091,1092和1093也可以与电路设计1090的其他部分连接。
参见图35(B),电路1090的部件,包括包含三个门电路1091,1092和1093的部分,被设置并布局在FPGA芯片1094,1095和1096上。此FPGA芯片阵列的具体示范例具有所示的互连方案;即,一组互连1097连接芯片1094和芯片1095,另一组互连1098连接芯片1095和芯片1096。在芯片1094和芯片1096之间没有直接的互连。当将此电路设计1090的部件安置在芯片中时,系统使用预设计的互连方案在不同的芯片之间连接电路通道。
参见图35(C),一个可能的结构和布局是将“或”门1091安置在芯片1094上,将“与”门1092安置在芯片1095上,并将“与”门1093安置在芯片1096上。未显示电路1090的其他部分作为示范。“或”门1091和“与”门1092之间的连接需要一个互连,因为它们位于不同的芯片中,于是使用了一组互连1097。此互连的跳跃次数为“1”。“或”门1091和“与”门1093之间的连接也需要一个互连,于是使用了互连组1097和1098。跳跃次数为“2”。对于此布局示例,不考虑未图示的电路1090剩下部分的其他门电路和互连的作用,跳跃总次数为“3”。
图35(D)显示了另一个布局示例。在此,“或”门1091安置于芯片1094上,“与”门1092和1093安置于芯片1095上。也未显示电路1090的其他部分作为示范。“或”门1091和“与”门1092之间的连接需要一个互连,因为它们位于不同的芯片中,于是使用了一组互连1097。此互连的跳跃次数为“1”。“或”门1091和“与”门1093之间的连接也需要一个互连,于是使用了互连组1097。跳跃次数也为“1”。对于此布局示例,不考虑未图示的电路1090剩下部分的其他门电路和互连的作用,跳跃总次数为“2”。于是,仅基于距离参数D并假设任何其他因素都相等,所计算出的图35(D)布局示例的费用函数要低于图35(C)布局示例的费用函数。但是,其他的因素并不都相等。很可能,图35(D)的费用函数还基于门电路使用/可用性G。在图35(D)中,芯片1095中比图35(C)中的相同芯片多使用了一个门电路。此外,在图35(C)的布局示例中的芯片1095的引脚使用/可用性P要大于图35(D)的另一布局示例中的相同芯片的引脚使用/可用性。
在粗粒布局之后,对于展平的群集布局的细微调整将进一步优化布局结果。此细粒布局操作353改进了由粗粒布局操作352开始时选择的布局。在此,如果能达到更优化的效果,可能将初始的群集分离。例如,假设逻辑元件X和Y原来是群集A的一部分并分配到FPGA芯片1。由于细粒布局操作353,现在逻辑元件X和Y可能被指定为独立的群集B或成为另一个群集C的一部分并布局在FPGA芯片2中。接着将生成联系用户电路设计和指定FPGA的FPGA连线表354。
怎样分离群集并将其布局在特定芯片中也是基于布局成本而确定,布局成本则通过电路CKTQ的费用函数f(P,G,D)计算。在一个实施例中,细粒布局过程所使用的费用函数与粗粒布局过程所使用的费用函数是相同的。两个布局过程之间仅有的差异在于它们布局的群集的大小,而不是过程本身。粗粒布局过程与细粒布局过程相比使用更大的群集。在另一个实施例中,粗粒和细粒布局过程所使用的费用函数是不同的,如上文介绍加权常数C0,C1和C2的选择时所述的一样。
一旦布局完成,就执行芯片间的布线任务355。如果连接位于不同芯片中电路的布线线路数量超过了这些FPGA芯片中分配给电路到电路布线的可用引脚数量,则可以使用时分多路转换(TDM)电路。例如,如果每个FPGA芯片仅允许44个引脚用于连接两个不同FPGA芯片中的电路,并且一个特殊的模型实现需要在芯片间具有45根导线,那么将在每个芯片中安置专门的时分多路转换电路。此专门的TDM电路至少连接两根导线。TDM电路的一个实施例显示在图9(A),9(B)和9(C)中,将在下文中讨论。因此,由于可将引脚设置成芯片间的时分多路转换形式,所以布线任务总可以完成。
一旦确定了每个FPGA的布局和布线,则可将每个FPGA配置成最佳的工作电路并且系统因而生成“位流”配置文件356。根据Altera的术语,系统生成一个或多个Programmer Object Files(可编程目的文件)(.pof)。其他生成的文件包括SRAM Object Files(SRAM目的文件)(.sof),JEDEC Files(JEDEC文件)(.jed),Hexadecimal(Intel格式)Files(十六进制文件)(.hex),以及Tabular Text Files(表格文本文件)(.ttf)。Altera的MAX+PLUS II程序器使用POFs,SOFs,和JEDEC文件,结合Altera的硬件可编程设备为FPGA阵列编程。或者,系统生成一个或多个原二进制文件(.rbf)。CPU修正.rbf文件并通过PCI总线为FPGA阵列编程。
此时,所配置的硬件为硬件启动370做好了准备。这样在可重新配置的板上完成了硬件模型的自动结构。
回到TDM电路,TDM电路允许多组引脚输出被一起进行时分多路转换,这样实际上仅使用一个引脚输出,TDM电路实质上是一个多路复用器,其具有至少两个输入(用于两根导线),一个输出,以及配置成回路作为选择器信号的一对寄存器。如果模拟系统需要更多的导线成组连接,那么将可以提供更多的输入和回路寄存器。作为此TDM电路的选择器信号,几个配置成回路的寄存器向多路复用器提供了适当的信号,使得在一段时期,一个输入被选择作为输出,而在另一段时期,另一个输入被选择作为输出。因此,举例而言,TDM电路设法在芯片间仅使用一根输出线路,使得在特定芯片中电路硬件模型的实现可以使用44个引脚,而不是45个完成。这样,由于可将引脚设置成芯片间的时分多路转换形式,所以布线任务总可以完成。
图9(A)显示了输出接脚问题的概观。由于需要TDM电路,图9(B)提供了传输端的TDM电路,图9(C)提供了接收端的TDM电路。这些图仅显示了一个具体示例,其中模拟仿真系统需要在芯片间具有一个导线,而不是两根。如果必须在时分多路转换装置中连接超过两根导线,则所属技术领域的技术人员可根据下面的内容进行适当的改进。
图9(A)显示了TDM电路的一个实施例,其中模拟仿真系统在TDM结构中连接两根导线。其中具有两个芯片,990和991。作为完整的用户电路设计的一部分的电路960被模拟并布局在芯片991中。作为完整的用户电路设计的一部分的电路973被模拟并布局在芯片990中。在电路960和电路973之间具有多个互连,包括互连组994,互连992和互连993。在此例中,互连的总数为45个。如果,在一个实施例中,每个芯片至多仅提供44个引脚用于这些互连,则本发明的一个实施例提供至少两个待被时分多路转换的互连,以在芯片990和991之间只需要一个互连。
在此例中,互连组994将继续使用43个引脚。对于第44个,也是最后一个引脚,可以使用根据本发明一实施例的TDM电路按时分多路转换的形式连接互连992和互连993。
图9(B)显示了TDM电路的一个实施例。FPGA芯片991中的模型电路(或其一部分)960在导线966和967上提供了两个信号。对于电路960,导线966和967为输出。这些输出一般与芯片990中的模型电路973连接(见图9(A)和9(C))。但是,仅为这两个输出导线966和967提供一个引脚阻碍了引脚对引脚的直接联系。因为输出966和967对其他芯片采用单向传输,所以必须提供适当的传输和接收器TDM电路以连接这些线路。图9(B)显示了传输端TDM电路的一个实施例。
传输端TDM电路包括“与”门961和962,它们各自的输出与“或”门963的输入相连。“或”门963的输出972是分配给一个引脚并与另一芯片990相连的芯片的输出。由电路模型960提供分别对“与”门961和962的一组输入966和967。另一组输入968和969由作为时分多路转换选择器信号的回路寄存器电路提供。
回路寄存器电路包括寄存器964和965。寄存器964的输出995被提供给寄存器965的输入和“与”门961的输入968。寄存器965的输出996与寄存器964的输入和“与”门962的输入969连接。寄存器964和965由一个公共时钟脉冲源控制。在任何给定的时间瞬间,输出995或996中仅有一个为逻辑“1”。另一个为逻辑“0”。因此,在每个时钟边沿之后,逻辑“1”在输出995和输出996之间变换。反过来说,这不是向“与”门961就是向“与”门962提供了一个逻辑“1”,以“选择”导线966或导线967上的信号。因此,导线972上的数据通过导线966或导线967来自电路960。
图9(C)显示了TDM电路接收器端部分的一个实施例。来自导线966和导线967上的芯片991中电路960(图9(A)和9(B))的信号必须与适当的导线985或986相连以到达图9(C)中的电路973。来自芯片991的时分多路转换信号从导线/引脚978进入。接收器端TDM电路可以将导线/引脚978上的这些信号与适当的导线985或986相连以到达电路973。
TDM电路包括输入寄存器974和975。导线/引脚978上的信号分别通过导线979或980提供给这些输入寄存器974和975。输入寄存器974的输出985被提供给电路973中适当的端口。同样的,输入寄存器975的输出986被提供给电路973中适当的端口。这些输入寄存器974和975由回路寄存器976和977控制。
寄存器976的输出984与寄存器977的输入和寄存器974的时钟输入981相连。寄存器977的输出983与寄存器976的输入和寄存器975的时钟输入982相连。寄存器976和977由一个公共时钟脉冲源控制。在任何给定的时间瞬间,启动输入981或982中仅有一个为逻辑“1”。另一个为逻辑“0”。因此,在每个时钟边沿之后,逻辑“1”在启动输入981和输出982之间变换。反过来说,这“选择”了导线979或导线980上的信号。因此,导线978上来自电路960的数据通过导线985或导线986与电路973正确连接。
现在将详细讨论结合图4简单介绍的根据本发明一实施例的地址指示器。再次重申,在硬件模型中的每个FPGA芯片中安置有多个地址指示器。通常,安置地址指示器的主要目的是使系统可以通过32位PCI总线328在软件模型315和硬件模型325中的特定FPGA芯片之间传送数据(参见图10)。更明确的说,地址指示器的主要目的是根据该32位PCI总线的带宽限制选择性的控制在软件/硬件边界中的每个地址空间(即,REG,S2H,H2S,和CLK)和FPGA芯片组326a-326d中的每个FPGA芯片之间的数据传送。即使安装了64位PCI总线,仍需要这些地址指示器来控制数据传送。因此,如果软件模型具有5个地址空间(即,REG读,REG写,S2H读,H2S写,和CLK写),则每个FPGA芯片对应于这5个地址空间具有5个地址指示器。每个FPGA都需要这5个地址指示器,因为在正被处理的所选地址空间中特定所选字可能位于任何一个或多个FPGA芯片中。
FPGA输入/输出控制器381通过使用SPACE指数选择对应于软件/硬件边界特定地址空间(即,REG,S2H,H2S,和CLK)。一旦选择了地址空间,每个FPGA芯片中对应于所选地址空间的特定地址指示器则选择对应于所选地址空间中相同的字的特定字。软件/硬件边界中的地址空间和每个FPGA芯片中的地址指示器的最大尺寸取决于所选FPGA芯片的存储容量/字长。例如,本发明的一个实施例使用Altera FLEX 10K系列FPGA芯片。因此,每个地址空间的预计最大尺寸为:REG,3,000个字;CLK,1个字;S2H,10个字;H2S,10个字。每个FPGA芯片大约可以容纳100个字。
模拟仿真器系统还具有允许用户在模拟仿真过程中的任何时间开始,停止,断言输入值,以及检查值的特点。为了使模拟器具有灵活性,模拟仿真器还必须使所有部件对用户可见,无论部件是在软件还是硬件中完成内部实现。在软件中,在模拟过程中模型化组合部件并计算值。因此,这些值对于用户来说清晰“可见”,可在模拟过程中的任何时间进行存取。
但是,硬件模型中的组合部件值并不像这样直接“可见”。尽管寄存器可以很容易被软件内核直接访问(即,读/写),但组合部件却更难确定。在FPGA中,大多数组合部件被模型成查找表以获得高的门电路利用率。从而,查找表映射提供了有效的硬件模型,但损失了大多数组合逻辑信号的可见性。
尽管具有组合部件缺乏可见性的问题,但模拟仿真系统可以在硬件加速模式之后重新建立或生成组合部件以供用户检查。如果用户的电路设计仅具有组合和寄存器部件,则可以从寄存器部件中获得所有组合部件的值。也就是说,根据电路设计所需的特定逻辑功能,组合部件以不同形式由寄存器构造或包含寄存器。模拟仿真器仅具有寄存器和组合部件的硬件模型,并且因此,模拟仿真器将从硬件模型中读出所有的寄存器值,然后重新建立或生成所有的组合部件。因为执行此重新生成过程需要额外开支,所以并不总是执行组合部件的重新生成;而是基于用户的需要执行。事实上,使用硬件模型的一个好处是可以加速模拟过程。在每个循环(或大部分循环)确定组合部件值进一步降低了模拟的速度。在任何情况下,仅寄存器值的检查就可以满足大多数模拟分析的要求。
从寄存器值重新生成组合部件值的过程假设模拟仿真系统处于硬件加速模式或ICE模式。否则,软件模拟已经将组合部件值提供给了用户。模拟仿真系统在硬件加速开始之前保持驻留在软件模型中的组合部件值以及寄存器值。这些值保留在软件模型中直到被系统再次重写。因为软件模型从正好在硬件加速运行开始之前的时期已经拥有了寄存器值和组合部件值,所以重新生成组合部件的过程涉及根据更新的输入寄存器值更新这些值中的一些或全部。
组合部件的重新生成过程如下:首先,如果用户需要,软件内核可将硬件寄存器部件的所有输出值从FPGA芯片读到REG缓冲器中。此过程涉及FPGA芯片中寄存器值通过地址指示器到REG地址空间的链接的DMA(直接存储器存取)转换。将硬件模型中的寄存器值安置于位于软件/硬件边界的REG缓冲器中,允许软件模型访问数据用于进一步处理。
第二,软件内核比较硬件加速运行之前和硬件加速运行之后的寄存器值。如果硬件加速运行之前的寄存器值与硬件加速运行之后的值相同,则组合部件中的值没有变化。可从软件模型中读出这些值,而不是耗费时间和资源重新生成组合部件,软件模型已经具有正好在硬件加速运行之前储存于其中的组合部件值。另一方面,如果这些寄存器值的一个或多个已改变,依赖于改变的寄存器值的一个或多个组合部件值也将改变。必须通过下面的第三步骤重新生成这些组合部件。
第三,对于加速之前和加速之后寄存器具有不同值,软件内核将其扇出的组合部件安排到事件队列中。在此,那些在加速运行过程中改变了值的寄存器检测到一个事件。很可能,依赖于这些改变的寄存器值的组合部件将产生不同的值。无论这些组合部件值如何变化,系统确保这些组合部件在下一个步骤中估算这些改变的寄存器值。
第四,软件内核接着执行标准事件模拟算法,以将值变化从寄存器传送到软件模型中的所有组合部件。换句话说,在加速之前到加速之后的时间间隔中变化的寄存器值被传送到所有依赖于这些寄存器值的下游组合部件中。接着,这些组合部件估算新的寄存器值。根据扇出和传送原则,安置于依次直接依赖变化的寄存器值的一级组合部件下游的其他二级组合部件也必须估算变化的数据,如果有的话。此将寄存器值传送到其他可能受影响的下游部件的过程延续到扇出网络的末端。因此,仅更新了软件模型中位于下游并受变化的寄存器值影响的组合部件。并非所有的组合部件值都受影响。因此,如果在加速之前到加速之后的时间间隔中仅有一个寄存器值发生改变,并且仅有一个组合部件受此寄存器值改变的影响,那么仅仅这个组合部件将根据此改变的寄存器值重新估算它的值。模型电路的其他部分不受影响。对于这个小的变化,组合部件的重新生成过程将进行的相对较快。
最后,当事件传送完成后,系统准备好了进行任何模式的操作。通常,用户期望在长期运行之后检查值。在组合部件的重新生成过程之后,用户将继续进行纯软件模拟,以供调试/测试。但是,在其他时间,用户可能希望继续进行硬件加速以到达下一个目标点。在其他情况下,用户可能希望在ICE模式下继续执行过程。
总而言之,组合部件的重新生成涉及使用寄存器值去更新软件模型中的组合部件值。当任何寄存器值发生改变时,当值被更新时改变的寄存器值将通过该寄存器的扇出网络被传送。当没有寄存器值发生改变时,软件模型中的值也不会改变,于是系统不需重新生成组合部件。通常,硬件加速运行将持续一段时间。从而,许多寄存器值将改变,并影响位于这些值发生改变的寄存器的扇出网络下游的很多组合部件值。在此情况下,组合部件的重新生成过程将相对较慢。在其他情况下,在硬件加速运行之后,只有少数寄存器值发生改变。值发生改变的寄存器的扇出网络可能较小,因此,组合部件的重新生成过程将相对较快。
IV.利用目标系统模式仿真
图10显示了根据本发明一个实施例的模拟仿真系统结构。图10也显示了当系统在内电路仿真模式中操作时,软件模型,硬件模型和仿真接口以及目标系统之间的一个关系。如前所述,该模拟仿真系统包括一个通用微处理器和一个由诸如PCI总线的高速总线互连的可重新配置的硬件板。该模拟仿真系统编译用户的电路设计并且为硬件模型到可重新配置电路板的映射过程生成仿真硬件配置数据。然后用户可以通过通用处理器模拟电路,硬件加速模拟程序,通过仿真接口利用目标系统仿真电路设计,之后进行后模拟分析。
在编译过程中确定软件模型315和硬件模型325。在内电路仿真模式的系统中也提供仿真接口382和目标系统387。在用户的判断下,仿真接口和目标系统在开始时不需要耦联到系统上。
软件模型315包括内核316,该内核316控制整个系统,以及用于软件/硬件边界的四个地址空间-REG,S2H,H2S和CLK。模拟仿真系统根据不同的部件类型和控制功能将硬件模型映射到主存储器中的4个地址空间:指定REG空间317用于寄存器部件;指定CLK空间320用于软件时钟;指定S2H空间318用于软件测试平台部件到硬件模型的输出中;指定H2S空间319用于硬件模型到软件测试平台部件的输出。在系统的初始化时间中,将这些专用输入/输出缓冲空间映射到内核的主存储空间里。
硬件模型包括FPGA芯片的几个FPGA组326a-326d和FPGA输入/输出控制器327。每个组(例如,326b)至少包括一个FPGA芯片。在一个实施例中,每个组包括4个FGPA芯片。在一个4×4 FPGA芯片阵列中,组326b和组326d可能是低端组,组326a和组326c可能是高端组。图6中讨论了映射,布局和从特定硬件模型化的用户电路设计部件到特定的芯片和它们的互连的布线。软件模型315和硬件模型325之间的互连328是一个PCI总线系统。硬件模型也包括FPGA输入/输出控制器327,该控制器327包括一个PCI接口380和一个用于在维持PCI总线通过量的同时控制PCI总线和FPGA芯片组326a-326d之间的数据通信的控制单元381。每个FPGA芯片还包括几个地址指示器,其中每个地址指示器对应于软件/硬件边界中的每个地址空间(即REG,S2H,H2S和CLK),以此耦联每个地址空间和FPGA芯片组326a-326d中的每个FPGA芯片之间的数据。
软件模型315和硬件模型325之间的通信通过硬件模型中的一个DMA引擎或地址指示器发生。或者,通信也通过硬件模型中的DMA引擎和地址指示器发生。内核通过直接映射输入/输出控制寄存器启动DMA传送和估算请求。REG空间317、CLK空间320、S2H空间318和H2S空间319分别使用输入/输出数据路径线路321、322、323和324用于软件模型315和硬件模型325之间的数据传输。
S2H和CLK空间的所有的主输入都需要双缓冲,因为这些空间需要几个时钟周期来完成更新过程。双缓冲避免了可能会造成竞态状态的对内部硬件模型状态的干扰。
S2H和CLK空间是从内核到硬件模型的主输入。如上所述,硬件模型实质上容纳用户电路设计的所有寄存器部件和组合部件。此外,软件时钟在软件中模型化并在CLK输入/输出地址空间里被提供给至硬件模型的接口。内核推进模拟时间,寻找有效的测试平台部件并且估算时钟部件。当内核检测到任何时钟边沿时,更新寄存器和存储器并且通过组合部件传送数值。这样,如果选择硬件加速模式,这些空间中数值的任何变化将触发硬件模型改变逻辑状态。
对于内电路仿真模式,仿真接口382耦联到PCI总线328以此与硬件模型325和软件模型315通信。在硬件加速模拟模式和内电路仿真模式的过程中,内核316不仅控制软件模式而且控制硬件模式。仿真接口382也通过电缆390被耦联到目标系统387中。仿真接口382还包括接口端口385,仿真输入/输出控制386,目标到硬件的输入/输出缓冲器(T2H)384和硬件到目标的输入/输出缓冲器(H2T)383。
目标系统387包括一个连接器389,一个信号输入/信号输出接口插座388以及属于目标系统387的其他模块或芯片。例如,目标系统387可以是一个EGA视频控制器,用户电路设计可以是一个特别的输入/输出控制器电路。用于EGA视频控制器的输入/输出控制器的用户电路设计在软件模型315中完全模型化并且在硬件模型325中部分地模型化。
软件模型315中的内核316也控制内电路仿真模式。对模拟时钟的控制仍是在软件中通过软件时钟、门控时钟逻辑和门控数据逻辑进行,所以在内电路仿真模式中不会出现装配和占用时间的问题。这样,用户可以在内电路模拟过程中的任何时间里开启,停止,单步执行,断言数值和检查数值。
要这样运行,要识别目标系统和硬件模型之间的所有时钟节点。禁用目标系统中的时钟发生器,断开来自目标系统的时钟端口,或是阻止来自目标系统的时钟信号进入硬件模型。相反地,时钟信号来自一个测试平台程序或软件生成时钟的其它形式,这样软件内核可以检测到有效的时钟边沿以触发数据估算。因此,在ICE模式中,模拟仿真系统使用软件时钟而不是目标系统时钟来控制硬件模型。
为了在目标系统的环境中模拟用户电路设计的操作,将目标系统40和模型化的电路设计之间的主输入(信号输入)和输出信号(信号输出)提供给硬件模型325以供估算。这是通过目标到硬件缓冲器(T2H)384和硬件到目标缓冲器(H2T)383这两个缓冲器来实现的。目标系统387使用T2H缓冲器384将输入信号应用到硬件模型325。硬件模型325使用H2T缓冲器383将输出信号输送到目标系统387。在该内电路仿真模式中,硬件模型通过T2H和H2T缓冲器而不是S2H和H2S缓冲器接收和发送输入/输出信号,因为现在系统使用目标系统387而不是软件模型315中的测试平台程序来估算数据。因为目标系统以一个实质上高于软件模拟速度的速度运行,所以内电路仿真模式也将以一个较高速度运行。这些输入和输出信号的传输发生在PCI总线328中。
此外,在仿真接口382和硬件模型325之间也有一条总线61。这条总线与图1中的总线61类似。该总线61允许仿真接口382和硬件模型325通过T2H缓冲器384和H2T缓冲器383通信。
通常,不将目标系统387耦联到PCI总线。但是,如果将仿真接口382合并到目标系统387的设计中,这样的一个耦联是可行的。在该装配中,电缆390将不存在。目标系统387和硬件模型325之间的信号仍将穿过仿真接口。
V.后模拟分析模式
本发明的模拟仿真系统可以支持改值转储(VCD),一种广泛用于后模拟分析的模拟器功能。本质上,VCD提供硬件模型的所有输入和所选寄存器输出的历史记录,使得后来在后模拟分析中用户可以检查模拟过程的不同输入和引起的输出。为了支持VCD,系统将所有的输入记录到硬件模型中。对于输出,系统以一个用户定义的记录频率(例如,1/10,000记录/周期)记录硬件寄存器部件的所有值。记录频率决定输出值多长时间记录一次。对于一个1/10,000记录/周期的记录频率来说,每10,000个周期记录一次输出值。记录频率越高,用于之后的后模拟分析的信息就记录越多。记录频率越低,用于之后的后模拟分析的存储的信息就越少。因为选择的记录频率与模拟仿真速度有因果关系,所以用户应该仔细选择记录频率。一个较高的记录频率将降低模拟仿真速度,因为在进一步模拟之前,系统必须耗费时间和资源通过执行对存储器的输入/输出操作来记录输出数据。
关于后模拟分析,用户选择一个模拟所需的特定点。如果记录频率是1/500记录/周期,寄存器值在每隔500周期的点0,500,1000,1500等等被记录。如果用户需要例如在点610的结果,用户选择已被记录的点500,并且在时间上向前模拟直到点610。在分析阶段,分析速度和模拟速度是一样的,因为用户一开始访问500点的数据,然后向前模拟到点610。注意在较高的记录频率上,为后模拟分析存储了更多的数据。这样,对于一个1/300记录/周期的记录频率,每隔300周期在点0,300,600,900等等存储数据。为了获得在点610上的结果,用户一开始选择已被记录的点600然后向前模拟到点610。注意当记录频率是1/300而不是1/500时,在后模拟分析中系统可以更快地达到期望的点610。但是,情况并不总是如此。特别分析点连同记录频率决定可以以多快的速度到达后模拟分析点。例如,如果VCD记录频率是1/500而不是1/300,那么系统可以较快地达到点523。
然后用户可以通过用到硬件模型的输入记录执行软件模拟,以此计算所有硬件部件的改值转储,从而执行模拟仿真之后的分析。用户也可以及时选择任何寄存器记录点并及时地从那个记录点向前开始改值转储。这种改值转储方法可以链接到任何模拟波形观测仪用于后模拟分析。
VCD随选系统
本发明的一个实施例是一个不需要重新运行模拟的VCD随选系统。根据本发明的一个实施例,在此所述的VCD随选技术包括以下高标准特性:(1)基于RCC的平行模拟历史压缩和记录,(2)基于RCC的平行模拟历史解压和VCD文件生成,以及(3)在没有模拟再运行的情况下对一个选择的模拟目标范围和设计检查的随选软件再生成。每一种特性将在下文详细讨论。
在一个调试进程中,EDA工具(以下指RCC系统,它包括了本发明的不同方面)记录来自一个测试平台程序的主输入这样可以再现模拟的任何部分。然后用户可以选择地命令EDA工具或RCC系统将硬件状态信息从任何模拟时间范围转储到一个VCD文件用于以后的分析。此后,用户可以在选择的模拟时间范围内立即开始调试他的设计。如果选择的模拟时间范围不包括用户寻求解决的故障,他可以选择另一个模拟时间范围转储到VCD文件。然后用户可以分析这个新的VCD文件。由于VCD的这种随选特性,用户可以在任何点停止模拟并要求从任何所需的模拟时间起始点到任何模拟时间终点生成另一个选择的VCD文件随选。
在一个典型的调试进程内,用户使用如图83所示的RCC系统调试他的设计。在第一次模拟运行中,用户快速地从一个期望的开始模拟时间到任何期望的终止模拟时间模拟他的设计,这段时间在这称作一个模拟进程范围(simulation session range)。在该快速的模拟运行中,主输入的一个高度压缩形式被记录在一个“输入历史”文件中以此可以再现该模拟进程的任何部分。在模拟进程范围的末端,RCC系统可以从该终点将硬件状态信息存储在一个“模拟历史”文件中,使得用户如果需要的话可以越过这个终点恢复调试设计。
在快速模拟运行的末端,用户将分析结果,并不可避免的检测到他设计中存在的一些问题。然后用户做出猜测,问题的根源(即故障)存在于一个特定的狭窄模拟时间范围内,在这里称作模拟目标范围,该模拟目标范围在更宽的模拟进程范围内。例如,如果模拟进程范围包括1,000个模拟时间步骤,较窄的模拟目标范围可能在较宽的模拟进程范围内的一个特别位置仅包括100个模拟时间步骤。
一旦用户对模拟目标范围的精确位置作出猜测以隔离故障,RCC系统一开始就通过解压输入历史文件中的压缩的主输入以及将解压的主输入传送到硬件模型中用于估算,进行快速地模拟。当RCC系统达到模拟目标范围时,它转储估算的结果(例如,硬件节点值和寄存器状态)到一个VCD文件。此后,用户可以通过使用从模拟目标范围的起始的VCD文件重放他的设计来更仔细地分析这个区域,而不是必须从模拟进程范围的开始或者甚至从模拟的一开始再运行模拟。将硬件状态从模拟目标范围以一个VCD文件存储起来的这个特征节省了用户大量的调试时间,不然时间就会浪费在模拟再运行上。
现在参照图83,图83描述了包含本发明的一个实施例的RCC系统的一个高层图。RCC系统包括一个RCC计算系统2600和一个RCC硬件加速器2620。如本专利说明书其他地方描述的一样,RCC计算系统2600包含计算资源,该计算资源对于在软件中允许用户模拟用户整个软件模型化的设计以及控制设计中硬件模型化部分的硬件加速是必需的。为此,RCC计算系统2600包括CPU2601,RCC系统的各种部件所需的各种时钟2602(包括在本专利说明书其他地方描述的软件时钟),测试平台程序2603和系统磁盘2604。与一些常规的以硬件为基础的事件历史缓冲器相比,系统磁盘用于记录压缩的数据而不是一个小的硬件RAM缓冲器。尽管在图中没有显示,RCC计算系统2600包括其他逻辑部件和为电路设计者提供计算能力的总线子系统,以此在一个计算系统执行的其他任务中运行诊断程序,不同的软件和处理文件。
RCC硬件加速器2620,在本专利说明书中的其他部分也被称作RCC阵列,其包括逻辑部件中的可重新配置的阵列(例如FPGA),该阵列可以至少在硬件中模型化用户设计的一部分使得用户可以加速调试过程。为此,RCC硬件加速器2620包括可重新配置的逻辑部件的阵列2621,该阵列提供用户设计的一部分的硬件模型。RCC计算系统2600通过如本专利说明书中其他地方描述的软件时钟和一个总线系统,其一部分如图83中的线路2610和2611所示,与RCC硬件加速器2620紧密耦合。
本发明的VCD随选方面将参照图84予以讨论。图84显示了几个模拟时间-t0,t1,t2和t3的一个时间序列。模拟进程范围在模拟时间t0和模拟时间t3之间,其中当然包括模拟时间t1和t2。模拟时间t0代表快速模拟开始的模拟进程范围内的第一模拟时间。该模拟时间t0代表任何可分离的模拟进程或模拟进程范围的第一模拟时间。换句话说,假定今天的调试进程包括从t=10,000到t=12,000的模拟进程范围的一个检查。用户猜测特定的故障位于t=10,500和t=10,750之间的某一处。对于该模拟进程范围,模拟时间t0为t=10,000。假定为该模拟进程范围t=10,000到t=12,000找到并解决特定的故障。明天,用户接着移动到下一个模拟进程范围t=12,000到t=15,000。这里,模拟时间t0为t=12,000。有时,模拟时间t0代表用户设计的第一个调试进程的最初模拟时间,即,t0对应于t=0。
类似地,模拟时间t3代表选择的模拟进程范围的最后模拟时间。换句话说,假定今天的调试进程包括从t=14,555到t=16,750的模拟进程范围的一个检测。对于该模拟进程范围,模拟时间t3为t=16,750。假定在模拟进程范围t=14,555到t=16,750找到并解决特定的故障。然后用户移到下一个模拟进程范围t=16,750到t=19,100。这里,模拟时间t3为t=19,100。有时,模拟时间t3代表用户设计的最后一个调试进程的最后模拟时间。
如果此时不急着需要,用户在该模拟时间t3之外可以继续模拟,他集中在模拟时间t0到t3,即当前的模拟进程范围调试他的设计。通常,当在当前模拟进程范围内解决故障时,用户将在模拟时间t3之外进入到下一个模拟进程范围继续模拟他的设计。
在模拟进程范围的这个抽象表示中,这些模拟时间段t0-t3不必彼此相邻,即模拟时间t0和t1不立即相邻。确实,模拟时间t0和t1可以相隔成千个模拟时间段。
因为将在RCC系统中实施本发明的一个实施例,所以要参考图83所示的RCC系统的各种部件。首先将讨论RCC系统的输入和模拟历史生成操作。该生成操作包括主输入的数据压缩的一些形式和压缩的主输入的记录。其次将讨论RCC系统的VCD生成操作。该VCD生成操作包括解压主输入以复制模拟历史并且将硬件状态转储到一个模拟目标范围的VCD文件中。第三,讨论VCD文件检测程序。尽管有时使用术语“模拟历史”,但这不意味着整个调试进程涉及软件模拟。确实,RCC系统从硬件状态中生成VCD文件并且仅为了后来的VCD文件分析使用软件模型。
输入和模拟历史生成---压缩和记录
最初,用户在图83的RCC计算系统2600中的软件中模型化设计。对于设计的一些部分,RCC计算系统2600基于硬件描述语言(例如,VHDL)自动地生成设计的一个硬件模型。配置硬件模型在可重新配置的逻辑部件2621的阵列中进行,该阵列是RCC硬件加速器2620的一部分。有了这个装置,用户可以在RCC计算系统2600中的软件中模拟设计并使用RCC硬件加速器2620加速设计的一个部分(即模拟时间步骤或电路的独特物理部分),或一个模拟和硬件加速的组合。
用户刚刚完成他的最新电路设计。现在应该调试设计来寻找缺陷。如果用户先前已经调试了设计的一个较早版本,他知道一个故障或许出现的地方。另一方面,如果这是该新设计的最初调试进程,用户必须对于一个潜在故障的出现位置做出猜测。不论哪种状况,需要一些猜测来大概确定故障位置。为了进行讨论,假定这是最初的调试设计的情况。
在调试设计中,用户选择一个模拟进程范围。理论上,该模拟进程范围可以是任何长度的模拟时间。然而实际上,模拟进程范围应该选择得足够短以隔离设计中的几个故障,并且应该选择得足够长以快速进行调试程序并使充分调试一个设计所需的调试进程数量最小化。显然,两个或三个模拟时间步骤的一个模拟进程范围不会揭示任何故障的存在。而且,这个小模拟进程范围将迫使用户进行许多减慢调试程序的重复任务。如果选择的模拟进程范围是一百万个模拟时间步骤,太多的故障可以显现出来,这样用户将发现很难集中的解决一个问题。
如图84所示,一旦用户选择了一个模拟进程范围,他就命令RCC系统快速的从模拟时间t0到模拟时间t3模拟。如前所述,模拟时间t0到t3的间隔可以是任何选择的范围,但是模拟时间t0代表模拟的开始而模拟时间t3代表该模拟进程范围的最后模拟时间。
在模拟时间t0,在RCC计算系统2600中开始快速模拟。从模拟时间t0到模拟时间t3执行快速的模拟而不是正常的模拟模式,因为在该时间段内不需要再生成软件模型。如本专利说明书的其他地方所述,再生成操作需要RCC计算系统2620来接收硬件状态信息(如节点值,寄存器状态)使得在软件中可以再生成更复杂逻辑部件(如组合逻辑)以为用户作进一步分析。当然,一些用户在模拟过程中可能想检查软件模型,在这种情况下,RCC计算系统2600不进行快速模拟。在此情况下,由于RCC计算系统2600需要额外的时间从硬件模型的主输出中再生成软件模型,模拟过程更慢了。
一开始,设计的完全状态,诸如软件模型状态和硬件模型寄存器和节点值在模拟时间t0被存储到一个在系统磁盘中称作“模拟历史”的文件。这允许了用户在将来的任何时间将设计的状态载入RCC系统以供调试之用。在从模拟时间t0到模拟时间t3的模拟进程范围的该快速模拟期间,RCC计算系统2600将两个不同程序并行地应用到主输入Ip中。在线路2610上将来自试验平台程序2603的原始主输入提供到RCC硬件加速器2620以作估算。同时,将来自试验平台程序的相同主输入作为一个单独的称作“输入历史”的文件压缩并记录在系统磁盘中,使得主输入的整个历史被集中到一起,以允许用户再现模拟的任何部分。特别地,与模拟时间t0到模拟时间t3相对应的主输入被压缩并存储在系统磁盘中。
当RCC硬件加速器2620接收来自测试平台程序2603的主输入Ip时,它处理主输入。因此,当不同逻辑和其他电路设备估算数据时,硬件模型中的硬件状态很有可能改变。在从模拟时间t0到模拟时间t3这个期间,由于用户在该快速模拟期间内对细致地调试设计并不感兴趣,所以RCC系统不需要等候RCC计算系统2600来执行它的逻辑再生成。RCC系统也没有存储主输出(例如,硬件节点值和寄存器状态)。注意当RCC计算系统2600压缩主输入用于记录到“输入历史”文件时,RCC硬件加速器2620估算原始未压缩的主输入。在其他实施例中,RCC系统并不压缩主输入,用于将其记录到输入历史文件中。
为什么RCC计算系统2600将主输入传送到RCC硬件加速器中用于估算而同时在快速模拟进程间根本不存储这些输出?RCC系统需要存储基于来自模拟开始到模拟时间t3的主输入的估算的设计的硬件状态。除非硬件模型已经估算了从开始到点t3的主输入的整个历史,而不只是来自模拟时间t3的输入,否则在模拟时间t3上不能获得硬件模型状态的精确抽点打印。逻辑电路具有基于输入顺序影响估算结果的存储属性。这样,如果仅将从模拟时间t3(或是紧邻模拟时间t3之前的模拟时间)的主输入供给硬件模型用于估算,硬件模型或许将在该模拟时间t3上呈现错误的状态。
为什么在模拟时间t3存储硬件模型状态?在一个相对较短的时间内不可能调试一个有着超过一百万的门电路和超过一百万的模拟时间步骤的大型设计。用户需要多个模拟进程来调试该设计。为了从一个模拟进程快速地移动到下一个模拟进程,RCC系统从模拟时间t3存储硬件状态(连同压缩的主输入)使得用户可以调试在模拟时间t3开始的下一个模拟进程范围。有了存储的硬件模型状态,用户不需要从模拟的一开始模拟,相反地,用户在从模拟时间t0到模拟时间t3期间调试了设计之后,可以快速并且便捷地回到模拟时间t3。在模拟时间t3上的硬件模型状态存储在模拟历史文件中并代表他的设计的正确抽点打印,该抽点打印是直到那个点的主输入的整个历史的一个反映。
如果有必要而且用户需要的话,RCC硬件加速器2620中的硬件模型在线路2611上提供内部硬件状态给RCC计算系统2600,使得RCC计算系统2600可以在软件模型上建立或再生不同的逻辑部件(如组合逻辑)。但是,如上所述,用户并不关心在模拟进程范围的快速模拟期间观察软件模拟。因此,由于用户目前不会为了查明故障来检查内部硬件状态,所以来自RCC硬件加速器的这些内部硬件状态并不存储在系统磁盘中。
在模拟时间t3或在模拟进程范围的末端,停止这一特定的快速模拟操作。在模拟历史文件中存储与模拟时间t3相对应的RCC硬件加速器2620中的来自设计的硬件模型的估算结果或主输入(例如寄存器值)。这样,当用户已经从模拟时间t0到模拟时间t3调试设计时,如果需要的话他可以继续向前到模拟时间t3以作进一步调试。用户不需从模拟时间t0再运行模拟以此在超过模拟时间t3的某点调试他的设计。
总之,从模拟时间t0到模拟时间t3(即模拟进程范围),用户通过将来自测试平台程序2603的主输入在线路2610上供给RCC硬件加速器2620,同时压缩同样的主输入并且将它们存储到系统磁盘以供未来参考从而在实质上加速设计。RCC计算系统2600需要在输入历史文件中存储主输入(压缩或别的方式)以再现调试进程。压缩操作也与在RCC硬件加速器2620中的数据估算并行发生。最后,在模拟进程范围末端的模拟时间t3上,RCC系统将硬件模型的状态信息存储到一个模拟历史文件中。
在本发明的一个实施例中,来自模拟进程范围的所有记录的压缩的主输入是之后将被修改用于来自模拟时间t3的硬件状态信息的同样文件的一部分。在另一个实施例中,在系统磁盘中将来自模拟进程范围的存储信息和来自模拟时间t3的硬件状态信息分别存储为独立的文件。相似地,用VCD随选信息可以修改上述任何文件,该VCD随选信息是之后为模拟目标范围生成的。或者,VCD随选信息可以存储在系统磁盘的一个不同的VCD文件中,该VCD文件与压缩的主输入文件和模拟时间t3硬件状态信息文件分离。换句话说,根据本发明的一个实施例,输入历史文件,模拟历史文件和VCD文件可以合并在一个文件中。同时,输入历史文件和模拟历史文件也可以合并在一个与VCD文件分离的文件中。
现在讨论压缩方案。根据本发明的一个实施例,RCC系统的压缩逻辑允许每个模拟时间步骤10%输入事件的主输入事件的压缩率为20X。这样,一个具有超过一百万个门电路的大型ASIC设计可能需要200个主输入事件。对于每个模拟时间步骤发生的10%输入事件,大约有20个输入需要被压缩和记录。如果每个输入信号是2字节长,20个输入信号导致在每个模拟时间步骤的主输入上需要处理40个字节的数据。对于一个压缩率20X来说,每个模拟时间步骤可以将40个字节压的数据缩成2个字节的数据。这样,对于一个需要大约一百万个模拟时间步骤的设计,RCC系统将主输入压缩成2兆字节的数据。该大小的文件通过任何计算文件系统和波形观测仪可以容易地处理。在一个实施例中,使用ZIP压缩。
根据一个实施例,主输入压缩与RCC硬件加速器2620进行的主输入估算同时执行;输入历史文件生成与主输入估算同时发生。因此,压缩方案不对RCC系统的性能产生直接的负面影响。唯一可能发生的瓶颈是将压缩的主输入记录到系统磁盘中的过程。然而,由于数据被高度压缩,对于以每秒50,000模拟时间步骤运行的大多数设计,RCC系统的减速将小于5%。
至于在RCC系统中控制记录的具体方式,根据本发明的一个实施例,用户必须首先使用$rcc(record)命令以初始化RCC记录功能:
$rcc(record,name,<disk space>,<checkpoint control>);
现在将讨论对于变元name,<disk space>和<checkpoint control>的解释。“name”变元是当前模拟进程范围的记录名称。需要不同的名称来辨别同样设计的不同模拟运行。对于脱机的VCD随选调试尤其需要一个独立的记录名称。
<disk space>变元是一个规定分配给RCC系统记录程序的最大磁盘空间(以Mb(兆字节)为单位)的可选参数。系统设定值是100MB。RCC系统仅仅记录在规定的磁盘空间里当前模拟进程范围的最新部分。换句话说,如果将<disk space>值规定为100MB但是当前的模拟进程范围占据140MB,则RCC系统仅记录压缩的主输入的最后的100MB同时删除前40MB。本发明的该特征为故障分析提供了一个好处。在本发明的一个实施例中,测试台程序具有一些自测功能来检测模拟故障并且停止模拟。RCC模拟的最新历史可以为这样的故障分析提供大部分信息。
<checkpoint control>变元是一个规定执行一个完全状态检查点所需的模拟时间步骤的数量的可选参数。系统设定是1,000,000时间步骤。如大多数常规压缩算法一样,压缩主输入也基于连续的模拟时间步骤之间的状态差别。对于长期的模拟运行,在一个既定的低频率上完整的RCC状态的检查点可以大大地促进模拟历史析取。对于一个在RCC系统中每秒20K到200K模拟时间步骤的解压率和每一百万个步骤一个检查点,RCC系统可以在5到50秒内析取(即复制主输入和选择的VCD文件生成的模拟)任何模拟历史。
当调用该$rcc(record)命令时,RCC系统将记录模拟历史;即,压缩并在一个文件中记录主输入用于储存在系统磁盘中。由于在该时间不需要重建软件逻辑,所以来自RCC硬件加速器的主输出被忽视。记录程序可以用命令$rcc(stop)或$rcc(off)来被终止,在该点,RCC系统将模拟控制切换回软件模型。此时,处理主输出用于软件逻辑重建。
VCD生成---解压和转储
如上所述,RCC系统在模拟时间t0已经存储了模拟进程范围的开始处的软件模型和硬件模型,在输入历史文件中记录了压缩的用于整个模拟进程范围的主输入,并且在模拟时间t3处,在模拟历史文件中,存储了模拟进程范围末尾的设计的硬件模型状态。现在用户有足够的信息从来自模拟时间t0的设计信息载入模拟进程范围开始处的设计。有了压缩的主输入,用户可以软件模拟他的设计的任何部分。但是,由于VCD随选特征,用户或许不想在该点软件模拟他的设计。相反地,用户想生成一个用于所选的模拟目标范围的VCD文件用于精细的分析来隔离和解决故障。确实,有了记录的压缩主输入,RCC系统可以再现在模拟进程范围内的任何点。而且,若需要的话,RCC系统可以通过载入先前的从模拟时间t3存储的硬件状态信息,在当前的模拟进程范围之外进行模拟。
在快速模拟设计之后,用户检查结果以确定是否存在一个故障。如果没有明显的故障,那么对于当前的模拟进程范围设计可能没有故障。然后用户可以继续在当前的模拟进程范围之外到下一个模拟进程范围继续模拟,无论所选择的范围是什么。但是,如果用户已经确定设计有某种问题,他必须更仔细地模拟来隔离并解决故障。因为整个模拟进程范围对于仔细详尽的分析来说太大,所以用户必须瞄准一个特定的较窄范围以做进一步研究。基于用户对设计的熟悉和或许过去的调试努力,用户在模拟进程范围内对于故障的位置做出合理的猜测。用户将集中在一个选择的模拟目标范围,该模拟目标范围应该与用户对故障位置的猜测(或故障将出现的位置)相对应。用户确定模拟目标范围位于如图84所示的模拟时间t1与模拟时间t2之间。
RCC系统用先前的从模拟状态t0存储的配置信息在RCC计算系统2600中载入设计的软件模型并在RCC硬件加速器2620中载入硬件模型。然后RCC系统从模拟时间t0到模拟时间t1快速模拟。在快速模拟操作中,RCC计算系统载入先前存储的含有压缩的主输入的文件。RCC计算系统解压压缩的主输入并且传送解压的主输入到RCC硬件加速器2620用于估算。像开始的快速模拟操作压缩并存储模拟进程范围的主输入一样,在从模拟时间t0到模拟时间t1的快速模拟操作中不存储作为估算结果的主输出(例如,硬件模型节点值和寄存器状态)。
一旦快速模拟操作达到模拟目标范围的开始或模拟时间t1,RCC系统将来自RCC硬件加速器2620中的硬件模型的估算结果(即主输出Op)转储到系统磁盘的一个VCD文件中。与模拟进程范围的最初快速模拟操作不同,RCC计算系统2600不执行任何压缩。而且,由于用户不需要在该时间检查估算结果,所以RCC计算系统2600不执行任何软件模型的重建操作。通过不执行任何软件模型的重建操作,RCC系统可以快速地生成VCD文件。
但是,在其他实施例中,用户可能在存储主输出的同时检查从t1到t2的该模拟时间段的他的设计的软件模型。假如那样的话,RCC计算系统2600执行软件模型重建操作以允许用户检查来自他设计的任何方面的所有状态。
在模拟时间t2,RCC计算系统2600停止在VCD文件中存储来自RCC硬件加速器2620的估算输出。在该点,用户可以停止快速模拟。现在RCC系统具有完整的模拟目标范围的VCD文件并且用户可以继续更详尽地分析VCD文件。
当用户想分析VCD文件时,他不需要重新运行从一开始(例如,模拟时间t0)的模拟。相反地,用户可以命令RCC系统来载入从模拟目标范围的开始存储的硬件状态信息,并且用软件模型检查模拟的结果。这部分将在模拟历史检查部分更详细地说明。
基于VCD文件的分析,用户可能发现或可能未发现故障。如果发现故障,用户当然会开始调整设计。如果没有发现故障,用户可能对怀疑存在故障的模拟目标范围做出了错误的猜测。用户必须利用他上述使用的关于解压和VCD文件转储的同样的程序。用户做了另一个猜测,希望在模拟进程范围内有一个更好的模拟目标范围。然后,RCC系统从模拟进程范围的开始到新的模拟目标范围的开始快速地模拟,解压主输入并且将它们传送到RCC硬件加速器2620用于估算。当RCC系统达到新的模拟目标范围的起始处时,来自RCC硬件加速器2620的主输出被转储到一个VCD文件中。在新的模拟目标范围的末尾,RCC系统停止将硬件状态信息转储到VCD文件中。在该点,用户可以检查VCD文件用于隔离故障。
总之,从模拟时间t0到模拟时间t1,RCC系统通过解压先前压缩的主输入并且将它们传送到硬件模型用于估算,快速地模拟设计。在从模拟时间t1到模拟时间t2的模拟目标范围过程中,RCC系统将来自硬件模型的主输出转储到一个VCD文件中。在模拟目标范围的末尾,用户可以停止快速地模拟设计。在该点,用户可以通过直接进入模拟时间t1而不在模拟时间t0重新运行从一开始的模拟来检查VCD文件。
当完成对该模拟目标范围的检查并且隔离和消除故障时,用户可以继续到下一个模拟进程范围。该新的模拟进程范围在模拟时间t3开始。用户选择新的模拟目标范围的特定长度,该新的模拟目标范围的特定长度可与先前的模拟进程范围同样长。RCC系统载入与模拟时间t3相对应的先前存储的硬件状态信息。现在RCC系统准备好了该新的模拟进程范围的快速模拟。注意该新的模拟进程范围与从模拟时间t0到t3的范围相对应,其中载入的硬件状态现在与模拟时间t0相对应。快速模拟,VCD随选转储和VCD检查过程与上述的内容相似。
根据本发明的一个实施例,解压步骤并不对性能造成负面影响。RCC系统可以以每秒20,000到200,000模拟时间步骤的速率解压模拟历史(即压缩的和记录的主输入)。有了适当的检查点控制,RCC系统可以在50秒内析取(即再现由主输入和选择的VCD文件生成的模拟)模拟历史。
至于在RCC系统中控制VCD随选特征的具体方式,用户必须使用$axis_rpd命令。$axis_rpd是一个交互命令,用来析取RCC估算记录并且根据需要生成一个VCD文件。与常规的模拟重绕技术不同,$axis_rpd命令的执行既不能重绕内部模拟状态也不破坏外部和文件I/O状态。用户可以在调用$axis_rpd命令后继续模拟,所用方式与用户在$stop命令之后能够模拟的方式一样。
当不规定变元时,$axis_rpd命令显示在模拟进程范围内的所有可用模拟时间段,即,用户可以选择模拟目标范围。时间单位是在命令行接口中同样的时间单位。一个模拟记录的例子如下:
C1>$rcc(record,r1);
C2>#1000$rcc(xt0,run);
C3>#50000$rcc(off);
C4>#50500$rcc(run);
C5>#60000$rcc(stop);
---Start RCC engine at 100500.
---Back to SIM:stop RCC engine at 5000000.
---Start RCC engine at 5050500.
---Back to SIM:stop RCC engine at 6000000.
Interrupt at simulaion time 60000.0000ns
C6>$axis_rpd;
available simulation history:
1005.000000 to 50000.000000
50505.000000 to 60000.000000
Interrupt at simulaion time 60000.0000ns
从该模拟记录中,用户使用RCC引擎在紧邻1000到50000之后形成时间并在紧邻50500到60000之后形成时间。这样,$axis_rpd显示记录的模拟窗口。
为了从模拟历史生成一个VCD文件,用户使用具有下述控制变元的$axis_rpd命令:
$axis_rpd(start-time,end-time,“dump-file-name”,<level and scopecontrol>);
start-time和end-time规定了VCD文件的模拟时间窗口,或者模拟目标范围。时间控制变元的单位是用于命令行接口的时间单位。“dump-file-name”是VCD文件名。转储<level and scope control>参数与IEEE Verilog中的标准$dumpvars命令等同。
以下是一个$axis_rpd命令的例子:
C7>$axis_rpd(50505,50600,“f1.dump”);
---Start RCC VCD at 50505.010000!!
---End RCC VCD at 50600.000000!!
Interrupt at simulation time 60000.0000ns
该$axis_rpd命令生成了一个名为“f1.dump”的、从模拟时间50505到50600的模拟目标范围的VCD文件。正如$dumpvars,如果不提供level and scope control参数,$axis_rpd命令将转储整个硬件状态或主输出。
另一个使用$axis_rpd命令的例子如下:
C8>$axis_rpd(40444,50600,“f1.dump”,2,dp0);
---Start RCC VCD at 40000.000000!!
---Skip at time 50000.000000.
---Continue at time 50505.000000!!
---End RCC VCD at 50600.000000!!
Interrupt at simulation time 60000.0000ns
该$axis_rpd命令生成了一个在从时间40000到50600的范围dp0上的2级的VCD文件“f2.dump”。由于在时间50000到50500期间模拟交换回软件控制,$axis_rpd跳过那个窗口,因为不存在可用的模拟记录。
在用户结束模拟过程之后,也可以得到VCD随选。为了得到离线VCD随选,用户用+rccplay选项启动名为“vlg”的模拟程序。有了该选项,可以指示RCC系统析取模拟记录而不是执行模拟的正常初始化序列。一旦用户进入模拟程序,用户可以使用同样的$axis_rpd命令获得VCD随选。该过程的一个例子如下:
axis 15:3-dp0_rtlc>vlg+rccplay+rl-s
---Start replay record./AxisWork/rl at time 100500
C1>$axis_rpd;
available simulation history:
1005.000000 to 50000.000000
50505.000000 to 60000.000000
Interrupt at simulation time 100500
C2>$axis_rpd(40000,45000,“f2.dump”);
---Start RCC VCD at 40000.000000!!
---End RCC VCD at 45000.000000!!
Interrupt at simulation time 4500000
C3>
在上述例子中,用模拟记录“rl”析取模拟历史并且产生在从时间40000到45000的整个设计中的VCD。
模拟历史复查
一旦模拟目标范围(例如模拟时间t1到t2)的VCD文件已由RCC系统生成,用户不需要从模拟时间t2到t3快速地模拟。相反,RCC系统允许用户停止模拟并且直接运行到模拟目标范围的开始,或是模拟时间t1。这样,与现有技术相比,用户不必重新运行从一开始(例如,模拟时间t0)的模拟。已经转储到VCD文件中的硬件状态反映了来自模拟时间t0的主输入的整个历史的估算,包括从模拟时间t1到t2的主输入。
RCC系统载入VCD文件。此后,将存储的主输出传送给RCC计算系统2600使得可以用正确的状态信息重建软件模型和其所有组合逻辑电路。然后用户用一个波形观测仪检查软件模型来进行调试。使用现有的VCD,用户可以非常仔细地一步一步调试他的软件模型直到隔离故障。
有了该VCD随选特征,用户可以在模拟进程范围内选择任何模拟目标范围并且执行软件模拟以隔离故障。如果在选择的模拟目标范围中不能发现故障,用户可以根据需要选择另一个不同的模拟目标范围。因为记录了来自测试台程序的所有主输入用于整个模拟进程范围,所以可以根据需要再现并检查该模拟的任何部分。该特征允许用户反复地集中多种不同的模拟目标范围直到用户在该模拟进程范围内修复故障。
此外,该VCD随选特征在模拟过程中在线状况下是得到支持的,在模拟过程已经结束之后,离线状况下也支持该VCD随选特征。在线支持是可行的,因为在模拟时间t0上的硬件状态可以存储在系统磁盘中并且可以压缩和记录用于任何长度的模拟进程范围的主输入。因此,用户接着可以规定一个模拟目标范围以此对主输出做更集中的分析。
离线支持是可行的,因为在模拟时间t0上的硬件状态,模拟进程范围的全部主输入以及在模拟时间t1上的硬件状态都存储在系统磁盘中。这样,用户可以通过载入与模拟时间t0相对应的设计并且接着规定模拟目标范围回到调试他的设计上。同时,用户可以通过载入与模拟时间t3相对应的硬件状态而直接地继续进行到下一个模拟目标范围。
VI.硬件实现方案
A.概述
模拟仿真系统在可重新配置的电路板上实现FPGA芯片阵列。基于硬件模型,模拟仿真系统将用户电路设计的每个所选部分分区,映射,布局和布线在FPGA芯片上。因此,例如拥有16个芯片的4×4阵列可以模拟展开在这16个芯片上的大型电路。互连方案可以使每个芯片在2次“跳转”或连接之内访问另一个芯片。
每个FPGA芯片为每个输入/输出地址空间(即,REG,CLK,S2H,H2S)设置一个地址指示器。与特定地址空间有关的所有地址指示器互相链接在一起。所以,在数据传输过程中,顺序的从/向主FPGA总线和PCI总线选择每个芯片中的字数据,针对每个芯片中的所选地址空间一次一个字,并且一次一个芯片,直到为所选地址空间访问到所期望的字数据为止。这种字数据的顺序选择通过传送字选择信号完成。该字选择信号穿过芯片中的地址指示器并接着传送到下一个芯片的地址指示器中,这样继续直到最后一个芯片或系统对地址指示器进行初始化。
在可重新配置的电路板中的FPGA总线系统工作时的带宽是PCI总线的两倍,但速度仅为PCI总线的一半。因此,FPGA芯片被分成若干组以利用更大带宽的总线。此FPGA总线系统的处理能力可以比得上PCI总线系统的处理能力,所以并没有因为总线速度的降低而损失性能。可以采用包含更多FPGA芯片的更大的电路板或机载电路板延伸组长度来实现扩展。
B.地址指示器
图11显示了本发明地址指示器的一个实施例。所有的输入/输出操作都要经过DMA流。因为系统仅有一根总线,所以系统按一次一个字的方式顺序的访问数据。因此,地址指示器的一个实施例使用移位寄存器链顺序的访问这些地址空间中的所选的字。地址指示器400包括触发器401-405,“与”门406,以及一对控制信号,INITIALIZE 407和MOVE 408。
每个地址指示器具有n个输出(W0,W1,W2,...,Wn-1),用于从每个FPGA芯片中的n个可能的字中选择一个对应于所选地址空间中的相同字的字。根据模型化的特定用户电路设计,不同电路设计的字的数量n也不同,对于给定的电路设计,不同FPGA芯片的n也不同。在图11中,地址指示器400仅为一个5个字(即,n=5)的地址指示器。因此,此包含用于特定地址空间5字地址指示器的的特定FPGA芯片仅具有5个字可供选择。不用说,地址指示器400可以具有任何数量n的字。该输出信号Wn也可被称为字选择信号。当该字选择信号到达此地址指示器中最后一个触发器的输出时,其被称为OUT信号,并被传送给下一个FPGA芯片的地址指示器的输入。
当断言INITIALIZE信号时,初始化地址指示器。第一触发器401被设置为“1”,所有其他触发器402-405被设置为“0”。此时,地址指示器的初始化不会启动任何字选择;也就是说,初始化之后,所有的Wn输出仍为“0”。地址指示器的初始化过程将结合图12讨论。
MOVE信号控制指示器字选择的进程。此MOVE信号来源于来自FPGA输入/输出控制器的指数控制信号READ,WRITE和SPACE。因为每次操作本质上都是一次读或写,所以SPACE指数信号实质上确定了MOVE信号将应用于哪个地址指示器。因此,系统一次仅激活一个与一所选输入/输出地址空间相关的地址指示器,并且在此过程中,系统将MOVE信号仅用于此地址指示器。将结合图13进一步讨论MOVE信号的生成。根据图11,当断言MOVE信号时,将MOVE信号提供给“与”门406的一个输入和触发器401-405的启动输入。这样,在每系统时钟周期,一个逻辑“1”将从字输出Wi移动到Wi+1;也就是说,在每时钟周期,指示器将从Wi移动到Wi+1以选择特定的字。当移位字选择信号前进到最后一个触发器405的输出413(在此标记为“OUT”)时,除非再次初始化地址指示器,此OUT信号应在此后通过多路传输的跨芯片地址指示器链路进入下一个FPGA芯片(将结合图14和15讨论此过程)。
现在阐述地址指示器的初始化过程。图12显示了图11所示地址指示器初始化的状态转变图。开始时,状态460为空闲。当将DATA_XSFR设置为“1”时,系统进入状态461,地址指示器在这里被初始化。在此,断言INITIALIZE信号。每个地址指示器中的第一触发器被设置为“1”,地址指示器中的所有其他触发器被设置为“0”。此时,地址指示器的初始化不会启动任何字选择;也就是说,所有的Wn输出仍为“0”。下一个状态是等待状态462,同时DATA_XSFR仍为“1”。当DATA_XSFR为“0”时,完成地址指示器的初始化过程并且系统返回空闲状态460。
现在阐述为地址指示器产生不同MOVE信号的MOVE信号发生器。由FPGA输入/输出控制器(图10中的327;图22)产生的SPACE指数选择特定的地址空间(即,REG读,REG写,S2H读,H2S写,和CLK写)。在该地址空间中,本发明的系统顺序的选择特定的字以供访问。顺序字选择在每个地址指示器中通过MOVE信号完成。
图13显示了MOVE信号发生器的一个实施例。每个FPGA芯片450具有对应于不同的软件/硬件边界地址空间(即,REG,S2H,H2S,和CLK)的地址指示器。除了地址指示器和模拟并实现在FPGA芯片450中的用户电路设计,FPGA芯片450中还具有MOVE信号发生器470。MOVE信号发生器470包括一个地址空间译码器451和若干“与”门452-456。输入信号为导线线路457上的FPGA读信号(F_RD),导线线路458上的FPGA写信号(F_WR),以及地址空间信号459。用于每个地址指示器的输出MOVE信号根据应用哪个地址空间的地址指示器,对应于导线线路464上的REGR-move,导线线路465上的REGW-move,导线线路466上的S2H-move,导线线路467上的H2S-move,以及导线线路468上的CLK-move。这些输出信号对应于导线线路408上的MOVE信号(图11)。
地址空间译码器451接收一个3位输入信号459。其也可以接收2位输入信号。该2位信号提供4个可能的地址空间,而3位信号提供8个可能的地址空间。在一个实施例中,将CLK分配为“00”,S2H分配为“01”,H2S分配为“10”,REG分配为“11”。根据输入信号459,地址空间译码器的输出端在导线线路460-463中的一条上输出一个“1”,分别对应于REG,S2H,H2S,和CLK,同时将剩下的导线线路设置为“0”。因此,如果这些输出导线线路460-463中任何一个为“0”,那么其对应的“与”门452-456的输出也为“0”。同样的,如果这些输入导线线路460-463中任何一个为“1”,那么其对应的“与”门452-456的输出也为“1”。例如,如果地址空间信号459为“10”,则选择了地址空间H2S。导线线路461为“1”而剩下的导线线路460,462和463为“0”。相应的,导线线路466为“1”而剩下的输出导线线路464,465,467和468为“0”。同样,如果导线线路460为“1”,则选择了地址空间REG并且根据所选择的是读(F_RD)还是写(F_WR)操作,导线线路464上的REGR-move信号或导线线路465上的REGW-move信号将为“1”。
如前文中所解释的,SPACE指数由FPGA输入/输出控制器产生。用编码表示,MOVE控制为:
REG空间读指示器:REGR-move=(SPACE-index==#REG)&READ;
REG空间写指示器:REGW-move=(SPACE-index==#REG)&WRITE;
S2H空间读指示器:S2H-move=(SPACE-index==#S2H)&READ;
H2S空间写指示器:H2S-move=(SPACE-index==#H2S)& WRITE;
CLK空间写指示器:CLK-move=(SPACE-index==#CLK)&WRITE;这是和图13所示的MOVE信号发生器的逻辑图等价的编码。
如上所述,每个FPGA芯片具有相同数量的地址指示器作为软件/硬件边界中的地址空间。如果软件/硬件边界中具有4个地址空间(即,REG,S2H,H2S,和CLK),则每个FPGA芯片具有对应于这4个地址空间的4个地址指示器。每个FPGA需要这4个地址指示器,因为在所选地址空间中被处理的特定选择字可位于任何一个或多个FPGA芯片中,或所选地址空间中的数据影响在每个FPGA芯片中模拟并实现的不同电路元件。为确保在合适的FPGA芯片中用合适的电路元件处理所选择的字,与一给定软件/硬件边界地址空间(即,REG,S2H,H2S,和CLK)相关的每组地址指示器跨越多个FPGA芯片被“链接”在一起。如上文结合图11所述,仍然使用通过MOVE信号进行特定移位或传送的字选择机制,除了在此“链接”实施例中,一个FPGA芯片中与一特定地址空间相关的一地址指示器与下一个FPGA芯片中与相同地址空间相关的一地址指示器“链接”。
利用4个输入引脚和4个输出引脚链接地址指示器可以实现同样的目的。但是,此实施方式就有效的利用资源而言太浪费了;也就是说,在两个芯片之间需要4根导线,在每个芯片中需要4个输入引脚和4个输出引脚。根据本发明的系统的一个实施例使用多路复用跨芯片地址指示器链路,其使得硬件模型在芯片之间仅使用一根导线并且在每个芯片中仅使用1个输入引脚和1个输出引脚(一个芯片中的2个输入/输出引脚)。多路复用跨芯片地址指示器链路的一个实施例如图14所示。
在图14所示实施例中,用户的电路设计被映射和划分在可重新配置的硬件板470上的三个FPGA芯片415-417中。由块421-432表示地址指示器。每个地址指示器,例如地址指示器427具有类似于图11所示的地址指示器的结构和功能,除了字的数量Wn有所不同,并且因此触发器的数量也可能根据用于用户定制电路设计的每个芯片中字的数量而有所不同。
对于REGR地址空间,FPGA芯片415具有地址指示器421,FPGA芯片416具有地址指示器425,FPGA芯片417具有地址指示器429。对于REGW地址空间,FPGA芯片415具有地址指示器422,FPGA芯片416具有地址指示器426,FPGA芯片417具有地址指示器430。对于S2H地址空间,FPGA芯片415具有地址指示器423,FPGA芯片416具有地址指示器427,FPGA芯片417具有地址指示器431。对于H2S地址空间,FPGA芯片415具有地址指示器424,FPGA芯片416具有地址指示器428,FPGA芯片417具有地址指示器432。
每个芯片415-417分别具有一个多路复用器418-420。应注意这些多路复用器418-420可能是模型,而真正的实现则可能是寄存器和逻辑元件的组合,如所属技术领域的技术人员所知。例如,多路复用器可以是如图15所示的多个“与”门输入到一个“或”门的形式。多路复用器487包括四个“与”门481-484和一个“或”门485。多路复用器487的输入为来自芯片中每个地址指示器的OUT和MOVE信号。多路复用器487的输出486为传送到下一个FPGA芯片输入端的链连信号。
在图15中,此特定FPGA芯片具有对应于输入/输出地址空间的四个地址指示器475-478。地址指示器的输出,OUT和MOVE信号,为多路复用器487的输入。例如,地址指示器475在导线线路479上具有一个OUT信号,在导线线路480上具有一个MOVE信号。这些信号被输入“与”门481。“与”门481的输出为“或”门485的一个输入。“或”门485的输出即为此多路复用器487的输出。在操作中,每个地址指示器475-478的输出端的OUT信号连同其相应的MOVE信号以及SPACE指数充当多路复用器487的选择器信号;也就是说,OUT和MOVE信号(其来源于SPACE指数信号)必须都被断言有效(即,逻辑“1”)以将字选择信号传送出多路复用器到达链连导线线路。将周期性的断言MOVE信号,以通过地址指示器中的触发器移动字选择信号,从而使其具有输入MUX数据信号的特征。
参见图14,这些多路复用器418-420具有四组输入和一个输出。每组输入包括:(1)与特定地址空间相关的地址指示器的最后一个输出Wn-1导线线路(例如,图11中地址指示器的导线线路413)上的OUT信号,以及(2)MOVE信号。每个多路复用器418-420的输出为链连信号。当每个地址指示器中通过触发器的字选择信号Wn到达地址指示器中最后一个触发器的输出端时,其成为OUT信号。仅当与相同地址指示器相关的一个OUT信号和一个MOVE信号均被断言为有效(即,断言为“1”)时,导线线路433-435上的链连信号才为“1”。
对于多路复用器418,输入为分别对应于来自地址指示器421-424的OUT和MOVE信号的MOVE信号436-439和OUT信号440-443。对于多路复用器419,输入为分别对应于来自地址指示器425-428的OUT和MOVE信号的MOVE信号444-447和OUT信号452-455。对于多路复用器420,输入为分别对应于来自地址指示器429-432的OUT和MOVE信号的MOVE信号448-451和OUT信号456-459。
在操作中,对于任何给定的字Wn的移位来说,只有那些与软件/硬件边界中一所选输入/输出地址空间相关的地址指示器或地址指示器链路是有效的。因此,在图14中,对于一给定的移位,只有芯片415,416和417中与地址空间REGR,REGW,S2H或H2S中的一个相关的地址指示器才是有效的。同样,对于一个通过触发器的字选择信号Wn的给定移位来说,由于总线带宽的限制所选的字被顺序的访问。在一个实施例中,总线带宽为32位并且一个字也为32位,所以一次仅可以访问一个字,并将其送给适当的资源。
当地址指示器正通过其触发器进行字选择信号的传送或移位时,输出链连信号未被激活(即,不是“1”),并因此,此芯片中的此多路复用器未准备好将字选择信号传送给下一个FPGA芯片。当OUT信号被断言为有效(即,“1”)时,链连信号被断言为有效(即,“1”),表明系统准备好了将字选择信号传送或移位到下一个FPGA芯片。因此,一次对一个芯片进行访问;也就是说,在为另一个芯片执行字选择移位操作之前,一个芯片中的字选择信号通过触发器移位。事实上,仅当字选择信号到达每个芯片中地址指示器的终端时断言链连信号。以编码表示,链连信号为:
Chain-out=(REGR-move®R-out)|(REGW-move®W-out)|(S2H-move&S2H-out)|(H2S-move&H2S-out);
总之,对于系统中的X个输入/输出地址空间(即,REG,S2H,H2S,和CLK)来说,每个FPGA具有X个地址指示器,一个地址指示器对应于一个地址空间。每个地址指示器的尺寸取决于在每个FPGA芯片中模拟用户定制电路设计所需的字的数量。假设一特定FPGA芯片需n个字,并因而,地址指示器也有n个字,此特定地址指示器具有n个输出(即,W0,W1,W2,...,Wn-1)。这些输出Wi也被称为字选择信号。当选择了特定字Wi时,Wi信号被断言为有效(即,“1”)。此字选择信号向此芯片的下游地址指示器移位或传送直到到达此芯片中地址指示器的末端,在此处,其触发链连信号的生成,链连信号使字选择信号Wi开始在下一个芯片的地址指示器中传送。按此方式,在跨越此可重新配置的硬件板上的所有FPGA芯片上,可实现与给定输入/输出地址空间相关的一系列地址指示器。
C.门控数据/时钟网络分析
本发明的不同实施例与门控数据逻辑和门控时钟逻辑分析相结合执行时钟分析。门控时钟逻辑(或时钟网络)和门控数据网络确定对软件时钟的成功实现和在仿真过程中硬件模型中的逻辑估算非常关键。如结合图4所述,在步骤305执行时钟分析。为进一步阐述该时钟分析过程,图16显示了根据本发明一实施例的流程图。图16还显示了门控数据分析。
模拟仿真系统在软件中具有用户电路设计的完整模型,在硬件中具有用户电路设计的一些部分。这些硬件部分包括时钟部件,尤其是派生的时钟。由于此软件和硬件之间的边界,而产生了时钟传送时序问题。因为软件中具有完整模型,所以软件可以检测影响寄存器值的时钟边沿。除了寄存器的软件模型,这些寄存器还真实存在于硬件模型中。为了确保硬件寄存器也估算其相应的输入(即,将D输入的数据移到Q输出),软件/硬件边界包含一个软件时钟。软件时钟确保硬件模型中的寄存器正确的进行估算。软件时钟实质上控制硬件寄存器的启动输入,而不是控制对硬件寄存器部件的时钟输入。此软件时钟避免了竞态状态并因此,不需要用精确的时序控制来避免占用时间扰乱。图16所示的时钟网络和门控数据逻辑分析过程向硬件寄存器提供了一种模拟和实现时钟和数据传输系统的方法,其避免了竞态状态并提供了灵活的软件/硬件边界实施方式。
如前所述,主时钟为来自测试平台程序的时钟信号。所有其他时钟,例如源自组合部件的那些时钟信号,为派生的或门控时钟。主时钟可以派生门控时钟和门控数据信号。对于大多数部分,仅有很少的(如,1-10个)派生的或门控时钟存在于用户的电路设计中。这些派生的时钟可以以软件时钟的形式实现并存在于软件中。如果在电路设计中存在相对数量较大的(如,超过10个)派生的时钟,模拟仿真系统会将其模型化在硬件之中以减少输入/输出开支并维持模拟仿真系统的性能。门控数据为数据或寄存器的控制输入,其不同于通过一些组合逻辑来自主时钟驱动的时钟。
门控数据/时钟分析过程开始于步骤500。步骤501获取产生于HDL编码的有用的源设计数据库编码并将用户的寄存器元件映射到模拟仿真系统的寄存器部件。该用户寄存器到模拟仿真寄存器的一对一映射有助于随后的模型化步骤。在一些情况下,需要此映射以处理用特定的原语言描述寄存器元件的用户电路设计。因此,对于RTL级的编码来说,可以相当容易地使用模拟仿真寄存器,因为RTL编码的等级足够高,可以改变较低等级的实施方式。对于门级连线表来说,模拟仿真系统将访问部件的单元库并对其进行修改,使其适合特定电路设计的专用逻辑元件。
步骤502从硬件模型的寄存器部件中析取时钟信号。此步骤允许系统确定主时钟和派生的时钟。此步骤还确定电路设计中不同部件所需的所有时钟信号。来自此步骤的信息有助于软件/硬件时钟模型化步骤。
步骤503确定主时钟和派生的时钟。主时钟源自测试平台部件并仅被模型化在软件中。派生的时钟来自组合逻辑,其反过来由主时钟驱动。根据系统设定,本发明的模拟仿真系统将保持派生的时钟在软件中。如果派生的时钟的数量较少(如,少于10个),那么可将这些派生的时钟模型化为软件时钟。因为生成这些派生的时钟的组合部件的数量较小,所以将这些组合部件保存在软件中并不增加大量的输入/输出开支。但是,如果派生的时钟的数量较大(如,超过10个),那么可将这些派生的时钟模型化在硬件中以最小化输入/输出开支。有时,用户的电路设计使用大量的来源于主时钟的派生的时钟部件。因此,系统在硬件中建立时钟,以保持较小的软件时钟数量。
决策步骤504需要系统去确定是否在用户的电路设计中发现任何的派生的时钟。如果没有,则步骤504的结果为“否”并且时钟分析终止于步骤508,因为用户的电路设计中所有的时钟都为主时钟并且这些时钟都简单模拟在软件之中。如果在用户的电路设计中发现派生的时钟,则步骤504的结果为“是”并且算法进入步骤505。
步骤505确定从主时钟到派生的时钟的扇出组合部件。换句话说,此步骤通过组合部件跟踪来自主时钟的时钟信号数据通路。步骤506确定来自派生的时钟的扇入组合部件。换句话说,此步骤跟踪从组合部件到派生的时钟的时钟信号数据通路。在软件中循环进行系统输出和扇入组的确定。网络N的扇入组如下:
FanIn Set of a net N:
find all the components driving net N;
for each component X driving net N do:
if the component X is not a combinational component then
return;
else
for each input net Y of the component X
add the FanIn set W of net Y to the FanIn Set of net N
end for
add the component X into N;
end if
end for
通过反复的确定网络N的扇入(fan-in)组和扇出(fan-out)组以及它们的交集,来确定门控时钟或数据逻辑网络。此处的最终目标是确定网络N的所谓扇入组。网络N通常是一个时钟输入节点,用于从输入的角度确定门控时钟逻辑。对于从输入的角度确定门控数据逻辑来说,网络N是一个与临近的数据输入相关的时钟输入节点。如果节点在寄存器上,网络N为对此寄存器的时钟输入,此寄存器用于与其相关的数据输入。系统发现所有驱动网络N的部件。对于每个驱动网络N的部件X,系统确定部件X是否为组合部件。如果每个部件X均不为组合部件,那么网络N的扇入组不含有组合部件并且网络N为主时钟。
但是,如果至少有一个部件X为组合部件,则系统接着确定部件X的输入网络Y。在此,系统通过发现到部件X的输入节点可以进一步的在电路设计中向后探询。对于每个部件X的每个输入网络Y,可能存在与网络Y连接的扇入组W。将网络Y的该扇入组W与网络N的扇入组Fan-In Set相加,则部件X加入组N。
以类似的方式确定网络N的扇出组。网络N的扇出组如下:
FanOut Set of a net N:
find all the components using net N;
for each component X using the net N do:
if the component X is not a combinational component then
return;
else
for each output net Y of the component X
add the FanOut Set of net Y to the FanOut Set of net N
end for
add the component X into N;
end if
end for
再一次,通过反复的确定网络N的扇入组和扇出组以及它们的交集来确定门控时钟或数据逻辑网络。此处的最终目标是确定网络N的所谓扇出组。网络N通常是一个时钟输出节点,用于从扇出的角度确定门控时钟逻辑。因此,将确定使用网络N的所有逻辑元件的组。对于从扇出的角度确定门控时钟逻辑来说,网络N是一个与临近的数据输出相关的时钟输出节点。如果节点在寄存器上,网络N为此寄存器的时钟输出,此寄存器用于与其相关的主时钟驱动输入。系统发现所有使用网络N的部件。对于每个使用网络N的部件X,系统确定部件X是否为组合部件。如果每个部件X均不为组合部件,那么网络N的扇出组不含有组合部件并且网络N为主时钟。
但是,如果至少有一个部件X为组合部件,则系统接着确定部件X的输出网络Y。在此,系统通过发现来自部件X的输出节点可以进一步的从电路设计中的主时钟向前探询。对于每个部件X的每个输出网络Y,可能存在与网络Y连接的扇出组W。将此网络Y的扇出组W与网络N的扇出组Fan-Out Set相加,则部件X加入组N。
步骤507确定时钟网络或门控时钟逻辑。时钟网络为扇入和扇出组合部件的交集。
类似的,可以使用相同的扇入和扇出原则来确定门控数据逻辑。与门控时钟类似,门控数据为由一主时钟通过一些组合逻辑驱动的一寄存器的数据或控制输入(除了时钟)。门控数据逻辑是门控数据的扇入和来自主时钟的扇出的交集。因此,时钟分析和门控数据分析通过一些组合逻辑和一门控数据逻辑产生门控时钟网络/逻辑。如下文所述,门控时钟网络和门控数据网络确定对软件时钟的成功实现和在仿真过程中硬件模型中的逻辑估算非常关键。时钟/数据网络分析终止于步骤508。
图17显示了根据本发明一个实施例的硬件模型的基本构件块。对于寄存器部件,模拟仿真系统使用具有异步负载控制的D型触发器作为构成边缘触发器(即,触发器)和电平感应(即,锁存器)寄存器硬件模型的基本块。此寄存器模型构件块具有下列端口:Q(输出状态);A_E(异步启动);A_D(异步数据);S_E(同步启动);S_D(同步数据);当然还有System.clk(系统时钟)。
此模拟仿真寄存器模型由系统时钟的正沿或异步启动(A_E)输入的正电平触发。当正沿或正电平触发事件发生时,寄存器模型寻找异步启动(A_E)输入。如果异步启动(A_E)输入被激活,则输出Q具有异步数据(A_D)的值;否则,如果同步启动(S_E)输入被激活,则输出Q具有同步数据(S_D)的值。另一方面,如果异步启动(A_E)或同步启动(S_E)输入都未被激活,则不估算输出Q的值,尽管已检测系统时钟的正沿。按此方法,对这些启动端口的输入控制了基本构件块寄存器模型的操作。
系统使用软件时钟(其为专门的启动寄存器)控制这些寄存器模型的启动输入。在复杂的用户电路设计中,在电路设计中具有数百万个元件并且因此,模拟仿真器系统将在硬件模型中实现数百万个元件。单个控制所有这些元件的成本将是很高的,因为向硬件模型传送数百万个控制信号的操作比在软件中估算这些元件将花费更长的时间。但是,即使此复杂的电路设计通常也只调用很少的(1-10个)时钟,并且仅就时钟而言足够控制仅具有寄存器和组合部件的系统的状态转变。模拟仿真器系统的硬件模型仅使用寄存器和组合部件。模拟仿真器系统还通过软件时钟控制硬件模型的估算。在模拟仿真器系统中,用于寄存器的硬件模型不具有直接连接其他硬件部件的时钟;而是由软件内核控制所有时钟的值。通过控制几个时钟信号,内核具有对硬件模型估算的全面控制,同时协同处理器干涉开销可以忽略。
根据寄存器模型被当作锁存器还是触发器使用,将软件时钟输入异步启动(A_E)或同步启动(S_E)导线线路。由时钟部件的边缘检测触发从软件模型到硬件模型的软件时钟应用。当软件内核检测到时钟部件的边缘时,其通过CLK地址空间设置时钟边沿寄存器。此时钟边沿寄存器控制对硬件寄存器模型的启动输入,而不是时钟输入。全局系统时钟仍提供对硬件寄存器模型的时钟输入。但是,时钟边沿寄存器通过一个双缓冲器接口向硬件寄存器模型提供软件时钟信号。如下文将解释的,从软件时钟到硬件模型的双缓冲器接口保证了所有寄存器模型将关于全局系统时钟被同步更新。因此,软件时钟的使用消除了占用时间扰乱的危险。
图18(A)和18(B)显示了实现锁存器和触发器的构件块寄存器模型。这些寄存器模型借由合适的启动输入受软件时钟的控制。根据寄存器模型被当作锁存器还是触发器使用,异步端口(A_E,A_D)和同步端口(S_E,S_D)被用于软件时钟或输入/输出操作。图18(A)显示了被当作锁存器使用的寄存器模型的实现。锁存器为电平感应的;也就是说,只要断言了时钟信号(如,“1”),则输出Q跟随输入(D)。在此,软件时钟信号被提供给异步启动(A_E)输入,数据输入被提供给异步数据(A_D)输入。对于输入/输出操作,软件内核使用同步启动(S_E)和同步数据(S_D)输入,将值下载到Q端口。S_E端口被用作REG空间地址指示器,S_D端口用于向/从局部数据总线存取数据。
图18(B)显示了被当作设计触发器使用的寄存器模型的实现。设计触发器使用下列端口确定下一个状态逻辑:数据(D),设置(S),复位(R),和启动(E)。设计触发器的所有下一个状态逻辑都作为进入同步数据(S_D)输入的硬件组合部件的因子。软件时钟被输入到同步启动(S_E)输入。对于输入/输出操作,软件内核使用异步启动(A_E)和异步数据(A_D)输入,将值下载到Q端口。A_E端口被用作REG空间写地址指示器,A_D端口用于向/从局部数据总线存取数据。
现在讨论软件时钟。本发明软件时钟的一个实施例是对硬件寄存器模型的一时钟启动信号,这样使得这些硬件寄存器模型输入端的数据被一同估算并与系统时钟同步。这消除了竞态状态和占用时间扰乱。软件时钟逻辑的一个实施例包括软件中的时钟边沿检测逻辑,其根据时钟边沿检测触发硬件中的附加逻辑。此启动信号逻辑在数据到达这些硬件寄存器模型之前,为硬件寄存器模型的启动输入生成启动信号。门控时钟网络和门控数据网络确定对软件时钟的成功实现和在硬件加速模式中硬件模型的逻辑估算非常关键。如前文所述,时钟网络或门控时钟逻辑为门控时钟扇入和主时钟扇出的交集。类似的,门控数据逻辑也为门控数据扇入和数据信号主时钟扇出的交集。上文中结合图16讨论了扇入和扇出的概念。
如上文所述,主时钟由软件中的测试平台程序生成。派生的或门控时钟由反过来受主时钟驱动的组合逻辑和寄存器网络生成。根据系统设定,本发明的模拟仿真系统也将派生的时钟保留在软件中。如果派生的时钟的数量较少(如,少于10个),那么可将这些派生的时钟模型化为软件时钟。因为生成这些派生的时钟的组合部件的数量较小,所以将这些组合部件模型化在软件中并没有增加大量的输入/输出开支。但是,如果派生的时钟的数量较大(如,超过10个),那么可将这些派生的时钟和它们的组合部件模型化在硬件中以最小化输入/输出开支。
最终,根据本发明的一个实施例,在软件中发生的时钟边沿检测(通过对主时钟的输入)可被翻译成硬件中的时钟检测(通过对时钟边沿寄存器的输入)。软件中的时钟边沿检测触发硬件中的一个事件,使得硬件模型中的寄存器在接收数据信号之前接收时钟启动信号,确保数据信号的估算与系统时钟同步发生以避免占用时间扰乱。
如前文所述,模拟仿真系统在软件中具有用户电路设计的完整模型,在硬件中具有用户电路设计的一些部分。如内核中所规定的,软件可以检测影响硬件寄存器值的时钟边沿。为确保硬件寄存器也估算其相应的输入,软件/硬件边界包括一个软件时钟。软件时钟确保硬件模型中的寄存器的估算与系统时钟同步,并且没有占用时间扰乱。软件时钟实质上控制硬件寄存器部件的启动输入,而不是控制对硬件寄存器部件的时钟输入。实现软件时钟的双缓冲法确保了寄存器的估算与系统时钟同步,避免了竞态状态,并消除了对精确时序控制的需要,从而避免了占用时间扰乱。
图19显示了根据本发明的时钟执行系统的一个实施例。开始时,如结合图16所述,由模拟仿真器系统确定门控时钟逻辑和门控数据逻辑。接着分离门控时钟逻辑和门控数据逻辑。当实现双缓冲器时,还必须分离驱动源和双缓冲主逻辑。因此,根据扇入和扇出分析,门控数据逻辑513和门控时钟逻辑514已经分离。
模拟的主时钟寄存器510包括一个第一缓冲器511和一个第二缓冲器512,其均为D寄存器。该主时钟被模型化在软件中,但双缓冲器装置被模型化在软件和硬件中。时钟边沿检测发生在软件中的主时钟寄存器510中以触发硬件模型生成对硬件模型的软件时钟信号。数据和地址分别在导线线路519和520上进入第一缓冲器511。第一缓冲器511在导线线路521上的Q输出与第二缓冲器512的D输入相连。第一缓冲器511的Q输出还通过导线线路522被提供给门控时钟逻辑514以最终驱动时钟边沿寄存器515的第一缓冲器516的时钟输入。第二缓冲器512的Q输出通过导线线路523被提供给门控数据逻辑513以通过导线线路530最终驱动在用户定制设计的电路模型中的寄存器518的输入。主时钟寄存器510的第二缓冲器512的启动输入为导线线路533上来自状态机的INPUT-EN信号,其确定估算周期并相应地控制不同的信号。
时钟边沿寄存器515还包括一个第一缓冲器516和一个第二缓冲器517。时钟边沿寄存器515实现在硬件中。当在软件中发生时钟边沿检测时(通过主时钟寄存器510的输入),可以触发在硬件中相同的时钟边沿检测(通过时钟边沿寄存器515)。导线线路524上对第一缓冲器516的D输入被设置为“1”。导线线路525上的时钟信号来自门控时钟逻辑514并最终来自主时钟寄存器510中第一缓冲器511在导线线路522上的输出。导线线路525上的该时钟信号为门控时钟信号。第一缓冲器516的启动导线线路526上的信号为来自状态机的控制输入/输出和估算周期(将在下文介绍)的~EVAL信号。第一缓冲器516还在导线线路527上具有RESET信号。此相同的RESET信号还将被提供给时钟边沿寄存器515的第二缓冲器517。第一缓冲器516在导线线路529上的Q输出被提供给第二缓冲器517的D输入。第二缓冲器517在导线线路528上还具有启动输入CLK-EN信号,在导线线路527上具有一个RESET输入。第二缓冲器517的Q输出通过导线线路532被提供给用户定制设计的电路模型中的寄存器518的启动输入。缓冲器511,512和517连同寄存器518由系统时钟控制。仅时钟边沿寄存器515中的缓冲器516由来自门控时钟逻辑514的门控时钟控制。
寄存器518为模拟在硬件中的典型的D型寄存器模型,并且为用户定制电路设计的一部分。由本发明时钟实施方案的此实施例严格控制其估算过程。此时钟设定的最终目标为确保导线线路532上的时钟启动信号在导线线路530上的数据信号之前到达寄存器518,使得此寄存器对数据信号的估算与系统时钟同步发生并且没有竞态状态的发生。
再次重申,模拟的主时钟寄存器510被模型化在软件中,但其双缓冲器装置被模型化在软件和硬件中。时钟边沿寄存器515实现在硬件中。根据扇入和扇出分析,门控数据逻辑513和门控时钟逻辑514也被分离以用于模型化的目的,并且它们可以被模型化在软件中(如果门控数据和门控时钟的数量较小)或硬件中(如果门控数据和门控时钟的数量较大)。门控时钟网络和门控数据网络的确定对软件时钟的成功实现和在硬件加速过程中硬件模型的逻辑估算非常关键。
软件时钟的实现主要依赖于图19所示的时钟设定以及信号~EVAL,INPUT-EN,CLK-EN和RESET的断言时序。主时钟寄存器510检测时钟边沿来为硬件模型触发软件时钟的生成。此时钟边沿检测事件通过导线线路525上的时钟输入,门控时钟逻辑514,和导线线路522触发时钟边沿寄存器515的“激活”,使得时钟边沿寄存器515也检测相同的时钟边沿。按此方式,在软件中发生的时钟检测(通过主时钟寄存器510的输入519和520)可被翻译成硬件中的时钟边沿检测(通过时钟边沿寄存器515的输入525)。此时,主时钟寄存器510的第二缓冲器512的INPUT-EN导线线路533和时钟边沿寄存器515的第二缓冲器517的CLK-EN导线线路528还未被断言,因此没有数据估算发生。因此,检测时钟边沿将在硬件寄存器模型中估算数据之前发生。应注意在此阶段,导线线路519上来自数据总线的数据还没有被传送到门控数据逻辑513并进入硬件模型化的用户寄存器518。事实上,数据甚至还没有到达主时钟寄存器510的第二缓冲器512,因为导线线路533上的INPUT-EN信号还没有被断言。
在输入/输出阶段,断言导线线路526上的~EVAL信号以启动时钟边沿寄存器515中的第一缓冲器516。~EVAL信号在通过门控时钟逻辑到第一缓冲器516的导线线路525的时钟输入时,还经过门控时钟逻辑514对门控时钟信号进行监视。因此,如下文中结合4状态估算状态机所述,可以根据需要尽可能长时间地维持~EVAL信号,以稳定经过系统中图19所示部分的数据和时钟信号。
当信号稳定后,输入/输出终止,或系统准备估算数据,~EVAL被去断言(deasserted)以禁用第一缓冲器516。断言CLK-EN信号并通过导线线路528将其应用于第二缓冲器517以启动第二缓冲器517,并将导线线路529上的逻辑值“1”送给导线线路532上的Q输出,至寄存器518的启动输入。寄存器518现在已经被启动并且导线线路530上的任何数据将由系统时钟同步时钟输入到寄存器518。如读者可观察到的一样,寄存器518的启动信号比输入到此寄存器518的数据信号的估算运行的更快。
导线线路533上的INPUT-EN信号未被断言给第二缓冲器512。并且,导线线路527上的RESET边缘寄存器信号被断言给时钟边沿寄存器515中的缓冲器516和517以将这些缓冲器复位并确保它们的输出为逻辑“0”。现在INPUT-EN信号已被断言给缓冲器512,导线线路521上的数据被传送到门控数据逻辑513以通过导线线路530到达用户电路寄存器518。因为寄存器518的启动输入现在为逻辑“0”,导线线路530上的数据无法被时钟输入寄存器518。但是,先前的数据在RESET信号被断言给禁用的寄存器518之前已经通过先前断言的导线线路532上的启动信号被时钟输入。因此寄存器518的输入数据,以及其他寄存器(其为用户硬件模型化电路设计的一部分)的输入对于它们相应的寄存器输入端口稳定。当随后在软件中检测到时钟边沿时,主时钟寄存器510和硬件中的时钟边沿寄存器515激活寄存器518的启动输入,使得等待输入寄存器518的数据和其他等待输入其对应寄存器的数据一同被时钟输入并与系统时钟同步。
如前所述,软件时钟实现主要依赖于图19所示的时钟设定以及信号~EVAL,INPUT-EN,CLK-EN和RESET的断言时序。图20显示了根据本发明一个实施例的控制图19所示软件时钟逻辑的四状态有限状态机。
在状态540,系统空闲或一些输入/输出操作正在进行。EVAL信号为逻辑“0”。EVAL信号确定估算周期,其由系统控制器生成,并且可以根据需要持续很多个时钟周期以稳定系统中的逻辑。通常,EVAL信号持续的时间由编译过程中的布局方案确定并基于最长直接线的长度和最长分段多路传输导线(即,TDM电路)的长度。在估算过程中,EVAL信号为逻辑“1”。
在状态541,时钟被启动。CLK-EN信号被断言为逻辑“1”并且因此,断言了硬件寄存器模型的启动信号。在此,硬件寄存器模型中先前的门控数据被同步估算,而没有占用时间扰乱的危险。
在状态542,当INPUT-EN信号被断言为逻辑“1”时,新的数据被启动。还断言RESET信号以从硬件寄存器模型中去除启动信号。但是,通过门控数据逻辑网络被允许进入硬件寄存器模型的新数据,将继续被传送到它期望的硬件寄存器模型目的地或已经到达其目的地,并等待当启动信号再次被断言时被时钟输入硬件寄存器模型。
在状态543,传递的新数据在逻辑中稳定,同时EVAL信号保持在逻辑“1”。如上文中结合图9(A),9(B)和9(C)描述时分多路转换(TDM)电路时所介绍的,多路复用导线也为逻辑“1”。当EVAL信号被去断言或设置为逻辑“0”时,系统返回空闲状态540并等待根据软件对时钟边沿的检测进行估算。
D.FPGA阵列和控制
模拟仿真器系统首先基于包括部件类型的一系列控制将用户电路设计数据编译到软件和硬件模型中。在硬件编译过程中,如结合图6所述,系统执行映射,布局和布线过程,以最佳的划分,布局以及互连组成用户电路设计的不同部件。使用已知的编程工具,引用位流配置文件或可编程目的文件(.pof)(或者,原二进制文件(.rbf))来重新置包含许多FPGA芯片的硬件板。每个芯片包含对应用户电路设计的硬件模型的一部分。
在一个实施例中,模拟仿真器系统使用4×4的FPGA芯片阵列,总共拥有16个芯片。FPGA芯片的范例包括Xilinx XC4000系列FPGA逻辑装置和Altera FLEX 10K装置。
可以使用的Xilinx XC4000系列FPGA,包括XC4000,XC4000A,XC4000D,XC4000H,XC4000E,XC4000EX,XC4000L,和XC4000XL。特定的FPGA包括Xilinx XC4005H,XC4025和Xilinx4028EX。Xilinx XC 4028EX FPGA在一个单一PCI板上可以驱动将近50万个门电路。这些Xilinx FPGA的详细资料可以在它们的数据手册中获取,[Xilinx,The Programmable Logic Data Book](9/96),其内容以引用的方式并入本文。对于Altera FPGA,可以在下列数据手册中获取详细资料,[Altera,The 1996 Data Book](1996年六月),其内容以引用的方式并入本文。
下面对XC402 FPGA进行简要介绍。每个阵列芯片由一个240引脚的Xilinx芯片组成。组装有Xilinx XC4025芯片的阵列板包含大约440,000个可配置的门电路,并且可以执行计算密集的任务。XilinxXC4025 FPGA芯片包含1024个可配置的逻辑块(CLBs)。每个CLB可以实现32位的异步SRAM,或少量的通用布尔(Boolean)逻辑,以及两个选通寄存器。在芯片的外围,具有非选通输入/输出寄存器。可以用XC4005H替代XC4025。这是一个成本较低的具有120,000个可配置的门电路的阵列板。XC4005H装置具有大功率的24mA驱动电路,但缺少标准XC4000系列的输入/输出触发器。可以通过公开的数据表获得这些和其他Xilinx FPGA的详细资料,其内容以引用的方式并入本文。
通过将配置数据载入内部存储单元可以定制Xilinx XC4000系列FPGA的功能。存储在这些存储单元中的值确定了FPGA中的逻辑功能和互连。这些FPGA的配置数据可以储存在片上存储器中并且可以从外部存储器载入。FPGA可以从外部串联或并联PROM读取配置数据,或从外部设备将配置数据写入FPGA。可以无数次的将这些FPGA重新编程,特别是在硬件动态变化或用户期望硬件能适应不同应用时。
XC4000系列FPGA一般具有多达1024个CLB。每个CLB具有两级查找表,其中两个4输入查找表(或函数发生器F和G)为第三个3输入查找表(或函数发生器H)提供部分输入,以及两个触发器或锁存器。可以独立于这些触发器或锁存器驱动这些查找表的输出。CLB可以实现下列任意布尔(Boolean)函数的组合:(1)具有四个或五个变量的任何函数,(2)具有四个变量的任何函数,具有多达四个无关变量的任何第二函数,以及具有多达三个无关变量的任何第三函数,(3)一个具有四个变量的函数和一个具有六个变量的函数,(4)具有四个变量的任何两个函数,以及(5)一些具有九个变量的函数。两个D型触发器或锁存器可用于寄存CLB输入或储存查找表的输出。可以独立于查找表使用这些触发器。可以使用DIN作为或者是这两个触发器或者是锁存器中的直接输入并且H1可以通过H函数发生器驱动另一个。
在CLB中的每个4输入函数发生器(即,F和G)包含用于进位和借位信号快速生成的专用算术逻辑,可以将其配置成具有进位输入和进位输出的2位加法器。这些函数发生器还可被配置成读/写随机存取存储器(RAM)。4输入导线线路可以用作为RAM的地址线。
Altera FLEX 10K芯片在概念上有些相似。这些芯片为基于SRAM的可编程逻辑器件(PLD),具有多个32位总线。更明确的说,每个FLEX 10K100芯片包含大约100,000个门电路,12个嵌入式阵列区块(EAB),624个逻辑阵列区块(LAB),每个LAB具有8个逻辑元件(LE)(或4,992个LE),5,392个触发器或锁存器,406个输入/输出引脚,和总共503个引脚。
Altera FLEX 10K芯片包含嵌入式阵列区块(EAB)的嵌入式阵列和逻辑阵列区块(LAB)的逻辑阵列。可以使用一个EAB实现多种存储器(如,RAM,ROM,FIFO)和复杂逻辑功能(如,数字信号处理器(DSP),微控制器,乘法器,数据转换功能,状态机)。对于实现存储器功能来说,EAB提供2,048个位。对于实现逻辑功能来说,EAB提供100到600个门电路。
通过LE,可以使用LAB实现中等大小的逻辑块。每个LAB代表大约96个逻辑门并包含8个LE和一个局部互连。一个LE包含一个4输入查找表,一个可编程触发器,和用于传送和级联函数的专用信号通路。可以建立的典型的逻辑功能包括计数器,地址译码器,或小型状态机。
可以在[Altera,1996 DATA BOOK](1996年六月)中找到对AlteraFLEX 10K芯片更详细的描述,其内容以引用的方式并入本文。数据手册还包含所支持的程序设计软件的详细资料。
图8显示了4×4 FPGA阵列和其相互连接的一个实施例。应注意此模拟仿真器的实施例未在FPGA芯片中使用纵横开关或局部纵横开关连接。FPGA芯片包括第一行中的芯片F11到F14,第二行中的芯片F21到F24,第三行中的芯片F31到F34和第四行中的芯片F41到F44。在一个实施例中,每个FPGA芯片(如,芯片F23)具有下列用于模拟仿真器系统的FPGA输入/输出控制器接口的引脚:
接口 |
引脚 |
数据总线 |
32 |
SPACE指数 |
3 |
READ,WRITE,EVAL |
3 |
DATA XSFR |
1 |
地址指示器链 |
2 |
因此,在一个实施例中,每个FPGA芯片仅将41个引脚用于模拟仿真器系统的接口。将结合图22进一步讨论这些引脚。
这些FPGA芯片通过非纵横开关或非局部纵横开关互连相互连接在一起。芯片间的每个互连,例如芯片F11和芯片F14之间的互连602,代表44个引脚或44根导线线路。在其他实施例中,每个互连代表超过44个的引脚。再在其他实施例中,每个互连代表少于44个的引脚。
每个芯片具有六个互连。例如,芯片F11具有互连600到605。同样,芯片F33具有互连606到611。这些互连排成水平的行和垂直的列。每个互连提供一行内两芯片间或一列内两芯片之间的直接连接。因此,例如,互连600直接连接芯片F11和F13;互连601直接连接芯片F11和F12;互连602直接连接芯片F11和F14;互连603直接连接芯片F11和F31;互连604直接连接芯片F11和F21;以及互连605直接连接芯片F11和F41。
同样的,对于不位于阵列边缘(如,芯片F11)的芯片F33来说,互连606直接连接芯片F33和F13;互连607直接连接芯片F33和F23;互连608直接连接芯片F33和F34;互连609直接连接芯片F33和F43;互连610直接连接芯片F33和F31;以及互连611直接连接芯片F33和F32。
因为芯片F11位于从芯片F13开始的一次跳跃之内,所以互连600被标记为“1”。因为芯片F11位于从芯片F12开始的一次跳跃之内,所以互连601被标记为“1”。同样的,因为芯片F11位于从芯片F14开始的一次跳跃之内,所以互连602被标记为“1”。同样的,对于芯片F33,所有的互连都被标记为“1”。
此互连方案使得每个芯片都可以在两次“跳转”或互连之内与阵列中的其他任何芯片取得联系。因此,芯片F11可以通过下列两条路径中的任何一条与芯片F33连接:(1)互连600到互连606;或(2)互连603到互连610。总之,路径可以是:(1)首先沿着行,再沿着列,或(2)首先沿着列,再沿着行。
尽管图8显示了配置成4×4阵列的具有水平和垂直互连的FPGA芯片,但在电路板上的实际物理实现是依靠具有扩展机载电路板的低端和高端组实现的。所以,在一个实施例中,芯片F41-F44和F21-F24在低端组中。芯片F31-F34和F11-F14在高端组中。机载电路板包含芯片F11-F14和芯片F21-F24。因此,为了扩展阵列,可以将含有多个芯片(如,8个)的机载电路板加在组上,并位于当前包括芯片F11-F14的行的上方。在另一个实施例中,机载电路板在当前包括芯片F41-F44的行的下方扩展阵列。另外的实施例允许其扩展在芯片F14,F24,F34和F44的右边。再另外的实施例允许其扩展在芯片F11,F21,F31和F41的左边。
图7显示了图8中所示的4×4 FPGA(现场可编程门阵列)阵列以“0”和“1”的方式表示的连通度矩阵。利用此连通度矩阵生成由在模拟仿真系统的硬件映射、布局和布线过程中使用的费用函数产生的布局成本。上文中结合图6介绍了费用函数。举例而言,芯片F11位于从芯片F13开始的一次跳跃之内,所以F11-F13的连通度矩阵表列值为“1”。
图21显示了根据本发明一个实施例的单一FPGA芯片的互连输出接脚。每个芯片具有六组互连,其中每组互连包含特定数量的引脚。在一个实施例中,每组互连具有44个引脚。每个FPGA芯片的互连按水平(东-西)和垂直(北-南)方向排列。向西的互连组被标记为W[43:0]。向东的互连组被标记为E[43:0]。向北的互连组被标记为N[43:0]。向南的互连组被标记为S[43:0]。这些互连的完整组用于相邻芯片间的连接;也就是说,这些互连没有“跳跃”过任何芯片。例如,在图8中,芯片F33的N[43:0]为互连607,E[43:0]为互连608,S[43:0]为互连609,W[43:0]为互连611。
回到图21,还有两个附加互连组。一个互连组用于垂直的非邻接互连-YH[21:0]和YH[43:22]。另一个互连组用于水平的非邻接互连-XH[21:0]和XH[43:22]。每一组,YH[...]和XH[...],被分成两部分,其中每半个组包含22个引脚。此配置使得每个芯片的制造都相同。因此,每个芯片都可以与其上方,下方,左方和右方的非邻接芯片在一次跳跃中互连。此FPGA芯片还显示了用于全局信号,FPGA总线和JTAG信号的引脚。
现在讨论FPGA输入/输出控制器。此前在图10中已简要介绍了该控制器327。FPGA输入/输出控制器管理PCI总线和FPGA阵列之间的数据和控制通信。
图22显示了PCI总线和FPGA阵列之间的FPGA控制器实施例,以及FPGA芯片组。FPGA输入/输出控制器700包括CTRL_FPGA单元701、时钟缓冲器702、PCI控制器703、EEPROM 704、FPGA串行配置接口705、边界扫描测试接口706,以及缓冲器707。提供了所属技术领域的技术人员熟知的适当的功率/电压调节电路。电源的范例包括Vcc,其与电压检测器/调节器和读出放大器连接,在不同环境下维持电压。在每个FPGA芯片和其Vcc之间具有快速作用的薄膜保险丝。将Vcc-HI提供给所有FPGA芯片的CONFIG#和LOCAL_BUS 708的LINTI#。
CTRL_FPGA单元701为FPGA输入/输出控制器700的主控制器,负责处理不同的控制,测试,和读/写不同单元和总线间的大量数据。CTRL_FPGA单元701与FPGA芯片的低端和高端组连接。FPGA芯片F41-F44和F21-F24(即,低端组)与低端FPGA总线718相连。FPGA芯片F31-F34和F11-F14(即,高端组)与高端FPGA总线719相连。这些FPGA芯片F11-F14,F21-F24,F31-F34和F41-F44对应于图8中相同编号的FPGA芯片。
在这些FPGA芯片F11-F14,F21-F24,F31-F34和F41-F44与低端组总线718和高端组总线719之间为厚膜片状电阻器,用于正确载入。电阻器组713包括例如电阻器716和电阻器717,与低端组总线718相连。电阻器组712包括例如电阻器714和电阻器715,与高端组总线719相连。
如果需要扩展,可以在低端组总线718和高端组总线719上FPGA芯片F11和F21的右方安置更多的FPGA芯片。在一个实施例中,通过类似机载电路板720的机载电路板进行扩展。因此,如果这些FPGA芯片组最初仅具有8个FPGA芯片F41-F44和F31-F34,那么可以通过增加机载电路板720实现进一步的扩展,机载电路板720包含在低端组中的FPGA芯片F24-F21和在高端组中的芯片F14-F11。机载电路板720还包括附加低端和高端组总线,和厚膜片状电阻器。
PCI控制器703为FPGA输入/输出控制器700和32位PCI总线709之间的主接口。如果PCI总线扩展到64位和/或66MHz,可以适当的调整系统而不会偏离本发明的精神和范围。将在下文中介绍这些调整。在系统中可以使用的PCI控制器703的一个示例为PLXTechnology公司的PCI9080或9060。PCI9080具有适当的局部总线接口,控制寄存器,FIFO(先入先出),以及对PCI总线的PCI接口。PLX Technology公司的数据手册,[PCI9080 Data Sheet](0.93版,1997年2月28日)的内容以引用的方式并入本文。
PCI控制器703通过LOCAL_BUS 708在CTRL_FPGA单元701和PCI总线709之间传递数据。LOCAL_BUS包括分别用于控制信号,地址信号和数据信号的控制总线部分,地址总线部分,以及数据总线部分。如果PCI总线扩展到64位,LOCAL_BUS 708的数据总线部分也可以扩展到64位。PCI控制器703与EEPROM 704连接,其包含PCI控制器703的配置数据。EEPROM 704的一个范例是National Semiconductor(国家半导体公司)的93CS46。
PCI总线709为FPGA输入/输出控制器700提供33MHz的时钟信号。时钟信号通过导线线路710被提供给时钟缓冲器702用于同步目的以及低时滞目的。该时钟缓冲器702的输出为33MHz的全局时钟(GL_CLK)信号,其通过导线线路711被提供给所有的FPGA芯片,并通过导线线路721被提供给CTRL_FPGA单元701。如果PCI总线扩展到66MHz,时钟缓冲器也将为系统提供66MHz的信号。
FPGA串行配置接口705提供配置数据以配置FPGA芯片F11-F14,F21-F24,F31-F34和F41-F44。Altera数据手册,[Altera,1996DATA BOOK](1996年六月)提供了配制装置和过程的详细资料。FPGA串行配置接口705还和LOCAL_BUS 708与并行端口721连接。此外,FPGA串行配置接口705通过CONF_INTF导线线路723连接CTRL_FPGA单元701和FPGA芯片F11-F14,F21-F24,F31-F34和F41-F44。
边界扫描测试接口706提供指定的测试命令集的JTAG实施方式,以利用软件在外部检测处理器或系统的逻辑单元和电路。此接口706遵守IEEE标准1149.1-1990规范。参见Altera数据手册,[Altera,1996 DATA BOOK](1996年六月)和[Application Note 39](JTAG Boundary-Scan Testing in Altera Devices)以获得更多信息,其内容以引用的方式并入本文。边界扫描测试接口706还与LOCAL_BUS 708和并行端口722连接。此外,边界扫描测试接口706通过BST_INTF导线线路724连接CTRL_FPGA单元701和FPGA芯片F11-F14,F21-F24,F31-F34和F41-F44。
CTRL_FPGA单元701分别通过低端组32位总线718和高端组32位总线719,以及缓冲器707和F_BUS 725(用于低端组32位FD[31:0])、F_BUS 726(用于高端组32位FD[63:32])将数据传入或传出低端(芯片F41-F44和F21-F24)和高端(芯片F31-F34和F11-F14)FPGA芯片组。
一个实施例在低端组总线718和高端组总线719中具有双倍的PCI总线709的数据吞吐量。PCI总线709在33MHz时位宽为32位。吞吐量因此为132MBXs(=33MHz*4字节)。低端组总线718在PCI总线频率的一半时(33/2MHz=16.5MHz)为32位。高端组总线719在PCI总线频率的一半时(33/2MHz=16.5MHz)也为32位。64位低端和高端组总线的吞吐量也为132MBXs(=16.5MHz*8字节)。因此,低端和高端组总线的性能比得上PCI总线的性能。换句话说,性能限制在于PCI总线,而不在低端和高端组总线。
根据本发明一实施例,在每个FPGA芯片中都为每个软件/硬件边界地址空间实现若干地址指示器。这些地址指示器通过多路复用的跨芯片地址指示器链路跨越多个FPGA芯片被链接在一起。请参见上文结合图9,11,12,14和15对地址指示器的描述。为了跨越与给定地址空间有关的地址指示器链路和跨越多个芯片移动字选择信号,必须具有链连导线线路。这些链连导线线路用芯片之间的箭头表示。一个用于低端组的链连导线线路为芯片F23和F22之间的导线线路730。另一个用于高端组的链连导线线路为芯片F31和F32之间的导线线路731。在低端组末端芯片F21上的链连导线线路732与CTRL_FPGA单元701连接,作为LAST_SHIFT_L。在高端组末端芯片F11上的链连导线线路733与CTRL_FPGA单元701连接,作为LAST_SHIFT_H。当字选择信号穿过FPGA芯片传递时,这些信号LAST_SHIFT_L和LAST_SHIFT_H为其对应组的字选择信号。当这些信号LAST_SHIFT_L和LAST_SHIFT_H中的任何一个将逻辑“1”提供给CTRL_FPGA单元701时,表明字选择信号前进到了相应组的末端芯片。
CTRL_FPGA单元701通过下列导线线路向FPGA芯片传入或从FPGA芯片传出信号,导线线路734上为写信号(F_WR),导线线路735上为读信号(F_RD),导线线路736上为DATA_XSFR信号,导线线路737上为EVAL信号,导线线路738上为SPACE[2:0]信号。CTRL_FPGA单元701接收导线线路739上的EVAL_REQ#信号。写信号(F_WR),读信号(F_RD),DATA_XSFR信号和SPACE[2:0]信号共同服务于FPGA芯片中的地址指示器。利用写信号(F_WR),读信号(F_RD)和SPACE[2:0]信号为与由SPACE指数(SPACE[2:0])确定的所选地址空间相关的地址指示器生成MOVE信号。利用DATA_XSFR信号初始化地址指示器并开始逐字的数据传输过程。
如果任何FPGA芯片断言EVAL_REQ#信号,则利用此信号重新开始估算循环。例如,为估算数据,通PCI总线将数据从主处理器计算站的主存储器传输到或写入FPGA。在传输的最后,开始估算循环,这包括地址指示器的初始化和软件时钟的操作以推动估算过程。但是,由于多种原因,特定的FPGA芯片可能需要再次估算数据。此FPGA芯片断言EVAL_REQ#信号并且CTRL_FPGA单元701再次开始估算循环。
图23显示了图22所示的CTRL_FPGA单元701和缓冲器707的详细示图。图23与图22使用相同的关于CTRL_FPGA单元701的输入/输出信号及其对应的编号。但是,图22中未显示的其他信号和导线/总线线路将由新的编号表示,例如SEM_FPGA输出启动1016,局部中断输出(局部INTO)708a,局部读/写控制信号708b,局部地址总线708c,局部中断输入(局部INTI#)708d,以及局部数据总线708e。
CTRL_FPGA单元701包含传输完成检查逻辑(XSFR_DONE逻辑)1000,估算控制逻辑(EVAL逻辑)1001,DMA描述符块1002,控制寄存器1003,估算计时器逻辑(EVAL计时器)1004,地址译码器1005,写标志序列发生器逻辑1006,FPGA芯片读/写控制逻辑(SEM_FPGA R/W逻辑)1007,多路分离器和锁存器(DEMUX逻辑)1008,以及锁存器1009-1012,其对应于图22中的缓冲器707。导线/总线721上的一个全局时钟信号(CTRL_FPGA_CLK)被提供给CTRL_FPGA单元701中所有的逻辑元件/块。
传输完成检查逻辑(XSFR_DONE逻辑)1000接收LAST_SHIFT_H 733,LAST_SHIFT_L 732和局部INTO 708a。XSFR_DONE逻辑1000通过导线/总线1013将传输完成信号(XSFR_DONE)输出到EVAL逻辑1001。基于LAST_SHIFT_H733和LAST_SHIFT_L 732的接收,XSFR_DONE逻辑1000将检查数据传输的完成,使得可以根据需要开始估算循环。
EVAL逻辑1001接收导线/总线739上的EVAL_REQ#信号和导线/总线1015上的WR_XSFR/RD_XSFR信号,外加导线/总线1013上的传输完成信号(XSFR_DONE)。EVAL逻辑1001生成两个输出信号,导线/总线1014上的开始EVAL和导线/总线736上的DATA_XSFR。EVAL逻辑表明FPGA总线和PCI总线之间的数据传输将于何时开始初始化地址指示器。当数据传输完成后它接收XSFR_DONE信号。WR_XSFR/RD_XSFR信号表明传输是读还是写操作。一旦输入/输出周期结束(或在一个输入/输出周期开始之前),EVAL逻辑可以开始估算循环伴随启动EVAL计时器的EVAL信号。EVAL计时器规定了估算循环的持续时间并通过保持估算循环在所需要的时间内有效以稳定对所有寄存器和组合部件的数据传递,来确保软件时钟机制的成功操作。
DMA描述符块1002接收导线/总线1019上的局部总线地址,导线/总线1020上的来自地址译码器1005的写启动信号,以及导线/总线1029上的经由局部数据总线708e的局部总线数据。其输出为导线/总线1046上的DMA描述符输出,其通过导线/总线1045进入DEMUX逻辑1008。DMA描述符块1002包含对应于主存储器内信息的描述符块信息,包括PCI地址,局部地址,传输计数,传输方向,和下一个描述符块的地址。主机将在PCI控制器的描述符指示寄存器中建立最初描述符块的地址。可以通过设置控制位启动传输。PCI载入第一描述符块并开始数据传输。PCI控制器继续载入描述符块并传输数据直到其检测到相链接的位的末端位于下一个描述符指示寄存器中。
地址译码器1005接收并传输总线708b上的局部R/W控制信号,接收并传输总线708c上的局部地址信号。地址译码器1005在导线/总线1020上生成输入DMA描述符1002的写启动信号,在导线/总线1021上生成输入控制寄存器1003的写启动信号,在导线/总线738上生成FPGA地址SPACE指数,在导线/总线1027上生成控制信号,以及在导线/总线1024上生成输入DEMUX逻辑1008的另一个控制信号。
控制寄存器1003接收导线/总线1021上的来自地址译码器1005的写启动信号,以及导线/总线1030上的经由局部数据总线708e的数据。控制寄存器1003在导线/总线1015上生成输入EVAL逻辑1001的WR_XSFR/RD_XSFR信号,在导线/总线1041上生成输入EVAL计时器1004的设置EVAL时间信号,以及在导线/总线1016上生成输入FPGA芯片的SEM_FPGA输出启动信号。系统使用SEM_FPGA输出启动信号选择性的接通或激活每个FPGA芯片。系统通常一次激活一个FPGA芯片。
EVAL计时器1004接收导线/总线1014上的开始EVAL信号,以及接收导线/总线1041上的设置EVAL时间信号。EVAL计时器1004在导线/总线737上生成EVAL信号,在导线/总线1017上生成估算完成(EVAL_DONE)信号,以及在导线/总线1018上生成输入写标志序列发生器逻辑1006的开始写标志信号。在一个实施例中,EVAL计时器的位长为6位。
写标志序列发生器逻辑1006接收导线/总线1018上的来自EVAL计时器1004的开始写标志信号。写标志序列发生器逻辑1006在导线/总线1022上生成输入局部R/W导线/总线708b的局部R/W控制信号,在导线/总线1023上生成输入局部地址总线708c的局部地址信号,在导线/总线1028上生成输入局部数据总线708e的局部数据信号,在导线/总线708d上生成局部INTI#。一旦收到开始写标志信号,写标志序列发生器逻辑开始控制信号的序列以开始存储器对PCI总线的写周期。
SEM_FPGA R/W控制逻辑1007接收导线/总线1027上的来自地址译码器1005的控制信号,以及导线/总线1047上的经由局部R/W控制总线708b的局部R/W控制信号。SEM_FPGA R/W控制逻辑1007在导线/总线1035上生成输入锁存器1009的启动信号,在导线/总线1025上生成输入DEMUX逻辑1008的控制信号,在导线/总线1037上生成输入锁存器1011的启动信号,在导线/总线1040上生成输入锁存器1012的启动信号,在导线/总线734上生成F_WR信号,以及在导线/总线735上生成F_RD信号。SEM_FPGA R/W控制逻辑1007控制向/从FPGA低端组和高端组总线的不同写和读数据传输。
DEMUX逻辑1008为一个多路复用器和一个锁存器,其接收四组输入信号并在导线/总线1026上向局部数据总线708e输出一组信号。选择器信号为导线/总线1025上来自SEM_FPGA R/W控制逻辑1007的控制信号和导线/总线1024上来自地址译码器1005的控制信号。DEMUX逻辑1008接收来自导线/总线1042上的EVAL_DONE信号,导线/总线1043上的XSFR_DONE信号,以及导线/总线1044上的EVAL信号的一组输入信号。此单一信号组被标记为编号1048。在任何一个时间周期,这三个信号EVAL_DONE,XSFR_DONE,EVAL中只有一个将被提供给DEMUX逻辑1008用于可能的选择。DEMUX逻辑1008还接收导线/总线1045上来自DMA描述符块1002的DMA描述符输出信号,导线/总线1039上来自锁存器1012的数据输出,以及导线/总线1034上来自锁存器1010的另一个数据输出,作为其他三组输入信号。
CTRL_FPGA单元701与低端和高端FPGA组总线之间的数据缓冲器包括锁存器1009到1012。锁存器1009接收导线/总线1032上经由导线/总线1031和局部数据总线708e的局部总线数据,以及导线/总线1035上来自SEM_FPGA R/W控制逻辑1007的启动信号。锁存器1009通过导线/总线1033将数据输出到锁存器1010。
锁存器1010接收导线/总线1033上来自锁存器1009的数据,以及导线/总线1036上经由导线/总线1037来自SEM_FPGA R/W控制逻辑1007的启动信号。锁存器1010通过导线/总线725将数据输出到FPGA低端组总线并通过导线/总线1034输出到DEMUX逻辑1008。
锁存器1011接收导线/总线1031上来自局部数据总线708e的数据,以及导线/总线1037上来自SEM_FPGA R/W控制逻辑1007的启动信号。锁存器1011通过导线/总线726将数据输出到FPGA高端组总线并通过导线/总线1038输出到锁存器1012。
锁存器1012接收导线/总线1038上来自锁存器1011的数据,以及导线/总线1040上来自SEM_FPGA R/W控制逻辑1007的启动信号。锁存器1012通过导线/总线1039将数据输出到DEMUX逻辑1008。
图24显示了4×4 FPGA阵列,其和FPGA组的关系,以及扩展能力。类似图8,图24显示了同样的4×4阵列。也显示了CTRL_FPGA单元740。低端组芯片(芯片F41-F44和F21-F24)和高端组芯片(芯片F31-F34和F11-F14)以交替的方式排列。因此,FPGA芯片行从底部行到顶部行依次是:低端组--高端组--低端组--高端组。数据传输链按预定顺序沿各组形成。箭头741表示低端组的数据传输链。箭头742表示高端组的数据传输链。箭头743表示JTAG配置链,其经过整个阵列的所有16个芯片,从F41到F44,F34到F31,F21到F24,F14到F11,再回到CTRL_FPGA单元740。
可以利用机载电路板完成扩展。假设图24中原始FPGA芯片阵列包括F41-F44和F31-F34,可以由机载电路板745增加另外两行芯片F21-F24和F11-F14。机载电路板745还具有适当的总线以扩展组。可以将更多的机载电路板安置于其他电路板的顶部以完成阵列中进一步的扩展。
图25显示了硬件启动方法的一个实施例。步骤800开始执行通电操作或执行热启动程序。在步骤801中,PCI控制器读取EEPROM以进行初始化。步骤802根据初始化次序对PCI控制器寄存器进行读和写操作。步骤803对阵列中所有的FPGA芯片进行边界扫描测试。步骤804配置FPGA输入/输出控制器中的CTRL_FPGA单元。步骤805对CTRL_FPGA单元中的寄存器进行读和写操作。步骤806为DMA主读/写模式建立PCI控制器。此后,传输并校验数据。步骤807利用试验设计配置所有的FPGA芯片并验证其正确性。在步骤808,硬件已准备好可供使用。此时,系统假设所有步骤的结果都确认了硬件的可操作性,否则,系统不会到达步骤808。
E.使用更密集FPGA芯片的替代实施例
在本发明的一实施例中,FPGA逻辑装置安装在单个电路板上。如果使用户电路设计模型化所需要的FPGA逻辑装置比安装在电路板上的要多,可提供带有更多FPGA逻辑装置的多个电路板。能够在模拟系统中增加更多的电路板是本发明的一个优良特点。在该实施例中,使用更密集的FPGA芯片,(如Altera 10k130v和10k250v)。这些芯片的使用改变了电路板的设计,以致每个电路板上仅用四个更密集的FPGA芯片替代了八个较低密度的FPGA芯片(如Altera 10k100)。
这样,我们就需要解决这些电路板和模拟系统主板之间的耦联问题,在它们的互连和接线方案中必须作出对底板缺失的补偿。模拟系统中的FPGA阵列是通过一个独特的电路板互连结构安装在主板上的。每个芯片可能最多有8套互连,这些互连的配置是依照在同一电路板内和不同电路板之间,邻近的直接相邻互连(即N[73:0]、S[73:0]、W[73:0]、E[73:0])和单跳跃相邻的互连(即NH[27:0]、SH[27:0]、XH[36:0]、XH[72:37]),不包括局部总线连接。每个芯片能够直接和邻近的芯片互连或通过单跳跃和非邻近的位于上、下、左或右的芯片互连。阵列在X方向(东到西)下呈环形,而在Y方向(北到南)下则呈网格状。
这些互连能在单独的电路板中独立地连接逻辑装置和其它部件。然而,在不同的电路板之间是通过电路板间的连接器将这些电路板和互连器连接在一起,并在(1)通过主板的PCI总线和阵列电路板之间(2)任何两个阵列电路板之间传输数据。每个电路板包含自带的使FPGA逻辑装置互相联系的FPGA总线FD[63:0]、SRAM存储器装置和CTRL_FPGA单元(FPGA输入/输出控制器)。FPGA总线FD[63:0]不是安装在多个电路板之间的。虽然FPGA互连和FPGA总线没有关联,但是这些互连在多个电路板之间建立起FPGA逻辑装置之间的连接()。而另一方面,所有的电路板间设有局部总线。
主板连接器将电路板连到主板上,且因此连接到PCI总线、电源及接地。对于有些电路板来说,主板连接器并不是作为与主板的直接连接之用的。在一个带六个电路板的构造中,只有编号为1、3、5的电路板是直接连到主板上的,而编号为2、4和6的电路板是通过邻近的电路板连接到主板上的。因此,每个相隔的电路板是直接连到主板上的并且这些电路板的互连器和局部总线是通过安装在焊接面到元件面上的板间连接器连接在一起的。PCI信号仅通过其中的一个电路板(通常是第一个电路板)进行传输。电源和接地连接到其它的主板连接器用于那些电路板。位于焊接面与元件面上的各种电路板间连接器使PCI总线部件、FPGA逻辑装置、存储器装置以及各种模拟系统控制电路之间进行相互通讯。
图56所示的是根据本发明一实施例的一个FPGA芯片阵列的高层结构图。上面所描述的CTRL_FPGA单元1200是通过1209线路连接到1210总线上的。在一个实施例中,CTRL_FPGA单元1200是FPGA芯片(如Altera 10K50芯片)形式的可编程逻辑装置(PLD)。总线1210使CTRL_FPGA单元1200连接到其它模拟阵列电路板(如果有的话)和其它芯片(如PCI控制器、EEPROM、时钟缓冲器等)。图56还显示了逻辑装置和存储器装置形式的其它主要功能块。在一实施例中,逻辑装置是FPGA芯片(如Altera 10K130V或10K250V芯片)形式的可编程逻辑装置(PLD)。10K130V或10K250V芯片是引脚兼容的,两者都是599引脚的PGA包。因此与上面所示在阵列中带8个Altera FLEX 10K100芯片的实施例不同的是,在此实施例中只使用4个Altera FLEX 10K130芯片。本发明的一实施例描述了带有这4个逻辑装置以及它们的互连的电路板。
由于用户设计被模型化和配置成该阵列中任何数目的这些逻辑装置中,FPGA逻辑装置之间的通讯必须能将用户电路设计的一部分连接到另一部分。而且,最初的配置信息和边界扫描测试也是由FPGA之间的互连所支持的。最后,还需要保证模拟系统与FPGA逻辑装置之间必要的模拟系统控制信号可是访问的。
图36所示的是本发明所使用的一FPGA逻辑装置的硬件结构。此FPGA逻辑装置1500包括102个顶部输入/输出引脚、102个底部输入/输出引脚、111个左侧输入/输出引脚和110个右侧输入/输出引脚。这样,互连引脚总数就是425个。而且,还有以下装置专用的附加的45个输入/输出引脚:GCLK、FPGA总线FD[31:0](对于高端组,专用FD[63:32])、F_RD、F_WR、DATAXSFR、SHIFTIN、SHIFTOUT、SPACE[2:0]、EVAL、EVAL_REQ_N、DEVICE_OE(CRTL_FPGA单元发出的开启FPGA逻辑装置的输出引脚的信号)和DEV_CLRN(CRTL_FPGA单元发出的在开始模拟前清除所有内部触发器的信号)。这样,这些互连就负载着传输于任何两个FPGA逻辑装置之间的任何数据和控制信号。剩下的引脚是为电源和接地专用的。
图37所示的是根据本发明的一实施例的一个独立FPGA芯片的FPGA互连输出接脚。每个芯片1510最多可以有8组互连,每组包含特定数目的引脚。根据它们在电路板上的位置,一些芯片可能包含少于8组互连。在优选实施例中,虽然根据它们在电路板上的不同位置,芯片与芯片间所使用的具体互连组有所不同,但是所有的芯片都具有7组互连。每个FPGA芯片的互连是水平(东到西)和垂直(北到南)安装的。西向的互连组标为W[73:0],东向的互连组标为E[73:0],北向的互连组标为N[73:0],而南向的互连组标为S[73:0]。这些互连的完整组只能连接到邻近的芯片上而不能跳过任何一个芯片。例如:在图39中,芯片1570的N[73:0]为互连1540,W[73:0]为互联装置1542,E[73:0]为互连1543,S[73:0]为互连1545。注意该FPGA芯片1570,即FPGA2芯片,有全部的四组邻近互连--N[73:0]、S[73:0]、W[73:0]和E[73:0]。FPGA0西向的互连通过线路1539以圆环方式与FPGA3东向互连进行连接。这样,线路1539将1569(FPGA0)与1572(FPGA3)直接连接起来的方法与把电路板的东西两端环绕并连接起来的方式类似。
回到图37,这里还有四组“跳跃”互连。其中两组互连是为非邻近的垂直排列的互连而设置的,即NH[27:0]和SH[27:0]。例如,图39中FPGA2芯片1570所示NH互连1541及SH互连1546。再回到图37,另外两组互连是为非邻近的水平排列的互连而设置的,即XH[36:0]和XH[72:37]。例如,图37中FPGA2芯片1570所示XH互连1544。
还回到图37,垂直的跳跃互连NH[27:0]和SH[27:0]各有28个引脚。而水平的互连XH[36:0]和XH[72:37]则有73个引脚。水平连接(XH[36:0]和XH[72:37])的引脚可被用在西面(如图39中FPGA3芯片1576的互连1605)上和/或东面(如图39中FPGA0芯片1573的互连1602)上。这个配置使得每个芯片的生产变得相同。这样,每个芯片能够通过单跳跃连接到一个位于上、下、左和右的非邻近芯片上。
图39显示的是根据本发明的一个实施例位于一个单个主板上的六个电路板的一个直接邻近和单跳跃邻近的FPGA阵列设计。此图是用来演示两种可能的配置,即一个六电路板系统和一个双电路板系统。位置指示器1550显示了“Y”方向是北到南而“X”方向是东到西。在X方向下阵列呈环形,而在Y方向下阵列呈网格状。在图39中只显示了高层的电路板、FPGA逻辑装置、互连以及连接器,而没有显示主板和其它的支持部件(如SRAM存储器装置)和导线线路(如FPGA总线)。
注意图39给出了电路板及其部件、互连和连接器的阵列视图。实际的物理配置和安装包括将这些电路板放置到各自的从元件面到焊接面的边缘上。大约有一半的电路板是直接连接到主板上的而另一半则是连接到各自相邻的电路板上的。
在本发明六电路板的实施例中,六个电路板1551(电路板1)、1552(电路板2)、1553(电路板3)、1554(电路板4)、1555(电路板5)和1556(电路板6)是作为图1中可重新配置硬件单元20的一部分安装在主板(未显示)上的。每个电路板包含几乎完全相同的一套部件和连接器。这样,为演示方便起见第六电路板1556包含FPGA逻辑装置1565到1568和连接器1557到1560和1581;第五电路板1555包含FPGA逻辑装置1569到1572和连接器1582和1583;第四电路板1554包含FPGA逻辑装置1573到1576和连接器1584和1585。
在此六电路板的配置中,第一电路板1551和第六电路板1556为包含Y-网格终端,如第六电路板1556上的R-包终端1557到1560和第一电路板1551上的终端1591到1594的“书挡”电路板。还有位于中间的电路板(即1552(电路板2)、1553(电路板3)、1554(电路板4)和1555(电路板5))形成完整阵列。
正如上面阐述的,这些互连的配置是依照在同一个电路板内和不同电路板之间邻近的直接相邻互连(即N[73:0]、S[73:0]、W[73:0]、E[73:0])和单跳跃相邻的互连(即NH[27:0]、SH[27:0]、XH[36:0]、XH[72:37]),不包括局部总线连接。此互连能够独立连接在一个单独的电路板内的逻辑装置和其它部件。然而电路板间连接器1581到1590能够使不同电路板(第一电路板到第六电路板)上的逻辑装置进行通讯。FPGA总线是电路板间连接器1581到1590的一部分。这些连接器1581到1590是600引脚连接器,它们为两个相邻阵列电路板负载520个信号和80个电源/接地连接。
在图39中,不同的电路板对于电路板间连接器1581到1590是以不对称的方式连接的。例如,存在于电路板1551和1552之间的是电路板间连接器1589和1590。互连1515将FPGA逻辑装置1511和1577连接在一起而依照连接器1589和1590此连接是对称的。然而互连1603则是不对称的。它将第三电路板1553中的一个FPGA逻辑装置连接到电路板1551中FPGA逻辑装置1577上。相对于连接器1589和1590而言,这种连接是不对称的。类似地,相对于连接器1589和1590而言,互连1600也是不对称的。因为它将FPGA逻辑装置1577连接到终端1591上,而此终端则是通过互连1601连接到FPGA逻辑装置1577。其它类似的互连进一步表现了这种不对称。
这种不对称导致了互连通过电路板间的连接器,按照两种不同的方式进行布线----一种是象互连器1515的对称型而另一种则是象互连器1603和1600的不对称型。图40(A)和40(B)显示了互连布线方案。
在图39中,一个单独电路板内的直接相邻连接的一个例子是互连1543,它将电路板1555上的逻辑装置1570和逻辑装置1571沿着东西方向连接起来。一个单独电路板内的直接相邻连接的一个另外的例子是互连1607,它将电路板1554上的逻辑装置1573和逻辑装置1576连接起来。两个不同电路板间的直接相邻连接的一个例子是互连1545,它通过连接器1583和1584将电路板1555上的逻辑装置1570和电路板1554上的逻辑装置1574沿着南北方向连接起来。在此,两个电路板间连接器1583和1584是用来传输信号的。
一个单独电路板内的单跳跃互连的一个例子是互连1544,它将电路板1555上的逻辑装置1570和逻辑装置1572沿着东西方向连接起来。两个不同电路板间单跳跃互连的一个例子是互连1599,它通过连接器1581到1584将电路板1556上的逻辑装置1565和电路板1554上的逻辑装置1573连接起来。在此,四个电路板间连接器1581到1584是用来传输信号的。
一些电路板,尤其是位于主板南北端的那些电路板也包含用来终止一些连接的10欧姆R包(R-pack)。这样,第六电路板1556包括10欧姆R包连接器1557到1560而第一电路板1551包括10欧姆R包连接器1591到1594。第六电路板1556包含的R包连接器1557用于互连1970和1971,R包连接器1558用于互连1972和1541,R包连接器1559用于互连1973和1974,而R包连接器1560用于互连1975和1976。此外,互连1561到1564不与任何装置相连。这些南北互连与东西的圆环式互连不同,它们是网格式的。
这些网格终端增加了南北方向直接互连的数目。否则位于FPGA网格南北两端的互连将会被浪费。例如,FPGA逻辑装置1511和1577除了有一组直接互连1515,还具有通过R包1591和互连1600和1601的附加的互连。也就是说,R包1591将互连1600和1601连接在一起。这增加了FPGA逻辑装置1511和1577之间直接连接的数目。
还配置了电路板间的连接。电路板1551上的逻辑装置1577、1578、1579和1580通过互连1515、1516、1517和1518和电路板间连接器1589和1590与电路板1552上的逻辑装置1511、1512、1513和1514相连。这样,互连1515通过连接器1589和1590将电路板1552上的逻辑装置1511与电路板1551上的逻辑装置1577连接起来;1516通过连接器1589和1590将电路板1552上的逻辑装置1512与电路板1551上的逻辑装置1578连接起来;1517通过连接器1589和1590将电路板1552上的逻辑装置1513与电路板1551上的逻辑装置1579连接起来;1518通过连接器1589和1590将电路板1552上的逻辑装置1514与电路板1551上的逻辑装置1580连接起来。
一些互连如1595、1596、1597和1598并不与任何装置相连因为它们没有被使用到。然而正如以上所述,对于逻辑装置1511和1577而言,R包1591将互连1600和1601连接起来增加了南北方向互连的数目。
本发明的一个双电路板的实施例如图44所示。在本发明的双电路板实施例中,使模拟系统的用户设计模型化只需两个电路板。正如图39中的六电路板配置,图44的双电路板的配置是使用的与之相同的作为“书挡”的两个电路板,即电路板1551和电路板1556。它们位于主板上并作为图1中可重新配置硬件单元的一部分。在图44中,其中一个书挡电路板是第一电路板,另一个则是第六电路板。图44所用的第六电路板显示了与图39的第六电路板的相似之处。也就是说,象第一和第六电路板这样的书挡电路板应该有用于南北网格连接所必需的终端。
这个双电路板配置包含第一电路板1551上的四个FPGA逻辑装置1577(FPGA0),1578(FPGA1),1579(FPGA2)和1580(FPGA3)和第六电路板1556上的四个FPGA逻辑装置1565(FPGA0),1566(FPGA1),1567(FPGA2)和1568(FPGA3)。这两块电路板通过电路板间连接器1581和1590连接在一起。
这些电路板包含用来终止一些连接的10欧姆R包。在双电路板的实施例中,两块电路板都是“书挡”板。电路板1551包含作为电阻终端的10欧姆R包连接器1591,1592,1593和1594。另一块电路板也包含10欧姆R包连接器1557到1560。
电路板1551和电路板1556上分别有用于电路板间通讯的连接器1590和1581。连接两块电路板的互连,如1600,1971,1977,1541和1540,是穿过连接器1590和1581的;换句话说,电路板间连接器1590和1581使互连1600,1971,1977,1541和1540能够完成不同电路板上部件之间的连接。电路板间连接器1590和1581传输着FPGA总线上的控制数据和控制信号。
在四电路板的配置中,第一电路板和第六电路板是书挡电路板,而第二电路板1552和第三电路板1553(见图39)则是中间电路板。当依照本发明将其与主板连接时(将参照图38(A)和图38(B)讨论),电路板1与电路板2成对而电路板3与电路板6成对。
在六电路板的配置中,如上所述第一电路板和第六电路板是书挡电路板而第二电路板1552、第三电路板1553、第四电路板1554和第五电路板1555(见图39)是中间电路板。当依照本发明与主板连接时(将参照图38(A)和图38(B)讨论),电路板1与电路板2成对,电路板3与电路板4成对而电路板5与电路板6成对。
必要时可以安装更多的电路板。然而不管将要增加到系统中的电路板的数目如何,书挡电路板(如图39中的电路板1和电路板6)应该有必备的终端来完成网格状阵列的连接。在一实施例中,最小配置是如图44所示的双电路板型。可通过增加双电路板而增加电路板的数量。如果最初的配置是第一电路板和第六电路板,那么将来对四电路板配置的改动就包括如上所述的将第六电路板移出一些,将第一电路板和第二电路板配对,以及将第三电路板和第六电路板配对。
正如以上描述的,每个逻辑装置都是连接到邻近的逻辑装置和非邻近单跳跃的逻辑装置。这样,在图39和图44中逻辑装置1577通过互连1547连接到邻近的逻辑装置1578。逻辑装置1577还通过单跳跃互连1548连接到非邻近的逻辑装置1579。然而因为互连1549提供连接的环绕的环形配置,逻辑装置1580与逻辑装置1577被认为是邻近的。
图42显示的是一个单独电路板上部件和连接器的顶视图(元件面)。在本发明的一个实施例中,模型化模拟系统中的用户设计只需一个电路板。在其它的实施例中,多个电路板(即至少两个电路板)是必需的。因此,例如图39显示了六个电路板1551到1556通过不同的600引脚连接器1581到1590连接在一起。在顶端和底端,电路板1551,电路板1556分别被另一组10欧姆R包中断。
回到图42,电路板1820包含四个FPGA逻辑装置:1822(FPGA0),1823(FPGA1),1824(FPGA2)和(FPGA3)。另外还有两个SRAM存储器装置1828和1829。这两个SRAM存储器装置是用来从该电路板上逻辑装置映射存储区块的;也就是说,本发明的存储器模拟将该电路板上逻辑装置的存储区块映射到此电路板的SRAM存储器装置中。其它的电路板包含完成类似映射操作的其它逻辑装置和存储器装置。在一实施例中,存储器映射是依赖于电路板的;也就是说,第一电路板的存储器映射只限于该电路板上的逻辑装置和存储器装置而与其它电路板无关。在其它的实施例中存储器映射是独立于电路板的。这样只需要使用几个大的存储器装置将存储区块从一个电路板上的逻辑装置映射到另一个电路板的存储器装置上。
还配置了发光二极管(LED)1821用来指示一些现象。根据本发明的一实施例,LED所显示的内容如下表A所示:
表A:LED显示
|
LED1 |
绿色 |
开 |
+5v和+3.3v为正常。 |
| |
关 |
+5v或+3.3v为不正常。 |
LED2 |
琥珀色 |
关 |
所有电路板上的FPGA配置已完成。 |
| |
闪烁 |
电路板上的FPGA未配置或配置失败。 |
| |
开 |
FPGA配置正在进行。 |
LED3 |
红色 |
开 |
数据传输进行中。 |
| |
关 |
无数据传输。 |
| |
闪烁 |
诊断测试失败 |
各种其它的控制芯片如PLX PCI控制器1826和CTRL_FPGA单元1827控制着FPGA间和PCI的通讯。一个可能被用在系统内的PLXPCI控制器1826的例子是PLX Technology的PCI9080或9060。PCI9080有合适的局部总线接口,控制寄存器,FIFO以及到PCI总线的PCI接口。PLX Technology的数据手册PCI 9080数据表DataSheet(1997年2月28日,0.93版)的内容以引用的方式并入本文。CTRL_FPGA单元1827的一个例子是FPGA芯片形式的可编程逻辑装置(PLD),如Altera 10K50芯片。在多电路板配置中,只有与PCI总线连接的第一电路板包含PCI控制器。
连接器1830将电路板1820连接到主板(未显示出来),并因此连接到PCI总线、电源及接地。在某些电路板中,连接器1830不用于与主板直接连接。这样在一个双电路板的配置中,只有第一电路板是与主板直接相连的。在一个六电路板的配置中,只有电路板1,3,5是与主板直接相连的而电路板2,4,6是通过与它们相邻的电路板与主板相连的。另外还配置了电路板间连接器J1到J28,顾名思义,连接器J1到J28能建立不同电路板间的连接。
连接器J1是连接外部电源和接地的。下表B所显示的是根据本发明的一实施例外部电源连接器J1的引脚和相关描述。
表B: 外部电源-J1
|
1 |
VCC5V |
2 |
GND |
3 |
GND |
4 |
VCC3V |
连接器J2用于并行端口连接。连接器J1和J2是在生产过程中用于独立单独电路板的边界扫描测试。下表C显示的是根据本发明的一实施例的并行JTAG端口J2的引脚和相关描述。
表C: 并行JTAG端口-J2
|
3 |
PARA_TCK |
I |
2 |
D0 |
5 |
PARA_TM |
I |
3 |
D1 |
|
S | | | |
7 |
PARA_TDI |
I |
4 |
D2 |
9 |
PARA_NR |
I |
5 |
D3 |
19 |
PARA_TDO |
O |
10 |
NACK |
10,12,14,16,18,20,22,24 |
GND | |
18-25 |
GND |
连接器J3和J4是用于电路板间的局部总线连接。连接器J5到J16是一套FPGA的互连连接。连接器J17到J28是另一套FPGA的互连连接。当位于元件面到焊接面时,这些连接器为不同电路板之间的部件建立起有效的连接。下表D和E是根据本发明的一实施例对连接器J1到J28所作的完整的列表和描述。
表D:连接器J1-J28
|
|
+5V/+3V外部电源 |
4引脚电源RA顶盖,元件面 |
并行端口 |
0.1”脚距,2行穿孔RA顶盖,元件面 |
局部总线 |
0.05”脚距,2×30穿孔顶盖,SAMTEC,元件面 |
局部总线 |
0.05”脚距,2×30穿孔插座,SAMTEC,焊接面 |
J5 |
A行:NH[0],VCC3V,GNDB行:J17B行,VCC3V,GND |
0.05”脚距,2×30 SMD顶盖,SAMTEC,元件面 |
|
J6 |
A行:J5 B行,VCC3V,GNDB行:J5 A行,VCC3V,GND |
0.05”脚距,2×30 SMD插座,SAMTEC,焊接面 |
|
A 行 : N[0],4□VCC3V,4□GND,N[2]B 行 : N[0],4□VCC3V,4□GND,N[2] |
0.05”脚距,2×45穿孔顶盖,SAMTEC,元件/焊接面 |
A 行 : N[0],4□VCC3V,4□GND,N[2]B 行 : N[0],4□VCC3V,4□GND,N[2] |
0.05”脚距,2×45穿孔插座,SAMTEC,元件/焊接面 |
J9 |
A行:NH[2],LASTL,GNDB行:J21 B行,GND |
0.05”脚距,2×30 SMD顶盖,SAMTEC,元件面 |
J10 |
A行:J9 B行,FIRSTL,GNDB行:J9 A行,GND |
0.05”脚距,2×30 SMD插座,SAMTEC,焊接面 |
J11 |
A行:NH[1],VCC3V,GNDB行:J23 B行,VCC3V,GND |
0.05”脚距,2×30 SMD顶盖,SAMTEC,元件面 |
J12 |
A行:J11 B行,VCC3V,GNDB行:J11 A行,VCC3V,GND |
0.05”脚距,2×30 SMD插座,SAMTEC,焊接面 |
|
A 行 : N[1],4□VCC3V,4□GND,N[3]B 行 : N[1],4□VCC3V,4□GND,N[3] |
0.05”脚距,2×45穿孔顶盖,SAMTEC,元件/焊接面 |
A 行 : N[1],4□VCC3V,4□GND,N[3]B 行 : N[1], |
0.05”脚距,2×45穿孔插座,SAMTEC,元件/焊接面 |
|
|
4□VCC3V,4□GND,N[3] | |
J15 |
A行:NH[3],LASTH,GNDB行:J27 B行,GND |
0.05”脚距,2×30 SMD顶盖,SAMTEC,元件面 |
J16 |
A行:J15 B行,FIRSTH,GNDB行:J15 A行,GND |
0.05”脚距,2×30 SMD插座,SAMTEC,焊接面 |
J17 |
A行:SH[0],VCC3V,GNDB行:J5 B行,VCC3V,GND |
0.05”脚距,2×30 SMD顶盖,SAMTEC,元件面 |
J18 |
A行:J17 B行,VCC3V,GNDB行:J17 A行,VCC3V,GND |
0.05”脚距,2×30 SMD插座,SAMTEC,焊接面 |
|
A 行 : S[0],4□VCC3V,4□GND,S[2]B 行 : S[0],4□VCC3V,4□GND,S[2] |
0.05”脚距,2×45穿孔顶盖,SAMTEC,元件/焊接面 |
A 行 : S[0],4□VCC3V,4□GND,S[2]B 行 : S[0],4□VCC3V,4□GND,S[2] |
0.05”脚距,2×45穿孔插座,SAMTEC,元件/焊接面 |
J21 |
A行:SH[2],LASTL,GNDB行:J9 B行,GND |
0.05”脚距,2×30 SMD顶盖,SAMTEC,元件面 |
J22 |
A行:J21 B行,FIRSTL,GNDB行:J21 A行,GND |
0.05”脚距,2×30 SMD插座,SAMTEC,焊接面 |
J23 |
A行:SH[1],VCC3V,GNDB行:J11 B行,VCC3V,GND |
0.05”脚距,2×30 SMD顶盖,SAMTEC,元件面 |
J24 |
A行:J23 B行,VCC3V,GNDB行:J23 A行,VCC3V,GND |
0.05”脚距,2×30 SMD插座,SAMTEC,焊接面 |
|
|
A 行 : S[1],4□VCC3V,4□GND,S[3]B 行 : S[1],4□VCC3V,4□GND,S[3] |
0.05”脚距,2×45穿孔顶盖,SAMTEC,元件/焊接面 |
A 行 : S[1],4□VCC3V,4□GND,S[3]B 行 : S[1],4□VCC3V,4□GND,S[3] |
0.05”脚距,2×45穿孔插座,SAMTEC,元件/焊接面 |
J27 |
A行:SH[3],LASTH,GNDB行:J15 B行,GND |
0.05”脚距,2×30 SMD顶盖,SAMTEC,元件面 |
J28 |
A行:J27 B行,FIRSTH,GNDB行:J27 A行,GND |
0.05”脚距,2×30 SMD插座,SAMTEC,焊接面 |
带阴影的连接器是穿孔型的。注意在表D中,括号[]中的数字代表FPGA逻辑装置号0到3。这样,S[0]就表示南向互连(即图37中的S[73:0])及其FPGA0的74字节。
表E:局部总线连接器-J3,J4
|
|
GND |
PWR | |
LRESET_N |
输入/输出 |
用于J3的J3_CLK用于J4的J4_CLK |
输入/输出 | |
VCC5V |
PWR |
GND |
PWR | |
LD0 |
输入/输出 |
|
LD1 |
输入/输出 | |
LD2 |
输入/输出 |
LD3 |
输入/输出 |
LD4 |
输入/输出 |
LD5 |
输入/输出 |
LD6 |
输入/输出 |
LD7 |
输入/输出 |
LD8 |
输入/输出 |
LD9 |
输入/输出 |
LD10 |
输入/输出 |
LD11 |
输入/输出 |
GND |
PWR |
VCC3V |
PWR |
LD12 |
输入/输出 |
LD13 |
输入/输出 |
LD14 |
输入/输出 |
LD15 |
输入/输出 |
LD16 |
输入/输出 |
LD17 |
输入/输出 |
LD18 |
输入/输出 |
LD19 |
输入/输出 |
LD20 |
输入/输出 |
LD21 |
输入/输出 |
VCC3V |
PWR |
LD22 |
输入/输出 |
LD23 |
输入/输出 |
LD24 |
输入/输出 |
LD25 |
输入/输出 |
LD26 |
输入/输出 |
LD27 |
输入/输出 |
LD28 |
输入/输出 |
LD29 |
输入/输出 |
LD30 |
输入/输出 |
LD31 |
输入/输出 |
VCC3V |
PWR |
LHOLD |
OT |
ADS_N |
输入/输出 |
GND |
PWR |
DEN_N |
OT |
DTR_N |
输出 |
LA31 |
输出 |
LA30 |
输出 |
LA29 |
输出 |
LA28 |
输出 |
LA10 |
输出 |
LA7 |
输出 |
LA6 |
输出 |
LA5 |
输出 |
LA4 |
输出 |
LA3 |
输出 |
LA2 |
输出 |
完成 |
OD |
其中的输入/输出方向指的是对于电路板1。
图43是图41(A)到41(F)和图42中连接器J1到J28的图例。总体来说,白色区块表示的是表面安装,其中用灰色填满的区块则代表穿孔类型。另外,外框为实线的区块代表元件面上的连接器,外框为虚线的区块代表焊接面上的连接器。这样,用外框为实线的白色区块1840就代表2×30顶盖,表面安装并固定在元件面上。外框为虚线的白色区块1841代表2×30插座,表面安装并固定在电路板的焊接面上。外框为实线的灰色区块1842代表2×30或2×45顶盖,穿孔并固定在元件面上。外框为虚线的灰色区块1843代表2×30或2×45插座,穿孔并固定在焊接面上。在一实施例中,模拟系统使用Samtec的SFM和TFM系列适用于表面安装和穿孔类型的2×30或2×45微带线路连接器。外框为实线的斜线填充区块1844代表R包,表面安装并固定在电路板的元件面上。外框为虚线的的斜线填充区块1845代表R包,表面安装并固定在焊接面上。Samtec网站上的Samtec产品目录中的Samtec说明书中的内容以引用的方式并入本文。回到图42,连接器J3到J28是图43的图例所指明的类型。
图41(A)到41(F)显示了每个电路板以及它们各自的连接器的顶视图。图41(A)显示的是第六电路板的连接器。这样,电路板1660包含连接器1661到1681以及主板连接器1682。图41(B)显示的是第五电路板的连接器。这样,电路板1690就包含连接器1691到1708以及主板连接器1709。图41(C)显示的是第四电路板的连接器。因此,电路板1715就包含连接器1716到1733以及主板连接器1734。图41(D)显示的是第三电路板的连接器。因此,电路板1740就包含连接器1741到1758以及主板连接器1759。图41(E)显示的是第二电路板的连接器。因此,电路板1765就包含连接器1766到1783以及主板连接器1784。图41(F)显示的是第一电路板的连接器。因此,电路板1790就包含连接器1791到1812以及主板连接器1813。正如图43的图例所指明的,第六电路板的这些连接器是以下几种连接的不同组合:(1)表面安装或穿孔,(2)元件面或焊接面,(3)顶盖、插座或R包。
在一实施例中,这些连接器是用来进行电路板间的通讯的。相关的总线和信号被组合在一起并且通过这些电路板间的连接器在任何两块电路板间传输信号。而且,只有一半的电路板是直接与主板相连的。在图41(A)中,第六电路板1660包含指定用于一组FPGA互连的连接器1661到1668,和指定用于另一组FPGA互连的连接器1669到1674和1676、1679,以及指定用于局部总线的连接器1681。因为第六电路板1660是位于主板末端(图41(F)中的第一电路板1790位于另一端)的一块电路板,所以连接器1675、1677、1678和1680是指定用于确定的南北向互连的10欧姆R包的连接。另外主板连接器1682也不是用于第六电路板1660的,正如图38(B)所示,在图38(B)中第六电路板1535是与第五电路板1534相连的而不是直接连接到主板1520上的。
在图41(B)中,第五电路板1690包含指定用于一组FPGA互连的连接器1691到1698,和指定用于另一组FPGA互连的连接器1699到1706,以及指定用于局部总线的连接器1707和1708。连接器1709用于将第五电路板1690连接到主板上。
在图41(C)中,第四电路板1715包含指定用于一组FPGA互连的连接器1716到1723,和指定用于另一组FPGA互连的连接器1724到1731,以及指定用于局部总线的连接器1732和1733。连接器1709不是用于将第四电路板1715直接连接到主板上的。这个配置在图38(B)也有显示,其中第四电路板1533是直接与第三电路板1532和第五电路板1534相连而不是直接与主板1520相连的。
在图41(D)中,第三电路板1740包含指定用于一组FPGA互连的连接器1741到1748,和指定用于另一组FPGA互连的连接器1749到1756,以及指定用于局部总线的连接器1757和1758。连接器1759用于将第三电路板1740连接到主板上。
在图41(E)中,第二电路板1765包含指定用于一组FPGA互连的连接器1766到1773,和指定用于另一组FPGA互连的连接器1774到1781,以及指定用于局部总线的连接器1782和1783。连接器1784不是用于将第二电路板1765直接连接到主板上的。这个配置在图38(B)也有显示,其中第二电路板1525是直接与第三电路板1532和第一电路板1526相连而不是直接与主板1520相连的。
在图41(F)中,第一电路板1790包含指定用于一组FPGA互连的连接器1791到1698,和指定用于另一组FPGA互连的连接器1799到1804、1806和1809,以及指定用于局部总线的连接器1811和1812。连接器1813用于将第一电路板1790连接到主板上。因为第一电路板1790是主板末端(图41(A)中的第六电路板1660位于另一端)的一块电路板,所以连接器1805、1807、1808和1810是指定用于确定的南北向互连的10欧姆R包的连接。
在本发明的一实施例中,多电路板是以一种独特的方式连接于主板以及互相连接的。多个电路板是按照从元件面对焊接面的顺序连接在一起的。其中一个电路板,比方说第一电路板是通过一个主板连接器与主板相连然后与PCI总线连接。第一电路板上的FPGA互连总线,通过一对FPGA互连连接器连接到另一块电路板(比如第二电路板)的FPGA互连总线上。第一电路板的FPGA互连连接器是位于元件面上的而第二电路板的FPGA互连是位于焊接面上的。第一电路板的元件面上的连接器和第二电路板的焊接面上的连接器使得FPGA的互连总线能够互相连接。
类似地,该两个电路板的局部总线是通过局部总线连接器连接在一起的。第一电路板上的局部总线连接器位于元件面上,而第二电路板上的局部总线连接器位于焊接面上。这样,第一电路板的元件面上的连接器和第二电路板的焊接面上的连接器使得FPGA的互连总线能够互相连接。
还可以增加更多的电路板。可以增加一个第三个电路板,使其焊接对着第二电路板的元件面。这样就建立了类似的FPGA互连和局部总线电路板间的连接。第三电路板也是通过另一个连接器与主板相连,但此连接器仅为第三电路板提供电源和接地,这将在下文中进行讨论。
双电路板配置的元件面到焊接面的连接器将参照图38(A)进行讨论。此图显示的是根据本发明一实施例的主板上FPGA电路板连接的侧视图。图38(A)显示的是双电路板配置,顾名思义只使用了两块电路板。图38(A)中的两块电路板1525(第二电路板)和1526(第一电路板)与图39中的两块电路板1552和1551一致。编号1989代表了电路板1525和1526的元件面。编号1988代表了电路板1525和1526的焊接面。正如图38(A)所示,电路板1525和1526是通过主板连接器1523与主板1520相连的。为扩展之需,还可提供其它的主板连接器1521、1522及1524。PCI总线和电路板1525及1526之间的信号是通过主板连接器1523传输的。此双电路板结构和PCI总线之间的PCI信号传输是首先通过第一电路板1526进行的。这样,从PCI总线发出的信号在到第二电路板1525前首先遇到第一电路板1526。类似地,从双电路板结构到PCI总线的信号是由第二电路板1526发出的。另外电源装置(未显示)还通过主板连接器1523为该配置提供电源。
正如图38(A)所示,电路板1526包含几个部件和连接器。其中一个部件就是FPGA逻辑装置1530。另外还有连接器1528A和1531A。类似地,电路板1525也包含几个部件和连接器。其中一个部件就是FPGA逻辑装置1529。另外还有连接器1528B和1531B。
在一实施例中,1528A和1528B是用于FPGA总线的电路板间连接器(如1590和1581,见图44)。这些电路板间连接器为各种FPGA互连建立了电路板间的连接,如N[73:0]、S[73:0]、W[73:0]、E[73:0]、NH[27:0]、SH[27:0]、XH[36:0]和XH[72:37],而不包括局部总线连接。
另外,连接器1531A和1531B是用于局部总线的电路板间连接器。局部总线处理PCI总线(通过PCI控制器)和FPGA总线(通过FPGA输入/输出控制器(CRTL_FPGA)单元)之间的信号。局部总线还处理PCI控制器、FPGA逻辑装置与FPGA输入/输出控制器(CRTL_FPGA)单元之间的配置和边界扫描测试信息。
总之,主板连接器将一对电路板中的一个连接到PCI总线和电源。一套连接器通过一个电路板的元件面将FPGA互连连接到另一个电路板的焊接面。另一套连接器通过一个电路板的元件面将局部总线连接到另一个电路板的焊接面。
在本发明的另一个实施例中使用了两个以上的电路板。图38(B)显示了六电路板的配置。这个配置与图38(A)的配置类似,都是每隔一个电路板与主板相连,而且这些电路板的互连与局部总线都是通过电路板间连接器按照焊接面对元件面的方式进行连接的。
图38(B)显示了六个电路板1526(第一电路板)、1525(第二电路板)、1532(第三电路板)、1533(第四电路板)、1534(第五电路板)和1535(第六电路板)。这六个电路板通过1526(第一电路板)、1532(第三电路板)和1534(第五电路板)上的连接器与主板1520相连。其它的电路板1525(第二电路板)、1533(第四电路板)和1535(第六电路板)不与主板直接相连,它们是通过与各自邻近电路板的连接间接与主板相连的。
位于焊接面与元件面之间的各种电路板间连接器建立了PCI总线部件、FPGA逻辑装置、存储器装置以及各种模拟系统控制电路之间的连接。第一套电路板间连接器1990对应图42中的连接器J5到J16。第二套电路板间连接器1991对应图42中的连接器J17到J28。第三套电路板间连接器1992对应图42中的连接器J3和J4。
主板1520上的主板连接器1521到1524将主板(和PCI总线)连接到六块电路板上。如上所述,1526(第一电路板)、1532(第三电路板)和1534(第五电路板)分别直接与连接器1523、1522和1521相连。其它的电路板1525(第二电路板)、1533(第四电路板)和1535(第六电路板)不是直接与主板1520相连的。因为六块电路板总共只需要一个PCI控制器,所以只有第一电路板1526包含一个PCI控制器。与第一电路板1526相连的主板连接器1523提供向/从PCI总线的访问。连接器1522和1521只连接至电源和接地。在一实施例中,邻近主板连接器之间的中心到中心的间距大约为20.32mm。
对于分别直接与连接器1523、1522和1521相连的电路板1526(第一电路板)、1532(第三电路板)和1534(第五电路板),它们的J5到J16连接器是位于元件面上,J17到J28是位于焊接面上而局部总线连接器J3到J4是位于元件面上的。对于不直接与主板连接器1523、1522和1521相连的电路板1525(第二电路板)、1533(第四电路板)和1535(第六电路板),它们的J5到J16连接器是位于焊接面上,J17到J28是位于元件面上而局部总线连接器J3到J4是位于焊接面上的。对于末端电路板1526(第一电路板)和1535(第六电路板),连接器J17到J28部分是10欧姆R包终端。
图40(A)和图(B)显示不同电路板间的阵列连接。为有利于生产过程,对所有的电路板使用同一种设计方案。正如上面所解释的,电路板通过没有底板的连接器连接到其它电路板上。图40(A)显示了两块示例电路板1611(第二电路板)和1610(第一电路板)。电路板1610的元件面对着电路板1611的焊接面。电路板1611包含许多FPGA逻辑装置、其它部件和导线线路。电路板1611上这些逻辑装置和其它部件的特定节点用节点A’(编号1612)和B’(编号1614)表示。节点A’通过PCB线迹1620连接到连接器垫1616。类似地,节点B’通过PCB线迹1623连接到连接器垫1617。
类似地,电路板1610也包含许多FPGA逻辑装置、其它部件和导线线路。电路板1610上这些逻辑装置和其它部件的特定节点用节点A(编号1613)和B(编号1615)表示。节点A通过PCB线迹1625连接到连接器垫1618。类似地,节点B通过PCB线迹1622连接到连接器垫1619。
现在我们将要讨论位于使用表面安装连接器的不同电路板上的节点之间的信号的布线路。在图40(A)中,所需的连接是建立在(1)虚构路径1620、1621和1622所指示的节点A和B’之间以及(2)虚构路径1623、1624和1625所指示的节点B和A’之间的。这些连接是用于象图39中电路板1551和电路板1552之间的不对称互连1600这样的路径的。其它的不对称互连包括在连接器1589和1590两面的NH到SH的互连1977、1979和1981。
A-A’和B-B’对应于互连1515(N,S)这样的对称互连。N和S互连使用穿孔连接器,其中NH和SH不对称互连使用SMD连接器。详情参考表D。
现在参照图40(B)来讨论使用表面安装连接器的实际安装,使用相同的序号表示相同的零件。在图40(B)中,电路板1611显示了元件面上的节点A’通过PCB线迹1620连接到元件面上的连接器垫1636。元件面上的连接器垫1636通过导电路径1651连接到焊接面的连接器垫1639。焊接面上的连接器垫1639通过导电路径1648连接到电路板1610元件面上的连接器垫1642。最后,元件面上的连接器垫1642通过PCB线迹1622连接到节点B。这样,电路板1611上的节点A’就可以连接到电路板1610上的节点B。
同样,在图40(B)中,电路板1611显示了元件面上的节点B’通过PCB线迹1623连接到元件面上的连接器垫1638。元件面上的连接器垫1638通过导电路径1650连接到焊接面的连接器垫1637。焊接面上的连接器垫1637通过导电路径1645连接到元件面上的连接器垫1640。最后,元件面上的连接器垫1640通过PCB线迹1625连接到节点A。这样,电路板1611上的节点B’就可以连接到电路板1610上的节点A。因为这些电路板都采用同样的设计方案,所以导电路径1652和1653可以象导电路径1650和1651那样用于与电路板1610邻近的其它电路板。这样,就建立了一种使用表面安装和穿孔连接器而不需使用开关部件的独特的电路板间的连接方案。
F.时序不灵敏和无假信号逻辑装置
本发明的一实施例解决了占用时间和时钟假信号两方面的问题。根据本发明的一实施例,在将用户的设计配置入可重新配置计算系统的硬件模型的过程中,在用户设计中发现的标准逻辑装置(如锁存器,触发器)被仿真逻辑装置或时序不灵敏和无假信号(timing-insensitive glitch-free,TIGF)逻辑装置代替。在一实施例中,整合到EVAL信号中的触发信号用来更新这些TIGF逻辑装置中所储存的值。在等待各种输入和其它信号在用户设计的硬件模型中传输并在估算过程中达到稳定状态后,会产生用来更新TIGF逻辑装置所储存或锁存的值的触发信号。此后,开始了新的估算周期。在一实施例中,这个从估算到触发的阶段是循环的。
现在简要地讨论一下上面所提到的占用时间的问题。所属技术领域的技术人员都知道逻辑电路设计的一个普遍的问题就是占用时间扰乱。占用时间是指一个逻辑元件的数据输入在控制输入(如时钟输入)的变化引起了数据输入所指示的值的锁存、获取或储存后必须保持稳定的最小时间;否则逻辑元件将不能正常作业。
现在我们将要通过讨论一个移位寄存器的例子来演示占用时间的要求。图75(A)显示了一个串行连接了三个D型触发器的示例性移位寄存器,即触发器2400的输出连接的是与触发器2401的输入,而2401的输出连接至触发器2402的输入。总的输入信号Sin与触发器2400的输入相连而总的输出信号Sout是由触发器2402的输出产生的。这三个触发器在它们各自的时钟输入端接收一个共同的时钟信号。这个移位寄存器是根据以下假设设计:(1)时钟信号同时到达所有触发器,(2)在检测到时钟信号边缘后,触发器的输入在占用时间的时段内不会改变。
图75(B)的时序图演示了占用时间的假设,其中系统没有破坏占用时间的要求。在逻辑元件之间占用时间会有所不同,但这些不同的占用时间都在说明书被规定。在时间t
0时钟输入从逻辑0变化到逻辑1。如图75(A)所示,时钟输入提供给2400到2402中的每个触发器。从t
0处的该时钟边沿开始,输入S
in必须在从时间t
0到t
1的占用时间T
H时段内保持稳定。类似地,到触发器2401(即D
2)和2402(即D
3)的输入也必须在从时钟信号的触发边缘开始的占用时间时段内保持稳定。既然图75(A)和75(B)满足了这个要求,那么输入S
in就被移位到触发器2400,D
2的输入(逻辑0)被移位到触发器2401而D
3的输入(逻辑1)则被移位到触发器2402。所属技术领域的技术人员都知道在时钟边沿被触发后,假设占用时间的要求被满足的话,那么触发器2401输入端的新值(输入D
2的逻辑1)和触发器2402输入端的新的值(输入D
3的逻辑0)将要在下一个时钟循环移位并储存到下一个触发器中。下表总结了对这些典型赋值的移位寄存器的操作:
|
D1 |
D2 |
D3 |
Q3 |
时钟边沿前 |
1 |
0 |
1 |
0 |
时钟边沿后 |
1 |
1 |
0 |
1 |
在实际实施时,时钟信号不会同时达到所有的逻辑元件。更确切地说,电路的设计使得时钟信号将会几乎同时或实质上同时到达所有的逻辑元件。电路的设计必须使得时钟偏移或时钟信号到达每个触发器之间的时序差异远比占用时间要求的要小。相应地,所有的逻辑元件将获得适当的输入值。在以上图75(A)和75(B)所示的例子中,由于时钟信号在不同时间到达触发器2400到2402引起的占用时间扰乱可能会导致一些触发器获取旧的输入值而另一个触发器获取新的输入值。结果使得移位寄存器不能正常作业。
在同样的移位寄存器设计的可重新配置逻辑(如FPGA)的装置中,如果时钟不是从主输入直接产生的话,那么可以将电路设计成使得低偏移网络能够将时钟信号分布到所有的逻辑元件中去,这样这些逻辑元件就可以在实质上同一时间检测时钟边沿。主时钟由自计时测试平台程序产生。通常主时钟信号是在软件中产生的,在典型的用户电路设计中只有很少一些主时钟(即1-10个)。
然而,如果时钟信号是从内部逻辑而不是由主输入产生,占用时间的问题就显得更为重要。派生的或门控时钟是由主时钟驱动的组合逻辑和寄存器的组合网络产生的。在典型的用户电路设计中有许多(即1000或更多)派生的时钟。没有预防和另外的控制措施,这些时钟信号就可以在不同的时间到达每个逻辑元件而时钟偏移可能会比占用时间要长。这将会导致电路设计的失败,比如图75(A)和75(B)所示的移位寄存器电路。
现在通过图75(A)中所示的同样的移位寄存器电路来讨论占用时间扰乱。这时,移位寄存器电路的单个的触发器跨越图76(A)所显示的多个可重新配置逻辑芯片(如多个FPGA芯片)展开。第一FPGA芯片2411包含将其时钟信号CLK反馈到FPGA芯片2412到2416的一些部件的内部派生的时钟逻辑2410。在这个例子中,内部产生的时钟信号CLK将会提供给移位寄存器电路的触发器2400到2402。芯片2412包含触发器2400,芯片2415包含触发器2401而芯片2416包含触发器2402。另外的两个芯片2413和2414是用来演示占用时间扰乱概念的。
芯片2411内的时钟逻辑2410接收一个主时钟输入(或者可能是另外的一个派生的时钟输入)并产生一个内部时钟信号CLK。此内部时钟信号CLK将传输到芯片2412并标为CLK1。从时钟逻辑2410发出的该内部时钟信号CLK也会通过芯片2413和2414传输到芯片2415并标为CLK2。如图所示,CLK1输入到触发器2400而CLK2则输入到触发器2401。CLK1和CLK2都会经历线路线迹延迟,这样CLK1和CLK2的边沿就比内部时钟信号CLK的边缘延迟。而且CLK2还会因为穿过其它两个芯片2413和2414而具有附加延迟。
参照图76(B)的时序图,内部时钟信号CLK在时间t2产生及被触发。由于线路线迹延迟,CLK1会到时间t3才到达芯片2412内的触发器2400,此延迟时间标为T1。如上表所示,Q1的输出(或输入D2)在CLK1时钟边沿到达前是逻辑0。在触发器2400检测到CLK1的边缘后,D1的输入必须在必要的占用时间H2期间(即直到时间t4)保持稳定。这时触发器2400移位或储存逻辑1以使Q1的输出(或D2)为逻辑1。
当这些在触发器2400上发生时,时钟信号CLK2正向芯片2415内的触发器2401移动。芯片2413和2414所引起的延迟T2使得CLK2在时间t5到达触发器2401。D2的输入这时为逻辑1。在此触发器2401所需的占用时间后,此逻辑赋值1将会出现在输出Q2(或D3)上。这样,在CLK2到达前输出Q2为逻辑1而在CLK2到达后输出仍然为逻辑1。这个结果是不正确的。此移位寄存器应移位到逻辑0。当寄存器2400正确地移位到旧的输入值(逻辑1)时,触发器2401错误地移位到新的输入值(逻辑1)。这是当时钟偏移(或时序延迟)比占用时间大时所发生的典型错误操作。在这个例子当中,T2>T1+H2。总的来说,除非采取一些预防措施,否则如图76(A)所示,当一个芯片产生时钟信号并将其分布到不同芯片上的逻辑元件时很可能会发生占用时间扰乱。
现在将参照图77(A)和77(B)来讨论时钟假信号问题。一般地,当一电路的输入改变时,输出也会在其定为一个正确值前的相当短的时间内变为一个随机值。如果另一个电路恰好在那个错误的时间检测输出并读出随机值,那么结果将是不正确的而且难以调试。这种对另外电路产生有害影响的随机值就称为假信号(glitch)。在典型的逻辑电路中,一个电路会为另一个电路产生时钟信号。如果一个或两个电路存在着未得到补偿的时序延迟,那么将会产生一个时钟假信号(即预料之外的时钟边沿)并导致一个错误的结果。与占用时间扰乱相同,引起时钟假信号的原因是电路设计中的某些逻辑元件在不同的时间改变了值。
图77(A)显示了一些逻辑元件为另一组逻辑元件产生时钟信号的示范逻辑电路;即,D型触发器2420,D型触发器2421和“异或”门(XOR)2422为D型触发器2423产生一时钟信号(CLK3)。触发器2420在线路2425上的D1接收到它的输入数据而在线路2427上的Q1输出数据。它从一时钟逻辑2424接收它的时钟输入(CLK1)。CLK指由时钟逻辑2424最初产生的时钟信号而CLK1指相同的信号到达触发器2420所延迟的信号。
触发器2421在线路2426上的D2接收到它的输入数据而在线路2428的Q2上输出数据。它从一时钟逻辑2424接收它的时钟输入(CLK2)。如上所述,CLK指由时钟逻辑2424最初产生的时钟信号,而CLK1指相同的信号到达触发器2421所延迟的信号。
线路2427和2428上触发器2420和2421的各自的输出输入到“异或”门2422。“异或”门2422将标记为CLK3的数据输出到触发器2423的时钟输入。触发器2423也在线路2429上的D3输入数据并在Q3输出数据。
现在将参照图77(B)中的时序图来讨论此电路可能引起的时钟假信号问题。CLK信号在时间t0被触发。在时钟信号(即CLK1)到达触发器2420时为时间t1。到达触发器2421时为CLK2时间t2。
假定到D1和D2的输入都为逻辑1。当CLK1在时间t1到达触发器2420时Q1的输出将为逻辑1(如图77(B)所示)。CLK2在稍后的时间t2到达触发器2421,这样,线路2428上的Q2输出从时间t1到时间t2都保持在逻辑0。即使所需的信号是一个逻辑0(1 XOR1=0),但“异或”门2422在时间t1到时间t2期间产生一个逻辑1作为CLK3出现在触发器2423的时钟输入端。这个在时间t1到时间t2期间内CLK3的产生是一个时钟假信号。因此,无论期望与否,任何出现在触发器2423输入线路2429上的D3的逻辑值都被存储了下来,并且此时触发器2423准备好了接收在线路2429上的下一次输入。如果设计正确,那么CLK1和CLK2的时间延迟会减少到最小,这样就不会产生时钟假信号,或者至少时钟假信号所持续的时间非常短,不会对电路剩下的部分产生影响。后一种情况时,如果在CLK1和CLK2之间的时钟偏移足够短,则XOR门延迟将足够长,可以滤掉假信号干扰,不会对电路的其余部分产生影响。
两种已知的解决占用时间扰乱问题的方法如下:(1)时序调整,(2)时序再合成。在美国专利5,475,830中所讨论的时序调整要求在某些信号路径中插入足够的延迟元件(如缓冲器)来延长逻辑元件的占用时间。例如,在上述移位寄存器电路中的输入D2和D3上增加足够的延迟可以避免占用时间扰乱。这样,在图78中显示了分别将延迟元件2430和2431加到输入D2和D3的同样的移位寄存器电路。结果就可以设计延迟元件2430使得时间t4发生在时间t5后,T2<T1+H2(图76(B)),这样就没有占用时间扰乱的发生。
时序调整方法的一个潜在问题是它过于依赖FPGA芯片的技术参数。所属技术领域的技术人员都知道象FPGA芯片这样的可重新配置逻辑芯片,是通过查找表实现逻辑元件的。芯片中查找表的延迟是在说明书中标明,而设计者要依赖于具体的时间延迟来使用时序调整方法避免占用时间扰乱。然而,这个延迟只是个估计值并会随着芯片的不同而变化。时序调整方法的另一个潜在问题是设计者必须补偿在整个电路设计过程都存在的线路延迟。虽然这并不是不可能完成的任务,但是线路延迟的估算是需要消耗时间的而且容易引发错误。另外,时序调整并没有解决时钟假信号的问题。
另一个解决方法是IKOS的VirtualWires技术所引进的时序再合成。时序再合成的概念包括将一个用户的电路设计转变成一个功能等同的设计同时通过有限状态机和寄存器严格控制时钟和输出接脚信号的时序。时序再合成通过引入一个单独高速时钟来为用户电路设计的重新设定时序。它还将锁存器、门控时钟和多重同步和异步时钟转变成一个基于触发器的单时钟同步设计。这样,时序再合成在每个芯片的输入和输出输出接脚使用寄存器来控制芯片间信号移动的精度并避免芯片间占用时间扰乱的发生。时序再合成还在每个芯片内使用一个有限状态机并基于参考时钟来排定来自其它芯片的输入、到达其它芯片的输出以及内部触发器的更新。
图79显示了使用与图75(A)、75(B)、76(A)和76(B)关联的上述讨论中所引入的同样的移位寄存器的时序再合成电路的一个例子。基本的三触发器移位寄存器设计已被转变成一个功能等同的设计。芯片2430包括通过线路2448与一寄存器2443相连的原始内部时钟生成逻辑2435。时钟逻辑2435产生CLK信号。第一有限状态机2438也是通过线路2449与寄存器2443相连的。寄存器2443和第一有限状态机2438都是由不依赖于设计的全局参考时钟控制的。
CLK在到达芯片2434之前还穿过芯片2432和2433进行传递。在芯片2432中,第二有限状态机2440通过线路2462控制一寄存器2445。CLK信号从寄存器2443通过线路2461传递到寄存器2445。寄存器2445通过线路2463将CLK信号输出到下一个芯片2433。芯片2433包含一个通过线路2464控制着寄存器2446的第三个有限状态机2441。寄存器2446将CLK信号输出到芯片2434。
芯片2431包括最初触发器2436。寄存器2444接收输入Sin并通过线路2452将输入Sin输出到触发器2436的D1输入中。触发器2436的Q1输出是通过线路2454与寄存器2466相连的。第四有限状态机2439通过线路2451控制寄存器2444,通过线路2455控制寄存器2466并通过锁存器启动线路2453控制触发器2436。第四有限状态机2439还通过线路2450从芯片2430接收最初时钟信号CLK。
芯片2434包括最初触发器2437,它通过线路2456从芯片2431上的寄存器2466接收信号到D2输入。触发器2437的Q2输出是通过线路2457与寄存器2447相连的。第五有限状态机2439通过线路2459控制寄存器2447并通过锁存器启动线路2458控制触发器2437。第五有限状态机2442还通过芯片2432和2433从芯片2430接收最初时钟信号CLK。
利用时序再合成,有限状态机2438到2442,寄存器2443到2447和2466,以及单独全局参考时钟被用来控制跨过多芯片的信号流并更新内部触发器。这样,在芯片2430中CLK信号到其它芯片的分布由第一有限状态机2438通过寄存器2443来排定。类似地,在芯片2431中第四有限状态机2439安排通过寄存器2444到触发器2436的输入Sin的传递,以及通过寄存器2466的Q1输出的传递。触发器2436的锁存功能也是由来自第四有限状态机2439的一个锁存启动信号控制的。其它芯片2432到2434的逻辑也适用同样的原则。由于对芯片间输入传递时间、芯片间输出传递时间以及内部触发器状态更新进行了严格的控制,从而排除了芯片间占用时间扰乱。
然而,时序再合成技术要求将用户电路设计转变成一个包括附加的有限状态机和寄存器的功能相当的电路,这个功能相当的电路要大得多。一般来说,用以执行此技术所必需的附加的逻辑最多可达每个芯片的有用逻辑的20%。而且此技术并不能完全避免时钟假信号问题。为避免时钟假信号问题,使用时序再合成技术的设计者还必须采取附加的预防手段。一个保守的方法是设计一个电路使得用门控时钟的逻辑装置的输入在同样的时间不会发生改变。一个积极的方法是使用闸延迟来过滤假信号以使它们不会影响电路剩下的部分。然而正如上所述,时序再合成需要一些附加的有效措施来避免时钟假信号。
现在将讨论本发明的解决占用时间和时钟假信号问题的各种实施例。在将用户设计配置映射到RCC计算系统的软件模型和RCC阵列的硬件模型的过程中,根据本发明的一实施例,用一时序不灵敏无假信号(TIGF)锁存器对图18(A)所显示的锁存器进行仿真。类似地,图18(B)所显示的设计触发器用根据本发明的一实施例的一TIGF触发器进行仿真。这些TIGF逻辑装置无论是以锁存器还是触发器的形式,也可以被称作仿真逻辑装置。TIGF锁存器和触发器的更新是由全局触发信号控制的。
在本发明的一实施例中,不是在用户设计电路中的所有逻辑装置都是由TIGF代替的。一个用户设计电路包括由主时钟启动或计时的部分以及由门控或派生的时钟控制的其它部分。因为占用时间扰乱和时钟假信号是属于后者的问题,其中逻辑装置是由门控或派生的时钟控制的。根据本发明的一实施例,只有这些特定的由门控或派生的时钟控制的逻辑装置被TIGF逻辑装置代替。在其它的实施例中,在用户设计电路中的所有的逻辑装置都由TIGF逻辑装置代替。
在讨论本发明的TIGF锁存器和触发器实施例之前,先讨论全局触发信号。总体来说,全局触发信号是用来使TIGF锁存器和触发器在估算过程中保持其状态(即保持旧的输入值)并在很短的触发期间更新其状态(即储存新的输入值)。在一实施例中,图82所示的全局触发信号是从上述EVAL信号分离并衍生出来的。在该实施例中,全局触发信号具有一个长的估算周期,和随后的一个短的触发周期。全局触发信号在估算过程中追踪EVAL信号,而当EVAL循环完结时会产生用来更新TIGF锁存器和触发器的短触发信号。在另一个实施例中,EVAL信号就是全局触发信号,其在估算周期是处于一个逻辑状态(如逻辑0)而在非估算或TIGF锁存器/触发器更新阶段是处于另一个逻辑状态(如逻辑1)。
正如上文关于RCC计算系统和RCC硬件阵列的讨论,估算周期用于将所有的主输入和触发器/锁存装置的变化传输到整个用户设计中,一次一个模拟循环。在传输的过程中,RCC系统一直处于等待状态直到系统的所有信号都达到稳定状态。将用户设计映射并配置到RCC阵列的适当的可重新配置的逻辑装置(如FPGA芯片)中去之后,计算估算周期。相应地,估算周期是由具体设计确定的,也就是说,不同用户设计的估算周期可以是不同的。此估算周期的持续时间应能确保系统所有的信号都可以通过整个系统进行传输并在下一个短触发阶段前达到稳定状态。
正如图82所示,短的触发阶段与估算周期邻近。在一实施例中,短触发阶段落后于估算周期。在短触发阶段前,输入信号在估算周期内贯穿用户设计电路的硬件模型配置部分进行传输。根据本发明的一实施例,用EVAL信号逻辑状态的一个变化来标记的短触发阶段控制着用户设计中的所有TIGF锁存器和触发器,这样它们就可以被更新为所传输的来自达到稳定状态后的估算周期的新值。该短触发阶段通过一低偏移网络进行全局分布并且其持续时间之短(即图82所示的从t0到t1以及从t2到t3)能满足可重新配置逻辑装置进行正确操作所允许的要求。在该短触发阶段中,在TIGF锁存器和触发器的每个输入阶段会对新的主输入进行取样,而旧的储存在相同的TIGF锁存器和触发器中的值会被输出到用户设计的RCC硬件的下一个阶段。在下面的讨论中,在短触发阶段中所发生的全局触发信号的部分将会被称为TIGF触发,TIGF触发信号,触发信号或简单地称为触发。
图80(A)显示了最初在图18(A)中所显示的锁存器2470。此锁存器按以下程序进行操作:
if(#S),Q←1
else if(#R),Q←0
else if(en),Q←D
else Q Keeps the old value.(保持旧值)因为该锁存器是电平感应并且是异步的,所以只要时钟输入和锁存器启动输入被启动,那么输出Q将追踪输入D。
图80(B)显示的是根据本发明的一实施例的TIGF锁存器。正如图80(A)中的锁存器,TIGF锁存器有一D输入、一启动输入、一设置(S)、一复位(R)和一输出Q。另外它有一触发输入。TIGF锁存器包括一D型触发器2471、一多路复用器2472、一“或”门2473和一“与”门2474以及各种互连。
D型触发器2471通过线路2476从“与”门2474的输出接收其输入。D型触发器还通过线路2477上的一触发信号在其时钟输入端被触发,此触发信号是RCC系统根据一依赖于估算循环的严格的进程表进行全局分布的。D型触发器2471的输出是通过线路2478与多路复用器2472相连的。多路复用器2472的另外的输入与线路2475上的TIGF锁存器D输入相连。多路复用器由线路2484上的一启动信号控制。多路复用器2472的输出通过线路2479与“或”门2473的一输入相连。“或”门2473另外的输入是与线路2480上的设置(S)输入相连的。“或”门2473的输出通过线路2481与“与”门2474的输入相连。“与”门2474另外的输入是与线路2482上的复位(R)信号相连的。如上所述,“与”门2474的输出通过线路2476反馈到D型触发器2471的输入。
现在讨论本发明TIGF锁存器实施例的操作。在此TIGF锁存器的实施例中,D型触发器2471保持TIGF锁存器的当前状态(即旧值)。D型触发器2471输入端上的线路2476给出了需要锁存到TIGF锁存器的新的输入值。线路2476给出新值是因为线路2475上TIGF锁存器的主输入(D输入)最后会从多路复用器2472(带有线路2484上将最终给出的正确启动信号),穿过“或”门2473并最后穿过“与”门2474到达线路2483,线路2483则将TIGF锁存器新的输入信号反馈给线路2476上的D型触发器2471。线路2477上的触发信号通过将线路2476上新的输入值记录到D型触发器2471上来更新TIGF锁存器。这样,线路2478上D型触发器2471的输出就显示了TIGF锁存器的当前状态(即旧值),而线路2478上的输入则显示了需要锁存到TIGF锁存器中的新输入值。
多路复用器2472接收来自D型触发器2471的当前状态以及线路2475上的新的输入值。启动线路2484的功能是作为多路复用器2472的选择器信号。因为TIGF锁存器直到线路2477上有触发信号才会更新(即储存新的输入值),所以线路2475上TIGF锁存器的D输入值和线路2484上的启动值可以以任何顺序到达TIGF。如果此TIGF锁存器(和用户设计硬件模型的其它锁存器)碰到在使用一常规锁存器的电路中通常会引起占用时间扰乱的情况,如上文所提到的图76(A)和76(B)中一个时钟信号远迟于另一个时钟信号到达,那么此TIGF锁存器可以通过将正确的旧值保持到线路2477上出现触发信号时为止来正常作业。
触发信号是通过低偏移全局时钟网络来分布的。***
此TIGF锁存器还解决了时钟假信号的问题。注意时钟信号由TIGF锁存器中的启动信号代替。线路2484上的启动信号可能在估算周期的过程中出现干扰但TIGF将能持续保持当前状态而不会失效。在一个实施例中,当信号达到稳定状态时TIGF可以被更新的唯一机制是通过估算周期后产生的触发信号。
图81(A)显示了最初在图18(B)中所显示的触发器2490。此锁存器按以下程序进行操作:
if(#S),Q←1
else if(#R),Q←0
else if(positive edge of CLK),Q←D
else Qkeeps the old value(保持旧值)。因为该锁存器是边缘触发的,所以只要触发器启动输入被启动,那么输出Q将在时钟信号的正边沿追踪输入D。
图81(B)显示的是根据本发明的一实施例的TIGF D型触发器。如图81(A)中的触发器,TIGF触发器有一D输入、一时钟输入、一设置(S)、一复位(R)和一输出Q。另外它有一触发输入。TIGF触发器包括三个D型触发器2491、2492和2496,一多路复用器2493,一“或”门2494和两个“与”门2495和2497以及各种互连。
触发器2491接收线路2498上的TIGF D输入、线路2499上的触发输入,并在线路2500上给出一Q输出。此输出线路2500也作为多路复用器2493的一个输入。多路复用器2493的另一个输入是通过线路2503来自触发器2492的Q输出。多路复用器2493的输出通过线路2505与“或”门2494的一个输入相连。“或”门2494另外的输入是线路2506上的设置(S)信号。“或”门2494的输出通过线路2507与“与”门2495的一输入相连。“与”门2495另外的输入是线路2508上的复位(R)。“与”门2495的输出(也即TIGF整体输出Q)通过线路2501与触发器2492的输入相连。触发器2492在线路2502上也有一触发输入。
回到多路复用器2493,它的选择器输入通过线路2509与“与”门2497的输出相连。“与”门2497的一个输入是来自线路2510上的CLK信号,另一个输入来自线路2512上触发器2496的输出。触发器2496也从线路2511上的CLK信号接收输入并从线路2513上接收其触发信号。
现在讨论本发明TIGF触发器实施例的操作。在此实施例中,TIGF触发器在以下三个不同的点接收触发信号:经由线路2499的D型触发器2491,经由线路2502的D型触发器2492以及经由线路2513的D型触发器2496。
TIGF触发器只有在时钟信号的边缘被检测到时才会储存输入值。根据本发明的一实施例,所要求的边缘是时钟信号的正边沿。为检测该时钟信号的正边沿,提供了边缘检测器2515。边缘检测器2515包括一D型触发器2496和一“与”门2497。边缘检测器也通过线路2513上D型触发器2496的触发信号来更新。
D型触发器2491保持TIGF触发器的新输入值并阻止线路2498上D输入的任何改变,直到线路2499上具有触发信号。这样,在TIGF触发器的每个估算周期前,新值储存在D型触发器2491中。相应地,TIGF触发器就通过预存新值直到TIGF触发器被触发信号更新来避免占用时间扰乱。
D型触发器2492在线路2502上出现触发信号前保持TIGF触发器的当前值(或旧值)。此值是仿真TIGF触发器更新后和下一估算周期前的状态。到线路2501上D型触发器2492的输入保持新值(也是在估算周期的有效期间线路2500上的值)。
多路复用器2493接收线路2500上的新的输入值以及当前储存在线路2503上TIGF触发器内的旧值。基于线路2504上的选择器信号,多路复用器或者输出新值(线路2500)或输出旧值(线路2503)作为仿真TIGF触发器的输出。在用户设计硬件模型中所有的传输信号接近稳定状态前此输出是随着时钟假信号变化的。这样,线路2501上的输入将在估算末期给出储存在触发器2491中的新值。当TIGF触发器接收到触发信号时,触发器2492现在储存着在线路2501上出现的新值,而触发器2491则储存着线路2498上的下一个新值。这样,根据本发明一实施例的TIGF触发器就不再受到时钟假信号的负面影响。
更为详尽地阐述一下此TIGF触发器还有一些抵制时钟假信号的作用。所属技术领域的技术人员们将会意识到如果用图81(B)实施例中的TIGF触发器代替图77(A)中的触发器2420、2421和2423,那么时钟假信号就不会影响任何使用该TIGF触发器的电路。参考一下图77(A)和77(B),时钟假信号会对图77(A)的电路产生负面影响是因为在从时间t1到t2的期间内触发器2423在不应该记录新值的时候记录了新值。CLK1和CLK2信号偏斜的特性迫使“异或”门2422在t1到t2期间内产生一逻辑1状态,驱动着下一个触发器2423的时钟线路。根据本发明的一实施例,如果使用TIGF触发器时钟假信号就不会影响记录新值。用TIGF触发器代替触发器2423,一旦信号在估算周期达到稳定状态,那么短触发阶段的触发信号将使得TIGF触发器储存触发器2491中(图81(B))的新值。其后像图77(B)中的时钟假信号那样的任何从t1到t2的时段内的时钟假信号都不会记录新值。TIGF触发器只会随着触发信号而更新,而此触发信号只有在估算周期之后当传输于电路中的信号达到稳定状态时才会被提供给TIGF触发器。
虽然此特定的TIGF触发器实施例是D型触发器,但是其它的触发器(如T,JK,SR)也在本发明的范围内。其它类型的边缘触发的触发器可以通过在在D输入前增加一些“与”/“或”逻辑而由D型触发器衍生出来。
VII.模拟服务器
根据本发明另一实施例的模拟服务器可以允许多用户进入相同的可重新配置的硬件单元,以便有效地以分时操作的方式模拟和加速相同或不同的用户设计。使用高速的模拟调度程序和状态转换机制,为模拟服务器提供导致高吞吐量地有效模拟处理。服务器使多用户或处理进入可重新配置硬件单元,以实现加速和硬件状态交换的目的。一旦完成加速或到达硬件状态,每个用户或处理就可以只在软件中模拟,这样就释放了对可重新配置硬件单元的控制,使得其他用户或处理能够对其进行控制。
在此说明书的模拟服务器的部分,我们使用了诸如“作业”和“处理”这样的术语。在此说明书中,术语“作业”和“处理”通常可以互换使用。过去的批处理系统执行“作业”而分时操作系统储存并执行“处理”或程序。而在如今的系统中这些作业和处理是类似的。这样在此说明书中术语“作业”就不限于批处理系统,而“处理”就不限于分时操作系统。而且在某个极端情况下“作业”与“处理”是等同的,那就是当“处理”能够在一个时间片(time slice)内执行或没有其它分时干预打断的情况下。另一个极端情况就是如果“作业”要求多时间片来完成,那么“作业”是“处理”的子集。因此,如果一个“处理”由于其它同等优先权的用户/处理的出现而需要多时间片来完成执行,那么它就分为一些“作业”。而且,如果一个“处理”由于它是唯一最高优先权的用户,或者处理很短以至在一个时间片内就可以完成,那么一个“处理”就等同于一个“作业”。这样一个用户就可以与一个或更多的“处理”或已经在模拟系统中装载并执行的程序相互作用,并且每个“处理”可能需要一个或更多的“作业”来在分时系统中完成。
在一个系统配置中,多用户通过远程终端可以在非网络环境下利用相同的多处理器工作站,并进入同样的可重新配置硬件单元,从而检查或调试相同或不同用户电路设计。在非网络环境中,远程终端是通过与一主计算系统相联来实现它的处理功能。这个非网络设置使得多用户能够进入同一用户设计来达到并行调试的目的。这种进入是通过分时操作处理来实现的,而在进行此分时操作时,调度程序决定多用户的优先进入权的、交换作业,以及在预定的用户中选择性地锁存硬件单元入口。在其它情况下,多用户可以通过用于他(她)自己的分离的并且不同的用户设计的服务器进入同一可重新配置的硬件单元来进行调试。在这一配置中,多用户或者处理与操作系统共享工作站中的多微处理器。在另一配置中,分离的基于微处理器的工作站中的多用户或者处理可以通过网络来进入同一重新配置的硬件单元,从而来检查或调试相同或不同用户电路设计。类似地,这种进入是通过分时操作处理来实现的,而在进行此分时操作中,调度程序决定多用户的优先进入权、交换作业,以及在预定的用户中选择性地锁存硬件单元入口。在网络环境下,调度程序听从由UNIX套接字(socket)系统调用的网络请求。此操作系统使用套接字来给调度程序发出指令。
如前所述,模拟调度程序使用抢先多优先权轮转算法。换句话说,具有更高优先权的用户或者处理首先被服务,直到这个用户或者处理完成它的作业并结束进程为止。在具有相同优先权的用户或者处理中,使用抢先轮转算法,每个用户或处理都被分配给一相同的时间片去执行操作直到完成。该时间片很短,以至于多用户或处理在被服务前无需等待太久。这段时间也足够长,使得在模拟服务器的调度程序中断一个用户或者处理而交换进来并进行新的用户作业之前,已经执行了充分的操作。在一实施例中,默认时间片是5秒钟,并且可由用户设定。在一实施例中,调度程序向操作系统内置的调度程序发出特别调用。
图45是根据本发明的一实施例的一个具有多处理器工作站的非网络环境。图45是图1的变型,因此,对相同的元件、单元使用了相同的编号。工作站1100包括局部总线1105、一个主机/PCI桥接器1106、存储器总线1107,以及主存储器1108。还可能具有一超高速缓冲存储器子系统(未示出)。还具有其他的用户接口单元(如显示器,键盘),但没有在图45中显示出来。工作站1100还包括多重微处理器1101、1102、1103、1104,它们通过调度程序1117和连接/路径1118耦联到局部总线1105上。如所属技术领域的技术人员所知,操作系统1121为整个的计算环境提供用户硬件接口基础,用于为计算环境中的不同用户、处理和装置管理文件和分配资源。为了使概念更加清楚,我们显示了操作系统1121和总线1122。在AbrahamSilberschatz和James L.Peterson合著的《OPERATING SYSTEMCONCEPTS(1988)》与William Stalling的《MODERN OPERATINGSYSTEMS(1996)》中可以找到关于操作系统的参考文献,其内容以引用的方式并入本文。
在一实施例中,工作站1100采用的是Sun Microsystem的Enterprise 450系统,它使用的是UltraSPARC II处理器。Sun 450系统不通过局部总线对存储器进行访问,而是通过一些专用总线经由纵横制接线器与储存器相连来访问储存器。因此,多处理可以由多微处理器执行各自指令,并不通过局部总线对存储器进行访问来运行。Sun 450系统和UltraSPARC的说明书的内容将以引用的方式并入本文。虽然Sun Ultra 60系统仅能允许2个处理器,但是它仍然是微处理器系统另外的一个例子。
调度程序1117提供通过设备驱动器1119和连接/路径1120对可重新配置的硬件单元20的分时访问。调度程序1117主要在软件中实现,以便与主计算系统的操作系统进行交互作用,另外还部分的在硬件中实现,以便通过支持模拟作业中断和交换入/出模拟进程来与模拟服务器进行交互作用。调度程序1117和设备驱动器1119将在下面做详细讨论。
在工作站1101中,每一个微处理器1101到1104都具有独立处理而不依赖于其它微处理器的能力。在本发明一实施例中,工作站1100在以UNIX为基础的操作系统下运行,尽管其它的实施例中,1101工作站可以在以Windows或者Macintosh为基础的操作系统下运行。以UNIX为基础的系统为用户配置了X-Windows作为用户根据需要进行管理程序、任务和文件的用户界面。如果想了解UNIX操作系统的详细情况,请参考Maurice J.Bach的《THE DESIGN OFTHE UNIX OPERATING SYSTEM(1986)》。
在图45中,多用户可以通过远程终端进入工作站1100。有时,每个用户可以用一个特定的CPU来运行程序。在另外情况下,每个用户根据资源限制来使用不同的CPU。通常,操作系统1121决定这些访问,实际上,操作系统本身可以从一个CPU跳到另一个来完成其任务。为了处理分时操作,调度程序通过套接字系统调用听从网络请求,对操作系统1121发出系统调用,操作系统1121反过来通过设备驱动器1119向可重新配置的硬件单元20开始产生中断信号产生来处理抢先操作。中断信号的产生是许多调度算法步骤中的一步,这些步骤还包括终止当前作业、为当前终止的作业存储状态信息、交换作业,和执行新的作业。服务器调度算法将在下面讨论。
现在简要地讨论套接字(socket)和套接字系统调用。在一个实施例中,UNIX操作系统可以以分时操作模式运行。在一定的时间(即时间片)内,UNIX内核将CPU分配给一个处理,到这段时间结束时,抢先这个处理,然后为另外一个处理安排下一个时间片。在前一时间片被抢先的处理被再次进行调度,在稍晚时间片内执行。
实现并推动处理间的通讯以及允许使用复杂网络协议的方法之一是采用套接字。内核有三个在客户服务器模式下发挥功能的层,包括套接字层、协议层和设备层。最顶层(套接字层)提供系统调用与其他层(协议层和设备层)之间的接口。一般来说,套接字层具有耦联客户程序和服务器程序的端点(end points)。套接字端点可以位于不同的机器上。中间层即协议层提供通信的协议模式,比如TCP和IP。底层即设备层包括控制网络设备的设备驱动器。一个设备驱动器的示例为基于以太网的以太网驱动器。
处理应用客户服务器模式进行交流。在这个模式里,服务器程序听从于一个端点的套接字,而客户程序通过在一个双向通信通路中的另一端点的套接字听从于服务器程序。内核维持着每个客户、服务器的三个层之间的内在通信并根据需要从客户到服务器发送数据。
套接字包含几个系统调用,其中包括一个建立了通信通路端点的套接字系统调用。很多程序使用在许多系统调用中的套接字描述符sd。绑定系统调用(bind system call)把一个名字和一个套接描述符sd联系起来。一些其它系统调用的范例包括连接系统调用(connectsystem call),其要求内核与套接字相联系,关闭系统调用(close systemcall)关闭套接字,切断系统调用(shutdown system call)关闭套接字连接,发送和接收系统调用(send and recv system call)通过一连接的套接字传输数据。
图46显示了的是本发明的另一个实施例,其中许多工作站通过一个网络共享一个单独的基于分时操作基础上的模拟系统。许多工作站通过调度程序1117与模拟系统耦联。在模拟系统的计算环境下,单独的CPU 11与在工作站1110上的局部总线12耦联。这种系统也可配备多CPU。如所属技术领域的技术人员所知,另外装备了操作系统1118,并且几乎所有的程序和应用存在于操作系统的顶部。为使概念清晰,操作系统1121连同总线1122一同被示出。
在图46中,工作站1110包括那些在图1中的部件/单元,他们连同调度程序1117和调度程序总线1118通过操作系统1121被耦联到局部总线12。调度程序1117通过向操作系统1121发出套接字调用控制分时访问用户站1111、1112,和1113。调度程序1117大部分在软件中实现,部分地在硬件中实现。
在这个图中,只显示了三个能够通过网络访问模拟系统的用户。当然,其他系统设置可具有三个以上或者不到三个用户。每一用户通过远程工作站1111、1112,或1113访问系统。远程用户站1111、1112和1113分别通过网络连接站1114、1115和1116被耦联到调度程序1117。
如所属技术领域的技术人员所知,设备驱动器1119是连接到PCI总线50和可重新配置的硬件单元20之间的。在设备驱动器1119和可重新配置的硬件单元20之间具有连接或导电路径1120。在本发明的该网络多用户实施例中,调度程序1117通过操作系统1121与设备驱动器1119连接,来联络和控制可重新配置的硬件单元20,用于硬件加速和硬件状态恢复后进行模拟。
另外,在一实施例中,模拟工作站1110是一个Sun Microsystem的Enterprise 450系统,其使用UltraSPARC II多处理器。与通过局部总线访问存储器不同,Sun 450系统可以使得多处理器通过一专门总线经由一纵横制接线器与存储器相连来访问存储器,而非联合局部总线。
图47显示了根据本发明的网络实施例的一模拟服务器的高层结构。这里,并没有明确显示出操作系统,但所属技术领域的技术人员都知道,总是存在着用于文件管理和资源分配的操作系统,服务于在模拟计算环境中的不同的用户、处理和装置。模拟服务器1130包括调度程序1137、一个或多个设备驱动器1138,和可重新配置的硬件单元1139。虽然在图45和46中,模拟服务器并未作为一个单个整体单元被清楚地显示出来的,但它包括调度程序1117,设备驱动器1119和可重新配置的硬件单元20。回到图47,模拟服务器1130分别通过网络连接/路径1134、1135和1136与三个用户工作站1131、1132和1133耦联。如上所述,也可有多于三个或不到三个工作站与模拟服务器1130耦联。
在模拟服务器中的调度程序建立在一个抢先轮转算法基础上。实质上,轮转方案允许几个用户或程序按顺序地执行以完成循环操作。这样,每个模拟作业(与网络环境下的一个工作站或多处理非网络环境下的一个用户/程序相联系)就被授予优先等级和执行所需的固定的时间片。
通常,具有更高优先权的作业首先被执行完。在一种极端情况下,如果每一个不同的用户有不同的优先权,那么就先服务拥有最高优先权的用户直到其作业结束为止,而最后服务拥有最低优先权的用户。在此不使用分时,因为每一个用户有不同的优先权,并且调度程序仅根据优先权来服务于用户。这种情形与只有一位用户访问模拟系统直到完成的情况相似。
另一个极端情况就是不同的用户有相同的优先权。这样就使用先进先出(FIFO)排列的时间片概念。对于拥有相同优先权的作业,无论从哪一个先开始,每一项作业都执行到其结束或固定时间片终止。如果作业在其时间片内没有完成,则必须保存与其已完成的任务相关的模拟图象,用于以后的恢复和执行。然后这项未完的作业就排在序列最后。然后在下一个时间片内恢复和执行已经保存的下一个作业的模拟图象(如果有的话)。
较高优先权的作业可以抢先较低优先权的作业。换句话说,相同优先权的作业以轮转模式执行直到其通过时间片完成。其后,以轮转模式执行较低优先权的作业。如果某一较高优先权的作业被插入到序列中而一个较低优先权的作业正在运行,那么较高优先权的作业将优先于较低优先权的作业,直到较高优先权的作业执行完。因此,较高优先权的作业在较低优先权的作业开始执行之前就运行完成了。如果较低优先权的作业已经开始执行,则会中止执行较低优先权的作业直到较高优先权的作业执行完。
在一个实施中,UNIX操作系统提供基本和基础的抢先轮转调度算法。根据本发明的一实施例,模拟服务器的调度程序算法与操作系统的调度程序算法协同工作。在以UNIX为基础的系统中,调度程序算法的抢先特征使操作程序可以抢占用户定义的调度。为使分时操作计划能够实施,模拟调度程序使用了一种在操作系统本身调度算法之上的抢先多重优先权轮转算法。
根据本发明的一实施例,多用户和模拟服务器之间的关系遵循一个客户服务器模式,其中多用户是客户,而模拟服务器是服务器。用户客户与服务器之间通过套接字调用进行通讯。简要参考图55,客户包括客户程序1109、一个套接字系统调用部件1123、UNIX内核1124和TCP/IP协议部件1125。服务器包括一个TCP/IP协议部件1126、UNIX内核1127、套接字系统调用部件1128和模拟服务器1129。多客户可能需要模拟作业通过客户应用程序发出的UNIX套接字调用在服务器中被执行模拟。
在一个实施例中,一个典型的事件顺序包括多个客户通过UNIX套接字协议向服务器发送请求。对于每个请求,服务器都认为它是关于指令是否执行成功的。可是,对于服务器队列状态的请求,服务器应答以当前队列的状况以便恰当地呈现给用户。下表F列出了来自客户的相关套接字指令
表F:客户套接指令
指令 |
描述 |
0 |
开始模拟<design> |
1 |
暂停模拟<design> |
2 |
退出模拟<design> |
3 |
对模拟进程重新分配优先权 |
4 |
存储设计模拟状态 |
5 |
队列状态 |
对于每一个套接字调用,用整数编码的每一条指令后面可能有一些附加参数如代表设计名称的<design>参数。如果这条指令成功执行,模拟服务器发出的回应是0,如果失败则是1。对于要求队列状态的指令5,指令反馈的一个实施例是以“\0”字符结尾的ASCII文字,显示在用户的显示屏上。在使用了这些系统套接字调用后,可通过设备驱动器向可重新配置的硬件单元发出或从其接收正确的通讯协议信号。
图48是根据本发明一个实施例的模拟服务器的结构。如上所述,单个模拟服务器可对多用户或处理提供服务以达到在分时操作方式下对用户设计中的模拟和硬件加速的目的。因此,用户/处理1147、1148、1149分别通过处理间通讯线路1150、1151、1152与模拟服务器1140耦联。这些处理间通讯线路可存在于同一个工作站中用于多处理器设置和操作,或者存在于网络中用于多工作站的使用。为了与可重新配置的硬件单元进行通讯,每个模拟进程包含软件模拟状态及硬件状态。软件进程之中的处理间通讯通过UNIX套接字或系统调用来执行,它能够让装备有模拟器插入卡时,这个模拟进程存在于同一工作站上,或者存在于通过TCP/IP网络相连的分离的工作站上。这样,与模拟服务器的通讯可以自动启动。
在图48中,模拟服务器1140包括服务器显示器1141、一个模拟作业队列表1142、一个优先级分类器1143、一个作业交换器1144、设备驱动器1145和可重新配置的硬件单元1146,模拟作业队列表1142、优先级分类器1143和作业转换器1144组成了图47所示的调度程序1137。
服务器显示器1141为系统管理员提供用户接口功能。用户可以通过命令系统显示队列中的模拟作业,调度优先权、使用记录和模拟作业交换效率来监控模拟服务器的状态。其他使用功能还包括编辑作业优先权,删除模拟作业以及重新设置模拟服务器状态。
模拟作业队列表1142所列出的是由调度程序插入的队列中所有未完成的模拟请求。这个表格包括作业号、软件模拟处理号、软件模拟图象、硬件模拟图象文件、设计配置文件、优先权号、硬件大小、软件大小、模拟运行的积累时间和拥有者的身份。作业队列按照“先进先出”(FIFO)的排队方式实现。因此,当要求一个新的作业时,它被置于队列的末尾。
优先级分类器1143决定执行队列中哪一个模拟作业。在一个实施例中,模拟作业优先方案是可以由用户定义(即可以被系统管理员控制和设定),以此来控制哪一个模拟处理享有当前执行的优先权。在一个实施例中,根据特定处理的紧迫性或者具体用户的重要性来确定优先级别。在另外一个实施例中,优先级是动态的,在模拟过程中可以改变。在优选实施例中,根据用户ID设置优先级。典型的,一个用户拥有高的优先权,而其他用户享有较低但相同的优先权。
优先性的级别可由系统管理员设定。模拟服务器从UNIX环境中获得所有用户信息,比较典型的是在名为“/etc/passwd”的UNIX用户文件中发现的。增加新的用户过程是与在UNIX系统内增加新用户过程一致。当所有的用户被定义后,就可以用模拟器服务器的显示器来为不同用户调整优先级别。
作业交换器1144根据为调度程序编程的优先级确定来临时用与一个处理或工作站关联的模拟作业替换与不同处理或工作站关联的另一个的模拟作业。如果多用户正在模拟同一设计,作业交换器只换入存储的模拟状态用于模拟进程。但是,如果多用户正在模拟多个设计,那么作业交换器将在换入模拟状态前为硬件配置加载这个设计。在一个实施例中,由于只需要为可重新配置的硬件单元的访问完成作业交换,所以这个作业交换机制提高了本发明的分时操作实施例的性能。因此,如果一个用户在某时间段内需要进行软件模拟,那么服务器便会为其他用户换入其它作业,这样那个用户便可以访问可重新配置的硬件单元用于硬件加速。用户可以调节并设定作业交换频率。设备驱动器也可以和可重新配置的硬件单元进行通讯以交换作业。
现在将讨论模拟服务器的操作。图49是一个模拟服务器在操作过程中的流程图。起初系统在步骤1160是空闲的,此时,模拟服务器没有必要处于待用状态,或者说模拟进程不在运行当中。其实,空闲状态可能意味着如下情况之一:(1)没有模拟运行,(2)在单个处理器环境中只有一个用户/工作站是处于激活状态以致不需要分时操作,或(3)在多处理环境中只有一个用户或工作站处于激活状态,但是仅一个处理在运行。因此,上述2和3两种情况表明,模拟服务器仅需处理一项作业,因此排列作业,决定优先级和作业交换都是不需要和不必要的。由于没有从其他工作站或者处理中接收请求,因此模拟服务器处于空闲状态。
当从多用户环境下的一工作站或从多处理器环境下的一微处理器发出一个或多个请求信号而导致一个模拟请求产生的时候,模拟服务器将在步骤1162对进入的一个或多个模拟作业进行排序。调度程序保持一模拟作业队列表,将所有未完成的模拟请求插入其中并列出所有未完成的模拟请求。对于批处理模拟作业,服务器中的调度程序给进入的所有模拟请求排队,并且自动处理这些作业,不需人工介入。
接着在步骤1163中,模拟服务器将对排列好的各作业进行分类以便决定优先权。这一步对于多个作业特别重要,因为服务器必须在各作业中确定优先顺序以访问可重新配置的硬件单元。优先级分类器决定执行队列中的哪个模拟作业。在一个实施例中,若出现资源争用,模拟作业优先级方案可由用户定义(即可由系统管理员控制和定义),以控制哪个模拟程序具有当前执行优先级。
在步骤1163优先级分类之后,服务器在需要时将在步骤1164交换模拟作业。这一步骤将根据为服务器中的调度程序设定的优先顺序,暂时用与一程序或工作站关联的一模拟作业来代替与另一程序或工作站关联的另一模拟作业。如果多个用户模拟同一个设计,作业交换器将只换入已存储的模拟状态用于模拟进程。而若多个用户在模拟不同的设计,作业交换器将先加载设计再换入模拟状态。这里,设备驱动器也与可重新配置的硬件单元进行通讯以交换作业。
在一实施例中,作业交换机制提高了本发明的分时操作实施效果,因为作业交换只在访问可重新配置的硬件单元时需要执行。因此,若一个用户在某个时间段内进行软件模拟,服务器会为另一用户换入另一作业,这样该另一用户就可访问可重新配置的硬件单元以进行硬件加速。例如,假设用户1和用户2均通过模拟服务器访问可重新配置的硬件单元。首先,在一段时间内用户1访问系统,可以调试他/她的用户设计。若用户1只在软件模式下进行调试,服务器就可释放可重新配置的硬件单元,此时用户2即可访问它。服务器换入用户2的作业,于是用户2可以软件模拟或硬件加速模型。根据用户1和用户2之间的优先顺序,用户2在预定的时间内可以继续访问可重新配置的硬件单元,或者在用户1需要可重新配置的硬件单元来加速时,服务器可抢占用户2的作业,这样用户1的作业即可被换入并通过可重新配置的硬件单元进行硬件加速。预定的时间是指基于具有相同优先级的多个请求的模拟器作业的占先。在一实施例中,虽然用户可以对它进行设置,但系统默认时间是5分钟。这个5分钟的设置代表了一种超时计时器的形式。本发明的模拟系统使用超时计时器来停止当前模拟作业的执行是因为该作业太耗时,系统因此决定其他具有同样优先级的待决作业应该访问可重新配置的硬件模型。
在步骤1164,作业交换步骤完成以后,服务器中的设备驱动器将锁住可重新配置的硬件单元,这样只有当前计划中的用户或程序可以模拟并使用硬件模型。锁存和模拟步骤发生在步骤1165。
一旦在事件1166模拟完成或是当前模拟进程发生暂停,服务器将返回优先级分类步骤1163以决定各待决模拟作业的优先级,并在必要时进行随后的模拟作业交换。类似地,在步骤1167中服务器也可能抢占当前模拟作业的执行而返回至优先级分类状态1163。抢占只在特定条件下发生。其中一个这样条件是具有更高优先权的作业等待处理。另外一个这样的条件是当系统正运行一个计算密集的模拟任务,此时调度程序可被设计为利用超时计时器阻止当前运行的作业而处理具有同样优先性的另一个作业。在一实施例中,超时计时器被设定在5分钟。若当前作业执行了5分钟,系统将抢占当前作业而换入即使处于同等优先地位的待决作业。
图50显示了作业交换处理的流程图。作业交换功能在图49的步骤1164中实现,并在图48中作为作业交换器1144显示在模拟服务器的硬件里。在图50中,当一个模拟作业需要与另外一个模拟作业交换时,作业交换器会在步骤1180中向可重新配置的硬件单元传送一个中断。如果可重新配置的硬件单元当前并不运行任何作业(即系统空闲或者用户只在软件模式中进行操作,没有涉及任何硬件加速),则该中断使可重新配置的硬件单元立即作好作业交换的准备。然而,若可重新配置的硬件单元正在运行一项作业并正在执行一个指令或处理数据,中断信号将被识别,但可重新配置的硬件单元仍继续执行当前待决指令并处理当前作业的数据。若可重新配置的硬件单元并非在对当前作业进行指令执行或数据处理的过程中接受了中断信号,则该信号实质上立即终止了可重新配置的硬件单元的操作。
在步骤1181中,模拟系统保存了当前模拟图像(即软件和硬件状态)。通过保存该图像,用户随后可以不必重新运行至该保存点的整个模拟而恢复模拟的运行。
在步骤1182中,模拟系统为可重新配置的硬件单元配置了新的用户设计。这个配置步骤只有在下面的情况下才是必要的:即与新的作业相关的用户设计与刚被中止执行的可重新配置的硬件单元中已配置并加载的用户设计不同。在配置完成之后,被保存的硬件模拟图像在步骤1183中重新加载,而被保存的软件模拟图像则在步骤1184中重新加载。若新的模拟作业与同样的设计相关,则不需要再进行设置。对于同样的设计,模拟系统将在步骤1183中加载所期望的与相同设计的新的模拟作业有关的硬件模拟图像,因为新作业的模拟图像与刚被中止的作业的模拟图像可能有所不同。配置步骤的详情请见本专利说明书。此后,相关的软件模拟图像在步骤1184中重新加载。在重新加载软件和硬件模拟图像后,新作业的模拟将在步骤1185中开始,而前一个被中止的作业只能在软件模拟模式下进行,因为它暂时不能访问可重新配置的硬件单元。
图51显示设备驱动器和可重新配置的硬件单元之间的信号。设备驱动器1171提供了调度程序1170和可重新配置的硬件单元1172之间的接口。如图45和46所示,设备驱动器1171还提供了整个计算环境(即工作站,PCI总线,PCI设备)和可重新配置的硬件单元1172之间的接口,但图51只显示了模拟服务器部分。设备驱动器和可重新配置的硬件单元之间的信号包括双向通信交换信号、从计算环境经由调度程序传向可重新配置的硬件单元的不定向设计配置信息、换入模拟状态信息、换出模拟状态信息,以及从设备驱动器传向可重新配置的硬件单元以交换模拟作业的中断信号。
线路1173传递双向通信交换信号,这些信号和交换协议将结合图53和图54进行讨论。
线路1174传递从计算环境经由调度程序1170传向可重新配置的硬件单元1172的不定向设计配置信息。为进行模型化初始,配置信息可以通过线路1174传向可重新配置的硬件单元1172。另外,当用户在模型化和模拟不同的用户设计时,配置信息必须在一个分时内传送至可重新配置的硬件单元1172。当不同的用户在模型化同一个用户设计时,新的设计配置是不必要的;而为了不同的模拟运行,可能需要将与同一个设计相关的不同的模拟硬件状态传向可重新配置的硬件单元1172。
线路1175向可重新配置的硬件单元1172传送换入模拟状态信息。线路1176传送从可重新配置的硬件单元到计算环境(通常为存储器)的换出模拟状态信息。换入模拟状态信息包括先前保存的硬件模型状态信息和可重新配置的硬件单元1172需要加速的硬件存储器状态。换入模拟状态信息是时间片的开始进行传送的,这样预定的当前用户就可以访问可重新配置的硬件单元以进行加速。换出模拟状态信息包括可重新配置的硬件单元1172接收中断信号而移至与一不同的用户/程序相关的下一个时间片后,在一时间片的末尾必须被保存到存储器中的硬件模型和存储器状态信息。状态信息的存储使得当前用户/程序可以在稍后的时间内(例如分配给当前用户/程序的下一个时间片)恢复该状态。
线路1177从设备驱动器1171向可重新配置的硬件单元传送中断信号以进行模拟作业的交换。中断信号在时间片之间传送,这样才能在当前时间片换出当前模拟作业而在下一时间片换入新的模拟作业。
现在,在参照图53和图54的基础上,讨论根据本发明的一实施的通信交换协议。图53显示了设备驱动器和可重新配置的硬件单元之间通过一交换逻辑接口传输的通信交换信号。图54是通信协议的状态图。图51显示了线路1173上的通信交换信号。图53则是设备驱动器和可重新配置的硬件单元之间的通信交换信号的详细情形。
在图53中,交换逻辑接口1234位于可重新配置的硬件单元1172中。或者,交换逻辑接口1234可安装在可重新配置的硬件单元1172的外部。在设备驱动器1171和交换逻辑接口1234之间有四组信号。这些信号是线路1230上的3字节SPACE(空间)信号、线路1231上的单字节读/写信号、线路1232上的4字节COMMAND(命令)信号,以及线路1233上的单字节DONE(完成)信号。交换逻辑接口包含了处理这些信号的逻辑电路,将可重新配置的硬件单元放置于适当的模式之下以执行需要运行的不同操作。该接口与CTRL FPGA单元(或者FPGA输入/输出控制器)相连。
对于3字节SPACE信号来说,建立在PCI总线之上的模拟系统计算环境与可重新配置的硬件单元之间的数据传输被指定到软件/硬件边界中的特定I/O地址空间--REG(寄存器)、CLK(软件时钟)、S2H(软件到硬件)和H2S(硬件到软件)中。正如前文所述,模拟系统根据不同的部件类型和控制功能将硬件模型映射到主存储器的四个地址空间中:REG空间被指定用于寄存器部件;CLK空间被指定用于软件时钟;S2H空间被指定用于软件测试平台部件到硬件模型的输出;H2S空间则被指定用于硬件模型到软件测试平台部件的输出。在系统初始化的时间中,这些专用的输入/输出缓冲空间将被映射到内核的主存储空间。
下表G表明了描述了每个SPACE信号的描述:
表G:SPACE信号
|
000 |
全局(或CLK)空间和软件到硬件(DMA wr) |
001 |
写寄存器(DMA wr) |
010 |
硬件到软件(DMA rd) |
011 |
读寄存器(DMA rd) |
100 |
SRAM写(DMA wr) |
101 |
SRAM读(DMA rd) |
110 |
未使用的 |
111 |
未使用的 |
线路1231上的读/写信号表明该数据是读还是写。线路1233上的DONE信号表示一个DMA数据传输期间的结束。
4字节COMMAND表明该数据传输操作是读、写、配置新的用户设计进入可重新配置的硬件单元中,还是中断模拟。COMMAND协议如下表H所示:
表H:COMMAND信号
|
0000 |
在指定空间写 |
0001 |
从指定空间读取 |
0010 |
配置FPGA设计 |
0011 |
中断模拟 |
现在参考图54的状态图讨论通信交换协议。在状态1400,设备驱动器模拟系统空闲。只要没有新的命令发出,该系统将如路径1401所示保持空闲状态。当新的命令发出时,命令处理器将在状态1402中处理新的命令。在本实施例中,命令处理器是FPGA输入/输出控制器。
若COMMAND=0000或者COMMAND=0001,系统将如状态1403的SPACE指数表明的那样在指定空间进行读或写。若COMMAND=0010,系统在状态1104将开始用一用户设计对在可重新配置的硬件中的FPGA进行配置,或者用一新的用户设计对FPGA进行配置。系统将为所有的FPGA进行配置信息的排序,以模型化用户设计中可以在硬件中模拟的一部分。然而,如果COMMAND=0011,系统将在状态1405中断可重新配置的硬件单元以中断模拟系统,因为时间片已经超时,准备为新的用户/程序换入新的模拟状态。在这些状态1403、1404、1405结束之后,模拟系统会进入DONE状态1406以产生DONE信号,然后即返回状态1400并保持空闲状态直到新的命令出现。
现在讨论模拟服务器在处理多个处于不同优先级上的作业时的分时操作特征。图52给出了一个例子:模拟作业队列中有四个即将进行的作业(作业A、作业B、作业C、作业D)。但这四个作业的优先级有所不同:作业A和作业B被指定为高优先级I,作业C和作业D则为低优先级II。正如图52的时线图中所显示的,可重新配置的硬件分时操作的使用取决于待决作业队列的优先等级。在时间1190,模拟从作业A开始,准许其访问可重新配置的硬件单元。在时间1191,作业A被作业B抢占,因为作业B和作业A有同等的优先级,调度程序对两作业提供了平等的分时操作访问权限。作业B现在访问可重新配置的硬件单元。在时间1192,作业A抢占作业B并在时间1193执行至完成。在时间1193,作业B接着进行并在时间1194执行至完成。在时间1194,处于作业队列中下一位但比作业A和作业B的优先级低的作业C访问可重新配置的硬件单元并开始执行。在时间1195,作业D抢占作业C,进行分时操作访问,因为它们具有同等优先级。作业D的访问权限到时间1196中止,此时它被作业C抢占。作业C在时间1197执行完毕,然后作业D在时间1197重新获得访问权限并在时间1198执行完毕。
VIII.存储器模拟
本发明的存储器模拟或存储器映射特征为模拟系统提供了一个有效的方法来管理多个与用户设计的配置好的硬件模型相关的存储器区块,而此用户设计的程序是编在可重新配置的硬件单元的FPGA芯片阵列中的。通过实施本发明的实施例,存储器模拟方案不需要FPGA芯片上任何专用的引脚来处理存储器访问。
这里所用的“存储器访问”是指FPGA逻辑装置和SARAM存储器装置之间的一读或一写的访问,用户设计被配置在FPGA逻辑装置中,而SRAM存储器装置存储了所有与用户设计有关的存储器区块。因此,写操作涉及FPGA逻辑装置到SRAM存储器装置的数据传送,而读操作涉及从SRAM存储器装置到FPGA逻辑装置的数据传送。参照图56,FPGA逻辑装置包括1201(FPGA1)、1202(FPGA3)、1203(FPGA0)和1204(FPGA2),而SRAM存储器装置则包括存储器装置1205和1206。
同时,“DMA数据传送”除了所属技术领域的技术人员所了解的普通用法,它还指在计算系统和模拟系统之间的数据传送。图1、图45和图46显示的计算系统是整个基于PCI并带有存储器的系统,它支持位于软件和可重新配置中的模拟系统。所选的设备驱动器和操作系统所发出或接收的套接字/系统调用也是模拟系统的一部分,该部分提供了与操作系统和可重新配置的硬件单元的适当的接口。在本发明的一实施例中,一个DMA读取传送包括从FPGA逻辑装置(和用于初始化和存储内容转储的FPGA SRAM存储器装置)到主机计算系统的数据传送。一个DMA写传送包括从主机计算系统到FPGA逻辑装置(和用于初始化和存储内容转储的FPGA SRAM存储器装置)的数据传送。
这里提到的术语“FPGA数据总线”、“FPGA总线”、“FD总线”以及其他种种变化的说法是指高端组总线FD[63:32]和低端组总线FD[31:0],这些总线连接了包含有待调试的已配置和已编程的用户设计的FPGA逻辑装置和SRAM存储器装置。
存储器模拟系统包括一存储状态机、一估算状态机以及与它们相关的逻辑,控制和连接:(1)主计算系统和其相关存储系统,(2)模拟系统中与FPGA总线相连的SRAM存储器装置,(3)包含正被调试的配置好并编程好的用户设计的FPGA逻辑装置。
存储器模拟系统的FPGA逻辑装置端包括一估算状态机、一FPGA总线驱动器,以及用于每个存储器区块N与用户设计中用户自身的存储器接口相连的一逻辑接口,处理:(1)FPGA逻辑装置之间的数据估算,以及(2)SRAM存储器装置和FPGA逻辑装置之间的读/写存储器访问。FPGA输入/输出控制器端是与FPGA逻辑装置端相连的,它包括存储状态机和逻辑接口并处理:(1)主计算系统和SRAM存储器装置,以及(2)FPGA逻辑装置和SRAM存储器装置之间的DMA、读、写操作。
根据本发明的一实施例,存储器模拟系统的操作的描述大体如下。模拟读/写循环分为三个阶段:DMA数据传输,估算和存储器访问。DATAXSFR信号表明DMA数据传输阶段的出现,在此阶段,计算系统和SRAM存储单元之间通过FPGA数据总线——高端组总线1212(FD[63:32])和低端组总线1213(FD[31:0])——互相传送数据。
在估算阶段,每个FPGA逻辑装置中的逻辑电路生成正确的软件时钟、输入启动和多路复用启动信号到用户的设计逻辑中进行数据估算。FPGA逻辑装置间的通信在这个阶段发生。
在存储器访问阶段,存储器模拟系统等待高端和低端组FPGA逻辑装置将它们各自的地址和控制信号放置于各自的FPGA数据总线上。CTRL_FPGA单元将锁存这些地址和控制信号。若进行写操作,则地址、控制和数据信号将被从FPGA逻辑装置传送至各自的SRAM存储器装置。若进行读操作,则地址和控制信号将被提供给指定的SRAM存储器装置,而数据信号则由SRAM存储器装置传向各自的FPGA逻辑装置。在所有FPGA逻辑装置中的所有需要的存储器区块被访问之后,存储器模拟读/写循环完成,而存储器模拟系统在下一个存储器模拟读/写循环到来之前保持闲置状态。
图56显示的是根据本发明一实施例的存储器模拟配置的高层结构图。与本发明的存储器模拟不相关的信号、连接以及总线没有被显示出来。上面叙述过的CTRL_FPGA单元1200,通过线路1209和总线1210相连接。在一实施例中,CTRL_FPGA单元1200是FPGA芯片形式的可编程逻辑装置(PLD),例如Altera 10K50芯片。局部总线1210使得CTRL_FPGA单元1200可以和其他模拟阵列板(如果有的话)和其它芯片(如PCI控制器、EEPROM、时钟缓冲器)相连接。线路1209传送DONE信号,该信号表示一个模拟DMA数据传输阶段的完成。
图56以逻辑装置和存储器装置的形式显示了其他主要的功能性区块。在本发明的一实施例中,逻辑装置是以FPGA芯片形式的可编程逻辑装置(PLD),例如Altera 10K130或10K250芯片。因此,与前面所示的实施例中阵列内有8个Altera FLEX 10K100芯片不司,本实施例只使用了四个Altera FLEX 10K130芯片。存储器装置是一个同步的管线式高速缓存SRAM,例如Cypress 128Kx32 CY7C1335或CY7C1336芯片。逻辑装置包括1201(FPGA1)、1202(FPGA3)、1203(FPGA0)和1204(FPGA2)。SRAM芯片包括低端组存储器装置1205(L-SRAM)和高端组存储器装置1206(H-SRAM)。
这些逻辑装置和存储器装置通过高端组总线1212(FD[63:32])和低端组总线1213(FD[31:0])与CTRL_FPGA单元1200相连接。逻辑装置1201(FPGA1)和1202(FPGA3)分别通过总线1223和总线1225与高端组总线1212相连接,而逻辑装置1203(FPGA0)和1204(FPGA2)则分别通过总线1224和总线1226与低端组数据总线1213相连接。高端组存储器装置1206通过总线1220与高端组总线1212相连接,而低端组存储器装置1205通过总线1219与低端组总线1213相连接。这种双重的组总线结构可以使模拟系统以更高的通过率并行进入高端组装置和低端组装置。这种双重的组数据总线结构同时支持其他信号,如控制信号和地址信号,这样就可以控制模拟读/写循环。
翻到图61,每个模拟读/写循环包括DMA数据传输阶段、估算阶段和存储器访问阶段。多种控制信号的结合控制并表明模拟系统是否处于与另外一阶段相对的某阶段。主计算系统与可重新配置的硬件单元的逻辑装置1201到1204之间的DMA数据传输通过PCI总线(如图46中的总线50)、局部总线1210和1236,以及FPGA总线1212(FD[63:32])和1213(FD[31:0])进行的。DMA数据传输所涉及的存储器装置1205和1206是执行初始化和存储内容转储的。可重新配置的硬件单元中逻辑装置1201到1204之间的估算数据传输是通过互连(如上文所述)和FPGA总线1212(FD[63:32])和1213(FD[31:0])进行。逻辑装置1201到1204以及存储器装置1205和1206之间的存储器访问是通过FPGA总线1212(FD[63:32])和1213(FD[31:0])进行的。
再回到图56,CTRL_FPGA单元1200提供并接收了许多控制和地址信号,以控制模拟读/写循环。CTRL_FPGA单元1200通过线路1221分别向逻辑装置1201和1203,以及通过线路1222分别向逻辑装置1202和1204提供线路1211上的DATAXSFR和EVAL信号。CTRL_FPGA单元1200还分别通过总线1229和1214向低端组存储器装置1205和高端组存储器装置1206提供MA[18:2]信号。为了控制这些存储器装置的模式,CTRL_FPGA单元1200分别通过总线1216和1215向低端组存储器装置1205和高端组存储器装置1206提供芯片选择读(和写)信号。存储器模拟系统可以在总线1209上向CTRL_FPGA单元1200和计算系统发出或接收DONE信号来表明DMA数据传输的完成。
正如在前面结合图9、11、12、14和15时提到的,逻辑装置1201到1204是通过多路复用跨芯片地址指示器链路连接在一起的,这种指示器链在图56中体现为两组SHIFTIN/SHIFTOUT线路:线路1207、1227和1218以及线路1208、1228和1217。这些线路组在链的开始处初始于线路1207和1208上的Vcc。SHIFTIN信号从前面的组中的FPGA逻辑装置中传出并开始对当前FPGA逻辑装置的存储访问。在通过一组特定的链所进行的移位完成之后,最后的逻辑装置向CTRL_FPGA单元1200发出LAST信号(即LASTL或LASTH)。对于高端组,逻辑装置1202在线路1218上向CTRL_FPGA单元1200发出LASTH移出信号,而对于低端组,逻辑装置1204在线路1217上向CTRL_FPGA单元1200发出LASTL信号。
至于电路板实施和图56,本发明的一实施例将部件(如逻辑装置1201-1204,存储器装置1205-1206,和CTRL_FPGA单元1200)和总线(如FPGA总线1212-1213和局部总线1210)合并在一个电路板上。这个电路板通过主板连接器与主板相连接。因此,在一个电路板上有四个逻辑装置(每个组上两个),两个存储器装置(每个组上一个),以及总线。第二个电路板上则包括它自身的逻辑装置(通常为四个),存储器装置(通常为两个),FPGA输入/输出控制器(CTRL_FPGA单元)和总线。但PCI控制器只安装在第一个电路板上。电路板之间有上文提到的电路板间连接器,这样所有电路板上的逻辑装置可以连在一起,并在估算时可以互相通讯,另外在所有电路板之间设有局部总线。每个电路板上都设有FPGA总线FD[63:0],但它们不跨越多个电路板。
在此电路板配置中,模拟系统在每个电路板上的逻辑装置和存储器装置之间进行存储器映射,但不支持不同电路板之间的存储器映射。因此,电路板5上的逻辑装置只能将存储器区块映射到电路板5上的存储器装置而不能映射到其他电路板上的存储器装置。但在其它实施例中,模拟系统则可以将存储器区块从一个电路板上的逻辑装置映射到另外一个电路板上的存储器装置。
根据本发明的一实施例的存储器模拟系统的操作大致如下。模拟读写循环分为三个阶段:DMA数据传输、估算和存储器访问。为显示一个模拟读写循环的完成,存储器模拟系统可以在线路1209上向/从CTRL_FPGA单元1200和计算系统传送/接收DONE信号。总线1211上的DATAXSFR信号表明DMA数据传输阶段的发生,在该阶段中,计算系统和FPGA逻辑装置1201到1204通过FPGA数据总线、高端组总线1212(FD[63:32])和低端组总线1213(FD[61:0])互相传送数据。总的说来,DMA传送发生在主计算系统和FPGA逻辑装置之间。对于初始化和存储内容转储,DMA传送发生在主计算系统与SRAM存储器装置1205和1206之间。
在估算阶段,每个FPGA逻辑装置1201-1204中的逻辑电路为用户设计逻辑生成适当的软件时钟、输入启动和多路复用启动信号以进行数据估算。FPGA逻辑装置间的通信发生于此阶段。CTRL_FPGA单元1200也启动估算计数器以控制估算周期的持续时间。计数的数量,以及相应的估算周期的持续时间由系统通过确定信号的最长路径来设定。路径长度与具体数量的步骤相关。系统使用此步骤信息并计算出使得估算循环能够完成运行所需要的计数数量。
在存储器访问阶段,存储器模拟系统等待高低端组FPGA逻辑装置1201-1204分别将其地址和控制信号存放于各自的FPGA数据总线上。CTRL_FPGA单元1200将锁存这些地址和控制信号。对于写操作,地址、控制和数据信号将从FPGA逻辑装置1201-1204传送至各自的SRAM存储器装置1205和1206。对于读操作,地址和控制信号将从FPGA逻辑装置1201-1204传送至各自的SRAM存储器装置1205和1206,而数据信号则由SRAM存储器装置1205和1206传向各自的FPGA逻辑装置1201-1204。在FPGA逻辑装置端,FD总线驱动器将一存储器区块的地址和控制信号置于FPGA数据总线(FD总线)之上。若是写操作,写数据被放置于FD总线上用于该存储器区块。若是读操作,双缓冲器将从SRAM存储器装置为FD总线上的存储器区块锁存数据存储器区块。这个操作在每个FPGA逻辑装置的每个存储器区块中按顺序进行,每次只在一个存储器区块中进行。当一个FPGA逻辑装置上所有需要的存储器区块均已被访问时,存储器模拟系统将进入每个组的下一个FPGA逻辑装置并开始对该FPGA逻辑装置的存储器区块的访问。在所有FPGA逻辑装置1201-1204上所有需要的存储器区块均被访问后,存储器模拟读/写循环完成,存储器模拟系统将保持闲置状态,直到下一个存储器模拟读/写循环的到来。
图57是本发明存储器模拟方面的更详细的结构图,包括CTRL_FPGA单元1200更加详细的结构图以及与存储器模拟相关的所有逻辑装置。图57显示了CTRL_FPGA单元1200和逻辑装置1203的一部分(其结构类似于其它逻辑装置1201、1202和1204的部分)。CTRL_FPGA单元1200包括存储器有限状态机(MEMFSM)1240,“与”门1241,估算(EVAL)计数器1242,低端组存储器地址/控制锁存器1243,低端组地址/控制多路复用器1244,地址计数器1245,高端组存储器地址/控制锁存器1247以及高端组地址/控制多路复用器1246。每个逻辑装置,例如图57中所显示的逻辑装置1203,包括估算有限状态机(EVALFSMx)1248和数据总线多路复用器(用于逻辑装置FPGA0 1203的FDO-MUXx)1249。EVALFSM结尾所附的“x”表示与之相关的特定逻辑装置(FPGA0,FPGA1,FPGA2,FPGA3),这个例子中的“x”表示从0到3之间的一个数。因此,EVALFSM0与逻辑装置1203的FPGA0相关。总的说来,每个逻辑装置都与一些数字x相关。而对于使用的N个逻辑装置,x则代表从0到N-1的某个数。
在1201-1204的每个逻辑装置中,大量存储器区块与配置好并被映射的用户设计相关。因此,用户逻辑中的存储器区块接口1253为计算系统进入需要的FPGA逻辑装置阵列的存储器区块提供了途径。存储器区块接口1253还将总线1295上的存储器写数据提供给FPGA数据总线多路复用器(FDO-MUXx)1249,并从存储器读数据双缓冲器1251接收总线1297上的存储器读数据。
每个FPGA逻辑装置都有一存储器区块数据/逻辑接口1298。每个这样的存储器区块数据/逻辑接口1298都连接着FPGA数据总线多路复用器(FDO-MUXx)1249、估算有限状态机(EVALFSMx)1248,和FPGA总线FD[63:0]。存储器区块数据/逻辑接口1298包括存储器读数据双缓冲器1251、地址补偿单元1250、存储器模型1252以及每个存储器区块N的存储器区块接口1253。它们同样也存在于每个存储器区块N的任何给定的FPGA逻辑装置1201-1204中。因此,如果有5个存储器区块,那么就有5组存储器区块数据/逻辑接口1298;也就是说对每个存储器区块N(mem_block_N),有5组存储器读数据双缓冲器1251、地址补偿单元1250、存储器模型1252,以及存储器区块接口1253。
和EVALFSMx一样,FDO-MUXx中的“x”也表示与之相关的特定逻辑装置(FPGA0、FPGA1、FPGA2、FPGA3),这里“x”表示从0到3之间的一个数。FDO-MUXx 1249的输出位于总线1282上,而总线1282则与高端组总线FD[63:32]或低端组总线FD[31:0]相连,至于与哪个总线相连取决于FDO MUXx 1249和哪个芯片(FPGA0、FPGA1、FPGA2、FPGA3)相关。在图57中,FDO-MUXx是和低端组逻辑装置FPGA0 1203相连的FDO-MUX0。因此,总线1282上的输出在低端组总线FD[31:0]上。总线1283部分被用来从高端组总线FD[63:32]或低端组总线FD[31:0]向读总线1283传送读数据,以将其输入到存储器读数据双缓冲器1251中。因此,写数据通过FDO-MUXx 1249从每个逻辑装置1201-1204上的存储器区块传输到高端组总线FD[63:32]或低端组总线FD[31:0]中,而读数据则通过读总线1283从高端组总线FD[63:32]或低端组总线FD[31:0]传输到存储器读数据双缓冲器1251中。存储器读数据双缓冲器利用双重缓冲机制锁存第一个缓冲器中的数据,然后再进行缓冲,同时释放被锁存数据以使偏差最小化。存储器读数据双缓冲器1251将在下文详细讨论。
再回到存储器模型1252,它将用户的存储器类型转化为存储器模拟系统的SRAM类型。因为用户设计中的存储器类型可能各不相同,因此对于每个用户设计,存储器区块接口1253也可能是唯一的。例如,用户存储类型可能是DRAM、闪存或EEPROM。但各种存储器区块接口1253中,均具有存储器地址和控制信号(如读、写、芯片选择、mem_clk)。在本发明的一实施例中,存储器模拟将用户存储器类型转化为在存储器模拟系统中使用的SRAM类型。若用户存储器类型为SRAM,那么它向SRAM型存储器模型的转化十分简单。因此,存储器地址和控制信号存在于总线1296上并传输到存储模型1252,而由1252执行转化。
存储器模型1252在总线1293上提供存储器区块地址信息并在总线1292上提供控制信息。地址补偿单元1250接收用于各存储器区块的地址信息,并根据总线1293上的原始地址在总线1291上提供修改补偿地址。因为特定的存储器区块地址可能互相覆盖,因此补偿很有必要。例如,一存储器区块可能占用并存在于空间0-2K,而另一存储器区块则可能占用并存在于空间0-3K。因为两个存储器区块在空间0-2K上重叠,所以如果没有一种地址补偿机制就很难进行单个地址读写。因此,第一个存储器区块可以占用并存在于空间0-2K,而第二个存储器区块则可占用并存在于2K以上至5K的空间。来自地址补偿单元1250的补偿地址和总线1292上的控制信号被结合起来提供给总线1299并被传输到FPGA总线多路复用器(FDO-MUXx)1249中。
FPGA数据总线多路复用器FDO-MUXx接收总线1289上的SPACE2数据、总线1290上的SPACE3数据、总线1299上的地址/控制数据,以及总线1295上的存储器写数据。如前所述,SPACE2和SPACE3是具体SPACE指数。由FPGA输入/输出控制器(图10中的327;图22)产生的SPACE指数选择出特定地址空间(即REG读,REG写,S2H读,H2S写,以及CLK写)。在该地址空间中,本发明的系统将按顺序选择将被访问的特定的字。SPACE2指专用于硬件至软件H2S数据的DMA读取传送的存储空间。SPACE3则指专用于REGISTER_READ数据的DMA读取传送的存储空间。参见上表G。
作为其输出,FDO_MUXx 1249在总线1282上为低端组或高端组总线提供数据。选择器信号是来自EVALFSMx单元1248的线路1284上的输出启动(output_en)信号以及线路1285上的选择信号。线路1284上的输出启动信号启动(或禁用)FDO_MUXx 1249的运行。对在FPGA总线上的数据访问而言,输出启动信号被启动来允许FDO_MUXx发挥功能。1285线路上的选择信号由EVALFSMx单元1248所产生,以便在来自总线1289上的SPACE2数据、总线1290上的SPACE3数据、总线1299上的地址/控制信号,以及总线1295上的存储器写数据的多个输入之中进行选择。EVALFSMx单元1248产生选择信号将会在下面得到进一步的讨论。
EVALFSMx单元1248是有关存储器模拟系统的每个逻辑装置1201-1204的操作核心。EVALFSMx单元1248接收下列信号作为其输入:线路1279上的SHIFTIN信号,线路1274上的来自CTRL_FPGA单元1200的EVAL信号,以及线路1287上的写信号wrx。EVALFSMx单元1248输出线路1280上的SHIFTOUT的信号、线路1286上发往存储器读数据双缓冲器1251的读锁存器信号rd_latx、线路1284上发往FDO_MUXx 1249的输出启动信号、线路1285上发往FDO_MUXx 1249的选择信号,以及线路1281上发往用户逻辑的三个信号(input_en,mux_en和clk_en)。
根据本发明一个实施例的、用于存储器模拟系统的FPGA逻辑装置1201-1204的运行通常如下所述。当EVAL信号处于逻辑1的时候,FPGA逻辑装置1201-1204内的数据估算开始;否则,模拟系统就正在运行DMA数据传输或存储器访问。在EVAL=1时,EVALFSMx单元1248产生clk_en信号,input_en信号,和信号,以便允许用户逻辑分别估算数据、锁存相关数据,以及多路传输逻辑装置间的信号。EVALFSMx单元1248产生clk_en信号来启动用户的设计逻辑中所有时钟边缘寄存器触发器中的第二触发器(见图19)。clk_en信号另外也被当作软件时钟。如果用户的存储器类型是同步的,clk_en也启动每个存储器区块中的存储器读数据双缓冲器1251的第二时钟。EVALFSMx单元1248为用户的设计逻辑产生input_en信号,以锁存由DMA传输从CPU传到用户逻辑的输入信号。input_en信号为主时钟寄存器中的第二触发器(见图19)提供启动输入。最后,EVALFSMx单元1248产生mux_en信号,打开每个FPGA逻辑装置中的多路传输电路,以开始与阵列中其他的FPGA逻辑装置进行通信。
其后,如果FPGA逻辑装置1201-1204包含至少一个存储器区块,那么存储器模拟系统就等待被选择的数据被移入所选的FPGA逻辑装置,然后为FPGA数据总线驱动器产生output_en和选择信号,以便把存储器区块接口1253(mem_block_N)的地址和控制信号放在FD总线上。
如果线路1287上的写信号wrx被启动(即,逻辑1),那么选择信号和output_en信号也被启动,将写数据放在低端或高端组总线之上,这取决于FPGA芯片被连接到哪一个组上。在图57中,逻辑装置1203是FPGA0,并且被连接到低端组总线FD[31:0]上。如果线路1287上的写信号wrx被禁用(即,逻辑0),那么选择信号和output_en信号被禁用,线路1286上的读锁存器信号rd-latx将通过低端或高端组总线(取决于FPGA芯片被连接到哪一个组)让存储器读数据双缓冲器1251锁存并双重缓冲来自SRAM的所选数据。wrx信号是起源于用户设计逻辑的存储器接口的存储器写信号。的确,线路1287上的wrx信号经由控制总线1292来自存储器模型1252。
这个读或写数据的过程在每个FPGA逻辑装置中都会发生。在所有的存储器区块都经由SRAM访问得到处理之后,EVALFSMx单元1248产生SHIFTOUT信号,以便允许链路中的下一个FPGA逻辑装置进行SRAM访问。请注意,针对高端和低端组的装置的存储器访问是并行发生的。有时,针对一个组的存储器访问可能在针对另一个组的存储器访问之前完成。对于所有这些访问而言,适当的等待周期被插入,以便只有当逻辑准备好、而且数据可用的时候,逻辑才会处理数据。
在CTRL_FPGA单元1200一方,MEMFSM 1240处于本发明存储器模拟方面的核心。它发送并接收许多控制信号,以便控制存储器模拟写/读周期的激活,并对周期所支持的各种运行进行控制。MEMFSM 1240经由线路1258接收线路1260上的DATAXSFR信号。这个信号也被提供到线路1273上的每个逻辑装置。当DATAXSFR变低时(即,逻辑低),DMA数据传输周期结束,而估算和存储器访问周期则开始。
MEMFSM 1240也接收线路1254上的一个LASTH信号,以及线路1255上的一个LASTL信号,以表明与所选的地址空间相关的所选字已经经由PCI总线和FPGA总线在计算系统和模拟系统之间得到访问。与这个移出过程相关的MOVE信号通过每个逻辑装置(举例来说,逻辑装置1201-1204)传播,直到所需的字得到访问,且MOVE信号最后在链路末端变成LAST信号(即,对于高端组的LASTH和对于低端组的LASTL)。在EVALFSM 1248(即,图57为逻辑装置FPGA0 1203显示为EVALFSMO)中,对应的LAST信号是线路1280上的SHIFTOUT信号。因为特定的逻辑装置1203并非如图56所示的低端组链路中的最后一个逻辑装置(图56中逻辑设备1204是低端存储体链路中的最后一个逻辑设备),所以针对EVALFSMO的SHIFTOUT信号不是LAST信号。如果EVALFSM 1248对应于图56中的EVALFSM2,那么线路1280上的SHIFTOUT信号就是在线路1255上提供到MEMFSM的LASTL信号。否则,线路1280上的SHIFTOUT信号就被提供到逻辑装置1204(见图56)。类似的,线路1279上的SHIFTIN信号代表FPGA0逻辑装置(见图56)1203的Vcc。
LASTL和LASTH信号是分别经由线路1256和线路1257进入“与”门1241的输入。“与”门1241具有一个漏极开路。“与”门1241的输出产生线路1259上的DONE信号,这个信号被提供到计算系统和MEMFSM 1240。因此,只有当LASTL和LASTH信号都是逻辑高、表明移出链过程结束时,“与”门才输出一个逻辑高。
MEMFSM 1240在线路1261上产生一个到EVAL计数器1242的起始信号。正如该名称所暗示的那样,起始信号触发EVAL计数器1242的开始,并且在DMA数据传输周期完成之后被发送。起始信号在侦测到DATAXSFR信号从高到低(1到0)的过渡时产生。EVAL计数器1242是一个可编程的计数器,其计数一个预定数目的时钟周期。EVAL计数器1242内经过编程的计数长度决定估算周期的长度。线路1274上的EVAL计数器1242的输出是一个逻辑水平1或0,这取决于计数器是否在计数。当EVAL计数器1242正在计数时,线路1274上的输出处于逻辑1,该输出经由EVALFSMx 1248被提供到每个FPGA逻辑装置1201-1204。当EVAL=1时,FPGA逻辑装置1201-1204运行FPGA间通信以便在用户设计中估算数据。EVAL计数器1242的输出也被在线路1262上反馈到MEMFSM单元1240,以便实现它自己的轨迹。在编程计数结束的时候,EVAL计数器1242产生线路1274和1262上的一个逻辑0信号表明估算周期的结束。
如果不需要存储器访问,那么线路1272上的MEM_EN信号被断言为逻辑0,而且被提供到MEMFSM单元1240,在这种情况下,存储器模拟系统等待另外一个DMA数据传输周期。如果需要存储器访问,那么线路1272上的MEM_EN信号被断言为逻辑1。实质上,MEM_EN信号是一个用来启动访问FPGA逻辑装置的电路板上的SRAM存储器装置的、来自CPU的控制信号。在这里,MEMFSM单元1240等待FPGA逻辑装置1201-1204来将地址和控制信号放置在FPGA总线上,即FD[63:32]和FD[31:0]。
剩余的功能性单元和它们的相关控制信号和线路是为了将地址/控制信息提供给SRAM存储器装置用来写和读数据。这些单元包括用于低端组的存储器地址/控制锁存器1243,用于低端组的地址控制多路复用器1244,用于高端组的存储器地址/控制锁存器1247,用于高端组的地址控制多路复用器1246,和地址计数器1245。
用于低端组的存储器地址/控制锁存器1243接收来自FPGA总线FD[31:0]1275的地址和控制信号,与总线1213以及线路1263上的一个锁存器信号保持一致。锁存器1243在线路1264上产生mem_wr_L信号,并经由总线1266将来自FPGA总线FD[31:0]的接入地址/控制信号提供给地址/控制多路复用器1244。这个mem_wr信号与芯片选择写信号相同。
地址/控制多路复用器1244接收总线1266上的地址和控制信息以及经由总线1268来自地址计数器1245的地址信息作为其输入。作为输出,它在总线1276上将地址/控制信息发送给低端组SRAM存储器装置1205。线路1265上的选择信号提供来自MEMFSM单元1240的正确的选择信号。总线1276上的地址/控制信息对应于图56中总线1229和1216上的MA[18:2]和芯片选择读/写信号。
地址计数器1245经由总线1267接收来自SPACE4和SPACE5的信息。SPACE4包括DMA写传输信息。SPACE5包括DMA读传输信息。因此,这些DMA传输在PCI总线上在计算系统(经由工作站CPU的高速缓存/主存储器)和模拟系统(SRAM存储器装置1205,1206)之间发生。地址计数器1245将其输出提供给总线1288和1268,并提供给地址/控制多路复用器1244和1246。有了线路1265上用于低端组的适当选择信号,地址/控制多路复用器1244要么将总线1266上的地址/控制信息放置在总线1276上以便在SRAM装置1205和FPGA逻辑装置1203、1204之间进行写/读存储器访问,要么将总线1267上来自SPACE4或SPACE5的DMA写/读传输数据放置到总线1276上。
在存储器访问周期内,MEMFSM单元1240将线路1263上的锁存器信号提供到存储器地址/控制锁存器1243,以便得到来自FPGA总线FD[31:0]的输入。MEMFSM单元1240提取来自FD[31:0]上的地址/控制信号的mem_wr_L控制信息以便作出进一步控制。如果线路1264上的mem_wr_L信号是一个逻辑1,就需要一个写操作,而且MEMFSM单元1240将在线路1265上产生适当的选择信号发送给地址/控制多路复用器1244,以便总线1266上的地址和控制信号在总线1276上被发送到的低端组SRAM。其后,一个写数据从FPGA逻辑装置传输到SRAM存储器装置。如果线路1264上的mem_wr_L信号是一个逻辑0,那么就需要一个读操作,因此模拟系统等待被SRAM存储器装置放置在FPGA总线FD[31:0]上的数据。一旦数据准备好了,读数据就从SRAM存储器装置传输到FPGA逻辑装置。
高端组具有相似的配置及操作。用于高端组的存储器地址/控制锁存器1247接收来自FPGA总线FD[63:32]1278的地址和控制信号,该信号与总线1212和线路1270上的一个锁存器信号保持一致。锁存器1270在线路1271上产生mem_wr_H信号,而且经由总线1239将来自FPGA总线FD[63:32]的接入地址/控制信号提供给地址/控制多路复用器1246。
地址/控制多路复用器1246接收总线1239上的地址和控制信息以及经由总线1268来自地址计数器1245的地址信息作为输入。作为输出,它将总线1277上的地址/控制信息发送给高端组SRAM存储器装置1206。线路1269上的选择信号提供来自MEMFSM单元1240的正确的选择信号。总线1277上的地址/控制信息对应于图56中的总线1214和1215上的MA[18:2]和芯片选择读/写信号。
地址计数器1245如上文所述经由总线1267接收来自SPACE4和SPACE5的信息以便进行DMA写和读传输。地址计数器1245将它的输出提供给总线1288和1268以及地址/控制多路复用器1244和1246。有了线路1269上用于高端组的适当选择信号,地址/控制多路复用器1246要么将总线1239上的地址/控制信息放置在总线1277上以便在SRAM装置1206和FPGA逻辑装置1201,1202之间进行写/读存储器访问,或者可以替代的方法是,将总线1267上来自SPACE4或SPACE5的DMA写/读传输数据放置在总线1277上。
在存储器访问周期内,MEMFSM单元1240将线路1270上的锁存器信号提供到存储器地址/控制锁存器1247以便获得来自FPGA总线FD[63:32]的输入。MEMFSM单元1240提取来自FD[63:32]上的地址/控制信号的mem_wr_H控制信息以便作出进一步的控制。如果线路1271上的mem_wr_H信号是一个逻辑1,那么就需要一个写操作,而且MEMFSM单元1240将在线路1269上产生适当的选择信号发送到地址/控制多路复用器1246,以便总线1239上的地址和控制作信号在总线1277上被发送到高端组SRAM。其后,一个写数据从FPGA逻辑装置传输到SRAM存储器装置。如果线路1271上的mem_wr_H信号是一个逻辑0,那么就需要一个读操作,这样模拟系统可以等待被SRAM存储器装置放置在FPGA总线FD[63:32]上的数据。一旦数据准备好了,读数据就从SRAM存储器装置传输到FPGA逻辑装置。
如图57所示,地址和控制信号分别经由总线1276和1277被提供到低端组SRAM存储器装置和高端组存储器设备。用于低端组的总线1276对应于图56中的总线1229和1216组合。同样地,用于高端组的总线1277对应于图56中的总线1214和1215组合。
根据本发明一个实施例的、存储器模拟系统的CTRL_FPGA单元1200的运行通常如下所述。线路1259上的DONE信号被提供到计算系统和在CTRL_FPGA单元1200中的MEMFSM单元1240,表明模拟写/读周期的完成。线路1260上的DATAXSFR信号表明模拟写/读周期的DMA数据传输周期的发生。FPGA总线FD[31:0]和FD[63:32]上的存储器地址/控制信号被分别提供到用于高端和低端组的存储器地址/控制锁存器1243和1247。对于任一组而言,MEMFSM单元1240都产生锁存器信号(1263或1269)来锁存地址和控制信息。这个信息然后被提供到SRAM存储器装置。mem_wr信号被用来决定需要一个写操作还是读操作。如果需要一个写操作,数据就经由FPGA总线从FPGA逻辑装置1201-1204被传输到SRAM存储器装置。如果需要读操作,模拟系统就等待SRAM存储器装置将被请求的数据放置在PFGA总线之上以便在SRAM存储器装置和FPGA逻辑装置之间进行传输。为了进行SPACE4和SPACE5的DMA数据传输,线路1265、1269上的选择信号能选择地址计数器1245的输出作为主计算系统和模拟系统中的SRAM存储器装置之间进行传输的数据。对所有这些访问,插入适当的等待周期,这样只有当逻辑准备好、且数据可用时,逻辑才处理数据。
图60显示存储器读数据双缓冲器1251(图57)更为详细的视图。在每个FPGA逻辑装置中的每个存储器区块N都有一个双缓冲器,用来锁存可能在不同时间进入的有关数据,然后最终同时缓冲出该有关锁存数据。在图60中,用于存储器区块0的双缓冲器1391包括两个D型触发器1340和1341。第一个D型触发器1340的输出1343被连接到第二个D型触发器1341的输入。第二个D型触发器1341的输出1344是双缓冲器的输出,其被提供到用户设计逻辑中的存储器区块N接口。全局时钟输入在线路1393上被提供到第一个触发器1340,在线路1394上被提供给第二个触发器1341。
第一个D型触发器1340在线路1342上经由总线1283和用于高端组的FPGA总线FD[63:32]以及用于低端组的FD[31:0]接收来自SRAM存储器装置的数据输入。启动输入被连接到线路1345,该线路为每个FPGA逻辑装置接收来自EVALFSMx单元的rd_latx(举例来说,rd_lat0)信号。因此,对读操作(即,wrx=0)而言,EVALFSMx单元产生rd_latx信号,以便将线路1342上的数据锁存到线路1343。用于所有存储器区块的所有双缓冲器的输入数据可能在不同时间进入,双缓冲器确保所有的数据首先得到锁存。一旦所有的数据被锁存到D型触发器1340,clk_en信号(即,软件时钟)就被提供到线路1346上,作为第二个D型触发器1341的时钟输入。当clk_en信号被断言时,线路1343上的锁存数据被缓冲进入D型触发器1341,再到线路1344。
下一个存储器区块1具有实质上等于双缓冲器1391的另一个双缓冲器1392。来自SRAM存储器装置的数据是在线路1396上的输入。全局时钟信号是线路1397上的输入。clk_en(软件时钟)信号在线路1398上被输入双缓冲器1392中的第二个触发器(未显示)。这些线路被连接到存储器区块0的第一双缓冲器1391和其他存储器区块N的其他所有双缓冲器的模拟信号线路。输出的双缓冲数据被输出到线路1399上。
针对第二个双缓冲器1392的rd_latx信号(举例来说,rd_latl)独立于其他双缓冲器的其他rd_latx信号,提供到线路1395上。更多的双缓冲器被提供到其他的存储器区块N。
现在将针对本发明的一个实施例讨论MEMFSM单元1240的状态图。图58显示了CTRL_FPGA单元中的MEMFSM单元的有限状态机的一个状态图。图58中的状态图中拟写/读周期内的三个周期也与它们的对应状态一起显示。因此,状态1300-1301对应DMA数据传输周期;状态1302-1304对应估算周期;状态1305-1314对应存储器访问周期。在下文讨论中结合图58并参照图57。
一般情况下,设定了DMA传输、估算以及存储器访问的信号顺序。在一个实施例中,顺序如下:DATA_XSFR触发DMA数据传输(如果有DATA_XSFR的话)。用于高端和低端组的LAST信号在DMA数据传输完成时产生,并且触发DONE信号,表明DMA数据传输周期的完成。然后产生XSFR_DONE信号,而且接着估算(EVAL)周期开始。在EVAL结束时,可以开始存储器读/写。
转向图58的顶端,每当DATAXSFR信号处于逻辑0时,状态1300都是空闲的。这表明当时没有发生DMA数据传输。当DATAXSFR信号处于逻辑1时,MEMFSM单元1240就进行到状态1301。这里,计算系统需要在计算系统(图1、45,和46中的主存储器)和模拟系统(图56中的FPGA逻辑装置1201-1204或SRAM存储器装置1205、1206)之间进行DMA数据传输。适当的等待周期被插入,直到DMA数据传输完成。当DMA传输完成时,DATAXSFR信号返回到逻辑0。
当DATAXSFR信号回到逻辑0时,在状态1302起始信号的产生在MEMFSM单元1240中被触发。起始信号启动EVAL计数器1242,这是一个可编程的计数器。EVAL计数器内的编程计数时长等于估算周期的时长。只要EVAL计数器在状态1303进行计数,那么EVAL信号就被断言为逻辑1,并被提供到每个FPGA逻辑装置的EVALFSMx和MEMFSM单元1240。在计数结束时,EVAL计数器将处于逻辑0的EVAL信号提供到每个FPGA逻辑装置内的EVALFSMx和MEMFSM单元1240。当MEMFSM单元1240接收EVAL信号逻辑0时,它在状态1304打开EVAL_DONE标记。EVAL_DONE标记被MEMFSM用来指示估算周期已经结束,而且如果需要,存储器访问周期现在可以进行。CPU将通过读XSFR_EVAL寄存器(见下表K)检查EVAL_DONE和XSFR_DONE以便确定DMA传输和EVAL已经在开始下一个DMA传输之前成功完成。
然而,在某些情况下,模拟系统可能不想在此刻运行存储器访问。这时,模拟系统保持存储器启动信号MEM_EN为逻辑0。这个禁用的(逻辑0)MEM_EN信号把MEMFSM单元保持在空闲状态1300,等待DMA数据传输或FPGA逻辑装置的数据估算。另一方面,如果存储器启动信号MEM_EN处于逻辑1,那么表明模拟系统有进行存储器访问的需要。
在图58中的状态1304下,状态图被分为两个并行进行的区段。一个区段包含针对低端组存储器访问的状态1305、1306、1307、1308,和1309。另一个区段包含针对高端组存储器访问的状态1311、1312、1313、1314,和1309。
在状态1305,模拟系统等待一个周期以便当前选择的FPGA逻辑装置将地址和控制信号放置在FPGA总线FD[31:0]上。在状态1306,MEMFSM在线路1263上产生锁存器信号至存储器地址/控制锁存器1243以便获得来自FD[31:0]的输入。对应于这个特定获得的地址和控制信号的数据将从SRAM存储器装置或者被读或者被写到SRAM存储器装置。为了决定模拟系统是需要一个读操作还是一个写操作,从地址和控制信号中将用于低端组的存储器写信号mem_wr_L提取出来。如果mem_wr_L=0,一个读操作被请求。如果mem_wr_L=1,一个写操作被请求。如上文所述,这个mem_wr信号等于芯片选择写信号。
在状态1307,产生针对地址/控制多路复用器1244的适当的选择信号,以便将地址和控制信号发送给低端组SRAM。MEMFSM单元检查mem_wr信号和LASTL信号。如果mem_wr_L=1且LASTL=0,一个写操作被请求,但是FPGA逻辑装置链路中最后一个数据还没有被移出。因此,模拟系统回到状态1305,等待一个周期以便FPGA逻辑装置将更多的地址和控制信号放置到FD[31:0]之上。这个过程继续进行,直到最后一个数据被移出FPGA逻辑装置。然而,如果mem_wr_L=1且LASTL=1,最后一个数据就被移出了FPGA逻辑装置。
同样地,如果mem_wr_L=0指示一个读操作,MEMFSM就进行到状态1308。在状态1308,模拟系统等待一个周期以便SRAM存储器装置将数据放置在FPGA总线FD[31:0]之上。如果LASTL=0,FPGA逻辑装置链路中的最后一个数据还没有被移出。因此,模拟系统回到状态1305,等待一个周期,以便FPGA逻辑装置将更多的地址和控制信号放置在FD[31:0]之上。这个过程继续进行,直到最后一个数据被移出FPGA逻辑装置。注意写操作(mem_wr_L=1)和读操作(mem_wr_L=0)能交叉存取或相互交互进行,直到LASTL=1。
当LASTL=1时,MEMFSM进行到状态1309,当DONE=0时,保持等待。当DONE=1时,LASTL和LASTH都处于逻辑1,因此,模拟写/读周期完成。模拟系统然后进行到状态1300,在状态1300,只要DATAXSFR=0,它就保持空闲。
相同的过程也适用于高端组。在状态1311,模拟系统等待一个周期,以便当前所选的FPGA逻辑装置将地址和控制信号放置到FPGA总线FD[63:32]上。在状态1312,MEMFSM在1270线路上对存储器地址/控制锁存器1247产生锁存器信号,以便获得来自FD[63:32]的输入。对应于这个特定获得的地址和控制信号的数据将或者从SRAM存储器装置中读取或者写到SRAM存储器装置。为了决定模拟系统是需要一个读操作还是一个写操作,从地址和控制信号中提取针对高端组的存储器写信号mem_wr_H。如果mem_wr_H=0,一个读操作被请求。如果men_w_H=1,一个写操作被请求。
在状态1313,产生用于针对地址/控制多路复用器1246的适当选择信号,以便将地址和控制信号发送给高端组SRAM。MEMFSM单元检查mem_wr信号和LASTH信号。如果mem_wr_H=1且LASTH=0,一个写操作被请求,但是FPGA逻辑装置链路中最后一个数据还没有被移出。因此,模拟系统回到状态1311,等待一个周期,以便FPGA逻辑装置将更多的地址和控制信号放置在FD[63:32]之上。这个过程继续进行,直到最后一个数据被移出FPGA逻辑装置。然而,如果mem_wr_H=1且LASTH=1,那么最后一个数据已经被移出FPGA逻辑装置。
同样地,如果mem_wr_H=0指示一个读操作,MEMFSM就进行到状态1314。在状态1314,模拟系统等待一个周期,以便SRAM存储器装置将数据放置在FPGA总线FD[63:32]之上。如果LASTH=0,那么FPGA逻辑装置链路中最后一个数据还没有被移出。因此,模拟系统回到状态1311,等待一个周期,以便FPGA逻辑装置将更多的地址和控制信号放置在FD[63:32]之上。这个过程继续进行,直到到最后一个数据被移出FPGA逻辑装置。注意写操作(mem_wr_H=1)和读操作(mem_wr_H=0)能交叉存取或相互交互进行,直到LASTH=1。
当LASTH=1时,MEMFSM进行到状态1309,当DONE=0时保持等待。当DONE=1时,LASTL和LASTH处于逻辑1,因此模拟写/读周期已经完成。模拟系统然后进行到状态1300,在状态1300,只要DATAXSFR=0就保持空闲。
或者,根据本发明另一个实施例,对高端组和低端组两者,状态1309和1310都没有执行。因此,在低端组中,MEMFSM将在通过状态1308(LASTL=1)或1307(MEM_WR_L=1且LASTL=1)之后直接进行到状态1300。在高端组中,MEMFSM将在通过状态1314(LASTH=1)或1313(MEM_WR_H=1且LASTH=1)之后直接进行到状态1300。
EVALFSM单元1248的状态图将结合本发明的一个实施例来讨论。图59显示每个FPGA芯片中的这种EVALFSMx有限状态机的一个状态图。象图58一样,图59中的状态图中模拟写/读周期里面的两个周期与它们对应的状态一起显示。因此,状态1320-1326A对应估算周期,状态1326B-1336对应存储器访问周期。在下面的讨论中参照图57并结合图59。
EVALFSMx单元1248接收来自CTRL_FPGA单元1200的线路1274上的EVAL信号(见图57)。当EVAL=0时,没有发生FPGA逻辑装置进行的数据估算。因此,在状态1320,当EVAL=0时,EVALFSMx处于空闲。当EVAL=1时,EVALFSMx进行到状态1321。
状态1321、1322,和1323与FPGA间通信有关,其中数据经由FPGA逻辑装置被用户设计所估算。这里,EVALFSMx对用户逻辑产生信号input_en、mux_en和clk_en(图57中的1281)。在状态1321,EVALFSMx产生clk_en信号,该信号在这个周期中启动用户设计逻辑中的所有时钟边缘寄存器触发器的第二个触发器(见图19)。clk_en信号也被认为是软件时钟。如果用户存储器类型是同步的,clk_en也启动在每个存储器区块中的存储器读数据双缓冲器1251的第二个时钟。在这个周期中,针对每个存储器区块的SRAM数据输出被发送到用户设计逻辑。
在状态1322,EVALFSMx为用户设计逻辑产生input_en信号,以锁存DMA传输从CPU到用户逻辑发送的输入信号。input_en信号为主时钟寄存器中的第二个触发器提供启动输入(见图19)。
在状态1323,EVALFSMx产生mux_en信号,以便打开在每个FPGA逻辑装置中的多路复用电路,开始与阵列中其他FPGA逻辑装置进行通信。如前文所解释的那样,FPGA间导线线路时常被多路复用,以便有效地使用每个FPGA逻辑装置芯片中有限的引脚资源。
在状态1324,只要EVAL=1,EVALFSM就等待。当EVAL=0时,估算周期完成,而且因此状态1325需要EVALFSMx停用mux_en信号。
如果存储器区块M的数目(其中M是一个整数,包括0)是零,EVALFSMx回到状态1320,如果EVAL=0,它就保持空闲。在大部分的情形下,M>0,因此,EVALFSMx进行到状态1326A/1326B。″M″是FPGA逻辑装置中存储器区块的数目。是来自映射且配置到FPGA逻辑装置中的用户设计的一个常数;它不会递减计数。如果M>0,图59的右侧部分(存储器访问周期)将会被配置到FPGA逻辑装置中。如果M=0,只有图59的左边部分(EVAL周期)被配置。
在状态1327,只要SHIFTIN=0,EVALFSMx就将保持在等待状态。当SHIFTIN=1时,早先的FPGA逻辑装置已经完成了它的存储器访问,而且当前的FPGA逻辑装置准备好运行它的存储器访问任务。可以替代的方法是,当SHIFTIN=1时,当前的FPGA逻辑装置在组中是第一逻辑装置,而且SHIFTIN输入线路被连接到Vcc。然而,SHIFTIN=1信号的接收指示当前的FPGA逻辑装置已经准备好运行存储器访问。在状态1328,存储器区块数N被设定在N=1。数目N将会在每个循环发生时增加,以便针对特定存储器区块N的存储器访问可被完成。最初,N=1,因此EVALFSMx将会进行到为存储器区块1访问存储器。
在状态1329,EVALFSMx为FPGA总线驱动器FDO_MUXx 1249产生线路1285上的选择信号以及线路1284上的output_en信号,以便将Mem_Block_N接口1253的地址和控制信号放置在FPGA总线FD[63:32]或FD[31:0]之上。如果需要一个写操作,wr=1;否则,需要一个读操作,则wr=0。EVALFSMx接收线路1287上的wr信号作为其输入之一。基于这个wr信号,线路1285上的正确的选择信号将被断言。
当wr=1时,EVALFSMx进行到状态1330。EVALFSMx为FD总线驱动器产生选择和output_en信号,以便把Mem_Block_N1253的写数据放在FPGA总线FD[63:32]或FD[31:0]上。其后,EVALFSMx等待一个周期,以便让SRAM存储器装置完成写周期。然后EVALFSMx进入状态1335,存储器区块数目N获得一个增量;也就是说,N=N+1。
然而,如果在状态1329的wr=0,一个读操作被请求,而且EVALFSMx进入状态1332,等待一个周期,然后进入状态1333,等待另外一个周期。在状态1334,EVALFSMx产生线路1286上的rd_latch信号,以便让存储器区块N的存储器读数据双缓冲器1251将SRAM数据带出到FD总线之上。EVALFSMx然后进行到状态1335,其中存储器区块数目N获得一个增量;也就是说,N=N+1。因此,如果在增量状态1335之前N=1,N现在就是2,于是顺序的存储器访问将会适用到存储器区块2。
如果目前的存储器区块数目N少于或者等于用户设计中的存储器区块总数M(也就是,N≤M),EVALFSMx进行到状态1329,基于运行写操作还是读操作而÷为FD总线驱动器产生特定的选择和output_en信号。然后,为下个存储器区块N进行的写或读操作将会发生。
然而,如果当前的存储器区块的数目N比用户设计中的存储器区块总数M更大(也就是,N>M),EVALFSMx进行到状态1336,打开SHIFTOUT输出信号,以便允许组中下一个FPGA逻辑装置访问SRAM存储器装置。其后,EVALFSMx进行到状态1320,直到模拟系统需要在FPGA逻辑装置之间进行数据估算,它一直是空闲的(也就是,EVAL=1)。
图61显示了根据本发明一个实施例的模拟写/读周期。图61在编号1366处显示了模拟写/读周期中的三个周期-DMA数据传输周期、估算周期和存储器访问周期。虽然未显示,但是可以得出暗示,即前一个DMA传输、估算和存储器访问可能已经事先发生。此外,到达/来自低端组SRAM的数据传输时序可能不同于高端组SRAM的传输时序。为了叙述简洁,图61显示了一个例子,其中针对低端和高端组的访问时序是相同的。全局时钟GCLK1350为系统中所有的部件提供了时钟信号。
DATAXSFR信号1351表明DMA数据传输周期的发生。当轨迹1367上DATAXSFR=1时,DMA数据传输正在主计算系统和FPGA逻辑装置或SRAM存储器装置之间发生。因此,数据被提供到FPGA高端组总线FD[63:32]1359和轨迹1369之上,以及FPGA低端组总线FD[31:0]1358和轨迹1368上。DONE信号1364用一个逻辑0到1的信号(举例来说,轨迹1390)表明存储器访问周期的完成,或者用逻辑0(举例来说,轨迹1390的边沿和轨迹1370的边沿的组合)表明模拟写/读周期的持续时间。在DMA传输周期期间,DONE信号处于逻辑0。
在DMA传输周期结束的时候,DATAXSFR信号从逻辑1变为逻辑0,触发估算周期的开始。因此,如轨迹1371所指示,EVAL1352处于逻辑1。处于逻辑1的EVAL信号时长是预定的,并且可编程。在这个估算周期期间,用clk_en信号1353对用户设计逻辑中的数据进行估算,如轨迹1372所示,1353处于逻辑1,如轨迹1373所示,input_en信号1354也处于逻辑1,如轨迹1374所示,mux_en信号1355也处于逻辑1,但是时长比clk_en和input_en更长。在这个特定的FPGA逻辑装置里数据得到估算。当mux_en信号1355在轨迹1374处从逻辑1进入0时,而且至少一个存储器区块存在于FPGA逻辑装置中,那么估算周期就会结束,而存储器访问周期则开始。
SHIFTIN信号1356在轨迹1375被断言为逻辑1。这表明之前的FPGA已经完成了它的估算,而且所有需要的数据已经被存取进入/来自这个之前的FPGA逻辑装置。现在,组中下一个FPGA逻辑装置已经准备好开始存储器访问。
在轨迹1377到1386中,将使用下列术语。ACj_k表示地址和控制信号与FPGAj和存储器区块k有关,其中j和k是包括0的整数。WDj_k表示用于FPGAj和存储器区块k的写数据。RDj_k表示用于FPGAj和存储器区块k的读数据。因此,AC3_1表示与FPGA3和存储器区块1有关的地址和控制信号。低端组SRAM访问和高端组SRAM访问1361被显示为轨迹1387。
接下来的几个轨迹1377到1387将显示存储器访问是如何完成的。基于发往EVALFSMx的wrx信号逻辑水平,以及相应的发往MEMFSM的mem_wr信号水平,一个写操作或读操作将得到执行。如果需要一个写操作,存储器模型与用户存储器区块N的接口(图57中的Mem_Block_N接口1253)连接,提供wrx作为其控制信号之一。这个控制信号wrx被提供到FD总线驱动器和EVALFSMx单元。如果wrx处于逻辑1,适当的选择信号和output_en信号被提供到FD总线驱动器以便将存储器写数据放置到FD总线上。这个当前位于FD总线上的相同控制信号能被CTRL_FPGA单元中的存储器地址/控制锁存器锁存。存储器地址/控制锁存器经由一个MA[18:2]/控制总线将地址和控制信号发送给SRAM。处于逻辑1的wrx控制信号被从FD总线上提取出来,而且因为一个写操作被请求,所以FD总线上的与地址和控制信号相关的数据被发送到SRAM存储器装置。
因此,如图61所示,这个下一个FPGA逻辑装置,即低端组中的逻辑装置FPGA0,如轨迹1377所示,将AC0_0放置到FD[31:0]上。模拟系统为WD0_0运行一个写操作。然后,AC0_1被放置在FD[31:0]总线上。然而,如果一个读操作被请求,在将AC0_1放置到FD总线FD[31:0]之后,在RD0_0(而不是对应于AC0_0的WD0_0)被放置在SRAM存储器装置的FD总线上之前,会出现一些时延。
注意,如轨迹1383所指示,在MA[18:2]/控制总线上放置AC0_0与在FD总线上放置地址、控制和数据相比有稍微的延迟。这是因为MEMFSM单元需要时间来锁存从FD总线来的地址/控制信号、提取mem_wr信号,以及为地址/控制多路复用器产生适当的选择信号以便地址/控制信号能被放置在MA[18:2]/控制总线上。此外,在MA[18:2]/控制总线上放置地址/控制信号至SRAM存储器装置之后,模拟系统必须等待来自SRAM存储器装置的对应数据被放置在FD总线上。一个例子是轨迹1384和轨迹1381之间的时间偏移,其中在AC1_1被放置在MA[18:2]/控制总线上之后,RD1_1才被放置在FD总线上。
在高端组上,FPGA1正在将AC1_0放置在总线FD[63:32]上,随后是WD1_0的放置。其后,AC1_1被放置在总线FD[63:32]上。这由轨迹1380表明。当AC1_1被放置在FD总线上时,控制信号在这个例子中表明一个读操作。因此,依照上文描述,当AC1_1如轨迹1384所示被放置在MA[18;2]/控制总线上时,处于逻辑0的正确的wrx和mem_wr信号被提供到地址/控制信号中,并发送至EVALFSMx和MEMFSM单元。因为模拟系统知道这是一个读操作,写数据就不会被传输到SRAM存储器装置;相反,与AC1_1有关的读数据被SRAM存储器装置放置FD总线上以便用户设计逻辑后来通过模拟存储器区块接口读取。这由高端组上的轨迹1381表示。在低端组上,如轨迹1378所示,在MA[18:2]/控制总线上放置AC0_1(未显示)之后,RD0_1被放置在FD总线上。
当EVALFSMx如轨迹1388所示为模拟存储器区块接口中的存储器读数据双缓冲器产生rd_lat0信号1362时,用户设计逻辑经由模拟存储器区块接口的读操作就完成了。这个rd_lat0信号被提供到低端组FPGA0和高端组FPGA1。
其后,每个FPGA逻辑装置的下一个存储器区块被放置在FD总线上。AC2_0被放置在低端组FD总线上,而AC3_0被放置在高端组FD总线上。如果需要一个写操作,WD2_0被放置在低端组FD总线上,WD3_0被放置在高端组FD总线上。如轨迹1385所示,AC3_0被放置在高端组MA[18:2]/控制总线上。这个过程继续进行,以便下一个存储器区块进行写和读操作。注意,针对低端组和高端组的写和读操作可能在不一致的时间和速度上发生,而且图61显示一个特定的例子,其中低端和高端组的时序是相同的。另外,低端和高端组的写操作一起发生,然后两个组上的读操作跟随其后。但情况并不总是这样。低端和高端组的存在允许连接到这些组的设备并行操作;也就是说,低端组上的活动独立于高端组上的活动。也能设想其他的情况,即当低端组正在运行一系列的写操作,而高端组正在并行运行一系列的读操作时。
当遇到每个组的最后一个FPGA逻辑装置中的最后一个数据时,如轨迹1376所示,SHIFTOUT信号1357被断言。对于读操作,如轨迹1389所示,对应于低端组上的FPGA2和高端组上的FPGA3的一个rd_latl信号1363被断言到轨迹1382上的读RD2_1和轨迹1379上的读RD3_1。因为最后一个FPGA单元的最后一个数据已经被访问,所以如轨迹1390所示,DONE信号1364表明模拟写/读周期的完成。
下表H列出并描述了模拟系统电路板上的各种部件和它们对应的寄存器/存储器、PCI存储器地址,以及局部地址。
表H:存储器映射
|
PLX9080 |
PCI配置寄存器 | OOH到3CH | - | |
|
PLX9080 |
局部Config./运行时间/DMA寄存器 | Offset from PCI base addr0:0-FFh | Offset fromCS addr:80h-180h | 可从PCI和局部总线访问 |
CTRL_FPGA[6:1] |
XSFR_EVAL寄存器 |
Offset from PCI base addr2:0h | 0h |
in LocalSpace 0 |
CTRL-FPGA1 |
CONFIG_JTAG1寄存器 |
Offset from PCI base addr2:10h | 10h |
in LocalSpace 0 |
CTRL_FPGA2 |
CONFIG_JTAG2寄存器 |
Offset from PCI base addr2:14h | 14h |
in LocalSpace 0 |
CTRL_FPGA3 |
CONFIG_JTAG3寄存器 |
Offset from PCI base addr2:18h | 18h |
in LocalSpace 0 |
CTRL_FPGA4 |
CONFIG_JTAG4寄存器 |
Offset from PCI base addr2:1Ch | 1Ch |
in LocalSpace 0 |
CTRL_FPGA5 |
CONFIG_JTAG5寄存器 |
Offset from PCI base addr2:18h | 20h |
in LocalSpace 0 |
CTRL_FPGA6 |
CONF1G_JTAG6寄存器 |
Offset from PCI base addr2:1Ch | 24h |
in LocalSpace 0 |
CTRL_FPGA1 | 局部RAM |
Offset from PCI base addr2:400h-7FFh | 400h-7FFh |
in LocalSpace 0 |
FPGA[3:0] | SPACE0 | Offset from PCI base addrfor ch0 DMA:0-FFFFFFFh | 8000 0000h到8FFFFFFFh |
针对GLOBAL和S2H数据的DMA写传输 |
|
FPGA[3:0] | SPACE1 | Offset from PCI base addrfor ch0 DMA:0-FFFFFFFh | 9000 0000H到 9FFFFFFFh |
针 对REGISTER_WRITE数据的DMA写传输 |
FPGA[3:0] | SPACE2 |
Offset from PCI base addrfor ch1 DMA:0-FFFFFFFh |
A000 0000H到 AFFFFFFFh |
针对H2S数据的DMA读传输 |
FPGA[3:0] | SPACE3 | Offset from PCI base addrfor ch1 DMA:0-FFFFFFFh | B000 0000H到 BFFFFFFFh |
针 对REGISTERREAD数据的DMA读传输 |
L-SRAM,H-SRAM | SPACE4 |
Offset from PCI base addrfor ch1 DMA:0-FFFFFFFh |
C000 0000H到 CFFFFFFFh |
针对SRAM的DMA写传输 |
L-SRAM,H-SRAM | SPACE5 |
Offset from PCI base addrfor ch1 DMA:0-FFFFFFFh |
D000 0000H到 DFFFFFFFh |
针对SRAM的DMA读传输 |
| SPACE6 |
Offset from PCI base addrfor ch1 DMA:0-FFFFFFFh |
E000 0000H到 EFFFFFFFh | 保留 |
| SPACE7 |
Offset from PCI base addrfor ch1 DMA:0-FFFFFFFh |
F0000000H到 FFFFFFFFh | 保留 |
下面在表J中显示了根据本发明一个实施例的用于配置文件的数据格式。CPU通过PCI总线每次发送一个字以便为所有的板上FPGAs并行配置一个比特。
表J:配置数据格式
|
字0 |
D0(FPGA0) |
D0(FPGA1) |
D0(FPGA2) |
D0(FPGA3) |
control/status |
字1 |
D1(FPGA0) |
D1(FPGA1) |
D1(FPGA2) |
D1(FPGA3) |
control/status |
字2 |
D2(FPGA0) |
D2(FPGA1) |
D2(FPGA2) |
D2(FPGA3) |
control/status |
字3 |
D3(FPGA0) |
D3(FPGA1) |
D3(FPGA2) |
D3(FPGA3) |
control/status |
字4 |
D4(FPGA0) |
D4(FPGA1) |
D4(FPGA2) |
D4(FPGA3) |
control/status |
字5 |
DS(FPGA0) |
D5(FPGA1) |
D5(FPGA2) |
D5(FPGA3) |
control/status |
下表K列出了XSFR_EVAL寄存器。它存在于所有的电路板中。XSFR_EVAL寄存器被主计算系统用来对EVAL周期进行编程、控制DMA读/写以及读EVAL_DONE和XSFR_DONE字段的状态。主计算系统也使用这个寄存器来启动存储器访问。有关这个寄存器的模拟系统的运行将在下面连同图62和63进行描述。
表K:所有6个电路板的XSFR_EVAL寄存器(局部地址:0h)
|
7:0 |
EVALTIME[7:0] |
PCI时钟周期内的Eval时间 |
R/W | 0h |
8 | EVAL_DONE |
Eval_done标记.通过设定WR_XSFR位来清除 | R | 0 |
9 | XSFRDONE |
读写的Xsfr_done标记.通过写XSFR_EVAL寄存 | R | 0 |
|
| |
器来清除 | | |
10 | RD_XSFR_EN |
启动DMA-read-transfer.通过XSFR_DONE清除. | R/W | 0 |
11 | WR_XSFR_EN |
启动DMA-write-transfer..通过XSFR-DONE清除.当WR_XSFR和RD_XSFR都被设定时,CTRL_FPGA首先执行DMA-write-transfer,然后自动执行DMA-read-transfer. | R/W | 0 |
19:12 | |
保留 |
R/W |
0h |
20 | F_CLRN |
低值时,重新设定所有FPGA[3:0]. | R/W | 0 |
21 | WAIT_EVAL |
如果RD-XSFR和WR-XSFR都是设定的,该位是有效的。当处于1时,DMA-read-transfer在EVAL_DONE之后开始.当处于0时,DMA-read-transfer在CLK_EN之后开始. | R/W | 0 |
22 |
MEM_EN |
启动板上的SRAM |
R/W |
0 |
31:23 | |
保留 | | |
下表L列出了CONFIG_JTAG[6:1]寄存器的内容。CPU配置FPGA逻辑装置,并通过这个寄存器为FPGA逻辑装置运行边界扫描测试。每个电路板都有一个专门的寄存器。
表L:CONFIG_JTAG[6:1]寄存器
|
15:0 |
CONF_D[15:0] |
为FPGA[15:0]配置数据 |
R/W |
0h |
16 |
NCONFIG |
在低到高传输时开始配置 |
R/W |
0h |
17 |
CONFDONE |
配置结束 |
R |
- |
18 |
CONF_CLK |
配置时钟 |
R/W |
0 |
19 |
NSTATUS |
配置状态,低值时错误 |
R |
- |
20 | F_OE |
为所有板上模拟FPGA输出启动 | R/W | 0h |
21 |
JTAG_TCK |
JTAG时钟 |
R/W |
0 |
22 |
JTAG_TMS |
JTAG模式选择 |
R/W |
0 |
23 | JTAG_TDI |
JTAG数据进入-发送到FPGA0的TDI | R/W | 0 |
24 | JTAG_TDO |
JTAG数据输出-来自FPGA3的TDO | R | - |
25 | JTAG_NR |
当低值时,重新设定JTAG测试. | R/W | 0 |
26 | LED2 |
1=为Config_status打开LED2.0=关闭. | R/W | 0 |
27 |
LED3 |
1=为DataXsfr/Diag打开LED3.0=关闭. | R/W | 0 |
图62和63显示了本发明另外一个实施例的时序图。这两个图展现了有关XSFR_EVAL寄存器的模拟系统的运行。XSFR_EVAL寄存器被主计算系统用来对EVAL周期进行编程、控制DMA读/写,以及读EVAL_DONE和XSFR_DONE字段的状态。主计算系统也使用这个寄存器来启动存储器访问。这两个图之间的主要不同点之一是WAIT_EVAL字段的状态。当WAIT_EVAL字段被设定成″0″的时候,正如图62的情形一样,DMA读传输在CLK_EN之后开始。当WAIT_EVAL字段被设定成″1″的时候,正如图63的情形一样,DMA读传输在EVAL_DONE之后开始。
在图62中,WR_XSFR_EN和RD_XSFR_EN都被设定成″1″。这两个字段启动DMA写/读传输,且能被XSFR_DONE所清除。因为两个字段都被设定成″1″,所以CTRL_FPGA单元首先自动运行DMA写传输,然后运行DMA读传输。然而,WAIT_EVAL字段被设定成″0″,表明DMA读传输在CLK_EN断言之后开始(且在DMA写操作完成之后开始)。因此,在图62中,一旦CLK_EN信号(软件时钟)被侦测到,DMA读操作在DMA写操作完成之后几乎立刻发生。DMA读传输操作不等待EVAL周期的完成。
在时序图的开始处,当多个FPGA逻辑装置争夺注意时,EVAL_REQ_N信号会经历争用。如先前所解释的那样,如果任何一个FPGA逻辑装置断言这个信号,EVAL_REQ_N(或EVAL_REQ#)信号就被用来启动估算循环。在数据传输结束的时候,估算周期开始,包括地址指示器初始化和软件时钟的运行,以便帮助估算过程。
在DMA数据传输周期完成时产生的DONE信号,当多个LAST信号(来自每个FPGA逻辑装置输出断的shiftin和shiftout信号)被产生、而且被提供到CTRL_FPGA单元,也会经历争用。当所有LAST信号都被接收、且经过处理时,就产生DONE信号,且可以开始一个新的DMA数据传输运行。EVAL_REQ_N信号和DONE信号在分时的基础上使用相同的线路,我们将在下文讨论其方式。
系统首先自动开始DMA写传输,正如时间1409处的WR_XSFR信号所示。WR_XSFR信号的开始部分包括与PCI控制器有关的一些开销,在一个实施例中,是PCI9080或9060。其后,主计算系统经由局部总线LD[31:0]和FPGA总线FD[63:0]对连接到FPGA总线FD[63:0]的FPGA逻辑装置运行一个DMA写操作。
在时间1412处,WR_XSFR信号被停用,表明DMA写操作的完成。125EVAL信号在从时间1412到时间1410的一个预定的时序被激活。EVALTIME时长是可编程的,且最初设定在8+X,其中X来源于最长的信号轨迹路径。XSFR_DONE信号也在一个短时间内被激活,表明这个DMA传输操作的完成,其中当前运行是一个DMA写操作。
同样也在时间1412,EVAL_REQ_N信号之间的争用停止了,但是携带DONE信号的线路当前传输EVAL_REQ_N信号给CTRL_FPGA单元。对于3个时钟周期,EVAL_REQ_N信号通过携带DONE信号的线路而得到处理。在3个时钟周期之后,EVAL_REQ_N信号不再由FPGA逻辑装置产生,但是先前被发送到CTRL_FPGA单元的EVAL_REQ_N信号将会得到处理。EVAL_REQ_N信号不再由FPGA逻辑装置为门控时钟产生的最大时序大约是23个时钟周期。比这个周期长的EVAL_REQ_N信号将会被忽略。
在时间1413处,大约在时间1412后的2个时钟周期(在DMA写操作的结束处),CTRL_FPGA单元将一个写地址选通信号WPLX_ADS_N发送给PCI控制器(举例来说,PLX PCI9080),开始DMA读传输。从时间1413开始大约24个时钟周期后,PCI控制器将会启动DMA读传输过程,同时DONE信号产生。在时间1414处,在PCI控制器开始DMA读过程之前,RD_XSFR信号被激活,启动DMA读传输。一些PLX开销数据被首先传输和处理。在时间1415处,在这个开销数据被处理期间,DMA读数据被放置在FPGA总线FD[63:0]和局部总线LD[31:0]上。在从时间1413开始的24个时钟周期结束的时候,和来自FPGA逻辑装置的DONE信号启动和EVAL_REQ_N信号产生的时候,PCI控制器通过将来自FPGA总线FD[63:0]和局部总线LD[31:0]的数据传输到主计算机系统来处理DMA读数据。
在时间1410处,DMA读数据将会继续得到处理,而EVAL信号被停用,而且EVAL_DONE信号将会被激活,表明EVAL周期的完成。当FPGA逻辑装置产生EVAL_REQ_N信号时,它们之间的争用也开始出现。
在时间1417处,恰好在DMA读周期在时间1416处完成之前,主计算机系统将轮询PLX中断寄存器以确定DMA周期是否接近末尾。PCI控制器知道完成DMA数据传输过程需多少周期。在预定数目的周期之后,PCI控制器将会在它的中断寄存器中设定一个特别位。主计算机系统中的CPU轮询这个PCI控制器中的中断寄存器。如果该位被设定,CPU就知道DMA周期几乎完成。主机系统中的CPU并不始终轮询中断寄存器,因为然后它将用一个读周期来阻碍PCI总线。因此,在本发明的一个实施例中,在轮询中断寄存器之前,主计算机系统中的CPU被编程来等待一定数量的周期。
在一个短的时序之后,DMA读周期的结束在时间1416处发生,同时RD_XSFR被停用,而且DMA读数据也不再位于FPGA总线FD[63:0]或局部总线LD[31:0]之上。XSFR_DONE信号也在时间1416处被激活,LAST信号之间为产生DONE信号的争用也开始了。
在从时间1409 WR_XSFR信号产生到时间1417的整个DMA周期内,主计算机系统中的CPU不访问模拟硬件系统,在一个实施例中,这个周期的时长是(1)PCI控制器时序2的开销时序和(2)WR_XSFR和RD_XSFR的字数目,以及(3)主计算机系统的(例如SunULTRASparc)PCI开销的总和。当CPU轮询PCI控制器中的中断寄存器的时候,DMA周期之后的第一个访问在时间1419处发生。
在时间1411,大约在时间1416之后3个时钟周期处,MEM_EN信号被激活,以启动板上SRAM存储器装置,这样FPGA逻辑装置和SRAM存储器装置之间的存储器访问就能开始。存储器访问继续直到时间1419,而且在一个实施例中,每一个访问必需5个时钟周期。如果不需要DMA读传输,那么存储器访问能在时间1410处更早开始,而不是在时间1411处开始。
当存储器访问在FPGA总线FD[63:0]上在FPGA逻辑装置和SRAM存储器装置之间发生时,主计算机系统中的CPU可以经由局部总线LD[31:0]从时间1418到时间1429与PCI控制器和CTRL_FPGA单元进行通信。这发生在CPU完成轮询PCI控制器的中断寄存器之后。CPU在不同的寄存器上写数据,以便准备下一个数据传输。这个周期的时长大于4微秒。如果存储器访问比这个周期短,那么FPGA总线FD[63:0]将不经历任何的冲突。在时间1429处,XSFR_DONE信号被停用。
在图63中,时序图不同于图62的时序图,因为在图63中,WAIT_EVAL字段被设定成″1″。换句话说,DMA读传递周期在EVAL_DONE信号已被激活且几乎完成之后开始。它等待EVAL周期的接近完成,而不是在DMA写操作完成之后立刻开始。EVAL信号在从时间1412到时间1410之间的一个预定时序被激活。在时间1410处,EVAL_DONE信号被激活,表明EVAL周期的完成。
在图63中,在时间1412处DMA写操作之后,CTRL_FPGA单元直到时间1420处才位PCI控制器产生写地址选通信号WPLX_ADS_N,这大约是在EVAL周期结束之前的16个时钟周期。XSFR_DONE信号也被延长到时间1423处。在时间1423处,XSFR_DONE字段被设定,然后产生WPLX_ADS_N信号,以便启动DMA读过程。
在时间1420,即大约在EVAL_DONE信号激活之前16个时钟周期,CTRL_FPGA单元将一个写地址选通信号WPLX_ADS_N发送给PCI控制器(举例来说,PLX PCI9080)以便开始DMA读传输。在从时间1420开始大约24个时钟周期处,PCI控制器将启动DMA读传输过程,而且DONE信号也被产生。在时间1421处,在PCI控制器开始进行DMA读处理之前,RD_XSFR信号被激活,以启动DMA读传输。一些PLX开销数据首先得到传输和处理。在时间1422处,在这个开销数据被处理的期间,DMA读数据被放置在FPGA总线FD[63:0]和局部总线LD[31:0]上。在时间1424处的24个时钟周期结束的时候,PCI控制器通过将来自FPGA总线FD[63:0]和局部总线LD[31:0]的数据传输到主计算机系统来处理DMA读数据。时序图的剩余部分与图62的剩余部分相同。
因此,图63中的RD_XSFR信号的激活比图62中的要晚。图63中的RD_XSFR信号在EVAL周期的接近完成处之后,以便延迟DMA读操作。图62中的RD_XSFR信号在DMA写传递完成之后跟随CLK_EN信号的侦测。
IX.协同校验系统
本发明的协同校验系统能通过向设计者提供灵活的软件模拟以及因使用一个硬件模型的更快速度来加速设计/开发周期。设计的硬件和软件部分在ASIC制造之前都能得到检验,并且没有以仿真器为基础的协同校验工具的种种限制。调试功能得到增强,而且整体调试时间也可能得到显著的缩短。
以ASIC为待测设备的传统协同校验工具
图64显示了一个典型的PCI附加卡(add-on card)的最终设计,例如视频、多媒体、以太网或SCSI卡。这个卡2000包括一个允许与其他外围设备通信的直接接口连接器2002。连接器2002被连接到总线2001,以便发送来自录像机、照相机或电视调谐器的视频信号;输出视频和音频到显示器或扬声器;以及将信号传输到通信或磁盘驱动器接口。根据用户设计,该领域的技术人员能预测其他的接口需求。本设计的大量功能存在于经由总线2003连接到接口连接器2002的芯片2004中,以及经由总线2007被用来产生一个局部时钟信号的局部振荡器2005,和经由总线2008的存储器2006。附加卡2000还包括一个PCI连接器2009,用来与PCI总线2010连接。
在实施如图64所显示的一个附加卡的设计之前,本设计被简化为ASIC形式,这是为了测试的目的。在图65显示了一个传统的硬件/软件协同校验工具。用户设计具体化为ASIC的形式——在图65中被标为待测设备(或″DUT″)2024。为了获得来自设计为与其连接的多种资源的激励,待测设备2024被放在目标系统2020之内,该系统是主板上的中央计算系统2021和一些外设的组合。目标系统2020包括一个中央计算系统2021,2021包括一个CPU和存储器,而且在一些操作系统(如Microsoft Windows或Sun Microsystem公司的Solaris)下进行操作以运行一些应用程序。如本领域的技术人员所知,SunMicroSystem公司的Solaris是一个操作环境和软件产品组合,支持Internet(因特网)、Intranet(内部网)和企业计算。Solaris操作环境基于工业标准UNIX系统V版本4,而且被设计用来在一个分布网络环境中执行客户机一服务器应用程序,为较小的工作组提供适当的资源,而且提供电子商务所需要的WebTone。
待测设备2024的设备驱动器2022在中央计算系统2021中,以实现操作系统(以及任何应用程序)和待测设备2024之间的通信。如本领域的技术人员所知,一个设备驱动器是控制计算机系统硬件部件或外设的特殊软件。一个设备驱动器负责访问设备的硬件寄存器,而且通常包括一个中断处理程序以处理设备产生的中断。设备驱动器时常构成操作系统内核的最低级别的一部分,通过这些部分,在内核建造的时候,它们被联接。一些比较新近的系统有可载入的驱动器,可以在操作系统运行之后从文件安装。
待测设备2024和中央计算系统2021被连接到一个PCI总线2023上。目标系统2020中的其他外设包括一个以太网PCI附加卡2025,用于通过总线2034将目标系统连接到一个网络2030,一个经由总线2036和2035连接到SCSI驱动器2027和2031的SCSI PCI附加卡2026,一台经由总线2032连接到待测设备2024的录像机2028(如果在待测设备2024的设计中是必需的),以及一个经由总线2033连接到待测设备2024的显示器及/或扬声器2029(如果在待测设备2024的设计中是必需的)。如本领域的技术人员所知,SCSI代表″小型计算机系统接口″,这是一种在计算机和智能设备(例如,硬盘、软盘、光盘、打印机、扫描仪和更多设备)之间进行系统级接口的独立于处理器的标准。
在这种目标系统环境中,待测设备2024能利用来自中央计算系统(即操作系统、应用程序)和外设的多种激励得到检测。如果时间不是要考虑的问题,而且设计者只寻求一种简单的通过/失败测试,这个协同校验工具应该能充分满足他们的需要。然而,在大多数情形中,一个设计项目有严格的预算,并且在产品推出之前有严格的预定日程。正如上文所解释的那样,这个特定的基于ASIC的协同校验工具并不令人满意,因为其调试功能并不存在(没有熟练的技术,设计者无法隔离″失败″测试的原因,而且项目开始时无法预知发现的每个错误的″修复″数目,因此也无法预知日程安排和预算)。
以仿真器作为待测试设备的传统协同校验工具
图66举例说明了带有一个仿真器的传统协同校验工具。与上文在图64中说明的装置不同,待测设备在仿真器2048中编程,仿真器2048连接到目标系统2040和一些外设以及一个测试工作站2052。仿真器2048包括一个仿真时钟2066和被编程纳入仿真器中的待测设备。
仿真器2048经由PCI总线桥接器2044和PCI总线2057以及控制线路2056连接到目标系统2040。目标系统2040包括主板上的中央计算系统2041和一些外设的组合。目标系统2040包括一个中央计算系统2041,2041包括处理器和存储器,而且在一些操作系统(如MicrosoftWindows或Sun Microsystem公司的Solaris)下进行操作以运行一定数量的应用程序。待测设备2024的设备驱动器2042在中央计算系统2041中,以实现操作系统(以及任何应用程序)和仿真器2048中的待测设备之间的通信。为了和仿真器2048以及作为计算环境一部分的其他设备进行通信,中央计算系统2041被连接到PCI总线2043上。目标系统2040中的其他外设包括一个以太网PCI附加卡2045,用于通过总线2058将目标系统连接到一个网络2049,一个经由总线2060和2059连接到SCSI驱动器2047和2050的SCSI PCI附加卡2046。
仿真器2048也经由总线2062被连接到测试工作站2052。测试工作站2052包括一个CPU和存储器,执行其功能。测试工作站2052也可能包括测试例2067和用于其它模型化的、但没有与仿真器2048物理连接的设备的设备模型2068。
最后,仿真器2048经由总线2061被连接到一些其他外设,如帧缓冲器或数据流记录/播放系统2051。这个帧缓冲器或数据流记录/播放系统2051也可能经由总线2063被连接到通信设备或信道2053、经由总线2064连接到录象机2054,以及经由总线2065连接到显示器及/或扬声器2055。
如本领域的技术人员所知,仿真时钟的运行速度远远慢于实际的目标系统速度。因此,图66的阴影部分以仿真速度运行,而其它没有阴影的部分以实际的目标系统速度运行。
如上文所述,这种带有仿真器的协同校验工有一些局限性。当使用一个逻辑分析仪或一个取样及保存设备来获取待测设备的内部状态信息时,设计者必须编译他的设计,以便他想要检查的、用于调试目的的有关信号能被提供到输出引脚进行取样。如果设计者想对设计的一个不同部分进行调试,他就必须确定该部分有能被逻辑分析仪或取样及保存设备取样的输出信号,否则他必须在仿真器2048中重新编译他的设计,以便这些信号能在输出引脚上实现取样目的。这些重新编译的时间可能需要数天或数星期,对于一个时间要求严格的设计/开发时间表而言,这可能是过于冗长的延迟。此外,因为这种协同校验工具使用信号,所以必须提供复杂的电路来或者将这些信号转换成数据,或提供一些信号到信号的时序控制。而且,要取样的每个信号必须使用很多的线路2061和2062,这就增加了调试设置的负担和时间。
带有可重新配置的计算阵列的模拟
作为一个简短的总结,图67举例说明了本发明的一种具有单一引擎可重新配置计算(RCC)阵列系统的高级别的配置,此专利权说明书曾在上文对其进行了描述。这个单一引擎RCC系统将被合并到根据本发明的一个实施例的协同校验系统中。
在图67中,RCC阵列系统2080包括一个RCC计算系统2081,一个可重新配置的计算(RCC)硬件阵列2084,和一个将它们连接在一起的PCI总线2089。重要的是,RCC计算系统2081包括包括软件中用户设计的完整模型,而RCC硬件阵列2084包括用户设计的一个硬件模型。RCC计算系统2081包括CPU、存储器、一个操作系统,和运行单一引擎RCC系统2080的必需软件。提供一个软件时钟2082以便实现RCC计算系统2081中的软件模型以及RCC硬件阵列2084中的硬件模型的严格控制。测试平台数据2083也被储存在RCC计算系统2081中。
RCC硬件阵列系统2084包括一个PCI接口2085,一组RCC硬件阵列板2086,以及实现接口目的的各种总线。RCC硬件阵列板组2086至少包括模型化在硬件中的用户设计的一部分(也就是,硬件模型2087)以及用于测试平台数据的存储器2088。在一个实施例中,在配置期间,这个硬件模型的各部分被分布在多个可重新配置的逻辑元件(举例来说,FPGA芯片)之间。因为要使用更多的可重新配置的逻辑元件或芯片,因此需要使用更多的电路板。在一个实施例中,一个单一电路板上具有四个可重新配置的逻辑元件。在其他的实施例中,一个单一电路板上具有八个可重新配置的逻辑元件。在四芯片电路板中的可重新配置的逻辑元件的容量和能力与八芯片电路板可重新配置的部件的容量和能力可能有显著的不同。
总线2090从PCI接口2085到硬件模型2087为硬件模型提供不同的时钟。总线2091经由连接器2093和内部总线2094在PCI接口2085和硬件模型2087之间提供其他输入/输出数据。总线2092起到PCI接口2085和硬件模型2087之间的PCI总线的功能。测试平台数据也能被储存在硬件模型2087中的存储器中。如上文所述,硬件模型2087包括除了实现硬件模型与RCC计算系统2081面接所需要的用户设计的硬件模型之外的其他结构和功能。
这个RCC系统2080可能设置在一个单一工作站中,或者连接到一个工作站网络,其中每个工作站以分时的方式访问RCC系统2080。事实上,RCC阵列系统2080作为模拟服务器,其具有一个模拟调度程序和状态交换机制。服务器允许一个工作站中的每个用户为实现高速加速和硬件状态交换目的而访问RCC硬件阵列2084。在加速和状态交换之后,每个用户都能在本地用软件模拟用户设计,同时可以对其他工作站的其他用户释放RCC硬件阵列2084的控制。这个网络模型也将被用于下面描述的协同校验系统。
RCC阵列系统2080为设计者提供模拟整个设计的能力和灵活性,设计者还可以经由可重新配置的计算阵列中的硬件模型来加速部分在选择的周期内测试点的部分,并随时获得其设计中任何部分的内部状态信息。的确,单一引擎的、可重新配置的计算阵列(RCC)系统可以被不精确的描述为一个硬件加速模拟器,它能在单一调试期间被用来运行下列任务:(1)独自模拟;(2)与硬件加速一起模拟,其中用户能随时启动、停止、断言值,以及检查设计的内部状态,(3)后模拟分析,以及(4)内电路仿真。因为软件模型和硬件模型都处于单一引擎经由一个软件时钟的严格控制之下,可重新配置的计算阵列中的硬件模型被紧密耦合到软件模拟模型。这允许设计者一个周期接一个周期进行调试,以及经过一定数量的周期来加速和减速硬件模型,以便获得有价值的内部状态信息。而且,因为这个模拟系统处理数据,而不是信号,所以不需要复杂的信号-数据转换/时序电路。此外,如果设计者希望检查不同的节点组,可重新配置的计算阵列中的硬件模型不需要重新编译,这一点不像典型的仿真系统。有关进一步的详细情况,请回顾上文的描述。
没有外部输入/输出的协同校验系统
本发明一个实施例是一个不使用真实和物理外部输入/输出设备和目标应用程序的协同校验系统。因此,根据本发明的一个实施例的一个协同校验系统能被整合到RCC系统中连同其他的功能性一起工作,以便调试用户设计的软件部分和硬件部分,而不需使用任何实际的目标系统或输入/输出设备。相反,目标系统和外部输入/输出设备被模型化在RCC计算系统的软件中。
参照图68,协同校验系统2100包括一个RCC计算系统2101,RCC硬件阵列2108,和将它们连接起来的一个PCI总线2114。重要的是,RCC计算系统2101包括在软件中的用户设计的整个模型,且可重新配置的计算阵列2108包括用户设计的一个硬件模型。RCC计算系统2101包括CPU、存储器、一个操作系统,和运行单一引擎协同校验系统2100的必需软件。一个软件时钟2104被提供以实现RCC计算系统2101中的软件模型以及可重新配置的计算阵列2108中的硬件模型的严格控制。测试例2103也被储存在RCC计算系统2101中。
根据本发明一个实施例,RCC计算系统2101还包括标记为2106的目标应用程序2102、用户设计硬件模型的一个驱动器2105、一个设备(举例来说,一个视频卡)模型和它的在软件中的驱动器,以及标记为2107的其他设备(举例来说,一个显示器)的模型和它的在软件中的驱动器。本质上,RCC计算系统2101按照需要包含尽可能多的设备模型和驱动器,传输到用户设计的软件模型和硬件模型,真实目标系统和其他输入/输出设备是该计算环境的组成部分。
RCC硬件阵列2108包括一个PCI接口2109,一组RCC硬件阵列板2110,和各种为实现接口目的的总线。RCC硬件阵列板组2110至少包括模型化在硬件内的部分用户设计2112以及用于测试平台数据的存储器2113。依照上文的描述,每个电路板包含多个可重新配置的逻辑元件或芯片。
总线2115从PCI接口2109到硬件模型2112为硬件模型提供各种时钟。总线2116经由连接器2111和内部总线2118提供PCI接口2109和硬件模型2112之间的其他输入/输出数据。总线2117的功能相当于PCI接口2109和硬件模型2112之间的PCI总线。测试平台数据可以被储存在硬件模型2113中的存储器中。依照上文的描述,硬件模型包括除了使得硬件模型与RCC计算系统2101面接所需要的用户设计的硬件模型之外的其他结构和功能。
为了将图68中的协同校验系统和传统的基于仿真器的协同校验系统进行比较,图66显示了连接到目标系统2040的仿真器2048、一些输入/输出设备(举例来说,帧缓冲器或数据流记录/播放系统2051)和一个工作站2052。这个仿真器配置为设计者提出了很多问题和设定上的麻烦。仿真器需要一个逻辑分析仪或一个取样及保存设备,以便测量模型化在仿真器中的用户设计内部状态。因为逻辑分析仪和取样及保存设备需要信号,因此要求有复杂的信号-数据转换电路。此外,也需要复杂的信号-信号时序控制电路。每个信号都需要许多导线来测量仿真器的内部状态,这将进一步增加用户在安排时遇到的负担。在调试期间,每次用户想要检验一组不同的内部逻辑电路时,他都必须重新编译仿真器,这样来自那个逻辑电路的适当信号作为输出用于测量,并由逻辑分析仪或取样及保存设备进行记录。漫长的重新编译时间成本太贵。
本发明的协同校验系统中没有连接外部输入/输出设备,目标系统和其他的输入/输出设备被模型化在软件中,因此不需要实际存在真实的物理目标系统和输入/输出设备。因为RCC计算系统2101处理数据,所以不需要信号-数据转换电路或信号-信号时序控制电路。导线数目也不受信号数目的限制,因此,装配相对简单。此外,因为协同校验系统处理数据而不是信号,所以调试用户设计的硬件模型中逻辑电路的不同部分也不需要重新编译。因为RCC计算系统用软件控制的时钟(也就是,软件时钟和时钟边缘侦测电路)控制RCC硬件阵列,所以硬件模型的开始和停止变得容易了。因为整个用户设计的模型处于软件中,而且软件时钟实现同步,所以从硬件模型读数据也是容易的。因此,用户能仅通过软件模拟来调试,加速硬件中的部分或全部用户设计,一个周期接一个周期经过各个需要的测试点,检查软件和硬件模型的内部状态(也就是,寄存器和组合逻辑状态)。举例来说,用户能用一些测试平台数据模拟设计,然后将内部状态信息下载到硬件模型,用带硬件模型的各种测试平台数据加速设计,通过寄存器/组合逻辑重建和从硬件模型到软件模型载入值来检查最终的硬件模型的内部状态值,而且用户能最后通过使用硬件模型加速过程的结果,采用软件来模拟用户设计的其他部分。
然而,依照上文的描述,为了调试进程控制,仍需要一个工作站。在一个网络配置中,一个工作站可能被远程连接到协同校验系统中,远程访问调试数据。在一个非网络配置中,一个工作站可能在本地连接到协同校验系统,或者在一些其他实施例中,工作站可能将协同校验系统合并在内部,以便可以在本地访问调试数据。
带有外部输入/输出的协同校验系统
在图68中,各种输入/输出设备和目标应用程序被模型化在RCC计算系统2101中。然而,当太多的输入/输出设备和目标应用程序在RCC计算系统2101中运行的时候,整体速度会减慢。如果RCC计算系统2101中只有一个单一处理器,就必需更多的时间来处理来自所有设备模型和目标应用程序的各种数据。为了增加数据传输量,真实输入/输出设备和目标应用程序(而不是输入/输出设备和目标应用程序的软件模型)可能被物理连接到协同校验系统。
本发明一个实施例是一个使用真实和物理外部输入/输出设备和目标应用程序的协同校验系统。因此,使用真实的目标系统及输入/输出设备的同时,一个协同校验系统能合并RCC系统连同其他功能,以调试用户设计的软件部分和硬件部分。为了测试目的,协同校验系统能使用来自软件的测试平台数据和来自外部接口(举例来说,目标系统和外部输入/输出设备)的激励。测试平台数据不仅能被用来给用户设计的接脚分布提供测试数据,而且为用户设计中的内部节点提供测试数据。来自外部输入/输出设备(或目标系统)的真实输入/输出信号只可能被引入用户设计接脚分布。因此,来自一个外部接口(举例来说,目标系统或外部输入/输出设备)的测试数据和软件中的测试平台处理之间的主要区别之一,就在于测试平台数据能被用来通过应用于接脚分布和内部节点的激励来测试用户设计,而来自目标系统或外部输入/输出设备的真实数据只能经由其接脚分布(或在用户设计中代表接脚分布的节点)被应用到用户设计。在下列讨论中,我们将呈现有关一个目标系统和外部输入/输出设备的协同校验系统结构和它的配置。
作为与图66中的系统配置进行的比较,根据本发明的一个实施例的协同校验系统替换了虚线框2070内的结构和功能。换句话说,图66显示虚线2070的范围内的仿真器和工作站,而本发明的一个实施例在虚线2070处包括协同校验系统2140(和它的相联工作站),正如图69所显示的协同校验系统2140。
参照图69,根据本发明的一个实施例的协同校验系统配置包括一个目标系统2120、一个协同校验系统2140、一些可选输入/输出设备,和将它们连接起来的控制/数据总线2131和2132。目标系统2120包括一个中央计算系统2121,该计算系统包括一个CPU和存储器,而且在一些操作系统中运行,例如Microsoft Windows或Sun Microsystem公司的Solaris以便运行一定数量的应用程序2122和测试例2123。用于用户设计的硬件模型的设备驱动器2124被包含在中央计算系统2121中,以实现操作系统(以及任何应用程序)和用户设计之间的通信。为了与协同校验系统以及构成该计算环境部分的其他设备进行通信,中央计算系统2121被连接到PCI总线2129。目标系统2120中的其他外设包括一个以太网PCI附加卡2125,用来将目标系统连接到一个网络,经由总线2130连接到SCSI驱动器2128的一个SCSI PCI附加卡2126,和一个PCI总线桥接器2127。
协同校验系统2140包括一个RCC计算系统2141,一个RCC硬件阵列2190,外部输入/输出扩展器形式的一外部接口2139,和一个将RCC计算系统2141和RCC硬件阵列2190连接到一起的PCI总线2171。RCC计算系统2141包括CPU、存储器、一个操作系统,和运行单一引擎协同校验系统2140所必需的软件。重要的是,RCC计算系统2141包括软件中用户设计的整个模型,而RCC硬件阵列2190包括用户设计的一个硬件模型。
依照上文的讨论,协同校验系统的单一引擎从一个主软件内核处获得它的能力和灵活性,该内核驻留在RCC计算系统2141的主存储器中,并且控制协同校验系统2140的全部运行和执行。只要任何测试平台处理处于活动状态,或来自外部世界的任何信号被送到协同校验系统,内核就估算激活的测试平台部件、估算时钟部件、侦测时钟边缘以更新寄存器和存储器,同时也传播组合逻辑数据,并推进模拟时间。这个主软件内核实现了RCC计算系统2141和RCC硬件阵列2190的紧密耦合性质。
软件内核产生一个来自一个软件时钟源2142的软件时钟信号,该信号被提供到RCC硬件阵列2190和外部世界。时钟源2142能根据软件时钟的不同目的地在不同的频率上产生多重时钟。通常,软件时钟确保在用户设计硬件模型中的寄存器与系统时钟同步估算,且没有任何占用时间扰乱的现象。软件模型能在软件中侦测影响硬件模型寄存器值的时钟边缘。因此,一种时钟侦测机制确保在主软件模型中,一个时钟边缘侦测可以被转换成硬件模型时钟侦测。关于软件时钟和时钟边缘侦测逻辑的更为详细的讨论,请参照图17-19以及专利说明书中的相应文本。
根据本发明的一个实施例的情形是,RCC计算系统2141也可能包括一定数量的输入/输出设备的一个或多个模型,尽管其他真实的物理输入/输出设备可能被连接到协同校验系统中。举例来说,RCC计算系统2141可能包括标记为2143的设备(举例来说,一个扬声器)模型和其驱动器以及软件中的测试平台数据,以及标记为2144的另外一个设备(举例来说,一个图形加速器)模型连同其驱动器和软件中的测试平台数据。用户决定哪些设备(以及它们各自的驱动器和测试平台数据)将会被模型化并合并到RCC计算系统2141中,以及哪些设备将实际上被连接到协同校验系统中。
协同校验系统包含一个控制逻辑,该控制逻辑提供:(1)RCC计算系统2141和RCC硬件阵列2190,以及(2)外部接口(被连接到目标系统和外部输入/输出设备的接口)和RCC硬件阵列2190之间的通信量控制。因为一些输入/输出设备可能被模型化在RCC计算系统中,所以在RCC硬件阵列2190和RCC计算系统2141之间有一些数据通过。此外,RCC计算系统2141具有软件中的整个设计模型,包括模型化在RCC硬件阵列2190中的部分用户设计。结果,RCC计算系统2141也必须能访问经过外部接口和RCC硬件阵列2190之间的所有数据。控制逻辑确保RCC计算系统2141能访问这些数据。下文将对控制逻辑作更为详细的描述。
RCC硬件阵列2190包括一定数量的阵列板。在图69中显示的这个特定实施例中,硬件阵列2190包括电路板2145-2149。电路板2146-2149包含大部分配置的硬件模型。电路板2145(或电路板m1)包含可重新配置的计算元件(举例来说,FPGA芯片)2153,协同校验系统能使用这个元件来至少配置部分硬件模型,还包含一个在外部接口(目标系统和输入/输出设备)和协同校验系统2140之间引导通信量和数据的外部输入/输出控制器2152。电路板2145经由外部输入/输出控制器允许RCC计算系统2141访问在外部世界(也就是,目标系统和输入/输出设备)和RCC硬件阵列2190之间传输的所有数据。这个访问很重要,因为协同校验系统中的RCC计算系统2141包含在软件中整个用户设计的一个模型,而且RCC计算系统2141也能控制RCC硬件阵列2190的功能。
如果来自一个外部输入/输出设备的激励被提供到硬件模型,软件模型必须也能访问这个激励,以便这个协同校验系统的用户能有选择地控制下一个调试步骤,该步骤可能包括检查作为该应用激励结果的设计内部状态值。正如上文有关电路板布局和互连方案所讨论的那样,第一个和最后一个电路板被包含在硬件阵列2190中。因此,电路板1(标记为电路板2146)和电路板8(标记为电路板2149)被包含在一个由八个电路板组成的硬件阵列中(不包括电路板m1)。除了电路板2145-2149之外,可能还具有带有芯片m2的电路板m2(不在图69中显示,但是见图74)。这个电路板m2类似于电路板m1,除了电路板m2没有任何的外部接口,且如果需要附加板,它能被用来实现扩展目的。
现在将讨论这些电路板的内容。电路板2145(电路板m1)包括一个PCI控制器2151,一个外部输入/输出控制器2152,数据芯片(m1)2153,存储器2154和多路复用器2155。在一个实施例中,这个PCI控制器是PLX 9080。PCI控制器2151经由总线2171被连接到RCC计算系统2141,并经由总线2172被连接到三状态缓冲器2179。
在外部世界(目标系统2120和输入/输出设备)和RCC计算系统2141之间的协同校验系统中的主通信量控制器是一个外部输入/输出控制器2152(在图69、71,和73中也被称为″CTRLXM″),该控制器被连接到RCC计算系统2141、RCC硬件阵列中的其他电路板2146-2149、目标系统2120和真实外部输入/输出设备中。当然,如同上文所描述的那样,RCC计算系统2141和RCC硬件阵列2190之间的主通信量控制器一直都是每个阵列板2146-2149中的单个内部输入/输出控制器(举例来说,输入/输出控制器2156和2158)和PCI控制器2151的组合。在一个实施例中,这些单个内部输入/输出控制器,例如控制器2156和2158,是在上文图22(单元700)和图56(单元1200)等示范图中被描述和举例说明的FPGA输入/输出控制器。
外部输入/输出控制器2152被连接到三状态缓冲器2179,以便允许外部输入/输出控制器和RCC计算系统2141面接。在一个实施例中,在有些情况下,三状态缓冲器2179允许来自RCC计算系统2141的数据传给局部总线2180,同时防止来自局部总线的数据传给RCC计算系统2141,而另外一些情况下,允许数据从局部总线2180传递至RCC计算系统2141。
外部输入/输出控制器2152还经由数据总线2176被连接到芯片(m1)2153和存储器/外部缓冲器2154。在一个实施例中,芯片(m1)2153是可重新配置的计算部件,例如一个FPGA芯片,它能被用来至少配置用户设计的部分硬件模型(或所有硬件模型,如果用户设计足够小)。在一个实施例中,外部缓冲器2154是DRAM DIMM,而且能被用被芯片2153用来实现多种目的。外部缓冲器2154提供许多存储器容量,超过在本地连接到每个可重新配置的逻辑元件(举例来说,可重新配置的逻辑元件2157)的单个SRAM存储器装置。这个大的存储器容量允许RCC计算系统储存大量的数据,例如测试平台数据、微控制器嵌入码(如果用户设计是一个微控制器),以及一个存储器装置中的大型LUT表。依照上面的描述,外部缓冲器2154也能被用来储存硬件模型化必需的数据。实质上,这个外部缓冲器2154可以部分起到上面描述和说明的另一个高端或低端组SRAM存储器装置一样的功能,例如图56中的SRAM1205和1206,但是它有更多的存储器。外部缓冲器2154也能被协同校验系统用来储存从目标系统2120和外部的输入/输出设备处收到的数据,以便让这些数据稍后能被RCC计算系统2141回收。芯片(m1)2153和外部缓冲器2154还包含在本专利说明书″存储器模拟″部分中描述的存储器映射逻辑。
为了访问在外部缓冲器2154中的需要的数据,芯片2153和RCC计算系统2141(经由外部输入/输出控制器2152)都能为需要的数据传输地址。芯片2153在地址总线2182上提供地址,外部输入/输出控制器2152在地址总线2177上提供地址。这些地址总线2182和2177是多路复用器2155的输入,它在被连接到外部缓冲器2154的输出2178线路上提供所选的地址。针对多路复用器2155的选择信号是由外部输入/输出控制器2152经由线路2181提供的。
外部输入/输出控制器2152也经由总线2180被连接到其他电路板2146-2149上。在一个实施例中,总线2180是在上文图22(局部总线708)和图56(局部总线1210)等示范图中得到描述和举例说明的局部总线。在这个实施例中,只有五个电路板(包括电路板2145(电路板m1))被用到,电路板的真实数目将由模型化在硬件中的用户设计的复杂性和大小来决定。具有中等复杂程度的用户设计硬件模型比具有较高复杂程度的用户设计硬件模型需要更少的电路板。
为了实现可量测性,除了一些板间互连线路以外,电路板2146-2149实质上是相同的。这些互连线路使得在一个芯片(举例来说,电路板2146中的芯片2157)里的部分用户设计硬件模型,与被物理放置在另外的一个芯片中(举例来说,电路板2148中的芯片2161)、相同用户设计中的硬件模型的另外部分进行通信。简短参照图74,了解这个协同校验系统的互连结构,同时参照图8和36-44,以及本专利说明书中它们相应的描述。
电路板2148是一个代表性的电路板。电路板2148是这个由四个电路板组成的布局(排除电路板2145(电路板m1))中的第三个电路板。因此,它不是一个需要适当的互连线路终端的末端板。电路板2148包括一个内部输入/输出控制器2158,一些可重新配置的逻辑元件(举例来说,FPGA芯片)2159-2166,高端组FD总线2167,低端组FD总线2168,高端组存储器2169,和低端组存储器2170。如上文所述,在一个实施例中,内部输入/输出控制器2158是如上文图22(单元700)和图56(单元1200)等示范图中得到描述和举例说明的FPGA输入/输出控制器。同样地,高端和低端组存储器设备2169和2170是在上文,举例来说,图56(SRAM1205和1206))中被描述和举例说明的SRAM存储器装置。在一个实施例中,高端和低端组FD总线2167和2168是如上文图22(FPGA总线718和719)、图56(FD总线1212和1213)和图57(FD总线1282)等示范图中得到描述和举例说明的FD总线或FPGA总线。
为了将协同校验系统2140连接到目标系统2120和其他输入/输出设备,提供以一个外部输入/输出扩展器的形式出现的一个外部接口2139。在目标系统一侧,外部输入/输出扩展器2139经由次级PCI总线2132和一个控制线路2131被连接到PCI桥接器2127上,用来传输软件时钟。在输入/输出设备一侧,外部输入/输出扩展器2139经由总线2136-2138被连接到各种输入/输出设备,用于软件时钟的控制线路2133-2135和接脚分布数据。能被连接到输入/输出扩展器2139的输入/输出设备的数目由用户决定。无论如何,根据需要,尽可能多的数据总线和软件时钟控制线路被提供到外部输入/输出扩展器2139中,以便将尽可能多的输入/输出设备连接到协同校验系统2140,成功运行调试进程。
在协同校验系统2140一侧,外部输入/输出扩展器2139经由数据总线2175、软件时钟控制线路2174和扫描控制线路2173被连接到外部输入/输出控制器2152。数据总线2175被用来在外部世界(目标系统2120和外部输入/输出设备)和协同校验系统2140之间传递接脚分布数据。软件时钟控制线路2174被用来从RCC计算系统2141到外部世界传输软件时钟数据。
出现在控制线路2174和2131上的软件时钟由RCC计算系统2141中的主软件内核来产生。RCC计算系统2141经由PCI总线2171、PCI控制器2151、总线2171、三状态缓冲器2179、局部总线2180、外部输入/输出控制器2152,和控制线路2174传输一个软件时钟给外部输入/输出扩展器2139。从外部输入/输出扩展器2139出发,软件时钟被作为时钟输入提供给目标系统2120(经由PCI桥接器2127),并经由控制线路2133-2135提供给其他的外部输入/输出设备。因为软件时钟起到主时钟源的功能,所以目标系统2120和输入/输出设备以比较慢的速度运行。然而,提供到目标系统2120和外部输入/输出设备的数据被同步到软件时钟速度,正如RCC计算系统2141中的软件模型和RCC硬件阵列2190中的硬件模型。同样地,来自目标系统2120和外部输入/输出设备的数据与软件时钟同步被传输到协同校验系统2140。
因此,在外部接口和协同校验系统之间传输的输入/输出数据与软件时钟同步。本质上,每当数据在它们之间传递时,软件时钟使外部输入/输出设备和目标系统的运行与协同校验系统(在RCC计算系统和RCC硬件阵列中)的运行保持同步。软件时钟作被用来进行数据输入运行和数据输出运行。对数据输入运行而言,当一个指示器(在下文讨论)锁存来自RCC计算系统2141的软件时钟到外部接口时,其他指示器将从外部接口到RCC硬件阵列2190的硬件模型中的所选内部节点锁存这些输入/输出数据。在软件时钟被传输到外部接口这个周期内,指示器将以一个接一个的方式锁存这些输入/输出数据。当所有的数据都被锁存时,RCC计算系统能再一次产生另一个软件时钟,以便在需要时在另一个软件时钟周期内锁存更多数据。对数据输出运行而言,RCC计算系统能将软件时钟传输给外部接口,而且随后在指示器的帮助下,控制从RCC硬件阵列2190到外部接口的硬件模型内部节点的数据的选通。再一次,指示器以一个接一个的方式从内部节点到外部接口对数据进行门控。如果更多的数据需要被传输到外部接口,RCC计算系统能产生另一个软件时钟周期,然后启动所选指示器来对数据进行门控,送到外部接口。软件时钟的产生受到严格的控制,因此允许协同校验系统使协同校验系统和连接到外部接口的任何外部输入/输出设备之间的数据传输和数据估算保持同步。
扫描控制线路2173被用来允许协同校验系统2140针对可能出现的任何数据扫描数据总线2132、2136、2137,和2138。支持扫描信号的外部输入/输出控制器2151中的逻辑电路是一个指示器逻辑电路,其中各种输入被提供作为经由一个MOVE信号行进到下一个输入之前的一特定时间周期的输出。这个逻辑电路类似于图11中的方案。实际上,扫描信号起到一个针对一个多路复用器的选择信号的功能,除了它在轮转顺序中选择对多路复用器的各种输入。因此,在一个时序周期中,扫描控制线路2173上的扫描信号为可能来自目标系统2120的数据对数据总线2132进行取样操作。在下一个时序周期中,扫描控制线路2173上的扫描信号为可能来自一个可能被连接在那里的外部输入/输出设备的数据对数据总线2136进行取样操作。在下一个时序周期中,数据总线2137被取样,等等,所以协同校验系统2140在这个调试期间能接收并处理来自目标系统2120或外部输入/输出设备的所有接脚分布数据。由协同校验系统2140从取样数据总线2132、2136、2137和2138的过程中收到的任何数据都被经由外部输入/输出控制器2152传输到外部缓冲器2154。
注意,图69中的配置假设目标系统2120包含主CPU,而且用户设计是一些外设,例如一个视频控制器、网络适配器、图形适配器、鼠标或一些其他的支持设备、卡或逻辑电路。因此,目标系统2120包含连接到主PCI总线2129的目标应用程序(包括操作系统),而且协同校验系统2140包含用户设计,且被连接到次级PCI总线2132。根据用户设计的主题,该配置可能是完全不同的。举例来说,如果用户设计是一个CPU,目标应用程序会在协同校验系统2140的RCC计算系统2141中运行,而目标系统2120不再包含中央计算系统2121。实际上,总线2132现在会是一个主PCI总线,而总线2129会是一个次级PCI总线。实际上,用户设计并非是支持中央计算系统2121的外设,相反,用户设计当前是主计算中心,而所有的其他外设都支持用户设计。
为外部接口(外部输入/输出扩展器2139)和协同校验系统2140之间的传输数据的控制逻辑位于每个电路板2145-2149中。控制逻辑的主要部分位于外部输入/输出控制器2152中,但是其他部分位于各种内部输入/输出控制器(举例来说,2156和2158)以及可重新配置的逻辑元件中(举例来说,FPGA芯片2159和2165)。为实现说明的目的,有必要仅显示这个控制逻辑的一些部分,而不是所有的电路板中所有芯片相同的重复逻辑结构。图69中的虚线2150内的协同校验系统2140部分包含控制逻辑的一个子集。现在将参照图70-73更详细地讨论这个控制逻辑。
控制逻辑这个特定子集中的部件包括外部输入/输出控制器2152、三状态缓冲器2179、内部输入/输出控制器2156(CTRL1)、可重新配置的逻辑元件2157(芯片01,表示电路板1的芯片0),和部分连接到这些部件的各种总线以及部分控制线路。具体而言,图70举例说明了用于数据输入周期的控制逻辑部分,其中来自外部接口(外部输入/输出扩展器2139)和RCC计算系统2141的数据被传输到RCC硬件阵列2190。图72举例说明了数据输入周期的时序图。图71举例说明了用于数据输出周期的控制逻辑部分,其中来自RCC硬件阵列2190的数据被传输到RCC计算系统2141和外部接口(外部输入/输出扩展器2139)。图73举例说明了数据输出周期的时序图。
数据输入
根据本发明一个实施例的数据输入控制逻辑负责处理从RCC计算系统或外部接口到RCC硬件阵列传输的数据。数据输入控制逻辑的一个特定子集2150(见图69)被显示在图70中,而且包括外部输入/输出控制器2200、三状态缓冲器2202、内部输入/输出控制器2203、可重新配置的逻辑元件2204和允许在其中进行数据传输各种总线和控制线路。在这个数据输入实施例中也显示了外部缓冲器2201。这个子集举例说明了数据输入运行所必需的逻辑,其中来自外部接口和RCC计算系统的数据被传输到RCC硬件阵列。图70数据输入控制逻辑和图72的数据输入时序图将会在一起得到讨论。
数据周期的两种类型在本发明的这个数据输入实施例中得到使用——一个全局周期和一个软件到硬件(S2H)周期。全局周期被用于任何指向RCC硬件阵列中的所有芯片的数据,例如时钟、重新设置和一些其他被指向RCC硬件阵列中的许多不同节点的S2H数据。对于这些后者的″全局″S2H数据,更可行的方法时经由全局周期将这些数据送出去,而不是经由后续S2H数据。
软件到硬件周期被用来在所有的电路板中从一个芯片到另一个芯片以顺序的方式将数据从RCC计算系统中的测试平台处理,发送给RCC硬件阵列。因为用户设计的硬件模型被分布在几个电路板上,测试平台数据必须被提供到每个芯片以便进行数据估算。因此,数据被以顺序的方式传输到每个芯片中的每个内部节点,一次传输到一个内部节点。后续的传输允许一个被指定给一特定内部节点的特定数据被RCC硬件阵列中的所有芯片处理,因为硬件模型被分布在多个芯片之中。
对于该数据估算而言,协同校验提供两个地址空间-S2H和CLK。如上文所述,S2H和CLK空间是从内核到硬件模型的主输入。硬件模型实质上保持用户电路设计的所有寄存器部件和组合部件。此外,软件时钟被模型化在软件中,且被提供在CLK输入/输出地址空间中,以便与硬件模型连接。内核推动模拟时间,寻找有效的测试平台部件,且估算时钟部件。当任何时钟边缘被内核侦测到的时候,寄存器和存储器被更新,而且值通过组合部件被传播。因此,如果硬件加速模式被选中,在这些空间中的任何值改变都将触发硬件模型改变逻辑状态。
在数据传输时,DATA_XSFR信号处于逻辑″1″。在这个期间,局部总线2222-2230将被协同校验系统用来根据下列数据周期传输数据:(1)从RCC计算系统到RCC硬件阵列和CLK空间的全局数据;(2)从外部接口到RCC硬件阵列和外部缓冲器的全局数据;和(3)从RCC计算系统到RCC硬件阵列的S2H数据,在每个电路板中,一次一个芯片。因此,最初两个数据周期是全局周期的部分,而最后一个数据周期是S2H周期的部分。
对于数据输入全局周期的第一个部分(其中来自RCC计算系统的全局数据被发送去RCC硬件阵列)而言,外部输入/输出控制器2200使2255线路上的一个CPU_IN信号变为逻辑″1″。线路2255被连接到三状态缓冲器2202的一个启动输入端。通过线路2255上的逻辑″1″,三状态缓冲器2202允许局部总线2222上的数据传给三状态缓冲器2202另一侧的局部总线2223-2230。在这个特定例子中,局部总线2223、2224、2225、2226、2227、2228、2229,和2230分别对应于LD3、LD4(来自外部输入/输出控制器2200)、LD6(来自外部输入/输出控制器2200)、LD1、LD6、LD4、LD5和LD7。
全局数据从这些局部总线传输到内部输入/输出控制器2203中的总线线路2231-2235,然后再到FD总线线路2236-2240。在这个例子中,FD总线线路2236、2237、2238、2239,和2240分别对应于FD总线线路FD1、FD6、FD4、FD5和FD7。
这些FD总线线路2236-2240被连接到可重新配置的逻辑元件2204中的锁存器2208-2213的输入端。在这个例子中,可重新配置的逻辑元件对应于芯片0_1(也就是,电路板1中的芯片0)。同时,FD总线线路2236被连接到锁存器2208,FD总线线路2237被连接到锁存器2209和2211,FD总线线路2238被连接到锁存器2210,FD总线线路2239被连接到锁存器2212,FD总线线路2240被连接到锁存器2213。
这些锁存器2208-2213的每一个的启动输入被连接到一些全局指示器和软件到硬件(S2H)指示器。锁存器2208-2211的启动输入被连接到全局指示器,而锁存器2212-2213的启动输入被连接到S2H指示器。一些示范性全局指示器包括线路2241上的GLB_PTR0、线路2242上的GLB_PTR1、线路2243上的GLB_PTR2,和线路2244上的GLB_PTR3。一些示范性S2H指示器包括线路2245上的S2H_PTR0和线路2246上的S2H_PTR1。因为这些锁存器的启动输入被连接到这些指示器,所以锁存器在没有各自的正确指示器信号时,不能将数据锁存到用户设计的硬件模型中它们打算锁存的目的地节点。
这些全局和S2H指示器信号由一个数据输入指示器状态机2214在输出2254上产生。数据输入指示器状态机2214由线路2253上的DATA_XSFR和F_WR信号所控制。内部输入/输出控制器2203在线路2253上产生DATA_XSFR和F_WR信号。每当RCC硬件阵列和RCC计算系统或者和外部接口之间需要数据传输时,DATA_XSFR总是处于逻辑″1″。F_WR信号与F_RD信号相反,当需要对RCC硬件阵列进行一个写操作时,它处于逻辑″1″。一个经由F_RD信号的读操作需要从RCC硬件阵列到RCC计算系统或外部接口的数据传输。如果DATA_XSFR和F_WR信号都处于逻辑″1″,数据输入指示器状态机能按照适当的编程顺序产生合适的全局或S2H指示器信号。
这些锁存器的输出2247-2252被连接到用户设计硬件模型中的各种内部节点。一些这种内部节点对应于用户设计的输入接脚分布。用户设计有其他内部节点,它们正常情况下不可以经由接脚分布来访问,但是这些非接脚分布内部节点可以实现其他的调试目的,为需要在用户设计中将激励应用到各种内部节点的设计者提供灵活性,无论它们是否是输入接脚分布。对于被外部接口应用到用户设计的精细硬件模型的激励而言,数据输入逻辑和那些对应于输入接脚分布的内部节点是有关联的。举例来说,如果用户设计是一个CRTC 6845视频控制器,那么一些输入接脚分布可能如下所述:
LPSTB-a light pen strobe pin(一个光笔选通接脚)
~RESET-low level signal to reset the 6845 controller(低电平信号以复位6845控制器)
RS-register select(寄存器选择)
E-enable(启动)
CLK-clock(时钟)
~CS-Chip select(芯片选择)
在这个视频控制器中,其他输入接脚分布也是可用的。基于与外部世界连接的输入接脚分布的数目,节点的数目得到确定,而且因此锁存器的数目和指示器的数目也可以得到确定。被配置在RCC硬件阵列中的一些硬件模型,可能有,举例来说,三十个分开的锁存器,它们与每一个GLB_PTR0、GLB_PTR1、GLB_PTR2、GLB_PTR3、S2H-PTR0和S2H_PTR1是相关的,形成总数为180的锁存器(=30X6)。在其他的设计中,如果需要的话可以使用更多的全局指示器例如GLB_PTR4到GLB_PTR30。同样地,更多S2H指示器例如S2H_PTR2到S2H_PTR30也可以根据需要使用。这些指示器和它们对应的锁存器基于每个用户设计的硬件模型的需求。
回到图70和72,只有当锁存器被用适当的全局指示器或S2H指示器信号启动时,FD总线线路上的数据才设法进入这些内部节点。否则,这些内部节点得不到FD总线上任何数据的驱动。在CPU_IN=1时序周期的前半周期内,当F_WR处于逻辑″1″时,GLB_PTR0处于逻辑″1″,以便经由线路2247驱动FD1上的数据到对应的内部节点。如果存在依赖GLB_PTR0启动的其他锁存器,这些锁存器也会锁存数据到它们对应的内部节点。在CPU_IN=1时序周期的后个半周期中,F_WR再一次进入逻辑″1″,触发GLB_PTR1上升到逻辑″1″。这驱动FD6上的数据到连接到线路2248的内部节点。这也将软件时钟信号发送到线路2223上,以便被锁存器2205和启动线路2215上的GLB_PTR1信号锁存到线路2216上。这个软件时钟被传输到目标系统和其他外部输入/输出设备的外部时钟输入端。因为GLB_PTR0和GLB_PTR1仅仅被用于数据输入全局周期的第一部分,CPU_IN回到逻辑″0″,而且这就完成了全局数据从RCC计算系统到RCC硬件阵列的传输。
现在将讨论数据输入全局周期的第二部分,其中来自外部接口的全局数据被传输到RCC硬件阵列和外部缓冲器。同样,来自目标系统或外部输入/输出设备的、被引向用户设计的各种输入接脚分布信号必须被提供到硬件模型和软件模型。通过使用适当的指示器,这些数据能被传输到硬件模型,并且被锁存以便驱动内部节点。通过首先将它们储存在外部缓冲器2201中以便稍后由RCC计算系统取回,并更新软件模型的内部状态,这些数据也被传输到软件模型。
CPU_IN当前处于逻辑″0″,而且EXT_IN处于逻辑″1″。因此,外部输入/输出控制器2200中的三状态缓冲器2206被启动,以便将数据放在PCI总线线路上(例如总线线路2217和2218)。这些PCI总线线路也被连接至FD总线线路2219,以便储存到外部缓冲器2201中。在EXT_IN信号处于逻辑″1″的时序周期的前半周期中,GLB_PTR2处于逻辑″1″。这将锁存在FD4上的数据(经由总线线路2217、2224,和局部总线线路2228(LD4)),这些数据将被锁存到连接到线路2249上的硬件模型中的内部节点。
在EXT_IN信号处于逻辑″1″的时序周期的后半周期中,GLB_PTR3处于逻辑″1″。这将锁存FD6上的数据(经由总线线路2218,2225,和局部总线线路2227(LD6)),这些数据将被锁存到连接到线路2250上的硬件模型中的内部节点。
如上文所述,通过首先将它们储存在缓冲器2201中以便稍后由RCC计算系统取回并更新软件模型的内部状态,这些来自目标系统或一些其他外部输入/输出设备的数据也被传输到软件模型。总线线路2217和2218上的这些数据在FD总线FD[63:0]2219上被提供给外部缓冲器2201。在外部缓冲器2201中储存每个数据的特定存储器地址由存储器地址计数器2207经由总线2220提供到外部缓冲器2201。为了实现这些储存,WR_EXT_BUF信号被经由线路2221提供到外部缓冲器2201。在外部缓冲器2201充满之前,RCC计算系统将会读外部缓冲器2201的内容,以便对软件模型进行适当的更新。在RCC硬件阵列中被传输到硬件模型的各种内部节点的任何数据将可能导致硬件模型的一些内部状态改变。因为RCC计算系统在软件中具有整个用户设计的模型,这些在硬件模型中的内部状态变化也应该在软件模型中得到反映。这就完成了数据输入的全局周期。
现在将讨论S2H周期。S2H周期被用来从RCC计算系统到RCC硬件阵列传输测试平台数据,然后按序列为每个电路板从一个芯片向另一个芯片传输那个数据。CPU_IN信号进入逻辑″1″,而EXT_IN信号进入逻辑″0″,表明数据传输是在RCC计算系统和RCC硬件阵列之间进行。不涉及外部接口。CPU_IN信号也启动三状态缓冲器2202,以便允许数据从局部总线2222进入内部输入/输出控制器2203。
在CPU_IN=1时序周期的开始处,S2H_PTR0进入逻辑″1″,它可以锁存FD5上的数据(经由局部总线2222、局部总线2229、总线线路2234,以及FD总线2239),这些数据将被锁存到连接到线路2251上的硬件模型中的内部节点。在CPU_IN=1时序周期的第二部分中,S2H_PTR1进入逻辑″1″,它可以锁存在FD7上的数据(经由局部总线2222、局部总线2230、总线线路2235,以及FD总线2240),这些数据将被锁存到连接到线路2252上的硬件模型中的内部节点。在后续数据估算期间,来自RCC计算系统的数据被首先传输到芯片m1,然后到芯片0_1(也就是,电路板1上的芯片0),芯片1_1(也就是,电路板1上的芯片1),直到最后一个电路板上的最后一个芯片,芯片7_8.(也就是,电路板8上的芯片7)。如果芯片m2是可用的,数据也被移进这个芯片。
在这个数据传输结束的时候,DATA_XSFR返回逻辑″0″。注意,来自外部接口输入/输出的数据被当作全局数据,并在全局周期期间得到处理。这就完成了数据输入控制逻辑和数据输入周期的讨论。
数据输出
现在讨论本发明的数据输出控制逻辑实施例。根据本发明实施例的数据输出控制逻辑负责处理从RCC硬件阵列被传输到RCC计算系统和外部接口的数据。在响应激励(外部或其它的)处理数据的期间,硬件模型产生某种输出目标应用程序或一些输入/输出设备可能需要的数据。这些输出数据可能是实质的数据、地址、控制信息或其他应用程序或设备可能在自身处理中需要的其他有关信息。进入RCC计算系统(它在软件中可能有其他外部输入/输出设备的模型)、目标系统或外部输入/输出设备的这些输出数据被提供在各种内部节点上。如上文关于数据输入逻辑的讨论的那样,一些这种内部节点对应于用户设计的输出接脚分布。用户设计有其他的内部节点,它们正常是不能经由接脚分布来访问的,但是这些非接脚分布的内部节点针对其他的调试目的,以便为设计者提供灵活性,他们希望在用户设计中的各种内部节点读并且分析激励,不管它们是否是输出接脚分布。对于来自用户设计的精细硬件模型、被应用到外部接口或RCC计算系统(它可能在软件中有其他输入/输出设备的模型)得激励而言,数据输出逻辑和对应于输出引出脚的那些内部节点是有关联的。
举例来说,如果用户设计是一个CRTC 6845视频控制器,一些输出接脚分布可能如下:
MA0-MA13-memory address(存储器地址)
D0-D7-data bus(数据总线)
DE-display enable(显示启动)
CURSOR-cursor position(光标位置)
VS-vertical synchronization(垂直同步)
HS-horizontal synchronization(水平同步)
在这个视频控制器中的其他输出引出脚也是可用的。基于与外部世界连接的输出接脚分布的数目,节点的数目以及门控逻辑的数目和指示器数目也能得到容易的确定。因此,视频控制器上的输出接脚分布MA0-MA13为视频RAM提供存储器地址。VS输出接脚分布为垂直同步提供信号,并因此引起显示器上的一个垂直回扫。输出接脚分布D0-D7是八个终端,它们形成双向数据总线用于目标系统中CPU访问内部6845寄存器。这些输出接脚分布对应于硬件模型中的某些内部节点。当然,这些内部节点的数目和性质根据用户设计而不同。
来自这些输出接脚分布内部节点的数据必须被提供到RCC计算系统,因为RCC计算系统在软件中包含整个用户设计的一个模型,而且在硬件模型中发生的任何事件都必须被传递到软件模型,以便作出相应的变化。这样,软件模型将具有与硬件模型一致的信息。此外,RCC计算系统可能有输入/输出设备的设备模型,用户或设计者决定将这些设备模型化在软件中,而不是将一个真实设备连结到外部输入/输出扩展器上的端口之一。举例来说,用户可能作出决定,认为将显示器或扬声器模型化在软件中要比在外部输入/输出扩展器上的端口之一插入一个真实的显示器或扬声器更容易、且更有效。此外,来自硬件模型中的这些内部节点的数据必须被提供到目标系统和任何其他外部输入/输出设备。为了让这些输出接脚分布内部节点中的数据被传输到RCC计算系统和目标系统以及其他的外部输入/输出设备,根据本发明一个实施例的数据输出控制逻辑被提供在协同校验系统中。
数据输出控制逻辑使用数据输出周期,该周期涉及从RCC硬件阵列2190到RCC计算系统2141以及外部接口(外部输入/输出扩展器2139)的数据传输。在图69中,用于在外部接口(外部输入/输出扩展器2139)和协同校验系统2140之间传输数据的控制逻辑存在于每个电路板2145-2149中。控制逻辑的主要部分存在于外部输入/输出控制器2152中,但是其他部分存在于各种内部输入/输出控制器(举例来说,2156和2158)和可重新配置的逻辑元件中(举例来说,FPGA芯片2159和2165)。同样,为了说明的目的,在所有的电路板中为所有的芯片只展现这个控制逻辑的一些部分,而不是相同的重复逻辑结构。图69中虚线2150里面的协同校验系统2140部分包含控制逻辑的一个子集。现在将参照图71和73详细讨论这个控制逻辑。图71举例说明了用于数据输出周期的控制逻辑部分。图73举例说明了数据输出周期的时序图。
数据输出控制逻辑的一个特定子集被显示在图71中,并且包括外部输入/输出控制器2300、三状态缓冲器2301、内部输入/输出控制器2302、一个可重新配置的逻辑元件2303,以及允许数据在其间传输的各种总线和控制线路。这个子集显示了用于数据输出运行必需的逻辑,其中来自外部接口和RCC计算系统的数据被传输到RCC硬件阵列。图71的数据输出控制逻辑和图73的数据输出时序图将在一起得到讨论。
与数据输入周期的二周期类型相反,数据输出周期只包括一个类型的周期。数据输出控制逻辑需要来自RCC硬件模型的数据被顺序传输到:(1)RCC计算系统,然后到(2)RCC计算系统和外部接口(到目标系统和外部输入/输出设备)。具体而言,数据输出周期需要在RCC硬件阵列中来自硬件模型内部节点的数据首先被传输到RCC计算系统,然后到RCC计算系统,其次到每个芯片内的外部接口,在每个电路板中,一次一个芯片,而且一次一个电路板。
如同数据输入控制逻辑一样,指示器将被用来从内部节点到RCC计算系统和外部接口来选择(或门控)数据。在图71和73中举例说明的一个实施例中,一个数据输出指示器状态机2319在总线2359上产生五个指示器H2S_PTR[4:0],既用于硬件到软件数据,也用于硬件到外部接口数据。数据输出指示器状态机2319由线路2358上的DATA_XSFR和F_RD信号控制。内部输入/输出控制器2302产生线路2358上的DATA_XSFR和F_RD信号。只要RCC硬件阵列和RCC计算系统或外部接口之间需要数据传输时,DATA_XSFR总是处于逻辑″1″。F_RD信号与F_WR信号相反,只要需要从RCC硬件阵列进行读操作,它就处于逻辑“1″。如果DATA_XSFR和F_RD信号都处于逻辑″1″,数据输出指示器状态机2319就能在适当的编程序列中产生适当的H2S指示器信号。其他的实施例可能因为用户设计的需要而使用较多的指示器(或较少的指示器)。
这些H2S指示器信号被提供到一个门控逻辑。门控逻辑的一组输入2353-2357被指向一些“与”门2314-2318。另一组输入2348-2352被连接到硬件模型的内部节点。因此,“与”门2314具有来自一个内部节点的输入2348,和来自H2S_PTR0的输入2353;“与”门2315具有来自一个内部节点的输入2349和来自H2S_PTR1的输入2354;“与”门2316具有来自一个内部节点的输入2350和来自H2S_PTR2的输入2355;“与”门2317具有来自一个内部节点的输入235和来自H2S_TR3的输入2356;“与”门2318具有来自一个内部节点的输入2352和来自H2S_PTR4的输入2357。没有正确的H2S_PTR指示器信号,内部节点就不能被驱动到RCC计算系统或外部接口。
这些“与”门2314-2318的各自输出2343-2347被连接到“或”门2310-2313。因此,“与”门输出2343被连接到“或”门2310的输入;“与”门输出2344被连接到“或”门2311的输入;“与”门输出2345被连接到“或”门2311的输入;“与”门输出2346被连接到“或”门2312的输入;“与”门输出2347被连接到“或”门2313的输入。注意,“与”门2315的输出2344不被连接到一个独享的“或”门;相反,输出2344被连接到“或”门2311,2311同时也被连接到“与”门2316的输出2345。“或”门2310-2313的其它输入2360-2366能被连接到其他的“与”门的输出(未显示),这些“与”门自己被连接到其他内部节点和H2S_PTR指示器。这些“或”门和它们的特定输入的使用以用户设计和被配置的硬件模型为基础。因此,在其他的设计中,可能使用较多的指示器,而且来自“与”门2315的输出2344被连接到一个不同的“或”门,而不是“或”门2311。
“或”门2310-2313的输出2339-2342被连接到FD总线线路FD0、FD3、FD1和FD4。在用户设计的这个特定例子中,只有四个输出接脚分布信号将被传输到RCC计算系统和外部接口。因此,FD0被连接到“或”门2310的输出;FD3被连接到“或”门2311的输出;FD1被连接到“或”门2312的输出;FD4被连接到“或”门2313的输出。这些FD总线线路经由内部输入/输出控制器2302中的内部线路2334-2338被连接到局部总线线路2330-2333。在这个实施例中,局部总线线路2330是LD0,局部总线线路2331是LD3,局部总线线路2332是LD1,局部总线线路2333是LD4。
为了实现将这些局部总线线路2330-2333上的数据传输到RCC计算系统,这些局部总线线路被连接到三状态缓冲器2301。在它的正常状态中,三状态缓冲器2301允许数据从局部总线线路2330-2333进入到局部总线2320。对比而言,在数据输入期间,只有当CPU_IN信号被提供到三状态缓冲器2301的时候,数据才被允许从RCC计算系统通过到RCC硬件阵列。
为了使这些局部总线线路2330-2333上的数据被传输到外部接口,这里提供了线路2321-2324。线路2321被连接到线路2330和外部输入/输出控制器2300中的一些锁存器(未显示);线路2322被连接到线路2331和外部输入/输出控制器2300中的一些锁存器(未显示);线路2323被连接到线路2332和外部输入/输出控制器2300中的锁存器2305;线路2324被连接到线路2333和外部输入/输出个控制器2300中的锁存器2306。
这些锁存器2305和2306的每个输出都被连接到一个缓冲器,接着到外部接口,然后被连接到目标系统或外部输入/输出设备的适当输出接脚分布。因此,锁存器2305的输出被连接到缓冲器2307和线路2327。同样,锁存器2306的输出被连接到缓冲器2308和线路2328。另外一个锁存器(未显示)的另外一个输出可以被连接到线路2329。在这个例子中,线路2327-2329分别相应目标系统或某外部输入/输出设备的导线1、导线4和导线3。最终,在一个数据从硬件模型到外部接口进行传输期间,用户设计的硬件模型得到配置,以便连接到线路2350的内部节点对应线路2329上的导线3,连接到线路2351的内部节点对应于线路2327上的导线1,而且连接到线路2352的内部节点对应于线路2328上的导线4。同样,导线3对应于线路2331上的LD3,导线1对应于线路2332上的LD1,而且导线4对应于线路2333上的LD4。
一个LUT表2309被连接到这些锁存器2305和2306的启动输入。LUT表2309由线路2367上触发LUT表地址计数器2304运行的F_RD信号所控制。在每个计数器增量处,指示器在LUT表2309中启动一个特定的行。如果该特定行中的一项(或比特)处于逻辑″1″,连接到LUT表2309中那个特定项的LUT输出线路将启动它的对应锁存器,并驱动数据进入外部接口,且最终进入目标系统或某外部输入/输出设备中的所需目的地。举例来说,LUT输出线路2325被连接到锁存器2305的启动输入,而且LUT输出线路2326被连接到锁存器2306的启动输入。
在这个例子中,LUT表2309的行0-3被编程来启动对应于芯片m1中的内部节点输出接脚分布导线的锁存器。同样,行4-6被编程来启动对应于芯片0_1(也就是,电路板1中的芯片0)中的内部节点输出接脚分布导线的锁存器。在行4中,比特3处于逻辑″1″。在行5中,比特1处于逻辑″1″。在行6中,比特4处于逻辑″1″。所有其他项目或比特位都处于逻辑″0″。因为一个单一输出接脚分布线路不能驱动多重输入/输出设备,所以对LUT表中任何给定比特位(或列)而言,只有一项处于逻辑″1″。换句话说,硬件模型中的一个输出接脚分布内部节点只能为连接到外部接口的一个单一线路提供数据。
如上文所述,数据输出控制逻辑需要RCC硬件模型中的每个芯片中的每个可重新配置的逻辑元件中的数据被顺序传输到:(1)RCC计算系统,然后到(2)RCC计算系统和外部接口(到目标系统和外部输入/输出设备)。RCC计算系统需要这些数据,因为它在软件中具有一些输入/输出设备的模型,而且对那些没被用于这些模型化的输入/输出设备之一的数据而言,RCC计算系统需要监测它们,以便其内部状态与RCC硬件阵列中的硬件模型的状态是一致的。在图71和73中举例说明的这个例子中,只有七个内部节点将被驱动,用于输出到RCC计算系统和外部接口。那些内部节点中的二个节点位于芯片m1中,其他五个内部节点位于芯片0_1中(也就是,电路板1中的芯片0)。当然,对这个特定的用户设计而言,可能需要在这些芯片和其他芯片中的其他内部节点,但图71和73将只举例说明这七个节点。
在数据传输期间,DATA_XSFR信号处于逻辑″1″。在这个期间,局部总线2330-2333将被协同校验系统用来将来自RCC硬件阵列中每个电路板中的每个芯片的数据顺序传输到RCC计算系统和外部接口。DATA_XSFR和F_RD信号控制数据输出指示器状态机的运行,以便产生适当的指示器信号H2S_PTR[4:0]输出接脚分布内部节点的适当门电路。F_RD信号也控制LUT表地址计数器2304,以便将内部节点数据传输到外部接口。
芯片m1中的内部节点将首先得到处理。当F_RD在数据传输周期开始时升到逻辑″1″的时候,芯片m1中的H2S_PTR0进入逻辑″1″。这经由三状态缓冲器2301和局部总线2320驱动芯片m1中的那些内部节点中的、取决于H2S_PTR0的数据进入RCC计算系统中。LUT表地址计数器2304对LUT表2309列0进行计数和指向,以便将芯片m1的适当数据锁存到外部接口。当F_RD信号再一次进入逻辑″1″的时候,内部节点中能被H2S_PTR1驱动的数据被传输到RCC计算系统和外部接口。H2S_PTR1进入逻辑″1″,并且对应于第二F_RD信号,LUT表地址计数器2304对LUT表2309列1进行计数和指向,以便将芯片m1的适当数据锁存到外部接口。
可重新配置的逻辑元件2303(也就是,芯片0_1,或电路板1中的芯片0)的五个内部节点现在将得到处理。在这个例子中,来自与H2S_PTR0和H2SPTR1有关的两个内部节点的数据将只被传输到RCC计算系统。来自与H2S_PTR2,H2S_PTR3和H2S_PTR4有关的三个内部节点的数据将被传输到RCC计算系统和外部接口。
当F_RD升到逻辑″1″的时候,芯片2303中的H2S_PTR0进入逻辑″1″。这驱动芯片2303中的内部节点里取决于H2S_PTR0的数据,使其经由三状态缓冲器2301和局部总线2320进入RCC计算系统。在这个例子中,连接到线路2348的内部节点取决于线路2353上的H2S_PTR0。当F_RD信号再一次进入逻辑″1″的时候,内部节点中能被H2S_PTR1驱动的数据被传输到RCC计算系统。这里,连接到线路2349上的内部节点受到影响。这个数据被驱动去线路2331和2322上的LD3。
当F_RD信号再一次进入逻辑″1″的时候,H2S_PTR2进入逻辑″1″,而且在被连接到线路2350的内部节点里的数据被提供到LD3上。这个数据被提供到RCC计算系统和外部接口。三状态缓冲器2301允许数据传输到局部总线2320,然后进入RCC计算系统之内。至于外部接口,通过启动H2S_PTR2信号,这个数据被驱动到在线路2331和2322上的LD3。响应于F_RD信号,LUT表地址计数器2304计数并指向LUT表2309的列4,以便将适当的数据从这个连接到线路2350上的内部节点锁存到位于外部接口的线路2329(导线3)。
当F_RD信号再一次进入逻辑″1″的时候,H2S_PTR3进入逻辑″1″,而且在被连接到线路2351的内部节点里的数据被提供到LD1上。这个数据被提供到RCC计算系统和外部接口。三状态缓冲器2301允许数据传输到局部总线2320,然后进入RCC计算系统之内。至于外部接口,通过启动H2S_PTR3信号,这个数据被驱动到线路2332和2323上的LD1。响应于F_RD信号,LUT表地址计数器2304计数并指向LUT表2309的列5,以便将适当的数据从这个连接到线路2351上的内部节点锁存到位于外部接口的线路2327(导线1)。
当F_RD信号再一次进入逻辑″1″的时候,H2S_PTR4进入逻辑″1″,而且在被连接到线路2352的内部节点里的数据被提供到LD4上。这个数据被提供到RCC计算系统和外部接口。三状态缓冲器2301允许数据传输到局部总线2320,然后进入RCC计算系统之内。至于外部接口,通过启动H2S_PTR4信号,这个数据在线路2333和2324上被驱动到LD4。对响应于F RD信号,LUT表地址计数器2304计数并指向LUT表2309的列6,以便将适当的数据从这个连接到线路2352上的内部节点锁存到位于外部接口的线路2328(导线4)。
将芯片m1的内部节点中的数据首先驱动到RCC计算系统然后到RCC计算系统和外部接口的这个过程在其他芯片上以顺序方式继续进行。首先,芯片m1的内部节点受到驱动。其次,芯片0_1(芯片2303)的内部节点受到驱动。然后,芯片1_1如果有任何的内部节点,将受到驱动。这个过程继续进行,直到最后一个电路板中的最后一个芯片中的最后一个节点被驱动。因此,如果芯片7_8有任何的内部节点,它都将受到驱动。最后,如果芯片m2有任何内部节点,它将受到驱动。
虽然图71显示了用来仅在芯片2303中驱动内部节点的数据输出控制逻辑,但是其他芯片也可能有内部节点需要被驱动进入RCC计算系统和外部接口。不管内部节点数目多少,数据输出逻辑将驱动数据从一个芯片内部节点进入RCC计算系统,然后在另一个周期,驱动相同芯片中不同组的内部节点进入RCC计算系统和外部接口。数据输出控制逻辑然后继续行进到下一个芯片,并且运行相同两步操作,即首先驱动指定到RCC计算系统的数据,然后驱动指定到外部接口的数据到RCC计算系统和外部接口。即使数据将被用于外部接口,RCC计算系统也必须了解那个数据,因为RCC计算系统在软件中有整个用户设计的一个模型,该模型必须具有与RCC硬件阵列中的硬件模型信息一致的内部状态信息。
电路板布局
现在将参照图74讨论根据本发明的一个实施例的协同校验系统的电路布局。电路板被安装在RCC硬件阵列中。电路板布局类似于图8、36-44举例说明以及相关文本描述的布局。
RCC硬件阵列包括六个电路板,在一个实施例中。电路板m1被连接到电路板1,而电路板m2被连接到电路板8。电路板1、电路板2、电路板3和电路板8的连接和安排在上文已经参照图8和36-44得到描述。
电路板m1包含芯片m1。电路板m1相关于其他电路板的互连结构便于芯片m1被连接到电路板1的芯片0、芯片2、芯片4和芯片6的南方向上的互连。类似的情况是,电路板m2包含芯片m2。电路板m2相关于其他电路板的互连结构便于芯片m2被连接到电路板8的芯片0、芯片2、芯片4和芯片6的南方向上的互连。
X.范例
为了说明本发明一个实施例的操作,将使用一个假设的用户电路设计。在结构性寄存器转移电平(RTL)HDL码中,示范性用户电路设计如下所示:
module register(clock,reset,d,q)(;
input clock,d,reset;
outputq;
reg q;
always@(posedge clock or negedge reset)
<!-- SIPO <DP n="243"> -->
<dp n="d243"/>
if(~reset)
q=0;
else
q=d;
endmodule
module example;
wire d1,d2,d3;
wire q1,q2,q3;
reg sigin;
wire sigout;
reg clk,reset;
register reg1(clk,reset,d1,q1);
register reg2(clk,reset,d2,q2);
register reg3(clk,reset,d3,q3);
assign d1=sigin^q3;
assign d2=q1^q3;
assign d3=q2^q3;
assign sigout=q3;
//a clock generator
always
begin
clk=0;
<!-- SIPO <DP n="244"> -->
<dp n="d244"/>
#5;
clk=1;
#5;
end
//a signal generator
always
begin
#10;
sigin=$random;
end
//initialization
initial
begin
reset=0;
sigin=0;
#1;
reset=1;
#5;
$monitor($time,″%b,%b,″sigin,sigout);
#1000$finish;
end
end module
这个码在图26中被再现。要理解本发明,不必了解这个电路设计的特定功能性细节。然而,读者应该了解,用户产生这个HDL码以便设计一个电路用于模拟。通过这段码所代表的电路执行用户所设计的一些功能以便响应输入信号,并产生一个输出。
图27显示了参照图26讨论的HDL码的电路图。在大部分情形下,在以HDL形式代表之前用户可能实际上产生这种性质的一个电路图。一些原理图攫取工具允许输入图示性电路图,而且在处理之后,这些工具产生可使用的码。
如图28所示,模拟系统执行部件类型分析。作为代表用户特定电路设计的本来在图26中呈现的HDL编码,现在已经得到了分析。由″module register(clock,reset,d,q))))″开始,且以″end module″为结束,并进一步标记为编号900的最初几行码是一个寄存器定义区段。
下几行码,编号907,代表了一些导线互连信息。本领域的技术人员应该了解,HDL中的导线变量被用来代表例如门电路之类的结构性实体之间的实际连结。因为HDL主要被用来模型化数字电路,因此导线变量是必需的变量。通常,″q″(举例来说,q1、q2、q3)代表输出导线线路,而且″d″(举例来说,d1、d2、d3)代表输入导线线路。
编号908显示了作为一个测试平台输入的″sigin″。编号909显示了作为一个测试平台输出的″sigout″。
编号901显示了寄存器部件S1、S2和S3。编号902显示了组合部件S4、S5、S6和S7。注意,组合部件S4-S7有输出变量d1、d2和d3,它们是寄存器部件S1-S3的输入。编号903显示了时钟部件S8。
下几个系列的码的行号显示了测试平台部件。编号904显示了测试平台部件(驱动器)S9。编号905显示了测试平台部件(初始化)S10和S11。编号906显示了测试平台部件(显示器)S12。
下表概述了部件类型分析:
S1 |
寄存器 |
S2 |
寄存器 |
S3 |
寄存器 |
S4 |
组合部件 |
S5 |
组合部件 |
S6 |
组合部件 |
S7 |
组合部件 |
S8 |
时钟 |
S9 |
测试平台(驱动器) |
S10 |
测试平台(初始化) |
S11 |
测试平台(初始化) |
S12 |
测试平台(监视器) |
基于部件类型分析,系统为整个电路产生一个软件模型,并为寄存器和组合部件产生一个硬件模型。S1-S3是寄存器部件,而S4-S7是组合部件。这些部件将被模型化在硬件中,以便允许模拟仿真系统的用户或者在软件中模拟整个电路,或者在软件中模拟、并且在硬件中进行选择性加速。无论在哪一种情况下,用户都可对模拟和硬件加速模式进行控制。另外,用户能用一个目标系统来仿真电路,同时仍然保留软件控制,一个循环接一个循环启动、停止、检查值,和断言值。
图29显示了同样的结构性RTL级HDL码的一个信号网络分析。如图所示,S8、S9、S10和S11被模型化或提供在软件中。S9本质上是测试平台程序,它产生sigin信号,而S12本质上是测试平台显示器过程,它接收sigout信号。在这个例子中,S9产生一个随机sigin来模拟电路的信号。然而,寄存器S1-S3和组合部件S4-S7被模型化到硬件和软件中。
对于软件/硬件边界而言,系统为将被用来连接软件模型和硬件模型的各种驻留信号(也就是,q1、q2、q3、CLK、sigin、sigout)分配存储器空间。下表列出了存储器空间的分配:
信号 |
存储器地址空间 |
q1 |
REG |
q2 |
REG |
q3 |
REG |
clk |
CLK |
sigin |
S2H |
sigout |
H2S |
图30为这个例证性电路设计显示了软件/硬件划分结果。图30是有关软件/硬件划分的一个更可实现的例示图。软件端910通过软件/硬件边界911和PCI总线913被连接到硬件端912。
软件端910包含软件内核,而且被它控制。一般而言,内核是控制全部模拟仿真系统运行的主要控制回路。只要任何测试平台程序被激活,内核就估算有效的测试平台部件、估算时钟部件、侦测时钟边缘以便更新寄存器和存储器,并传播组合逻辑数据,推动模拟时间。即使内核驻留在软件端,它的一些运行或语句也能在硬件中运行,因为存在一个硬件模型来用于那些语句和运行。因此,软件控制软件模型和硬件模型。
软件端910包括用户电路的整个模型,包括S1-S12。软件端中的软件/硬件边界部分包括输入/输出缓冲器或地址空间S2H、CLK、H2S,以及REG。注意,驱动器测试平台程序S9被连接到S2H存储器空间,显示器测试平台程序S12被连接到H2S存储器空间,而时钟产生器S8被连接到CLK存储器空间。输出信号q1-q3的寄存器S1-S3将被指定到REG空间。
硬件模型912具有组合部件S4-S7的模型,它驻留在纯硬件端。在硬件模型912的软件/硬件边界上,sigout、sigin、寄存器输出q1-q3和软件时钟916被实现。
除了用户定制电路设计的模型以外,系统还产生软件时钟和地址指示器。软件时钟提供信号来启动寄存器S1-S3的输入。如上文所述,根据本发明的软件时钟避免了竞争状态和占用时间扰乱问题。当主时钟在软件中侦测到时钟边缘的时候,侦测逻辑在硬件中触发一个对应的侦测逻辑。时钟边缘寄存器916对寄存器启动输入及时地产生一个启动信号,以便对任何驻留在寄存器输入端的数据进行门控。
为了描述和认识的目的,这里也显示了地址指示器914。地址指示器实际上在每个FPGA芯片中得到实现,并且允许数据以选择性和顺序性的方式被传输到它的目的地。
组合部件S4-S7也被连接到寄存器部件S1-S3、sigin,和sigout。这些信号在输入/输出总线915上来自或被送达PCI总线913。
在映射、布局,和步线步骤之前,一个完全的硬件模型被显示在图31中,不包括地址指示器。系统还没有把模型映射到具体的芯片。寄存器S1-S3被连接到输入/输出总线和组合部件S4-S6。组合部件S7仅仅是寄存器S3的输出q3。sigin、sigout和软件时钟920也被模型化。
一旦硬件模型被确定了,系统就可以接着将模型进行映射、布局,以及在一个或多个芯片之内布线。这个特定例子实际上能在单一Altera FLEX 10K芯片上实现,但是为了指导的目的,这个例子将假设需要两个芯片来实现这个硬件模型。图32为这个例子显示了这个例子的一个具体的硬件模型-芯片划分结果。
在图32中,完整的模型(除了输入/输出和时钟边缘寄存器以外)与被虚线代表的芯片边界一起显示。这个结果由模拟仿真系统的编译器在最后的配置文件产生之前产生。因此,硬件模型针对导线921、922和923在这两个芯片之间至少需要三个导线。为了将在这两个芯片(芯片1和芯片2)之间需要的引脚/导线数目减到最少,可以产生另一个模型-芯片划分,或使用一个多路复用方案。
分析图32中显示的这个特定划分结果,在这两个芯片之间的导线数目能被减少到两个,方法是将sigin导线923从芯片2中移动到芯片1。事实上,图33显示了这样一个划分结果。虽然仅从导线数目上考虑,图33中的特定划分似乎比图32中显示的划分更好,但是这个例子将假设模拟仿真系统在执行了映射、布局,和布线之后选择了图32的划分。图32的划分结果将被用来作为产生配置文件的基础。
图34为同样的假设例子显示了逻辑修补操作,其中显示了在两个芯片中的最终实现。该系统使用图32的划分结果来产生配置文件。然而,为了简便未显示地址指示器。图中显示了两个FPGA芯片930和940。芯片930包括,用户电路设计被划分的部分,一个TDM单元931(接收器端),软件时钟932和输入/输出总线933,以及其他部件。芯片940包括用户电路设计被划分的部分,发送端的TDM单元941,软件时钟942和输入/输出总线943,及其他部件。TDM单元931和941已经参照图9(A)、9(B),和9(C)得到了讨论。
这些芯片930和940有两个互连导线944和945,它们将硬件模型连接在一起。这两个互连导线是图8中显示的互连结构的一部分。参照图8,这样的一个互连是位于芯片F32和F33之间的互连611。在一个实施例中,每个互连的导线/引脚最大数目是44。在图34中,模型化的电路在芯片930和940之间只需要两个导线/引脚。
这些芯片930和940被连接到组总线950。因只要实现两个芯片,所以两个芯片都位于相同的组中,或每个芯片属于一个不同的组。最佳的方法是,一个芯片被连接到一个组总线,而另一个芯片被连接到另一个组总线,以便确保在FPGA接口处的传输量等于PCI接口处的传输量。
前面为了例证和说明的目的描述了本发明的一个优选实施例。这个说明并非是没有遗漏的,也并非为了将本发明限制为呈现出的特定形式。显而易见,本领域的技术人员可以清楚地发现许多修改和变更。本领域的技术人员将容易地发现,其他的应用可以替换此处提供的应用,而不会背离本发明的精神和范围。因此,本发明只应受到权利要求书的限制。