Telegram Group & Telegram Channel
Возвращаясь к напечатанному. Как известно, Verilator не поддерживает неблокирующие присваивания в initial, и даже превращает их в блокирующие, если проигнорировать предупреждение. Это наследие cycle-accurate природы симулятора и в современных реалиях, когда он стал по сути event-driven, может приводить к гонкам.

Есть несколько способов обхода этой особенности, таких как присвоение сигналам значения на обратном фронте клока, использование единичной задержки, и даже вот такого финта, предложенного автором Верилятора.

К сожалению, первые два не сильно пригодны, когда у вас уже написаны таски, которые не хочется переписывать. А последний, авторский, теперь и вовсе не работает. Раньше работал, но потом Верилятор стал лучше соответствовать стандартам 😏 (на других симамах он и раньше не работал).

В общем, в результате небольшого эксперимента, опытным путём был выработан следующий способ, одинаково работающий на всех имеющихся в моём распоряжении симуляторах:

logic start_trigger;
initial begin
start_trigger = 1'b0;
#0;
start_trigger = 1'b1;
end

always @(start_trigger) begin
// Здесь делаем то, что обычно делаем в initial
end


Такой квази-initial работает так же, как обычный, за исключением того, что выполняется после всех настоящих initial. При этом, внутри него можно использовать неблокирующие присваивания и задержки.
Надеюсь, что Верилятор больше не поломают, и способ будет годен до тех пор, пока не появится настоящая поддержка неблокирующих присваиваний в initial.

P.S.: Это третий вариант (после авторского). Второй недавно сломали 😏
Please open Telegram to view this post
VIEW IN TELEGRAM



group-telegram.com/enginegger/92
Create:
Last Update:

Возвращаясь к напечатанному. Как известно, Verilator не поддерживает неблокирующие присваивания в initial, и даже превращает их в блокирующие, если проигнорировать предупреждение. Это наследие cycle-accurate природы симулятора и в современных реалиях, когда он стал по сути event-driven, может приводить к гонкам.

Есть несколько способов обхода этой особенности, таких как присвоение сигналам значения на обратном фронте клока, использование единичной задержки, и даже вот такого финта, предложенного автором Верилятора.

К сожалению, первые два не сильно пригодны, когда у вас уже написаны таски, которые не хочется переписывать. А последний, авторский, теперь и вовсе не работает. Раньше работал, но потом Верилятор стал лучше соответствовать стандартам 😏 (на других симамах он и раньше не работал).

В общем, в результате небольшого эксперимента, опытным путём был выработан следующий способ, одинаково работающий на всех имеющихся в моём распоряжении симуляторах:

logic start_trigger;
initial begin
start_trigger = 1'b0;
#0;
start_trigger = 1'b1;
end

always @(start_trigger) begin
// Здесь делаем то, что обычно делаем в initial
end


Такой квази-initial работает так же, как обычный, за исключением того, что выполняется после всех настоящих initial. При этом, внутри него можно использовать неблокирующие присваивания и задержки.
Надеюсь, что Верилятор больше не поломают, и способ будет годен до тех пор, пока не появится настоящая поддержка неблокирующих присваиваний в initial.

P.S.: Это третий вариант (после авторского). Второй недавно сломали 😏

BY Arnold Enginegger




Share with your friend now:
group-telegram.com/enginegger/92

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

What distinguishes the app from competitors is its use of what's known as channels: Public or private feeds of photos and videos that can be set up by one person or an organization. The channels have become popular with on-the-ground journalists, aid workers and Ukrainian President Volodymyr Zelenskyy, who broadcasts on a Telegram channel. The channels can be followed by an unlimited number of people. Unlike Facebook, Twitter and other popular social networks, there is no advertising on Telegram and the flow of information is not driven by an algorithm. On Feb. 27, however, he admitted from his Russian-language account that "Telegram channels are increasingly becoming a source of unverified information related to Ukrainian events." In a message on his Telegram channel recently recounting the episode, Durov wrote: "I lost my company and my home, but would do it again – without hesitation." "For Telegram, accountability has always been a problem, which is why it was so popular even before the full-scale war with far-right extremists and terrorists from all over the world," she told AFP from her safe house outside the Ukrainian capital. Telegram was founded in 2013 by two Russian brothers, Nikolai and Pavel Durov.
from us


Telegram Arnold Enginegger
FROM American