SV randomize
randomize中的变量只支持2-state的values,不支持4-states。
randc类型的变量不能被约束在solve------before的语句中。
constraint可以被定义在class外:
class C;
rand int x;
constraint protol; //隐式的
extern constraint protol2; //显式的
endclass
constraint C::protol { x inside {-4, 5, 7}; }
constraint C::protol2 { x >= 0; }
constraint的继承性:
由于内置的randomize()函数是 virtual function,所以constraint也是只和对象的类型有关,extend会覆盖baseclass;
在virtual class中可以定义pure cosntraint,只作为一个constraint 原型,但是class中是不允许出现pure constraint的。
unique关键字,表示之后的几个变量的值不重复;需要加{},表明区间范围。
constraint u { unique {b, a[2:3], exclude}; }
constraint exclusion { excluded == 5; }
constraint中的迭代,只能使用foreach,对于array的计算,可以使用with (item)的方式。
constraint c1 {A.size == 5;}
constraint c2 { A.sum() with (int'(item)) < 1000; }
global constraint,当一个object进行随机的时候,包含的所有的object也会一起随机,被调用randomize()方法。
global constaint是SV内置的一个属性,programmer不需要设置。
static constraint,主要作用是constraint_mode()约束的时候,是所有的instant一起被关闭或者打开。
programmer可以显式的进行设置。
constraint中调用function,需要满足几个条件:
1) 函数的参数不能是output或者ref类型,可以是input和const ref类型。
2) 函数中不能调用rand_mode()和constraint_mode()的方法。
constraint中的guard expression:约束中的某些逻辑可能是错的,但是通过&&和||逻辑,某些项可以是不关注的。
a.x==5时,并不关注b是不是null的。
soft constraint,相较于hard constraint,solver并不需要一定解决这些constraint,并不会造成solver failure。
p的with randomize优先级高,class内定义的constraint不需要被考虑
priority,class内部的soft constraint,按定义的顺序排列优先级,越晚的优先级越高。
高优先级,可以覆盖掉低优先级的约束。(与override不一样的是不需要cosntraint名字相同,只是作用在变量的约束上。)
discard soft var,将之前所有的关于变量var的软约束都取消掉。
randomize function,是每个class中内建的一个virtual的function。成功返回1,失败返回0。
还有两个hook function,pre_randomize()和post_randomize()不是virtual function,但是每次randomize()调用的时候,都会自动调用。
如果randomize() function失败,所有的var保持原来的值,post_randomize()不会被调用。
但是必须super调用 被override的function。
randomize() with {};in-line的randomize,也必须满足之前定义的约束,只是一个子集。
其中的变量的范围约束,this,super,可以绑定某个handle;
local::,绑定调用randomize() with的当前scope,如function,task。
randomize(var)加参数时,只对某个参数进行随机化,但是pre_randomize和post_randomize仍然会被调用。
如果var是null,SV并不进行随机,只是check当前的约束条件是否都能被满足,只检查solver能否正常工作,所有var的值不变。
std::randomize(),是SV中单独定义的一个static的方法,可以对class之外的变量进行随机,
可以加with来约束变量。与class中的pre_randomize和post_randomize完全无关。
$urandom(seed)和$urandom_range(max, min),对变量随机,但是不能加约束,而且都是32bit的随机,只赋值低位。
srandom(seed),是一个function,可以用来初始化一个RNG object。通过class handle调用。
randcase,建模不同的选择分支,randsequence,更像是建模状态机的。
SV randomize的更多相关文章
- SV中的随机化
SV搭建testbench的关键概念:CRT(constraint random test),测试集的随机化. 由于对象class由数据和操作组成,所以对数据的随机化一般放在一个class内.(对环境 ...
- SV中的线程
SV中线程之间的通信可以让验证组件之间更好的传递transaction. SV对verilog建模方式的扩展:1) fork.....join 必须等到块内的所有线程都执行结束后,才能继续执行块后的语 ...
- SV中的OOP
OOP:Object-Oriented Programming,有两点个人认为适合验证环境的搭建:1)Property(变量)和Method(function/task)的封装,其实是BFM模型更方便 ...
- systemverilog(3)之Randomize
what to randomize? (1) primary input data <==one data (2)encapsulated input data <== muti grou ...
- 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆
挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划 ...
- VBA使用的Randomize和DoEvents
Randomize private function getInt() dim n,m as integer Randomize n=1 m=3 getInt=Int((m+1-n)*rnd + n) ...
- Cadence UVM基础视频介绍(UVM SV Basics)
Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...
- 挣值管理(PV、EV、AC、SV、CV、SPI、CPI)记忆之我见
挣值管理(PV.EV.AC.SV.CV.SPI.CPI)记忆之我见 挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三 ...
- 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)
[等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV - contention) 1 BLOG文档结 ...
随机推荐
- elasticsearch以及head插件在centos7上的安装与配置教程
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...
- iOS 之地图坐标体系和转换
一.坐标体系 首先我们要明白,开发者能接触到哪些坐标体系呢? 第一种分类: 1. GPS,WGS-84,原始坐标体系.一般用国际标准的GPS记录仪记录下来的坐标, 都是GPS的坐标.很可惜,在中国,任 ...
- cc攻击和ddos攻击
DoS攻击.CC攻击的攻击方式和防御方法 DDoS介绍 DDoS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of ...
- shell 递归枚举文件并操作
递归枚举文件并操作 #!/bin/bash CURDIR=$(cd $(dirname $0); pwd) export GOPATH=$CURDIR/.. echo GOPATH=$GOPATH c ...
- Mac Eclipse安装lombok
Lombok是一个可以通过注解的形式可以帮助消除一些必须但是显得很臃肿的Java代码的工具,通过使用对应的注解,可以在进行编译源码的时候生成对应的方法,比如类属性的get/set/toString() ...
- python开发工具
要用到爬虫,网上推荐crapy,自己在pycharm上没有安装成功,于是使用anaconda,但是在gui界面安装crapy总是失败,且没有提示信息.于是使用命令行的方式,提示PermissionEr ...
- less的安装与用法
1. node.js node.js是一个前端的框架 自带一个包管理工具npm node.js 的安装 官网:http://nodejs.cn/ 在命令行检验是否安装成功 打开cmd 切换到项目目录, ...
- 【zc】 php计算两个日期相隔多少年,多少月,多少日的函数
/* *function:计算两个日期相隔多少年,多少月,多少天 *数据接受格式: '2014-12-03','2000-12-01'; *param string $date1[格式如:2011-1 ...
- jquery 在页面上根据ID定位(jQuery锚点跳转及相关操作) 经典
1.锚点跳转简介 Edit 锚点其实就是可以让页面定位到某个位置上的点.在高度较高的页面中经常见到.比如百度的百科页面,wiki中的page内容. 我知道实现锚点的跳转有两种形式,一种是a标签+nam ...
- Oracle课程档案,第十七天
flashback drop 闪回下降(删除)SQL> show parameter recyclebinSQL> purge recyclebin;(清除回收站)SQL> crea ...