- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7、systemverilog语法和验证相关流程讲述
IC验证环境的基本框图
发生器(generator)用来解释testcase,其实也就是把testcase翻译成具体的数据包,或者数据码流。
代理这个东西就是把数据分配下去,他与记分板和检测器一起称为功能层。
记分板(scoreboard)用来临时存放一些数据,用于数据的比较。常与检测器合在一起,共同完成数据的比较,查错。他们要实现的一个与待测设计相同功能的模块,用于自动比较的。其实也就是要设计一个能实现相同功能的模块,一般小的模块这部分设计都是由验证工程师自己完成的,如果是复杂的模块由于验证工程师还要关注其他的模块,这块功能可以由其他地方提供,比如一些现成的C语言代码,验证工程师把这个C代码嵌入的验证环境中就可以了,这个地方的实现方式比较多,也是验证的一个精华的地方吧。主要的debug也就在这个地方实现的。
驱动层(driver)顾名思义,就是用来驱动我们的待测设计(DUT(device under test))。就是把数据包处理成具体的操作激励,也就是那些波形了。
监测器(monitor)用来采集待测设计(DUT)的输出波形,然后传回scoreboard用于和标准结果比较,验证DUT工作是否正确。
断言(assert)是个好东西,但是如果紧紧依靠验证工程师这个东西是没办法用好的,这个东西非常需要设计人员配合。Assert功能很强大,也很容易上手,能深层次的发掘设计错误,定位很准确,也正是由于这些优点,所以验证工程师不能非常容易的使用它,因为验证工程师一般可以不需要了解太多的设计细节就可以对设计模块进行验证,但是assert需要比较清楚的了解内部信号,才能将内部信号连接到相应的assert上。建议IC设计工程师学习哦。对debug很有帮助的哦。这个模块在有的验证环境中是不使用。
最后说一下覆盖率的问题。覆盖率分为功能覆盖率,代码覆盖率,还有人为添加的一些覆盖点的覆盖率。这个其实就是用来衡量验证工作进行到什么程度了。最容易实现100%的是代码覆盖率,但是如果verilog代码中使用了case的default那就很难实现100%覆盖了。功能覆盖率就是一些函数的功能,还有状态机的状态覆盖率等等。然后还有就是验证工程师添加的覆盖点。一般验证工作完成以后要使用这些东西完成报告的。
SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型、结构、压缩和非压缩数组、 接口、断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力。
接口(Interface):Verilog模块之间的连接是通过模块端口进行的。SystemVerilog提供了一个新的、高层抽象的模块连接,这个连接被称为接口(Interface)。接口在关键字interface和endinterface之间定义,它独立于模块。
在最简单的形式下,一个接口可以认为是一组线网。例如,可以将PCI总线的所有信号绑定在一起组成一个接口。通过使用接口,我们在进行一个设计的时候可以不需要首先建立各个模块间的互连。随着设计的深入,当接口发生变化时,这些变化也会在使用该接口的所有模块中反映出来,而无需更改每一个模块。
接口的使用实例:
interface chip_bus; // 定义接口
wire read_request, read_grant;
wire [7:0] address, data;
endinterface: chip_bus
module RAM (chip_bus io, // 使用接口io
input clk);
// 可以使用io.read_request引用接口中的一个信号
endmodule
module CPU(chip_bus io, input clk);
...
endmodule
module top;
reg clk = 0;
chip_bus a; // 实例接口
// 将接口连接到模块实例
RAM mem(a, clk);
CPU cpu(a, clk);
endmodule
实际上,SystemVerilog的接口不仅仅可以表示信号的绑定和互连。由于SystemVerilog的接口中可以包含参数、常量、变量、结构、函数、任务、initial块、always块以及连续赋值语句,所以SystemVerilog的接口还可以包含内建的协议检查以及被使用该接口的模块所共用的功能。
全局声明和语句
在Verilog中,除了一个模块可以作为模块实例引用其他模块外,并不存在一个全局空间。另外,Verilog允许任意数目的顶层模块,因此会产生毫无关联的层次树。
SystemVeriog增加了一个
文档评论(0)