Перенос drawio-изображений в svg-формат

This commit is contained in:
Andrei Solodovnikov
2024-01-29 15:51:31 +03:00
parent 7208184af8
commit 0ede1572f7
159 changed files with 396 additions and 127 deletions

View File

@@ -4,11 +4,11 @@
Иными словами, мультиплексор — это переключатель (коммутатор), соединяющий выход с одним из множества входов.
![../.pic/Basic%20Verilog%20structures/multiplexor/fig_01.drawio.png](../.pic/Basic%20Verilog%20structures/multiplexors/fig_01.drawio.png)
![../.pic/Basic%20Verilog%20structures/multiplexor/fig_01.drawio.svg](../.pic/Basic%20Verilog%20structures/multiplexors/fig_01.drawio.svg)
Для начала создадим простой двухвходовой мультиплексор. Предположим, на `Y` нам необходимо передать один из сигналов — `D0` или `D1` в зависимости от значения управляющего сигнала `S`: когда `S==0`, на `Y` подается сигнал `D0`, в противном случае — `D1`.
![../.pic/Basic%20Verilog%20structures/multiplexors/fig_02.drawio.png](../.pic/Basic%20Verilog%20structures/multiplexors/fig_02.drawio.png)
![../.pic/Basic%20Verilog%20structures/multiplexors/fig_02.drawio.svg](../.pic/Basic%20Verilog%20structures/multiplexors/fig_02.drawio.svg)
На языке SystemVerilog это можно описать несколькими способами. Первый — с помощью **[тернарного условного оператора](https://ru.wikipedia.org/wiki/Тернарная_условная_операция)**:
@@ -49,7 +49,7 @@ assign Y = S==1 ? D1 : D0;
Данное выражение говорит нам, что если `S==1`, то `Y` присваивается значение `D1`, в противном случае — значение `D0`.
![../.pic/Basic%20Verilog%20structures/multiplexors/fig_03.drawio.png](../.pic/Basic%20Verilog%20structures/multiplexors/fig_03.drawio.png)
![../.pic/Basic%20Verilog%20structures/multiplexors/fig_03.drawio.svg](../.pic/Basic%20Verilog%20structures/multiplexors/fig_03.drawio.svg)
Также мультиплексор можно описать через конструкцию `if-else` в блоке `always`.
@@ -137,7 +137,7 @@ end // (так же как каждый begin должен ок
Рассмотрим вариант посложнее и опишем следующую схему:
![../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.png](../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.png)
![../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.svg](../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.svg)
Здесь уже используется мультиплексор 4в1. Управляющий сигнал `S` в данном случае двухбитный. В блоке `case` мы перечисляем всевозможные варианты значений `S` и описываем выход мультиплексора.
@@ -234,7 +234,7 @@ endmodule
2. использование конструкции [`if-else`](#блок-if-else) внутри блока `always`;
3. использование конструкции [`case`](#case-блок) внутри блока always.
3. Во избежание появления [защелок](#защелка) при описании мультиплексора, необходимо убедиться что у блоков `if` есть соответствующие им блоки `else`, а у мультиплексоров описаны все комбинации управляющего сигнала (при необходимости, множество оставшихся комбинаций можно покрыть с помощью комбинации `default`). Появление непреднамеренной защелки в дизайне ведет к ухудшению временных характеристик, избыточному использованию ресурсов, а также непредсказуемому поведению схемы из-за возможного удержания сигнала.
4. Важно отметить, что блоки `if-else` и `case` могут использоваться не только для описания мультиплексоров.
4. Важно отметить, что блоки `if-else` и `case` могут использоваться не только для описания мультиплексоров.
5. Конструкции `if-else` и `case` в рамках данных лабораторных работ можно описывать только внутри блока [`always`](#блок-always). При работе с этим блоком необходимо помнить следующие особенности:
1. Существует несколько типов блока `always`: `always_comb`, `always_ff`, `always_latch`, определяющих то, к чему будет подключена описанная в этом блоке логика: проводу, регистру или защелке соответственно.
2. Внутри блока always следует использовать оператор неблокирующего присваивания `<=`.
@@ -246,4 +246,4 @@ endmodule
Как, по-вашему, описать на языке SystemVerilog схему, приведённую ниже?
![../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.png](../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.png)
![../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.svg](../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.svg)