Sal*_*lim 2 constraints system-verilog
我有一个可变数据,我希望最后一位为 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
Run Code Online (Sandbox Code Playgroud)
我希望输出为'b0001,但实际输出为 data = 1101”
您的问题是由您定义软约束的方式引起的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
Run Code Online (Sandbox Code Playgroud)