代码覆盖在HDL测试过程中的应用.pdfVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
代码覆盖在HDL测试过程中的应用

代码覆盖在 HDL 测试过程中的应用 湖南大学电器与信息工程学院 程栋 黎福海 摘 要:本文讨论了 HDL 测试过程中的代码覆盖问题,重点分析了语句覆盖、路径覆盖和表达式 覆盖等三种覆盖方法,并给出了相应的例子。 关键词:HDL ;测试平台;代码覆盖 前沿 和通常的软件程序设计语言不同,HDL(硬件描述语言)的主要目的是用来编写设计文件 并建立硬件器件的模型,硬件系统的基本性质和硬件设计的方法决定了HDL的主要特性,HDL 的语法和语义的定义是为了能描述硬件的行为,它应当能自然地描述硬件中并行的、非递归 的特性及时间关系。 正如汇编语言被高级程序设计语言所代替那样,门级电路框图必然被HDL所代替,HDL 及其编译器使得硬件设计者也能使用这种高层次设计的编译方法。和HDL比起来,C/C++等 软件程序设计语言的发展史要长得多,各种设计技巧和方法也比较成熟,有很多都值得HDL 设计人员借鉴之处。本文专门讨论一下其中的代码覆盖问题。 HDL 代码覆盖过程 代码覆盖在软件开发中已有多年的应用了,它在用HDL进行硬件设计的过程中也有类似 的应用。有些错误的设计和正确的设计看起来没什么两样,几乎不可能完全肯定正在测试的 设计功能是否正确。即使所有的测试平台都模拟成功,也很难保证没有遗漏掉一个或几个功 能的测试。代码覆盖可以帮助解决这个问题。 图1描述了HDL测试过程中代码覆盖是如何进行的。首先对源代码进行分解,分解的过 程就是在源代码的关键位置加上断点,来记录该位置是否有一个特殊结构。分解的方法因工 具的不同而有别。有的可能用到文件的输入输出功能(如Verilog中的$write语句或VHDL 中的textio.write子程序),还有的可能用到仿真器自带的特殊功能。 只能对正在测试的代码进行分解,其目的是确定是否遗漏了某些代码,这一部分代码没 有得到运行。没有必要过分注意测试平台的代码是否得到运行,因为如果有些重要部分没有 运行的话,就会表现为测试对象的某些部分不运行,或者这些部分并不像原来所想的那样重 要。 接下来用测试平台来对这些分解的代码进行仿真(这些测试平台本身并不需要分解),全 部的追踪信息都放进一个数据库。根据这个数据库,就可以确定所有测试组件的覆盖程度。 常用的代码覆盖方法 代码覆盖中最常用的是语句覆盖、路径覆盖和表达式覆盖。 (1)语句覆盖 语句覆盖又叫块覆盖,因为块是由一系列语句构成的,只要执行其中一条语句,整个模 块就会随之执行。例1就是一个语句块的例子,只要if表达式为真,就执行整个acked块, 所以整个块执行的次数就等于模块中的每一条语句执行的次数。 例1 块与语句的等价执行 if (dtack 1b1) begin:acked as = 1b0; data =16hzzzz; bus_rq=1b0; state =IDLE; end 块之间并没有明确的界限。在例 2中有两个块,以wait语句为分界。若wait语句永远 也不能执行完,从而一直处于等待状态,那么以后的语句就无法执行了,这样实际上就只有 一个块。 例2 以wait语句为分界的两个块 address =16#FFED#; ale=1; rw=1; wait until dtack=1; read_data :=data; ale=0; 语句覆盖用来计算在测试的过程中共有多少行代码得到了运行,它提供一个用户图形接 口来显示所有的源代码,并鉴别出有哪些语句没有运行。在例2中,语句覆盖以直观的方式 显示了一个调制解调器模型的一小部分代码。但在实际中,代码覆盖工具或代码浏览工具所 显示的形式可能会有所不同。 例3 语句覆盖举例 √if(parity ODD||parity EVEN)begin □ tx=compute_parity(data,parity); □ #(tx_time); end √tx=1b0; √#(tx_time); √if(stop_bits 2)be

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档