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的更多相关文章

  1. SV中的随机化

    SV搭建testbench的关键概念:CRT(constraint random test),测试集的随机化. 由于对象class由数据和操作组成,所以对数据的随机化一般放在一个class内.(对环境 ...

  2. SV中的线程

    SV中线程之间的通信可以让验证组件之间更好的传递transaction. SV对verilog建模方式的扩展:1) fork.....join 必须等到块内的所有线程都执行结束后,才能继续执行块后的语 ...

  3. SV中的OOP

    OOP:Object-Oriented Programming,有两点个人认为适合验证环境的搭建:1)Property(变量)和Method(function/task)的封装,其实是BFM模型更方便 ...

  4. systemverilog(3)之Randomize

    what to randomize? (1) primary input data <==one data (2)encapsulated input data <== muti grou ...

  5. 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆

    挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV.     PV:计划值,在即定时间点前计划 ...

  6. VBA使用的Randomize和DoEvents

    Randomize private function getInt() dim n,m as integer Randomize n=1 m=3 getInt=Int((m+1-n)*rnd + n) ...

  7. Cadence UVM基础视频介绍(UVM SV Basics)

    Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...

  8. 挣值管理(PV、EV、AC、SV、CV、SPI、CPI)记忆之我见

    挣值管理(PV.EV.AC.SV.CV.SPI.CPI)记忆之我见 挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三 ...

  9. 【等待事件】序列等待事件总结(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文档结 ...

随机推荐

  1. Windows 使用 Gogs 搭建 Git 服务器(转)

    Windows 使用 Gogs 搭建 Git 服务器   随便说两句 之前有使用 Gitblit 在Windows搭建Git服务器,用的也挺好的,可能安装起来略麻烦一点.现在全用 Gogs 在wind ...

  2. XCode10 运行app报错

    原因很简单:Xcode10起,苹果摒弃了对libstdc++库的支持转而支持libc++库了.为了保证老代码能跑,必须将几个库复制到对应文件夹(见后).同时修改Build Phases中的Link B ...

  3. 梯度下降(gradient descent)算法简介

    梯度下降法是一个最优化算法,通常也称为最速下降法.最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的.最速下降法是用 ...

  4. 6 个开源的家庭自己主动化工具 | Linux 中国

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79466841 wx_fmt=jpeg& ...

  5. iOS 使用xib定义一个View,修改frame无效问题解决

    遇到过好多次使用自定义view,修改frame无效问题, 之前都是放弃xib,直接手写,发现手写简单的还行,复杂的UI就坑逼了.所以还是需要用到可视化编辑的xib. 整理一下,自己备忘也供iOS开发的 ...

  6. Android的Base64的坑

    Base64.encodeToString加密后一直和Apache的对不上,多了换行符,最后使用了NO_WRAP就好了 Base64.encodeToString(src, Base64.URL_SA ...

  7. ubuntu16.04 在/etc/network/interfaces设置static ip无效

    双网卡使用无线网卡上互联网,使用以太网卡连局域网,在/etc/network/interfaces里对以太网卡设置static ip无效,使用ifconfig临时设置也仅能工作一会,设置的ip马上就消 ...

  8. 【消灭代办】第5周 - null拷贝,input自适应,进度条加载,颜色随机值

    2018.12.10 代办一:javascript中js怎么拷贝null的值 null属于简单类型的数值,直接进行拷贝即可: 2018.12.11 代办二:怎么让input自适应宽度? 这样是写下代办 ...

  9. iOS WKWebView (NSURLProtocol)拦截js、css,图片资源

    项目地址github:<a href="https://github.com/LiuShuoyu/HybirdWKWebVIew/">HybirdWKWebVIew&l ...

  10. 11.12git部分和redis

    2018-11-12 09:54:58 这星期把luffycity看完,然后周末回学校 越努力,越幸运!永远不要高估自己! 具体可以参考  戳我啊!! 一些git常用命令: 目前已使用Git的四个命令 ...