Я запускаю испытательный стенд с UVM. В одном из run_phase()
задачи компоненты, я делаю fork...join_none
, чтобы начать следующий цикл, который проходит через все моделирование:
fork
forever @(posedge trigger) begin
force dut.a = $urandom_range('h00,'hFF);
force dut.b = $urandom_range('h0, 'hF);
force dut.c = $urandom_range('h00,'hFF);
force dut.d = $urandom_range('h0, 'hF);
force dut.e = $urandom_range('h00,'hFF);
force dut.f = $urandom_range('h0, 'hF);
end
...
some other stuff
...
join_none
Дело в том, что сигналы , с и х получить принудительный к тому же значению. То же самое касается b, d и e.
Если новый триггер posedge появился позже, новые значения получаются рандомизированными и принудительными, но снова я получаю a == c == e
и b == d == e
.
Кажется, что $urandom_range
вызывается только один раз для выбора каждого параметра (от 0 до FF и от 0 до F), а возвращаемое значение повторно используется для трех команд force
.
EDIT: Я был в состоянии воспроизвести проблему на минимальном ТБ: http://www.edaplayground.com/x/4_ph
Похоже, вопрос с продавцом, я использую, выбирая другие инструменты проблема уходит.
EDIT 2: Я не понял, почему именно это происходит, но это, кажется, связано с тем, что сила заявление походит немигающая присвоения (т.е. если изменения RHS сигнала в будущем , принудительная LHS будет следовать за ним до тех пор, пока сила не будет равна release d, это не похоже на присвоение '='.
Поэтому я предполагаю, что проблема заключается в использовании возвращаемого значения функции как RHS. (Я не знаю, какое время жизни это возвращаемое значение имеет)
Решение в моем случае состояло в том, чтобы сохранить $ urandom значение переменной со статическим временем жизни, а затем принудительно включить эту переменную в RTL (как предложил J Reid)
http://stackoverflow.com/help/mcve – toolic
Насколько близко код, который вы отправили, к тому, что вы фактически выполнили? –
@ dave_59 Я отредактировал сообщение с другим контекстом. Я пытаюсь воссоздать его на EDA Playground, но у меня проблемы с моей учетной записью на данный момент – chinocolerico