首页 > 解决方案 > Specman-e:生成所有可能的解决方案?

问题描述

重新生成特定结构时,是否有一种简单的方法可以使其在满足约束的所有可能值都生成之前不生成先前的值?

例如,当(重新)生成时:

Start as:
  specman -c 'define TRIES 16; load x;run;' 

<'
struct x {
    data[2] :  list of uint(bits:2);
};
extend sys {
    fu : x;

    run() is also {
        for i from 1 to TRIES do {
            gen fu;
            print fu.data;
        };
    };
};
'>

有可能4*4 = 16的数据组合,问题是能够gen16 次并获得 16 个不同的值。

谢谢。

标签: specman

解决方案


all_different() 可以在这里提供帮助。这有点棘手,因为该字段是一个列表。所以这可以使用辅助字段来完成。例如:

struct x {
    data[2]     :  list of uint(bits:2);

    data_as_one :  uint(bits:4);

    keep data[0] == data_as_one[1:0];
    keep data[1] == data_as_one[3:2];
};

extend sys {
    fu : x;

    fus[TRIES] : list of x;
    keep fus.all_different(.data_as_one);

    run() is also {
        for each in fus {
            out(it.data);
        };
    };
};

推荐阅读