From 80502c5bc8af87a695a985563339fc4a43e666e0 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Sat, 3 Feb 2024 00:28:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D0=BA=20=D0=B2=20Assignments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assignments/fig_06.png | Bin 20588 -> 17488 bytes Basic Verilog structures/Assignments.md | 72 +++++++++--------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/.pic/Basic Verilog structures/assignments/fig_06.png b/.pic/Basic Verilog structures/assignments/fig_06.png index af67b95a098403d1a6c8487dbdf2c8e3b2328ab9..93ff309639aecd2d65356ed458414c812919bec0 100644 GIT binary patch literal 17488 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 literal 20588 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 Обратите внимание на то, что изменился и блок always. +> Обратите внимание на то, что `always_ff` поменялся на `always_comb`. Как вы думаете, какая схема будет сгенерирована по описанию, представленному _Листинга 6_, и что произойдет с этой схемой, если заменить в нем все блокирующие присваивания на неблокирующие? @@ -378,7 +382,7 @@ _Рисунок 13. Моделирование цепочки присваива После происходит присваивание вычисленных значений сигналам `temp` и `d`. -Однако `temp` является операндом `RHS` в выражении `d = c & temp`, поэтому блок `always`. Запускается еще один раз в этот же момент времени (в примере это `5ns`). Поскольку значения `a` и `b` не менялись, значение `RHS` первого выражения останется прежним. А вот значение `temp` уже иное, поэтому `RHS` второго выражения станет `1`. +Однако `temp` является операндом `RHS` в выражении `d = c & temp`, поэтому блок `always` запускается еще один раз в этот же момент времени (в примере это `5ns`). Поскольку значения `a` и `b` не менялись, значение `RHS` первого выражения останется прежним. А вот значение `temp` уже иное, поэтому `RHS` второго выражения станет `1`. После повторного присваивания сигналы `temp` и `d` примут установившееся значение. Поскольку ни один из операндов `RHS`—выражений больше не изменил своего значения, блок `always` больше не вызывается. @@ -396,9 +400,9 @@ _Рисунок 13. Моделирование цепочки присваива Чем это может быть удобно? -Давайте сделаем небольшое лирическое отступление и разберем часто используемую в мире разработки цифровых схем аббревиатуру `RTL`. Она расшифровывается как `Register Transfer Level` — уровень межрегистровых передач. Цифровую схему можно рассматривать на различных уровнях абстракции. Можно рассматривать с физического уровня: как набор проводников, транзисторов, а так же электронов и "дырок", бегающих по ним. Можно рассматривать схему на уровне логических вентилей (gate-level). Одним из таких уровней абстракции является уровень межрегистровых передач, когда мы делим схему на две части: регистры, и комбинационную логика их связывающая. +Давайте сделаем небольшое лирическое отступление и разберем часто используемую в мире разработки цифровых схем аббревиатуру `RTL`. Она расшифровывается как `Register Transfer Level` — уровень межрегистровых передач. Цифровую схему можно рассматривать на различных уровнях абстракции. Можно рассматривать с физического уровня: как набор проводников, транзисторов, а так же электронов и "дырок", бегающих по ним. Можно рассматривать схему на уровне логических вентилей (gate-level). Одним из таких уровней абстракции является уровень межрегистровых передач, когда мы делим схему на две части: регистры, и комбинационную логику их связующую. -По каждому такту синхроимпульса, в регистры будет записываться новое значение, что приведет к изменению на выходе регистра и начнет цепочку изменений в комбинационной логике, соединяющей регистры. К следующему такту на концах комбинационной логике, являющихся входами регистров должны оказаться установившееся значения, которые будут записаны и все повторится снова. +По каждому такту синхроимпульса, в регистры будет записываться новое значение, пришедшее от комбинационной логики, что приведет к изменению на выходе регистра и начнет цепочку изменений в комбинационной логике, соединяющей регистры. К следующему такту на концах комбинационной логики, являющихся входами регистров должны оказаться установившееся значения, которые будут записаны в регистры и все повторится снова. Было бы удобно разделить эти две части: обновление значений в регистрах и обновление значений в комбинационной логике таким образом, чтобы сперва обновлялась комбинационная логика, а потом уже обновлялось значение в регистрах. @@ -407,12 +411,12 @@ _Рисунок 13. Моделирование цепочки присваива Подведем итоги прочитанному: - Блокирующее присваивание блокирует выполнение остальных операций до завершения текущего присваивания. Оно подобно обычному присваиванию в парадигме программирования. -- Неблокирующее присваивание сперва вычисляет `RHS`, давая исполниться остальным операциям до самого присваивания. Причем `RHS` в случае, если после неблокирующего присваивания выполняется блокирующее от `LHS` которого зависело `RHS` неблокирующего присваивания — значение `RHS` будет обновлено. +- Неблокирующее присваивание сперва вычисляет `RHS`, давая исполниться остальным операциям до самого присваивания. Причем в случае, если после неблокирующего присваивания выполняется блокирующее, от `LHS` которого зависело `RHS` неблокирующего присваивания — значение `RHS` будет обновлено (в упрощенном виде с некоторыми оговорками это предложение можно читать как: _"неблокирующие присваивания исполняются после выполнения всех блокирующих"_). В связи с особенностями поведения блокирующего и неблокирующего присваивания, выведены следующие две максимы: -- При описании последовательностной логики (регистров) используйте **неблокирующее** присваивание. -- При описании комбинационной логики используйте **блокирующее** присваивание. +- при описании последовательностной логики (регистров) используйте **неблокирующее** присваивание; +- при описании комбинационной логики используйте **блокирующее** присваивание. Кроме того, существуют следующие рекомендации и требования[1, стр. 5]: @@ -422,5 +426,5 @@ _Рисунок 13. Моделирование цепочки присваива Использованная литература: -1. [Clifford E. Cummings / Nonblocking Assignments in Verilog Synthesis, Coding Styles That Kil](http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf) +1. [Clifford E. Cummings / Nonblocking Assignments in Verilog Synthesis, Coding Styles That Kill](http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf) 2. [1800-2017 - IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language](https://ieeexplore.ieee.org/document/8299595)