多个约束项的 Specman 动态生成
Specman on-the-fly generation for multiple constrained items
我有多个字段需要以这种方式进行约束:
struct my_struct {
a : uint;
b : uint;
c : uint;
d : uint;
keep 3*a + 4*b + 5*c + 6*d == 206 and a + b + c + d == 50;
my_method() @clk_event is {
while (TRUE) {
if (ctr == 0) {
gen a;
gen b;
gen c;
gen d;
};
if (ctr == 50) {
ctr = 0;
} else {
ctr += 1;
};
wait cycle;
};
};
};
我基本上想定期为 a
、b
、c
和 d
生成一组新值。上面的代码不起作用,因为它们的值在我的模拟中没有改变。知道怎么做吗?
当您生成一个字段时,其他字段不能更改它们的值,它们是约束的输入。鉴于您的限制,如果其他三个值无法更改,则一个字段只能有一个正确值。
你可能需要修改设计,把带约束的字段放在一个struct下,并且有一个这个struct类型的字段。因此,您将只有一个,而不是四个独立的氏族,它会做正确的工作。
我有多个字段需要以这种方式进行约束:
struct my_struct {
a : uint;
b : uint;
c : uint;
d : uint;
keep 3*a + 4*b + 5*c + 6*d == 206 and a + b + c + d == 50;
my_method() @clk_event is {
while (TRUE) {
if (ctr == 0) {
gen a;
gen b;
gen c;
gen d;
};
if (ctr == 50) {
ctr = 0;
} else {
ctr += 1;
};
wait cycle;
};
};
};
我基本上想定期为 a
、b
、c
和 d
生成一组新值。上面的代码不起作用,因为它们的值在我的模拟中没有改变。知道怎么做吗?
当您生成一个字段时,其他字段不能更改它们的值,它们是约束的输入。鉴于您的限制,如果其他三个值无法更改,则一个字段只能有一个正确值。
你可能需要修改设计,把带约束的字段放在一个struct下,并且有一个这个struct类型的字段。因此,您将只有一个,而不是四个独立的氏族,它会做正确的工作。