Property使用

  • 1. 介绍
  • 2. 时钟声明
  • 3. 绑定
  • 4. expect语句

1. 介绍

  • 结合sequence(序列)对时序和逻辑的描述,property(属性)可以用来描述合计的确切行为;
  • property可以在验证中用来做assumption,checker或者coverage;
    • 当使用assert关键词时,可以用作checker来检查设计是否遵循property的描述;
    • 当使用assum关键词时,可以作为环境的假设条件,对于仿真环境和形式验证均起到对激励进行假设的作用;
    • 当使用cover关键词时,可以将property是否真正通过作为断言覆盖率来衡量;
  • property可以在module、interface、clocking块或者package中声明;
  • property也可以同sequence一样具备形式参数;
    property rule(x, y);##1 x |-> y;
    endproperty
    

2. 时钟声明

  • 一般对于sequence或者property,默认情况下,在使用同一个时钟来对数据做采样,但是也不排除多个时钟的采样情况;

       @(posedge clk0) sig0 ##1 @(posedge clk1) sig1
    
  • 如果一个sequence或者property需要声明多个时钟来做数据采样,可以使用##1结合第二个时钟沿采样;

  • 只能使用##1来表示与第一个时钟(clk0)沿紧密相连的下一个时钟(clk1)沿;

  • seqauence操作符号例如and、or、intersect等无法被使用在多时钟sequence

  • 以下的多时钟sequence声明均是非法的;

       @(posedge clk0) sig0 ##0 @(posedge clk1) sig1@(posedge clk0) sig0 ##2 @(posedge clk1) sig1@(posedge clk0) sig0 intersect @(posedge clk1) sig1
    
  • property中的and、or、not则可以用在多时钟的property声明中,因为它们仅代表逻辑运算,并不参与sequence之间的时序关系;

  • 可以在sequence中独立指定时钟:

    sequence s2;    @(posedge clk) a ##2b; endsequence
    property p2;    not s2; endproperty
    assert property(p2);
    
  • 可以在property中独立指定时钟:

    property p3;   @(posedge clk) not (a ##2 b);  endproperty
    assert property(p3);
    
  • 在过程块中,可以继承过程块的时钟:

    always @(posedge clk) assert property(not (a ##2 b));
    
  • 在时钟块,也可以继承时钟块的时钟:

    clocking master_clk @(posedge clk);property p3;  not (a ##2 b);  endproperty
    endclocking
    assert property(master_clk.p3);
    
  • 断言的时钟由一下条件的优先级逐级判定:

    • 显示声明断言时钟
    • 继承断言所嵌入环境的时钟
    • 继承默认的时钟
  • 对于多时钟的断言,必须显式声明时钟,无法继承或者使用默认时钟;

  • 如果是多时钟断言,也无法嵌套入由时钟驱动的过程块语句;

    always @(clk) assert property(mult_clock_prop);  // illegal
    initial @(clk) assert property(mult_clock_prop);  // illegal
    
  • 多时钟断言,也无法嵌套入时钟块;

3. 绑定

  • 断言可以嵌入到设计中,也可以在设计外部定义,断言不可综合;
  • 嵌入到设计中,可以存在无法综合的问题,需要同时考虑添加编译定向(compiler directive);
  • 在设计外部定义,不用担心综合问题;
  • bind方法可以满足在设计外部定义断言,而将其绑定到设计内部或者接口上面;
  • 使用方法:bind design_block_or_instance_name block_with_assertions
  • bind可以将包含断言的模块与设计模块或者实例进行绑定,既可以满足对设计内部信号的可视性,又能够满足断言模块的独立性;
  • 使用绑定的优势在于,无法修改原有设计代码,也无需添加检测信号,既可以实现断言的添加;
    interface range(input clk, enable, input int minval, expr);property crange_en;@(posedge clk) enable |-> (minval <= expr);  // 小于等于endpropertyrange_chk: assert property(crange_en);
    endinterfacebind cr_unit range r1(c_clk, c_en, v_low, (in1&&in2));
    // cr_unit是模块名
    // range是接口
    // r1是interface的实例,括号中的参数(信号)都来自于design,也就是model的端口信号或者内部信号
    
  • 在tb中例化interface,与dut做连接,这和bind方法一样都需要例化;
    • 不同的是,在例化dut的时候要把端口连上,如果想看到dut内部信号就得tb.层次1.层次2.信号名
    • 在用bind绑定模块和interface的时候,默认能够看到interface里面边界以及内部信号,这里的内部信号不包含内部层次以下的信号;
    • interface的例化实在tb中;
    • bind的例化最终实在模块内部,也就是dut内部;

4. expect语句

  • 之前的assertassumecover都是非组合的方式,即它们本身并不会阻塞后续的语句,但是expect是一种阻塞的property使用方式;
  • expect的语法同assert一致,不过他会等待property执行通过,才会执行后续的语句;
  • 简单来看,可以使用wait语句的地方,就可以使用expect语句;
    initial begin#200ms;expect(@(posedge clk) 1 ##1 b ##1 c)else $error("expect failed");ABC: ...
    end
    
  • 仿真在200ms开始,如果在连续的3个周期,可以一次看到a = 1, b = 1, c = 1,那么expect语句就会通过,否则会出现运行错误;
  • 当我们期望一些特定时序的时候,作为阻塞条件,我们则可以使用property的这种方式,来将其嵌入到过程语句块中;
  • a ##1 b ##1 c,这种写法相当于一个sequence;
  • a |=> b |=> c,这种写法与上面的功能一样,但是相当于多个sequence;
  • 和assert语句的调用方式类似,它也可以使用在function和task中,同时在可以引用静态变量或者动态变量;
    integer data;
    ...
    task automatic wait_for(integer value, output bit success);expect(@(posedge clk) ##[1:10] data == value) success = 1;else success = 0;
    endtaskinitial beginbit ok;wait_for(23, ok);  // wait for value 23
    end
    

Property使用相关推荐

  1. redisson get()数据报错,missing type id property ‘@class’

    redisson get()数据报错: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when ...

  2. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  3. kotlin Bean加载失败lateinit property has not been initialized

    Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creat ...

  4. python 创建只读的函数(@property的介绍与使用)

    @property 介绍 @property 是python 中的修饰符,将方法转为属性,可以直接通过方法名来访问,注意访问的时候后面不需要添加小括号,否则会报错,作用是将函数变为只读的,不能修改,否 ...

  5. Android 属性动画(Property Animation) ObjectAnimator的介绍

    先说下属性动画与视图动画的区别: 视图动画系统仅提供为 View 对象添加动画效果的功能,因此,如果您想为非 对象添加动画效果,则必须实现自己的代码才能做到.视图动画系统也存在一些限制,因为它仅公开 ...

  6. Android 属性动画(Property Animation) ValueAnimator 的介绍

    先说下属性动画与视图动画的区别: 视图动画系统仅提供为 View 对象添加动画效果的功能,因此,如果您想为非 对象添加动画效果,则必须实现自己的代码才能做到.视图动画系统也存在一些限制,因为它仅公开 ...

  7. java property异常_Java常见的异常和解决的办法

    Java程序设计中我们经常会遇到异常,遇到异常不要浮躁,找到问题的原因解决是很容易的.我们整理了一些异常和解决的方法供大家参考. 1.java.lang.IllegalStateException: ...

  8. 1-runtime的Method,IMP,Property,ivar

    基础定义 objc-750 的tar包 objc-private.h 定义 typedef struct objc_class *Class; typedef struct objc_object * ...

  9. python中的类的成员变量以及property函数

    1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用"类."来引用 ...

  10. 定义一个属性_Python property属性

    1. 什么是property属性 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法 # ############### 定义 ###############class Foo: def ...

最新文章

  1. sae mysql django_Python+Django+SAE系列教程12-----配置MySQL数据库
  2. 对Linux系统中的时钟和时间的探讨
  3. 《机器学习》 周志华学习笔记第二章 模型评估与选择(课后习题)
  4. 漫谈微服务架构:什么是Spring Cloud,为何要选择Spring Cloud
  5. python中的sklearn教程_python作业之sklearn
  6. RabbitMQ学习笔记(二) 工作队列
  7. centos7 split 切割文件_CentOS 大文件夹按固定块大小分割打包实验
  8. icem划分网格步骤_ICEM网格划分步骤
  9. 汽车总线协议15765-2(2005)CANFD协议研究
  10. 翻译:SWFObject 2.0官方文档
  11. maven:mirrors和repository的关系区别
  12. 87个电影调色PR预设包
  13. Gitlab的自动流水线搭建
  14. 基于php+mysql的校园木本植物检索查询统
  15. 刚开发的游戏《天黑请闭眼》
  16. 查看表之间的关系 需要在eas中的商业分析-扩展报表中心-报表平台下的语义层方案管理...
  17. Java语言每日一练—第9天:根据输入的数据判断是星期几
  18. (高版本)浏览器获取cookie信息-升级版
  19. matlab进行动力吸振器设计,基于有限元法的动力吸振器设计研究
  20. sumo笔记(三)——让小车跑起来(rou文件的生成)

热门文章

  1. 电子计算机俗称电脑它是一种具有什么能力,2012年计算机一级MSoffice试题及答案解析(60)...
  2. Android App ~ Bitmap 调用 recycle() 回收内存
  3. oracle tabe unlock_Oracle常用命令大全集
  4. 1024 程序员日,全年最大红包,小小心意请笑纳~
  5. 配置用友UAP平台(NC65)
  6. 页面跳转的两种方式-重定向和转发的区别(详细)
  7. 手把手教你把网页转为.exe文件.
  8. ACL 2021 | 百度NLP开源语言与视觉一体的统一模态预训练方法,登顶各类榜单
  9. STM32CubeMX配置时钟树
  10. 用鸢尾花数据集实现knn分类算法