constraints - 软约束不适用于位变量
问题描述
我有一个变量数据,我希望最后一位为 1,其余位为 0,我使用软约束编写了这个。
class ABC;
rand bit [3:0] data;
// This constraint is defined as "soft"
constraint c_data {
soft data == 0;
data[0] == 1;
}
endclass
module tb;
ABC abc;
initial begin
abc = new;
abc.randomize();
$display ("data = %0b", abc.data);
end
endmodule
我希望输出是'b0001,但实际输出是data = 1101”</p>
解决方案
您的问题是由您定义软约束的方式引起的soft data == 0
。
只有在不与其他(硬)约束相矛盾的情况下,才会满足软约束。你的软约束说所有位data[3:0]
必须是0
。但是,在您的硬约束中,您说data[0]
必须是1
. 因此,软约束不能满足并被忽略。
您可以通过定义为硬约束来验证这一点data == 0
:然后随机化将失败。
要获得您期望的行为,请尝试按如下方式定义类:
class ABC;
rand bit [3:0] data;
// This constraint is defined as "soft"
constraint c_data {
soft data[3:1] == 0;
data[0] == 1;
}
endclass
推荐阅读
- javascript - 使用用于服务器端应用程序的 Google Drive API 授予对单个文件的读取权限
- python - 使 Boto3 上传调用阻塞(单线程)
- sql - Microsoft Access:从无处不在的提要中删除电话号码
- php - sendmail Laravel 不发送电子邮件
- c# - 从列表中选择 LINQ 并使用 WHERE
- sql - 如何将不同行中的数据透视到不同列下的单行?
- javascript - 如何 jsDoc 原型在整个项目中的可见性?
- scala - 如何在akka流中抛出异常?
- nginx - How do I add the x-forwarded-for field to my access logs for the nginx ingress controller?
- javascript - 动态改变 textarea 元素的高度