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