mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
Update Multiplexors.md
This commit is contained in:
committed by
GitHub
parent
a6c9e1cbb0
commit
d2780f3f00
@@ -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 — нет.
|
||||
|
||||
---
|
||||
|
||||
|
Reference in New Issue
Block a user