System Verilog学习笔记(十七)——随机约束(2)

System Verilog学习笔记(十七)------随机约束(2)

约束块(constraint)

  • 约束块支持整型通过set操作符来设置它们的取值范围
  • 除了成员集合设置外,也可以设置随机时的权重
  • :=操作符,表示每个值的权重是相同的
  • :/操作符,表示权重会平均分配到每一个值
c 复制代码
x dist {[100:102]}:=1,200:=2,300:=5  //表示x在100,101,102,200和300的权重是1-1-125
x dist {[100:102]}:/1,200:=2,300:=5  //表示x在100,101,102,200和300的权重是1/3-1/3-1/3-2-5
  • unique可以用来约束一组变量,使得其在随机后变量之间不会有相同的数值
c 复制代码
constraint u {unique {b,a[2:3],excluded};}  //表示a[2],a[3],b和excluded在随机化之后将包含不相同的数值
  • 可以用if-else或者->操作符来表示条件约束
c 复制代码
mode ==little ->len<10;
mode ==big->len>100;
  • foreach可以用来迭代约束数组中的元素,这些数组可以是长数组、动态数组、关联数组或者队列
c 复制代码
class C;
	rand byte A[];
	constraint c1 {
	foreach (A[i]) A[i] inside {4,6,8,9};
	} //表示A[i]的值是从4,6,8,9里选
endclass
  • 在约束块中可以调用函数来描述约束

  • 软约束:用来指定变量的默认值和权重。如果用户在使用时,指定了外部约束对同一个变量做二次约束,或者用户定义了子类,也对同一个变量做二次约束时,那么硬约束可以"裹着"软约束,并不会导致随机数产生的失败。

c 复制代码
class packet;
	rand int length;
	constraint deflt {soft length inside {32,1024};}  //使用soft约束时硬约束可以生效
endclass
packet p=new();
p.randomize () with {length ==1512;}
  • 内嵌约束对于同名的变量处在不同的域中,可能会出现指向模糊的情况,可以通过local::的域索引方式来明确随机变量的指向,即local::指向的变量会在包含randomize()方法的对象中。
c 复制代码
class C;
	rand integer x;
endclass
function int F(C obj, integer x);
	F=obj.randomize() with {x<local::x;};   //x指向的是class类里的integer x
endfunction

随机控制

  • rand_mode可以用来使能或者禁止随机变量
  • 当随机数被禁止时,他会同为声明为随机变量的普通变量一样,不会参与到随机化过程中
  • 一些约束块或者某个类的约束块集合都可以单个控制或者集体控制
  • 可以通过约束控制函数来使能或者关闭某些约束块
相关推荐
不太可爱的叶某人1 小时前
【学习笔记】MySQL技术内幕InnoDB存储引擎——第5章 索引与算法
笔记·学习·mysql
岁岁岁平安1 小时前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
知识分享小能手3 小时前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
pay4fun4 小时前
2048-控制台版本
c++·学习
知识分享小能手5 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3
巴伦是只猫5 小时前
【机器学习笔记 Ⅲ】4 特征选择
人工智能·笔记·机器学习
不爱说话的采儿6 小时前
UE5详细保姆教程(第四章)
笔记·ue5·游戏引擎·课程设计
weixin_418813876 小时前
Python-可视化学习笔记
笔记·python·学习
Haoea!6 小时前
Flink-05学习 接上节,将FlinkJedisPoolConfig 从Kafka写入Redis
学习·flink·kafka
Vic101016 小时前
Java 开发笔记:多线程查询逻辑的抽象与优化
java·服务器·笔记