diff --git a/Basic Verilog structures/Multiplexors.md b/Basic Verilog structures/Multiplexors.md index 29ce9f5..f560ac3 100644 --- a/Basic Verilog structures/Multiplexors.md +++ b/Basic Verilog structures/Multiplexors.md @@ -93,7 +93,7 @@ logic Y; always_comb begin // 1) Используется always_comb, т.к. мы хотим подключить // выход мультиплексора к проводу if(S) begin // 2) if-else может находиться только внутри блока always. - Y = D1; // 3) Используется оператор неблокирующего присваивания. + Y = D1; // 3) Используется оператор неблокирующего присваивания. end else begin Y = D0; end @@ -108,13 +108,13 @@ end logic Y; always_comb begin if(S==1) begin - Y <= D1; + Y = D1; end end always_comb begin if(S==0) begin // Нельзя выполнять операцию присваивания - Y <= D0; // для одного сигнала (Y) в нескольких + Y = D0; // для одного сигнала (Y) в нескольких end // блоках always! end ``` @@ -140,8 +140,8 @@ logic Y; always_comb begin case(S) // Описываем блок case, где значение сигнала S // будет сравниваться с различными возможными его значениями - 1'b0: Y <= D0; // Если S==0, то Y = D0 - 1'b1: Y <= D1; + 1'b0: Y = D0; // Если S==0, то Y = D0 + 1'b1: Y = D1; endcase // Каждый case должен заканчиваться endcase end // (так же как каждый begin должен оканчиваться end) ``` @@ -165,10 +165,10 @@ module case_mux_ex( ); always_comb begin case(S) - 3'b00: Y <= A; - 3'b01: Y <= C | B; // в блоке case можно мультиплексировать - // не только провода, но и логические выражения - 3'b10: Y <= (C|B) & D; + 3'b00: Y = A; + 3'b01: Y = C | B; // в блоке case можно мультиплексировать + // не только провода, но и логические выражения + 3'b10: Y = (C|B) & D; /* Обратите внимание, что разрядность сигнала S — 3 бита. Это означает, что есть 8 комбинаций его разрядов. @@ -177,7 +177,7 @@ module case_mux_ex( быть какое-то одно значение "по умолчанию", используется специальная комбинация "default": */ - default: Y <= D; + default: Y = D; endcase end endmodule @@ -214,9 +214,10 @@ assign one_bit_result = bus1024[select]; 3. Во избежание появления [защелок](Latches.md) при описании мультиплексора, необходимо убедиться что у блоков `if` есть соответствующие им блоки `else`, а у мультиплексоров описаны все комбинации управляющего сигнала (при необходимости, множество оставшихся комбинаций можно покрыть с помощью комбинации `default`). Появление непреднамеренной защелки в дизайне ведет к ухудшению временных характеристик, избыточному использованию ресурсов, а также непредсказуемому поведению схемы из-за возможного удержания сигнала. 4. Важно отметить, что блоки `if-else` и `case` могут использоваться не только для описания мультиплексоров. 5. Конструкции `if-else` и `case` в рамках данных лабораторных работ можно описывать только внутри блока [`always`](#блок-always). При работе с этим блоком необходимо помнить следующие особенности: - 1. Существует несколько типов блока `always`: `always_comb`, `always_ff`, `always_latch`, определяющих то, к чему будет подключена описанная в этом блоке логика: проводу, регистру или защелке соответственно. - 2. Внутри блока always следует использовать оператор неблокирующего присваивания `<=`. - 3. Присваивание для любого сигнала возможно только внутри **одного** блока always. Два разных сигнала могут присваиваться как в одном блоке always, так каждый в отдельном, но операция присваивания одному и тому же сигналу в двух разных блоках always — нет. + 1. Существует несколько типов блока `always`: `always_comb`, `always_ff`, `always_latch`, определяющих то, к чему будет подключена описанная в этом блоке логика: проводу, регистру или защелке соответственно. В данных лабораторных работах вам нужно будет пользоваться блоками `always_ff` и `always_comb`, причем: + 1. внутри блока `always_ff` необходимо использовать оператор неблокирующего присваивания (`<=`); + 2. внутри блока `always_comb` необходимо использовать оператор блокирующего присваивания (`=`). + 2. Присваивание для любого сигнала возможно только внутри **одного** блока always. Два разных сигнала могут присваиваться как в одном блоке always, так каждый в отдельном, но операция присваивания одному и тому же сигналу в двух разных блоках always — нет. ---