时序不灵敏及无假信号逻辑系统和方法
相关美国专利
此为序号为08/850,136的美国专利申请案的部份继续申请案,其于1997年5月2日递交美国专利商标局。
技术领域
本发明一般涉及电子设计自动化(EDA)。更具体的说,本发明涉及可以解决多种应用中的保持时间和时钟假信号问题的数字逻辑装置,包括模拟,硬件加速和协同校验。
背景技术
通常,电子设计自动化(EDA)是一种基于计算机的工具,其配置在各种工作站上,为设计者提供自动化或半自动化的工具,用于设计和验证用户的自定义电路设计。EDA通常可用于任何电子设计的建立,分析和编辑,这些设计的目的是模拟,仿真,原型设计,执行,或计算。EDA技术还可用来进行系统(即目标系统)的开发,这些系统将使用用户设计的子系统或组件。EDA的最终结果为一个改进并增强的设计,其一般为离散集成电路或印刷电路板的形式,其改良了原始设计并且保持了原始设计的灵魂。各种使用并受益于EDA技术的工业认识到软件模拟电路设计后进行硬件仿真的价值。然而,目前的软件模拟和硬件仿真/加速对用户来说很麻烦,这是因为这些处理具有分离和独立的特点。例如,用户可能需要在一部分时间里利用软件模拟去模拟或调试电路设计,在其他时间中使用这些结果并利用硬件模型加速模拟过程,在选时序间检查各个寄存器和电路中的组合逻辑值,并且在随后的时间里返回软件模拟,所有这些都在一个调试/测试进程中。此外,当内部寄存器和组合逻辑值随着模拟时间的推进发生改变时,用户应该可以监视这些变化,即使变化发生在硬件加速/仿真过程中的硬件模型中。
为了解决使用两个分离和独立的纯软件模拟和纯硬件仿真/加速过程带来的令人困扰的问题,协同模拟应运而生,其使得整个系统更加友好。但是,协同模拟仍具有一些缺点:(1)协同模拟系统需要手动调整分区,(2)协同模拟使用两个松耦联的引擎,(3)协同模拟速度和软件模拟速度一样慢,以及(4)协同模拟系统会遭遇竞态状态。
首先,由手动而不是自动来处理软件和硬件之间的划分,这更加重了用户的负担。大体上,协同模拟需要用户自己基于非常大的功能块,在软件和硬件中划分设计(开始于行为层次设计,再是RTL(寄存器传送)设计,接着是门级层次设计)并测试模型。这样的限制需要用户具有一定的水平。
其次,协同模拟系统使用两个松耦联的独立引擎,其引发了引擎间同步,协调和适应性的问题。协同模拟需要两个不同的校验引擎之间的同步---软件模拟和硬件仿真。即使软件模拟器端与硬件加速器端连接,也仅有外部引出脚数据可供检查和载入。模型化电路中处于寄存器和组合逻辑等级的值不可简单的用于检查和从一端到另一端的下载,限制了这些协同模拟器系统的应用。当用户从软件模拟转换到硬件加速或反之时,他一般必须重新模拟整个设计。因此,如果用户期望在单一调试进程中实现软件模拟和硬件仿真/加速之间的转换,同时还可以检查寄存器和组合逻辑值,协同模拟器系统则无法提供此功能。
第三,协同模拟速度和模拟速度一样慢。协同模拟需要两个不同的校验引擎之间的同步---软件模拟和硬件仿真。每个引擎具有自己的驱动模拟或仿真的控制机制。这表示软件和硬件之间的同步将导致整体性能的速度与软件模拟速度一样慢。为协调这两个引擎操作的附加消耗更加剧了协同模拟系统的低速问题。
第四,协同模拟系统由于时钟信号之间的竞态状态将会遭遇设置,保持时间和时钟假信号问题。协同模拟器使用硬件驱动时钟,这导致它们由于不同的导线线路长度,在不同的时间处于不同逻辑元件的输入端。当需要这些逻辑元件同时估算数据时,由于一些逻辑元件在某个时期估算数据而其他逻辑元件在不同的时期估算数据,就会产生估算结果的不确定性。
因此,需要一种可以解决由目前已知的系统所带来的问题的系统或方法,已知系统包括模拟系统,硬件仿真系统,硬件加速器,协同模拟和协同校验系统。
发明内容
本发明以灵活和快速的模拟/仿真系统的形式为上述问题提供了解决方案,在此我们称之为“模拟仿真系统(SEmulation system)”,“模拟仿真器系统(Semulator system)”,或协同校验系统,其中包含可重新配置的计算系统(或RCC计算系统)和可重新配置的硬件阵列(或RCC硬件阵列)。
本发明的模拟仿真系统和方法为用户提供了将他们的电子系统设计转变为可供模拟的软件和硬件形式的能力。模拟仿真系统一般为软件控制的仿真器或硬件加速的模拟器,并且在其中使用本发明的方法。因此,纯软件模拟是可行的,但也可通过使用硬件模型加速模拟。可以用软件控制硬件加速的启动,停止,断言值和检查值的操作。还提供内部电路仿真模式以在电路的目标系统环境下测试用户电路设计。此外,也提供软件控制。
系统的核心是软件内核,其控制软件和硬件模型,通过允许用户启动,停止,断言值,检查值,以及在各种模式间切换来为用户提供更强的运行时间灵活性。内核通过对寄存器的启动输入控制硬件中的数据估算来控制各个模式。
根据本发明的模拟仿真系统和方法提供了4种操作模式:(1)软件模拟,(2)通过硬件加速的模拟,(3)内部电路仿真(ICE),以及(4)后模拟分析。在一个较高的层次,本发明是以上述4种模式之每一种或这些模式的各种组合实施的,如下所述:(1)单独的软件模拟;(2)单独通过硬件加速的模拟;(3)单独的内部电路仿真(ICE);(4)单独的后模拟分析;(5)软件模拟和通过硬件加速模拟;(6)软件模拟和ICE;(7)通过硬件加速模拟和ICE;(8)软件模拟,通过硬件加速模拟和ICE;(9)软件模拟和后模拟分析;(10)通过硬件加速模拟和后模拟分析;(11)软件模拟,通过硬件加速模拟和后模拟分析;(12)ICE和后模拟分析;(13)软件模拟,ICE,后模拟分析;(14)通过硬件加速模拟,ICE,后模拟分析;以及(15)软件模拟,通过硬件加速模拟,ICE和后模拟分析。其他组合也是可行的并在本发明的范围之内。
每个模式或模式组合提供了下列特性或特性组合:(1)人工或自动在模式间切换;(2)应用一用户可以在模式间切换,并可以启动,停止,断言值,检查值,以及通过模拟或仿真过程的单步周期;(3)生成软件模型和硬件模型的编译过程;(4)以主控制循环控制所有模式的软件内核,在一个实施例中,其包括的步骤有:初始化系统,估算激活的测试平台程序/组件,估算时钟组件,检测时钟边沿,更新寄存器和存储器,传递组合组件,推进模拟时间,以及当激活测试平台程序存在时继续执行该循环;(5)组件类型分析以生成硬件模型;(6)在一个实施例中,通过分群,布局和布线将硬件模型映射成可重新配置的电路板;(7)在一个实施例中,软件时钟设置通过门控时钟逻辑分析和门控数据逻辑分析来避免竞态状态;(8)在一个实施例中,通过下列步骤实现软件时钟,在软件模型中检测时钟边沿以触发硬件模型中的启动信号,从主时钟至时钟边沿寄存器的时钟输入通过门控时钟逻辑发送信号,将时钟启动信号送至硬件模型寄存器的启动输入,通过门控数据逻辑将数据从主时钟寄存器送至硬件模型寄存器,以及复位时钟边沿寄存器,屏蔽对硬件模型寄存器的启动输入的时钟启动信号;(9)为调试进程和后模拟分析记录选择数据;(10)组合逻辑再生成;(11)在一个实施例中,基本构件块为具有异步输入和同步输出的D-型寄存器;(12)每个芯片中的地址指示器;(13)多路复用的跨芯片地址指示器链路;(14)FPGA芯片阵列和其互连方案;(15)具有可以与PCI总线系统性能相比的总线的若干组FPGA芯片;(16)可以使用背负式电路板扩展的FPGA组;以及(17)最佳引脚利用率的时分多路复用(TDM)电路。通过其各个实施例,本发明还提供了在此文中所述的其他特性,这些特性未列在上文中。
本发明的一个实施例是一种模拟系统。模拟系统在一个主计算机系统中运行以模拟电路的运行情况。主计算机系统包括中央处理单元(CPU),主存储器,以及连接CPU和主存储器并实现CPU和主存储器之间联系的局部总线。硬件语言,如HDL,指定了电路的结构和功能,这种语言可以将电路描述成组件类型和连接。模拟系统包括:一个软件模型,一个软件控制逻辑,以及一个硬件逻辑元件。
电路的软件模型与局部总线连接。通常,其存在于主存储器中。软件控制逻辑与软件模型和硬件逻辑元件连接,以控制软件模型和硬件逻辑元件的运行。软件控制逻辑包括可以从外部程序接收输入数据和时钟信号的接口逻辑,以及用于检测有效的时钟信号边沿和生成触发信号的时钟检测逻辑。硬件逻辑元件也与局部总线连接并包括至少部分电路的基于组件类型的硬件模型,以及用于在硬件模型中根据触发信号估算数据的时钟启动逻辑。
硬件逻辑元件还包括多个互相连接的现场可编程器件或其阵列。每个现场可编程器件包括电路的部分硬件模型并且因此,所有现场可编程装置的组合则包括整个硬件模型。多个互连将硬件模型的各个部分相互连接。每个互连代表位于相同行或列的任何两个现场可编程装置间的直接连接。阵列中任何两个现场可编程装置间的最短路径最多为两个互连或“中继段”。
本发明的另一个实施例为模拟电路的系统和方法,其中电路模型化在软件中并且至少部分电路模型化在硬件中。数据估算发生在硬件中,但其通过软件时钟由软件控制。被估算的数据传递给硬件模型并使其稳定。当软件模型检测到有效的时钟边沿时,其将启动信号传输给硬件模型以激活数据估算。硬件模型估算数据并接着等待新到来的数据,此数据当在软件模型中检测到下一个有效的时钟边沿时可进行估算。
本发明的另一个实施例包括软件内核,其控制软件模型和硬件模型的运行。软件内核包括估算激活的测试平台程序/组件,估算时钟组件,检测时钟边沿,更新寄存器和存储器,传递组合组件,推进模拟时间,以及当激活的测试平台程序存在时继续执行该循环的步骤。
本发明的又一实施例是一种模拟电路的方法,其中硬件语言,如HDL,指定了电路的结构和功能,这种语言可以将电路描述或简化成组件。该方法步骤包括:(1)以硬件语言确定组件类型;(2)基于组件类型生成电路模型;以及(3)通过向模型提供输入数据、利用模型模拟电路运行情况。模型的生成可包括:(1)生成电路的软件模型;以及(2)基于组件类型生成电路的硬件模型。
在另一个实施例中,本发明为一种模拟电路的方法。步骤包括:(1)生成电路的软件模型;(2)生成电路的硬件模型;(3)通过向软件模型提供输入数据、利用软件模型模拟电路运行情况;(4)选择性转换到硬件模型;(5)为硬件模型提供输入数据;以及(6)通过在硬件模型中加速模拟利用硬件模型模拟电路运行情况。方法还可包括下列附加步骤:(1)选择性转换到软件模型;以及(2)通过向软件模型提供输入数据、利用软件模型模拟电路运行情况。模拟也可利用软件模型莱停止。
对于内部电路仿真模式,该方法包括:(1)生成电路的软件模型;(2)生成至少部分电路的硬件模型;(3)将来自目标系统的输入信号提供给硬件模型;(4)将来自硬件模型的输出信号提供给目标系统;(5)利用硬件模型模拟电路的运行情况,其中该软件模型能逐个周期地控制模拟/仿真。
对于后模拟分子,该模拟电路的方法包括:(1)产生电路模型;(2)通过向模型提供输入数据、利用模型模拟电路的运行情况;以及(3)记录选择性的输入数据和选择性的输出数据作为模型的记录点。可以生成一个软件和硬件模型。方法可进一步包括下列步骤:(1)在模拟中选择期望的时间相关点;(2)在所选的时间相关点之上或之前选择记录点;(3)为硬件模型提供输入数据;以及(4)根据所选的记录点利用硬件模型模拟电路运行情况。
本发明的另一个实施例是一种为模拟系统生成模型以模拟电路的方法。步骤包括:(1)生成电路的软件模型;(2)基于组件类型生成至少部分电路的硬件模型,上述组件类型包括寄存器组件和组合组件;以及(3)在硬件模型中生成时钟生成电路,以响应于软件模型中时钟边沿检测而触发硬件模型中的数据估算。
本发明的多个实施例利用专门设计的逻辑装置取代标准设计的触发器和锁存器解决了上述问题。本发明的一个实施例为时序不灵敏和无假信号(TIGF)逻辑装置。TIGF逻辑装置可以是任何锁存器或边沿触发的触发器形式。在本发明的一个实施例中,提供触发信号来更新TIGF逻辑装置。在短触发周期提供触发信号,此过程发生在估算周期的邻接时间中。
在锁存器形式中,TIGF锁存器包括保持当前TIGF锁存器状态直到接收到触发信号的触发器。还提供多路复用器以接收新的输入值和旧的存储值。启动信号作为多路复用器的选择器信号。因为触发信号控制TIGF锁存器的更新,所以TIGF锁存器的D输入上的数据和启动输入上的控制数据可以按任何顺序到达,而不会发生保持时间扰乱。同样,因为触发信号控制TIGF的更新,所以启动信号可以经常为假信号,而不会对TIGF锁存器的正确运行产生不良影响。
在触发器形式中,TIGF触发器包括保持新输入值的第一触发器,保持当前存储值的第二触发器,以及时钟边沿检测器。触发信号控制所有这三个部件以更新TIGF触发器。多路复用器还被提供有边沿检测器信号作为选择器信号。因为一个专用的第一触发器存储新的输入值,其有效阻止了估算过程中的输入变化,所以避免了保持时间扰乱。利用触发信号控制TIGF触发器的更新,时钟假信号不会影响使用TIGF触发器作为仿真触发器的用户设计电路的硬件模型。
在说明书中接下来的部分中将充分讨论和说明这些和其他实施例。
附图说明
在下列文字和附图的帮助下,可以更好地理解本发明的上述目标和对本发明的描述。
图1显示了本发明一实施例的高层概观图,其包括连接在一个PCI总线上的工作站,可重新配置的硬件仿真模型,仿真接口和目标系统。
图2显示了本发明的一个特殊用法的流程图。
图3显示根据本发明一实施例在编译时间和运行时间中软件编译和硬件配置的高层图。
图4显示了编译过程的流程图,其包括产生软件/硬件模型以及软件内核代码。
图5显示了控制整个模拟仿真系统的软件内核。
图6显示了通过映射、布局和布线将硬件模型映射成可重新配置的电路板的方法。
图7显示了图8中所示的FPGA(现场可编程门阵列)阵列的连接矩阵。
图8显示了4×4 FPGA(现场可编程门阵列)阵列和其相互连接的一个实施例。
图9(A)、9(B)和9(C)表示了时分多路复用(TDM)电路的一个实施例,其允许一组布线以时分多路复用的方式连接,使得芯片中的此组布线可以使用一个引脚,而不是多个引脚。图9(A)表示了引出脚问题的概观,图9(B)显示了用于传输端的TDM电路,图9(C)显示了用于接收端的TDM电路。
图10显示了根据本发明一个实施例的模拟仿真系统结构。
图11显示了本发明地址指示器的一个实施例。
图12显示了图11所示地址指示器初始化的状态转变图。
图13显示了用于为地址指示器导出出不同MOVE信号的MOVE信号发生器的一个实施例。
图14显示了每个FPGA芯片中多路复用地址指示器的链路。
图15显示了根据本发明一个实施例的多路复用跨芯片地址指示器链路的实施例。
图16显示了对于软件时钟实现和硬件模型中逻辑组件估算很重要的时钟/数据网络分析流程图。
图17显示了根据本发明一个实施例的硬件模型的基本构件块。
图18(A)和18(B)显示了实现锁存器和触发器的寄存器模型。
图19显示了根据本发明一个实施例的时钟边沿检测逻辑的实施例。
图20显示了根据本发明一个实施例的控制图19所示时钟边沿检测逻辑的四状态有限状态机。
图21显示了根据本发明一个实施例的每个FPGA芯片的互连,JTAG,FPGA总线以及全局信号引脚标志。
图22显示了PCI总线和FPGA阵列之间的FPGA控制器实施例。
图23显示了结合图22讨论的CTRL_FPGA单元和数据缓冲器的详细示图。
图24显示了4×4 FPGA(现场可编程门阵列)阵列,其和FPGA组的关系,以及扩展能力。
图25显示了硬件启动方法的一个实施例。
图26显示了用于模型化和模拟用户电路设计示例的HDL(硬件描述语言)码。
图27显示了象征性表示图26所示HDL码电路设计的电路图。
图28显示了图26所示HDL码的组件类型分析。
图29显示了基于图26所示用户自定义电路设计对结构化RTLHDL码的信号网络分析。
图30显示了对于相同假设示例的软件/硬件分区结果。
图31显示了对于相同假设示例的硬件模型。
图32显示了用户自定义电路设计的相同假设示例的一个特殊硬件模型--到--芯片分区结果。
图33显示了用户自定义电路设计的相同假设示例的另一个特殊硬件模型--到--芯片分区结果。
图34显示了用户自定义电路设计的相同假设示例的逻辑修补操作。
图35(A)到(D)利用两个示例说明了“中继段(hop)”和互连接的原则。
图36显示了用于本发明中的FPGA芯片概观。
图37显示了FPGA芯片上的FPGA互连总线。
图38(A)和38(B)显示了根据本发明一个实施例的FPGA电路板连接方案侧视图。
图39显示了根据本发明一个实施例的FPGA阵列的直接相邻和单中继六电路板互连结构。
图40(A)和40(B)显示了FPGA板间互连方案。
图41(A)到41(F)显示了电路板互连连接器的顶视图。
图42显示了具有代表性的FPGA电路板上的板上连接器和一些组件。
图43显示了图41(A)到41(F)和42中的连接器图例。
图44显示了根据本发明一个实施例的FPGA阵列的直接相邻和单中继双电路板互连结构。
图45显示了根据本发明另一实施例的具有多处理器的工作站。
图46显示了根据本发明另一实施例的环境,其中多个用户基于分时操作共享一个模拟/仿真系统。
图47显示了根据本发明一个实施例的模拟服务器的高层结构。
图48显示了根据本发明一个实施例的模拟服务器结构。
图49显示了模拟服务器的流程图。
图50显示了作业交换处理的流程图。
图51显示了在设备驱动器和可重新配置的硬件单元之间的信号。
图52表明了模拟服务器用于处理不同优先等级的多个作业的分时操作特性。
图53显示了在设备驱动器和可重新配置的硬件单元之间的通信交换信号。
图54显示了通信信号交换协议的状态图。
图55显示了根据本发明一个实施例的模拟服务器的客户-服务器模式概观。
图56显示了根据本发明一个实施例的执行存储器映射的模拟系统高层结构框图。
图57显示了模拟系统关于存储器交换方面的更详细的结构图,其中具有用于存储器有限状态机(MEMFSM)以及用于每个FPGA逻辑装置的估算有限状态机(EVALFSMx)的支持组件。
图58显示了根据本发明一个实施例的CTRL_FPGA单元中MEMFSM单元的有限状态机状态图。
图59显示了根据本发明一个实施例的在每个FPGA芯片中的有限状态机的状态图。
图60显示了存储器读出数据双缓冲器。
图61显示了根据本发明一个实施例的模拟写/读循环。
图62显示了当在CLK_EN信号之后发生DMA(存储器直接存取)读操作时,模拟数据传输操作的时序图。
图63显示了当在靠近EVAL周期的末端发生DMA(存储器直接存取)读操作时,模拟数据传输操作的时序图。
图64显示了作为PCI附加卡的典型用户设计。
图65显示了使用ASIC(专用集成电路)作为待测器件的典型硬件/软件协同校验系统。
图66显示了使用仿真器的典型协同校验系统,其中待测器件被编程于仿真器之中。
图67显示了根据本发明一个实施例的模拟系统。
图68显示了根据本发明一个实施例的不具有外部输入/输出设备的协同校验系统,其中RCC计算系统包含不同输入/输出设备的软件模型和目标系统。
图69显示了根据本发明另一实施例的具有实际外部输入/输出设备和目标系统的协同校验系统。
图70显示了根据本发明一个实施例的控制逻辑的数据输入部分的详细逻辑图。
图71显示了根据本发明一个实施例的控制逻辑的数据输出部分的详细逻辑图。
图72显示了控制逻辑的数据输入部分的时序图。
图73显示了控制逻辑的数据输出部分的时序图。
图74显示了根据本发明一个实施例的RCC硬件阵列的电路板设计。
图75(A)显示了用来解释保持时间和时钟假信号问题的移位寄存器电路范例。
图75(B)显示了表明保持时间的图75(A)所示移位寄存器电路的时序图。
图76(A)显示了跨过多个FPGA芯片的如图75(A)所示的相同移位寄存器电路。
图76(B)显示了表明保持时间扰乱的图76(A)所示移位寄存器电路的时序图。
图77(A)显示了用来说明时钟假信号问题的逻辑电路范例。
图77(B)显示了表明时钟假信号问题的图77(A)所示的逻辑电路时序图。
图78显示了根据现有技术的解决保持时间扰乱问题的时序调整技术。
图79显示了根据现有技术的解决保持时间扰乱问题的时序再合成技术。
图80(A)显示了根据本发明一个实施例的原始锁存器,图80(B)显示了根据本发明一个实施例的时序不灵敏和无假信号锁存器。
图81(A)显示了根据本发明一个实施例的原始设计触发器,图81(B)显示了根据本发明一个实施例的时序不灵敏和无假信号设计型触发器。
图82显示了根据本发明一个实施例的时序不灵敏和无假信号锁存器及触发器的触发机制时序图。
在下文中将结合本发明的多个不同方面和实施例对这些图进行讨论。
优选实施例的详细说明
此说明书通过关于被称为“模拟仿真器”(“SEmulator”)或“模拟仿真”(“SEmulation”)的系统描述本发明的不同实施例。整个说明书中,可使用术语“模拟仿真系统”,“模拟仿真器系统”,“模拟仿真器”,或简单的“系统”。这些术语指根据本发明的不同装置和方法实施例,用于任意组合四种操作模式:(1)软件模拟,(2)通过硬件加速模拟,(3)内部电路仿真(ICE),以及(4)后模拟分析,包括它们相应的配置或预处理阶段。在其他时候,可以使用术语“模拟仿真”。此术语代表在此所述的新的处理。
同样的,如“可重新配置的计算(RCC)阵列系统”或“RCC计算系统”这样的术语指模拟/协同校验系统中包含主处理器,软件内核和用户设计的软件模型的部分。如“可重新配置的硬件阵列”或“RCC硬件阵列”这样的术语指模拟/协同校验系统中包含用户设计的硬件模型的部分,此部分包含在一个实施例中的可重新配置的逻辑元件阵列。
说明书中还使用到了“用户”和用户的“电路设计”或“电子设计”。“用户”是通过其界面使用模拟仿真系统的人,可能是电路的设计者或很少参与或未参与设计过程的测试/调试人员。“电路设计”或“电子设计”为自定义设计的系统或组件,可以是软件或硬件,其可以被模拟仿真系统模型化以实现测试/调试。在许多情况下,“用户”也设计了“电路设计”或“电子设计”。
说明书还使用了如“布线”,“布线线路”,“布线/总线线路”和“总线”这样的术语。这些术语指不同的导电线路。每条线路可以是两点间的单线或点间的多线。这些术语可以互换使用,因为“布线”可以包括一条或多条导电线,“总线”也可以包括一条或多条导电线。
此说明书根据提纲进行展开。首先,说明书介绍了模拟仿真系统的大致概观,包括四种操作模式和硬件实现方案的概述。其次,说明书对模拟仿真系统进行了详细的讨论。在一些情况下,一张图会显示其前一张图中所示实施例的变体。此时,使用相同的参考编号表示相同的组件/单元/过程。说明书的提纲如下:
I.概述
A. 模拟/硬件加速模式
B. 利用目标系统模式仿真
C. 后模拟分析模式
D. 硬件实现方案
E. 模拟服务器
F. 存储器模拟
G. 协同校验系统
II.系统描述
III.模拟/硬件加速模式
IV.利用目标系统模式仿真
V.后模拟分析模式
VI.硬件实现方案
A. 概述
B. 地址指示器
C. 门控数据/时钟网络分析
D. FPGA阵列和控制
E. 使用更密集FPGA芯片的替代实施例
F. TIGF逻辑装置
VII.模拟服务器
VIII.存储器模拟
IX.协同校验系统
X.范例
----------------------------------------------
1.概述
本发明的各个实施例具有四种一般操作模式:(1)软件模拟,(2)通过硬件加速模拟,(3)内部电路仿真(ICE),以及(4)后模拟分析。包括这些模式的系统和方法的不同实施例至少具有下列特征中的一些:
(1)软件和硬件模型具有一个单一紧耦联模拟引擎,一个软件内核,其逐个循环地控制软件和硬件模型;(2)自动组件类型分析发生在编译处理过程中,用于软件和硬件模型的生成和分区;(3)具有在软件模拟模式,通过硬件加速模拟模式,内部电路仿真模式,和后模拟分析模式之间转换(逐个循环)的能力;(4)通过软件组合组件再生成的完全硬件模型可见度;(5)具有软件时钟和门控时钟/数据逻辑的双缓冲时钟模型化,以避免竞态状态;以及(6)从过去模拟进程中的任意选择点重新模拟或用硬件加速用户电路设计的能力。最终结果是具有完全HDL功能和仿真器执行性能的灵活及快速模拟器/仿真器系统与方法。
A.模拟/硬件加速模式
模拟仿真器系统通过自动组件类型分析,可以在软件和硬件中将用户的自定义电路设计模型化。整个用户电路设计模型化在软件之中,而估算组件(即存储器组件,组合组件)则模型化在硬件之中。通过组件类型分析帮助进行硬件模型化。
驻留于通用处理器系统主储存器中的软件内核充当模拟仿真器系统的主程序,其负责控制其不同模式和功能的总体操作和执行。只要有任何的测试平台程序激活,内核就估算激活的测试平台组件,估算时钟组件,检测时钟边沿以更新寄存器和存储器以及传递组合逻辑数据,和推进模拟时间。此软件内核为具有紧耦联特性的模拟器引擎提供硬件加速引擎。对于软件/硬件边界,模拟仿真器系统提供了数个输入/输出地址空间-REG(寄存器),CLK(软件时钟),S2H(软件到硬件),以及H2S(硬件到软件)。
模拟仿真器具有选择性在四种操作模式之间变换的能力。系统的使用者可以开始模拟,停止模拟,断言输入值,检查值,逐个循环单步执行,以及在四个不同的模式之间来回切换。例如,系统可以在一段时间内以软件模拟电路,通过硬件模型加速模拟,再返回软件模拟模式。
通常,模拟仿真系统为用户提供可以“看见”每个模型化组件的能力,无论其是在软件还是在硬件中模型化。由于多种原因,组合组件不像寄存器那样“可见”,并且因此,获取组合组件数据是很困难的。一个原因是用于可重新配置的电路板中将用户电路设计的硬件部分模型化的FPGA一般将组合组件模型化为查询表,取代实际的组合组件。因此,模拟仿真系统读取寄存器中的值并重新生成组合组件。因为需要一些开销以重新生成组合组件,所以此再生成过程并不在所有时间执行;而是仅在用户需要的时候执行。
因为软件内核存在于软件端,所以提供时钟边沿检测机制以触发所谓软件时钟的生成以将启动输入送到硬件模型的各个寄存器中。通过双缓冲电路设备严格控制时序,使软件时钟启动信号在数据进入这些模型之前进入寄存器模型中。一旦稳定了输入这些寄存器模型的数据,软件时钟同步门控数据,以确保共同门控所有的数据值而无任何发生保持时间扰乱的危险。
软件模拟也很快,因为系统记录所有的输入值和选定的寄存器值/状态,因此通过减少输入/输出操作的数量使开销最小化。用户可以选择性地选择记录频率。
B.利用目标系统模式仿真
模拟仿真系统可以在其目标系统环境中仿真用户的电路。目标系统向硬件模型输出数据用于估算,硬件模型也向目标系统输出数据。此外,软件内核控制此模式的操作,使得用户仍可以选择开始,停止,断言值,检查值,单步执行,以及模式转换。
C.后模拟分析模式
运行日志为用户提供了模拟进程的历史记录。不同于已知的模拟系统,“模拟仿真系统”并不记录模拟过程中的每个单值,内部状态,或值变化。“模拟系统”仅基于记录频率(即,每N个周期记录1个记录)记录选定的值和状态。在后模拟阶段,如果用户需要检查在刚结束的模拟进程中点X周围的多个数据,则用户先转到一个记录点上,比方说记录点Y,此点最接近点X并暂时位于其之前。接着,用户从选定记录点Y到目标点X进行模拟以获得模拟结果。
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]),以及单中继段相邻互连(即,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),其提示用户指出将要运行的程序。操作系统接下来确定运行程序所需的存储器数量,设置存储区,或分配存储区并直接或通过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的“编译程序:原理,技术和工具”(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。
测试平台组件为用于控制和监视模拟过程的软件处理。因此,这些组件不是在试验中的硬件电路设计的一部分。测试平台组件通过生成时钟信号,初始化模拟数据,并从磁盘/存储器中读取模拟测试矢量图型来控制模拟。测试平台组件还通过检查值的变化,执行值变更转储,检查信号值关系上的断言约束,将输出测试矢量写入磁盘/存储器,并将不同的波形观测仪与调试程序连接来监视模拟过程。
模拟仿真系统按下列步骤执行组件类型分析。系统检查二进制源没计数据库。基于源设计数据库,系统可将元件表征或分类为上述组件类型的一种。连续赋值语句被归为组合组件。根据语言定义,初始门可为组合类型或寄存器类型的锁存器形式。将初始化编码看作初始化类型的测试平台。
不使用网络来驱动网络的始终程序为驱动器类型的测试平台。不驱动网络来读取网络的始终程序为监示器类型的测试平台。具有延迟控制或多重事件控制的始终程序为通用类型的测试平台。
具有单一事件控制并驱动单一网络的始终程序可为下列中的一种:(1)如果事件控制为边沿触发事件,那么此程序为一个边沿触发型寄存器组件。(2)如果程序中的网络驱动未定义在所有可能的执行通路中,那么网络为寄存器的锁存器类型。(3)如果程序中的网络驱动定义在所有可能的执行通路中,那么网络为组合组件。
具有单一事件控制但驱动多个网络的始终程序可分解成单独驱动每个网络的若干程序以分别取得其相应的组件类型。可使用分解过程确定组件类型。
步骤304生成用于所有HDL组件的软件模型,不考虑其组件类型。通过适当的用户接口,用户可以使用完整的软件模型模拟整个电路设计。使用测试平台程序驱动激励输入,测试矢量图型,控制总体模拟,并监视模拟过程。
步骤305执行时钟分析。时钟分析包括两个一般步骤:(1)时钟提取和顺序映射,以及(2)时钟网络分析。时钟提取和顺序映射步骤包括将用户的寄存器组件映射到模拟仿真系统的硬件寄存器模型中,并接着从系统硬件寄存器组件中提取时钟信号。时钟网络分析步骤包括基于提取的时钟信号确定主时钟和导出时钟,并分离门控时钟网络和门控数据网络。将结合图16进行更详细的说明。
步骤306执行驻留选择。与用户相结合,系统为硬件模型选择组件;也就是说,在所有可以在用户电路设计的硬件模型中实现的可能硬件组件中,一些硬件组件由于多种原因将不能在硬件中模型化。这些原因包括组件类型,硬件资源限制(即,软件中的浮点运算和大型乘法运算),模拟和通信开支(即,软件中测试平台程序之间的小型桥接器逻辑,以及软件中由测试平台程序监视的信号),以及用户偏爱。由于包括性能和模拟监测的众多原因,用户可以迫使本应在硬件中模型化的特定组件留在软件中。
步骤307将所选硬件模型映射到可重新配置的硬件仿真板上。具体的说,步骤307获取连线表并将电路设计映射到特定的FPGA芯片中。此步骤包括将逻辑元件分组或分类。系统然后分配每组到一个特定的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资源中,但其他的逻辑功能,例如组合逻辑则必须使用映射算法在逻辑块中实现。用户通常可以对映射进行选择以获得最佳的密度或最佳的性能。
布局任务涉及从映射任务中取得逻辑和I/O(输入/输出)块并将它们分配到FPGA阵列中的物理位置。目前的FPGA工具一般使用三种技术的组合:极小切割(mincut),模拟退火,和通用力指向松弛(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和mi,j的包含FPGA芯片的列进行“与”操作。对单独的“与”组件进行“或”操作以确定对于指数或中继段k的结果Mi,j值是“1”还是“0”。如果结果是“1”,则存在连接并且指定指数k为中继段的数。如果结果是“0”,则不存在连接。
下面的例子表明了这些原则。参见图35(A)到35(D)。图35(A)由云状物1090表示了用户的电路设计。此电路设计1090可以简单或复杂。电路设计1090的一部分包括“或”门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”。对于此布局示例,中继段总数为“3”,不考虑未图示的电路1090剩下部分的其他门电路和互连的作用。
图35(D)显示了另一个布局示例。在此,“或”门1091安置于芯片1094上,“与”门1092和1093安置于芯片1095上。也未显示电路1090的其他部分作为示范。“或”门1091和“与”门1092之间的连接需要一个互连,因为它们位于不同的芯片中,于是使用了一组互连1097。此互连的中继段数为“1”。“或”门1091和“与”门1093之间的连接也需要互连,于是使用了互连组1097。中继段数也为“1”。对于此布局示例,中继段总数为“2”,不考虑未图示的电路1090剩下部分的其他门电路和互连的作用。于是,仅基于距离参数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程序器使用POF,SOF,和JEDEC文件,结合Altera的硬件可编程器件为FPGA阵列编程序。或者,系统生成一个或多个原二进制文件(.rbf)。CPU修正.rbf文件并通过PCI总线为FPGA阵列编程。
此时,所配置的硬件为硬件启动370做好了准备。这样在可重新配置的板上完成了硬件模型的自动构成。
回到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个引脚。可以使用根据本发明一实施例的TDM电路按时分多路复用的形式连接互连992和互连993,形成第44个,也是最后一个引脚。
图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,它们相应的输出970和971与“或”门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芯片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引擎和地址指示器发生。内核通过直接映射I/O控制寄存器启动DMA传递连同估算请求。REG空间317,CLK空间320,S2H空间318和H2S空间319分别使用输入/输出数据路径线路321,322,323和324用于软件模型315和硬件模型325之间的数据传输。
S2H和CLK空间的所有的主输入都需要双缓冲,因为这些空间需要几个时钟周期来完成更新过程。双缓冲避免了可能会造成竞态状态的对内部硬件模型状态的干扰。
S2H和CLK空间是从内核到硬件模型的主输入。如上所述,硬件模型实质上容纳用户电路设计的所有寄存器组件和组合组件。而且,在软件中将软件时钟模型化并且在CLK输入/输出地址空间里设置软件时钟以连接硬件模型。内核推进模拟时间,寻找激活的实验平台组件并且估算时钟组件。当内核检测到任何时钟边沿时,更新寄存器和存储器并且通过组合组件传送数值。这样,如果选择硬件加速模式,这些空间中数值的任何变化将触发硬件模型改变逻辑状态。
对于内部电路仿真模式,仿真接口382耦联到PCI总线328以此和软件模型315和硬件模型325通信。在硬件加速模拟模式和内部电路仿真模式的过程中,内核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。
然后用户可以通过执行带有输入记录的软件模拟到硬件模型中,以此计算所有硬件组件的数值变化转储从而执行模拟仿真之后的分析。用户也可以及时选择任何寄存器记录点并及时地从那个记录点向前开始数值变化转储。这种数值变化转储方法可以链接到任何模拟波形观测仪用于后模拟分析。
VI.硬件实现方案
A.概述
模拟仿真系统在可重新配置的电路板上实现FPGA芯片阵列。基于硬件模型,模拟仿真系统在FPGA芯片上对每个用户电路设计的所选部分进行分区,映射,布局和布线操作。因此,例如拥有16个芯片的4×4阵列可以模型化展开在这16个芯片上的大型电路。采用的互连方案可以使每个芯片在2次“跳转”或连接之内访问另一个芯片。
每个FPGA芯片为每个输入/输出地址空间(即,REG,S2H,H2S,和CLK)设置一个地址指示器。与特定地址空间有关的所有地址指示器的组合互相链接在一起。所以,在数据传输过程中,顺序地从主FPGA总线和PCI总线选择出每个芯片中的字数据或将每个芯片中的字数据选择到主FPGA总线和PCI总线中,针对每个芯片中的所选地址空间一次一个字,并且一次一个芯片,直到访问到所期望的关于此所选地址空间的字数据为止。这种字数据的顺序选择通过传送字选择信号完成。此字选择信号穿过芯片中的地址指示器并接着传送到下一个芯片的地址指示器中,这样继续直到最后一个芯片或系统对地址指示器进行初始化。
在可重新配置的电路板中的FPGA总线系统工作时的带宽是PCI总线的两倍,但速度仅为PCI总线的一半。因此,FPGA芯片被分成若干组以利用更大带宽的总线。此FPGA总线系统的处理能力可以比得上PCI总线系统的处理能力,所以并没有因为总线速度的降低而损失性能。可以采用包含更多FPGA芯片的更大的电路板或背负式电路板延伸组长度来实现扩展。
B.地址指示器
图11显示了本发明地址指示器的一个实施例。所有的输入/输出操作都要经过DMA流动。因为系统仅有一根总线,所以系统按一次一个字的方式顺序的访问数据。因此,地址指示器的一个实施例使用移位寄存器链以顺序的访问这些地址空间中所选的字。地址指示器400包括触发器401-405,“与”门406,以及一对控制信号,INITIALIZE407和MOVE408。
每个地址指示器具有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,地址空间译码器的输出对应于REG,S2H,H2S,和CLK在导线线路460-463中的一条上输出一个“1”,同时将剩下的导线线路设置为“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”。
如前文中所解释的,由FPGA输入/输出控制器产生SPACE指数。用编码表示,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的扇入组如下:
网络N的扇入(FanIn)组:
寻找所有驱动网络N的组件;
for每个驱动网络N的组件X do:
if组件X不是组合组件then
return;(返回)
else
for组件X的每个扇入网络Y
将网络Y的扇入(FanIn)组W与网络N的扇入(FanIn)组相加
end for
将组件X加入N;
end if
end for
通过反复的确定网络N的扇入组和扇出组以及它们的交集来确定门控时钟或数据逻辑网络。此处的最终目标是确定所谓的网络N的扇入(FanIn)组。网络N通常是一个时钟输入节点,用于从扇入的角度确定门控时钟逻辑。为了从扇入的角度确定门控时钟逻辑,网络N是一个与临近的数据输入有关的时钟输入节点。如果节点在寄存器上,网络N为对此寄存器的时钟输入,用于与此寄存器有关的数据输入。系统寻找所有驱动网络N的组件。对于每个驱动网络N的组件X,系统确定组件X是否为组合组件。如果每个组件X均不为组合组件,那么网络N的扇入组不含有组合组件并且网络N为主时钟。
但是,如果至少有一个组件X为组合组件,则系统确定组件X的输入网络Y。在此,系统通过寻找进入组件X的输入节点可以进一步的在电路设计中向后探询。对于每个组件X的每个输入网络Y,存在与网络Y连接的扇入组W。将此网络Y的扇入组W加入网络N的扇入组,则组件X加入组N。
以同样的方式确定网络N的扇出组。网络N的扇出组如下:
网络N的扇出(FanOut)组:
寻找所有使用网络N的组件;
for每个使用网络N的组件X do:
if组件X不是组合组件then
return;(返回)
else
for组件X的每个输出网络Y
将网络Y的扇出(FanOut)组与网络N的扇出组相加
end for
将组件X加入N;
end if
end for
再一次,通过反复的确定网络N的扇入组和扇出组以及它们的交集来确定门控时钟或数据逻辑网络。此处的最终目标是确定所谓的网络N的扇出(FanOut)组。网络N通常是一个时钟输出节点,用于从扇出的角度确定门控时钟逻辑。因此,将确定使用网络N的所有逻辑元件的组。对于从扇出的角度确定门控数据逻辑来说,网络N是一个与临近的数据输出有关的时钟输出节点。如果节点在寄存器上,网络N为此寄存器的输出,用于与此寄存器有关的主时钟驱动输入。系统寻找所有使用网络N的组件。对于每个使用网络N的组件X,系统确定组件X是否为组合组件。如果每个组件X均不为组合组件,那么网络N的扇出组不含有组合组件并且网络N为主时钟。
但是,如果至少有一个组件X为组合组件,则系统确定组件X的输出网络Y。在此,系统通过寻找来自组件X的输出节点可以进一步的从电路设计中的主时钟向前探询。对于每个组件X的每个扇出网络Y,存在与网络Y连接的扇出组W。将此网络Y的扇出组W加入网络N的扇出组,则组件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信号还经过门控时钟逻辑514,并在门控时钟信号途经门控时钟逻辑通过导线线路525上的时钟输入进入第一缓冲器516时,对其进行监视。因此,如下文中结合4-状态估算状态机所述,可以根据需要维持~EVAL信号,以稳定经过系统中图19所示部分的数据和时钟信号。
当信号稳定后,输入/输出终止,或系统准备估算数据,~EVAL被逆断言以禁用第一缓冲器516。断言CLK-EN信号并通过导线线路528将其应用于第二缓冲器517以启动第二缓冲器517并将导线线路529上的逻辑值“1”送给导线线路532上的与寄存器518的启动输入连接的Q输出。寄存器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所述,系统执行映射,布局和布线过程,以最佳的划分,布局以及互连组成用户电路设计的不同组件。使用已知的编程工具,引用位流配置文件或Programmer Object Files(可编程目的文件)(.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和Xilinx 4028EX。XilinX XC4028EX FPGA在一个单一PCI板上可以驱动将近50万个门电路。可以在下列数据手册中获取这些Xilinx FPGA的详细资料,[Xilinx,可编程逻辑数据手册](9/96),其内容以引用的方式并入本文。可以在下列数据手册中获取Altera FPGA的详细资料,[Altera,1996数据手册](1996年六月),其内容以引用的方式并入本文。
将提供XC402 FPGA的简要介绍。每个阵列芯片由一个240-引脚的Xilinx芯片组成。组装有Xilinx XC4025芯片的阵列板包含大约440,000个可配置的门电路,并且可以执行计算密集的任务。XilinxXC4025芯片包含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个CLBs。每个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的可编程逻辑装置(PLDs),其具有多个32-位总线。更明确的说,每个FLEX 10K100芯片包含大约100,000个门电路,12个嵌入式阵列块(EABs),624个逻辑阵列块(LABs),每个LAB具有8个逻辑元件(LEs)(或4,992个LEs),5,392个触发器或寄存器,406个输入/输出引脚,和总共503个引脚。
Altera FLEX 10K芯片包含嵌入式阵列块(EABs)的嵌入式阵列和逻辑阵列块(LABs)的逻辑阵列。可以使用一个EAB实现多种存储器(如,RAM,ROM,FIFO)和复杂逻辑功能(如,数字信号处理器(DSPs),微控制器,乘法器,数据转换功能,状态机)。对于实现存储器功能来说,EAB提供2,048个位。对于实现逻辑功能来说,EAB提供100到600个门电路。
通过LEs,可以使用LAB实现中等大小的逻辑块。每个LAB代表大约96个逻辑门并包含8个LE和一个局部互连。一个LE包含一个4-输入检查表,一个可编程触发器,和用于传送和级联函数的专用信号通路。可以建立的一般的逻辑功能包括计数器,地址译码器,或小型状态机。
可以在[Altera,1996数据手册](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 |
地址指示器链 |
1 |
总计 |
41 |
因此,在一个实施例中,每个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)的芯片F13来说,互连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的左边。
以“0”和“1”的方式表示,图7显示了图8中所示的4×4FPGA(现场可编程门阵列)阵列的连接矩阵。利用此连接矩阵生成由在模拟仿真系统的硬件映射,布局和布线过程中使用的价值函数产生的布局成本。上文中结合图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,EEPROM704,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与低端组总线718相连,还包括例如电阻器716和电阻器717。电阻器组712与高端组总线719相连,还包括例如电阻器714和电阻器715。
如果需要扩展,可以在低端组总线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的一个示例为PLX技术公司的PCI9080或9060。PCI9080具有适当的局部总线接口,控制寄存器,FIF0(先入先出),以及对PCI总线的PCI接口。PLX技术公司的数据手册,[PCI9080数据表](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,1996数据手册](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数据手册](1996年六月)和[应用说明39](Altera设备中的JTAG边界扫描测试)以获得更多信息,其内容以引用的方式并入本文。边界扫描测试接口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将数据传入或传出低端(芯片F41-F44和F21-F24)和高端(芯片F31-F34和F11-F14)FPGA芯片组,并且F_BUS 725用于低端组32-位FD[31:0],F_BUS 726用于高端组32-位FD[63:32]。
在低端组总线718和高端组总线719中的一个实施例具有双倍的PCI总线709的通过量。PCI总线709在33MHz时位宽为32位。通过量因此为132MBX(=33MHz*4字节)。低端组总线718在PCI总线频率的一半时(33/2MHz=16.5MHz)为32位。高端组总线719在PCI总线频率的一半时(33/2MHz=16.5MHz)也为32位。64位低端和高端组总线的通过量也为132MBX(=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_H 733和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将PCI控制器设置为DMA主读/写模式。此后,传输并校验数据。步骤807利用试验设计配置所有的FPGA芯片并验证其正确性。在步骤808,硬件已准备好可供使用。此时,系统假设所有步骤的结果都确认了硬件的可操作性,否则,系统不会到达步骤808。
E.使用更密集FPGA芯片的替代实施例
在本发明的一实施例中,FPGA逻辑装置安装在单个电路板上。如果使用户电路设计模型化所需要的FPGA逻辑装置比安装在电路板上的要多,那么我们可提供带有更多FPGA逻辑装置的多重电路板。能够在模拟系统中增加更多的电路板是本发明的一个优良特点。在该实施例中,使用更密集的FPGA芯片,(如Altera 10k130v和10k250v)。这些芯片的使用改变了电路板的设计,以致每个电路板上仅用四个更密集的FPGA芯片替代了八个较低密度的FPGA芯片(如Altera10k100)。
这样,我们就需要解决这些电路板和模拟系统主板之间的耦联问题,在它们的互连和接线路方案中必须作出对底板缺失的补偿。模拟系统中的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方向(北到南)下则呈网格状。
这些互连器能在单独的电路板中独立地连接逻辑装置和其它组件。然而,我们是通过电路板间的连接器将这些电路板和互连器连接在一起,并穿过不同的电路板在PCI总线和阵列电路板之间通过主板以及在任何两个阵列电路板之间传输数据。每个电路板包含自带的使FPGA逻辑装置互相联系的FPGA总线FD[63:0]、SRAM存储器装置和CTRL_FPGA单元(FPGA输入/输出控制器)。FPGA总线FD[63:0]不是安装在多重电路板之间的,而是穿过多重电路板建立起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芯片(如Altera10K130V或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左侧输入/输出引脚和111右侧输入/输出引脚。这样,互连器的引脚总数就是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_E(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:1]和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是作为“书挡(bookend)”电路板并包含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逻辑装置上。相对于连接器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包。这样,第六电路板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中逻辑装置1577通过互连器1547连接到直接邻近的逻辑装置1578。逻辑装置1577还通过单中继段互连器1548连接到非直接邻近的逻辑装置1579。然而我们认为逻辑装置1580与逻辑装置1577邻近是因为由互连1549提供连接的环绕的环形配置。
图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显示
LED |
颜色 |
状态 |
描述 |
LED1 |
绿色 |
开 |
+5v和+3.3v为正常。 |
| |
关 |
+5v或+3.3v为不正常。 |
LED2 |
琥珀色 |
关 |
所有电路板上的FPGA配置已完成。 |
| |
闪烁 |
电路板上的FPGA配置未完成或配置失败。 |
| |
开 |
FPGA配置正在进行。 |
LED3 |
红色 |
开 |
数据传输进行中。 |
| |
关 |
无数据传输。 |
| |
闪烁 |
诊断测试失败 |
各种其它的控制芯片如PLX PCI控制器1826和CTRL_FPGA单元1827控制着FPGA间和PCI的通讯。一个可能被用在系统内的PLXPCI控制器1826的例子是PLX技术公司的PCI9080或9060。PCI9080有合适的局部总线接口,控制寄存器,FIFO以及PCI与PCI总线的接口。数据手册PLX技术和PCI9080数据表(1997年2月28日,0.93版)的内容以引用的方式并入本文。CTRL_FPGA单元1827的一个例子是FPGA形式的可编程逻辑装置(PLD),如Altera芯片。在多重电路板配置中,只有与PCI总线连接的第一电路板包含PCI控制器。
连接器1830将电路板1820连接到主板(未显示出来),然后就可以接PCI总线、电源及接地。在某些电路板中,连接器1830不是与主板直接连接的。这样在一个双电路板的配置中,只有第一电路板是与主板直接相连的。在一个六电路板的配置中,只有电路板1,3,5是与主板直接相连的而电路板2,4,6是通过与它们相邻的电路板与主板相连的。另外还配置了电路板间连接器J1到J28,顾名思义,连接器J1到J28能建立穿过不同电路板的连接。
连接器J1是连接外部电源和接地的。下表B是根据本发明的一实施例所显示的外部电源连接器J1的引脚和相关描述。
连接器J2是用于并行端口连接的。连接器J1和J2是在生产过程中用于独立接口的单独电路板的边界扫描测试。下表C显示的是根据本发明的一实施例的并行JTAG端口J2的引脚和相关描述。
表C:并行JTAG端口-J2
J2引脚数 |
J2信号 |
电路板的输入/输出 |
DB25引脚数 |
DB25信号 |
3 |
PARA_TCK |
I |
2 |
D0 |
5 |
PARA_TMS |
I |
3 |
D1 |
7 |
PARA_TKI |
O |
4 |
D2 |
9 |
PARA_NR |
0 |
5 |
D3 |
19 |
PARA_TKO |
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
J1 |
+5V/+3V外部电源 |
4引脚电源RA顶盖,元件面 |
J2 |
并行端口 |
0.1”脚距,2行穿孔RA顶盖,元件面 |
J3 |
局部总线 |
0.05”脚距,2×30穿孔RA顶盖,SAMTEC,元件面 |
J4 |
局部总线 |
0.05”脚距,2×30穿孔RA顶盖,SAMTEC,元件面 |
J5 |
A行:NH[0],VCC3V,GNDB行:J17B行,VCC3V,GND |
0.05”脚距,2×30SMD顶盖,SAMTEC,元件面 |
J6 |
A行:J5B行,VCC3V,GNDB行:J5A行,VCC3V,GND |
0.05”脚距,2×30SMD套接,SAMTEC,焊接面 |
J7 |
A行:N[0],4VCC3V,4GND,N[2]B行:N[0],4VCC3V,4GND,N[2] |
0.05”脚距,2×45穿孔顶盖,SAMTEC,元件/焊接面 |
J8 |
A行:N[0],4VCC3V,4GND,N[2]B行:N[0],4VCC3V,4GND,N[2] |
0.05”脚距,2×45穿孔套接,SAMTEC,元件/焊接面 |
J9 |
A行:NH[2],LASTL,GNDB行:J21B行,GND |
0.05”脚距,2×30SMD顶盖,SAMTEC,元件面 |
J10 |
A行:J9B行,FIRSTL,GNDB行:J9A行,GND |
0.05”脚距,2×30SMD套接,SAMTEC,焊接面 |
J11 |
A行:NH[1],VCC3V,GNDB行:J23B行,VCC3V,GND |
0.05”脚距,2×30SMD顶盖,SAMTEC,元件面 |
J12 |
A行:J11B行,VCC3V,GNDB行:J11A行,VCC3V,GND |
0.05”脚距,2×30SMD套接,SAMTEC,焊接面 |
J13 |
A行:N[1],4VCC3V,4GND,N[3]B行:N[1],4VCC3V,4GND,N[3] |
0.05”脚距,2×45穿孔顶盖,SAMTEC,元件/焊接面 |
J14 |
A行:N[1],4VCC3V,4GND,N[3]B行:N[1],4VCC3V,4GND,N[3] |
0.05”脚距,2×45穿孔套接,SAMTEC,元件/焊接面 |
J15 |
A行:NH[3],LASTH,GNDB行:J27B行,GND |
0.05”脚距,2×30SMD顶盖,SAMTEC,元件面 |
J16 |
A行:J15B行,FIRSTH,GNDB行:J15A行,GND |
0.05”脚距,2×30SMD套接,SAMTEC,焊接面 |
J17 |
A行:SH[0],VCC3V,GNDB行:J5B行,VCC3V,GND |
0.05”脚距,2×30SMD顶盖,SAMTEC,元件面 |
J18 |
A行:J17B行,VCC3V,GNDB行:J17A行,VCC3V,GND |
0.05”脚距,2×30SMD套接,SAMTEC,焊接面 |
J19 |
A行:S[0],4VCC3V,4GND,S[2]B行:S[0],4VCC3V,4GND,S[2] |
0.05”脚距,2×45穿孔顶盖,SAMTEC,元件/焊接面 |
J20 |
A行:S[0],4VCC3V,4GND,S[2]B行:S[0],4VCC3V,4GND,S[2] |
0.05”脚距,2×45穿孔套接,SAMTEC,元件/焊接面 |
J21 |
A行:SH[2],LASTL,GNDB行:J19B行,GND |
0.05”脚距,2×30SMD顶盖,SAMTEC,元件面 |
J22 |
A行:J21B行,FIRSTL,GNDB行:J21A行,GND |
0.05”脚距,2×30SMD套接,SAMTEC,焊接面 |
J23 |
A行:SH[1],VCC3V,GNDB行:J11B行,VCC3V,GND |
0.05”脚距,2×30SMD顶盖,SAMTEC,元件面 |
J24 |
A行:J23B行,VCC3V,GND |
0.05”脚距,2×30SMD套接, |
|
B行:J23A行,VCC3V,GND |
SAMTEC,焊接面 |
J25 |
A行:S[1],4VCC3V,4GND,S[3]B行:S[1],4VCC3V,4GND,S[3] |
0.05”脚距,2×45穿孔顶盖,SAMTEC,元件/焊接面 |
J26 |
A行:S[1],4VCC3V,4GND,S[3]B行:S[1],4VCC3V,4GND,S[3] |
0.05”脚距,2×45穿孔套接,SAMTEC,元件/焊接面 |
J27 |
A行:SH[3],LASTH,GNDB行:J15B行,GND |
0.05”脚距,2×30SMD顶盖,SAMTEC,元件面 |
J28 |
A行:J27B行,FIRSTH,GNDB行:J27A行,GND |
0.05”脚距,2×30SMD套接,SAMTEC,焊接面 |
带阴影的连接器是穿孔型的。注意在表D中,括号[]中的数字代表FPGA逻辑装置号码0到3。这样,S[0]就表示南向互连(即图37中的S[73:0])及其FPGA0的74字节。
表E:局部总线连接器-J3,J4
引脚数 |
信号名 |
输入/输出 |
引脚数 |
信号名 |
输入/输出 |
A1 |
GND |
PWR |
B1 |
LRESET_N |
输入/输出 |
A2 | |
输入/输出 |
B2 |
VCC5V |
PWR |
A3 |
GND |
PWR |
B3 |
LD0 |
输入/输出 |
A4 |
LD1 |
输入/输出 |
B4 |
LD2 |
输入/输出 |
A5 |
LD3 |
输入/输出 |
B5 |
LD4 |
输入/输出 |
A6 |
LD5 |
输入/输出 |
B6 |
LD6 |
输入/输出 |
A7 |
LD7 |
输入/输出 |
B7 |
LD8 |
输入/输出 |
A8 |
LD9 |
输入/输出 |
B8 |
LD10 |
输入/输出 |
A9 |
LD11 |
输入/输出 |
B9 |
GND |
PWR |
A10 |
VCC3V |
PWR |
B10 |
LD12 |
输入/输出 |
A11 |
LD13 |
输入/输出 |
B11 |
LD14 |
输入/输出 |
A12 |
LD15 |
输入/输出 |
B12 |
LD16 |
输入/输出 |
A13 |
LD17 |
输入/输出 |
B13 |
LD18 |
输入/输出 |
A14 |
LD19 |
输入/输出 |
B14 |
LD20 |
PWR |
A15 |
LD21 |
输入/输出 |
B15 |
VCC3V |
输入/输出 |
A16 |
LD22 |
输入/输出 |
B16 |
LD23 |
输入/输出 |
A17 |
LD24 |
输入/输出 |
B17 |
LD25 |
输入/输出 |
A18 |
LD26 |
输入/输出 |
B18 |
LD27 |
输入/输出 |
A19 |
LD28 |
输入/输出 |
B19 |
LD29 |
输入/输出 |
A20 |
LD30 |
输入/输出 |
B20 |
LD31 |
输入/输出 |
A21 |
VCC3V |
PWR |
B21 |
LHOLD |
OT |
A22 |
ASD_N |
输入/输出 |
B22 |
GND |
PWR |
A23 |
DEN_N |
O |
B23 |
DTR_N |
O |
A24 |
LA31 |
O |
B24 |
LA30KTR |
O |
A25 |
LA29 |
O |
B25 |
LA28 |
O |
A26 |
LA10 |
O |
B26 |
LA7 |
O |
A27 |
LA6 |
O |
B27 |
LA5 |
O |
A28 |
LA4 |
O |
B28 |
LA3 |
O |
A29 |
LA2 |
O |
B29 |
完成 |
OD |
A30 |
VCC5V |
PWR |
B30 |
DCC5V |
PWR |
其中的输入/输出方向指的是电路板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目录下的说明书中的内容以引用的方式并入本文。回到图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的图例所示,第六电路板的这些连接器是以下几种连接:一、表面安装或穿孔,二、元件面或焊接面,三、顶盖、插座或R包。
在一实施例中,这些连接器是用来进行电路板间的连通的。相关的总线和信号聚合在一起并且通过这些电路板间的连接器在两块电路板间传输信号的。而且,只有一半的电路板是直接与主板相连的。在图41(A)中,第六电路板1660包含用于一套FPGA互连的连接器1661到1668,用于一套FPGA互连的连接器1669到1674,1676和1679,以及用于局部总线的连接器1681。因为第六电路板1660是主板(在图41(F)中第一电路板1790位于另一端)末端的一块电路板,所以连接器1675、1677、1678和1680是用于一定的南北向互连的10欧姆R包的连接。另外正如图38(B)所示,主板连接器1682也不是用于第六电路板1660的,其中第六电路板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.时序不灵敏和无假信号逻辑装置
本发明的一实施例解决了保持时间和时钟假信号的问题。根据本发明的一实施例,在将用户的设计配置入可重新配置计算系统的硬件模型的过程中,在用户设计中发现的标准逻辑装置(如锁存器,触发器)是用仿真逻辑装置或时序不灵敏和无假信号(TIGF)逻辑装置代替的。在一实施例中,整合到EVAL信号中的触发信号是用来更新这些TIGF逻辑装置所储存的值的。在各种输入和其它信号在用户设计的硬件模型中传输并在估算过程中达到稳定状态后,会产生用来更新TIGF逻辑装置所储存或锁存的值的触发信号。从而开始了新的估算周期。在一实施例中,这个从估算到触发的阶段是循环的。
现在简要地讨论一下上面所提到的保持时间的问题。所属技术领域的技术人员都知道逻辑电路设计的一个普遍的问题就是保持时间扰乱。保持时间是指一个逻辑元件的数据输入在控制输入(如时钟输入)的变化引起了数据输入所指示的值的锁存、获取或储存后必须保持稳定的最小时间;否则逻辑元件将不能正常作业。
现在我们将要通过讨论一个移位寄存器的例子来演示保持时间的要求。图75(A)显示了一个连续连接了三个D型触发器的典型的移位寄存器,即触发器2400的输出连接的是与触发器2402的输入相连的触发器2401的输入。所有的输入信号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)和触发器2401(输入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也会通过芯片2412和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的边沿后,因为必要的保持时间H2(即时间t4)前D1的输入必须保持稳定。这时触发器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。总的来说,除非采取一些预防措施,否则当一个芯片产生时钟信号并将其分布到不同芯片上的逻辑元件时可能会发生保持时间延迟。
现在我们将要参照图77(A)和77(B)来讨论时钟假信号问题。一般地,当一电路的输入改变时,输出也会在其定为一个正确值前的相当短的时间内变为一个随机值。如果另一个电路检测到正在那个错误的时间内检测到输出并读出随机值,那么结果将是不正确的而且难以调试。这种对另外电路产生有害影响的随机值就成为假信号。在典型的逻辑电路中,一个电路会为另一个电路产生时钟信号。如果一个或两个电路存在着未得到补偿的时序延迟,那么将会产生一个时钟假信号(即预料之外的时钟边沿)并导致一个错误的结果。与保持时间扰乱相同,引起时钟假信号的原因是电路设计中的某些逻辑元件在不同的时间改变了值。
图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的时钟输入。触发器也在线路2429上的D3输入数据并在Q3输出数据。
现在我们将参照图77(B)中的时序图来讨论此电路可能引起的时钟假信号问题。CLK信号在时间t0被触发。在时钟信号(即CLK1)到达触发器2420前为时间t1。CLK2直到时间t2才到达触发器2421。
假定到D1和D2的输入都在逻辑1。当CLK1在时间t1到达触发器2420时Q1的输出将会在逻辑1(如图77(B)所示)。CLK2在稍后的时间t2到达触发器2421,这样,线路2428上的Q2输出从时间t1到时间t2都保持在逻辑0。即使理想的信号是一个逻辑0(1XOR1=0),但“异”门2422在时间t1到时间t2期间传输一个逻辑1(如CLK3)到触发器2423的时钟输入。在时间t1到时间t2期间内CLK3的产生是一个时钟假信号。因此,无论期望与否,任何逻辑值出现在触发器2423输入线路2429上的D3都被存储了下来,并且此时触发器2423将准备在线路2429上的下一次输入。如果设计正确,那么CLK1和CLK2的时间延迟会减少到最小,这样就不会产生时钟假信号,或者至少时钟假信号所持续的时间不会对电路剩下的部分产生影响。
两种已知的解决保持时间扰乱问题的方法如下:(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将信号输出到下一个芯片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以及单独全局参考时钟是用来控制穿过多重芯片的信号流并更新内部触发器的。这样,在芯片2430中CLK信号到其它芯片的分布的时间是由第一有限状态机2438通过寄存器2443来确定的。类似地,在芯片2431中第四有限状态机2439是用来确定通过寄存器2436从输入Sin以及通过寄存器2466从Q2到触发器2436的传递的。触发器2436的锁存功能也是由第四有限状态机2439发出的一个锁存启动信号控制的。其它芯片2432到2434的逻辑也适用同样的原则。由于对芯片内输入传递时间、芯片内输出时间以及内部触发器状态更新进行了严格的控制,从而排除了芯片内保持时间扰乱。
然而,时序再合成技术要求将用户电路设计转变成一个大得多的功能相当的电路并包括附加的有限状态机和寄存器。一般来说,用以执行此技术所必需的附加的逻辑会占去每个芯片20%的有用逻辑。而且此技术并不能抵制时钟假信号问题。使用时序再合成技术的设计者必须采取附加的预防手段来避免时钟假信号。一个保守的方法是设计一个电路以使到使用门控时钟的逻辑装置的输入在同样的时间内不会发生改变。一个积极的方法是使用门延迟来过滤假信号以使它不会影响电路剩下的部分。然而正如上所述,时序再合成需要一些附加的有效措施来避免时钟假信号。
现在我们将要讨论本发明的解决保持时间和时钟假信号问题的各种实施例。在将用户设计的配置映射到RCC计算系统的软件模型和RCC阵列的硬件模型的过程中,图18(A)所显示的锁存器是根据本发明的一实施例对一时序不灵敏无假信号(TIGF)的仿真。类似地,图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保持旧的值。
因为锁存器是电平感应并且是异步的,所以只要时钟输入和锁存器启动输入被启动,那么输出Q将追踪输入D。
图80(B)显示的是根据本发明的一实施例的TIGF锁存器。正如图80(A)中的锁存器,TIGF锁存器有一D输入、一启动输入、一设置(S)、一复位(R)和一输出Q。另外它有一触发输入。TIGF锁存器包括一D型触发器2471、一多路复用器2472、一“或”门2473和一“与”门2474以及各种互连装置。
D型触发器2471通过线路2476从“与”门的输出接收其输入。D型触发器也是通过线路2477上的一触发信号在其触发输入被触发的,此线路2477是RCC系统根据一依赖于估算循环的严格的进程表进行全局分布的。D型触发器2471的输出是通过线路2475与多路复用器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(CLK的正边沿),Q←D
else Q保持旧值。
因为锁存器是边沿触发的,所以只要触发启动输入被启动,那么输出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触发器还有一些抵制时钟假信号的作用。所属技术领域的技术人员们将会意识到如果用TIGF触发器代替图77(A)中的触发器2420、2421和2423,那么时钟假信号就不会影响任何电路。参考一下图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.模拟服务器
根据本发明另一实施例的模拟服务器可以允许多用户进入相同的可重新配置的硬件单元,来有效地以分时操作的方式模拟和加速相同或不同的用户设计。高速的模拟调度程序和状态转换机制使得模拟服务器能进行有效的处理能力很强的模拟处理。服务器提供多用户或处理,以便为进行加速和硬件状态转换而访问可重新配置硬件单元。一旦完成加速或已访问硬件状态,每个用户或处理就只能用软件模拟,这样就使得其他用户或处理能够控制可重新配置硬件单元。
在此说明书的模拟服务器的部分,我们使用了诸如“作业”和“处理”这样的术语。在此说明书中,术语“作业”和“处理”通常可以互换使用。过去的批处理系统执行“作业”而分时操作系统储存并执行“处理”或程序。而在如今的系统中这些作业和处理是类似的。这样在此说明书中术语“作业”就不限于批处理系统,而“处理”就不限于分时操作系统。而且在某个极端情况下“作业”与“处理”是等同的,那就是当“处理”能够在一个时间块内或没有其它分时程序干预者打断的情况下执行“处理”。另一个极端情况就是如果“作业”要求多时间块来完成,那么“作业”是“处理”的子集。因此,如果一个“处理”由于其它同等优先权的用户/处理的出现而要求多时间块来完成执行,那么它就分为一些“作业”。而且,如果一个“处理”由于它是单独优先权的用户或者处理很短以至在一个时间块内就可以完成,那么一个“处理”就等同于一个“作业”。这样一个用户就可以与一个或更多的“处理”或已经在模拟系统中装载并执行的程序相互作用,并且一个“处理”可能需要一个或更多的“作业”来在分时程序系统中完成。
在一个系统配置中,多用户通过远程终端可以在非网络环境下利用相同的多处理器工作站,并达到进入同样的可重新配置硬件单元的目的,从而进行检查或调试相同或不同用户电路设计。在非网络环境中,远程终端是通过与一主体计算系统相联来实现它的处理功能的。这个非网络设置使得多用户能够进入同一用户设计来达到并行调试的目的。此通路是通过分时操作处理来实现的,而在进行此分时操作时,调度程序起着决定具有优先进入权的用户,转换作业,以及在预定的用户中选择性地锁定硬件单元入口。在其它情况下,多用户可以通过对应于他(她)自己的分离的并且不同的用户设计的服务器进入同一可重新配置的硬件单元来进行调试。在这一配置中,多用户或者处理与操作系统共享工作站中的多重微处理器。在另一配置中,分离的并且是基于微处理器的工作站中的多用户或者处理则是通过网络来进入同一重新配置的硬件单元,从而来检查或调试相同或不同用户电路设计的。类似地,此通路也是通过分时操作处理来实现的,而在进行此分时操作时,调度程序起着决定具有优先进入权的用户,转换作业,以及在预定的用户中选择性地锁定硬件单元入口。在网络环境下,调度程序听从由UNIX套接系统调用的网络请求。此操作系统通过套接来给调度程序发出指令。
如前所述,模拟调度程序使用多优先权优先循环算法。换句话说,具有更高优先权的用户或者处理首先被服务,直到这个用户或者处理完成它的作业并结束进程为止。在具有相同优先权的用户或者处理中,优先循环算法是按如下规则进行应用的:每个用户或处理都被给予相同的时间去执行操作直到结束。这段时间很短,因为多用户或处理无需等待太久。这段时间也足够长,因为在模拟服务器的调度程序打断一个用户或者处理而转换到并进行新的用户工作之前,已经执行了充分的操作。在一实施例中,系统设时序间段是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合著的《操作系统原理(1988)》与William Stalling的《现代操作系统(1996)》中可以找到关于操作系统的参考文献,其内容以引用的方式并入本文。
在一实施例中,工作站1100采用的是Sun Microsystems Enterprise450系统,它使用的是UltraSPARC处理器。Sun 450系统取代了通过局部总线的存储器访问,它通过一些由纵横开关与储存器相连的专用总线使多重处理器访问储存器。因此,在多重微处理器执行各自指令,并不通过局部总线对存储器进行访问的同时,多处理可以运行。Sun450系统和UltraSPAR的说明书的内容将以引用的方式并入本文。虽然Sun Ultra 60系统仅能允许2个处理器,但是它仍然是微处理器系统另外的一个例子。
通过设备驱动器1119和连接/路径1120,调度程序1117提供对可重新配置的硬件单元20的分时访问。调度程序1117的执行主要在软件中与主计算系统的操作系统进行相互作用,部分的在硬件中通过支持模拟进程中断和交换入/出模拟进程来与模拟服务器进行相互作用。调度程序1117和设备驱动器1119将在下面做详细讨论。
在工作站1101中,每一个微处理器1101到1104都具有独立处理而不依赖于其它微处理器的能力。作为本发明一实施例,工作站1100在以UNIX为基础的操作系统下运行,尽管其它的实施例中,1101工作站可以在以Windows或者Macintosh为基础的操作系统下运行。以UNIX为基础的系统为用户配置了X-Windows作为用户根据需要进行管理程序,执行作业和处理文件的接口。如果想了解UNIX操作系统的详细情况,请参考Maurice J.Bach的《UNIX操作系统设计(1986)》。
在图45中,多用户可以通过远程终端进入工作站1100。有时,单个用户可以用一个特殊的CPU来运行程序。在另外情况下,单个用户根据资源限制来使用不同的CPU。通常,操作系统1121决定这些访问,实际上,操作系统本身可以从一个CPU跳到另一个来执行作业。为了处理分时操作程序处理,调度程序通过套接系统调用接收网络请求并对操作系统1121发出系统调用,反过来,操作系统1121这样来处理优先权:它通过设备驱动器1119向可重新配置的硬件单元20发出启动中断信号产生的指示。中断信号的产生是许多调度算法步骤中的一步,其中包括终止当前作业,为当前终止的作业存储状态信息,转换作业,执行新的作业。服务器调度算法将在下面讨论。
现在简要地讨论套接和套接系统调用。在一个实施例中,UNIX操作系统可以以分时操作模式运行。在一定的时间(即时间段)内,UNIX内核向CPU分配一个处理,到这段时间结束时,使这个处理优先,然后为下一个时间段调度另外一个处理。在前一时间段优先的处理在稍晚时间段内再次进行调度。
一个方案是套接(socket),以便能够实现并促进各处理间的通讯以及允许使用复杂网络协议的目的。内核有三层在客户服务器模式下发挥功能,包括套接层、协议层和设备层。上层(套接层)提供系统调用与底层(协议层和设备层)之间的接口。典型的套接层有终点,以使客户程序和服务器程序相耦联。套接终端可以位于不同的机器上。中间层即协议层提供交流的协议模式,比如TCP和IP。底层即设备层包括控制网络设备的驱动器。一个设备驱动器的示例为基于以太网的以太网驱动器。
处理应用客户服务器模式进行交流。在这个模式里,服务器程序听从于一端的套接,而客户程序通过在一个双向交流路径中的另一端点的套接听从于服务程序。内核维持着每个客户、服务器和从客户到服务器所需要的路径数据中的三个层之间的内在连接。
套接包含几个系统调用,其中包括一个建立了交流路径终点的套接系统调用。在许多系统调用中,很多程序用套接描述符sd。连接系统调用把一个名字和一个套接描述符sd联系起来。一些其它系统调用的范例包括连接系统调用要求内核与套接相联系,关闭系统调用关闭套接,切断系统调用关闭套接连接,以及发送和接收在连接的套接间的系统调用传输数据。
图46显示了的是本发明的另一个实施例,其中许多工作站通过一个网络共享一个单独的基于分时操作基础上的模拟系统。许多工作站通过调度程序1117与模拟系统耦联。在模拟系统的计算环境下,单独的CPU11在站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以使硬件状态恢复后能够进行硬件加速和模拟。
另外,在一实施例中,模拟工作站1100是一个Sun MicrosystemsEnterprise 450系统,其使用UltraSPACEII多重处理器。与通过局部总线存储器访问不同,SUN450系统可以使得多重处理器通过由一纵横开关而非联合局部总线访问存储器的专门总线来进行访问。
图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:客户套接指令
1 |
暂停模拟<模拟> |
2 |
退出模拟<设计> |
3 |
对模拟进程重新分配优先权 |
4 |
存储设计模拟状态 |
5 |
队列状态 |
对于每一个套接调用,用整数编码的每一条指令后面都有一些代表设计名称的诸如<设计>的附加参数。如果这条指令成功执行,模拟服务器发出的回应是0,如果没有成功执行,发出的回应是1。对于要求队列状态的指令5,指令反馈的一个实施例是以“\0”字符结尾的ASCII文字显示在用户的显示屏上。在使用了这些系统套接调用后,可重新配置的硬件单元可通过设备驱动器发出或接收恰当的通讯协议信号。
图48是根据本发明的模拟服务器结构的一个实施例。如上所述,单个模拟服务器可对多用户或多个处理提供提供服务以达到在分时操作方式下对用户设计中的模拟和硬件进行加速的目的。因此,用户/处理1147、1148、1194分别通过内部处理通讯线路1150、1151、1152与模拟服务器1140耦联。这些通讯线路可存在于同一个工作站中以便于多重处理器设置操作,或者存在于网络中便于多工作站的使用。为了与可重新配置的硬件单元进行通讯,每个模拟进程包含软件模拟状态及硬件状态。软件进程之间的内部处理通讯通过UNIX套接或系统调用来执行,它能够让这个模拟进程存在于装备有模拟器插入卡的同一工作站上,或者存在于通过TCP/IP网络相连的分离的工作站。这样,与模拟服务器的通讯可以自动进行。
在图48中,模拟服务器1140包括服务器显示器1141、一个模拟作业队列表1142、一个优先级分类器1143、一个作业转换器1144、设备驱动器1145和可重新配置的硬件单元1148,模拟作业队列表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的单向设计配置信息。为进行模型化初始配置信息可以通过线路1170传向可重新配置的硬件单元1172。另外,当用户在模仿和模拟不同的用户设计时,配置信息必须在一个时间段内传送至1172可重新配置的硬件单元。当不同的用户在模拟同一个用户设计时,新的设计配置是不必要的;而为了不同的模拟运行,需要将与同一个设计相连的不同的模拟硬件状态传向可重新配置的硬件单元1172。
线路1175向可重新配置的硬件单元1172传送交换进的模拟状态信息。线路1176传送从可重新配置的硬件单元到计算环境(通常为存储器)的交换出的模拟状态信息。交换进的模拟状态信息包括先前保存的硬件模型状态信息和需要用可重新配置的硬件单元1172加速的硬件存储器状态。交换进的模拟状态信息是在时间段的开始进行传送的,这样预定的当前用户就可以访问可重新配置的硬件单元以进行加速。交换出的模拟状态信息包括硬件模型和存储器状态信息。一旦可重新配置的硬件单元1172接收了中止信号而进行到与不同的用户/程序相连的下一个时间段时,这些信息必须在该时间段的末尾被保存到进存储器中。状态信息的存储使得当前用户/程序可以在稍后的时间内(例如分配给当前用户/程序的下一个时间段)重新保存该状态。
线路1177向可重新配置的硬件单元传送(从设备驱动器1171发出的)中止信号以进行模拟作业的转换。中止信号是在时间段之间被传送的,这样才能在当前时间段传出当前模拟作业而在下一时间段传入新的模拟作业。
在参照图53和图54的基础上,我们将讨论根据本发明的一实施的通信握手协议。图53显示了设备驱动器和可重新配置的硬件单元之间通过一同步交换逻辑接口传输的通信握手信号。图54是通信协议的状态图。图51显示了线路1173上的通信握手信号。图53则是设备驱动器和可重新配置的硬件单元之间的通信握手信号的详细情形。
在图53中,可重新配置的硬件单元1172提供了握手逻辑接口1234。此外,握手逻辑接口1234将安装在可重新配置的硬件单元1172的外部。在设备驱动器1171和握手逻辑接口1234之间有四组信号。这些信号是线路1230上的3-位空间信号,线路1231上的1-位读写信号,线路1232上的4-位命令信号,以及线路1233上的1-位DONE信号。握手逻辑接口包含了载有这些信号的逻辑电路,该电路会将可重新配置的硬件单元放置于适当的模式之下以执行需要运行的不同操作。该接口与CTRL_FPGA单元(或者FPGA输入/输出控制器)相连。
对于3位SPACE(空间)信号来说,建立在PCI总线之上的模拟系统计算环境与可重新配置的硬件单元之间的数据传输是被指定到软件/硬件边界上的特定I/O地址空间--REG(寄存器),CLK(软件时钟),S2H(软件到硬件)和H2S(硬件到软件)中的。正如前文所述,模拟系统根据不同的组件类型和控制功能将硬件模型映射到主存储器的四个地址空间中:REG空间与寄存器组件对应;CLK空间与软件时钟对应;S2H空间与软件测试平台组件到硬件模型的输出对应;H2S空间则与从硬件模型到软件测试平台组件的输出对应。在系统的初始化时间中,这些专用的输入/输出缓冲空间将被映射到内核的主存储空间中。
下表G表明了描述了所有的空间信号:
表G:空间信号
空间 |
描述 |
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-位命令表明该数据传输操作是读、写、在可重新配置的硬件单元中配置新的用户设计还是中止模拟。命令协议如下表H所示:
表H:COMMAND(命令)信号
命令 |
描述 |
0000 |
写入指定空间 |
0001 |
从指定空间读取 |
0010 |
配置FPGA设计 |
0011 |
中止模拟 |
0100 |
未使用的 |
在参考图54的基础上,我们将讨论通信握手协议。在状态1400,设备驱动器模拟系统是闲置的。只要没有新的命令发出,该系统将如路径1401所示保持闲置状态。当新的命令发出时,命令处理器将在状态1402中处理新的命令。在本实施例中,命令处理器是FPGA输入/输出控制器。
若COMMAND=0000或者COMMAND=0001,系统将如状态1403的SPACE指数表明的那样在指定空间进行读或写。若COMMAND=0010,系统首先会在可重新配置的硬件中对FPGA和用户设计进行配置,或者在状态1104中对FPGA和新的用户设计进行配置。系统将为所有的FPGA进行配置信息的排序,以模型化可以在硬件中模拟的用户设计的一部分。然而,如果COMMAND=0011,系统将在状态1405中止可重新配置的硬件单元以中止模拟系统,因为时间段已经准备为新的用户/程序交换进新的模拟状态。在这些状态1403、1403、1405结束之后,模拟系统会产生DONE状态1406以产生DONE信号,然后即返回于状态1400并保持闲置状态直到新的命令出现。
现在讨论模拟服务器在处理多个处于不同优先级上的作业时的分时操作特征。图52给了我们一个例子:模拟作业队列中有四个即将进行的作业(作业A、作业B、作业C、作业D)。但这四个作业的顺序有所不同:作业A和作业B被指定为一级优先,作业C和作业D则为二级优先。正如图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逻辑装置和存储了所有与用户设计有关的存储区的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芯片形式的可编程逻辑器件,例如Altera10K50芯片。局部总线1210使得CTRL_FPGA单元1200可以和其他模拟阵列板(如果有的话)和芯片(即PCI控制器、EEPR0M、时钟缓冲器)相连接。线路1209传送D0NE信号,该信号表示一个模拟DMA数据传输阶段的完成。
图56是逻辑装置和存储器件形式的其他主要的功能性区块。在本发明的一实施例中,逻辑装置是以FPGA芯片形式的可编程逻辑器件(PLD),例如Altera 10K130或10K50芯片。因此,与前面所显示的实施例中阵列内有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在总线1211上通过总线1221分别向逻辑装置1201和1203,以及通过总线1222分别向逻辑装置1202和1204提供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在链的开始处即被初始化。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(31: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和数据总线多路复用器(用于逻辑装置1203中FPGA0的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;也就是说有5个读取存储数据双重缓冲器1251,5个地址补偿单元1250,5个存储器模型1252,以及5个每个存储区N的存储区接口1253。
和EVALFSMx一样,FDO-MUXx中的“x”也表示与之相连的特定逻辑装置(FPGA0、FPGA1、FPGA2、FPGA3),这里“x”表示从0到3之间的一个数。FDO-MUXx1249的输出位于总线1282上,而总线1282则与高端组总线FD(63:32)或低端组总线FD(31:0)相连,至于与哪个总线相连取决于MUXx1249和哪个芯片(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-MUXx1249从每个逻辑装置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则指为REGIISTE_READ数据的DMA读取传送所专用的存储空间。参见上表G。
作为其输出,FDO_MUXx1249在总线1282上为低端组或高端组总线提供数据。选择器信号是来自EVALFSMx单元1248的1284线路上的输出启动(output_en)信号以及1285线路上的选择信号。1284线路上的输出启动信号启动(或禁用)FDO_MUXx1249的运行。对在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_MUXx1249的输出启动信号,1285线路上发往FDO_MUXx1249的选择信号,以及1281线路上发往用户逻辑的三个信号(input-en,mux_en和clk_en)。
根据本发明一个实施例的、用于存储器模拟系统的FPGA逻辑装置1201-1204的运行通常如下所述。当EVAL信号处于逻辑1的时候,FPGA逻辑装置1201-1204里面的数据估算就开始了;否则,模拟系统就正在运行DMA数据传输或存储器访问。在EVAL=1时,EVALFSMx单元1248产生clk_en信号,input_en信号,和mux_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逻辑装置,然后产生output_en和选择信号,以便FPGA数据总线驱动器把存储区接口1253(mem_block_N)的地址和控制信号放在FD总线上。
如果1287线路上的写信号wrx被启动(即,逻辑1),那么选择信号和output_en信号也被启动,以便将写数据放在低端或高端组总线之上,这取决于FPGA芯片被连接到哪一个组上。在图57中,逻辑设备1203是FPGAO,并且被连接到低端组总线FD[31:0]上。如果1287线路上的写信号wrx被禁用(即,逻辑0),那么选择信号和output_en信号被禁用,而且1286线路上的读锁存器信号rd-latx也被禁用,以便让存储器读数据连接缓冲1251锁存器和连接缓冲经由低端或高端组总线来自SRAM的所选数据,这取决于FPGA芯片被连接到哪一个组。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)。在EVALFSM1248(即,图57为FPGAO逻辑设备1203显示了EVALFSMO)中,对应的LAST信号是1280线路上的SHIFTOUT信号。因为特定的逻辑设备1203并非如图56所示的低端组链路中的最后一个逻辑设备,其中逻辑设备1204是低端组链路中的最后一个逻辑设备,所以针对EVALFSMO的SHIFTOUT信号不是LAST信号。如果EVALFSM1248对应于图56中的EVALFSM2,那么1280线路上的SHIFTOUT信号就是在1255线路上提供到MEMFSM的LASTL信号。否则,1280线路上的SHIFTOUT信号就被提供到逻辑设备1204(见图56)。相似的情况是,1279线路上的SHIFTIN信号代表FPGAO逻辑设备(见图56)1203的Vcc。
LASTL和LASTH信号是分别经由1256线路和1257线路进入“与”门1241的输入。“与”门1241提供一个开放的漏极。“与”门1241的输出产生1259线路上的DONE信号,这个信号被提供到计算系统和MEMFSM1240。因此,只有当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,该输出经由EVALFSMx1248被提供到每个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,针对低端组的地址控制mux1244,针对高端组的存储器地址/控制锁存器1247,针对高端组的地址控制mux 1246,和地址计数器1245。
针对低端组的存储器地址/控制锁存器1243接收来自FPGA总线FD[31:0]的地址和控制信号1275,该信号与总线1213以及1263线路上的一个锁存器信号保持一致。锁存器1243在1264线路上产生mem_wr_L信号,并经由总线1266将接入地址/控制信号从FPGA总线FD[31:0]提供给地址/控制mux1244。这个mem_wr信号与芯片选择写信号相同。
地址/控制mux1244经由总线1268接收总线1266上的地址和控制信息和来自地址计数器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,并提供给地址/控制muxes1244和1246。通过1265线路上针对低端组的适当选择信号,地址/控制mux1244在总线1276上要么将地址/控制信息放置在总线1266上以便在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线路上产生适当的选择信号发送给地址/控制mux1244,以便总线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]提供给地址/控制mux1246。
地址/控制mux1246经由总线1268接收总线1239上的地址和控制信息以及来自地址计数器1245的地址信息作为输入。作为输出,它将总线1277上的地址/控制信息发送给高端组SRAM存储器件1206。1269线路上的选择信号提供来自MEMFSM单元1240的适当选择信号。总线1277上的地址/控制信息对应于图56中的总线1214和1215上的MA[18:2]和芯片选择读/写信号。
地址计数器1245经由上文所述的总线1267接收来自SPACE4和SPACE5的信息以便进行DMA写和读传输。地址计数器1245将它的输出提供给总线1288和1268以及地址/控制muxes1244和1246。通过1269线路上针对高端组的适当选择信号,地址/控制mux1246要么将总线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线路上产生适当的选择信号发送到地址/控制mux1246,以便总线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经由总线1283和针对高端组的FPGA总线FD[63:32]以及针对低端组的FD[31:0]在1342线路上接收来自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线路上的锁存数据被缓冲进入1344线路的D型触发器1341。
对于下一个存储区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数据传输,如果有的话。针对高端和低端组的LAST信号在DMA数据传输完成时被产生,并且触发DONE信号,以便指示DMA数据传输周期的完成。XSFR_DONE信号然后被产生,而且接着EVAL周期开始。在EVAL结束时,可以开始存储器读/写。
转向图58的顶端,每当DATXSFR信号处于逻辑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接收逻辑0EVAL信号时,它打开处于状态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,针对地址/控制mux1244的适当选择信号被产生,以便将地址和控制信号发送给低端组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,其中只要DATAXSFR=0,它就保持空闲。
相同的过程也适用于高端组。在状态1311,模拟系统等待一个周期,以便当前所选的FPGA逻辑装置将地址和控制信号放置到FPGA总线FD[63:32]上。在状态1312,MEMFSM对存储器地址/控制锁存器1247产生1270线路上的锁存器信号,以便获得来自FD[63:32]的输入。对应于这个特定获得的地址和控制信号的数据将被从SRAM存储器件读或写到SRAM存储器件。为了决定模拟系统是否需要一个读操作或一个写操作,针对高端组的存储器写信号mem_wr_H将被从地址和控制信号中得到提取。如果mem_wr_H=0,一个读操作被请求。如果men_w_H=1,一个写操作被请求。
在状态1313,针对地址/控制mux1246的适当选择信号被产生,以便将地址和控制信号发送给高端组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,其中每当DATAXSFR=0时,它保持空闲。
可以替代的方法是,对高端组和低端组而言,状态1309和1310都没有根据本发明另一个实施例来实施。因此,在低端组中,MEMFSM将在通过状态1308(LASTL=1)或1307(MEM_WR_L=1和LASTL=1)之后直接进行到状态1300。在高端组中,MEMFSM将在通过状态1314(LASTH1)或1313(MEM_WR_H=1和LASTH=1)之后直接进行到状态1300。
EVALFSM单元1248的状态图将结合本发明的一个实施例来讨论。图59显示每个FPGA芯片中的这种EVALFSMx有限状态机的一个状态图。如图58所示,图59中的状态图的构成便于模拟写/读周期里面的两个周期与它们对应的状态一起显示。因此,状态1320-1326对应估算周期,状态1326B-1336对应存储器访问周期。在下面的讨论中结合图59参照图57。
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周期)被配置。
只要SHIFTIN=0,状态1327就将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_MUXx1249产生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总线驱动器产生选择和ourput_en信号,以便把Mem_B1ock_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)的存储器访问周期的完成,否则指示模拟写/读周期的时长(举例来说,迹线1390的边沿和迹线1370的边沿的组合)。在DMA传输周期期间,DONE信号处于逻辑0。
在DMA传输周期结束的时候,DATAXSFR信号从逻辑1进入逻辑0,这触发估算周期的开始。因此,如迹线1371所指示,EVAL1352处于逻辑1。处于逻辑1的EVAL信号时长是预定的,并且可编程。在这个估算周期期间,用户设计逻辑中的数据与clk_en信号1353一起得到估算,如迹线1372所指示,该信号处于逻辑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]/控制总线上放置ACO_0与在FD总线上放置地址、控制和数据相比要有稍微的延迟。这是因为MEMFSM单元需要时间来锁存从FD总线来的地址/控制信号,提取mem_wr信号,而且对地址/控制mux产生适当的选择信号以便地址/控制信号能被放置在MA[18:2]/控制总线上。此外,在SRAM存储器件的MA[18:2]/控制总线上放置地址/控制信号之后,模拟系统必须等待来自SRAM存储器件的对应数据被放置在FD总线上。其中一个例子是迹线1384和迹线1381之间是时间偏移,其中在AC1_1被放置在MA[18:2]/控制总线上之后,RD1_1才被放置在FD总线上。
在高端组上,FPGA1正在将AC1_0放置在总线FD[63:32]上,随后是WDI_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所指示,RD0_1被放置在FD总线上,跟随MA[18:2]/控制总线上的AC0_1(未显示)。
当EVALFSMx如迹线1388所指示的那样对模拟存储区接口中的存储器读数据双缓冲器产生rd_1at0信号1362时,用户设计逻辑经由模拟存储区接口的读操作就完成了。这个rd_1at0信号被提供到低端组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_1atl信号1363被断言到迹线1382上的读RD2_1和迹线1379上的读RD3_1。因为最后一个FPGA单元的最后一个数据已经被访问,所以如迹线1390所指示,模拟写/读周期的完成由DONE信号1364所指示。
下表H列出、并描述了模拟系统电路板上的各种组件和它们对应的寄存器/存储器、PCI存储器地址,以及局部地址。
表H:存储器映射
组件 |
寄存器/存储器 |
PCI存储器地址(比特) |
局部地址(比特) |
描述 |
PLX9080 |
PCI配置寄存器 |
00H到3CH | | |
PLX9080 |
局部Config./运行时间/DMA寄存器 |
来自PCI基址0:0的偏移-FFh |
来自CSaddr:80h的偏移-80h |
从PCI和局部总线访问 |
CTRL_FPGA[6:1] |
XSFR_EVAL寄存器 |
来自PCI基址2的偏移:0h |
0h |
处于局部空间0 |
CTRL-_FPGA1 |
CONFIG_JTAG1寄存器 |
来自PCI基址2的偏移:10h |
10h |
处于局部空间0 |
CTRL_FPGA2 |
CONFIG_JTAG2寄存器 |
来自PCI基址2的偏移:14h |
14h |
处于局部空间0 |
CTRL_FPGA3 |
CONFIG_JTAG3寄存器 |
来自PCI基址2的偏移:18h |
18h |
处于局部空间0 |
CTRL_FPGA4 |
CONFIG_JTAG4寄存器 |
来自PCI基址2的偏移:1Ch |
1Ch |
处于局部空间0 |
CTRL_FPGA5 |
CONFIG_JTAG5寄存器 |
来自PCI基址2的偏移:18h |
20h |
处于局部空间0 |
CTRL_FPGA6 |
CONF1G_JTAG6寄存器 |
来自PCI基址2的偏移:1Ch |
24h |
处于局部空间0 |
CTRL_FPGA1 |
局部RAM |
来自PCI基址2的偏移:400h-7FFh |
400h-7FFh |
处于局部空间0 |
FPGA[3:0] | SPACE0 | 来自PCI基址用于ch0DMA:0的偏移-FFFFFFFh | 80000000h到8FFFFFFFh | 针对GLOBALandS2H数据的DMA写传输 |
FPGA[3:0] |
SPACE1 |
与PCI基址用于ch0DMA:0的偏移-FFFFFFFh |
90000000H到9FFFFFFFh |
针对REGISTER-WRITE数据的DMA写传输 |
FPGA[3:0] |
SPACE2 |
来自PCI基址用于ch1DMA:0的偏移-FFFFFFFh |
A0000000H到AFFFFFFFh |
针对H2S数据的DMA读传输 |
FPGA[3:0] |
SPACE3 |
来自PCI基址用于ch1DMA:0的偏移 |
B0000000H |
针对REGISTER-READ的 |
组件 |
寄存器/存储器 |
PCI存储器地址(比特) |
局部地址(比特) |
描述 |
| |
-FFFFFFFh |
到BFFFFFFFh |
DMA读传输 |
L-SRAM,H-SRAM |
SPACE4 |
来自PCI基址用于ch0DMA:0的偏移-FFFFFFFh |
C0000000H到CFFFFFFFh |
针对SRAM的DMA写传输 |
L-SRAM,H-SRAM |
SPACE5 |
来自PCI基址用于ch1DMA:0的偏移-FFFFFFFh |
D0000000H到DFFFFFFFh |
针对SRAM的DMA读传输 |
|
SPACE6 |
来自PCI基址用于ch1DMA:0的偏移-FFFFFFFh |
E0000000H到EFFFFFFFh |
保留 |
|
SPACE7 |
来自PCI基址用于ch1DMA:0的偏移-FFFFFFFh |
F0000000H到FFFFFFFFh |
保留 |
下面在表J中显示了根据本发明一个实施例的针对配置文件的数据格式。CPU通过PCI总线每次发送一个字以便针对所有的板上FPGAs并行配置一个比特。
表J:配置数据格式
|
比特0 |
比特1 |
比特2 |
比特3 |
比特16-31- |
字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 |
字s |
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)
字段 |
信号 |
描述 |
R/W |
重设后的值 |
7:0 |
EVALTIME[7:0] |
根据PCI时钟周期的Eva1时间 |
R/W |
0h |
8 |
EVAL-DONE |
Eva1-done标记。通过设定比特WR-XSFR来清除 |
R |
0 |
9 |
XSFRDONE |
针对读写的Xsfr-done标记。通过写XSFR-EVAL寄存器来清除 |
R |
0 |
10 |
RD-XSFR-EN |
启动DMA-read-transfer.通过XSFR_D0NE清除。 |
R/W |
0 |
11 |
WR-XSFR-EN |
启动DMA-write-transfer..通过XSFR-DONE清除.当WR-XSFR和RD-XSFR都设时序,CTRL_FPGA首先执行DMA-write-tranfer,然后自动执行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]寄存器
字段 |
信号 |
描述 |
R/W |
重设后的值 |
15:0 |
CONF-D[15:0] |
为FPGA[15:0]配置数据 |
R/W |
0h |
16 |
NCONF1G |
在从低到高传输时开始配置 |
R/M |
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-TD1 |
JTAG数据进入-发送到FPGA0的TD1 |
R/W |
0 |
24 |
JTAG-TDO |
JTAG数据输出-来自FPGAS的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 |
31:28 | |
保留 | | |
图62和63显示了本发明另外一个实施例的时序图。这两个图展现了有关XSFR_EVAL寄存器的模拟系统的运行。XSFR_EVAL寄存器被主计算系统用来对EVAL周期进行编程,控制DMA读/写,而且读EVAL_DONE和XSFR_DONE字段的状态。主计算系统也使用这个寄存器来启动存储器访问。这两个图之间的主要不同点之一是WAIT_EVAL字段的状态。当WAIT_EVAL字段被设定成″O″的时候,正如图62的情形一样,DMA读传输在CLK_EN之后开始。当WAIT_EVAL字段被设定成″1″的时候,正如图63的情形一样,DMA读传输在EVAL-D0NE之后开始。
在图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#)信号就被用来启动估算循环。在数据传输结束的时候,估算周期开始,包括地址指示器设定初值和软件时钟的运行,以便帮助估算过程。
DONE信号在DMA数据传输周期完成时被产生,如果多个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信号将会得到处理。对门时钟而言,不再被FPGA逻辑装置产生的EVAL_REQ_N信号最大时序大约是23个时钟周期。比这个周期长的EVAL_REQ_N信号将会被忽略。
在时序1413处,大约在时序1412(该时序在DMA写操作的结束处)后2个时钟周期,CTRL_FPGA单元将一个写地址闸WPLXADS_N信号发送给PCI控制器(举例来说,PLXPCI9080),以便开始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处,当EVAL信号被关闭时,DMA读数据将会继续得到处理,而且EVAL_DONE信号将会被启动,以便指示EVAL周期的完成。当它们产生EVAL_REQ_N信号时,FPGA逻辑装置之中的争用也开始出现。
在时序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到时序1417的WR_XSFR信号产生的整个DMA周期内,主计算机系统中的CPU不访问模拟硬件系统,在一个实施例中,这个周期的时长是(1)PCI控制器时序2的开销的时序和(2)WR_XSFR和RD_XSFR的字数目,以及(3)主计算机系统的(例如SunULTRASparc)PCI开销的总和。当处理器在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单元进行通信。这发生在处理器完成轮询PCI控制器的中断寄存器之后。CPU在不同的寄存器上写数据,以便准备下一个数据传输。这个周期的时长大于4u秒。如果存储器访问比这个周期短,那么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控制器产生写地址闸信号WPLXADS_N,这大约在EVAL周期结束之前的16个时钟周期。XSFR_DONE信号也被延长到时序1423处。在时序1423处,XSFR_DONE字段被设定,然后产生WPLXADS_N信号,以便启动DMA读过程。
在时序1420处,大约在EVAL_DONE信号启动之前16个时钟周期,CTRL_FPGA单元将一个写地址闸信号WPLXADS_N发送给PCI控制器(举例来说,PLXPC19080)以便开始DMA读传输。在从时序1420开始大约24个时钟周期处,PCI控制器将启动DMA读传输过程,而且DONE信号也被产生。在时序1421处,在PCI控制器开始进行DMA读处理之前,RD_XSFR信号被启动,以便启动DMA读传递。一些PLX开销数据首先得到传输和处理。在时序1422处,在这个开销数据被处理的期间,DMA读数据被放置在FPGA总线FD[63:0]和局部总线LD[31:0]上。在时序14处的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附加卡,例如视频、多媒体、以太网或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,其包括一个CPU和存储器,而且该系统在一些操作系统下运行,如微软公司的“视窗”或SunMicrosystem公司的Solaris,以便运行一定数量的应用程序。对本领域的技术人员而言,SunMicroSystem公司的Solaris是一个操作环境,也是支持英特网、内部网络和企业计算的软件产品组合。Solaris操作环境基于工业标准UNIX系统V版本4,而且被设计用来在一个分布网络环境中执行主从式应用程序,为较小的工作组提供适当的资源,而且提供电子商业所需要的WebTone。
针对待测设备2024的设备驱动器2022被包含在中央计算系统2021中,以便启动操作系统(以及任何应用程序)和待测设备2024之间的通信。对本领域的技术人员而言,一个设备驱动器是控制计算机系统硬件组件或外设的特殊软件。一个设备驱动器负责访问设备的硬件寄存器,而且经常包括一个中断处理程序以便维护设备产生的中断。设备驱动器时常构成操作系统内核的最低级别的一部份,在内核建造的时候,驱动器被联接上去。一些比较新近的系统有可载入的驱动器,该程序在操作系统运行之后可以从文件安装。
待测设备2024和中央计算系统2021被连接到一个PCI总线2023上。目标系统2020中的其他外设包括一个被用来经由总线2034将目标系统连接到一个网络2030的以太网PCI附加卡2025,一个经由总线2036和2035连接到SCSI驱动器2027和2031的SCSIPCI附加卡2026,一台经由总线2032连接的录像机2028(如果在待测设备2024的设计中是必需的),以及一个经由总线2033连接到待测设备2024的显示器及/或扬声器2029(如果在待测设备2024的设计中是必需的)。对于本领域的技术人员而言,SCSI代表“小型电脑系统接口”,这是一种在计算机和智能设备(例如,硬盘、软盘、光盘、打印机、扫描仪和更多设备)之间进行系统级接口交换的独立于处理器的标准。
在这种目标系统环境中,待测设备2024能与来自中央计算系统(即操作系统,应用程序)的多种激励和外设一起得到检测。如果时间不是要考虑的问题,而且设计者只寻求一种简单的通过/失败测试,这个协同校验工具应该能充分满足他们的需要。然而,在大多数情形中,一个设计项目有严格的预算,并且在产品推出之前有严格的预定日程。正如上文所解释的那样,这个特定的基于ASIC的协同校验工具并不令人满意,因为其调试特征不存在(设计者没有复杂的技术,无法隔离“失败”测试的原因,而且项目开始时无法预知发现的每个错误的“修复”数目,因此也无法预知日程安排和预算。
作为带测试设备的具有一个仿真器的传统协同校验工具
图66举例说明了带有一个仿真器的传统协同校验工具。与上文在图64中所解释说明的设置不同,待测设备被编程纳入到连接到目标系统2040和一些外设以及一个测试工作站2052的一个仿真器2048中。仿真器2048包括一个仿真时钟2066和被编程纳入仿真器中的待测设备。
仿真器2048经由PCI总线桥接器2044和PCI总线2057以及控制线路2056被连接到目标系统2040。目标系统2040包括主板上的中央计算系统2041和一些外设的组合。目标系统2040包括一个中央计算系统2041,其包括处理器和存储器,而且该系统在一些操作系统下运行,如微软公司的″视窗″或SunMicrosystem公司的Solaris,以便运行一定数量的应用程序。针对待测设备2024的设备驱动器2042被包含在中央计算系统2041中,以便启动操作系统(以及任何应用程序)和仿真器2048的待测设备之间的通信。为了和仿真器2048以及作为计算环境一部分的其他设备进行通信,中央计算系统2041被连接到PCI总线2043上。目标系统2040中的其他外设包括一个被用来经由总线2058将目标系统连接到一个网络2049的以太网PCI附加卡2045,一个经由总线2060和2059连接到SCSI驱动器2047和2050的SCSI PCI附加卡2046。
仿真器2048也经由总线2062被连接到测试工作站2052。测试工作站2052包括一个CPU和存储器,以便执行它的功能。测试工作站2052也可能包括测试机架2061和针对模型化的、但实质上没有连接到仿真器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包括处理器、存储器、一个操作系统、和运行单一引擎协同校验系统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和存储器,而且在一些操作系统中运行,例如微软公司的“视窗”或SunMicrosystem公司的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(不在图69中显示,但是见图74)也可能被提供,且带有芯片m2。这个板m2类似于板m1,除了板m2没有任何的外部接口,且如果需要附加板,它能被用来实现扩展目的。
现在将讨论这些板的内容。板2145(板m1)包括一个PCI控制器2151,一个外部输入/输出控制器2152,数据芯片(m1)2153,存储器2154和多路复用器2155。在一个实施例中,这个PCI控制器是PLX9080。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。在一个实施例中,在有些情况下,在防止来自局部总线的数据传给RCC计算系统2141的时候,三状态缓冲器2179允许来自RCC计算系统2141的数据传给局部总线2180,而且允许数据从局部总线2180通过到其他例证中的RCC计算系统2141。
外部输入/输出控制器2152也经由数据总线2176被连接到芯片(m1)2153和存储器/外部缓冲器2154。在一个实施例中,芯片(m1)2153是可重新配置的计算组件,例如一个FPGA芯片,它能被用来至少配置用户设计的部分硬件模型(或所有硬件模型,如果用户设计足够小)。在一个实施例中,外部缓冲器2154是DRAMDIMM,而且能被用被芯片2153用来实现多种目的。外部缓冲器2154提供许多存储器容量,超过以局部方式连接到每个可重新配置的逻辑元件(举例来说,可重新配置的逻辑元件2157)的个别SRAM存储器件。这个大的存储器容量允许RCC计算系统储存大量的数据,例如测试平台数据、微控制器嵌入码(如果用户设计是一个微控制器),以及一个存储器设备中的大型检查表。依照上面的描述,外部缓冲器2154也能被用来为硬件模型储存必需的数据。实质上,这个外部缓冲器2154可以部分起到上面描述和说明的另一个高端或低端组SRAM存储器件一样的功能,举例来说,图56(SRAM1205和1206),但是它有更多的存储器。外部缓冲器2154也能被协同校验系统用来储存从目标系统2120和外部的输入/输出设备处收到的数据,以便让这些数据稍后能被RCC计算系统2141取回。芯片m12153和外部缓冲器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,当目标系统2120不再包含中央计算系统2121的时候,目标应用程序会在协同校验系统2140的RCC计算系统2141中运行。的确,总线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(chip0_1,指示板1的芯片0),和各种总线以及被连接到这些组件的部份控制线路。具体而言,图70举例说明了被用于数据输入周期的控制逻辑部分,其中来自外部接口(外部输入/输出扩展器2139)和RCC计算系统2141的数据被传输到RCC硬件阵列2190。图72举例说明了数据输入周期的时序图。图71举例说明了用于数据输出周期的控制逻辑部分,其中来自RCC硬件阵列2190的数据被传输到RCC计算系统2141和外部接口(外部1/0扩展器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输入/输出地址空间中,以便与硬件模型进行接口交换。内核推动模拟时间,寻找激活的测试平台组件,且估算时钟组件。当任何时钟边沿被内核检测到的时候,寄存器和存储器被更新,而且经过组合组件的数值被传播。因此,如果硬件加速模式被选中,在这些空间中的任何数值改变都将触发硬件模型改变逻辑状态。
在数据传输时,DAX_SFR信号处于逻辑″1″。在这个期间,局部总线2222-2230将被协同校验系统用来根据下列数据周期传输数据:(1)从RCC计算系统到RCC硬件阵列和CLK空间的全局数据;(2)从外部接口到RCC硬件阵列和外部缓冲器的全局数据;和(3)从RCC计算系统到RCC硬件阵列的S2H数据,在每个板中,一次一个芯片。因此,最初两个数据周期是全局周期的部份,而且最后一个数据周期是S2H周期的部分。
对于数据输入全局周期的第一个部份而言,其中来自RCC计算系统的全局数据被发送去RCC硬件阵列,外部输入/输出控制器2200启动一个CPU_IN信号到2255线路上的逻辑″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_PTRO,线路2242上的GLB_PTR1,线路2243上的GLB_PTR2,和线路2244上的GLB_PTR3。一些示范性S2H指示器包括线路2245上的S2H_PTRO,而且包括线路2246上的S2H_PTR1。因为针对这些锁存器的启动输入被连接到这些指示器,所以各自的锁存器在没有适当指示器信号的用户设计的硬件模型中不能将数据锁存到它们打算锁存的目的地节点。
这些全局和S2H指示器信号由输出2254上的一个数据输入指示器状态机2214所产生。数据输入指示器状态机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被连接到用户设计硬件模型中的各种内部节点。一些内部节点对应于用户设计的输入引出脚。用户设计有其他内部节点,它们正常情况下不可以经由引出脚来访问,但是这些非引出脚的内部节点可以实现其他的调试目的,以便为需要在用户设计中将激励应用到各种内部节点的设计者提供灵活性,无论它们是否是输入引出脚。对被外部接口应用到用户设计的精细硬件模型的激励而言,数据输入逻辑和那些对应于输入引出脚的内部节点属于包含内容。举例来说,如果用户设计是一个CRTC6845视频控制器,那么一些输入引出脚可能如下所述:
LPSTB-一个光笔选通引脚
~RESET-低电平信号以便复位6845控制器
RS-寄存器选择
E-使能
CLK-时钟
~CS-芯片选择
在这个视频控制器中,其他输入引出脚也是可用的。基于与外部世界进行接口交换的输入引出脚的数目,节点的数目因此得到确定,而且锁存器的数目和指示器的数目也可以得到现成的确定。举例来说,被配置在RCC硬件阵列中的一些硬件模型,可能有三十个分开的锁存器,它们与总数为180的锁存器(=30X6)的每一个GLB_PTRO,GLB_PTR1,GLB_PTR2,GLB_PTR3,S2H-PTRO和S2H_PTR1是相关的。在其他的设计中,针对GLB_PTR30的更多全局指示器,例如GLB_PTR4,可能被当作必需品来使用。同样地,针对S2H_PTR30的更多S2H指示器,例如S2H_PTR2,可能被当作必需品来使用。这些指示器和他们对应的锁存器基于每个用户设计的硬件模型的需求。
回到图70和72,只有当锁存器被用适当的全局指示器或S2H指示器信号启动时,FD总线线路上的数据才设法进入这些内部节点。否则,这些内部节点得不到FD总线上任何数据的驱动。在CPU_IN=1时序周期的第一个半周期,当F_WR处于逻辑″1″时,GLB_PTRO处于逻辑″1″,以便经由线路2247驱动FD1上的数据到对应的内部节点。如果存在依赖GLB_PTRO启动的其他锁存器,这些锁存器也会锁存数据到它们对应的内部节点。在CPU_IN=1时序周期的第二个半周期中,F_WR再一次进入逻辑″1″,以便触发GLB_PTR1上升到逻辑″1″。这驱动FD6上的数据到连接到线路2248的内部节点。这也将软件时钟信号发送到2223行上,以便被锁存器2205锁存到线路2216以及启动线路2215上的GLB_PTR1信号。这个软件时钟被传输到针对目标系统和其他外部输入/输出设备的外部时钟输入。既然GLB_PTRO和GLB_PTR1仅仅被用于数据输入全局周期的第一部份,CPU_IN回到逻辑″0″,而且这就完成了从RCC计算系统到RCC硬件阵列的全局数据的传输。
现在将讨论数据输入全局周期的第二部份,其中来自外部接口的全局数据被传输到RCC硬件阵列和外部缓冲器。同样,来自目标系统或被引向用户设计的外部输入/输出设备的各种输入引出脚信号必须被被提供到硬件模型和软件模型。通过使用适当的指示器,这些数据能被传输到硬件模型,并且被锁存以便驱动内部节点。通过首先将它们储存在缓冲器2201中以便进行后续的RCC计算系统获取并更新软件模型的内部状态,这样这些数据也被传输到软件模型。
CPU_IN当前处于逻辑″0″,而且EXTJTN处于逻辑″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经由外部缓冲器2201提供到总线2220。为了启动这些储存,WR_EXT_BUF信号被经由线路2221提供到外部缓冲器2201。在外部缓冲器2201充满之前,RCC计算系统将会读外部缓冲器2201的内容,以便对软件模型进行适当的更新。在RCC硬件阵列中被传输到硬件模型的各种内部节点的任何数据将可能导致硬件模型的一些内部状态改变。因为RCC计算系统在软件中具有整个用户设计的模型,这些在硬件模型中的内部状态变化也应该在软件模型中得到反映。这就完成了数据输入的全局周期。
现在将讨论S2H周期。S2H周期被用来从RCC计算系统到RCC硬件阵列传输测试平台数据,然后按序列为每个板从一个芯片向另一个芯片传输那个数据。当EXT_IN信号进入逻辑″0″,指示数据传输是在RCC计算系统和RCC硬件阵列之间进行时候,CPU_IN信号进入逻辑″1″。不涉及外部接口。CPU_IN信号也启动三状态缓冲器2202,以便允许数据从局部总线2222进入内部输入/输出控制器2203。
在CPU_IN-1时序周期的开始处,S2H_PTRO进入逻辑″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返回逻辑″O″。注意,来自外部接口输入/输出的数据被当作全局数据,并在全局周期期间得到处理。这就完成了数据输入控制逻辑和数据输入周期的讨论。
数据输出
现在讨论本发明的数据输出控制逻辑实施例。根据本发明实施例的数据输出控制逻辑负责处理从RCC硬件阵列被传输到RCC计算系统和外部接口的数据。在针对激励(外部或其它的)处理数据的期间,硬件模型产生某种输出目标应用程序或一些输入/输出设备可能需要的数据。这些输出数据可能是实质的数据、地址、控制信息或其他应用程序或设备可能在自身处理中需要的其他有关信息。进入RCC计算系统(它在软件中可能有其他外部输入/输出设备的模型)、目标系统或外部输入/输出设备的这些输出数据被提供在各种内部节点上。如上文参照数据输入逻辑的讨论所显示的那样,一些内部节点对应于用户设计的输出引出脚。用户设计有其他的内部节点,它们正常是不能经由引出脚来访问的,但是这些非引出脚的内部节点针对其他的调试目的,以便为设计者提供灵活性,他们希望在用户设计中的各种内部节点读并且分析激励,不管它们是否是输出引出脚。对于来自用户设计的精细硬件模型、被应用到外部接口或RCC计算系统(它可能在软件中有其他输入/输出设备的模型)激励而言,对应于输出引出脚的数据输出逻辑和那些内部节点是隐含的。
举例来说,如果用户设计是一个CRTC6845视频控制器,一些输出引出脚可能包括下列各项:
MAO-MA13-存储器地址
DO-D7-数据总线
DE-显示使能
CURSOR-光标位置
VS-垂直同步
HS-水平同步
在这个视频控制器中的其他输出引出脚也是可用的。基于与外部世界进行接口交换的输出引出脚的数目,节点的数目以及门控逻辑的数目和指示器数目也能得到容易的确定。因此,视频控制器上的输出引出脚MAO-MA13为视频RAM提供存储器地址。VS输出引出脚为垂直同步提供信号,因此触发显示器上的一个垂直返驰。输出引出脚-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。数据输出指示器状态机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_PTRO的输入2353;“与”门2315具有来自一个内部节点的输入2349,而且具有来自H2S_PTR1的输入2354;“与”门2316具有来自一个内部节点的输入2350,而且具有来自H2S_PTR2的输入2355;“与”门2317具有来自一个内部节点的输入2351,而且具有来自H2S_PTR3的输入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,也被连接到“与”门2316的输出端2345。进入“或”门2310-2313的其它输入端2360-2366能被连接到其他的“与”门(未显示)的输出,它们自己被连接到其他内部节点和H2S_PTR指示器。这些“或”门和它们的特定输入的使用以用户设计和被配置的硬件模型为基础。因此,在其他的设计中,可能使用较多的指示器,而且来自“与”门2315的输出2344被连接到一个不同的“或”门,而不是“或”门2311。
“或”门2310-2313的输出2339-2342被连接到FD总线线路FDO,FD3,FD1和FD4。在用户设计的这个特定例子中,只有四个输出引出脚信号将被传输到RCC计算系统和外部接口。因此,FDO被连接到“或”门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被连接到外部输入/输出控制器2300中的线路2330和一些锁存器(未显示);线路2322被连接到外部输入/输出控制器2300中的线路2331和一些锁存器(未显示);线路2323被连接到外部输入/输出控制器2300中的线路2332和锁存器2305;线路2324被连接到外部输入/输出个控制器2300中的线路2333和锁存器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。
一个检查表2309被耦合到进入这些锁存器2305和2306的启动输入。检查表2309由线路2367上触发检查表地址计数器2304运行的F_RD信号所控制。在每个计数器增量处,指示器在检查表2309中启动一个特定的列。如果该特定列中的一个项目(或比特)出于逻辑″1″,被连接到检查表2309中那个特定项目的LUT输出线路将启动它的对应锁存器,并驱动数据进入外部接口,且最后进入目标系统或一些外部输入/输出设备中的所需目的地。举例来说,LUT输出线路2325被连接到针对锁存器2305的启动输入,而且LUT输出线路2326被连接到针对锁存器2306的启动输入。
在这个例子中,检查表2309的列0-3被编程来启动对应于芯片m1中的内部节点输出引出脚导线的锁存器。同样,列4-6被编程来启动对应于芯片0_1(也就是,板1中的芯片0)中的内部节点输出引出脚导线的锁存器。在列4中,比特3处于逻辑″1″。在列5中,比特1处于逻辑″1″。在列6中,比特4处于逻辑″1″。所有其他项目或比特部位都处于逻辑″O″。因为一个单一输出引出脚线路不能驱动多重输入/输出设备,所以对检查表中任何给定比特部位(或栏)而言,只有一个项目处于逻辑″1″。换句话说,硬件模型中的一个输出引出脚内部节点只能对连接到外部接口的一个单一线路提供数据。
如上文所述,数据输出控制逻辑需要RCC硬件模型中的每个芯片中的每个可重新配置的逻辑元件中的数据被顺序传输到:(1)RCC计算系统,然后到(2)RCC计算系统和外部接口(到目标系统和外部输入/输出设备)。RCC计算系统需要这些数据,因为它在软件中具有有一些输入/输出设备的模型,而且对那些没被设计到这些模型化的输入/输出设备的数据而言,RCC计算系统需要监测它们,以便它的内部状态与RCC硬件阵列中的硬件模型的状态是一致的。在图71和73中举例说明的这个例子中,只有七个内部节点将被驱动以便输出到RCC计算系统和外部接口。那些内部节点中的二个节点位于芯片m1中,其他五个内部节点位于chip0_1中(也就是,板1中的芯片0)。当然,对这个特定的用户设计而言,在这些和其他的芯片中可能需要其他内部节点,但图71和73将只举例说明这七个节点。
在数据传输期间,DATA_XSFR信号处于逻辑″1″。在这个期间,局部总线2330-2333将被协同校验系统用来将来自RCC硬件阵列中每个板中的每个芯片的数据顺序传输到RCC计算系统和外部接口。DATA_XSFR和F_RD信号控制数据输出指示器状态机的运行,以便产生适当的指示器H2S_PTR[4:0],让其进入输出引出脚内部节点的适当门。F_RD信号也控制检查表地址计数器2304,以便将内部节点数据传输到外部接口。
芯片m1中的内部节点将首先得到处理。当F_RD在数据传输周期开始时升到逻辑″1″的时候,芯片m1中的H2S_PTRO进入逻辑″1″。这经由三状态缓冲器2301和局部总线2320驱动芯片m1中的那些内部节点中的、取决于H2S_PTRO的数据进入RCC计算系统中。检查表地址计数器2304对检查表2309列0进行计数和指向,以便将芯片m1的适当数据锁存到外部接口。当F_RD信号再一次进入逻辑″1″的时候,内部节点中能被H2S_PTR1驱动的数据被传输到RCC计算系统和外部接口。H2S_PTR1进入逻辑″1″,并且对应于第二F_RD信号,检查表地址计数器2304对检查表2309列1进行计数和指向,以便将芯片m1的适当数据锁存到外部接口。
可重新配置的逻辑元件2303(也就是,芯片0_1,或板1中的芯片0)的五个内部节点现在将得到处理。在这个例子中,来自与H2S_PTRO和H2SPTR1有关的两个内部节点的数据将只被传输到RCC计算系统。来自与H2S_PTR2,H2S_PTR3和H2S_PTR4有关的三个内部节点的数据将被传输到RCC计算系统和外部接口。
当F_RD升到逻辑″1″的时候,芯片2303中的H2S_PTRO进入逻辑″1″。这经由三状态缓冲器2301和局部总线2320驱动芯片2303中的内部节点里取决于H2S_PTRO的数据,使其进入RCC计算系统。在这个例子中,连接到线路2348的内部节点取决于线路2353上的H2S_PTRO。当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信号,检查表地址计数器2304对检查表2309的列4进行计数和指向,以便将适当的数据从这个连接到线路2350上的内部节点锁存到位于外部接口的线路2329(导线3)。
当F_RD信号再一次进入逻辑″1″的时候,H2S_PTR3进入逻辑″1″,而且在被连接到线路2351的内部节点里的数据被提供到LD1上。这个数据被提供到RCC计算系统和外部接口。三状态缓冲器2301允许数据传输到局部总线2320,然后进入RCC计算系统之内。至于外部接口,通过启动H2S_PTR3信号,这个数据被驱动到线路2332和2323上的LD1。对应于F_RD信号,检查表地址计数器2304对检查表2309的列5进行计数和指向,以便将适当的数据从这个连接到线路2351上的内部节点锁存到位于外部接口的线路2327(导线1)。
当F_RD信号再一次进入逻辑″1″的时候,H2S_PTR4进入逻辑″1″,而且在被连接到线路2352的内部节点里的数据被提供到LD4上。这个数据被提供到RCC计算系统和外部接口。三状态缓冲器2301允许数据传输到局部总线2320,然后进入RCC计算系统之内。至于外部接口,通过启动H2S_PTR4信号,这个数据被驱动到线路2333和2324上的LD4。对应于F_RD信号,检查表地址计数器2304对检查表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码中,示范性用户电路设计如下所示:
模块寄存器(时钟,重新设定,d,q)
输入时钟,d,重新设定;
输出q;
reg q;
always@(posedge时钟或negedge重新设定)
如果(~重新设定)q=0;
else其他
q=d,
endmodule(结束模块)
moduleexample模块例证;
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 dl=sigin∧q3;
assign d2=q1∧q3;
assign d3=q2∧q3;
assign sigout=q3;
//a clock generator(一个时钟发生器)
always(总是)
begin(开始)
clk=0;
.#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所示,模拟系统运行组件类型分析。HDL编码本来在图26中被呈现为代表用户特定电路设计的码,现在它已经得到了分析。由″模块寄存器(时钟clock,重新设置reset,d,q);″开始,且以″结束模块endmodule”为结束,并进一步由编号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和作为进入寄存器组件S1-S3的输入的d3。编号903显示了时钟组件S8。
下一个系列的码行数目显示了测试平台组件。编号904显示了测试平台组件(驱动器)S9。编号905显示了测试平台组件(初始值)S10,和S11。编号904显示了测试平台组件(显示器)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来模拟电路。然而,针对S3的寄存器S1和针对S7的组合组件S4被模型化到硬件和软件中。
对于软件/硬件边界而言,系统为各种驻留信号(也就是,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存储器空间。寄存器S1-S3输出信号q1-q3将被指定到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也被模型化。
一旦硬件模型被确定了,然后系统就能将模型映射、布局、布线处理到一个或多个芯片之内。这个特定例子实际上能在单一AlteraFLEX 10K芯片上实现,但是为了指导的目的,这个例子将假设需要两个芯片来实现这个硬件模型。图32为这个例子显示了一个特定的硬件模型-到-芯片分区结果。
在图32中,完全的模型(除了输入/输出和时钟边沿寄存器以外)与被虚线代表芯片边界一起显示。在最后的配置文件产生之前,这个结果由模拟系统的编译器产生。因此,硬件模型针对导线921,922和923在这两个芯片之间至少需要三个导线。为了将在这两个芯片(芯片1和芯片2)之间需要的引脚/导线数目减到最少,可以产生另一个模型-到-芯片分区,或使用一个多路复用方案。
分析图32中显示的这个特定分区结果,在这两个芯片之间的导线数目能被减少到二,方法是从芯片2中将sigin导线923移动到芯片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接口处的传输量。
前面描述了本发明的一个较佳实施例,其提出是为了例证和描述的目的。这并非是彻底的说明,也并非为了将本发明限制为呈现出的特定形式。显而易见,本领域的技术人员可以清楚地发现许多修改和变更。本领域的技术人员将容易地发现,其他的应用可以替换此处提供的应用,而不会背离本发明的精神和范围。因此,本发明只应受到下文权利要求书的限制。