System Verilog约束块(constrain block)控制和随机变量的随机属性控制
System Verilog约束块constrain block控制和随机变量的随机属性控制
- 1、constrain_mode()函数
- a、constrain_mode()可以控制一个约束块
- b、constrain_mode()也可以控制一个对象的所有约束块
- tips:
- 2、rand_mode()函数
- a、rand_mode()可以控制一个随机变量
- b、rand_mode()可以控制一个对象的随机变量
- tips
在一个对象中,可能会有很多的约束块,在实际使用时,我们希望一些随机块起作用,一些随机块不起作用,这就需要控制开关来控制约束块。在system verilog中提供了constrian_mode()函数来打开或关闭约束,同时也提供了随机变量的控制函数rand_mode()来控制变量的随机性,当随机变量的随机属性被关闭时,它就不在是一个随机变量,randomize()函数不会对其赋。
1、constrain_mode()函数
System Verilog中constrain_mode()方法的定义:
task object[.constraint_identifier]::constraint_mode( bit on_off );
或
function int object.constraint_identifier::constraint_mode();
当constrain_mode()作为task调用时,控制约束块的开启和关闭:
objec.constrain.constrain_mode(0);//关闭object的constrain约束块;
objec.constrain.constrain_mode(1);//打开object的constrain约束块;
当constrain_mode()作为function调用时,返回约束块的开启或关闭的状态:
ret = objec.constrain.constrain_mode();
//返回对象object的constrain的开启或关闭的状态
a、constrain_mode()可以控制一个约束块
objec.constrain.constrain_mode(0);//关闭object的constrain约束块;
objec.constrain.constrain_mode(1);//打开object的constrain约束块;
下面例子先关闭对象p的filter1约束块,再打开:
class Packet;rand integer source_value;constraint filter1 { source_value > 2 * m; }constraint filter2 { source_value < 4 * m; }
endclass
class test;Packet p=new();p.filter1.constrain_mode(0);p.filter1.constrain_mode(1);
endclass
b、constrain_mode()也可以控制一个对象的所有约束块
objec..constrain_mode(0);//关闭object的所有约束块;
objec.c.constrain_mode(1);//打开object的所有约束块;
下面例子先关闭对象p的所有约束块,再打开
class Packet;rand integer source_value;constraint filter1 { source_value > 2 * m; }constraint filter2 { source_value < 4 * m; }
endclass
class test;Packet p=new();p.constrain_mode(0);p.filter1.constrain_mode(1);p.constrain_mode(1);
endclass
tips:
1、constrain_mode()是system verilog的内嵌函数,不能被重载。
2、rand_mode()函数
rand_mode()方法在system verilog中的定义如下:
task object[.random_variable]::rand_mode( bit on_off );
或
function int object.random_variable::rand_mode();
当rand_mode()作为task调用时,控制随机变量的随机属性开和关;
task object[.random_variable]::rand_mode( 0 );//关闭对象object(或object的随机变量random_variable)的随机属性
task object[.random_variable]::rand_mode( 1 );//打开对象object(或object的随机变量random_variable)的随机属性
当rand_mode()作为function调用时,返回随机变量的随机属性的状态;
ret = object[.random_variable]::rand_mode( );
//返回对象object(或object的随机变量random_variable)的随机属性,
//当随机属性打开时,返回1,否则返回0
a、rand_mode()可以控制一个随机变量
class Packet;rand integer source_value, dest_value;... other declarations
endclass
int ret;
Packet packet_a = new;
// Turn off all variables in object
packet_a.rand_mode(0);
// ... other code
// Enable source_value
packet_a.source_value.rand_mode(1);
ret = packet_a.dest_value.rand_mode();
b、rand_mode()可以控制一个对象的随机变量
class Packet;rand integer source_value, dest_value;... other declarations
endclass
int ret;
Packet packet_a = new;
// Turn off all variables in object
packet_a.rand_mode(0);
// ... other code
// Enable source_value
packet_a.source_value.rand_mode(1);
ret = packet_a.dest_value.rand_mode();
tips
1、当rand_mode()修改的变量不存在或者不是rand或randc修饰时,编译会报错;
2、当rand_mdoe()修改是一个rand/randc修饰的对象句柄,改变的只是对象的随机属性,对象内部的随机变量的属性不会被修改;
3、rand_mdoe()是system verilog的内嵌函数,不能被重载。
System Verilog约束块(constrain block)控制和随机变量的随机属性控制相关推荐
- System Verilog clocking块
注意:组合电路不能使用clocking块,组合逻辑信号的变化是立即的,不等待上升沿触发. 为了便于理解clocking块的提前采样.延后驱动,做图一图二对比说明: 仿真代码如下: `timescale ...
- System Verilog学习笔记—随机化约束的控制
目录 1.控制多个约束块儿constraint_mode() 2.控制随机变量 2.1 rand_mode() 2.2 randomize() with {} 2.3 randomize单独控制变量 ...
- System Verilog的约束constraint
System Verilog的约束constraint 1.约束块(constraint block) 2.约束块的取值 A.简单表达式 B.约束块权重取值:dist 1.:=取权重 2.:/取权重 ...
- (106)System Verilog类中变量双向约束关系
(106)System Verilog类中变量双向约束关系 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类中变量双向约束关系 5)结 ...
- (26)System Verilog范围随机函数约束类内变量
(26)System Verilog范围随机函数约束类内变量 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog范围随机函数约束类内变量 ...
- (25)System Verilog类外约束类内变量
(25)System Verilog类外约束类内变量 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类外约束类内变量 5)结语 1.2 ...
- (20)System Verilog利用clocking块产生输出信号延迟激励
(20)System Verilog利用clocking块产生输出信号延迟激励 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog利用cl ...
- (19)System Verilog利用clocking块产生输入信号延迟激励
(19)System Verilog利用clocking块产生输入信号延迟激励 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog利用cl ...
- (18)System Verilog禁止约束语句
(18)System Verilog禁止约束语句 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog禁止约束语句 5)结语 1.2 FPG ...
最新文章
- Microbiome: 再论扩增子功能预测分析(Picrust)的效果
- s7edge出现android停止,三星S7 Edge升级安卓7.0出现了这个问题!
- hdu4869 费马小+快速幂
- Python基础教程:r‘‘, b‘‘, u‘‘, f‘‘ 的含义
- 第五十三期:公司如何选择数据库?DynamoDB、Hadoop和MongoDB 大比拼
- Docker Compose运行MySQL、Redis服务
- Android开发笔记(二)
- mysql 省份名排序_MySQL:如何利用用户变量进行分组排序并取top1数据
- python从语音生成MFCC特征
- 基于Hexo+Node.js+github+coding搭建个人博客——基础篇
- 跟小静学MVC3[03]--相关语法特性小补习
- Python可视化深度图
- PMP项目管理全套表格史上最全,建议收藏
- 计算机逆向工程专业,计算机软件反向工程的合法性研究
- No known package when getting value for resource number 0xfe080009
- java集合优秀率怎么算,优秀率怎么算(及格率和优秀率公式)
- 地理空间分析中的常用python操作
- 简述python文件操作_Python 文件操作
- java imgui,发布使用 IMGui 基于 msys2 平台编写的软件
- bzoj1123 BLO