systemverilog 语法
2011-09-14 16:11
134 查看
1.fork join
2.使用rand_mode()禁止随机变量
rand_mode()方法能用于控制随机变量是否有效。当一个随机变量是被禁止的时候,如同没有被声明为rand或者randc一样。无效变量不会被randomize()方法随机化,它们的值等同非随机变量,也称为状态变量。所有的随机变量初始都是有效、使能的。
rand_mode()方法的语法如下所示:
或者:
object为指向定义了随机变量的对象的指针的任意表达式。
random_variable为操作随机变量的名称。假如没有指定(只在作为task调用时允许),将作用到指定对象内所有的随机变量。
当作为任务调用时,rand_mode方法的输入参数决定执行的操作行为如 表.18-1 所示。
表 18.1. rand_mode参数表
对于unpacked数组变量,random_variable可以使用索引指定单个数组单元,忽略索引会导致数组所有单元受操作影响。
对于unpacked结构变量,random_variable可以使用成员指定单个结构成员,忽略成员会导致结构所有成员受操作影响。
假如随机变量是对象的句柄,那么仅仅变量的模式被改变,而不是对象中随机变量的模式(参见 18.5.8 中的global约束)。
如果指定变量在类的层次结构中不存在,或者尽管存在但是并没有被声明为rand或者randc,编译器应当报告错误。
当作为函数调用时,rand_mode()返回某个指定随机变量的当前活动状态。返回1表示变量是活动的,打开的;如果返回0表示变量是禁止的,关闭的。
rand_mode()的函数形式仅仅接受单个变量;因此如果指定变量是unpacked数组,必须通过索引选择单个数组单元。
举例:
这个例子首先禁止对象packet_a中的所有随机变量,然后使能source_value变量。最后把ret变量设置成dest_value变量中取出的活动状态。
方法rand_mode()是内建的,不能被重载。
如果随机变量声明为静态的static, 变量的rand_mode状态应当也是静态的。举例来说,如果rand_mode()被设置成禁止的,该随机变量在基类的任何一个实例中都是禁止的。
3.使用constraint_mode()控制约束
constraint_mode()方法能用于控制约束是否有效。当一个约束被禁止的时候,不会被randomize()方法考虑。所有的约束初始都是有效、使能的。
constraint_mode()方法的语法如下所示:
或者:
object为指向约束的句柄的任意表达式。
constraint_identifier为操作约束块的名称。约束名称可以是类层级结构中的任意约束块。假如没有指定(只在作为task调用时允许),将作用到指定对象内所有约束。
当作为任务调用时,constraint_mode方法的输入参数决定执行的操作行为如表18-2 所示。
表 18.2. constraint_mode参数表
如果指定约束块在类的层次结构中不存在,编译器应当报告错误。
当作为函数调用时,constraint_mode()返回某个指定约束块的当前活动状态。返回1表示约束块是活动的;如果返回0表示约束块是被禁止的。
举例:
在这个例子中,函数toggle_rand首先检查指定包对象p内的约束filter1的当前活动状态,如果约束是使能的就禁止它;否则就激活它。最后函数调用randomize方法为变量source_value生成一个新的随机值。
方法constraint_mode()是内建的,不能被重载。
2.使用rand_mode()禁止随机变量
rand_mode()方法能用于控制随机变量是否有效。当一个随机变量是被禁止的时候,如同没有被声明为rand或者randc一样。无效变量不会被randomize()方法随机化,它们的值等同非随机变量,也称为状态变量。所有的随机变量初始都是有效、使能的。
rand_mode()方法的语法如下所示:
task object[.random_variable]::rand_mode( bit on_off );
或者:
function int object.random_variable::rand_mode();
object为指向定义了随机变量的对象的指针的任意表达式。
random_variable为操作随机变量的名称。假如没有指定(只在作为task调用时允许),将作用到指定对象内所有的随机变量。
当作为任务调用时,rand_mode方法的输入参数决定执行的操作行为如 表.18-1 所示。
取值 | 意义 | 描述 |
0 | OFF | 禁止指定的随机变量,使其在后续randomize()方法中不被随机化。 |
1 | ON | 使能指定的随机变量,使其在后续randomize()方法中被随机化。 |
对于unpacked结构变量,random_variable可以使用成员指定单个结构成员,忽略成员会导致结构所有成员受操作影响。
假如随机变量是对象的句柄,那么仅仅变量的模式被改变,而不是对象中随机变量的模式(参见 18.5.8 中的global约束)。
如果指定变量在类的层次结构中不存在,或者尽管存在但是并没有被声明为rand或者randc,编译器应当报告错误。
当作为函数调用时,rand_mode()返回某个指定随机变量的当前活动状态。返回1表示变量是活动的,打开的;如果返回0表示变量是禁止的,关闭的。
rand_mode()的函数形式仅仅接受单个变量;因此如果指定变量是unpacked数组,必须通过索引选择单个数组单元。
举例:
class Packet; rand integer source_value, dest_value; ... other declarations endclass int ret; Packet packet_a = new; // 关闭对象内的所有变量 packet_a.rand_mode(0); // ... other code // Enable source_value packet_a.source_value.rand_mode(1); ret = packet_a.dest_value.rand_mode();
这个例子首先禁止对象packet_a中的所有随机变量,然后使能source_value变量。最后把ret变量设置成dest_value变量中取出的活动状态。
方法rand_mode()是内建的,不能被重载。
如果随机变量声明为静态的static, 变量的rand_mode状态应当也是静态的。举例来说,如果rand_mode()被设置成禁止的,该随机变量在基类的任何一个实例中都是禁止的。
3.使用constraint_mode()控制约束
constraint_mode()方法能用于控制约束是否有效。当一个约束被禁止的时候,不会被randomize()方法考虑。所有的约束初始都是有效、使能的。
constraint_mode()方法的语法如下所示:
task object[.constraint_identifier]::constraint_mode( bit on_off );
或者:
function int object.constraint_identifier::constraint_mode();
object为指向约束的句柄的任意表达式。
constraint_identifier为操作约束块的名称。约束名称可以是类层级结构中的任意约束块。假如没有指定(只在作为task调用时允许),将作用到指定对象内所有约束。
当作为任务调用时,constraint_mode方法的输入参数决定执行的操作行为如表18-2 所示。
取值 | 意义 | 描述 |
0 | OFF | 禁止指定的约束块,使其在后续randomize()方法中不被考虑。 |
1 | ON | 使能指定的约束块,使其在后续randomize()方法中被考虑。 |
当作为函数调用时,constraint_mode()返回某个指定约束块的当前活动状态。返回1表示约束块是活动的;如果返回0表示约束块是被禁止的。
举例:
class Packet; rand integer source_value; constraint filter1 { source_value gt 2 * m; } endclass function integer toggle_rand( Packet p ); if ( p.filter1.constraint_mode() ) p.filter1.constraint_mode(0); else p.filter1.constraint_mode(1); toggle_rand = p.randomize(); endfunction
在这个例子中,函数toggle_rand首先检查指定包对象p内的约束filter1的当前活动状态,如果约束是使能的就禁止它;否则就激活它。最后函数调用randomize方法为变量source_value生成一个新的随机值。
方法constraint_mode()是内建的,不能被重载。
相关文章推荐
- systemverilog语法(六)
- systemverilog语法(九)
- systemverilog语法
- systemVerilog语法(一)
- systemverilog语法(二)
- systemverilog语法(三)
- SystemVerilog 2005 语法
- systemverilog语法(四)
- systemverilog语法(五)
- systemverilog语法(七)
- 常用CSS缩写语法
- .net连接access数据库 关键字引起的 语句的语法错误
- 基本的ruby语法
- Objective-C语法快速参考
- Knockout应用开发指南 第三章:绑定语法(1)
- SQL语法之查询语句
- myibatis中出现“@P0' 附近有语法错误。”
- Javascript学习总结-基本语法-(一)
- Linq语法详细
- Python基础 -- 04 基础语法(文件操作、综合应用)