System Verilog视频学习笔记(8)- Randomization
来源:互联网 发布:mac电磁阀型号 编辑:程序博客网 时间:2024/06/11 23:44
OOP-Randomization(面向对象-随机化)
内容来自启芯-System Verilog视频
==============================================================
目录结构:
1、为什么需要随机?
2、什么时候应用随机化?
--------2.1 基于OOP的随机化
--------2.2 变量约束
--------2.3 控制符
--------2.4 顺序约束
--------2.5 randomize
--------2.6 randsequence
3、总结
==============================================================
本章目标:
1、了解为什么需要在验证中随机化
2、随机变量
3、约束随机变量
1、为什么需要随机?
验证的过程中穷尽所有可能的输入序列将耗费大量的时间,所以穷举法不可用,选取足够让你得到信息的随机化序列,变成了最好的出路。
2、什么时候应用随机化?
图1、验证时间图
2.1 基于OOP的随机化
支持两个类型的随机属性
rand
randc
当类方法randomize()调用时rand和randc起到随机作用。
rand属性可产生任意合法值
randc最大16bit
图2、随机例子
类内定义rand和randc的随机变量
2.2 变量约束
inside:对变量指定范围
size:队列数组,指定大小
图3、约束例子
:=:对所有值进行权重
:/ :平方比重
图4、例子
数组约束
对数组的值进行不同约束可用foreach 循环,size(),sum()等
图5、例子
2.3 控制符
-> :事件操作符
if…else :条件操作符
图6、例子
事件操作符“->”与if…else…相同,满足条件才执行
2.4 顺序约束
randc先于rand执行
solve-before定义执行顺序
图7、solve before例子
如上flag和addr没有生成数据的先后顺序,所以在执行if else 语句就有执行顺序,代码设定先执行flag
2.5 randomize
当randomize()执行时,pre_randomize()先被执行,randomization执行,然后post_randomize()执行。
pre_randomize():在randomization前进行约束设置
post_randomize():在randomization后进行更正
图8、randomize后使用约束例子
控制radomization属性的开关。
task/function itobject_name.property.rand_mode(0|1);
1 = 开
0 = 关
图9、关闭随机变量例子
另外还可对类内的随机变量做选择是否随机。
2.6 randsequence
randsequence():可用于状态机,状态机内又支持if…else…,case break等
3、总结
随机是验证中的关键技术,如何实现随机?随机的使用,随机的约束,本节都有一些讲解。
- System Verilog视频学习笔记(8)- Randomization
- System Verilog视频学习笔记(1)- Device Under Test
- System Verilog视频学习笔记(2)- Testbench
- System Verilog视频学习笔记(3)- Language Basic
- System Verilog视频学习笔记(5)- Concurrency
- System Verilog视频学习笔记(6)- OOP-Encapsulation
- System Verilog视频学习笔记(7)- OOP-Virtual Interface
- System Verilog视频学习笔记(9)- Inheritance
- System Verilog视频学习笔记(10)- Inter-Thread Communication
- System Verilog视频学习笔记(11)- Functional converage
- System Verilog视频学习笔记(12)- VMM预览
- System Verilog视频学习笔记(4)- Stimulus driven and received
- system verilog MATLAB学习笔记
- system verilog学习笔记--time slot division
- system verilog学习笔记assertion & debug
- system verilog学习笔记---coding style
- system verilog学习笔记---intersting Q&A
- verilog学习笔记(一)
- Python写一个简单的神经网络
- C
- 平衡二叉树(Java实现)
- 良好的编程习惯
- Spring MVC restful 路径小数点问题
- System Verilog视频学习笔记(8)- Randomization
- MonkeyRunner
- Linux网络编程[DNS解析原理,了解相关DNS解析的函数]
- c#生成安装包程序和卸载程序
- scala实例——六
- 组件化架构漫谈
- 【JSP学习笔记(2)】——JavaScript应用
- 元素互不相邻的最大和子数组
- C6-1 最大子数组和