массив случайных чисел в Verilog

Я хочу протестировать все возможные комбинации входных данных для модуля verilog. Я смог сгенерировать эти входные данные, создав массив с вложенным циклом for. Однако я хочу пройти через массив в случайном порядке. Как это можно сделать или есть способ сгенерировать массив всех возможных входных данных, который уже находится в случайном порядке?


person neuromancer    schedule 17.05.2011    source источник
comment
Я не уверен, что понимаю. Вы говорите, что не хотите проходить массив в случайном порядке, но вложенные циклы for не будут случайными? Кроме того, можете ли вы объяснить, что вы подразумеваете под созданием массива всех возможных входных данных, который уже находится в случайном порядке?   -  person Marty    schedule 17.05.2011
comment
Если ваша цель состоит в том, чтобы перебрать все возможные допустимые комбинации на входе, не выполняя эквивалент 1,2,3,4,5 и т. д., но также и не повторяя входные данные?   -  person Ross Rogers    schedule 17.05.2011
comment
Может быть, вы ищете алгоритм перемешивания?   -  person Andy    schedule 17.05.2011
comment
@ Энди, ты можешь вставить это в ответ, чтобы я мог проголосовать? Я никогда раньше не слышал об этом типе алгоритмов, но сразу вижу их применение в настройках проверки. Интересно, делает ли SystemVerilog такие вещи как часть своих ограниченных случайных вещей.   -  person Marty    schedule 18.05.2011
comment
@Marty: SystemVerilog имеет метод shuffle для своих массивов.   -  person toolic    schedule 18.05.2011


Ответы (1)


Если вы хотите изменить список тестовых примеров, таких как перетасовка колоды карт, существует алгоритм под названием перемешивание Фишера-Йейтса для этого. Или, если вы используете SystemVerilog, инструмент указал, что для массивов есть встроенный метод shuffle.

person Andy    schedule 18.05.2011
comment
Конечно, мы все предполагаем, чего хочет нейромант. Несмотря на это, одно предостережение в отношении этого решения заключается в том, что если существует большое количество допустимых стимулов (например, два 32-битных целых числа, добавляемых в ALU), тогда метод тасования должен будет использовать всю эту память в начале теста. Если вместо этого используется инъективная хэш-функция (en.wikipedia.org/wiki/Perfect_hash_function), тогда у вас не будет проблем с выделением памяти с нулевым временем. - person Ross Rogers; 18.05.2011