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: |

In addition, Telegram's architecture limits the ability to slow the spread of false information: the lack of a central public feed, and the fact that comments are easily disabled in channels, reduce the space for public pushback. He adds: "Telegram has become my primary news source." On December 23rd, 2020, Pavel Durov posted to his channel that the company would need to start generating revenue. In early 2021, he added that any advertising on the platform would not use user data for targeting, and that it would be focused on “large one-to-many channels.” He pledged that ads would be “non-intrusive” and that most users would simply not notice any change. Sebi said data, emails and other documents are being retrieved from the seized devices and detailed investigation is in progress. Telegram does offer end-to-end encrypted communications through Secret Chats, but this is not the default setting. Standard conversations use the MTProto method, enabling server-client encryption but with them stored on the server for ease-of-access. This makes using Telegram across multiple devices simple, but also means that the regular Telegram chats you’re having with folks are not as secure as you may believe.
from jp


Telegram Arnold Enginegger
FROM American