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)控制和随机变量的随机属性控制相关推荐

  1. System Verilog clocking块

    注意:组合电路不能使用clocking块,组合逻辑信号的变化是立即的,不等待上升沿触发. 为了便于理解clocking块的提前采样.延后驱动,做图一图二对比说明: 仿真代码如下: `timescale ...

  2. System Verilog学习笔记—随机化约束的控制

    目录 1.控制多个约束块儿constraint_mode() 2.控制随机变量 2.1 rand_mode() 2.2 randomize() with {} 2.3 randomize单独控制变量 ...

  3. System Verilog的约束constraint

    System Verilog的约束constraint 1.约束块(constraint block) 2.约束块的取值 A.简单表达式 B.约束块权重取值:dist 1.:=取权重 2.:/取权重 ...

  4. (106)System Verilog类中变量双向约束关系

    (106)System Verilog类中变量双向约束关系 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类中变量双向约束关系 5)结 ...

  5. (26)System Verilog范围随机函数约束类内变量

    (26)System Verilog范围随机函数约束类内变量 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog范围随机函数约束类内变量 ...

  6. (25)System Verilog类外约束类内变量

    (25)System Verilog类外约束类内变量 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类外约束类内变量 5)结语 1.2 ...

  7. (20)System Verilog利用clocking块产生输出信号延迟激励

    (20)System Verilog利用clocking块产生输出信号延迟激励 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog利用cl ...

  8. (19)System Verilog利用clocking块产生输入信号延迟激励

    (19)System Verilog利用clocking块产生输入信号延迟激励 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog利用cl ...

  9. (18)System Verilog禁止约束语句

    (18)System Verilog禁止约束语句 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog禁止约束语句 5)结语 1.2 FPG ...

最新文章

  1. Microbiome: 再论扩增子功能预测分析(Picrust)的效果
  2. s7edge出现android停止,三星S7 Edge升级安卓7.0出现了这个问题!
  3. hdu4869 费马小+快速幂
  4. Python基础教程:r‘‘, b‘‘, u‘‘, f‘‘ 的含义
  5. 第五十三期:公司如何选择数据库?DynamoDB、Hadoop和MongoDB 大比拼
  6. Docker Compose运行MySQL、Redis服务
  7. Android开发笔记(二)
  8. mysql 省份名排序_MySQL:如何利用用户变量进行分组排序并取top1数据
  9. python从语音生成MFCC特征
  10. 基于Hexo+Node.js+github+coding搭建个人博客——基础篇
  11. 跟小静学MVC3[03]--相关语法特性小补习
  12. Python可视化深度图
  13. PMP项目管理全套表格史上最全,建议收藏
  14. 计算机逆向工程专业,计算机软件反向工程的合法性研究
  15. No known package when getting value for resource number 0xfe080009
  16. java集合优秀率怎么算,优秀率怎么算(及格率和优秀率公式)
  17. 地理空间分析中的常用python操作
  18. 简述python文件操作_Python 文件操作
  19. java imgui,发布使用 IMGui 基于 msys2 平台编写的软件
  20. bzoj1123 BLO

热门文章

  1. Python 模拟Hermite Polynomial厄米特多项式
  2. httpclient调用京东万象数字营销频道新闻api实例
  3. 【外行也能看懂的RabbitMQ系列(一)】—— RabbitMQ快速入门篇(内含丰富实例)
  4. Mysql分区表为什么唯一键必须添加分区字段
  5. 13,xilinx 7系列FPGA理论篇——IO_FIFO篇简介
  6. 测试学习-119-使用Excel做好看的报告图
  7. 商标注册初审公告后可以使用吗?
  8. 最近网络很火的支付宝 收款码 小议
  9. Navigation的简单使用
  10. Java虚拟机(jvm)——垃圾收集器与内存分配策略