SV-随机约束和分布-自用
随机约束和分布
- 随机化就是为了能更好的测试,找到连自己都没想到的缺陷
- 随机化是为了产生更多可能的驱动,在 Class 中使用
- 在类中使用rand/randc表明随机属性,constraint约束一起声明,后期对象调用使用randomize
- 约束表达式由约束求解器完成,不同仿真器对于同一个约束和种子值求解出来的数值可能是不相同的
- SV只能随机化2值数据类型,位可以是2位/4位,无法随机出X/Z以及字符串
- 随机化采用受约束的随机测试法:CRT,自动产生测试机,定向测试集只需施加激励,而后人工检查输出结果
- 对象执行randomize()前会先执行pre_randomize()以及post_randomize()
- $random()平均分布,返回32位有符号随机数
- $urandom()平均分布,返回32位无符号随机数
- $urandom_range()在指定范围内的平均分布
class Pakcet; //类中声明rand变量与约束rand bit[31 : 0] src, dst, date[8];randc bit[7 : 0] kind;constraint c {src > 10 ; src < 15;}
end classPacket p;
initial beginp = new(); //创建类对象assert(p.randomize()) else //对象调用随机方法 遇到约束方面问题返回0$fatal(0, "Pakcet::randomize failed");transmit(p);end
其中,rand与randc区别:
rand 每次随机数可能相同,randc 不存在随机数相同情况
class date;rand bit[2 : 0] month;rand bit[4 : 0] day;rand int year;constraint c_data{month inside{[1 : 12]};day inside {[1 : 31]};year inside {[2010 : 2030]};end class
无法生成 month = 10,因为month为3位,最多到7
rand int src, dst;
constraint c_dist{src dist {0:40,[1:3]:=60};// src = 0, weight = 40/220;// src = 1, weight = 60/220;// src = 2, weight = 60/220;// src = 3, weight = 60/220;dst dist {0:/40,[1:3]:/60}; //:/表示这区间的总权重// dst = 0, weight = 40/100;// dst = 1, weight = 20/100;// dst = 2, weight = 20/100;// dst = 3, weight = 20/100;
}
:= X 表示区间内的每个元素都是等于权重X
:/ X 表示区间内的每个元素总和等于权重X
rand logic[15 : 0] r, s, t;
constraint c_bidir{r < t;s == r;t < 30;s > 25;
}
- 约束块是并行的
- 约束是双向的,会同时计算所有的随机变量的约束
class Packet;rand int length;constraint c_short {length inside {[1 : 32]}; }constraint c_long {length inside {[1000 : 1023]};}
end class
Pakcet p;
initial beginp = new();p.c_short.constraint_mode(0); //打开c_short约束assert(p.randomize());transmit(p);p.constrain_mode(0);p.c_short.constraint_mode(1);//关闭c_short约束assert(p.randomize());transmit(p);
end
可以使用constraint_mode来打开或者关闭约束
class Transaction;rand bit[31 : 0] addr, data;constraint c1{soft addr inside {[0 : 100], [1000 : 2000];}end classTransaction t;initial begint = new ();assert(t.randomize() with {addr >= 50; addr <= 1500; data < 10;});driveBus(t);assert(t.randomize() with {addr == 2000; data > 10;});driveBus(t);end
randomize( ) with 称为:外部约束,内部约束和外部约束之间是协调的
soft 称为:软约束,当软约束与其他约束相背时,软约束失效
class Rising;byte low;rand byte med, hi;constraint up {low < med; med < hi;}
end class
initial beginRising r;r = new();r.randomize();r.randomize(med);//只随机化med, 其他为0r.randomize(low);//同理
end
所有被指定或者没有被指定rand的变量都可以做randomize()的参数被随机化
若一个随机化失败,该随机化过程失败
parameter MAX_SIZE = 10;
class RandStuff;bit[1 : 0] value = 1;
end class
class RandArray;rand RandStuff array[];constraint c{array.size() inside {[1 : MAX_SIZE]};}function new();array = new[MAX_SIZE];foreach(array[i])array[i] = new();endfunction;end classRandArray ra;initial beginra = new();assert(ra.randomize());foreach(ra.array[i])$display(ra.array[i].value);end
调用随机函数前要保证句柄数组的每一个句柄元素都是非悬空的
对于多个随机对象,需要在随机化之前分配所有的元素,动态句柄数组的大小可以保持不变或者减小,不能增加
SV-随机约束和分布-自用相关推荐
- SV学习(8)——随机约束和分布、约束块控制
SV学习(8)--随机约束和分布.约束块控制 1. 随即约束和分布 1.1. 为什么需要随机? 1.2. 要随机做什么? 1.3. 声明随机变量的类 1.4. 什么是约束 1.5. 权重分布 1.6. ...
- SystemVerilog学习笔记5——随机约束和分布
目录 随机约束和分布 为何需要随机? 为何需要约束? 需要随机什么? 声明随机变量的类 什么是约束? 权重分布 约束块控制 打开或关闭约束 内嵌约束 随机函数 数组约束 数组的属性约束 随机化句柄数组 ...
- 随机约束——数组约束
目录 内容: 数组的属性约束: 约束数组的元素: 产生唯一元素值的数组: 使用rand: 使用randc: 使用unique: 数据约束: 随机化句柄数组: 新增内容: 对于类中的属性变量,有的添加了 ...
- matlab随机生成正太分布,MATLAB如何使用normrnd函数生成正态分布随机数
MATLAB如何使用normrnd函数生成正态分布随机数 [语法说明] R=normrnd(mu,sigma):生成服从参数为mu和sigma的正态分布的随机数.mu为均值,sigma为标准差.R是与 ...
- 利用FFT计算非平稳随机信号WVD分布
clc clear all NN=100; w1=0.001; a1=0.0005; w2=0.001; a2=-0.005; j=sqrt(-1); nn=-3*NN-1:1:3*NN-1; ...
- SV 学习笔记(四)随机与约束
文章目录 一.随机约束与分布 1.1 随机变量 1.2 约束 1.2.1 数值分布约束 1.2.2 权重分布约束:dist 1.2.3 条件约束 1.2.4 双向约束 1.3 约束块控制 1.3.1 ...
- SV--随机化笔记总结
目录 1.随机约束和分布 1.1 为什么需要随机? 1.2 为什么需要约束? 1.3 要随机的是什么? 1.4 声明随机变量的类 1.5 什么是约束? 1.6 权重分布 1.7 集合成员和inside ...
- 电视剧《大秦赋》最近很火!于是我用Python抓取了“相关数据”,发现了这些秘密............
前言 最近,最火的电视剧莫过于<大秦赋了>,自12月1日开播后,收获了不错的口碑.然而随着电视剧的跟新,该剧在网上引起了激烈的讨论,不仅口碑急剧下滑,颇有高开低走的趋势,同时该剧的评分也由 ...
- Silverlight实用窍门系列:28.Silverlight制作随机分布雷达扫描点,模拟雷达扫描图之被扫描设备【附带源码实例】...
实际项目中,我们模拟一个监控多台电脑的雷达扫描图效果.我们假设发现了很多台设备,这些设备具有CPU使用率这个属性,在雷达扫描的时候,如果CPU的值高于90则报警为红色. 本节实例建立在上一节的基础之上 ...
最新文章
- HDU 6015 Skip the Class
- mysql下载吧_Mysql安装图文教程
- 面试官:为什么HTTPS是安全的
- 广电运通不好进吗_我可以说郑州新风的安装大部分都是垃圾吗?
- 跟随者数字解码_跟随模式的数字
- app每秒并发数_性能测试连载 (38) jmeter 线程数与性能测试的负载模式
- jqgrid columnChooser列的自定义及存储和获取
- Potted Flower(线段树+dp)
- 字节跳动学前端还是java_【全国】—Java/前端工程师—字节跳动
- 【学习Spring框架】依赖注入和控制反转异同?
- ArcMap中无法添加ArcGIS Online底图的诊断方法
- cadence17.2小白eda365skill 安装教程
- 【Lua指南】lua脚本世界--快速入门
- html视频标签略缩图,JavaScript截取video标签视频缩略图 方法1
- 〖数学算法〗开平方的七种算法
- 皇图中原青豫大战打到服务器维护,【九州皇图】青、豫国砸再现激情
- JS实现关闭网页广告弹窗特效
- win7搜索文件 服务器,win7系统搜索不到文件的解决方法
- LeetCode #743 Network Delay Time
- 协同过滤-SSM服装在线购买购物商城(SSM,JSP,Bootstrap,MYSQL)
热门文章
- 如何从大数据中获得农业数据_大数据在农业中的四大应用
- 流星群侠传服务器维护中是什么意思,流星群侠传一直进不去 无法进入游戏解决方法...
- 魔方、齿轮、融合剂:当新ICT技术邂逅教育产业
- 月是故乡明 中秋主题相册制作
- 互联网营销和分析专用名词速览
- html的slider怎么在图片下面,javascript – HTML5滑块.如何使用’noUiSlider’
- DevOps关键能力之持续交付 - 新书预览《加速:精益软件和DevOps的科学》
- 基于遗传算法的供水泵站节能降耗优化
- vue 请求参数数组_vue中get请求如何传递数组参数
- 小米造车 500 天,现在怎么样了?