一种自动生成断言的方法及装置的制作方法

文档序号:6386600阅读:212来源:国知局
专利名称:一种自动生成断言的方法及装置的制作方法
技术领域
本发明涉及验证技术领域,特别是一种自动生成断言的方法及装置。
背景技术
目前SoC(System on Chip,系统级芯片/片上系统)越来越复杂,仿真验证也越来越困难。基于Assertion (断言)的验证作为一种重要的验证越来越受到重视。然而,基于Assertion (断言)的验证至少存在如下缺点由于每个开发项目都有一定的时限要求,由于Assertion代码需要熟悉SVA(SystemVerilog Assertion)语法的技术人员才能够编写,而且开发周期长,因此在项目压力较大的时候,就会导致项目延期。

发明内容
本发明实施例的目的在于提供一种自动生成断言的方法及装置,降低Assertion(断言)代码的使用难度,保证项目进度。为了实现上述目的,本发明实施例提供了一种自动生成断言的方法,包括第一输出步骤,输出用户从多个预先保存的断言模板中选择的目标断言模板的实例化界面;每个断言模板对应于一用于功能验证的断言验证代码;实例化步骤,根据用户在所述实例化界面输入的断言实例化参数对所述断言验证代码进行实例化,得到实例化的第一断言验证代码;绑定步骤,根据所述用户输入的待验证模块的模块信息将所述实例化的第一断言验证代码绑定到所述待验证模块,得到断言验证仿真文件。上述的方法,其中,还包括第二输出步骤,输出一供用户输入所述模块信息的模块信息输入界面。上述的方法,其中,所述模块信息输入界面和所述实例化界面通过Excel实现。上述的方法,其中,所述绑定步骤具体包括第一解析步骤,通过解析Excel模块信息输入界面的信息获取所述模块信息;第二解析步骤,解析所述模块信息中的RTL文件,获取所述RTL文件中的端口列表以及信号列表;整合步骤,根据所述模块信息和所述端口列表以及信号列表将所述实例化的断言验证代码绑定到所述待验证模块。上述的方法,其中,所述验证仿真文件中包括一用于保存第二断言验证代码,并且被设置为不可更新状态的保留区域。为了实现上述目的,本发明实施例还提供了一种自动生成断言的装置,包括第一输出模块,用于输出用户从多个预先保存的断言模板中选择的目标断言模板的实例化界面;每个断言模板对应于一用于功能验证的断言验证代码;
实例化模块,用于根据用户在所述实例化界面输入的断言实例化参数对所述断言验证代码进行实例化,得到实例化的第一断言验证代码;绑定模块,用于根据所述用户输入的待验证模块的模块信息将所述实例化的第一断言验证代码绑定到所述待验证模块,得到断言验证仿真文件。上述的装置,其中,还包括第二输出模块,用于输出一供用户输入所述模块信息的模块信息输入界面。上述的装置,其中,所述模块信息输入界面和所述实例化界面通过Excel实现。上述的装置,其中,所述绑定模块具体包括第一解析单元,用于通过解析Excel模块信息输入界面的信息获取所述模块信息;第二解析单元,用于解析所述模块信息中的RTL文件,获取所述RTL文件中的端口列表以及信号列表;整合单元,用于根据所述模块信息和所述端口列表以及信号列表将所述实例化的断言验证代码绑定到所述待验证模块。上述的装置,其中,第二解析步骤具体包括删除步骤,删除所述RTL文件中的所有注释语句,生成第一临时文件;第一扫描步骤,对第一临时文件进行扫描,仅保留指定仿真模式对应的语句,得到第二临时文件;第二扫描步骤,对所述第二临时文件进行扫描,得到最终的端口列表和信号名列表。上述的装置,其中,所述第二解析单元具体包括删除子单元,用于删除所述RTL文件中的所有注释语句,生成第一临时文件;第一扫描子单元,用于对第一临时文件进行扫描,仅保留指定仿真模式对应的语句,得到第二临时文件;第二扫描子单元,用于对所述第二临时文件进行扫描,得到最终的端口列表和信号名列表。上述的装置,其中,所述验证仿真文件中包括一用于保存第二断言验证代码,并且被设置为不可更新状态的保留区域。本发明实施例至少具有如下有益效果本发明实施例中,预先根据断言验证的场景抽象出多个模板,并预先编写好对应的断言验证代码,在用户根据断言验证的需求时,根据用户输入对选择的与其需求对应的模板的代码进行实例化,并将实例化后的代码绑定到对应的模块,得到断言验证仿真文件。与现有技术相比,由于不用临时开发断言验证代码,而取之以代码的实例化,大大提高了项目开发过程中断言验证代码与模块之间的绑定速度,保证了项目进程,同时还能在不影响项目进程的情况下为项目提供质量保障。降低基于断言的验证的使用限制门槛,推广了基于断言的验证的应用范围。


图1表示本发明实施例的方法的流程示意图2表示本发明实施例的装置的结构示意图。
具体实施例方式本发明实施例的自动生成断言的方法及装置中,通过预先设置多个断言模板,在用户根据验证需求设置待验证模块以及对选择的断言模板进行实例化之后,即可直接根据断言实例化参数对该选择的断言模板对应的断言验证代码进行实例化,并将实例化后的断言验证代码绑定到所述待验证模块,得到断言验证仿真文件,降低了 Assertion(断言)代码的使用难度,保证了项目进度。本发明实施例的一种自动生成断言的方法,用于为一待验证模块生成断言代码,如图1所示包括第一输出步骤11,输出用户从多个预先保存的断言模板中选择的目标断言模板的实例化界面;每个断言模板对应于一用于功能验证的断言验证代码;实例化步骤12,根据用户在所述实例化界面输入的断言实例化参数对所述断言验证代码进行实例化,得到实例化的第一断言验证代码;绑定步骤13,根据所述用户输入的待验证模块的模块信息将所述实例化的第一断言验证代码绑定到所述待验证模块,得到断言验证仿真文件。本发明实施例中,预先根据断言验证的场景抽象出多个模板,并预先编写好对应的断言验证代码,在用户根据断言验证的需求时,根据用户输入对选择的与其需求对应的模板的代码进行实例化,并将实例化后的代码绑定到对应的模块,得到断言验证仿真文件。与现有技术相比,由于不用临时开发断言验证代码,而取之以代码的实例化,大大提高了项目开发过程中应用断言验证代码的速度和效率,保证了项目进程,同时还能在不影响项目进程的情况下为项目提供质量保障。降低基于断言的验证的使用限制门槛,推广了基于断言的验证的应用范围。在本发明的具体实施例中,预先保存的断言模板可以分为第一类型的用于数值验证的断言模板和第二类型的用于时序验证的断言模板,下面对这两类型的模板中其中一些典型的模板简要说明如下。<第一类型的用于数值验证的断言模板>常真Always模板,该模板对应的代码用于验证待验证对象是否一直为真;常假Never模板,该模板对应的代码用于验证待验证对象是否一直为假;常值Always_ValUe模板,该模板对应的代码用于验证待验证对象是否一直为某
一特定值;单真One-Hot模板,该模板对应的代码用于验证待验证对象是否仅有一位为真;单假One-Cold模板,该模板对应的代码用于验证待验证对象是否仅有一位为假;实际上上述的单真One-Hot模板和单假One-Cold模板可以使用一个模板来实现,即将待检测的目标由用户输入即可,还可以用于验证待验证对象中真/假的位数为奇数/偶数等。连续值范围Value_Range模板,该模板对应的代码用于验证待验证对象的值是否位于一范围内;离散值范围V_Inside模板,该模板对应的代码用于验证待验证对象的值是否位于规定的离散取值中的一个;值变化V_Value_Chg模板,该模板对应的代码用于验证待验证对象的值的变化趋势(如递增、递减);当然,以上的模板仅仅是举例,本发明具体实施例并不限定具体的模板,如还可以设置对应的代码用于验证待验证对象中真/假的位数为奇数/偶数的模板等,在此不对所有的模板 详细说明。下面以其中的值范围V_Value这个模板为例说明实例化界面以及对应的断言实例化参数。在用户选择V_Value这个模板(当然还可以给待实例化的模板命名(假定为v_hdmi_data)之后,即出现V_Value这个模板需要进行实例化的断言实例化参数,其中包括宽度参数Width,定义被检查信号的位宽,如用户输入16,则表示被检查信号的位宽为16bit。范围参数Range,定义被检查信号的变化范围,如用户输入
,则表示被检查信号的变化范围是
;时钟信号参数Clk,定义用于采样被检查信号的内部时钟信号,用于对被检查信号进行采样,如用户输入pix_clk,则表示利用待验证模块的pix_clk信号进行被检查信号的采样;验证使能参数Chk_En,定义检查使能信号,只有该信号为高时进行断言验证检查,如用户输入resetn,则表示当待验证模块的resetn信号为高时进行断言验证检查;采样事件参数sp_eVt,定义采样事件信号,当该信号出现以后开始进行断言验证检查,如用户输入pix_en,则表示当待验证模块的pix_en信号出现后时进行断言验证检查;目标参数expr,定义待检查的信号或者表达式,如用户输入pix_data,则表示被检查信号为待验证模块的pix_data。〈第二类型的用于时序验证的断言模板〉由于时序验证相对于数值验证更加复杂,因此难于使用有限个模板与应用场景进行精确对应。发明人通过分析各种时序场景,对SVA时序描述语法进行归纳,创造性的提出如下两个基本的用于时序验证的断言验证模板s_sequence 模板;和s_seq_expr 模板。其中s_sequence模板抽象为 sp_evt ol_mode (eventI rl_mode event2)rp_mode,而 s_seq_expr模板是s_sequence模板的简化版本,抽象为sp_evt ol_mode event,并且已定义的sequence可以嵌套在其它sequence里面,方便生成复杂的时序检查。模板中的参数说明如下采样事件参数sp_eVt,用于定义采样事件信号,在有在sp_eVt发生后才进行后续检查;如用户输入pix_en,则表示利用待验证模块的pix_en信号进行被检查信号的采样;蕴含模式参数ol_mode,用于定义Overlap mode,用于指定sp_evt发生后是蕴含overlapping模式还是非蕴含non-overlapping模式;
目标参数eventl,用于定义第一个待检查的信号表达式或已实例化的另一用于时序验证的断言模板;如用户输入vsync,则表示其中一个被检查信号为待验证模块的pix_data ;目标参数event2,用于定义第二个待检查的信号表达式或或已实例化的另一用于时序验证的断言模板;如用户输入vSync_0Ut,则表示其中一个被检查信号为待验证模块的 vsync_out ;时序关系模式参数rl_mode,用于定义eventl和event2之间的时序关系模式,可以是如下之一 "##n, and, or, intersect, troughout, within;/ 等;如用户输入 ##2,则表示eventl和event2之间的时序关系为延迟2个时钟单元、交叉模式、穿越模式等重复模式参数rp_mode,用于指定(eventl rl_mode event2)的重复模式,包括连续模式和非连续模式等,可以是如下之一 "[*n],[*m:n],[- > n],[ = n]"。当然,还可以包括时钟信号参数Clk,定义用于采样被检查信号的内部时钟信号,用于对被检查信号进行采样,如用户输入pix_clk,则表示利用待验证模块的pix_clk信号进行被检查信号的采样;Disable参数,定义关闭断言验证检查的信号,如用户输入! resetn,则表示利用待验证模块的! resetn信号来判断是否关闭断言验证检查;on_off参数,定义该模板是否生成最终验证的开关,如用户输入on,则表示需要生成最终验证的开关。应当理解的是,上述的模板的实例化参数仅仅是举例说明,本发明实施例并不局限于以上的模板,也不局限于以上的实例化方式。众所周知,基于断言的验证是针对模块中的某个对象进行某种项目的验证,而对象和项目是通过实例化来实现,这将在后面举例说明,而针对模块是通过将代码绑定Bind到模块来实现,在将其绑定到模块之前需要用户指定对应的模块,因此在本发明的具体实施例中,还包括第二输出步骤,输出一供用户输入所述模块信息的模块信息输入界面。在本发明的具体实施例中,该模块信息输入界面包括如下的参数验证文件名称参数,用于指定断言验证仿真文件的名称;RTL文件名称参数,用于指定断言验证仿真文件对应的RTL文件;模块名称参数,用于指定RTL文件中待验证的模块;模块参数,记录待验证的模块的参数;断言宏参数,用于指定在仿真中控制是否进行当前模块的基于断言的验证的仿真;在仿真过程中用户可以通过该宏来控制断言验证仿真文件的工作与否;仿真模式参数,用于指定仿真模式,包括:ASIC模式和FPGA模式。绑定模式参数,用于指定绑定模式参数,包括绑定到模块Module和绑定到Instance (实例)这两种模式;绑定目标参数,用于根据绑定模式选择绑定对象。在本发明的具体实施例中,上述的模块信息输入界面和所述实例化界面可以通过各种方式实现,但考虑到实现的方便性,所述模块信息输入界面和所述实例化界面通过Excel实现。在对上述的实例化过程以及确定待验证的模块之后,就需要将实例化的代码绑定到需要验证的模块,在绑定时,首先需要知道该实例化的代码需要绑定到哪个模块,这可以通过解析Excel模块信息输入界面的信息获取所述模块信息(对应于待验证的模块)。在实例化的过程中,将模板内部的信号与模块外部的信号(可能是单个信号,也可能是包括多个信号的表达式,这取决于验证的项目)进行了连接,但该模块外部的信号只能是来自于待验证的模块。因此,当模块外部的信号不在信号列表中时,则断言验证仿真文件在仿真过程中就会报错,能够提醒用户对实例化过程进行检查,最终得到正确的断言验证仿真文件。RTL文件中的端口列表以及信号列表是将代码绑定到待验证模块的一部分内容。考虑到如上两点,绑定步骤中还包括通过解析所述模块信息中的RTL文件,获取所述RTL文件中的端口列表以及信号列表。完成上述两步之后,即可根据所述模块信息和所述端口列表以及信号列表将所述实例化的断言验证代码绑定到所述待验证模块。在本发明的具体实施例中,可以通过三次扫描算法来解析RTL文件得到上述的端口列表以及信号列表。下面对如何利用三次扫描算法来解析RTL文件详细说明如下通过解析所述模块信息中的RTL文件,获取所述RTL文件中的端口列表以及信号列表具体包括删除所述RTL文件中的所有注释语句,生成第一临时文件;其中注释语句包括行注释,即(//. · ·)和块注释(即/*. ··*/);对第一临时文件进行扫描,仅保留所述仿真模式参数指定的仿真模式对应的语句,得到第二临时文件;如选择ASIC模式,则需要将“ifdef FPGA. . . endif”包括起来的素有语句删除;对所述第二临时文件进行扫描,得到最终的端口列表和信号名列表。考虑到断言模板的不完整性,也就是说很难列举出能够完成所有基于断言的验证的模块,在本发明的具体实施例中,在生成所述验证仿真文件中设置一保留区域。该保留区域用于保存第二断言验证代码,该第二断言验证代码可以是用户在验证模板无法满足需求时添加的断言验证代码。而该保留区域同时被设置为不可更新状态。通过上述的设置,当第一断言验证代码出错时,基于本发明实施例的方法得到的断言验证仿真文件在仿真过程中报错时,用户会返回进行实例化过程的修改,此时会得到新的第三断言验证代码,此时就可以覆盖第一断言验证代码,最终更新后的断言验证仿真文件包括第三断言验证代码和第二断言验证代码,而不会覆盖掉第二断言验证代码,避免了用户重新编写该第二断言验证代码,节约了用户时间。以下以一个实际的范例来说明本发明实施例的方法。首先,本发明实施例的方法需要提供一个仿真控制宏,假定如下'ifdefHDMI_ASSERTION ;其次,会根据解析出的模块信息及RTL信号列表生成一个Aseertion模块,如下
权利要求
1.一种自动生成断言的方法,其特征在于,包括 第一输出步骤,输出用户从多个预先保存的断言模板中选择的目标断言模板的实例化界面;每个断言模板对应于一用于功能验证的断言验证代码; 实例化步骤,根据用户在所述实例化界面输入的断言实例化参数对所述断言验证代码进行实例化,得到实例化的第一断言验证代码; 绑定步骤,根据所述用户输入的待验证模块的模块信息将所述实例化的第一断言验证代码绑定到所述待验证模块,得到断言验证仿真文件。
2.根据权利要求1所述的方法,其特征在于,还包括 第二输出步骤,输出一供用户输入所述模块信息的模块信息输入界面。
3.根据权利要求2所述的方法,其特征在于,所述模块信息输入界面和所述实例化界面通过Excel实现。
4.根据权利要求3所述的方法,其特征在于,所述绑定步骤具体包括 第一解析步骤,通过解析Excel模块信息输入界面的信息获取所述模块信息; 第二解析步骤,解析所述模块信息中的RTL文件,获取所述RTL文件中的端口列表以及信号列表; 整合步骤,根据所述模块信息和所述端口列表以及信号列表将所述实例化的断言验证代码绑定到所述待验证模块。
5.根据权利要求4所述的方法,其特征在于,第二解析步骤具体包括 删除步骤,删除所述RTL文件中的所有注释语句,生成第一临时文件; 第一扫描步骤,对第一临时文件进行扫描,仅保留指定仿真模式对应的语句,得到第二临时文件; 第二扫描步骤,对所述第二临时文件进行扫描,得到最终的端口列表和信号名列表。
6.根据权利要求1所述的方法,其特征在于,所述验证仿真文件中包括一用于保存第二断言验证代码,并且被设置为不可更新状态的保留区域。
7.一种自动生成断言的装置,其特征在于,包括 第一输出模块,用于输出用户从多个预先保存的断言模板中选择的目标断言模板的实例化界面;每个断言模板对应于一用于功能验证的断言验证代码; 实例化模块,用于根据用户在所述实例化界面输入的断言实例化参数对所述断言验证代码进行实例化,得到实例化的第一断言验证代码; 绑定模块,用于根据所述用户输入的待验证模块的模块信息将所述实例化的第一断言验证代码绑定到所述待验证模块,得到断言验证仿真文件。
8.根据权利要求7所述的装置,其特征在于,还包括 第二输出模块,用于输出供用户输入所述模块信息的模块信息输入界面。
9.根据权利要求8所述的装置,其特征在于,所述模块信息输入界面和所述实例化界面通过Excel实现。
10.根据权利要求9所述的装置,其特征在于,所述绑定模块具体包括 第一解析单元,用于通过解析Excel模块信息输入界面的信息获取所述模块信息; 第二解析单元,用于解析所述模块信息中的RTL文件,获取所述RTL文件中的端口列表以及信号列表;整合单元,用于根据所述模块信息和所述端口列表以及信号列表将所述实例化的断言验证代码绑定到所述待验证模块。
11.根据权利要求10所述的装置,其特征在于,所述第二解析单元具体包括 删除子单元,用于删除所述RTL文件中的所有注释语句,生成第一临时文件; 第一扫描子单元,用于对第一临时文件进行扫描,仅保留指定仿真模式对应的语句,得到第二临时文件; 第二扫描子单元,用于对所述第二临时文件进行扫描,得到最终的端口列表和信号名列表。
12.根据权利要求7所述的装置,其特征在于,所述验证仿真文件中包括一用于保存第二断言验证代码,并且被设置为不可更新状态的保留区域。
全文摘要
本发明实施例公开了一种自动生成断言的方法及装置,该方法包括第一输出步骤,输出用户从多个预先保存的断言模板中选择的目标断言模板的实例化界面;每个断言模板对应于一用于功能验证的断言验证代码;实例化步骤,根据用户在所述实例化界面输入的断言实例化参数对所述断言验证代码进行实例化,得到实例化的第一断言验证代码;绑定步骤,根据所述用户输入的待验证模块的模块信息将所述实例化的第一断言验证代码绑定到所述待验证模块,得到断言验证仿真文件。本发明大大提高了项目开发过程中断言验证代码与模块之间的绑定速度,保证了项目进程。
文档编号G06F17/50GK103020396SQ20121059507
公开日2013年4月3日 申请日期2012年12月31日 优先权日2012年12月31日
发明者刘利剑, 王欣, 张亦农 申请人:青岛中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1