数据处理系统中模拟处理的方法以及所述数据处理系统的制作方法

文档序号:6458274阅读:343来源:国知局
专利名称:数据处理系统中模拟处理的方法以及所述数据处理系统的制作方法
技术领域
本发明一般地涉及设计和模拟数字设备、模块和系统,具体地说,涉及用于利用硬件描述语言(HDL)模型进行数字设备、模块和系统的计算机模拟的方法和系统。更具体地说,本发明涉及支持模拟中的打印事件的方法、系统和程序产品。

背景技术
检验数字设计的逻辑正确性并改正设计中的缺点(如有必要)是大多数数字设计过程中非常重要的步骤。通过实际建立网络或在计算机上模拟网络来测试逻辑网络。随着逻辑网络变得极为复杂,有必要在真正建立设计之前模拟设计。特别是在设计实现为集成电路时,因为集成电路的制造需要相当多的时间并且对错误的纠正成本高昂。数字设计模拟的目标是检验设计的逻辑正确性。
在由常规的电子计算机辅助设计(ECAD)系统支持的典型自动化设计过程中,设计人员使用硬件描述语言(HDL)(例如,VHDL)输入高级描述,由此生成各种电路块及其互连的表示。ECAD系统将设计描述编辑为最适合模拟的格式。然后使用模拟器来在开发电路布图之前检验设计的逻辑正确性。
模拟器通常是在数字表示上运行的软件工具,或是电路的模拟模型,以及是表示数字系统输入的输入激励(即,测试用例)的列表。模拟器生成电路的响应的数值表示,然后可以在显示屏上作为值的列表来查看,或通常由独立软件程序进一步解释并以图形形式在显示屏上呈现。模拟器可以在通用计算机或通常附加到通用计算机且特别针对模拟设计的另一电子装置上运行。完全以软件形式在通用计算机上运行的模拟器将在下文中称为“软件模拟器”。在特别设计的电子装置的协助下运行的模拟器将在下文中称为“硬件模拟器”。
通常,软件模拟器执行极为大量的计算并且在用户看来运行缓慢。为了优化性能,设计了模拟模型的格式以供模拟器高效地使用。硬件模拟器本质上要求包括电路描述的模拟模型以特别设计的格式进行传送。在两种情况下,都要求从HDL描述到模拟格式的转换(在下文中称为可执行模拟的模型)。
由模拟器将测试用例应用到可执行模拟的模型的结果在本文中称为“全部事件跟踪”(AET)。AET包含可执行模拟的模型中针对每个模拟周期的信号和/或存储元件的逻辑值。例如,可以使用AET查看器来将AET的内容呈现给用户以便检查和分析,以协助用户检测和确定设计中错误的原因。如将理解的,AET通常在逐周期的基础上呈现所需的信号和锁存值。因此,为了分析模拟结果,用户必须手动梳理AET以标识所需的一个或多个特定周期,并在没有注释文本帮助的情况下解释原始信号或锁存值。本发明改进了这种常规的模拟结果分析的方法。


发明内容
根据模拟处理的方法,接收一个或多个描述数字设计的HDL源文件,所述数字设计包括多个分级布置的设计实体。所述一个或多个HDL源文件包括一个或多个语句,所述语句实例化所述多个分级布置的设计实体中的多个打印事件,其中每个打印事件在所述数字设计中具有关联的消息和至少一个关联的信号。处理所述一个或多个HDL源文件以获得包括数据结构的可执行模拟的模型,所述数据结构描述了为所述可执行模拟的模型定义的所述多个打印事件,并且将所述多个打印事件中的每个事件与其相应关联的信号进行关联。
本发明的所有目标、特性和优点将在以下详细的书面说明中变得显而易见。



在所附权利要求书中说明了被认为是本发明特性的新颖特征。但是,当结合附图阅读时,通过参考以下对示例性实施例的详细说明,可以最佳地理解本发明本身及其优选使用方式、进一步的目标及优点,这些附图是 图1是示例性数据处理系统的图示; 图2示出了图1中示出的数据处理系统的代表性硬件环境; 图3A是示出了可以根据本发明的教导实施的数字设计实体的简化方块图; 图3B是示出了可以根据本发明的教导实施的模拟模型的图形表示; 图3C是示出了可以根据本发明的教导实施的模型建立过程的流程图; 图3D是示出了可以根据本发明的教导实施的数据结构的方块图; 图4A是表示设备(instrumentation)实体的简化方块图; 图4B是根据本发明的教导实施的模拟模型的简化方块图; 图4C示出了可以根据本发明的教导使用的HDL句法的示例性部分; 图4D是示出根据本发明的教导的模型建立过程的流程图; 图4E是根据本发明的教导构建的存储器数据结构的方块图表示; 图5A是示出了包含多个设计和设备实体的模拟模型的方块图; 图5B示出了根据本发明的一个实施例的用于在模拟模型中声明事件的数据结构; 图5C示出了图5A中的模拟模型的扩展事件数据结构的列表; 图5D示出了根据本发明的备选实施例的用于在模拟模型中声明事件的数据结构; 图6A示出了根据本发明的教导实现的具有包含随机设备逻辑的设备实体的代表性目标设计实体; 图6B示出了根据本发明的教导的用于实现HDL设计实体中的设备逻辑的示例性HDL文件; 图7是根据本发明的实施了打印事件和打印事件组的简化模拟模型的方块图; 图8是与图7的模拟模型对应的打印事件表的方块图; 图9是示出了根据本发明处理实施的可执行模拟的模型和关联的输入文件的过程流程图; 图10是根据本发明的软件模拟环境的示例性视图; 图11是根据本发明的用于启用打印事件和打印事件组的示例性过程的高级逻辑流程图;以及 图12是根据本发明的用于呈现打印事件的示例性过程的高级逻辑流程图。

具体实施例方式 本发明提供了数字电路设计的准确和全面的监视,其中设计人员使用与针对设计本身所使用的句法类似的硬件描述语言(HDL)句法来创建设备模块。虽然HDL适合数字设计人员的需要,但是HDL也可以有效地用于许多检查功能。根据本发明的方法和系统,使用设备模块来监视指定的设计参数,虽然其未编辑为设计本身的集成部分。此外,由于使用与用于描述实际设计的HDL类似的HDL来指定设备模块,所以这种模块独立于平台和模拟器。不同于使用C或C++程序执行的检查,HDL设备可以直接编辑和运行,而不会使硬件模拟器的性能降低。
现在参考附图,具体地说,参考图1,其中示出了可以有利地与本发明一起使用的示例性数据处理系统10的图示。如图所示,数据处理系统10包括一个或多个节点与之连接的服务器(或工作站)12。服务器/工作站12优选地包括高性能多处理器计算机,例如,由位于纽约阿蒙克的美国国际商业机器公司提供的计算机系统的POWER系列其中之一。服务器/工作站12优选地包括用于存储包括ECAD系统的软件程序代码的非易失性和易失性内部存储装置,所述ECAD系统可以用于开发和检验根据本发明的数字电路设计。如图所示,节点13至少包括显示设备14、键盘16以及鼠标20,并可以进一步提供其他处理资源。在工作站12中执行的ECAD程序代码优选地在显示设备14的显示屏22中显示图形用户接口(GUI),数字电路设计人员可以使用键盘16和鼠标20来与之互动。因此,通过使用键盘16和鼠标20输入适当的输入,数字电路设计人员能够如下文进一步描述那样开发和检验数字电路设计。
图2示出了图1的示例性数据处理系统10的代表性硬件环境。数据处理系统10配置为包括计算机系统的所有功能硬件和软件组件。数据处理系统10包括一个或多个中央处理单元(CPU)24(例如,常规的微处理器)以及通过系统总线26互连的多个其他组件。CPU 24控制整个计算机系统的运行,包括执行计算机程序指示的算术和逻辑功能。虽然未在图2中示出,但是CPU(例如,CPU 24)通常包括组织计算机存储器中的数据和程序存储装置并在计算机系统的各个部件之间传输数据和其他信息的控制单元。这种CPU通常还包括执行算术和逻辑运算(例如,加法、比较、乘法等)的算术单元。数据处理系统10的这种组件和单元可以在图1的服务器/工作站12中实现。
数据处理系统10还包括主存储器(或系统存储器)44、可选的附加随机存取存储器(RAM)28、只读存储器(ROM)30、用于将系统总线26连接到显示设备14(例如,CRT或LCD平板显示器)的显示适配器32,以及用于将外围设备(例如,盘和带驱动器33)连接到系统总线26的I/O适配器34。
数据处理系统10还包括用于将键盘16、鼠标20、扬声器38、麦克风40和/或其他用户接口设备连接到系统总线26的用户接口适配器36。连接到系统总线26的通信适配器42将数据处理系统10连接到外部计算机网络(例如,局域网(LAN)或广域网(WAN))。
数据处理系统10还包括位于机器可读介质中以控制数据操作系统10的操作的操作系统(例如,Microsoft Windows、AIX或Linux)。任何适合的机器可读介质都可以保存操作系统,例如,主存储器44、RAM 28、ROM30、磁盘、磁带或光盘(最后三项位于盘和磁带驱动器33内)。计算机可读介质(例如,主存储器44)还包括在由CPU 24处理时执行本文描述的操作的ECAD系统46。
本领域的技术人员将理解,图2中示出的硬件可以针对具体的设计和模拟应用而改变。例如,除了示出的硬件以外或替代示出的硬件,还可以使用其他外围设备,例如,光盘介质、音频适配器、或芯片编程设备(如计算机硬件领域公知的PAL或EPROM编程设备)。此外,虽然图2仅示出了在数据处理系统10中的单个CPU和单个系统总线,但是应该理解的是,本发明并不限于图1和图2中示出的通用系统架构,并且本发明同样适用于具有多个CPU和/或更复杂的互连架构的计算机系统。
模拟的数字电路设计模型包括至少一个(通常是多个)在下文中称为设计实体的子单元。图3A是其中可以实现本发明的方法和系统的示例性设计实体300的方块图表示。设计实体300由多个组件定义实体名称、实体端口以及由设计实体300执行的功能的表示。给定模型中的每个实体都具有在每个实体的HDL描述中声明的唯一名称(未在图3A中显式地示出)。此外,每个实体通常都包含多个到实体外部的信号的信号互连(称为端口)。这些外部信号可以是整体设计的主要输入/输出(I/O)或连接到整体设计中的其他实体的信号。
通常,将端口分类为属于三种不同类型之一输入端口、输出端口和双向端口。设计实体300示为具有多个将信号传输到设计实体300中的输入端口303。输入端口303连接到输入信号301。此外,设计实体300包括多个将信号传输到设计实体300之外的输出端口306。输出端口306连接到一组输出信号304。双向端口305用于将信号传输到设计实体300中和传输到设计实体300之外。双向端口305则连接到一组双向信号309。实体(例如,设计实体300)无需包含所有三种类型的端口,并且在简化的情况下,不包含任何端口。为了实现实体端口到外部信号的连接,使用了称为“端口映射”的映射技术。端口映射(未在图3A中显式示出)包括实体端口名称与实体所连接的外部信号之间的规定对应。当建立模拟模型时,使用ECAD软件来根据端口映射规定将外部信号连接到实体的相应端口。
最终,设计实体300包含描述由设计实体300执行的一个或多个功能的主体部分308。在数字设计的情况下,除了其他实体的实例化以外,主体部分308还包含逻辑门、存储元件等的互连。通过实例化另一个实体中的实体,实现了整体设计的分级描述。例如,微处理器可以包含完全相同的功能单元的多个实例。因此,微处理器本身经常被建模为单个实体。在微处理器实体中,将呈现任何重复功能实体的多个实例化。
现在参考图3B,其中示出了可以在本发明的优选实施例中使用的示例性模拟模型329的图示。模拟模型329包括多个分级实体。为了视觉上的简单和清楚,并未显式示出在模拟模型329中互连实体的端口和信号。在任何模型中,一个且只有一个实体是所谓的“顶级实体”。顶级实体320是包括模拟模型329中的所有其他实体的实体。也就是说,顶级实体320直接或间接地实例化设计中的所有子实体。模拟模型329包括直接实例化FXU实体321的两个实例321a和321b以及FPU实体322的单个实例的顶级实体320。每个实例化都具有关联的描述,其包含实体名称和唯一实例化名称。对于顶级实体320,描述310被标记为“TOPTOP”。描述310包括实体名称312(标记为冒号之前的“TOP”),并且还包括实例化名称314(标记为冒号之后的“TOP”)。
如FXU实体321的实例化321a和321b所示,特定实体可能被多次实例化。实例化321a和321b是实例化名称分别为FXU0和FXU1的FXU实体321的不同实例化。顶级实体320处于模拟模型329层级中的最高级。实例化子实体的实体将在下文中被称为该子实体的“父辈(ancestor)”。顶级实体320因此是直接实例化FXU实体实例化321a和321b的父辈。在模拟模型层级的任何给定级别,所有实例化的实例化名称必须是唯一的。
除了FXU实体实例化321a和321b,顶级实体320直接实例化具有实体名称FPU和实例化名称FPU0的FPU实体322的单个实例。在实体描述中,当仅有所述特定实体的一个实例被置于模拟模型层级的给定级别时,实体名称匹配实例化名称是很常见的。但是,这并不是必须的,如实体322(实例化名称FPU0、实体名称FPU)所示。
在FXU实体321的实例化321a中,分别直接实例化了实体A 325和实体B 326的单个实例实体325a和326a。同样,同一FXU实体的实例化321b分别包含实体A 325和实体B 326的实例化325b和326b。通过类似的方式,实例化326a和实例化326b的每一个都分别直接将实体C 327的单个实例实例化为实体327a和327b。只要所有实例化的实体(不论单个实例化还是多个实例化)具有唯一的实体名称且在层级的任何给定级别的实例化名称彼此唯一,其他实体中的实体嵌套就可以继续到任意的复杂性级别。每个实体都创建自包含描述该实体所需的信息的一个或多个HDL文件。
与每个实体实例化关联的是所谓的“实例化标识符”。针对给定实例化的实例化标识符是包括顶级实体实例化名称之前的嵌入实体实例化名称的字符串。例如,FXU实体321的实例化321a中实体C 327的实例化327a的实例化标识符是“TOP.FXU0.B.C”。该标识符用于唯一地标识模拟模型中的每个实例化。
现在参考图3C,其中示出了可以在本发明的优选实施例中实现的模型建立过程的流程图。该过程始于一个或多个设计实体HDL源代码文件340以及可能的一个或多个设计实体中间格式文件345(下文中称为“原文件”345),其可从HDL编辑器的前一次运行中获得。HDL编辑器342处理HDL文件(多个)340,始于模拟模型的顶级实体并以递归方式遍历所有描述完整模拟模型的HDL或原文件(多个)。对于编辑过程期间的每个HDL文件340,HDL编辑器342检查原文件345以判定先前编辑的原文件是否可用及是否一致。如果这种文件可用且一致,则HDL编辑器342将不重新编辑该特定文件,而是引用现存的原文件。如果此类原文件都不可用或原文件不一致,则HDL编辑器342显式地对有问题的HDL文件340进行重新编辑并创建用于后续编辑的原文件344。此类过程将在下文中称为“增量编辑”并可以极大地加快创建可执行模拟的模型348的过程。一旦由HDL编辑器342创建,原文件344就可供用作后续编辑中的原文件345。
除了原文件344,HDL编辑器342还在计算机系统10的存储器44中创建两组数据结构,设计实体原数据结构341和设计实体实例数据结构343。设计实体原数据结构341和设计实体实例数据结构343用作可执行模拟的模型348的内容的存储器映像。数据结构341和343通过存储器44传送到将数据结构341和343处理成可执行模拟的模型348的模型建立工具346。
将在下文中假定每个实体由单个HDL文件描述。根据惯例或当前发明在其中实现的特定HDL,可以要求该限制。但是,在特定环境或对于特定的HDL,有可能通过使用多个HDL文件来描述实体。本领域的技术人员将明白和理解在允许实体由多个HDL文件来描述时实践本发明所需的扩展。此外,对于每个实体,将假定在实体名称与以下两者之间存在直接对应表示实体的HDL文件的名称和用于该实体的原文件的名称。
在以下说明中,后跟“.Vhd1”的实体名称将引用对应于给定实体的HDL源代码文件。例如,描述顶级实体320的HDL源代码文件将称为TOP.Vhd1。此标记惯例仅用作符号表示方面的方便,而不应被认为是将本发明的可应用性限于HDL而非VHDL。
返回图3B,可以看到每个实体可以直接或间接实例化一个或多个其他实体。例如,FXU实体直接实例化A实体325和B实体326。此外,B实体326直接地实例化C实体327。因此,FXU实体321直接或间接实例化A实体325、B实体326和C实体327。由另一个实体直接或间接实例化的那些实体将在下文中称为“子实体”。顶级实体320的子实体为FXU实体321、A实体325、B实体326和C实体327。可以看到每个实体都具有一组唯一的子实体且每次实例化实体时,将创建该实体的唯一实例及其子实体。在模拟模型329中,FXU实体321由顶级实体320实例化两次,FXUFXU0 321a和FXUFXU1 321b。FXU实体321的每次实例化都创建FXU、A、B和C实体的一组唯一的实例。
对于每个实体,可以定义“材料单”或BOM。BOM是具有实体自身和实体的子实体的日期与时间戳的HDL文件的列表。再次参考图3C,实体的BOM在实体编辑之后存储在原文件344中。因此,当HDL编辑器编辑HDL文件340中的特定HDL源代码文件时,将生成包括BOM的原文件344,所述BOM列出了组成实体及该实体的子实体(如果有)的HDL文件340。所述BOM还包含当编辑HDL文件时,在计算机系统10的磁盘/磁带33上出现的每个引用的HDL文件的日期和时间戳。
如果随后更改了组成实体或其子实体的任何HDL文件,则原文件344将被标记为不一致,并且HDL编辑器342将在后续的重新编辑中重新编辑HDL文件340,这将在下文中进一步详细说明。例如,返回图3B,由FXU实体321的BOM引用的HDL文件是FXU.Vhd1、A.Vhd1、B.Vhd1和C.Vhd1,每个都具有相应的日期和时间戳。由顶级实体320的BOM引用的文件是TOP.Vhd1、FXU.Vhd1、A.Vhd1、B.Vhd1、C.Vhd1和FPU.Vhd1,每个都具有相应的日期和时间戳。
返回图3C,HDL编辑器342在计算机系统10的主存储器44中创建模拟模型的结构的映像。该存储器映像包括以下部分“原”数据结构341和“实例”数据结构343。对于模型中的每个实体,原数据结构是这样的数据结构其包含与所述实体的端口、所述实体的主体内容,以及对由所述实体直接实例化的其他实体的引用列表有关的信息(在下文中,“原”一词将用于指上述的存储器内的数据结构,而“原文件”一词将用于描述一个或多个中间格式文件344)。因此,原文件344是由HDL编辑器342生成的存储器内原数据结构的盘上表示。
实例数据结构是这样的数据结构对于模型中的实体的每个实例,其包含所述实例的实例名称、实例所引用的实体的名称,以及将实体与外部信号互连所需的端口映射信息。在编辑过程中,每个实体将仅具有一个原数据结构,而在实体的多个实例化的情况下,每个实体可以具有一个或多个实例数据结构。
为了有效地以增量方式编辑模型,HDL编辑器342遵循递归的编辑方法,其中考虑模型的相继实体并从原文件345将其载入,如果此类文件可用并且与组成那些实体及其子实体的HDL源文件一致的话。对于不能从现有的原文件345加载的每个实体,HDL编辑器342递归地检查实体的子实体,加载可从一个或多个原文件345中找到的那些子实体并在需要时为与原文件345不一致的那些子实体创建原文件344。以下示出了HDL编辑器342的主控制环路的伪代码(伪代码右侧的行号并非伪代码的一部分,而只是为了符号表示的方便)。
process_HDL_file(file) 5 {10if(NOT proto_loaded(file)){ 15 if(exists_proto_file(file)AND check_bom(file)){ 20 load_proto(file); 25 }else{ 30 parse_HDL_file(file) 35 for(ail instances in file){40 process_HDL_file(instance); 45 } 50 create_proto(file); 55 write_proto_file(file); 60 }65} 70create_instance(file) 75 }80 当初始地调用编辑器342时,在计算机系统10的存储器44中不存在任何原数据结构341或实例数据结构343。调用主控制环路的例程process_HDL_file()(行5)并通过参数″File″传送顶级实体的名称。算法首先通过例程proto_loaded()(行15)判定当前实体的原数据结构是否存在于存储器44中。要指出的是,存储器中将永远不存在顶级实体的原数据结构,因为所述过程开始而不将任何原数据结构加载到存储器44中。如果存储器44中存在匹配的原数据结构,则在需要时通过例程create_instance()(行75)在存储器44中创建当前实体的实例数据结构和当前实体的子实体(如果有)。
但是,如果存储器44中不存在匹配的原数据结构,则控制转到行20,在行20处,例程exists_proto_file()检查原文件345以判定是否存在实体的原文件。当且仅当存在匹配的原文件时,才调用例程check_bom()以判定原文件345是否一致。为了判定原文件是否一致,将检查原文件的BOM。例程check_bom()检查BOM中列出的每个HDL源代码文件来判定HDL源代码文件的日期或时间戳是否改变或是否已经删除了HDL源代码文件。如果对于BOM中的任何文件出现任一情况,则原文件不一致且例程check_bom()出错。但是,如果check_bom()成功,则控制转到行25,在行25处,例程load_proto()将原文件以及任何子原文件加载到存储器44中,由此创建当前实体和所述当前实体的子实体(如果有)的原数据结构341。Process_HDL_file()的构建确保了一旦将原文件检验为一致,则所有其子原文件(如果有)也将一致。
如果原文件不存在或不一致,则控制转到行35,在行35处,例程parse_HDL_file()加载当前实体的HDL源代码文件。例程parse_HDL_file()(行35)检查HDL源代码文件的句法正确性并判定当前实体实例化了哪些子实体(如果有)。行40、45和50组成了其中递归调用例程process_HDL_file()以处理由当前实体调用的子实体的环路。此过程递归地重复,以深度优先的方式遍历当前实体的所有子实体,从而创建当前实体的所有子实体的原数据结构341和原数据结构344。一旦处理了子实体,控制就转到行55,在行55处,例程create_proto()在存储器44中为当前实体创建新的原数据结构。然后,控制转到行60,在行60处,例程write_proto_file()将新的原文件344(包括关联的BOM)写入盘33。最后,控制转到行75,在行75处,例程create_instance()在需要时创建当前实体和任何子实体的实例数据结构343。通过这种方式,process_HDL_file()(行5)递归地处理整个模拟模型,由此创建包括原数据结构341和实例数据结构343的模型的存储器内映像。
现在参考图3D,其中示出了表示已编辑的数据结构的方块图,所述数据结构可以在本发明的优选实施例中实现。存储器44包含原数据结构361,模拟模型329中引用的每个实体都对应一个数据结构。此外,模拟模型329中的实例化由实例数据结构362表示。实例数据结构362通过指示模拟模型329中实体的实例化的层级本质的指针来连接。图3C中模型建立工具346将存储器44的内容处理为存储器数据结构,以便生成可执行模拟的模型348。
为了实施模拟模型,本发明使用称为“设备实体”的实体,它与组成在本文中称为“设计实体”的实体形成对比。对于设计实体来说,设备实体由一个或多个HDL源代码文件描述并包括多个信号端口、主体部分和实体名称。在下文中,将假定设备实体由单个HDL文件描述。本领域的技术人员将明白和理解为由多个HDL文件描述的设备实体实现当前发明所需的扩展。每个设备实体都与在下文中称为“目标实体”的特定设计实体相关联。
现在参考图4A,其中示出了表示设备实体409的方块图。设备实体409包括多个与目标实体(未在图4A中示出)中的信号401相连的输入端口400。主体部分402包含检测目标实体中指定条件的发生并生成有关信号401的模拟模型“事件”所需的逻辑。至少可以生成四种不同类型的事件“计数”事件、“出错”事件、“结果”事件以及“打印”事件,在下文中会依次描述每个事件。主体部分402包含用于检测促成生成这些事件的条件的发生的内部逻辑。一组多位输出端口403、404和405通过外部信号406、407和408连接到外部设备逻辑420(在图4B中示出)。因此,输出端口403、404和405提供从主体部分402中的内部逻辑到外部设备逻辑420(其用于指示计数、出错和结果事件的发生)的连接。
出错事件是一系列指示模拟模型中纠正操作的故障的信号值。每个设备实体监视目标实体以发现任何预期数量的出错事件。将出错事件的每次发生分配到输出端口403上的特定信号位。当检测到出错条件时,主体部分402中的逻辑在信号403的指定位上生成有效的高脉冲。将信号403的此类激活定义为出错事件。此错误指示通过外部信号406传输到外部设备逻辑(在图4B中示为外部设备逻辑块420),后者标记了出错事件的发生。
计数事件是一系列指示模拟模型中事件的发生(为其维护计数是有利的)的信号值。计数事件用于监视模拟模型中特定序列的发生频率。每个设备实体可以监视目标实体以发现任何预期数量的计数事件。将每个计数事件分配到输出端口405上的特定信号位。逻辑块402包含检测预期计数事件的发生并在检测到计数事件时在信号405的指定位上生成有效高脉冲所需的逻辑。此计数指示通过外部信号408传输到设备逻辑,后者包含用于记录每个计数事件的发生次数的计数器。
第三种事件类型(即结果事件)是一系列指示特定操作环境的出现(能够再现是有利的)的信号值。当结果事件发生时,将加载外部设备逻辑块中的寄存器以指示事件在模拟运行中的何处发生,并设置标记以指示特定环境的发生。由此可以保存模拟运行的详细信息,以便重建由结果事件监视的特定环境。逻辑块402包含检测结果事件所需的逻辑。
每个设备实体可以检测任何预期数量的结果事件(每个事件都被分配到输出端口404上的特定信号位)。当检测到结果事件时,块402中的逻辑在信号404的指定位上生成有效高脉冲。此结果事件检测通过外部信号407传输到包含用于每个结果事件的寄存器和标记的外部设备逻辑。所述寄存器用于记录结果事件在模拟运行中的何处发生,而标志用于指示该发生。
第四种事件类型(即打印事件)是一系列指示模拟模型中事件的发生的信号值,在模拟运行的结果中呈现其是有利的。因此,打印事件用于呈现模拟模型中有关的信号值以供后续查看和分析。每个设备实体可以监视目标实体以找到任何预期数量的打印事件。不同于其他事件类型,未向打印事件分配设备实体的输出端口,例如上述输出端口403-405。实际上,由外部设备逻辑块420检测和记录打印事件,如下文进一步讨论的。
现在参考图4B,其中示出了根据本发明的教导实施的模拟模型329的方块图。如图4B所示,设备实体FXUCHK的实例410和实例411用于监视FXU实体的实例321a和321b。对于每个FXU实例化321a和321b,由本发明的机制分别自动生成FXUCHK实例化410和411。通过类似的方式,实例化设备实体FPUCHK 412以监视FPU实体322。
如图4B所示,实体FXUCHK监视FXU实体的每个实例321a和321b中的信号Q 372、信号R 376和信号S 374。信号Q 372是子实体A的实例325a和325b中的信号。同样地,信号S 374是位于子实体B内的子实体C中的信号。最后,信号R 376在FXU实体321中直接发生。虽然设备实体可以监视目标实体或目标实体的子实体中的任何信号,但是无法监视目标实体外部的信号。
每个设备实体通过出错、计数和结果信号连接到包含用于记录每个事件类型的发生的逻辑的设备逻辑块420。对于在模拟模型329中监视的计数事件,使用一组计数器421来计数每个计数事件的发生次数。通过类似发生,使用一组标志424来记录出错事件的发生。此外,将一组计数器422和标志423进行组合并将其用于分别记录结果事件发生的位置及其发生。在本发明的一个实施例中,使用计数器422和标志423来捕获和存储循环数以记录结果事件。最后,外部设备逻辑块420包含数据结构(例如,打印事件表(PET)430),如以下进一步描述的,所述数据结构由模拟器系统用于在模拟模型329的模拟期间生成和呈现选定的打印事件。
为了促进设备实体的实例化和连接,设备实体HDL源代码文件包括专门的注释部分,在下文中称为“设备实体描述”,其指示了目标实体、要监视的目标实体中的信号,以及指定要监视的事件类型的信息。
现在参考图4C,其中示出了描述图4B中示出的设备实体FXUCHK的示例性HDL文件440。HDL文件440使用VHDL硬件描述语言的句法。在VHDL语言中,以两个破折号(″--″)开始的行被编辑器识别为注释。本发明的方法和系统使用非常规形式的注释来指示有关设备实体的信息。图4C示出了本发明的一个实施例,其中注释包括初始的破折号后跟两个感叹号,以便将这些注释与设备HDL文件440中的常规注释区分开。本领域的技术人员将理解,图4C中用于提供非常规注释的示例性句法仅是许多可能格式中的一种格式。
在HDL文件440中,FXUCHK实体的I/O端口在实体声明450中声明。在实体声明450中,分别声明了三个输入端口,S_IN、Q_IN,和R_IN。输入端口S_IN、Q_IN和R_INN将分别如下所述连接到信号S 374、信号Q 372和信号R 376。还声明了输入端口CLOCK并将其连接到FXU实体中的信号CLOCK。此外,声明了两个输出端口fails(0到1)和counts(0到2)。在该实例中,FXUCHK实体没有生成任何结果事件,因此不声明任何结果输出端口。因此,这些输出端口提供两个出错事件和三个计数事件的出错和计数信号。输出端口的名称按惯例确定,以便提供将这些信号自动连接到设备逻辑块420的有效方法。
使用一组设备实体描述符451来提供有关设备实体的信息。如图4C所示,描述符注释451可以分类成若干不同的部分序言和实体名称声明452、输入端口映射453、一组出错消息声明454、一组计数器声明455、一组打印事件声明456,以及结尾457。
序言和实体名称452用于指示设备实体将监视的特定目标实体的名称。序言和实体名称声明452还用作设备实体描述已经开始的指示。具体地说,序言和实体名称声明452中的注释″--!!Begin″指示设备实体的描述已经开始。注释″--!!Design EntityFXU″标识了HDL文件440中是设计实体FXU的目标实体。此声明用于将设备实体绑定到目标实体。
输入端口映射453用作设备实体的输入端口与目标实体中要监视的信号之间的连接。注释以注释″--!!Inputs″开始并以注释″--!!End Inputs″结束。在这些注释之间,使用″--!!inst_ent_port_name=>trgt_ent_signal_name″形式的注释(设备实体的每个输入端口都具有一个注释),以指示设备实体端口与目标实体信号之间的连接。Inst_ent_port_name是要连接到目标实体信号的设备实体端口的名称。Trgt_ent_signal_name是要连接到设备实体端口的目标实体中的信号的名称。
在某些情况下,要监视的信号在目标实体的子实体中。对于信号S 374是这种情况,信号S 374嵌入是实体B 326和目标FXU实体321的子实体的实体C中。输入端口映射453包括信号S 374的标识字符串,其包括目标实体中每个都由句点(″.″)分隔的实体的实例名称。该标识字符串附加在信号名称之前。因此,信号S 374的输入端口映射453中的信号映射注释如下 --!!S_IN=>B.C.S; 该句法允许设备实体连接到目标实体或目标实体的子实体内的任何信号。在顶级目标设计实体上出现的信号没有任何附加在前的实体名称;并且因此具有以下信号映射注释 --!!R_IN=>R; 对于顶级目标实体上的信号,提供了特殊的连接方法。如果要连接到的信号具有与其在设备实体的端口映射中的对应信号相同的名称,则无需任何输入端口映射注释,并且如果不存在此类注释,将自动连接所述信号。换言之,如果输入端口映射注释具有如下形式 --!!signal=>signal; 其中信号是没有句点(″.″)的合法信号名称,则无需输入端口映射注释并且本发明的系统将自动完成连接。也可以提供以上给出形式的注释以显式地指示信号连接。此机制仅可用于顶级目标实体上的信号。
出错消息声明454以″--!!Fail Outputs;″形式的注释开始,并且以″--!!End Fail Outputs;″形式的注释结束。每个出错事件输出都与唯一的事件名称和出错消息相关联。此消息可以在检测到出错事件时由模拟运行时环境输出。使用唯一的出错事件名称来标识模型中的特定出错事件。每个出错事件信号可以由″--!!n:<eventname>″Failure message″;″形式注释声明,其中n是表示消息与之相关联的出错事件的整数,<eventname>是唯一的出错事件名称,并且″Failure message″是与特定出错事件关联的消息。必须为每个由设备实体监视的出错事件提供一个且仅提供一个出错消息声明注释。
计数器声明注释455以″--!!Count Outputs;″形式的注释开始,以″--!!End Count Outputs;″形式的注释结束。每个计数事件输出都与唯一的变量名称相关联。此名称与图4B的计数器逻辑421中的计数器相关联。变量名称提供了标识和引用与特定计数事件相关联的特定计数器的方法。因此,″--!!n:<varname>qualifying_signal[+/-];″形式的注释与每个计数器事件输出相关联。在此惯例中,n是表示设备模块中哪个计数器事件将与变量名称″Varname″相关联的整数,而qualifying_signal是目标设计实体中用于确定何时对计数事件脉冲进行采样(这将在下文中进一步说明)的信号的名称。参数″Qualifying_signal″后跟A+/-A以指定限定信号是高电平有效限定信号还是低电平有效限定信号。
打印事件声明456以形式为″--!!Print Events;″的序言注释开始,并且以形式为″-!!End Print Events;″的注释结束。每个打印事件都与将由模拟运行时环境(例如,显示22中、硬拷贝打印输出中,或日志文件中)呈现的唯一索引号和消息相关联,以响应模拟运行期间打印事件的发生。每个打印事件都以″--!!nvalid signal name,″Print message″,signal name;″的形式声明,其中n是打印消息要与之关联的打印事件的整数索引号,valid signal name标识了在断言时导致打印事件发生的有效信号,″Print message″是要与特定打印事件关联的消息,而signal name标识了在打印消息中报告其值的信号(如果有)。
如下文中参考图6B、7和8详细说明的,每个打印事件可以进一步可选地通过打印事件声明与打印事件名称相关联,以便促进将一个或多个打印事件分组成打印事件组。打印事件组的使用允许通过引用打印事件组(而不是引用每个组成的打印事件)来在模拟中“开启”或“关闭”多个打印事件。
如图4C中所述,打印消息可以包括格式化信息(例如,″%2h″),其可以有利地使用与C编程语言中公知的printf语句的句法类似或相同的句法。因此,当呈现打印事件时,百分号的每个实例(即,″%″)都由信号名称值替代,并且该值根据打印消息中指示的长度和编码(例如,二进制(b)、十进制(d)、十六进制(h)或八进制(o))进行格式化。例如,对于由索引0标识的打印事件,6位信号op_type的信号值将通过两个十六进制的字符呈现,以响应在关联的打印事件声明中的″2h″格式规定。如果在格式化信息(例如,″%h″)中没有给出字段宽度,则以表示指定编码中的信号值所需的最少字符数来完全显示信号值。
在默认情况下,信号值的格式为向右对齐,意味着格式化信息所指示的任何未使用位数(例如,2个十六进制位置的8位)通过将信号值的最左侧(高位)填满0来进行填充。另一方面,如果信号值的位数超过格式化信息所指示的位数,则呈现最右侧的位,并截去高位以实现向右对齐。但是,因为某些信号值在向左对齐的情况下更利于查看,所以通过例如包括″<″标志来优选地支持该格式。在向左对齐的情况下,如果信号值的位数小于格式化信息所指定的位数,则使用0填满信号值的右侧,并且如果信号的位数大于格式化信息所指定的位数,则截去低位。
结果消息和事件名称、出错消息和事件名称、模拟模型的计数器变量名称,以及打印事件消息和事件名称都包括在可执行模拟的模型中,并且在模型建立时在单独的文件中生成模型中所有事件的列表。通过这种方式,每个模拟模型都包括每个受监视事件的信息,并且包含每个事件的此信息的单独文件都可用。此外,如将在下文说明的,模型建立过程以这样的方式命名模型中的每个事件(计数、出错、结果和打印)确保每个事件具有带有某种有用属性的唯一名称。
最后,结尾注释457包括形式为″--!!End;″的单个注释,指示描述符注释451的结尾。在上述I/O声明后面的设备实体HDL文件440的剩余部分是实体主体部分458。在实体主体部分458中,常规的HDL句法用于定义检测输入端口信号上的各种事件并将这些事件传输到输出端口信号所需的内部设备逻辑。
除了位于设备实体的HDL源代码文件中的描述符注释451,目标实体HDL文件中还需要其他注释行。将形式为″--!!Instrumentationname.Vhd1″的注释添加到目标实体HDL源代码文件,其中name.Vhd1是设备实体HDL文件的名称。此注释提供了设备实体及其目标实体之间的联系。当多个设备实体与目标实体关联时,目标实体中可能有多个此类注释。这些HDL文件注释将在下文中称为“设备实体实例化”。
现在参考图4D,其中示出了根据本发明的教导的模型建立过程。在此模型建立过程中,设备加载工具464用于改变模拟模型的存储器内原和实例数据结构,由此将设备实体添加到模拟模型。设备加载工具464使用设备HDL文件461中的描述符注释451来创建模拟模型中的设备实体的实例数据结构。
图4D的模型建立过程始于设计实体HDL文件340(可能始于一个或多个设计实体原文件345(可从HDL编辑器462的先前运行获得))、设备实体HDL文件460(可能始于一个或多个设备实体原文件461(可从HDL编辑器462的先前运行获得))。HDL编辑器462在提供包括模拟模型的设计和设备实体的高效增量编辑的扩充算法process_HDL_file()之后处理设计实体HDL文件340和设备实体HDL文件460。HDL编辑器462从设计实体原文件345和设备实体原文件夹460加载原数据结构,如果此类原文件可用且一致的话。如果此类原文件不可用或不一致,则HDL编辑器462编辑设计实体HDL文件340和设备实体HDL文件460,以便生成设计实体原文件344和设备实体原文件468。(设计实体原文件344和设备实体原文件468可用于分别用作设计实体原文件345和设备实体原文件460以供HDL编辑器462的后续运行。)设备实体原文件468包含从包含在设备实体HDL文件461内的打印事件声明456得到的打印事件信息。如以下参考图6B所述,设备实体原文件468还可以包含从设计实体HDL文件340中的打印事件声明语句得到的打印事件信息。
此外,HDL编辑器462为模拟模型的设计实体创建存储器内设计原数据结构463和设计实例数据结构465。HDL编辑器462还为模拟模型的设备实体创建存储器内设备原数据结构466。对于设备实体原文件468,存储器内设备原数据结构466包含从包含在设备实体HDL文件461和/或设计实体HDL文件340中的打印事件声明456得到的打印事件信息。
为了使处理开销最小化,HDL编辑器462既不读取也不处理描述符注释451。但是,HDL编辑器462确实识别目标实体HDL文件中的设备实体实例化注释。因此,HDL编辑器462不能创建实例数据结构设备实体数据结构467。创建实例数据结构需要包含在描述符注释451中的未由HDL编辑器462处理的互连信息。但是,HDL编辑器462确实创建设备原数据结构466。
存储器内设计原数据结构463、设计实例数据结构465和设备实体原数据结构466由设备加载工具464处理。设备加载工具464检查设计实体原数据结构463和设计实体实例数据结构465以确定是目标实体的那些设计实体。该检查通过使用先前说明的特定注释格式来完成。
从设计实体原文件345加载的所有目标实体包含任何关联的设备实体的实例化。因此,设备加载工具464只是为任何此类设备实体创建实例数据结构467,并将未改变的设计原数据结构463传送到实施的设计原数据结构463a,并将设计实例数据结构465传送到实施的设计实例数据结构465a。
但是,如果从设计实体HDL文件340而非设计实体原文件345加载目标实体,则设备加载工具464必须更改其设计原数据结构463及其设计实例数据结构465以实例化关联的设备实体。由此生成实施的设计原数据结构463a和实施的设计实例数据结构465a。此外,设备加载工具464为每个与当前设计实体关联的设备实体创建设备实例数据结构467。
将由设备加载工具464更改的设计实体原数据结构463作为设计实体原文件344保存到计算机系统10的盘33。由模拟模型的后续编辑直接加载可以包括对设备实体的引用的设计实体原文件344,由此节约设备加载工具464对后续重新编辑的处理,除非对设计实体或关联的设备实体做出更改。
为了使HDL编辑器462判定是否对目标设计实体或目标设计实体的关联设备实体做出了更改,将扩展目标设计实体的BOM以包括组成设备实体的HDL文件。通过这种方式,HDL编辑器462可以通过检查给定设计实体的BOM来判定是对设计实体以及设计实体的关联设备实体进行重新编辑,还是从原文件345和461加载这些结构。
最后,设备加载工具464为设备逻辑块420创建唯一的原和实例数据结构并将来自每个设备实体实例化的出错、结果和计数事件信号连接到设备逻辑块420。在设备逻辑块420的原和实例数据结构中,设备加载工具464根据包含在存储器内设备实体原数据结构466中的打印事件信息来创建打印事件表430。模型建立工具466处理存储器内原和实例数据结构463a、465a、467、466以生成实施的可执行模拟的模型480。
在HDL编辑器462中,扩充算法process_HDL_file()以允许对设计和设备实体的增量编辑。以下示出了HDL编辑器462的主控制环路的伪代码实现 process_HDL_file2(file,design_flag) 5 { 10 if(NOT proto_loaded(file)){ 15 if(exists_proto_file(file)AND check_bom(file)){20 load_proto(file); 25 }else{ 30 parse_HDL_file(file) 35 for(all instances in file){40 process_HDL_file2(instance,design_flag); 45 } 50 if(design_flag=TRUE){ 55 for(all instrumentation instances in file){ 60 process_HDL_file2(instance,FALSE) 65 } 70 } 75 create_proto(file); 80 write_proto_file(file); 90 }95 } 100 if(design_flag=TRUE){ 105 create_instance(file);110 }115 } 120 算法process_HDL_file2()是对HDL编辑器342的process_HDL_file()的扩充,以便支持创建实施的模拟模型。使用通过参数file传递的顶级设计实体的名称以及通过参数design_flag(design_flag对于设计实体为TRUE,对于设备实体为FALSE)传递的指示正在处理的实体是设计实体还是设备实体的标志来调用所述算法。算法process_HDL_file2()(行5)首先借助例程proto_loaded()(行15)检查当前实体的原文件是否已经存在于存储器44中。如果是,则处理前进到行105。否则,控制前进到行20和25,在此检查计算机系统10的盘33以判定实体及其子实体(包括设备实体,如果有)的原文件是否存在且一致。如果是,则例程load_proto()(行25)从盘10加载相应的原文件来根据需要在存储器44中为包括设备实体的当前实体和当前实体的子实体创建原数据结构。
如果原文件不可用或不一致,则控制前进到行35,在此解析当前实体HDL文件。对于在当前实体中实例化的任何实体,行40到55递归地调用process_HDL_file2()(行5),以便处理当前实体的这些子实体。然后,控制前进到行55,在此检查参数design_flag以判定正在处理的当前实体是设计实体还是设备实体。如果当前实体是设备实体,则控制前进到行80。否则,当前实体是设计实体,并且行60到70递归地调用process_HDL_file2()(行5)以处理借助设备实例化注释而实例化的任何设备实体。应当指出,算法process_HDL_file2()(行5)不允许设备实体监视设备实体。将忽略设备实体中的任何设备实体实例化注释。然后,控制前进到行80,在此,根据需要在存储器44中为当前实体以及任何设备实体创建原数据结构。然后,控制前进到行90,在此根据需要将新创建的原数据结构写入计算机系统10的盘33。
最后,控制前进到行105和110,在此,如果当前实体为设计实体,则根据需要为当前实体和当前实体的子实体创建实例数据结构。如果当前实体是设备实体,则不调用例程create_instance()(行110)。使用设备加载工具464来为设备实体创建存储器内实例数据结构。
对本领域的技术人员将显而易见的是,HDL编辑器462提供了对设计和设备实体的高效增量编辑。还应指出,以上说明仅是用于实现设备实体的增量编辑的许多可能方法之一。具体地说,虽然还存在许多其他选择,但是设备加载工具464的许多功能(如果不是全部)都可以合并到HDL编辑器462中。
现在参考图4E,其中示出了在具有设备实体FXUCHK和FPUCHK的模拟模型329编辑完成时的存储器44的图示。存储器44包含原数据结构481,模拟模型329中引用的每个设计和设备实体对应一个数据结构。此外,模拟模型329中的设计和设备实例由实例数据结构482表示。实例数据结构借助指示模拟模型329中的设计和设备实体的实例化的层级特性的指针来连接。
本发明的优选实施例使用模拟模型中的事件命名机制,其防止不同设备实体之间的名称冲突、允许任意重新使用大小任意增加的模型中的模型组件,并且允许通过分级或非分级的方式处理指定的事件。
当事件的所有实例被看作整体而不考虑特定实例时,事件被看作是“非分级的”。同样,当针对每个实例考虑事件时,它被看作是“分级的”。当考虑计数事件时,例如,跟踪聚合中发生的特定计数事件的次数,而不考虑模拟模型中的每个特定实例内发生的计数事件的确切次数通常是方便的。
在构建时会向每个类型的事件(计数、出错、结果、打印等)赋予单独的事件名称空间。因此,每个事件类是独立的组,防止了事件类型之间命名冲突。将本发明的数据结构独立地应用到每个不同的事件类型以确保每个事件类中的正确性。
在图5A、5B、5C和5D中示出的实施例中,根据计数事件说明了本发明。本领域中的技术人员将明白和理解将同样的技术应用到其他事件类(例如,出错、结果或打印事件)所需的扩展。
参考图5A,其中示出了包含多个设计和设备实体的模拟模型1000的方块图。如图5A中所示,模拟模型1000包括设计实体X的两个实例,其中实例名称分别为X1和X2。
在每个设计实体实例X1和X2中实例化了设备实体B3的实例,即1012a和1012b。设计实体实例X1和X2还分别包括设计实体Z的实例1014a和1014b,设计实体Z进一步包含设备实体B1的实例1016a和1016b以及设备实体B2的实例1018a和1018b。
最后,模拟模型1000包括设计实体Y的实例,其实例名称为Y,其中包含设备实体B41022的实例。设计实体实例Y包含设计实体Z的实例1024,设计实体Z分别具有设备实体B1和B2的其他实例1016c和1018c。
在下文中,将在示例性模型1000的上下文中考虑用于唯一地命名事件的本发明的方法。将在以下说明中假定每个设备实体(B1、B2、B3和B4)都声明了事件名称为″Count1″的单个计数事件。
根据本发明,用户必须唯一地命名特定设备实体中的每种类型的事件(计数、出错、结果、打印等),即,用户不能使用同一事件名称来声明同一设备实体中的同一类型的任何两个事件。此类约束与本发明声称的目标并不冲突,因为给定的设备实体通常由特定人员在特定时刻创建,而在这种受限环境中维护唯一名称对用户来说并不是沉重的负担。但是,在此公开的数据结构确实防止了不同设备实体中的事件之间的所有名称冲突,并允许通过分级和/或非分级的方式来处理事件。
如前文所述,HDL命名惯例必须唯一地标识给定设计中的所有实体。此约束是HDL固有的并应用于设计实体以及设备实体。根据常规的VHDL实体命名结构,两个设计实体共享同一实体名称entity_name在技术上是可行的。但是,这种名称完全相同的实体必须封装在可以从其构建有效VHDL模型的VHDL库中。在这种情况下,在本文中使用的entity_name等同于由句点(″.″)连接到实体声明中声明的实体名称的VHDL库名称。
在实体名称前附加不同的VHDL库名称可以消除共享同一实体名称的实体的歧义。大多数HDL包括一种机制,例如,这种用于唯一地命名每个设计实体的机制。对设计实体的命名必须没有歧义,以便判定在模拟模型内的任何给定实例中调用了哪个特定实体。本发明使用固有HDL的主要命名机制来为整个给定模型中的设计实体分配唯一实体名称,并利用实体名称的唯一性及每个实例的实例化标识符的唯一性来为模拟模型中的每个事件创建“扩展的事件标识符”。
参考图5B,其中示出了根据本发明的一个实施例的扩展的事件标识符数据结构(在本文中可替代地称为“事件列表”)中的字段的表示。扩展的事件标识符以实例化标识符字段1030开始。如前所述,该字段包括实例标识符,其从顶级实体到模拟模型中由句点(″.″)分隔的给定实例的直接父辈。该字符串对于模型中的事件的每个实例都是唯一的。扩展的事件标识符还包括设备实体字段1032、设计实体字段1034和事件名称字段1036。
设备实体字段1032包含生成模拟事件的设备实体的名称(或分配到嵌入的设备实体的名称)。设计实体字段1034包含其中发生事件的设计实体的实体名称。事件名称字段1036是给予设备实体的设备实体描述注释中的事件的名称或分配给嵌入的设备实体中的事件的事件名称。这四个名称空间字段包括模拟模型中的每个事件的唯一标识符,其允许在没有名称冲突的风险及不在分级或非分级意义上考虑事件的情况下在其他模型中重新使用组件。
现在参考图5C,其中示出了模型1000的扩展事件标识符的列表。声明了模拟模型1000中的事件标识符1040、1041、1042、1043、1044、1045、1046、1047和1048以指定具有事件名称″Count1″的计数事件。将在这些扩展事件标识符的上下文中说明本发明的扩展事件标识过程。
设计实体名称字段1034中名称的唯一性是事件之间的主要区分因素。通过将设计实体名称包括在扩展的事件标识符中,每个设计实体实际上都被给予与该设计实体关联的事件的唯一名称空间,即,给定设计实体中的事件不能和与其他设计实体关联的事件具有名称冲突。
但是,在由结合在单个设计实体中的不同设备实体定义的事件之间仍可能具有名称冲突。例如,如果事件1041和1042完全由设计实体名称标识,则具有名称冲突。两个事件都是设计实体Z中事件名称为″Count1″的事件,并且如果这样标记,则是不可区分的。为了消除事件1041和1042之间的命名冲突,本发明使用设备实体字段1032。通过引用设计实体和设备实体名称(两者对于自身和彼此来说都是唯一的),为每个与任何给定设计实体关联的设备实体创建了唯一的事件名称空间。例如,事件标识符1041和1042将会冲突(同时命名为Z.Count1),除非各自的设备实体名称被包括在扩展的事件标识符中以生成这些事件的名称B1.Z.Count1和B2.Z.Count2。
应当指出的是,可以通过单独使用设备实体名称字段1032来唯一地命名每个事件。由于设备实体名称的唯一性,仅由设备实体名称命名的事件名称和事件名称字段将需要是唯一的。
但是,这种命名机制不足以将事件与给定的设计实体关联。实际上,希望将事件与其中发生事件的设计实体相关联,而不是将事件与用于跟踪它们的潜在大量的设备实体相关联。此外,引用事件名称中的相应设计实体允许集中引用所有与给定设计实体关联的事件,而无需确定与该给定设计实体相关联的所有设备实体的名称。本发明的数据结构在命名事件中同时使用设备实体和设计实体名称以便于引用,其代价为事件名称的适度唯一性冗余。
在本发明的备选实施例中,设备实体名称未包括在扩展的事件标识符中。参考图5D,示出了这种备选的扩展事件标识数据结构。如图5D所示,事件通过实例化标识符字段1030、设计实体名称字段1034和事件名称字段1036来命名。
这种数据结构提供了设计实体之间而非设计实体内的名称冲突保护。也就是说,用户必须确保与给定设计实体关联的事件的事件名称不冲突。如果在这方面出现用户错误,则可以使用模型建立工具来在模型编辑期间检测事件名称冲突情况。图5D中示出的备选数据结构提供了对事件的更简单的命名和引用,其代价是要求用户防止与给定设计实体关联的事件的名称冲突。
返回图5B,给定事件的设备实体字段1032、设计实体名称字段1034和事件名称字段1036的组合提供了任何给定事件的唯一标识符,而不考虑事件的多个实例化。为了唯一地区分事件的多个实例化,将实例化标识符字段1030包括在扩展的事件标识符中。实例化标识符字段1030在创建时提供了任何模拟模型中的实体的任何实例的唯一字符串。
当在非分级的意义上评估事件的发生时,在搜索匹配事件的同时将忽略实例化标识符字段1030。如图5C所示,例如,对由设备实体B1检测的设计实体Z中″Count1″事件的发生次数的非分级查询使用了以下计数事件名称列表 X1.Z B1ZCOUNT1 X2.Z B1ZCOUNT1 Y.Z B1ZCOUNT1. 将这些计数事件加在一起以形成模拟模型中发生的特定事件的总次数的聚合次数。
分级查询包括匹配分级字段的特定准则,以将发现的计数器(多个)限于所请求事件的特定实例。例如,用于在设计实体Z的X1.Z实例中获得设备实体B1的count1事件的查询使用以下计数事件名称 X1.Z B1ZCOUNT1. 其表示由设计实体实例X1.Z中的设备实体B1在特定模拟间隔中计数的count1事件的次数。
通过为实例化标识符字段1030提供匹配的模型分级准则,可以考虑模型中与其特定实例(多个)相关的事件,即,分级的查询。非分级查询只是忽略分级字段并返回模型中所请求事件的所有实例。
上述系统和方法提供了模拟模型的实际设备并允许通过嵌入的设备实体高效实现设备逻辑。但是,如上文所述,有必要将嵌入的设备实体限于任务特定的实现。如参考图6A和6B所述,本发明还以自由的方式提供了设备逻辑的更灵活的实现。
通常有必要定制设备逻辑以处理独特的问题和环境。根据在此参考图6A和6B公开的技术设计的具有特定但未预先定义的性质的设备逻辑在本文中称为“随机设备逻辑”。包括通用逻辑原函数(布尔操作符、存储元素等)的数据构建以及这些原函数的互连方法用于实现这种随机设备逻辑。
为了根据此处的描述来实施模拟模型,HDL(例如,VHDL或Verilog)被用作从其生成设备逻辑的平台。设计实体源代码文件中的相应设备实体描述符注释将结果设备实体连接到模拟模型中的指定目标设计实体。
除了设计实体源代码文件中的实体描述符注释,上述实施技术要求其中描述了设备实体的单独HDL文件。如参考图6A和6B所述,本发明提供了用于在模拟模型中实施设计实体的方法、系统和数据结构,同时避免用于创建单独设备实体HDL文件所需的设计过程开销。
根据本发明的优选实施例,根据个性化和可定制的设备描述符注释将随机设备逻辑直接部署到目标设计实体中。将这种设备描述符注释编码到目标设计实体HDL源代码文件中并提供用于描述随机设备逻辑、事件以及已创建设备逻辑与目标设计实体之间的互连的方法。通过与用于嵌入的设备实体的技术类似的方式将随机设备逻辑插入模拟模型,以生成设备实体而无需创建显式的HDL设备实体文件。
参考图6A,图6A示出了其中根据本发明的优选实施例实现随机设备逻辑的典型目标设计实体1200。在目标设计实体1200中实例化的是设计实体1201。如图6A进一步示出的,在设计实体1201中实例化了设备实体1202。根据前文所述的原理来设计设备实体1202,以生成事件名称为″Count1″的计数事件1203。目标设计实体1200还包括通过使用随机设备逻辑生成的设备实体1208。如图6A中示出的,设备实体1208接收信号P、A、B、C以及计数事件1203作为输入。
通过目标设计实体1200的源代码文件中的一组非常规的注释行来构建设备实体1208。可以在HDL源代码文件的逻辑描述部分中的任何点处结合这些注释。除了任何用于实例化设计实体1200中的嵌入设备实体的注释之外,HDL编辑器462(图4B)还识别非常规的注释。在后编辑/建模阶段期间,设备加载工具464通过与用于嵌入设备实体的方式类似的方式来处理这些注释以生成设备实体1208。
可以使用各种可能的句法来表达在目标设计实体的源代码文件中生成随机设备逻辑所需的非常规HDL注释。如图6B中所示,这些注释中的许多句法都使用与VHDL语言的并存子集类似的句法,且添加了提供设备实体及其目标设计实体之间的连接方法的句法和语义增强。此外,提供了较小的句法和语义增强以声明事件和中间信号。
现在参考图6B,其中示出了描述设计实体1200的示例性HDL源代码文件。在HDL源代码文件1220中,实体实例化1221生成设计实体1201,分配语句1222用于生成信号A、B和C。HDL源代码文件1220中的一组非常规注释1223用于生成设备实体1208。
针对计数、出错和结果事件的注释1223被表达为如下形式的左侧(l.h.s.)/右侧(r.h.s.)分配语句 {l.h.s.}<={r.h.s.}; 其中在此称为lhs的{l.h.s.}是分配语句目标,而在此称为rhs的{r.h.s.}是指示要分配给语句lhs的逻辑值的表达。在优选实施例中,同样构建了打印事件的注释。但是,在该实施例中,指定打印事件的注释仅包括lhs,而不包括分配操作符(即,<=)或rhs。若干规则描述了设备注释中任何合法语句内的lhs和rhs的可能表达。
如在本发明的设备数据结构中使用的,lhs语句可以是事件声明,也可以是在设备实体中实例化的信号的名称。事件声明是生成新事件的方括号中的表达式(″[A,A]″)。在注释1223中,语句1230从事件名称为″Countname()″的设备实体1208(图6A)生成计数事件1240。同样,语句1238声明事件名称为″Prevent1″的打印事件。
在lhs事件声明中,第一字段指示事件类型(计数、出错、结果、打印等)且其后跟随声明事件必需的其他字段。如行1230、1234、1236和1238中所示,此类事件声明字段一般遵循与图4C中示出的事件声明字段相同的格式。因此,打印事件声明(例如,语句1238)具有以下的一般格式 --!![print;eventname,valid signal name,“print message”,signal name]; 其中print是将语句标识为打印事件声明的关键字,eventname是由语句声明的打印事件的名称,valid signal name标识了在断言时导致打印事件发生的有效信号,″print message″是与特定打印事件关联的消息,并且signal name标识了在打印消息中报告其值的信号(如果有)。将理解的是,在本发明的某些实施例中,可以扩展signal name以形成包含在打印消息中报告的多个信号名称的逗号分隔列表的字段。同样,可以扩展validsignal name字段以支持按照可执行模拟的模型480中多个信号的逻辑组合(例如,valid1 AND valid2)来定义打印事件的有效信号的表达式。由于本领域的技术人员将容易地理解对所述实施例的支持带有表达式的有效信号名称的定义所需的扩展,所以未在此进一步说明此类扩展。
注释1223还包括具有在设备实体1208中声明信号Q的lhs的行1232。为了防止歧义,任何以这种方式声明的信号都不能具有与在顶级目标设计实体1200上存在的任何信号的名称对应的名称。在处理期间通过设备加载工具464(图4D)检验对该要求的遵守。由lhs表达式声明的信号可以结合在rhs表达式中,如行1232和1234所示。
Rhs包括组合各种信号的逻辑连接性表达式和/或函数。这些连接性表达式中的信号可以源于多个包括以下信号的可能的源在设备注释中的语句的lhs上声明的信号;在目标设计实体中的信号;或指定目标设计实体中的其他事件的信号。
在语句的rhs中的信号值描述中的缺少句点(″.″)或方括号(″[″,″]″)字符将对象信号指定为对应于目标设计实体的顶级分级中的信号或对应于设备语言中语句的lhs上声明的信号。由管理在设备注释中的语句的lhs上创建信号的规则以互斥的方式命名信号,由此防止在确定给定信号源时的任何歧义。
也可以将rhs连接性表达式中的信号(对于打印事件则是lhs中的信号)指定为位于在目标设计实体中实例化的实体之内。在这种情况下,将包括所需信号的分级中实体(多个)的实例名称以层级顺序置于信号名称之前,并以句点(″.″)分隔。例如,语句1230中的信号(″Y.P″)表示设计实体1201中的信号1204。因此,在目标设计层级的任何级别处的信号可由设备语言注释生成的设备逻辑来访问。
设备注释表达式中的信号还可以指定目标实体中的其他事件。在前文中针对分级事件说明的事件标识符用于表示此类“事件”信号。例如,语句1232执行设备事件1203和信号A的逻辑‘与’。事件标识符″Y.[B1.count.Count1]″将设备实体1208和设备事件1203相连。该符号允许直接访问在目标设计实体1200中的设计层级的任何级别处的设备事件。
如图6B中进一步示出的,语句1232在设备实体1208中生成中间信号Q。这是声明新的中间信号的设备注释语句的实例。可以在其他语句中使用这些信号以构建具有任何期望深度或复杂度的随机设备逻辑。
语句1234使用中间信号Q以及信号1206来生成出错事件1241。出错事件声明的句法包括表示事件类型的字段(″Fail″)、给出出错事件的事件名称的字段(″Failname0″)以及表示与出错关联的消息的结束字段。最后,语句1236生成结果事件1242。
一般地说,本发明的设备数据结构中的任何语句的rhs表达式可以通过使用这些句法机制来访问任何信号或目标设计实体中的设备事件信号。可以组合这些信号以形成新的事件或中间信号,所述新的事件或中间信号自身可以进一步组合以形成具有任何期望深度或复杂度的设备逻辑。
可以将设备注释置于目标实体源代码文件的逻辑描述部分中的任何位置。文件中的所有设备注释都可以视为一个整体并在目标设计实体中生成单个设备实体。
如以上简短地说明的,打印事件的命名有助于将设计人员选择的打印事件聚合为可以在模拟运行期间作为组选择性地“关闭”和“打开”的各种打印事件组。图7示出了根据本发明的使用打印事件和打印事件组实施的简化模拟模型的方块图。在示例性模拟模型中,名为TOP:TOP的顶级设计实体实例700实例化FXU设计实体的两个实例702a、702b,它们分别命名为FXU:FXU_inst1和FXU:FXU_inst2。FXU设计实体的每个实例702又包括名为a:a的设计实体实例704,且包含名为b:b的设计实体实例706。
如在图7中进一步示出的,顶级设计实体实例700进一步实例化两个名为print1和print2的打印事件。可以例如通过将如下语句包括在描述顶级设计实体700的HDL文件中来实例化这些打印事件 --!![print;print1;top_valid;“Signal X is%h”,X(0 to 2)]; --!![print;print2;req_valid;“Request activated”]; 应当指出,打印事件print2的声明不包括signal name,仅包括validsignal name。因此,当断言信号req_valid时将呈现打印事件print2。
在FXU设计实体的两个实例702a、702b的每一个中实例化了两个其他打印事件pevent1和pevent2。如果从描述FXU设计实体的HDL文件实例化,则可以使用以下语句来声明这些打印事件 --!![print;pevent1;valid1;“Op type is%2h”,op_type(0 to 5)]; --!![print;pevent2;a.b.valid2;“Signal xyz is %2h”,a.b.xyz(0 to 5)]; 如上所述,可以在顶级设计实体700的HDL文件中使用以下语句来备选地声明具有等同功能的打印事件 --!![print;pcvcnt1_FXU1;FXU_inst1.valid1; “Op type is%2h”,FXU_inst1.op_type(0 to 5)]; --!![print;pevent1_FXU2;FXU_inst2.valid1; “Op type is%2h”,FXU_inst2.op_type(0 to 5)]; --!![print;pevent2_FXU1;FXU_inst1.a.b.valid2; “Signal xyz is %2h”,FXU_inst1.a.b.xyz(0 to 5)]; --!![print;pevent2_FXU2;FXU_inst2.a.b.valid2; “Signal xyz is%2h”,FXU_inst2.a.b.xyz(0 to 5)]; 顶级设计实体700进一步实例化了两个打印事件组,即,print_group1(其包括打印事件print1和print2)以及print_group2(其包括打印事件print1、FXU_inst1.pevent1、FXU_inst1.pevent2、FXU_inst2.pevent1和FXU_inst2.pevent2。可以通过将以下语句包括在描述顶级设计实体700的HDL文件中来实例化这些打印事件组 --!![print_group;print_group1]<={print1, print2}; --!![print_group;print_group2]<={print1, FXU_inst1.pevent1, FXU_inst1.pevent2 FXU_inst2.pevent1, FXU_inst2.pevent2}; 因此,打印事件组的声明一般采取以下形式 [lhs]<={rhs}; 其中lhs以关键字point_group开始以表示打印事件组的声明并在此后包括打印事件组的名称,rhs是属于该打印事件组的成员打印事件或打印事件组的逗号分隔的列表。
在本发明的优选实施例中,打印事件组的声明可以在rhs中使用通配符和括号句法以指定成员打印事件或打印事件组。例如,可以使用以下任一语句通过通配符来简化打印事件组print_group2的声明 --!![print_group;print_group2]<={print1, FXU_inst1.*, FXU_inst2.*}; 或 --!![print_group;print_group2]<={print1, FXU_iust1.pevent*, FXU_inst2.pevent* }; 其中星号(即,″*″)是表示正则表达式的通配符。同样,通配符可以简化打印事件组print_group1的声明,如以下语句中所示 --!![print_group;print_group1] ={print }; 其中问号(即,″?″)指示单字符通配符。
还可以使用带括号的句法来简化属于打印事件组的打印事件和/或打印事件组的列举。在带括号的句法中,给定范围中特定设计实体的所有实例中的打印事件或打印事件组的所有实例可以使用包括在括号中的单个标识符来列举。例如,如果设计人员想要包括图7中示出的print group2中的pevent1的两个实例以及pevent2的两个实例,则可以在顶级设计实体实例700的HDL文件中使用以下打印事件组声明语句 --!![print_group,print_group2]<={print1, [FXU].pevent*}; 其中带括号的项是其中发生有关的打印事件或打印事件组的设计实体的名称。在使用带括号的句法的语句中,暗示了表达式的默认范围是其中实例化打印事件组的设计实体(在此情况下是顶级设计实体实例700)的范围。如将理解的,可以通过显式地列举设计层级的选定级别来进一步缩小使用带括号的句法指定的标识符的范围。例如,表达式″FXU_inst1.[a].b″仅指FXU_inst1 702a中的打印事件或打印事件组的实例化,但不包括FXU_inst2702b中的打印事件或打印事件组的实例化。
应当理解,在打印事件组声明语句中指定的正则表达式优选地不支持递归引用。因此,在顶级设计实体实例700中实例化的名为print_group3并具有以下打印事件声明语句 --!![print_group,print_group3]<={*}; 的其他打印事件组将包括在其范围内(而非print_group3)声明的所有打印事件组(即,print_group1和print_group2)以及打印事件(即,FXU_inst1.pevent1、FXU_inst1.pevent2、FXU_inst2.pevent1和FXU_inst2.pevent2)。HDL编辑器462还进一步防止打印组之间的自引用循环,其中第一打印事件组包括其中包含该第一打印事件组的第二打印事件组。虽然优选地不允许递归引用和自引用循环,但是允许将特定打印事件或打印事件组包括在多个打印事件组中。
现在参考图8,其中示出了对应于图7的模拟模型的示例性打印事件表430的方块图。如上所述,打印事件表430由设备加载工具464在图4D中示出的过程期间在模拟执行模型480的设备逻辑块420中创建。
如图所示,打印事件表430包括一个或多个表项800,每个都对应于模拟模型中声明的特定打印事件或打印事件组。打印事件表430的每个表项800都包括若干字段,其中包括指示是否为特定模拟运行启用关联的打印事件或打印事件组的启用(EN)字段802、指示表项800是用于打印事件(E)还是打印事件组(G)的组/事件字段804、标识其中实例化打印事件或打印事件组的设计实体实例的实例字段806(值0指示顶级设计实体实例700)、指示打印事件或打印事件组的名称的名称字段808、包含要呈现的打印事件的消息以响应打印事件的发生的消息字段810,以及包含一个或多个指针的变量长度指针字段812。对于打印事件,指针字段812中的第一指针标识了打印事件的有效信号,而第二以及任何后续指针(如果有)标识了将通过打印消息报告其值的一个或多个信号。对于打印事件组,指针字段812中的指针只是指向作为打印事件组的成员的打印事件。
现在参考图9,其中示出了根据本发明实施的可执行模拟的模型和关联的输入文件的运行时处理的过程流程图。如图所示,在模拟处理期间,将包括打印事件表430的实施的可执行模拟的模型480传送到模拟系统900,模拟系统900在示出的实施例中包括模拟器902和管理模拟器902的运行的控制例程(在本文中称为运行时执行程序(RTX)904)。模拟系统900还接收测试用例906,其指定了要应用到可执行模拟的模型480的值,并且接收至少一个正则表达式(regex)输入文件908,其指示要在模拟运行期间启用可执行模拟的模型480中声明的哪些打印事件或打印事件组。
在优选实施例中,默认禁用所有打印事件和打印事件组。为了启用选定的打印事件和打印事件组,设计和模拟人员提供在模拟运行中标识有关的打印事件和打印事件组的一个或多个正则表达式输入文件908。在优选实施例中,由一对以下形式的正则表达式来标识有关的打印事件和打印事件组 design entity instance name,eventname 其中eventname是标识有关的一个或多个打印事件或打印事件组的正则表达式,design entity instance name是标识其中实例化有关的打印事件或打印事件组的一个或多个设计实体实例的正则表达式。正则表达式输入文件(多个)908中的正则表达式对可以进一步如上所述地使用通配符和带括号的句法。
响应于接收到正则表达式输入文件(多个)908,RTX 904启用打印事件表430中已标识的打印事件和打印事件组,如下文中进一步说明的。接下来,在测试用例906的模拟处理期间,模拟系统900例如使用以下格式的语句在日志文件910中呈现有关的打印事件 [design entity instance name,eventname],message 其中message是为打印事件表430中的打印事件定义的消息。应当指出的是,对于包括在正则表达式输入文件(多个)908中的每个正则表达式对,优选地在日志文件910中包括一组单独的一个或多个语句,即使此操作导致多次呈现特定的打印事件。因此,如果为图7的示例性可执行模拟的模型同时启用了print_group1和print_group2,则优选地将打印事件print1在日志文件910中呈现两次,以满足可执行模拟的模型上由每个打印事件组表示的不同方面。
在模拟期间或在其之后,可以呈现日志文件910的内容以由软件(例如,日志查看器912)在例如显示器22中查看。当然,如果需要,日志文件910也可以通过硬拷贝的方式打印,以协助查看和分析模拟结果。此外,可以使用常规的文本处理或过滤软件来处理日志文件910以允许设计人员查看仅与选定打印事件或打印事件组有关的信息。
现在参考图10,其中示出了根据本发明的示例性软件模拟环境。如图所示,在模拟运行期间,可执行模拟的模型480、将测试用例906应用到可执行模拟的模型480的模拟器902以及控制模拟器902的运行的关联RTX904位于数据处理系统10的主存储器44中。RTX 904包括初始化代码500(其在模拟运行期间对模拟器902和可执行模拟的模型480进行初始化以便正确运行)和处理代码502(其引导模拟器902使用测试用例906执行可执行模拟的模型480)。
如图10所示,RTX 904的初始化代码500包括发送到模拟器902中的API函数WRITE TABLE 504的应用程序接口(API)调用(例如,INIT PRINTEVENTS),以便在模拟运行之前启用可执行模拟的模型480的打印事件表430中的打印事件和打印事件组。在下文中参考图11更详细地说明了由API函数WRITE TABLE 504执行的处理。还如图10所示,RTX 904的处理代码502包括发送到模拟器902中的API函数POLL MESSAGES 508的API调用(例如,POLL EVENTS)以获得打印事件消息(如果有),以便由RTX 904包括在日志文件910中。在典型实施方式中,将由RTX 904在模拟器902的每个函数循环的末尾做出API调用POLL EVENTS,以便在逐周期的基础上呈现打印事件消息。在至少一些实施例中,API函数POLL MESSAGES 508可以在模拟器902中做出其他API函数GETFAC 506,以便获得用于在打印事件消息中呈现的信号值。在下文中参考图12更详细地说明了由API函数POLL MESSAGES 508执行的处理。
现在参考图11,其中示出了根据本发明的用于启用打印事件和打印事件组的示例性过程的高级逻辑流程图。如上所述,在示例性实施例中,由模拟器902的API函数WRITE TABLE 504执行示出的过程。
示出的过程始于块1100,以响应由API函数WRITE TABLE 504从RTX904接收到INIT PRINT EVENTS API调用,RTX 904将指针作为参数传递到正则表达式输入文件908。响应于接收到API调用,API函数WRITE TABLE504访问由输入参数指示的正则表达式输入文件908(块1102)并在正则表达式输入文件908中选择正则表达式对(例如,设计实体实例名称、事件名称)以便处理(块1104)。
在块1104之后,过程转到块1106,块1106示出了API函数WRITE TABLE504解析在块1104选择的正则表达式对,并在每个表项800的打印事件表430中设置启用字段802(对于表项800,实例字段806和名称字段808的内容满足正则表达式对的两个组成部分)。通过这种方式,在事件表430中为模拟运行启用用户选择的打印事件和打印事件组。在块1108,API函数WRITE TABLE 504判定是否已处理了正则表达式输入文件908中的所有正则表达式对。如果否,则过程返回块1104和已经说明的后续的块。但是,如果API函数WRITE TABLE 504在块1108判定已处理了正则表达式输入文件908中的所有正则表达式对,则图11中示出的过程在块1110处结束。此后,可以为一个或多个其他正则表达式输入文件908重复示出的过程。
现在参考图12,其中示出了根据本发明的用于呈现打印事件的示例性过程的高级逻辑流程图。示出的过程始于块600,以响应由模拟器902的API函数POLL MESSAGES 508接收到RTX 904的POLL EVENTS API调用。响应于接收到POLL EVENTS API调用,API函数POLL MESSAGES 508在块602进入处理循环,其中判定是否已处理了打印事件表430的所有表项800。如果是,则API函数POLL MESSAGES 508退出处理循环,并且示出的过程在块604结束。但是,如果API函数POLL MESSAGES 508在块602判定尚未处理打印事件表430中的所有表项800,则过程前进到块610,块610示出了API函数POLL MESSAGES 508访问打印事件表430中的下一表项800。
接下来,在块612,API函数POLL MESSAGES 508判定是否启用了与选定表项800关联的打印事件或打印事件组。如果否,则打印事件表430的选定表项800的处理结束,过程返回到上文已经说明的块602。但是,如果启用了打印事件表430的选定表项430,则API函数POLL MESSAGES 508通过检查组/事件字段804进一步在块614判定选定表项800是否对应于打印事件组或单独的打印事件。如果选定的表项800表示打印事件组,则过程转到将在下文说明的块630。另一方面,如果选定的表项800表示单独的打印事件,则API函数POLL MESSAGES 508在块620判定是否断言了由指针字段812的第一指针标识的有效信号。在示出的实施例中,API函数POLL MESSAGES 508通过向API函数GETFAC 506发出调用来确定有效信号的状态,GETFAC 506从可执行模拟的模型480获得有效信号值并将其返回给API函数POLL MESSAGES 508。响应于在块620判定未断言有效信号,打印事件表430的选定表项800的处理结束,并且过程返回已说明的块602。但是,如果断言了有效信号,则过程转到块622。
块622示出了API函数POLL MESSAGES 508解释包含在选定表项800的消息字段810中的消息并向API函数GETFAC 506发出调用以从可执行模拟的模型480中获得信号值(如果有)以便在消息中呈现。然后,API函数POLL MESSAGES 508使用信号值(如果有)通过由消息的格式化信息指定的格式来构建打印事件消息并在日志文件910中呈现消息。此后,过程返回已说明的块602。
现在返回块630,如果打印事件表430的选定表项800表示打印事件组,则API函数POLL MESSAGES 508进入第二处理循环,其中通过选定表项800的指针字段812中的打印事件指针来处理是打印事件组的成员的所有打印事件。因此,如果API函数POLL MESSAGES 508在块630判定尚未处理选定表项800的指针字段812中的所有打印事件指针,则API函数POLLMESSAGES 508在块632访问下一个此类打印事件指针并在块634处理它在打印事件表430中的表项800。也就是说,在块634,API函数POLL MESSAGES508执行打印事件的表项800的在块620-624处示出的每个步骤。在此类处理之后,过程返回块630。一旦处理了所有打印事件指针,则API函数POLL MESSAGES 508退出第二处理循环并返回已说明的块602。
如上所述,本发明提供了支持在模拟系统中呈现打印事件的方法、系统和程序产品。根据本发明,可以由设计人员在定义数字设计的HDL源代码文件和/或定义该数字设计的模拟设备的HDL源代码文件中指定打印事件和打印事件组。然后,可以选择性地为特定模拟运行启用和禁用打印事件和打印事件组以协助分析和调试数字设计。
虽然参考优选实施例具体示出并描述了本发明,但是本领域中的技术人员将理解,在不偏离本发明的精神和范围的情况下,可以在其中做出各种形式和细节上的更改。例如,虽然已经参考示例性实施例说明了本发明,其中将可执行模拟的模型中的数据结构(将打印事件与可执行模拟的模型中的有效和功能信号关联)描述为打印事件表,但是本领域的技术人员将理解,可以使用一个或多个数据结构并且可以使用公知的或将来开发的数据结构而非表(例如,链接列表、树等)来实现此类数据结构。此外,本发明的实施例之一可以实现为驻留于如图1和图2所述的一般地配置的一个或多个计算机系统的随机存取存储器28中的程序代码。直到由计算机系统10请求,所述程序代码可以一直存储在另一个计算机可读存储设备中(例如,盘驱动器33)或可移动存储设备中(例如,最终在CD-ROM驱动器中使用的光盘或最终在软盘驱动器中使用的软盘)。将此类驻留于计算机可读介质中的程序代码称为程序产品。此外,程序代码可以存储在另一个计算机的存储器中并在用户需要时在局域网或广域网(例如,因特网)上传输。
权利要求
1.一种在数据处理系统中模拟处理的方法,所述方法包括
接收一个或多个描述数字设计的HDL源文件,所述数字设计包括多个分级布置的设计实体,所述一个或多个HDL源文件包括一个或多个语句,所述语句实例化所述多个分级布置的设计实体中的多个打印事件,每个打印事件在所述数字设计中具有关联的消息和至少一个关联的信号;以及
处理所述一个或多个HDL源文件以获得可执行模拟的模型,其中所述处理包括在所述可执行模拟的模型中建立数据结构,所述数据结构描述了为所述可执行模拟的模型定义的所述多个打印事件并且将所述多个打印事件中的每个事件与其相应关联的信号进行关联。
2.如权利要求1中所述的方法,其中
所述至少一个关联的信号包括所述可执行模拟的模型中被断言以使关联的打印事件发生的有效信号。
3.如权利要求2中所述的方法,其中
对于所述多个打印事件中的特定打印事件,所述至少一个关联的信号还包括所述可执行模拟的模型中的功能信号;以及
所述特定打印事件的关联消息引用所述功能信号。
4.如权利要求3中所述的方法,其中
所述关联的消息具有描述所述功能信号的值的呈现格式的格式化信息;以及
所述数据结构包含所述消息和所述格式化信息。
5.如权利要求1中所述的方法,其中
所述接收包括在所述一个或多个HDL源文件中接收在所述多个设计实体中的一个实体内实例化打印事件组的语句,所述打印事件组具有所述多个打印事件中的多个打印事件作为成员;以及
所述建立数据结构包括建立将作为所述打印事件组的成员的所述多个打印事件与所述打印事件组关联的数据结构。
6.如权利要求1中所述的方法,还包括
响应于接收到标识所述多个打印事件中的选定打印事件以便为模拟运行启用的输入,更新所述可执行模拟的模型中的所述数据结构以标识为所述模拟运行启用所述多个打印事件中的哪些事件;
通过将测试用例应用到所述可执行模拟的模型来模拟所述数字设计;以及
呈现在所述模拟运行期间检测到其发生的每个启用打印事件的关联的消息。
7.如权利要求6中所述的方法,其中呈现所述关联的消息包括在日志文件中呈现所述关联的消息。
8.如权利要求6中所述的方法,其中
所述接收包括在所述一个或多个HDL源文件中接收在所述多个设计实体中的一个实体内实例化打印事件组的语句,所述打印事件组具有所述多个打印事件中的多个打印事件作为成员;
所述建立数据结构包括建立将作为所述打印事件组的成员的所述多个打印事件与所述打印事件组关联的数据结构;以及
响应于接收到标识所述打印事件组以在模拟运行期间启用的输入,更新所述可执行模拟的模型中的所述数据结构以便针对所述模拟运行将所述多个打印事件标识为启用。
9.一种数据处理系统,包括
处理单元;
连接到所述处理单元的数据存储装置;以及
模型建立程序代码,其可由所述处理单元执行以生成可执行模拟的模型,其中所述模型建立程序代码接收一个或多个描述数字设计的HDL源文件,所述数字设计包括多个分级布置的设计实体,所述一个或多个HDL源文件包括一个或多个语句,所述语句实例化所述多个分级布置的设计实体中的多个打印事件,每个打印事件在所述数字设计中具有关联的消息和至少一个关联的信号,并且其中所述模型建立代码处理所述一个或多个HDL源文件以获得包括数据结构的可执行模拟的模型,所述数据结构描述了为所述可执行模拟的模型定义的所述多个打印事件,其中所述数据结构将所述多个打印事件中的每个事件与其相应关联的信号进行关联。
10.如权利要求9中所述的数据处理系统,其中
所述至少一个关联的信号包括所述可执行模拟的模型中被断言以使关联的打印事件发生的有效信号。
11.如权利要求10中所述的数据处理系统,其中
对于所述多个打印事件中的特定打印事件,所述至少一个关联的信号还包括所述可执行模拟的模型中的功能信号;以及
所述特定打印事件的关联消息引用所述功能信号。
12.如权利要求11中所述的数据处理系统,其中
所述关联的消息具有描述所述功能信号的值的呈现格式的格式化信息;以及
所述数据结构包含所述消息和所述格式化信息。
13.如权利要求9中所述的数据处理系统,其中
所述一个或多个HDL源文件包括在所述多个设计实体中的一个实体内实例化打印事件组的语句,所述打印事件组具有所述多个打印事件中的多个打印事件作为成员;以及
所述数据结构将作为所述打印事件组的成员的所述多个打印事件与所述打印事件组关联。
14.一种数据处理系统,包括
处理单元;
连接到所述处理单元的数据存储装置;以及
模型程序代码,其可由所述处理单元执行以使用可执行模拟的模型来模拟数字系统的操作,所述可执行模拟的模型包括描述为所述可执行模拟的模型定义的多个打印事件的数据结构,其中所述数据结构将所述多个打印事件中的每个事件与所述可执行模拟的模型中的相应关联的信号进行关联,其中所述模拟程序代码,响应于接收到标识所述多个打印事件中的选定打印事件以便为模拟运行启用的输入,更新所述可执行模拟的模型中的所述数据结构以标识为所述模拟运行启用所述多个打印事件中的哪些事件,并且其中所述模拟程序代码通过将测试用例应用到所述可执行模拟的模型来模拟所述数字设计,并且呈现在所述模拟运行期间检测到其发生的每个启用打印事件的关联的消息。
15.如权利要求14中所述的数据处理系统,其中所述模拟程序代码在日志文件中呈现所述关联的消息。
16.如权利要求14中所述的数据处理系统,其中
所述数据结构将作为打印事件组的成员的多个打印事件与所述打印事件组关联;以及
响应于接收到标识所述打印事件组以在模拟运行期间启用的输入,所述模拟程序代码更新所述可执行模拟的模型中的所述数据结构以便针对所述模拟运行将所述多个打印事件标识为启用。
全文摘要
本发明涉及一种在数据处理系统中模拟处理的方法以及所述数据处理系统。根据模拟处理的方法,接收一个或多个描述数字设计的HDL源文件,所述数字设计包括多个分级布置的设计实体。所述一个或多个HDL源文件包括一个或多个语句,所述语句实例化所述多个分级布置的设计实体中的多个打印事件,其中每个打印事件在所述数字设计中具有关联的消息和至少一个关联的信号。处理所述一个或多个HDL源文件以获得包括数据结构的可执行模拟的模型,所述数据结构描述了为所述可执行模拟的模型定义的所述多个打印事件,并且将所述多个打印事件中的每个事件与其相应关联的信号进行关联。
文档编号G06F17/50GK101236574SQ20081000922
公开日2008年8月6日 申请日期2008年1月29日 优先权日2007年1月30日
发明者D·E·威廉姆斯, G·波波克, W·勒斯纳 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1