第11章FPGA设计验证要点分析.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
下面是Assert_always断言的代码: module assert_always (ck, reset_n, test_expr); input ck, reset_n, test_expr; parameter severity_level = 0; parameter msg=ASSERT ALWAYS VIOLATION; ‘ifdef ASSERT_ON integer error_count; initial error_count = 0; always @(posedge ck) begin ‘ifdef ASSERT_GLOBAL_RESET if (‘ASSERT_GLOBAL_RESET != 1’b0) begin ‘else if (reset_n != 1’b0) begin ‘endif if (test_expr != 1’b1) begin error_count = error_count + 1; ‘ifdef ASSERT_MAX_REPORT_ERROR if (error_count = ‘ASSERT_MAX_REPORT_ERROR) ‘endif $display(%s : severity %0d : time %0t : %m,msg, severity_level, $time); if (severity_level == 0) $finish; end end end // always ‘endif endmodule // assert_always 上述的断言是用于检测某个表达式是否永远为真,如果test_expr表达式不为真,那么错误计数器计算不为真的次数,如果错误计算器的值小于用户定义的错误次数,那么显示错误信息。如果定义错误等级为0,则退出仿真。 从上面的实现,我们可以看到,一个断言实际上就是一段Verilog代码,用模块的形式将其封装起来。因此,叙述性断言的用法非常简单,直接采用实例化的形式把断言嵌入在设计中就可以了,当测试条件不成立的时候,触发该断言。 使用always断言。 module counter_0_to_9(reset_n,clk); input reset_n, clk; reg [3:0] count; always @(posedge clk) begin if (reset_n == 0 || count = 9) count = 1’b0; else count = count + 1; end assert_always #(0, 0, error: count not within 0 and 9) //always断言; valid_count (clk, reset_n, (count = 4’b0000) (count = 4’b1001)); endmodule 实用构造Testbench技术 1、使用行为级代码描述验证模型 设计工程师编写的电路模型代码,要从实现的角度出发,从物理实现上考虑verilog代码的写法,写出的代码必须是可综合的。 验证工程师编写的用于验证的代码不必考虑到内部的实现问题,只要按规范描述出一个设计的功能就可以了,也就是说只要建立一个设计“逻辑模型”。 行为模型代码的描述往往比RTL代码的描述简单的多,容易正确描述电路功能。 实用构造Testbench技术 行为级代码可以不受可综合要求的约束,可以在更高的层次上实现数据的抽象,使得验证程序编写时更方便 。 记录数据类型、多维数组 Verilog语言本身并不支持这些结构,通过一些方法可以模拟实现。 实用构造Testbench技术 2、编写有结构的仿真代码 为了有效的维护和重用,行为代码通常按功能和需求划分结构,复杂的仿真功能,可以按功能划分若干个子功能,然后编写行为代码实现这些子功能。 封装是实现结构化仿真编码的主要手段,封装的主要思想是将实现的细节隐藏起来,将功能接口和它的实现完全分离开,只要封装的接口不变,实现的修改和优化不影响用户的使用。 实用构造Testbench技术 实现封装的几种方法 变量局部化 方法一 : 变量声明时局部化 尽可能地将变量的声明局部化,避免变量在其它模块间相互作用,产生不正确地结果。 方法二: 用 task 和 function 使变量局部化 在verilog语言中,用 task 和 function 也可以使说明局部化。 实用构造Testbench技术 integer I; // 全局I always begin for (I = 0; I=32, I = I + 1) begin … en

文档评论(0)

挺进公司 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档