Для того, чтобы воспроизвести ошибку, вы хотите «контролировать» случайность. Это то, что вы хотите большую часть времени.
Системный вызов $random
ограничен seed
. Когда семя дает случайные вызовы, вы получите одну и ту же последовательность.
Я бы посоветовал сохранить параметр семян и сгенерировать его по вызову $random
(без семян). Просто обязательно напечатайте переменную seed
, используемую в случае, если вы наткнетесь на ошибку.
Вместо:
seed = 0;
Использование:
seed = $random;
$display("Seed used: %d",seed);
EDIT
значение семян также может быть установлен в имитационной командной строки. В NCsim, например, это параметр -seed integer
, который устанавливает его.
В этом случае, вы можете добавить в сценарии моделирования:
#!/bin/bash
export SEED=$RANDOM
echo "Seed used: $SEED"
ncsim ...various command line options... -seed $SEED
EDIT 2
Verilog фактически ведет себя (по умолчанию), как постоянное семя дается, так что вы можете воспроизводить ошибки (see here) ,
Чтобы вручную передать семя в источнике Verilog, вам нужно будет использовать $srandom(seed)
, чтобы инициализировать семя следующих случайных вызовов. Затем вы должны использовать $urandom
вместо $random
(see here)
Для создания щёток seed
, я хотел бы попробовать использовать $urandom
перед установкой семян.
integer seed;
initial begin
seed = $urandom();
$srandom(seed);
end
//**
... tests with $urandom() calls
**//
IMHO, наконец, будет проще использовать параметр командной строки.
Когда я повторно запускаю, начальное значение всегда одинаково – grander3
В вашей команде моделирования можно определить семена, например. в командной строке NCsim '-seed $ NUMBER'. Это семя автоматически сдерживает случайные вызовы в симуляции. – Krouitch
Есть ли какие-либо опции для обработки в verilog not tool? – grander3