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

On Telegram’s website, it says that Pavel Durov “supports Telegram financially and ideologically while Nikolai (Duvov)’s input is technological.” Currently, the Telegram team is based in Dubai, having moved around from Berlin, London and Singapore after departing Russia. Meanwhile, the company which owns Telegram is registered in the British Virgin Islands. The news also helped traders look past another report showing decades-high inflation and shake off some of the volatility from recent sessions. The Bureau of Labor Statistics' February Consumer Price Index (CPI) this week showed another surge in prices even before Russia escalated its attacks in Ukraine. The headline CPI — soaring 7.9% over last year — underscored the sticky inflationary pressures reverberating across the U.S. economy, with everything from groceries to rents and airline fares getting more expensive for everyday consumers. "The result is on this photo: fiery 'greetings' to the invaders," the Security Service of Ukraine wrote alongside a photo showing several military vehicles among plumes of black smoke. Telegram users are able to send files of any type up to 2GB each and access them from any device, with no limit on cloud storage, which has made downloading files more popular on the platform. Friday’s performance was part of a larger shift. For the week, the Dow, S&P 500 and Nasdaq fell 2%, 2.9%, and 3.5%, respectively.
from us


Telegram Arnold Enginegger
FROM American