System Verilog的内嵌约束和指定参数随机

本文介绍了System Verilog中的内嵌约束randomize() with{},阐述了如何在不修改类约束的情况下添加新的约束条件。同时,讲解了randomize()函数指定参数随机的用法,指出当传入参数时,仅对指定参数进行随机化,其余变量保持为状态变量不变。
摘要由CSDN通过智能技术生成

System Verilog的内嵌约束和指定参数随机

1、内嵌约束randomize() with{}

使用内嵌约束randomize() with{},用户可以在调用randomize()方法的地方添加新的约束,这样可以避免频发修改类里的约束。添加的内嵌约束和类里的约束是等效,需要避免内嵌约束和类里的约束发生冲突,导致randomize()失败。

class buspkt;
	rand bit[31:0] addr,data;
	rand bit[4:0] len;
	constrain addr_c{
		addr inside {[20:80],[100:200]}
	}
endclass

buspkt bpt;
initial begin
	bpt=new();
	assert(bpt.randomize() with {addr > 50;addr<150;data inside {[20:50]}});
	$display("addr = %0h,data = %0h",addr,data);
	//addr 范围在50-80,100-150,data范围在20-50

	assert(bpt.randomize() with {addr == 40;data <20});
	//addr取值为40,data取值范围0-19
end

内嵌约束和类里约束不能冲突,冲突会导致randomize()失败,冲突实例如下:

class buspkt;
	rand bit[31:0] addr,data;
	rand bit[4:0] len;
	constrain addr_c{
		addr inside {[20:80],[100:200]}
	}
endclass

buspkt bpt;
initial begin
	bpt=new();
	assert
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在SystemVerilog中,您可以使用约束语句来实对随机数生成的限制。确保随机生成的每4比特的数值不相同,您可以使用`unique`关键字来实现。 以下是一个示例代码,展示了如何使用约束语句来限制随机数生成的每4比特的值不相同: ```systemverilog module UniqueConstraint; // 定义一个4比特的信号 bit [3:0] data; // 定义约束 constraint unique_constraint { foreach (data[i]) { data[i] inside {[0:15]}; // 限制每个比特的取值范围 } unique {data}; // 确保所有比特的值都是唯一的 } // 在初始块中生成满足约束随机数 initial begin // 创建随机数生成器对象 unique_constraint constraint_obj = new; // 使用约束生成随机数 constraint_obj.randomize(data); // 输出生成的随机数 $display("Generated Data: %b", data); end endmodule ``` 在上述代码中,我们定义了一个4比特的信号`data`,然后定义了一个名为`unique_constraint`的约束,其中使用了`foreach`循环限制了每个比特的取值范围为0到15,然后使用`unique`关键字确保所有比特的值都是唯一的。 在初始块中,我们创建了一个约束对象`constraint_obj`,并使用`randomize`函数根据约束生成随机数。最后,我们使用`$display`函数输出生成的随机数。 请注意,生成的随机数可能需要多次尝试才能满足约束条件,因为在有限的范围内生成唯一的值可能是一个挑战。 希望这个示例能帮助您实现在SystemVerilog中对随机数生成的约束,确保每4比特的值不相同。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值