多个约束项的 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;
        };
    };
};

我基本上想定期为 abcd 生成一组新值。上面的代码不起作用,因为它们的值在我的模拟中没有改变。知道怎么做吗?

当您生成一个字段时,其他字段不能更改它们的值,它们是约束的输入。鉴于您的限制,如果其他三个值无法更改,则一个字段只能有一个正确值。

你可能需要修改设计,把带约束的字段放在一个struct下,并且有一个这个struct类型的字段。因此,您将只有一个,而不是四个独立的氏族,它会做正确的工作。