仿真中的X传播的制作方法

文档序号:11333707阅读:386来源:国知局
仿真中的X传播的制造方法与工艺

本公开通常涉及电路的仿真,更具体地涉及迅速识别数字系统的不可预测的行为。



背景技术:

已经开发了仿真器来协助电路设计者设计和调试高度复杂的集成电路。仿真器包括可以一起模拟待测设计(dut)的操作的多个可重新配置的组件,诸如现场可编程门阵列(fpga)。通过使用仿真器来模拟dut的操作,设计人员可以在制造之前验证dut符合各种设计要求。

仿真的一个方面包括识别dut的功能性。在一种方法中,识别dut的功能性涉及对dut进行仿真并分析来自被仿真dut的信号,以验证不正确的、不确定的或未知的操作。例如,在电源关闭或初始化不正确的情况下,未正确地终止dut中的寄存器或逻辑电路,并且这些寄存器或逻辑电路的状态变得未知。在dut的操作期间,未知状态可能导致不正确的逻辑运算,并且不正确的逻辑运算的结果可能进一步影响其他逻辑电路在整个dut中不正确地操作。

在常规方法中,数字信号以二进制状态(例如,高或低)来表示,并且识别dut的不正确或未知操作涉及执行dut的仿真,直到在dut的输出处检测到不恰当或不确定的结果。在高级过程(例如,22纳米(nm)及以下)中,dut可以包括数十亿个逻辑电路和信号。因此,识别dut的未知操作可能涉及由于未知状态而执行大量的数字逻辑运算直到在输出处传出不正确的逻辑运算,这可能是耗时的过程。结果,定位未知状态的源并对它们进行调试是低效的。

因此,需求一种用于在所执行的仿真周期方面以时间有效的方式识别dut的操作的不确定性的方法。

附图说明

所公开的实施例具有其他优点和特征,其从详细描述、所附权利要求和附图(或图)中将是更容易显而易见的。下面简要介绍一下这些附图。

图1是根据一个实施例的仿真环境的框图。

图2是图示出根据一个实施例的主机系统的框图。

图3是根据一个实施例的语义转换模块的框图。

图4a是根据一个语义表示的在仿真器上实现的信号的示例转换。

图4b是根据另一语义表示的在仿真器上实现的信号的另一示例转换。

图5是根据一个实施例的布尔逻辑电路的示例转换。

图6a是根据一个实施例的触发器的示例转换。

图6b是根据一个实施例的锁存器的示例转换。

图7是根据一个实施例的存储器电路的示例转换。

图8是图示出根据一个实施例的主机系统准备用于仿真被转换为表示数字信号的未知状态的待测设备(dut)的流程图。

图9图示出根据一个实施例在dut上执行的转换。

图10是图示出根据一个实施例的执行数字逻辑运算以基于信号状态来识别dut的未知操作的仿真器的流程图。

图11是图示出根据一个实施例的基于参考信号的确实状况和推测状况的触发器或锁存器的操作的流程图。

图12a是图示出根据一个实施例的由仿真器执行的存储器写入操作的流程图。

图12b是图示出根据一个实施例的由仿真器执行的存储器读取操作的流程图。

图13图示出了能够从机器可读介质读取指令并在处理器(或控制器)中执行它们的示例机器的组件的一个实施例。

具体实施方式

附图(图)和以下描述仅通过说明的方式与优选实施例相关。应当注意,从下面的讨论中,本文所公开的结构和方法的替代实施例将很容易被认为是在不脱离所要求保护的原理的情况下可以采用的可行替代方案。

现在将对若干个实施例进行详细参考,其示例在附图中图示出。附图仅仅为了说明的目的而描绘了所公开的系统(或方法)的实施例。从下面的描述中应当认识到,在不脱离本文所描述的原理的情况下,可以采用本文所图示的结构和方法的替代实施例。

配置概述

所公开的系统(和方法以及计算机程序产品)包括能够指示信号的未知状态并相应地执行数字逻辑运算以用于提高识别dut的不正确或未知操作的速度和性能的仿真环境。在所公开的系统(和方法以及计算机程序产品)中,通过以所公开的语义所表示的数字逻辑电路来指示和传播信号的未知状态,以便能够迅速识别dut的例如由于电源关闭或不恰当的初始化所引起的不正确的操作。

dut的不正确或未知操作是指由于dut的任何信号具有未知状态而使dut的输出与其预期输出相比变得未知或不正确的dut的操作。

仿真环境的一个实施例包括主机系统和仿真器。主机系统配置仿真器来加载待测设计(dut),并且仿真器相应地对dut进行仿真。主机系统根据转换规则来转换dut或dut的一部分,以实现dut的信号的未知状态的表示和未知状态的传播。dut中的信号和逻辑电路(组合的以及顺序的电路)被转换,使得输入信号的不确定性可以被携带至逻辑电路的输出上。在一个实施例中,信号和逻辑电路的转换在寄存器传送语言(rtl)级别处执行。可替代地,信号和逻辑电路的转换可以在栅/晶体管级别或任何其他级别处执行。

在一种方法中,主机系统将以两状态语义所表示的dut的数字信号的单个比特转换为在三或四状态语义(在本文中被称为“四状态语义”)中的至少两个比特,以实现未知状态的表示。在一个实现中,第一比特指示信号的可能的低状态或可能的高状态,第二比特指示信号的状态是已知的还是未知的。在另一实现中,第一比特指示可能的高状态,第二比特指示可能的低状态。在两种实现中,至少两个比特的组合实现信号的未知状态的表示。

此外,主机系统根据转换规则来转换布尔逻辑运算器,以基于以四状态语义所表示的输入信号来确定已转换的布尔逻辑运算器的输出以及输出的不确定性。当四状态语义中的输入信号的状态未知时,基于另一个输入信号的已知状态(例如,高或低)来确定已转换的布尔逻辑运算器的输出状态以及输出状态的确定性。因此,通过已转换的布尔逻辑运算器迅速地传播未知状态。

此外,主机系统根据转换规则来转换边缘运算器(例如,触发器),以使得边缘运算器能够利用推测转变进行操作,该推测转变包括在参考信号的状态中的从以四状态语义所表示的未知状态或到该未知状态的转变。本文中的推测转变是指在参考信号中的转变,该转变由于参考信号中的状态的不确定性而可能触发触发器的操作。例如,对于上升沿触发的触发器,当参考信号从低状态转变到未知状态或从未知状态转变到高状态时,发生推测转变。已转换的触发器基于参考信号的推测转变或确实转变(即,不是推测的)来生成输出信号。

另外,主机系统根据转换规则来转换锁存器,以使得锁存器能够利用具有以四状态语义所表示的未知状态的参考信号进行操作。已转换的锁存器基于具有确实状态(即已知状态)或未知状态的参考信号来生成输出信号。

此外,主机系统根据转换规则来转换存储器电路,以基于不明确的地址信号执行读取和写入操作。不明确的地址信号包括具有未知状态的至少一个比特。在利用所公开的语义的转换之后,具有未知状态的比特可以用两个或多个比特来表示。在一个方面中,已转换的存储器电路实现存储器指示符,其中每个存储器指示符与其对应内容以及由地址信号指示的其对应地址相关联。存储器指示符指示与存储器指示符相关联的对应内容的不确定性。

示例仿真环境

图1是图示出根据一个实施例的仿真环境100的框图。仿真环境100包括主机系统110和仿真器120。主机系统110通过接口115来与仿真器120进行通信。

主机系统110将仿真器120配置用于对dut进行仿真并且在dut的仿真期间与仿真器120通信。dut是要由仿真器120仿真的一个或多个电路设计。主机系统110可以是单个计算机或多个计算机的集合。

在一个实施例中,主机系统110从用户接收待仿真的dut的描述。dut的描述是以一种硬件描述语言(hdl)的类型,例如寄存器传送语言(rtl)。主机系统110将dut或dut的一部分进行转换以使得能够表示dut的信号的未知状态。优选地,主机系统110将传统的两状态语义中的信号转换为四状态语义以表示dut的信号的未知状态。此外,主机系统110转换包括但不限于布尔逻辑运算器、触发器、锁存器和存储器电路的数字逻辑电路,以使得能够利用以四状态语义表示的信号进行操作。

主机系统110基于根据四状态语义的已转换dut的hdl描述来创建门级网表。主机系统110使用门级网表对已转换的dut进行分区,并将每个分区映射到仿真器120中包括的一个或多个逻辑电路。主机系统110通过接口115将已转换的dut的门级描述在一个或多个比特流中传送到仿真器120。比特流可以包括已转换dut的门级逻辑的表示、分区信息、映射信息和用于配置仿真器120的设计约束。

在替代实施例中,主机系统110通过接口115将根据四状态语义的已转换dut的hdl描述发送到仿真器120。

在另一替代实施例中,主机系统110从用户接收门级逻辑中的dut的描述。此外,主机系统110根据四状态语义而将门级逻辑中的dut或dut的一部分进行转换以实现dut的信号的未知状态的表示。类似地,主机系统110将包括已转换dut的门级逻辑的表示的比特流发送到仿真器120。

在一种方法中,在块/ip级硬件组件中对dut的一部分进行预先定义。可替代地,用户能够选择要被转换成四状态语义的dut的一部分。此外,dut的一部分可以以两状态语义和四状态语义二者来表示,以同时并行地进行仿真以如实地保留期望的行为。

另外,在由仿真器120对dut进行仿真期间,主机系统110通过接口115接收来自仿真器120的仿真结果。仿真结果是由仿真器120基于dut的仿真而发送的信息。仿真结果包括描述在仿真期间dut中的多个信号的状态的信息。例如,仿真器120发送以四状态语义的仿真结果,并且主机系统110将来自仿真器120的仿真结果转换为两状态语义。在另一示例中,在对主机系统110进行发送之前,仿真器120将以四状态语义的仿真结果转换为两状态语义。

仿真器120是对dut进行仿真的硬件系统。仿真器120包括多个可配置的逻辑电路,它们可以一起对dut进行仿真。在一个实施例中,包括在仿真器120中的逻辑电路是现场可编程门阵列(fpga)。

对于待仿真的dut,仿真器120从主机系统110接收包括根据四状态语义的已转换dut的门级描述的一个或多个比特流,以表示dut中的信号的未知状态。比特流进一步描述了由主机系统110创建的dut的分区,分区到仿真器120的fpga的映射、以及设计约束。在替代实施例中,仿真器120接收包括已转换dut的hdl级别描述的比特流。基于比特流,仿真器120配置fpga以执行dut的功能。

仿真器120对根据四状态语义的已转换dut进行仿真,以表示dut中的信号的未知状态。基于仿真,仿真器120生成仿真结果,所述仿真结果被发送到主机系统110以用于分析。

接口115是允许主机系统110和仿真器120之间的通信的通信介质。在一个实施例中,接口115是具有电连接的电缆。例如,接口115可以是rs232、usb、lan、光学或定制电缆。在其它实施例中,接口115是无线通信介质或网络。例如,接口115可以是采用或ieee802.11协议的无线通信介质。

图2是根据一个实施例的更详细地图示主机系统110的框图。主机系统110包括设计编译器210、fpga映射模块220、运行时模块230、语义转换模块240和存储装置250。这些组件中的每一个组件可以被实施为硬件、软件、固件或其组合。这些组件一起提供了用于配置仿真器120并且基于信号的未知状态来监控仿真结果的设计。

在一个实施例中,设计编译器210将dut的hdl转换为门级逻辑。对于待仿真的dut,设计编译器210接收hdl(例如,rtl或其他抽象级)的dut的描述。设计编译器210合成dut的hdl以根据门级逻辑来创建具有dut描述的门级网表。

映射模块220对dut进行分区并将分区映射到仿真器组件。在设计编译器210创建门级网表之后,映射模块220使用网表来将在门级处的dut分成多个分区。映射模块220将每个分区映射到仿真器120的一个或多个fpga。映射模块220使用设计规则、设计约束(例如,定时或逻辑约束)以及关于仿真器120的信息来执行分区和映射。对于每个分区,映射模块220生成描述分区中包括的逻辑电路以及到仿真器120的一个或多个fpga的映射的比特流。比特流还可以包括关于组件之间的连接的信息和其他设计信息。映射模块220将比特流发送到仿真器120,使得仿真器120的fpga可以被配置用于对dut进行仿真。

运行时模块230控制在仿真器120上执行的仿真。运行时模块230可以使仿真器120开始或停止执行仿真。另外,运行时模块230可以向仿真器120提供输入信号/数据。输入信号可以通过接口115直接提供给仿真器120,或通过其它输入信号设备间接提供给仿真器120。例如,具有运行时模块230的主机系统110可以控制诸如测试板的输入信号设备、信号发生器或电源,以将输入信号提供给仿真器120。

在一个实施例中,运行时模块230可以从仿真器120接收仿真结果。在一个实现中,运行时模块230接收以两状态语义和/或四状态语义的仿真结果。运行时模块230还可以将接收到的仿真结果转换为四状态语义或两状态语义。

存储装置250是用于保存被用来配置仿真器120以加载dut的信息或者关于在仿真器120上执行的dut的仿真的信息的贮存库。存储装置250包含hdl和网表描述中的至少一个中的以两状态语义和/或四状态语义表示的dut或dut的一部分。此外,存储装置250包含设计规则、设计约束(例如,定时或逻辑约束)以及由映射模块220用来进行映射的有关仿真器120的信息以及从映射生成的比特流。此外,存储装置250包含将由语义转换模块240使用的转换规则。另外,存储装置250存储从仿真器120接收的仿真结果。

语义转换模块240根据转换规则来转换dut以表示dut的信号的未知状态。语义转换模块240执行信号的转换以实现未知状态的表示。另外,语义转换模块240转换包括但不限于布尔逻辑运算器、触发器、锁存器和存储器电路的逻辑电路,以便可利用信号的未知状态的表示而操作,如关于图4到图7所详细描述的。可以根据转换规则对整个dut或dut的一部分执行语义转换。

参考图3,其图示出了根据一个实施例的语义转换模块240的详细框图。在一个实施例中,语义转换模块240包括信号转换模块310、布尔逻辑转换模块320、触发器转换模块330、锁存器转换模块335和存储器电路转换模块340。信号转换模块310以能够表示未知状态的格式对dut的信号进行转换。此外,布尔逻辑转换模块320转换dut的布尔逻辑电路,以使得能够利用具有未知状态的信号进行逻辑操作。另外,触发器转换模块330转换dut的触发器,以使得触发器能够基于由于参考信号的未知状态引起的参考信号的推测转变进行操作。此外,锁存器转换模块335转换dut的锁存器以使得能够利用具有未知状态的参考信号进行锁存操作。此外,存储器电路转换模块340转换dut的存储器电路以基于包含具有未知状态的至少一个比特的不明确地址信号而可操作。这些组件一起将dut或dut的一部分转换成四状态语义,以实现未知状态的信号的表示和未知状态的传播。

信号转换模块310将以两状态语义所表示的dut的数字信号进行转换,以使得能够表示信号的未知状态。信号以一个或多个比特来表示。单个比特由寄存器或另一个逻辑电路的输出来表示。每个比特都具有二进制状态,诸如高状态(在本文中也称为逻辑1、vdd和真)和低状态(在本文中称为逻辑0、gnd和假)。信号转换模块310实现至少两个比特,以用于表示两状态语义中的一个比特以表示未知状态(在本文中也称为逻辑x、不清楚和不确定)。优选地,信号转换模块310实现两个比特,以用于表示两状态语义中的信号的一个比特的未知状态。在一种方法中,通过使用在两状态语义中使用的基本电路或逻辑块来实现语义转换,如关于图4到图7所详细描述的。

在图4a中,图示出了由信号转换模块310执行的信号转换400a的一个示例实施例。在这个示例中,在两状态语义中使用寄存器405以单个比特来表示信号410。根据信号转换400a,使用附加寄存器的附加比特被实现以在四状态语义中表示信号410。在一个方面中,实现第一寄存器405a以表示比特信号_bin410a,用于指示信号410的可能的低状态或可能的高状态。另外,实现第二寄存器405b以表示比特信号_x410b,用于指示信号的状态是已知的还是未知的。在这种四状态语义中,当比特信号_x410b处于低状态(例如,信号410的状态是已知的)时,信号410的状态如比特信号_bin410a所指示。在比特信号_x410b处于高状态(例如,信号410的状态是未知的)的情况下,信号410被表示为具有未知状态。可以根据下面的示例verilog码来实现信号转换400a。

表1示出了信号转换中的一种方法,如关于图4a所解释的。

在图4b中图示出了由信号转换模块310执行的信号转换400b的另一示例实施例。根据信号转换400b,使用附加寄存器的附加比特被实现来以四状态语义表示信号410。在该方法中,第一寄存器405c被实现以表示用于指示信号410的可能的高状态的比特信号_高_可能410c。另外,第二寄存器405d被实现以表示用于指示信号410的可能的低状态的比特信号_低_可能410d。在这个四状态语义中,当比特信号_高_可能410c和信号_低_可能410d均处于高状态时,信号410被表示为具有未知状态。当比特信号_高_可能410c处于高状态并且比特信号_低_可能410d处于低状态时,信号410被表示为具有高状态。类似地,当比特信号_高_可能410c处于低状态且比特信号_低_可能410d处于高状态时,信号410被表示为具有低状态。当比特信号_高_可能410c和信号_低_可能410d均处于低状态时,信号410可被表示为具有未知状态或未分配状态(即不影响逻辑运算)。可以根据下面的示例verilog码来实现信号转换400b。

表2示出了信号转换中的另一种方法,如关于图4b所解释的。

在图5中,图示出了由布尔逻辑转换模块320执行的布尔逻辑转换500的示例实施例。布尔逻辑转换模块320根据转换规则转换布尔逻辑运算器,以基于具有未知状态的输入信号来确定已转换的布尔逻辑运算器的输出以及输出的不确定性。

作为图5中所图示的示例,布尔逻辑转换500将布尔逻辑运算器505a变换成已转换的布尔逻辑运算器505b,用于利用具有未知状态的信号执行逻辑运算。在这个示例中,在两状态语义中的布尔逻辑运算器505a基于输入信号510和520来执行布尔逻辑运算以生成输出信号530,其中每个信号以单个比特来表示。执行布尔逻辑转换500,使得布尔逻辑运算器505b接收输入信号510和520,并且在四个状态语义的任何一个中生成输出信号530,如关于图4a和图4b所解释的。根据信号转换400a和400b(在本文中称为信号转换器400)中的任何一个,输入信号510用输入比特510a、510b表示,输入信号520用输入比特520a、520b表示,并且输出信号530用输出比特530a、530b表示。为了简洁起见,图5中的布尔逻辑转换500在具有两个输入信号510和520的布尔逻辑运算器505a上执行。然而,布尔逻辑转换500可以在具有多于两个输入信号的其他逻辑电路上执行,以确定一个或多个输出信号的状态和该一个或多个输出信号的不确定性。

布尔逻辑运算器505b基于输入信号510和520的状态来确定输出信号530的状态和输出信号530的状态的不确定性。例如,在布尔逻辑运算器505a为“与”(and)或“与非”(nand)逻辑并且输入信号510的状态是未知的情况下,响应于输入信号520具有高状态,输出信号530被确定为是未知的。在另一示例中,在布尔逻辑运算器505a为“或”(or)或“或非”(nor)逻辑并且输入信号510的状态是未知的情况下,响应于输入信号520具有低状态,输出信号530被确定为是未知的。在另一示例中,在布尔逻辑运算器505a是xor、xnor、xand或xnand逻辑的情况下,响应于输入信号510和520中的任何一个具有未知状态,输出信号530被确定为是未知的。以这种方式,未知状态可以通过已转换的布尔逻辑运算器505b而被传播。可以根据下面的示例verilog码来实现and逻辑的布尔逻辑转换500。

表3示出了根据四种状态语义的and逻辑的示例转换。

在图6a中,图示出了由触发器转换模块330所执行的触发器转换600的示例实施例。在两状态语义中的触发器605a基于参考信号620的上升沿或下降沿以及在参考信号620的状态转变之前接收的输入信号610来生成输出信号630,其中每个信号以单个比特来表示。触发器转换模块330根据转换规则来转换触发器605a,使得已转换的触发器605b可利用具有未知状态的信号以及参考信号620中的推测转变而操作。

触发器转换600被执行,使得触发器605b接收输入信号610和参考信号620,并且在四个状态语义中的任何一个中生成输出信号630,如关于图4a和图4b所解释的。根据信号转换400,输入信号610用输入比特610a、610b表示,参考信号620用参考比特620a、620b表示,输出信号630用输出比特630a、630b表示。

在信号被转换以表示未知状态的情况下,参考信号620可以从未知状态转变或转变到该未知状态,由此引起具有上升沿或下降沿的推测转变。作为示例,对于上升沿触发的触发器605b,对于参考信号620从低状态到未知状态(即,[0x])或从未知状态到高状态(即,[x1])的转变,可能发生推测转变。类似地,对于下降沿触发的触发器605b,对于参考信号620从高状态到未知状态(即,[1x])或从未知状态到低状态(即,[x0])的转变,可能发生推测转变。

在一个方面中,对于正沿触发的触发器605b,已转换的触发器605b使用寄存器或逻辑电路的输出来实现转变状态比特650,以用于确定参考信号620从低状态到未知状态的推测转变。在根据图4a的信号转换400a来对信号进行转换的情况下,通过对与指示参考信号620的可能低状态的参考信号_bin相对应的参考比特620a和与指示参考信号620的状态已知的参考信号_x相对应的参考比特620b执行and运算来获得转变状态比特650。(例如,转换状态比特=(!参考信号_bin)&(!参考信号_x)=!(参考信号_bin|参考信号_x))。在参考信号620从低状态转变为未知状态的情况下(即,当转换状态比特650为高状态时,参考信号_x变为高),转变状态比特650的状态转变为低状态。因此,检测到转变状态比特650的下降沿之后跟随处于未知状态中的参考信号620,使得能够检测参考信号620从低状态到未知状态的转变。

对于正沿触发的触发器605b,由于参考信号620从未知状态转变到高状态(即,[x1]),可能发生参考信号620的另一推测转变。在一种方法中,通过检测到参考信号_x的下降沿之后跟随处于高状态中的参考信号_bin来实现确定参考信号620从未知状态到高状态的转变。

一旦检测到参考信号620的推测转变,则触发器605b可以更新输出信号630的状态。在一个方面中,响应于检测到推测转变,可以将不确定性延续到输出信号630上。在推测转变的情况下,基于在推测转变之前的输出信号630的状态和输入信号610的状态来确定输出信号630的当前状态。

在一种方法中,可以将输出信号630的当前状态确定为在推测转变之前的输出信号630的状态和输入信号610的状态的组合(例如,{q}=merge_emul(q,d)或{q_bin,q_x}<=merge_emul(q_bin,q_x,d_bin,d_x),其中q是触发器的输出,d是触发器的输入)。例如,如果在推测转变之前触发器605b的输出信号630和触发器605b的输入信号610处于相同状态,那么在推测转变之后保持触发器605b的输出信号630。因此,当在推测转变之前的输出信号630和输入信号610处于相同状态时,参考信号620的推测转变不影响输出信号630。如果在推测转变之前的触发器605b的输出信号630和输入信号610处于不同状态,则触发器605b的输出信号630变得未知。

除了推测转变之外,触发器605b基于参考信号620的确实转变来操作。在一个方面中,对于正沿触发的触发器605b,确定参考信号620的确实转变是基于转变状态比特650。例如,通过检测到转变状态比特650的下降沿之后跟随处于已知状态(例如,高状态)中的参考信号620,来确定参考信号620的正沿,使得能够检测参考信号620从低状态到高状态(即[01])的转变。

触发器转换600的一个实施例可以根据下面的示例verilog码来实现。

表4示出了根据四种状态语义之一的触发器的示例转换。

在图6b中,图示出了由锁存器转换模块335执行的锁存器转换660的示例实施例。在两状态语义中的锁存器665a基于参考信号620的状态来生成输出信号630,其中每个信号以单个比特来表示。锁存器转换模块335根据转换规则来转换锁存器665a,使得已转换的锁存器665b可利用具有未知状态的信号而操作。

执行锁存器转换660,使得锁存器665b接收输入信号610和参考信号620,并且在四个状态语义的任一个中生成输出信号630,如关于图4a和图4ba所解释的。根据信号转换400,输入信号610用输入比特610a、610b表示,参考信号620用参考比特620a、620b表示,输出信号630用输出比特630a、630b表示。除了锁存器665b基于参考信号620的状态而不是基于参考信号620的状态的转变来操作、并且可能不实现转变状态比特之外,锁存器665b的操作类似于触发器605b。

如果参考信号620的状态未知,则锁存器665b可以更新输出信号630的状态。在一个方面,响应于检测到参考信号620具有未知状态,可以将不确定性转移到输出信号630上。在参考信号620或输入信号610具有评估状态(例如,可能的高状态)的情况下,锁存器665b执行评估。当参考信号620或输入信号610具有评估状态时,可以连续地或离散地评估锁存器665b的输出。在评估期间参考信号620的状态未知的情况下,可以基于输入信号610的状态和在评估之前接收的输出信号630的状态来确定输出信号630的当前状态。

在一种方法中,可以将输出信号630确定为在评估之前输入信号610的状态和输出信号630的状态的组合(例如,{q}<=merge_emul(q,d)或{q_bin,q_x}<=merge_emul(q_bin,q_x,d_bin,d_x),其中q是锁存器的输出,d是锁存器的输入)。例如,如果在评估之前的锁存器665b的输入信号610和输出信号630处于相同的状态,则保持锁存器665b的输出信号630。因此,当评估之前的输入信号610和输出信号630处于相同状态时,具有未知状态的参考信号620不影响输出信号630。如果在评估之前的锁存器665b的输入信号610和输出信号630处于不同的状态,则锁存器665b的输出信号630变得未知。

锁存器665b还基于参考信号620的确实状态进行操作。例如,响应于检测到参考信号620的评估状态,当参考信号620处于评估状态时,根据输入信号610来更新输出信号630。

锁存器转换660的一个实施例可以根据以下示例verilog码来实现。

表5示出了根据四种状态语义之一的锁存器的示例转换。

在图7中,图示出了由存储器电路转换模块340执行的存储器电路转换700的示例实施例。在两状态语义中的存储器电路705a基于地址信号710和控制信号730来执行读取和写入操作。对于写入操作,输入信号720被存储在存储器电路705a中,并且对于读取操作,基于存储在存储器电路705a中的内容来生成输出信号770。存储器电路转换模块340根据转换规则来转换存储器电路705a,使得已转换的存储器电路705b可利用具有未知状态的信号以及不明确地址信号710而操作。

在两状态语义中的存储器电路705a包括用于存储所接收的输入信号720的内容760(0)、760(1)...760(n)(通常在本文中被称为内容760)。每个内容760与来自地址740(0)、740(1)...740(n)(通常在本文中被称为地址740)的对应地址740相关联。控制信号730指示是否执行读取操作或写入操作。对于写入操作,将输入信号720存储在与由地址信号710指示的对应地址740相关联的内容760中。对于读取操作,基于与由地址信号710指示的对应地址740相关联的内容760生成输出信号770。

在一个实现中,存储器电路转换700将存储器电路705a转变成已转换的存储器电路705b,以可利用具有未知状态的信号而操作。执行存储器电路转换700使得存储器电路705b接收地址信号710、输入信号720和控制信号730,并且在四个状态语义的任何一个中生成输出信号770,如关于图4a和图4b所解释的。在一个方面中,每个信号以一个或多个比特来表示。根据信号转换400,地址信号710中的每个比特用地址比特710a、710b表示,输入信号720中的每个比特用输入比特720a、720b表示,控制信号730中的每个比特用控制比特730a、730b表示,以及输出信号770中的每个比特用输出比特770a、770b表示。

在信号被转换以表示未知状态的情况下,地址信号710可能变得不明确。优选地,地址信号710以多个比特表示。当至少一个比特未知时,地址信号710变得不明确。例如,在地址信号710以三个比特表示并且包含未知状态[1x1]的情况下,地址信号710可以是指地址[101]或[111],使得与该不明确的地址信号710相关联的内容760呈现是未知的。

在一个方面中,已转换的存储器电路705b实现存储器指示符750(0)、750(1)...750(n)(通常在本文中被称为存储器指示符750),以指示与对应地址740相关联的内容760是未知的。每个存储器指示符750与对应地址740和对应内容760相关联。优选地,每个存储器指示符750以单个比特来实现。

为了执行写入操作,当地址信号710是不明确时,存储器电路705b根据地址信号710识别两个或更多候选地址740。与由地址信号710指示的候选地址740相关联的存储器指示符750被激活(例如,被设置为高状态)以表示与存储器指示符750相关联的对应内容760是未知的。优选地,省略(或绕过)将输入信号720存储在与存储器指示符750相关联的对应内容760中。例如,地址信号710在[1x1]的情况下可以是不明确的,并且存储器电路705b将[101]和[111]识别为候选地址。此外,存储器电路705b激活与对应于[101]和[111]的候选地址相关联的存储器指示符750,以指示与候选地址[101]和[111]相关联的内容是未知的。

在地址信号710是确实的(即,不是不明确的)且输入信号720是未知的情况下,与由地址信号710指示的地址740相关联的存储器指示符750被激活。类似地,可以省略(或绕过)将具有未知状态的输入信号720存储在与存储器指示符750相关联的对应内容760中。

为了执行读取操作,当地址信号710是不明确时,在一个实施例中,存储器电路705b生成具有未知状态的输出信号770,并且绕过读取任何内容760。在一个实现中,存储器电路705b根据地址信号710识别两个或更多候选地址740。在另一实现中,存储器电路705b根据地址信号710省略识别候选地址740。

此外,对于执行读取操作,在地址信号710是确实的(即,不是不明确的)并且与由地址信号710指示的对应地址740相关联的存储器指示符750被激活的情况下,存储器电路705b生成具有未知状态的输出信号770,并绕过读取任何内容760。

存储器电路705b还利用已知状态中的信号执行读取和写入操作。对于写入操作,存储器电路705b将输入信号720存储在与由地址信号710指示的对应地址740相关联的内容760中。对于读取操作,存储器电路705b基于与由地址信号710指示的对应地址740相关联的内容760来生成输出信号770。

通过以单个比特指示与存储器指示符750相关联的内容760的确定性,可以提高读取和写入操作速度。优选地,内容760包括在存储器电路705b中的多个比特,因此执行读取和写入操作可能伴随着高时延。结果,避免对不明确的地址信号710或不明确的输入信号720的实际的读取和写入操作允许了存储器电路705b的更快的读取和写入操作。

在一个方面中,所有存储器指示符750在存储器电路705b的初始化期间被激活,以指示所存储的所有内容760是未知的。因此,在没有确实的存储器分配(即,具有确实的地址信号710和已知的输入信号720的写入操作)的情况下,一个或多个存储器指示符750保持被激活。优选地,在确实的存储器分配之后,存储器指示符750被去激活(例如,被设置为低状态)。因此,可以容易地识别未初始化的存储器地址,以促进严格的设计实践。

有益地,根据四状态语义来对信号进行初始化可以代表未知值的族,从而代替特定的单个分配。因此,可以暴露dut的未知操作,而执行特定值分配的随机初始化方法可能不会导致问题表现。

表示信号的未知状态并传播未知状态可以实现在识别dut的不正确或未知操作(例如由于电源关闭或不正确的初始化引起)时的速度改善。在最近的工艺(例如,22nm及以下)中实现了数十亿个逻辑电路的情况下,可以在100万个仿真周期中实现识别在两状态语义中的dut的不正确或未知操作。相比之下,利用以四状态语义表示信号的未知状态并传播未知状态的能力,可以在1000个仿真周期内实现识别dut的不正确或未知操作。

另外,四状态语义中的dut可以用常规数字电路块来实现,而无需采用定制的模拟/混合信号电路(例如,三态缓冲器)。因此,可以以相对低的成本来实现dut的转换。此外,当在两状态逻辑中无缝地实现dut的一部分时,可以在四状态逻辑中实现dut的另一部分。

此外,可以识别引起故障的dut的ip/块级硬件组件。因为dut的一部分可以被转换成四状态语义,所以可以进一步检查由用户选择的预定义的ip/块级组件或区域或逻辑电路,以便在仿真周期的数量方面更加快速地分离出问题的根本原因。因此,用于在四状态语义中实现dut的一部分的硬件资源保持在不会使仿真器120过载的合理水平处。

图8是图示出根据一个示例实施例的主机系统110准备被转换为表示数字信号的未知状态的待测设备(dut)以用于仿真的流程图。其他实施例可以以不同的顺序来执行图8的步骤。此外,其他实施例可以包括与这里所描述的不同的和/或附加的步骤。

主机系统110从用户获得810hdl中的dut的描述。主机系统110对dut进行转换820以表示信号的未知状态。主机系统110将已转换dut的hdl描述进行合成830以创建门级网表。在另一实施例中,代替在合成之前对dut进行转换,在合成dut的hdl描述之后对dut进行转换。

主机系统110使用门级网表来以门级将dut分区840成多个分区。主机系统110将每个分区映射850到仿真器120的一个或多个fpga。

在图9中,图示出了由主机系统110执行的dut的转换820。主机系统110以能够表示信号的未知状态的形式、根据转换规则来转换910信号。在一个方面中,通过针对信号中的每个比特实现至少两个比特,将信号转换成四状态语义。此外,主机系统110根据转换规则转换920布尔逻辑运算器505a,以基于表示未知状态的输入信号510来确定已转换的布尔逻辑运算器505b的输出信号530以及输出信号530的不确定性。此外,主机系统110根据转换规则来转换930触发器605a。已转换的触发器605b可利用包括参考信号620的状态从未知状态的转变或到未知状态的转变的推测转变而操作。此外,主机系统110根据转换规则来转换935锁存器665a。已转换的锁存器665b可利用具有未知状态的参考信号620而操作。此外,主机系统110根据转换规则来转换940存储器电路705a。已转换的存储器电路705b可利用不明确的地址信号710或包含具有未知状态的至少一个比特的不明确的输入信号720而操作。

在图10中,图示出了根据一个实施例的仿真器120执行数字逻辑运算以基于信号状态识别dut的未知操作的流程图。优选地,被主机系统110以能够表示dut中的信号的未知状态的形式来转换dut。其他实施例可以以不同的顺序来执行图10的步骤。此外,其他实施例可以包括与这里所描述的不同的和/或附加的步骤。此外,其他实施例可以省略这里所描述的某些步骤。

在初始化步骤中,将dut中的信号初始化为1010或设置为未知状态。例如,在存储器电路705b中,存储器指示符750被激活以指示存储器电路705b中的内容760是未知的。此外,其他信号或逻辑电路的状态可以被初始化为未知状态。在初始化步骤期间或在电源关闭之后打开dut期间,dut的所有信号或信号的子集将被分配为具有未知状态。

仿真器120将具有已知状态的输入信号应用1020于dut。输入信号的一部分可以具有未知状态。仿真器120基于输入信号来执行1030数字逻辑运算,并且基于执行1030的数字逻辑运算来确定1040信号状态。数字逻辑运算的结果可以被用来执行附加的数字逻辑运算,从而可以针对dut的不正确或未知的操作而传播未知状态。仿真器120可以在具有已更新的输入信号的另一个仿真周期中继续1050仿真至少预定数量的周期。

对于正确设计的dut,dut被预期将从例如由于电源关闭而具有未知状态的信号中恢复。因此,dut的输出被预期在预定数量的周期之后具有良好定义的状态。可以通过设计选择或通过dut的仿真来获得预定数量的周期。在对dut仿真了至少预定数量的周期之后,监控dut的输出,并且可以基于输出信号来确定1060dut的未知操作。

参考图11,图示出了根据一个实施例的仿真器120操作触发器605b或锁存器665b的流程图。优选地,触发器605b或锁存器665b以能够表示dut中的信号的未知状态的形式由主机系统110转换。因此,触发器605b可利用参考信号620中的推测转变而操作,并且锁存器665b可利用具有未知状态的参考信号620而操作。其他实施例可以以不同的顺序执行图11的步骤。此外,其他实施例可以包括与这里所描述的不同的和/或附加的步骤。此外,其他实施例可以省略这里所描述的某些步骤。

触发器605b或锁存器665b接收1110输入信号610和参考信号620。在一种方法中,输入信号610和参考信号620以四状态语义表示。

触发器605b或锁存器665b监控1120推测状况。对于触发器605b,推测状况可以是参考信号620中的推测转变。对于锁存器665b,如果参考信号620或输入信号610具有评估状态(例如,可能的高状态),推测状况可以是具有未知状态的参考信号620。在一个方面中,响应于检测到推测状况,触发器605b或锁存器665b基于推测状况之前的输入信号610和输出信号630生成1150输出信号。因此,可以将不确定性转移到输出信号630上。

此外,触发器605b或锁存器665b监控1140参考信号620中的确实状况。对于正沿触发的触发器605b,确实状况可以是参考信号620从低状态转变到高状态。对于锁存器665b,确实状况可以是具有评估状态(例如,高状态)的参考信号620。对于触发器605b,如果检测到参考信号620的确实状况,则触发器605b基于参考信号620的确实转变之前的输入信号610来生成1160输出信号630。对于锁存器665b,如果检测到参考信号620的确实状况,则锁存器665b基于当参考信号620具有确实评估状态时所接收的输入信号610来生成1160输出信号630。

如果参考信号620的推测状况和确实状况都没有被检测到,则触发器605b或锁存器665b保持1170输出信号630。

参考图12a和图12b,图示出了根据一个实施例的仿真器120操作存储器电路705b的流程图。优选地,存储器电路705b以能够表示dut中的信号的未知状态的形式由主机系统110转换。因此,存储器电路705b可利用不明确的地址信号710而操作。其它实施例可以以不同的顺序执行图12a和图12b的步骤。此外,其他实施例可以包括与这里所描述的不同的和/或附加的步骤。此外,其他实施例可以省略这里所描述的某些步骤。

图12a图示出了根据一个实施例的仿真器120对存储器电路705b执行写入操作。存储器电路705b接收1210输入信号720和地址信号710。存储器电路705b确定1220输入信号720或地址信号710是否是不明确的。响应于确定输入信号720和地址信号710是确实的,存储器电路705b将输入信号720存储1235在与由地址信号710指示的地址740相关联的内容760中。响应于确定输入信号720和地址信号710中的至少一个是不明确的,存储器电路705b用存储器指示符750来指示1230:与由地址信号710指示的地址740相关联的内容760是未知的。在一个示例中,存储器电路705b根据地址信号710识别候选地址740。在一种方法中,存储器指示符750被激活以指示内容760是未知的,并且优选地,省略了将输入信号720存储在内容760中。

图12b图示出了根据一个实施例的仿真器120对存储器电路705b执行读取操作。存储器电路705b接收1250地址信号710,并且存储器电路705b确定1260地址信号710是否是不明确的。响应于确定地址信号710是不明确的,存储器电路705b生成具有未知状态的输出信号770。优选地,省略(或绕过)内容760的实际读取。

响应于确定地址信号710是确实的,存储器电路705b确定1270与由地址信号710指示的地址740相关联的内容760是否是未知的。在一种方法中,存储器电路705b检查与内容760相关联并与地址740相关联的存储器指示符750,以确定内容760是否是未知的。例如,如果存储器指示符750被激活,那么内容760被确定为是未知的。此外,响应于确定内容760是未知的,存储器电路705b生成1290具有未知状态的输出信号770。优选地,省略(或绕过)内容760的实际读取。

响应于确定内容760是已知的,存储器电路705b基于与由地址信号710指示的地址740相关联的内容760生成1280输出信号770。

计算机器架构

现在转到图13,其图示出了能够从机器可读介质读取指令并在处理器(或控制器)中执行它们的示例机器的组件的框图。具体地,图13以计算机系统1300的示例形式示出了机器的示意表示,在其中用于使机器进行(执行)利用图1-图12所描述的任何一个或多个方法的指令1324(例如,软件或程序代码)。计算机系统1300可以用于在图1的仿真环境100中图示出的一个或多个实体(例如,主机系统110,仿真器120)。

示例计算机系统1300包括硬件处理器1302(例如,中央处理单元(cpu)、图形处理单元(gpu)、数字信号处理器(dsp)、一个或多个专用集成电路(asic)、一个或多个射频集成电路(rfic)或这些的任何组合)、主存储器1304和静态存储器1306,其被配置为经由总线1308彼此通信。处理器1302可以包括一个或多个处理器。计算机系统1300还可以包括图形显示单元1310(例如等离子体显示面板(pdp)、液晶显示器(lcd)、投影仪或阴极射线管(crt))。计算机系统1300还可以包括字母数字输入设备1312(例如键盘)、光标控制设备1314(例如鼠标、轨迹球、操纵杆、运动传感器或其他指向仪器)、存储单元1316、信号生成设备1318(例如扬声器)和网络接口设备1320,其也被配置为经由总线1308进行通信。

存储单元1316包括机器可读介质1322,其上存储了体现本文所描述的任何一个或多个方法或功能的指令1324(例如,软件)。在指令由计算机系统1300执行期间,指令1324(例如,软件)也可以完全地或至少部分地驻留在主存储器1304内或处理器1302内(例如,在处理器的高速缓存存储器内),主存储器1304和处理器1302也构成机器可读介质。可以经由网络接口设备1320通过网络1326发送或接收指令1324(例如,软件)。

虽然在示例性实施例中将机器可读介质1322示出为单个介质,但是术语“机器可读介质”应被认为包括能够存储指令(例如,指令1324)的单个介质或多个介质(例如,集中式或分布式数据库,或相关联的高速缓存和服务器)。术语“机器可读介质”还应被认为包括能够存储指令(例如,指令1324)以供机器执行并且使机器执行本文公开的任何一个或多个方法的任何介质。术语“机器可读介质”包括但不限于固态存储器、光学介质和磁介质形式的数据贮存库。

如本领域中已知的,计算机系统1300可以具有与图13所示出的不同的和/或其他组件。此外,计算机系统1300可以缺少某些所示出的组件。例如,用作仿真器120的计算机系统1300可以包括硬件处理器1302、存储单元1316、网络接口设备1320以及多个可配置逻辑电路(如上面参考图1所描述的)以及其他组件,但是可以缺少字母数字输入设备1312和光标控制设备1314。

其他配置考虑

注意,虽然在用于仿真数字电路和系统的仿真环境的上下文中描述了主题,但是所描述的原理可以被应用于任何数字电子设备的分析。所公开的配置的优点包括以能够表示未知状态的形式变换信号和数字逻辑电路。以这种方式,可以将未知状态传播到其他逻辑电路,因此可以以计算有效的方式识别例如由于电源关闭或不正确的初始化而造成的dut的不正确或未知操作。此外,虽然本文的示例是在仿真环境的上下文中,但是本文所描述的原理可以应用于数字电路的硬件实现的其他分析,包括fpga和asic或诸如eda的软件仿真。

在整个说明书中,多个实例可以实现被描述为单个实例的组件、操作或结构。虽然一个或多个方法的个体操作被图示出和描述为分离的操作,但是可以并行地执行一个或多个个体操作,并且不需要以所图示出的顺序执行操作。作为示例配置中的分离组件而呈现的结构和功能可以被实现为组合结构或组件。类似地,作为单个组件而呈现的结构和功能可以被实现为分离的组件。这些和其他变型、修改、添加和改进落入本文主题的范围内。

某些实施例在本文中被描述为包括逻辑或多个组件、模块或机制,例如如图1-图12所图示的。模块可以构成软件模块(例如,在机器可读介质上或在传输信号中体现的代码)或硬件模块。硬件模块是能够执行某些操作的有形单元并且可以以某种方式被配置或布置。在示例实施例中,一个或多个计算机系统(例如,独立的计算机系统、客户端计算机系统或服务器计算机系统)或者计算机系统的一个或多个硬件模块(例如,处理器或一组处理器)可以由软件(例如,应用或应用部分)配置为操作以执行如本文所描述的某些操作的硬件模块。

在各种实施例中,硬件模块可以被机械地或电子地实现。例如,硬件模块可以包括被永久配置(例如,作为诸如现场可编程门阵列(fpga)或专用集成电路(asic)的专用处理器)来执行某些操作的专用电路或逻辑。硬件模块还可以包括由软件临时配置来执行某些操作的可编程逻辑或电路(例如,包含在通用处理器或其他可编程处理器内)。应当理解,在专用和永久配置的电路中或在(例如,由软件配置的)临时配置的电路中机械地实现硬件模块的决定可以由成本和时间考虑来驱动。

可以至少部分地由一个或多个处理器例如处理器1302来执行本文所描述的示例方法的各种操作,所述处理器被临时配置(例如由软件)或被永久配置来执行相关操作。无论是临时还是永久配置,此类处理器可以构成操作为执行一个或多个操作或功能的处理器实现的模块。在一些示例实施例中,本文所指代的模块可以包括处理器实现的模块。

一个或多个处理器还可以操作为支持“云计算”环境中的相关操作的执行或作为“软件即服务”(saas)。例如,至少一些操作可以由一组计算机(作为包括处理器的机器的示例)执行,这些操作可以经由网络(例如,因特网)以及经由一个或多个适当的接口(例如,应用程序接口(api))进行访问。

某些操作的执行可以分布在一个或多个处理器中,不仅驻留在单个机器内,而且部署在多个机器上。在一些示例实施例中,一个或多个处理器或处理器实现的模块可以位于单个地理位置(例如,在家庭环境、办公室环境或服务器群组内)。在其他示例实施例中,一个或多个处理器或处理器实现的模块可以分布在多个地理位置。

在机器存储器(例如,计算机存储器)内存储为比特或二进制数字信号的数据上的操作的算法或符号表示方面,呈现本说明书的一些部分。这些算法或符号表示是数据处理领域中的普通技术人员用于将其工作的实质传达给本领域其他技术人员的技术的示例。如本文所使用的,“算法”是导致期望结果的自我一致的操作序列或类似的处理。在这种上下文中,算法和操作涉及物理量的物理操纵。通常但不是必定的,这样的量可以采取能够被机器存储、访问、传送、组合、比较或以其他方式操纵的电、磁或光信号的形式。有时,主要是出于公共使用的原因,使用诸如“数据”、“内容”、“比特”、“值”、“元素”、“符号”、“字符”“项”、“数字”、“数”等。然而,这些词仅仅是方便的标签,并且与适当的物理量相关联。

除非另有说明,否则本文中使用诸如“处理”、“计算”、“运算”、“确定”、“呈现”、“显示”等等之类的词语的讨论可以是指机器(例如,计算机)的动作或过程,其在一个或多个存储器(例如,易失性存储器、非易失性存储器或其组合)、寄存器、或其他接收、存储、发送或显示信息的机器组件内操纵或变换被表示为物理(例如,电子、磁或光)量的数据。

如本文所使用的,对“一个实施例”或“实施例”的任何引用意味着结合该实施例描述的特定元件、特征、结构或特性被包括在至少一个实施例中。在说明书中各处出现的短语“在一个实施例中”不一定都指代同一实施例。

可以使用表达“耦合”和“连接”及其派生词来描述一些实施例。例如,一些实施例可以使用术语“耦合”来描述以指示两个或更多个元件处于直接物理或电接触。然而,术语“耦合”还可以表示两个或更多个元件彼此不直接接触,但是仍然彼此协作或交互。实施例不限于此上下文。

如本文所使用的,术语“包括”、“包含”、“具有”或其任何其它变体旨在涵盖非排他性的包括。例如,包括元素列表的过程、方法、物品或装置不一定仅限于那些元素,而是可以包括未明确列出或固有于这些过程、方法、物品或装置的其他元素。此外,除非明确地相反指出,否则“或”是指包括性的或而不是排他性的或。例如,状况a或b由以下任何一个满足:a是真(或存在)且b是假(或不存在),a是假(或不存在)且b是真(或存在),并且a和b都是真(或存在)。

此外,使用“一”或“一个”来描述本文中的实施例的元件和组件。这仅仅是为了方便和给出本发明的一般意义。该描述应该被理解为包括一个或至少一个,并且单数也包括复数,除非明显有其它含义。

在阅读本公开内容后,本领域技术人员将理解本文所述实施例的另外的替代结构和功能设计。因此,尽管已经示出和描述了特定实施例和应用,但是应当理解,所公开的实施例不限于本文公开的精确构造和组件。在不脱离所附权利要求中限定的精神和范围的情况下,可以对本文公开的方法和装置的布置、操作和细节进行对于本领域技术人员显而易见的各种修改、改变和变型。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1