一、为什么要引入随机化?

随着验证规模越来越大,定向测试已经不能满足我们所需的测试需求,而随机化可以帮助我们生成更多激励用于测试,更重要的是随机化测试可以检测出一些我们都没有想到的缺陷。

二、随机化的种类及约束

1、布尔表达式

        class TEST ;rand bit [31:0] a ;rand bit [63:0] b;rand bit [63:0] c;            constraint c_test{ a<b;b<c;b == 100;}endclass

注意三点: ①constraint中所有想要begin end的地方都用{}代替②约束力不能用“=”赋值,只能用关系运算符“==”给随机变量赋一个固定的值。③不支持 a<b<c这种写法,会先判断a<b,最终c的值是大于0或者大于1,并没有收到约束。

2、权重分布

        class TEST ;rand bit [31:0] a ;rand bit [63:0] b;rand bit [63:0] c;            constraint c_test{a dist { 0:= 20, [1:3] :=80};b dist{0/:40,[1:3]:/60};}endclass

其中a的约束表示a出现0的概率为20/260,出现1.2.3的概率分别为80/260,80/260,82/260。b的约束表示b出现0的概率为40/100,出现1.2.3的概率分别为20/100,20/100,20/100。

3、在集合里使用数组

        class TEST ;rand bit [31:0] a ;rand bit [63:0] b;rand bit [63:0] c;   bit [31:0] f [6] = '{2,5,3,9,6,7};         constraint c_test{ a inside f;}endclass

4、使用inside

        class TEST ;rand bit [31:0] a ;rand bit [63:0] b;rand bit [63:0] c;            constraint c_test{  a inside [$:100];b inside [20:60];c inside [5:$];}endclass

其中$表示范围内的最大或最小值。

5、条件约束

  class TEST ;rand bit [31:0] a ;rand bit [63:0] b;rand bit [63:0] c;            constraint c_test{ (a == 4) -> (b == 10)b<c;}endclassclass TEST ;rand bit [31:0] a ;rand bit [63:0] b;rand bit [63:0] c;            constraint c_test{ if ( a ==4) b == 10;elseb == 11;}endclass

可以使用-> 和if else来实现条件最简单的条件约束。

6、slove before 的使用

按字面意思理解,比如slove a before b就是指在b之前先搞定a,尽量少使用slove before。

7、约束的控制

 class TEST ;rand bit [31:0] a ;rand bit [63:0] b;rand bit [63:0] c;            constraint c_test1{ b<c;}constraint c_test2{ a<b;}endclasstest t;initial begint = new();t.c_test1.constraint_mode(0);assert(t.randomize());t.c_test1.constraint_mode(1);  assert(t.randomize());   t.constraint_mode(0);t.c_test2.constraint_mode(1);          assert(t.randomize());   end

可以通过constraint_mode()来开关某一个 constraint,也可通过constraint_mode()开关整个constraint。

8、内嵌约束

随着约束越来越多,各约束之间产生的相互作用可能自己都搞不明白了,对于那些偶尔需要执行的约束,可以在randomize的时候实现,即randomize with, 如下所示:

 class TEST ;rand bit [31:0] a ;rand bit [63:0] b;rand bit [63:0] c;            constraint c_test1{ b<c;}constraint c_test2{ a<b;}endclasstest t;initial begint = new();assert(t.randomize()with { a < 20 ; b > 60 ; c == 120 ; });end

有一点需要注意的是,在with里面的变量使用的是类的作用域,因此是a而不是t.a。

9、随机化个别变量

 class TEST ;bit [31:0] a ;rand bit [63:0] b;rand bit [63:0] c;            constraint c_test1{ b<c;}constraint c_test2{ a<b;}endclasstest t;initial begint = new();assert(t.randomize() //只随机b,c 不改变aassert(t.randomize(b) //只随机b 不改变a,cassert(t.randomize(c) //只随机c 不改变a,bend

个人认为随机化约束这一章最重要的是能够通过有效的约束来产生符合要求的激励,本人会持续更新在实际情况中遇到的一些要求相对特别的激励怎么通过约束来实现。

system verilog基础知识总结与复习(随机化)相关推荐

  1. (16)System Verilog禁止类中所有变量随机化

    (16)System Verilog禁止类中所有变量随机化 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog禁止类中所有变量随机化 5) ...

  2. Verilog基础知识总结02

    Verilog基础知识总结02 1.简述Verilog如何建模 数字电路有两种基本要素:线(器件管脚之间的物理连线:wire)和器件(模块:module). Verilog建模就是用HDL语言把数字电 ...

  3. Verilog基础知识(数值表示总结,signed,原码,反码,补码)

    以前虽然是用过verilog,但是只使用了其中最常见wire,reg类型数据,并且是无符号的,因为是及处理过程很多数据就是无符号的.但是想进一步拓展无符号数,或者其底层的补码形式存储与运算方式,就需要 ...

  4. 计算机基础知识考试题库-----复习资料

    计算机基础知识考试题库 选择题 1.当前使用的IP地址是一个____ 的二进制地址. A. 8位 B.16位 C.32位 D.128位 2.要在Web浏览器中查看某一公司的主页,必须知道____. A ...

  5. html5基础知识,期末复习大全

    目录 1.1 Web系统体系结构 1.C/S(即Client/Server)结构 1.2 浏览器 1.排版引擎(Rendering Engine) 2.Javascript引擎 1.3  Web相关概 ...

  6. Verilog基础知识3(门控时钟及FPGA时钟使能处理)

    需求说明:Verilog设计 内容       :第一部分  门控时钟                   第二部分  门控时钟和时钟使能的理解(附代码) 来自       :时间的诗 第一部分  门 ...

  7. Verilog基础知识

    I/O端口类型: input             wire型 output           wire/reg型 verilog可综合语句 assign,always,其中initial 语句不 ...

  8. java春招面试冲刺系列:mysql基础知识超详细复习

    目录 基础 番外篇 MySQL体系结构 MySQL基准测试 数据库结构优化 MySQL的复制功能 MySQL日志 索引 表中有多个索引,优化器怎么决定使用哪个索引 SQL查询优化 数据库监控 常用命令 ...

  9. Verilog基础知识(异步FIFO)

    本文主要内容来自Clifford E. Cummings的 Simulation and Synthesis Techniques for Asynchronous FIFO Design 这篇文章的 ...

  10. Verilog 基础知识

    Verilog 的逻辑值 逻辑 0:表示低电平,也就是对应我们电路的 GND: 逻辑 1:表示高电平,也就是对应我们电路的 VCC: 逻辑 X:表示未知,有可能是高电平,也有可能是低电平: 逻辑 Z: ...

最新文章

  1. shell编程入门步步高(八、函数)
  2. java 对象初始化属性,JAVA中类属性的初始化
  3. Go 语言实现 23 种设计模式适配器
  4. 设计公共API的六个注意事项
  5. std string与线程安全,是std :: regex线程安全吗?
  6. amcharts去除版权标志
  7. 使用Scipy进行函数优化
  8. 金盾加密视频破解翻录限制工具使用教程
  9. 织梦木马 data.php,DedeCMS后门木马专杀工具V2.0
  10. 【毕业设计源码】基于JAVA的微信小程序直播在线教育平台
  11. mysql的双机热备软件_如何规范使用数据库双机热备软件
  12. CCID 设备通讯 (Windows 平台)
  13. 饿了么退货显示服务器异常,外卖配送异常订单如何处理?商家必看!
  14. ant design vue时间范围(range-picker)自定义时间段范围
  15. OpenVR API简单介绍
  16. Redis底层数据结构详解(一)
  17. GLES2.0中文API-glGet
  18. [书籍翻译]12周撰写期刊文章 学术出版成功指南——第 2 周:开始您的文章
  19. 杂谈---2014的第一篇博客
  20. 2020年蓝旭工作室暑期前端培训班Day1——HTML5 CSS3

热门文章

  1. 400 : perceived to be a client error 错误
  2. python爬虫之scrapy
  3. 魔兽是用Python开发的,一起看看Python开发的知名网站和游戏!
  4. Tangent Element调色台的设计和功能同等重要
  5. 进制转换(八进制小数转十进制小数)
  6. CuInS2/ZnS-PEG量子点|1I-V族三元化合物铜钢硫(CuInS2简称CIS),CuInS2/ZnS核壳量子点
  7. Java 使用POI 给Word添加水印
  8. Keepalived配置报错Unicast peers are not supported in strict mode
  9. C#爬虫爬取京东自营笔记本
  10. QNX ETH VLAN ping 不通