Update Multiplexors.md

This commit is contained in:
Andrei Solodovnikov
2024-02-27 12:57:25 +03:00
committed by GitHub
parent a6c9e1cbb0
commit d2780f3f00

View File

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