《CPLD FPGA设计与应用基础教程》课件第十一章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《CPLD FPGA设计与应用基础教程》课件第十一章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CPLD FPGA设计与应用基础教程 CPLD FPGA设计与应用基础教程课件第十一章 CPLD FPGA 设计 应用 基础教程 课件 第十一
- 资源描述:
-
1、第十一章第十一章 断言与功断言与功能覆盖能覆盖LOREM IPSUM DOLOR目 录CONCENT11.1 断言11.2 覆盖率介绍11.3 功能覆盖11.4 实例11.1 断言GRADUATION THESIS11.1断言断言的概念:断言的概念:在Verilog HDL语言中,如果需要判断一个语法行为是否满足设计的需求,通常会设计过程性代码程序进行判断,从而实现等效性检查。该程序往往比较冗长,且可读性较差。SystemVerilog语言提供了一种用于间接验证设计通用属性的方法,这就是断言。表示方式:表示方式:断言采用关键字“assert”来表示,相当于条件表达式中的关键字“if”,但更能明
2、确表示功能检查已经完成。简单的断言示例如下:【例11-1】简单的断言示例.assert(result=a+b)$display(the summed data is right!);else$display(something is wrong!);11.1断言11.1.1 立即断言立即断言立即断言是一个程序声明,通常拥有仿真平台的initial语句块中。其功能是检查给定的条件并报告是否发生错误。如果没有错误,就继续执行下一个程序语句,否则仿真停止。【例11-2】立即断言示例 initial begin /初始化 a=5;b=7;cIn=0;#5$display($time,a=%0d,b=%
3、0d,cIn=%0d,sum=%0d,cOut=%0d,a,b,cIn,s,cOut);assert(s=a+b+cIn);/断言 end11.1断言断言语句块出现了两个新的语法:第一个语法是第一个语法是“%m”,该语法分别出现在$display和$error语句中,从仿真结果可以看出,采用该语法是可以清晰地打印出该断言在整个程序中的位置,如本例中的位置路径是adder.adderCheck。当没有显式声明断言语句块名称时,则该路径为adder。因此,为了调试方便,设计者往往会显式声明断言块的名称。另外一个语法就是另外一个语法就是$error任务任务。SystemVerilog针对错误出现的严
4、重程度自带了几种不同的任务,并仅仅只用于断言语句中。具体的系统任务及功能介绍如下表所示。函数具体功能描述$fatal运行期间产生的致命错误,隐含着会调用$finish函数来结束仿真。该任务带有两个参数。第一个参数默认为1,该参数会同时传送给$fatal任务以及$finish函数。第二个参数是要打印的字符串。$error运行期间产生的错误,其参数为要打印的字符串$warning运行期间产生的警告,其参数为要打印的字符串$info运行期间产生的信息说明,问题不严重,其参数为要打印的字符串11.1断言11.1.2 时序操作符时序操作符时序操作符主要有三类:时钟周期延时操作符时钟周期延时操作符、交叠蕴
5、涵操作符交叠蕴涵操作符和非交非交叠蕴涵操作符。叠蕴涵操作符。1.时钟周期延时操作符时钟周期延时操作符SystmVerilog在断言语法中专门开发了一种新的时钟周期延时操作符“#”,用于表示信号之间的时钟周期差。如#1,表示一个时钟延时。2.交叠蕴涵操作符交叠蕴涵操作符在时序信号中,有一类特殊的操作符蕴涵操作符。该操作符又可以分为两类:交叠蕴涵操作符和非交叠蕴涵操作符。交叠蕴涵操作符的符号是“|-”。其基本格式如下:A|-B;表示当A为真时,B在同一个时钟周期内也为真,否则不成功。该操作符在总线设计或者表示多个信号之间的关系时非常有用。11.1断言1.非交叠蕴涵操作符蕴涵操作符的另外一类就是非交
6、叠蕴涵操作符,其操作符的符号是“|=”,基本表现形式如下:A|=B;表示当A为真时,B在后一个时钟周期内也为真,否则不成功。其等效如以下表达式:A#1 B;可以看出,非交叠蕴涵操作符与交叠蕴涵操作符之间相差一个时钟周期的关系,因此上述的表达式,也可以采用交叠蕴涵操作符来等效,如下:A|-#1 B;该类操作符也是经常使用的操作符,如当CPU发出读取内存数据的命令时,内存需要在后一个周期内把数据准备好,并把数据传送到数据总线data上。因此,采用非交叠蕴涵操作符表示如下:read|=isunknown(data);11.1断言11.1.3 序列序列序列,顾名思义,就是表示信号之间的时序关系。序列以
7、关键字“sequence”开始,并以关键字“endsequence”结束。其基本语法结果如下:sequence sequence_name(argument_list);endsequence关键字sequence后紧跟着序列名称。序列名称后可以有序列参数,也可以省略。整个序列的主体是一个逻辑表达式,其内容不能为空,用于定义一个事件,一般用来定义组合逻辑断言。11.1断言11.1.4 属性属性属性定义了需要被检查的设计行为。它可以非常复杂,也可以非常简单。其基本语法结构如下所示。property property_name(argument_list);.endproperty每个属性块采用关
8、键字“property”开始,并以关键字“endproperty”结束。每个属性在property后会紧跟着属性的名字。属性参数是可选的。在属性块内,主要定义属性的行为。属性块是用于将事件组织起来,形成一个更为复杂的过程。如果把序列比喻为砖,则属性就是盖楼。和sequence块不同,属性块一般用于定义一个有时间观念的断言,因此,一些时序操作,如“|-”只能用于属性。需要特别注意的是,在属性中使用的值是在仿真器内核中预先采样的值。11.1断言11.1.5 并行断言并行断言对于并行断言来说,其基本设计流程如下:并行断言的基本格式如下:label:assert property(property_n
9、ame)else fail_statement;和立即断言类似,断言块前可以进行断言名称声明,也可以省略。并行断言采用关键字“assert”开始,并紧接着属性关键字“property”以及属性名,该属性就构成了断言表达式,属性名后可以包含信号列表,也可以省略取决于属性的参数列表。else语句表示如果断言不成功的情形,该语句也是可选的。11.1断言序列常常可以用于描述方式有限状态机的跳转。如序列abc(a,b,c),采用状态跳转图表示如下:整个序列等效于一个八个状态的有限状态机的状态跳转图,每个状态之间相差一个时钟周期。11.1断言1.范围操作符范围操作符在断言中,范围操作符的基本表达式为#n:
10、m,其中n是最小值,m是最大值,表示时钟周期数在n和m之间。n和m可以是任意不小于0的整数,m可以采用“$”符号来表示有界无穷大,也就是意思只要在仿真结束前满足条件就行。如果不满足,断言失败。如在CPU向内存读取命令read后,需要2到5个时钟周期内获取数据有效信息dataValid,从而在dataValid的指引下读取总线上的数据。属性的程序代码如下:property readValid;(posedge clk)read|-#2:5 dataValid;endproperty也可以采用非交叠蕴涵操作符,和交叠蕴涵操作符相比,相差一个时钟周期。其代码如下:property readValid
11、;(posedge clk)read|=#1:4 dataValid;endproperty11.1.6 重复操作符重复操作符11.1断言2.连续重复操作符连续重复操作符 该行为可以采用范围操作符来进行断言设计,如下所示。property serialTransCk;(posedge clk)data_en|-#1:128 data_en#1 done;endproperty2.连续重复操作符连续重复操作符11.1断言现在采用另外一种操作符来进行描述连续重复操作符。该操作符的基本表达式是*n:m,其中n为最小值,m为最大值,表达时钟周期为n到m之间。因此,可以修改如上程序,表示如下:prope
12、rty serialTransCk;(posedge clk)data_en|-data_en*1:128#1 done;endproperty和范围操作符相比,主要有两点不同:一是范围操作符的信号变量位于范围操作符的后面,而连续重复操作符位于信号变量的后面,二是连续重复操作符采用符号“*”来替代符号“#”。上述程序也可以采用非交叠蕴涵操作符来表示,和交叠蕴涵操作符相比,相差一个时钟周期,表示如下:property serialTransCk;(posedge clk)data_en|=data_en*0:127#1 done;endproperty重复操作可能不是一个范围,而是一个有固定时钟
13、周期的长度。此时,可以采用*n来实现,n表示要重复的时钟周期数量。如修改上述的协议,每次传输的数据总量为128个时钟。则修改程序如下:property serialTransCk;(posedge clk)data_en|-data_en*128#1 done;endpropert11.1断言3.严格非连续重复操作符严格非连续重复操作符连续重复操作符针对的目标信号为连续重复的信号,中间没有间隔。如果目标信号为非连续信号,则不能采用连续重复操作符来表示。具体观察如下波形图。SystemVerilog推出了另外一种操作符来表示该操作非连续重复操作符。非连续重复操作符包含严格非连续重复操作符和宽松非
展开阅读全文