Specman-e: генерировать все возможные решения? - PullRequest
0 голосов
/ 28 января 2019

При повторной генерации конкретной структуры существует ли простой способ заставить ее не генерировать предыдущее значение, пока не будут сгенерированы все возможные значения, удовлетворяющие ограничениям?

Например, когда (ре) генерируется:

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 комбинации данных, и вопрос в том, чтобы иметь возможность gen 16 раз и получить 16 различных значений.

Спасибо.

1 Ответ

0 голосов
/ 29 января 2019

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);
        };
    };
};
...