CN102687114B - 具有行为特征的硬件设计的并发仿真 - Google Patents
具有行为特征的硬件设计的并发仿真 Download PDFInfo
- Publication number
- CN102687114B CN102687114B CN201080050911.5A CN201080050911A CN102687114B CN 102687114 B CN102687114 B CN 102687114B CN 201080050911 A CN201080050911 A CN 201080050911A CN 102687114 B CN102687114 B CN 102687114B
- Authority
- CN
- China
- Prior art keywords
- hardware
- data stream
- code
- variable
- operational symbol
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/323—Translation or migration, e.g. logic to logic, hardware description language [HDL] translation or netlist translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Geometry (AREA)
- Evolutionary Computation (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Devices For Executing Special Programs (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Debugging And Monitoring (AREA)
- Testing, Inspecting, Measuring Of Stereoscopic Televisions And Televisions (AREA)
Abstract
仿真硬件包括基于硬件描述语言(HDL)描述产生硬件的数据流表示。数据流表示包括保留HDL描述的行为特征和综合特征的兼容性信息。仿真硬件还包括从数据流表示产生代码,并且并发地执行该代码。
Description
发明背景
逻辑仿真是电子电路的设计流中的必要步骤。通常借助于被称为逻辑仿真器的电子设计自动化(EDA)软件工具执行逻辑仿真,逻辑仿真器处理通常以硬件描述语言(HDL)代码的形式提供的硬件设计。在将硬件设计提交给生产实际电子电路的物理实现阶段之前,硬件设计者执行广泛的逻辑仿真来验证硬件设计遵循其规格。在典型的硬件设计流程中,伴随着设计过程一起执行功能验证过程以便使得生产不遵循其规格的电路的风险最小化。逻辑仿真的结果通常是产生用户想要观察的一组电路信号的波形。通常,用户可以分析和可视化所产生的波形以验证硬件设计正确地工作。逻辑仿真器也支持借助于嵌入式断言仿真硬件设计,嵌入式断言使用电路信号的值来检测导致电路不正常工作的条件。在仿真电路的同时,逻辑仿真器评估这样的断言,并向用户报告它们的违规行为。基于这些违规报告,用户可以发现和修复硬件设计中的设计错误。
电子电路的不充分的或不正确的验证的结果可能是所实现的电路不遵循其规格,这会引起消费者不满意、营收损失、推向市场时间增加和附加的设计和制造努力。在现代验证过程中,通常通过借助于大量试验来试验其行为来针对其规格验证硬件描述。每一试验产生被用作对电路设计的输入的一组电路激励。验证过程可以包括多达几十万次试验。当新的功能部件被引入到电路设计中时,增加新的试验,同时可以随机化现有试验,以在每次执行所产生的激励时提供所产生的激励的变化。通常周期性地(例如,每夜)以及在结束对电路设计做出的新近的改变之前均执行验证过程。
功能验证是电路设计的推向市场时间的主要影响因素。功能验证所要求的时间量可以占用高达70%的设计时间。使用逻辑仿真来执行大多数功能验证。电子电路设计的复杂性的指数性增加暴露出现有技术水平的逻辑仿真器的限制。增加仿真工作站的计算能力的通常实践不足以保持跟上现代电路设计的指数性增加的门数(gate count)。较短的设计周转期和增加的电路复杂性要求逻辑仿真器的操作中的巨大加速。然而,在其中电路要求多次仿真的情形中,现有解决方案通常是非常低效的。
附图简述
在下列详细描述和附图中公开本发明的各种实施例。
图1是阐释用于并发地仿真硬件的过程的实施例的流程图。
图2是阐释并发仿真系统的示例实现的框图。
图3是阐释2位计数器模块示例的计算图。
图4是阐释要求优先弧的示例模块的计算图。
图5A和图5B是阐释具有两个并发HDL语句的示例模块的计算图的两个部分。
图6A和图6B是阐释包括选择语句(case statement)、默认敏感性列表和延迟运算符(delay operator)的示例模块的计算图的两个部分。
图7是阐释具有不同的条件HDL语句的延迟运算符的使用的计算图。
图8是阐释包括具有无界退出条件的while循环的示例模块的计算图。
图9是阐释用于Verilog表达式“o=a&&b”的示例的代码产生器的实施例的操作的图。
图10是阐释其中为硬件设计提供N个不同的试验的示例场景的图。
图11是阐释其中将单个试验应用到具有经复制的模块的硬件设计的示例场景的框图。
详细描述
本发明可以众多方式实现,包括作为过程;装置;系统;物质组成;在计算机可读存储介质上实现的计算机程序产品;和/或处理器,例如被配置为执行被存储在耦合到处理器的存储器上或由其提供的指令的处理器。在本说明书中,本发明可能采取的这些实现或任何其他形式可以被称为技术。一般地,所公开的过程的步骤的次序可以在本发明的范围内改变。除非另外说明,否则诸如处理器或存储器之类的被描述为被配置为执行任务的组件可以被实现为被临时地配置为在给定的时间执行任务的通用组件或被制造为执行该任务的专用组件。在此所使用术语“处理器”是指被配置为处理诸如计算机程序指令之类的数据的一个或多个设备、电路和/或处理核心。
下面与阐释本发明的原理的附图一起提供本发明的一个或多个实施例的详细描述。结合这样的实施例描述本发明,但本发明不限于任何实施例。本发明的范围仅受权利要求限制,且本发明包括众多替代物、修改和等效物。在下列描述中陈述众多具体细节,以便提供对本发明的透彻理解。出于示例的目的提供这些细节,且无需这些具体细节中的一些或全部就可以根据各权利要求实践本发明。为清晰起见,不详细描述与本发明相关的技术领域中已知的技术资料,以使得不会不必要地模糊本发明。
描述高效地执行硬件设计的并发仿真的基于软件的技术。在一些实施例中,仿真软件处理被编码为硬件描述语言(HDL)程序的硬件的描述,并产生保留硬件设计的行为特征的数据流表示。将该数据流表示变换成代码,例如可以在处理器上执行的指令。在一些实施例中,指令是在操作字的个体比特上执行给定操作的逐位指令。在一些实施例中,指令是在多种操作字上执行给定操作且可以在诸如支持单指令多数据(SIMD)指令的处理器之类的并行处理器上执行的并行指令。
图1是阐释用于并发地仿真硬件的过程的实施例的流程图。过程100可以在诸如下面描述的系统200之类的系统上执行。假设在该过程启动时,诸如逻辑电路之类的硬件的HDL描述已经可用。在一些实施例中,使用诸如Verilog、System Verilog、VHDL或任何其他适当的编程语言之类的HDL来描述逻辑电路。硬件描述包括硬件的行为特征和综合特征两者。在此所使用的硬件的综合特征是指可以被转换成诸如门和线位置等的物理硬件的硬件描述中的构造。硬件的行为特征是指不直接地转换成物理硬件的硬件描述中的构造,例如多级信号值(例如‘X’或‘Z’逻辑值、具有强度的逻辑值等等)、具有在编译时间不能确定的结束条件的循环、控制台或文件I/O操作(例如,$display语句)、与外置于仿真器软件的第三方软件组件通信的编程语言接口(PLI)调用等等。
在102,基于HDL描述产生硬件的数据流表示。在此所使用的数据流表示是指描述通过硬件的各种组件的数据的流的硬件的表示。在这一示例中,数据流表示类似于硬件的连线表表示。如下面更详细地描述的,数据流表示包括保留HDL描述的行为特征的兼容性信息(例如专用兼容性运算符),在用于借助于连线表表示来建模硬件设计的其他现有技术中,在将硬件设计综合到物理硬件的过程期间,通常丢失所述HDL描述的行为特征。数据流表示中保留的一种类型的行为特征是硬件描述中HDL变量的类型,这些变量通常是多值的,即,它们可以取多种可能的值(例如,0、1、X、Z)。
在104,从数据流表示产生代码。所产生的代码包括可以在处理器上执行的处理器指令。下面更详细地描述该代码产生。在一些实施例中,数据流表示被转换成使用布尔(二进制)变量的布尔表示,布尔(二进制)变量即具有0值或1值的变量,且该布尔表示进一步经处理以产生所期望的代码。
在106,在处理器上并发地执行代码。换句话说,在处理器上执行单个代码实例以便同时地执行多个仿真。在各种实施例中,可以在处理器上同时执行在多种操作场景下的硬件仿真、在多种试验条件下的硬件仿真、在经复制模块上的硬件仿真或其组合。在各种实施例中,多种类型的所产生的代码是可能的。在一些实施例中,所产生的代码包括x86指令且在诸如Intel PentiumTM处理器之类的处理器上执行。在一些实施例中,所产生的代码包括允许并行执行的指令且并发地执行该代码。例如,在一些实施例中,产生单指令多数据(SIMD)指令并在支持SIMD指令集的并行处理器上执行单指令多数据(SIMD)指令,支持SIMD指令集的并行处理器例如来自Intel、AMD和IBM的包括流化SIMD扩展(SSE)的各种通用处理器、诸如Intel ItaniumTM之类的某些超长指令字(VLIW)处理器、某些数字信号处理器(DSP)和图形处理单元(GPU)。由于SIMD允许使用单个指令来处理多组数据(例如,单次操作中可以处理128组值),可以并行执行多个仿真,从而极大地增加了效率。
图2是阐释并发仿真系统的示例实现的框图。系统200实现过程100。该系统包括HDL分析器(parser)204、详述器(Elaborator)208、求解器(Algebraizer)212和代码产生器216。电路设计者或自动化过程将某些硬件及其关联的信号的HDL描述创建为HDL设计文件202。HDL文件包括硬件的行为特征和综合特征。HDL文件由分析器204分析,分析器204产生HDL抽象语法树(AST)表示206。AST被发送给详述器208,详述器208基于AST表示产生硬件的数据流表示。在这一示例中,数据流表示包括计算图。不同于包括门级组件以及它们的互连但不包括行为信息的传统连线表,所示出的计算图是采用专用兼容性运算符以保留HDL代码的行为特征的高级表示。下面各种示例中将示出详述器的操作。在一些实施例中,详述器基于模块工作。下列伪代码阐释详述器过程的实施例:
如下面将更详细地讨论的,硬件描述和计算图中的变量可以是多值的。换句话说,每一变量可以是多个可能的逻辑值中的一个(例如,0、1、X、Z)。求解器212处理计算图并将其编码成布尔表示214。代码产生器216进一步处理该布尔表示以产生可执行仿真指令220。
以上所描述的模块可以被实现为在一个或多个处理器上执行的软件组件。在一些实施例中,各模块可以通过软件产品的形式来实现,软件产品可以被存储在非易失性存储介质(例如光盘、闪存设备、移动硬盘等等),包括用于使得计算机设备(例如个人计算机、服务器、手持式设备等等)实现本发明的各实施例中所描述的方法的多个指令。各模块可以在单个设备上实现或跨越多个设备而分布。各模块的功能可以进一步相互融合或进一步分成多个子模块。
在各种实施例中,计算图(且在一些情况中还有布尔表示)包括兼容性运算符和变量以及它们的关联属性,以便在HDL描述中正确地保留行为特征。例如,某些运算符和变量被用来保留控制流信息(即,while循环),示例包括尖峰(spike)运算符和循环体运算符的敏感性列表的关联的事件变量;某些运算符被用来保留调度语义信息的定时和硬件描述,示例包括#延迟(delay)、上升沿(posedge)、下降沿(negedge)、优先(precedence)运算符;某些运算符被用来建模系统调用的硬件描述,示例包括I/O操作的$display、用于返回当前的仿真时间的$time和系统调用的多种其他类型的硬件描述;某些运算符被用来建模与外部软件模块的交互,示例包括编程语言接口(PLI)调用。变量或运算符的属性也被用来保留行为信息。例如,使用指示变量可以采取的多级逻辑值和强度级的变量属性来保留与HDL变量类型有关的信息;使用诸如阻塞、非阻塞和连续等的赋值属性来保留与HDL赋值类型有关的信息。下面详细讨论这些兼容性运算符、变量、属性和由运算符、变量和属性建模的行为。
图3-图8是阐释这些运算符、变量和它们的关联属性的计算图。在下列示例中,计算图包括变量(被表示为圆)和运算符(被表示为平行四边形)。变量和运算符两者都具有属性。变量属性传达影响仿真的开始如何分配变量以及在仿真期间如何更新它们的信息。变量属性包括:名称、类型、大小(例如,位数)、在仿真开始时的值等等。运算符属性传达影响在仿真期间期望如何执行运算符的信息。运算符属性包括:类型、赋值类型(例如,连续、阻塞、非阻塞)、敏感性列表、可选优先弧、可选特殊属性等等。
在基于Verilog硬件描述语言的下列示例中,运算符被调度为用于在下列条件下的评估:a)建模Verilog连续赋值(在下面的图中被指示为类型CNT)的运算符不具有敏感性列表,且被调度为用于在它们的输入中的任一个改变时进行评估;b)建模Verilog阻塞赋值(图中被指示为类型BA)或Verilog非阻塞赋值(图中被指示为类型NBA)的运算符总是具有敏感性列表,且被调度为用于在它们的敏感性列表中的任一变量改变时进行评估。在此所使用的敏感性列表是指变量的列表,且被用来捕捉敏感性列表中的变量的值的转变。事件变量是异常,这是由于当它们被用于敏感性列表时,对它们仅考虑0-1转变(即,它们的1-0转变被忽略了)。对于诸如SystemVerilog和VHDL之类的其他硬件描述语言,评估语义是相似的。
一旦运算符被调度为用于评估,则它们的评估次序遵循图中示出的数据相关性(图中被示出为实箭头)。换句话说,在已经评估各运算符的输入之后评估运算符。有时引入优先弧(下面的图中被示出为虚箭头)以便建立优先于数据相关次序的评估次序。当评估运算符时,将它们的计算的结果赋值给与它们的输出相联系的变量。
图3是阐释2位计数器模块示例的计算图。如下以Verilog描述该模块:
图3的计算图阐释变量和运算符的若干行为属性。属性被示出为与它们各自的运算符或变量相邻。
Verilog示例模块ex1中的“if”语句被表示成复用器(MUX)302,复用器(MUX)302具有“IF”的“MUX类型”属性,以便将其与从Verilog三元运算符产生的复用器运算符区分开来,从Verilog三元运算符产生的复用器运算符具有“o=c?a:b”的形式,且将得到具有值“TRN”的“MUX类型”属性。
尽管“上升沿(posedge)”Verilog语句不具有相应的物理设备,但仍使用上升沿(posedge)运算符306来表示“上升沿(posedge)”Verilog语句,根据Verilog标准的要求,上升沿(posedge)运算符306捕捉信号clk的下列转变:‘0’到‘1’、‘0’到‘X’、‘0’到‘Z’、‘X’到‘1’、以及‘Z’到‘1’。
计算图中的大多数运算符表示带类型的赋值。在一些实施例中,产生中间值的运算符被建模为连续赋值(赋值类型=CNT),而对用户声明的变量赋值的运算符从相应的HDL语句获得它们的赋值类型。举例来说,上升沿(posedge)运算符306和相等运算符308两者产生中间值,且用连续赋值(赋值类型=CNT)注释它们。相反,产生最终(非中间)值的诸如加法器304和MUX 302之类的运算符分别被建模为阻塞赋值(赋值类型=BA)和非阻塞赋值(赋值类型=NBA)。
通过使用被注释为“逻辑相等”(相等类型=LOGIC)的相等运算符“=”来在计算图中表示Verilog逻辑相等运算符“==”,以便将其与来源于Verilog case相等运算符“===”的相等运算符(用相等类型=CASE注释)区分开来。
图4是阐释要求优先弧的示例模块的计算图。如下以Verilog描述该模块:
在上面的描述中,添加缓冲器运算符352以便建模变量-变量赋值。因为必须在对o2的赋值之前执行对o1的赋值,在计算图中,在非运算符354和缓冲器运算符352之间用优先弧350强制这种次序。没有优先弧的话,从缓冲器352到非运算符354的数据相关性将指示与所预期的相反的评估次序(即,首先赋值o2,然后赋值o1)。
图5A和图5B是用两个并发HDL语句阐释示例模块的计算图的两个部分。如下描述该模块。
在这一示例中,分别详述两个并发Verilog语句(assign和always)。图5A是从赋值语句的详述得到的计算图的部分。图5B是从always语句的详述得到的计算图的部分,其包括嵌套语句,因此,根据它们的顺序执行语义循序地详述嵌套语句。always语句的敏感性列表包括多于一个的变量。
再次,输出临时变量的运算符,例如,图5A的加运算符402和减运算符404、图5B的与(AND)运算符406、或(OR)运算符408以及异或(XOR)运算符410被建模为连续赋值。输出用户定义的变量的运算符从相应的HDL代码取得赋值类型和敏感性列表。例如,图5B的MUX 416具有赋值类型BA。
进一步,不同类型的MUX被用来表示不同的HDL表达式。例如,图5A的基于赋值语句的MUX 414被注释为三元(ternary)运算符(MUX类型=TRN),以便区别于基于诸如图5B的MUX 416之类的MUX的if语句。
图5B使用$display运算符,$display运算符是不可综合的行为运算符的示例。对于某些Verilog结构,例如$display语句,数据依赖性驱动的评估次序是不足够的或是不适当的。评估次序必须遵守由原始的HDL代码强加的排序。因此,诸如图5B中的420和422之类的优先弧被包括在计算图中以便建模原始的HDL代码中的评估次序。优先弧保证以所预期的次序评估附加的运算符且并不只是在已经评估它们的操作数之后评估。在所示出的示例中,优先弧保证在o3之前显示o2,在o4之前显示o3。更一般地,以类似的方式处理硬件描述系统调用和编程语言接口(PLI)调用,且强加HDL精确执行次序。
图6A和图6B是阐释包括选择(case)语句、默认的敏感性列表和延迟(delay)运算符的示例模块的计算图的两个部分。如下描述该模块:
在所示出的计算图中,诸如502和504之类的相等运算符具有相等类型“case相等”。
解析默认的敏感性列表(*)并据此注释各运算符。根据Verilog标准,默认的敏感性列表被解释为所考虑的语句中的一组右侧(RHS)变量:a、b、c、d、s。
图6A的选择器(selector)运算符506和图6B的选择器(selector)运算符508具有N个条件和N个输入。输出被赋值给所关联的条件为真的第一输入。在该示例中示出N=3。
延迟(Delay)运算符直接地连接到其他运算符的输入而无需中间变量。当延迟(delay)运算符连接到诸如选择器(selector)运算符之类的条件运算符的输入时,它们一起指示对应于该输入的赋值应使用馈入到延迟(delay)运算符的当前值但在某个指定的将来时间执行。举例来说,参见图6A,如果t5是真,那么,采样变量d,在未来的10个仿真时间单元,将所采样的值赋值给变量o1。
在一些实施例中,延迟时间单元被指定为延迟(delay)运算符的属性。在一些实施例中,延迟时间单元被指定为延迟(delay)运算符的另一输入。
借助缓冲器详述具有延迟(delay)运算符的非条件HDL赋值。例如,在图6B中,延迟(delay)运算符510和缓冲器512用于o3的赋值。
图7是阐释与不同的条件HDL语句一起使用延迟(delay)运算符的计算图。如下描述该模块:
在该计算图中,如果c是等于‘1’,那么,立即将x赋值给o;否则,将y的当前值被赋值给o,但在如变量d的当前值所确定的未来执行该赋值。
图8是阐释包括具有无界退出条件的while循环的示例模块的计算图。换句话说,在编译时间不确定while循环的退出条件;相反,它依赖于运行时条件。如下描述该模块:
在这一示例中,引入事件变量e1。事件变量可以是0或1且当它们出现在敏感性列表中时以特殊方式处理它们。具体地,对事件变量敏感的运算符将仅对事件变量的0-1转变敏感。这与其中运算符对其敏感性列表中变量的任何改变敏感的更常见的情况相反。在这一示例中,e1被用来指示检测到i少于n的事件。
也引入对t1和e1两者敏感的“尖峰(spike)”运算符702。换句话说,“尖峰”响应于信号t1的上升沿和事件e1中的正转变两者。运算符具有输入t2,其对应于比较i<n的结果。尖峰(spike)运算符以使得当输入t2是真时输出e1上出现正尖峰的方式执行下列的操作:e1=0和e1=t2。从循环体的详述(例如,加法器704和乘法器706)产生的运算符对e1敏感且对t1不敏感。尖峰(spike)运算符对t1和e1两者敏感,且发起对t1的正转变的循环。只要e1继续具有尖峰(因而指示i<n是真),该循环就继续操作。当e1不再具有尖峰(因而指示i<n不再是真)时,该循环退出。
包括诸如708和710之类的优先弧以便保证在第一迭代之后的迭代中,在乘法器和加法器之后评估尖峰(spike)运算符。
编码在该计算图中的另一行为特征是所建模的HDL变量的N值逻辑行为。例如,Verilog变量通常可以取4个可能的逻辑值(0、1、X、Z)中的一个,其中X表示未知,且Z表示高阻或开路。有时,Verilog逻辑变量也具有指示所取的逻辑值的强度(例如,电源驱动、强驱动、弱驱动)的关联的强度信息。也可以使用其他逻辑值表示方案,例如VHDL定义表示不同的信号值的9值逻辑。这些类型的逻辑值方案一起被称为N值逻辑(其中N>2)。出于阐释的目的,下列讨论使用Verilog的4值逻辑作为示例,但可以类似地处理其他N值逻辑。
为了在执行二进制指令和数据的处理器上运行仿真代码,要求仿真代码为二进制。因而,在一些实施例中,从数据流表示产生代码包括编码数据流表示以便产生仅使用逻辑值0和1的布尔表示。在示例系统200中,求解器212将按照N值HDL变量表示的计算图表示编码成布尔表示。参见以上所描述的2位计数器示例,假定HDL描述中使用4值逻辑,那么,可以根据下列真值表使用三个布尔变量clk、clk’、clk”来表示诸如时钟clk之类的4值标量变量:
表1
可以类似地编码其他HDL变量。可以使用布尔变量tc、tc’和tc”来编码标量信号tc。可以使用布尔变量值[0]、值[0]’、值[0]”、值[1]、值[1]’和值[1]”来编码矢量信号值。
在一些实施例中,根据下列真值表使用仅两个布尔变量clk和clk’来表示诸如时钟clk之类的标量变量:
表2
以布尔表示将在该计算图中所建模的N值操作转换成经编码的布尔变量的操作。基于操作的真值表所使用的变量编码的真值表导出该转换。例如,对两个4值Verilog变量a和b执行的Verilog和操作(&&)得到Verilog表达式“o=a&&b”的下列真值表:
表3
假定分别使用布尔变量(a、a’、a”)、(b、b’、b”)和(o、o’、o”)以布尔表示编码4值Verilog变量a、b和o,则根据表3,由从Verilog表达式“o=a&&b”所得到的该计算图中的与(AND)运算符产生的布尔表示是:
o=a AND b
o’=(a OR a’OR a”)AND(b’OR b”)OR(a’OR a”)AND b
o”=0
对于在该计算图中的其他类型的操作,可以类似地导出布尔表示。举例来说,在该计算图中的先前所描述的2位计数器模块的上升沿(posedge)运算符具有下列布尔表示,其中布尔变量clk、clk’和clk”编码信号clk的当前值,且变量pclk、pclk’、pclk”编码该信号的先前值。
o=(NOT(pclk OR pclk’OR pclk”))AND(clk OR clk’OR clk”)OR(pclk’OR pclk”)AND clk AND(NOT(clk’OR clk”))
o’=0
o”=0
pclk=clk;
pclk’=clk’
pclk”=clk”
图2中的代码产生器216产生可以用来并发地在多个场景下仿真硬件设计的机器代码。在一些实施例中,通过将图2中的布尔表示214编译成多个软件子程序来完成这一点,通过单次调用,这些软件子程序高效执行N个不同的仿真场景的给定计算。将原始的硬件设计202处理成布尔表示促进了设计的N个独立仿真的并发处理,这是因为以布尔表示的逻辑操作可以直接编译成逐位逻辑指令。例如,诸如与、或、非等的逻辑操作可以分别被编译成x86 SIMD指令PAND、POR和PNOT,这些x86 SIMD指令在128位字上执行逐位逻辑操作。同样地,以布尔表示的运算操作可以转换成逻辑操作的序列,且因而被编译成逐位逻辑指令,或者可以更直接地被编译成SIMD运算指令例如x86指令PADDD和PSUBD,x86指令PADDD和PSUBD在每个为32位的4个邻近字上执行运算加和减。由于在其上执行并发仿真的计算系统上的可用指令的限制,并不总是可能将以布尔表示的给定操作编译成单个机器指令,且因而可以产生一组更复杂的机器指令。(举例来说,在并发仿真的数量N大于可用的SIMD指令所提供的最大的并行性时。)
图9是阐释用于以上所描述的Verilog表达式“o=a&&b”的示例的代码产生器的实施例的操作的图。该示例假设在支持x86 SIMD操作的计算系统上执行并发仿真;并发仿真的数量N等于128;且使用表1来将Verilog变量编码成布尔变量。一旦已经产生布尔表示,则代码产生器构建有向图900,有向图900通过共享来自公共运算的结果来提取出冗余计算。根据有向图900,重用布尔变量a’和a”的逻辑或的结果。代码产生器将有向图900编译成机器代码子程序910。机器代码910中的第1-3行计算布尔变量o的值;机器代码910中的第4-13行计算布尔变量o’的值;机器代码910中的第14-15行计算布尔变量o”的值。
存储器布局920示出代码产生器如何在计算系统的存储器中分配布尔变量,其中在该计算系统上执行并发仿真。该示例假设x86寄存器RDX被用来索引其中分配布尔变量的存储器区域。在128位的存储器字中分配每一布尔变量。每一存储器字的第i位被用来表示硬件设计的第i个并发仿真中的布尔变量的值。根据存储器布局920,与布尔变量a、a’和a”相关联的128位字的内容分别是<0…01>、<0…10>、<1…00>。在第一仿真中,各字的最低有效位对应于a=1、a’=0、a”=0;因此,Verilog变量对应于‘1’;在第二仿真中,a=0、a’=1且a”=0;因此,Verilog变量是‘X’;在第N仿真中,各字的最高有效位对应于a=0、a’=0、a”=1;因此,Verilog变量是‘Z’。同样,根据存储器布局920,与布尔变量b、b’和b”相关联的128位字的内容分别是<0…10>、<1…00>、<0…00>,其被解释为如下:在第一仿真中,各字的最低有效位对应于b=0、b’=0、b”=0;因此,Verilog变量b是‘0’;在第二仿真中,b=1、b’=0且b”=0,且因此Verilog变量b是‘1’;在第N仿真中,b=0、b’=1、b”=0,且因此Verilog变量b是‘0’。通过使用这种技术,可以并发地执行N(在这种情况中是128)个仿真,这比现有非并发仿真技术改善了性能,现有非并发仿真技术中,仅每一存储器字的最后几个比特被用来存储Verilog变量值且剩余的未被使用。
在一些实施例中,并发仿真被用来在多种试验条件下仿真给定的设计。图10是阐释其中为硬件设计提供N个不同的试验的示例场景的图。在这一示例中,每一试验包括被验设计(DUT)组件,该DUT组件包括所考虑的硬件设计的HDL代码,以及试验台(TB)组件,该TB组件包括在具体的试验条件下驱动硬件设计的HDL代码。各试验仅在它们的试验台组件方面不同,这是由于它们都针对相同的硬件设计。执行场景1000中所叙述的仿真的典型方法是在单个仿真系统上循序开始N个试验。另一标准方法是将试验分派在多个仿真系统上并且并行运行它们。相反,在场景1010中,所有N个试验都在采用以上所描述的并发仿真技术来在相同时刻执行多个DUT仿真的单个仿真系统上并发地执行。在场景1010中,DUT组件的HDL变量被编码为布尔变量且被分配在仿真系统的N位存储器字上,以使得字的第i位指示第i个并发仿真中关联的布尔变量的值(且因此指示关联的HDL变量的值)。并发仿真系统中的接口逻辑在TB组件和DUT之间映射接口信号的值,其中DUT的第i个仿真将被应用到由第i个TB组件产生的激励,并且同样地,第i个TB组件将经受来自DUT组件的第i个仿真的输出响应。
在一些实施例中,以上所描述的并发仿真技术被用来执行具有高度内部重复的设计的单个逻辑仿真。这样的设计的示例包括多核处理器、图形处理器、网络处理器、存储器或具有多个经复制的模块的其他电路。图11是阐释其中将单个试验应用到硬件设计的示例场景的框图。类似于以上所描述的示例,该试验包括试验台(TB)组件和被验设计(DUT)组件。在场景1100中,DUT组件包括两个HDL模块M1和M2,每一模块被复制N次。模块实例可以以各种方式连接到DUT组件的其他部分,且通常将经受不同的激励。执行场景1100中叙述的仿真的标准方法是将多个模块例示考虑成分离的实体并单独仿真它们。相反,在场景1110中,采用以上所描述的并发仿真技术的仿真系统被用来执行模块M1的N个实例的N次仿真以作为模块M1的单个并发仿真,且对模块M2也是如此。场景1110中的仿真系统包括接口逻辑,接口逻辑将M1的第i个并发仿真中模块M1的输入/输出信号映射到场景1110中连接到场景1100中的模块M1中的第i个实例的DUT组件。
尽管出于理解的清晰起见已经相当详细地描述了前述的实施例,但本发明不限于所提供的细节。存在实现本发明的许多替代方式。所公开的实施例是说明性的而非限制性的。
Claims (26)
1.一种仿真硬件的方法,包括:
利用处理器基于硬件描述语言描述产生所述硬件的数据流表示,所述数据流表示包括计算图,所述计算图包括保留所述硬件描述语言描述在仿真期间的行为特征和综合特征的兼容性信息;
从所述数据流表示产生代码;以及
并发地执行所述代码。
2.如权利要求1所述的方法,其特征在于,并发地执行所述代码包括并发地在多种操作场景下仿真所述硬件。
3.如权利要求1所述的方法,其特征在于,并发地执行所述代码包括并发地在多种试验条件下仿真所述硬件。
4.如权利要求1所述的方法,其特征在于,所述硬件包括多个经复制的模块,且并发地执行所述代码包括在所述多个经复制的模块上执行并发仿真。
5.如权利要求1所述的方法,其特征在于,所述兼容性信息包括保留控制流的信息。
6.如权利要求1所述的方法,其特征在于,所述兼容性信息包括保留调度语义信息的定时和硬件描述的信息。
7.如权利要求1所述的方法,其特征在于,所述兼容性信息包括用于建模系统调用的硬件描述的信息。
8.如权利要求1所述的方法,其特征在于,所述兼容性信息包括用于建模与外部软件模块的交互的信息。
9.如权利要求1所述的方法,其特征在于,所述兼容性信息包括与变量的硬件描述的可能值有关的信息。
10.如权利要求9所述的方法,其特征在于,所述变量的所述硬件描述包括四种可能的逻辑状态。
11.如权利要求9所述的方法,其特征在于,所述变量的所述硬件描述具有逻辑状态和信号强度级。
12.如权利要求1所述的方法,其特征在于,所述兼容性信息包括运算符。
13.如权利要求1所述的方法,其特征在于,所述兼容性信息包括运算符,且所述运算符具有属性。
14.如权利要求1所述的方法,其特征在于,所述兼容性信息包括赋值类型。
15.如权利要求1所述的方法,其特征在于,所述兼容性信息包括敏感性列表。
16.如权利要求1所述的方法,其特征在于,所述兼容性信息包括优先弧。
17.如权利要求1所述的方法,其特征在于,所述兼容性信息包括posedge运算符。
18.如权利要求1所述的方法,其特征在于,所述兼容性信息包括delay运算符。
19.如权利要求1所述的方法,其特征在于,所述兼容性信息包括spike运算符。
20.如权利要求1所述的方法,其特征在于,产生所述代码包括从所述数据流表示产生布尔表示以及基于所述布尔表示产生所述代码。
21.如权利要求20所述的方法,其特征在于,所述数据流表示中的多值硬件描述语言变量被转换成所述布尔表示中的多个布尔变量。
22.如权利要求20所述的方法,其特征在于,所述数据流表示中的运算符被转换成在所述布尔表示中的布尔变量上的操作。
23.如权利要求1所述的方法,其特征在于,基于所述数据流表示产生的所述代码包括逐位指令。
24.如权利要求1所述的方法,其特征在于,基于所述数据流表示产生的所述代码包括单指令多数据指令。
25.一种硬件仿真系统,包括:
处理器,所述处理器被配置为:
基于硬件描述语言描述产生所述硬件的数据流表示,所述数据流表示包括计算图,所述计算图包括保留所述硬件描述语言描述在仿真期间的行为特征和综合特征的兼容性信息;
从所述数据流表示产生代码;以及
并发地执行所述代码;以及
存储器,所述存储器被耦合到所述处理器,且被配置为给所述处理器提供指令。
26.一种用于仿真硬件的设备,包括:
用于基于硬件描述语言描述产生所述硬件的数据流表示的装置,所述数据流表示描述通过所述硬件的多个组件的数据流,所述数据流表示包括保留所述硬件描述语言描述在仿真期间的行为特征和综合特征的兼容性信息;
用于从所述数据流表示产生代码的装置;以及
用于并发地执行所述代码的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/586,724 | 2009-09-24 | ||
US12/586,724 US8156457B2 (en) | 2009-09-24 | 2009-09-24 | Concurrent simulation of hardware designs with behavioral characteristics |
PCT/US2010/049720 WO2011037940A2 (en) | 2009-09-24 | 2010-09-21 | Concurrent simulation of hardware designs with behavioral characteristics |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102687114A CN102687114A (zh) | 2012-09-19 |
CN102687114B true CN102687114B (zh) | 2015-09-30 |
Family
ID=43757724
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080050911.5A Active CN102687114B (zh) | 2009-09-24 | 2010-09-21 | 具有行为特征的硬件设计的并发仿真 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8156457B2 (zh) |
EP (1) | EP2480967A4 (zh) |
CN (1) | CN102687114B (zh) |
WO (1) | WO2011037940A2 (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8738350B2 (en) * | 2010-03-04 | 2014-05-27 | Synopsys, Inc. | Mixed concurrent and serial logic simulation of hardware designs |
US9098637B1 (en) * | 2011-10-21 | 2015-08-04 | Cadence Design Systems, Inc. | Ranking process for simulation-based functional verification |
CN102495782B (zh) * | 2011-11-30 | 2014-01-29 | 中国科学院微电子研究所 | 基于SystemVerilog断言和任务的协同总线验证方法及系统 |
US20130226535A1 (en) * | 2012-02-24 | 2013-08-29 | Jeh-Fu Tuan | Concurrent simulation system using graphic processing units (gpu) and method thereof |
US9170836B2 (en) * | 2013-01-09 | 2015-10-27 | Nvidia Corporation | System and method for re-factorizing a square matrix into lower and upper triangular matrices on a parallel processor |
US9015685B2 (en) | 2013-03-01 | 2015-04-21 | International Business Machines Corporation | Code analysis for simulation efficiency improvement |
CN104375803B (zh) * | 2013-08-13 | 2017-10-24 | 华为技术有限公司 | 一种数据处理的方法及装置 |
US10185793B2 (en) * | 2015-03-05 | 2019-01-22 | The Mathworks, Inc. | Conditional-based duration logic |
CN105930573A (zh) * | 2016-04-18 | 2016-09-07 | 金陵科技学院 | 基于可执行规约的红外热像仪设计方法 |
US10002213B2 (en) * | 2016-06-01 | 2018-06-19 | Oracle International Corporation | System and method for verifying the deterministic starting state of a digital device |
US10331830B1 (en) * | 2016-06-13 | 2019-06-25 | Apple Inc. | Heterogeneous logic gate simulation using SIMD instructions |
CN106841870B (zh) * | 2017-02-14 | 2019-05-07 | 浪潮集团有限公司 | 一种信号异常辅助定位电路及方法 |
GB2582785A (en) * | 2019-04-02 | 2020-10-07 | Graphcore Ltd | Compiling a program from a graph |
EP3980917A1 (en) | 2019-06-10 | 2022-04-13 | Battelle Memorial Institute | Behavioral design recovery from flattened netlist |
CN112632879B (zh) * | 2019-09-24 | 2023-08-29 | 杭州起盈科技有限公司 | 一种将电路图用高级硬件描述语言重构的自动化方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1202972A (zh) * | 1995-10-03 | 1998-12-23 | 艾利森电话股份有限公司 | 生产数字信号处理器的方法 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5544066A (en) | 1990-04-06 | 1996-08-06 | Lsi Logic Corporation | Method and system for creating and validating low level description of electronic design from higher level, behavior-oriented description, including estimation and comparison of low-level design constraints |
EP0592715B1 (en) * | 1992-10-15 | 1997-06-11 | Siemens Aktiengesellschaft | Checking design for testability rules with a VHDL simulator |
US5752000A (en) | 1994-08-02 | 1998-05-12 | Cadence Design Systems, Inc. | System and method for simulating discrete functions using ordered decision arrays |
GB2317245A (en) * | 1996-09-12 | 1998-03-18 | Sharp Kk | Re-timing compiler integrated circuit design |
US6138266A (en) | 1997-06-16 | 2000-10-24 | Tharas Systems Inc. | Functional verification of integrated circuit designs |
US6430732B1 (en) | 1998-03-27 | 2002-08-06 | Xilinx, Inc. | Method for structured layout in a hardware description language |
KR20010104622A (ko) | 1998-10-14 | 2001-11-26 | 추후기재 | 반도체 설계의 구성 및 기능을 관리하는 방법 및 장치 |
SG102555A1 (en) * | 1999-11-25 | 2004-03-26 | Kim Seng Holdings Pte Ltd | Method for using a data flow net to specify and assemble computer software |
US6539520B1 (en) | 2000-11-28 | 2003-03-25 | Advanced Micro Devices, Inc. | Systems and methods for generating hardware description code |
US7000213B2 (en) * | 2001-01-26 | 2006-02-14 | Northwestern University | Method and apparatus for automatically generating hardware from algorithms described in MATLAB |
US7080365B2 (en) * | 2001-08-17 | 2006-07-18 | Sun Microsystems, Inc. | Method and apparatus for simulation system compiler |
US20030037319A1 (en) * | 2001-08-20 | 2003-02-20 | Ankur Narang | Method and apparatus for partitioning and placement for a cycle-based simulation system |
US7155708B2 (en) | 2002-10-31 | 2006-12-26 | Src Computers, Inc. | Debugging and performance profiling using control-dataflow graph representations with reconfigurable hardware emulation |
US20040093198A1 (en) * | 2002-11-08 | 2004-05-13 | Carbon Design Systems | Hardware simulation with access restrictions |
US7003746B2 (en) | 2003-10-14 | 2006-02-21 | Hyduke Stanley M | Method and apparatus for accelerating the verification of application specific integrated circuit designs |
JP2005173648A (ja) * | 2003-12-05 | 2005-06-30 | Matsushita Electric Ind Co Ltd | 高位合成方法及び高位合成装置 |
US7257802B2 (en) * | 2003-12-29 | 2007-08-14 | Mentor Graphics Corporation | Method and system for hardware accelerated verification of digital circuit design and its testbench |
EP1769345B1 (en) * | 2004-07-12 | 2018-12-19 | Mentor Graphics Corporation | Software state replay |
US7472359B2 (en) * | 2004-12-03 | 2008-12-30 | University Of Massachusetts | Behavioral transformations for hardware synthesis and code optimization based on Taylor Expansion Diagrams |
US7386820B1 (en) * | 2004-12-10 | 2008-06-10 | Synopsys, Inc. | Method and apparatus for formally checking equivalence using equivalence relationships |
US7966610B2 (en) * | 2005-11-17 | 2011-06-21 | The Mathworks, Inc. | Application of optimization techniques to intermediate representations for code generation |
US8200807B2 (en) * | 2006-08-31 | 2012-06-12 | The Mathworks, Inc. | Non-blocking local events in a state-diagramming environment |
US7890903B2 (en) * | 2008-05-29 | 2011-02-15 | International Business Machines Corporation | Method and system for formal verification of an electronic circuit design |
US8296693B2 (en) * | 2009-02-25 | 2012-10-23 | Ati Technologies Ulc | Method and apparatus for hardware design verification |
-
2009
- 2009-09-24 US US12/586,724 patent/US8156457B2/en active Active
-
2010
- 2010-09-21 CN CN201080050911.5A patent/CN102687114B/zh active Active
- 2010-09-21 EP EP10819350.9A patent/EP2480967A4/en not_active Ceased
- 2010-09-21 WO PCT/US2010/049720 patent/WO2011037940A2/en active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1202972A (zh) * | 1995-10-03 | 1998-12-23 | 艾利森电话股份有限公司 | 生产数字信号处理器的方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2011037940A2 (en) | 2011-03-31 |
EP2480967A4 (en) | 2014-10-01 |
WO2011037940A3 (en) | 2011-07-21 |
CN102687114A (zh) | 2012-09-19 |
US20110072403A1 (en) | 2011-03-24 |
US8156457B2 (en) | 2012-04-10 |
EP2480967A2 (en) | 2012-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102687114B (zh) | 具有行为特征的硬件设计的并发仿真 | |
Lu et al. | Rtllm: An open-source benchmark for design rtl generation with large language model | |
US12001317B2 (en) | Waveform based reconstruction for emulation | |
CN101779179B (zh) | 管线电子电路设计中检测时钟门控机会的方法和装置 | |
US7865346B2 (en) | Instruction encoding in a hardware simulation accelerator | |
CN101231589B (zh) | 用于原位开发嵌入式软件的系统和方法 | |
US6553514B1 (en) | Digital circuit verification | |
CN102782651B (zh) | 硬件设计的混合式并发及串行逻辑仿真 | |
KR100329896B1 (ko) | 응용 주문형 집적 회로 설계 방법 | |
Flake et al. | Verilog HDL and its ancestors and descendants | |
CN101689216A (zh) | 压缩型电路仿真输出 | |
US10628543B1 (en) | Systems and methods for estimating a power consumption of a register-transfer level circuit design | |
US20080126066A1 (en) | Method for Modeling an HDL Design Using Symbolic Simulation | |
Sakib et al. | Formal verification of NCL circuits | |
Karmazin et al. | Timing driven placement for quasi delay-insensitive circuits | |
Gaber et al. | Improved automatic correction for digital VLSI circuits | |
US20100131910A1 (en) | Simulating Scan Tests with Reduced Resources | |
CN104636509A (zh) | 门级仿真中验证时序问题的方法 | |
Kroening et al. | Formal verification at higher levels of abstraction | |
CN112632890B (zh) | 用于数据变换组件的硬件设计的验证 | |
CN102788950B (zh) | 一种周期精确转换器及其集成电路验证方法和系统 | |
US10635766B2 (en) | Simulation employing level-dependent multitype events | |
Cadenas et al. | Experiences applying OVM 2.0 to an 8B/10B RTL design | |
US20060129368A1 (en) | Object-oriented interface to RTL model signals | |
Barraco | UVM Environment for RISC-V processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |