WIP: APS cumulative update (#98)

* WIP: APS cumulative update

* Update How FPGA works.md

* Перенос раздела "Последовательностная логика" в отдельный док

* Исправление картинки

* Исправление оформления индексов

* Переработка раздела Vivado Basics

* Добавление картинки в руководство по созданию проекта

* Исправление ссылок в анализе rtl

* Обновление изображения в sequential logic

* Исправление ссылок в bug hunting

* Исправление ссылок

* Рефактор руководства по прошивке ПЛИС

* Mass update

* Update fig_10

* Restore fig_02
This commit is contained in:
Andrei Solodovnikov
2024-09-02 10:20:08 +03:00
committed by GitHub
parent 78bb01ef95
commit a28002e681
195 changed files with 3640 additions and 2664 deletions

View File

@@ -1,4 +1,4 @@
# Описание мультиплексора на языке SystemVerilog
# Описание мультиплексоров в SystemVerilog
**Мультипле́ксор** — устройство, имеющее **несколько сигнальных входов**, **один или более управляющих входов** и **один выход**. Мультиплексор позволяет передавать сигнал **с одного из входов на выход**; при этом выбор желаемого входа осуществляется подачей соответствующей комбинации управляющих сигналов[[1]](https://ru.wikipedia.org/wiki/Мультиплексор_(электроника)).
@@ -42,7 +42,7 @@ a = b+c >= 5 ? b+c : b+d;
Сперва вычисляется первый операнд (выражение `b+c >= 5`). Если это выражение оказалось истинным (равно единице), то переменной `a` будет присвоено значение второго операнда (выражения `b+c`), в противном случае переменной `a` будет присвоено значение третьего операнда (выражения `b+d`).
</details>
```SystemVerilog
```Verilog
logic Y;
assign Y = S==1 ? D1 : D0;
```
@@ -61,7 +61,7 @@ assign Y = S==1 ? D1 : D0;
## Блок always
Блок `always` — это специальный блок, который позволяет описывать комбинационные и последовательностные схемы, используя более сложные конструкции, такие как `if-else`, `case`. На самом деле, в языке SystemVerilog помимо общего блока `always`, которым можно описать любой вид логики, существует множество специализированных блоков, предназначенных для описания отдельно комбинационной, синхронной и последовательностной асинхронной логики соответственно:
Блок `always` — это специальный блок, который позволяет описывать комбинационные и последовательностные схемы (см. документ "[Последовательностная логика](../Introduction/Sequential%20logic.md)"), используя более сложные конструкции, такие как `if-else`, `case`. На самом деле, в языке SystemVerilog помимо общего блока `always`, которым можно описать любой вид логики, существует множество специализированных блоков, предназначенных для описания отдельно комбинационной, синхронной и последовательностной асинхронной логики соответственно:
- always_comb
- always_ff
@@ -73,7 +73,7 @@ assign Y = S==1 ? D1 : D0;
- внутри блока `always_ff` и `always_latch` необходимо использовать оператор неблокирующего присваивания (`<=`);
- внутри блока `always_comb` необходимо использовать оператор блокирующего присваивания (`=`).
-
---
> Остановитесь на выделенном выше фрагменте документа, пока полностью не разберете его. Без освоения всех описанных выше особенностей языка SystemVerilog вы столкнетесь в будущем с множеством ошибок.
@@ -88,7 +88,7 @@ assign Y = S==1 ? D1 : D0;
После, в блоке `else` описывается присваивание сигнала, который должен идти на выход при управляющем сигнале равном нулю (значение после оператора `:` в тернарном операторе).
```SystemVerilog
```Verilog
logic Y;
always_comb begin // 1) Используется always_comb, т.к. мы хотим подключить
// выход мультиплексора к проводу
@@ -104,7 +104,7 @@ end
Неправильно:
```SystemVerilog
```Verilog
logic Y;
always_comb begin
if(S==1) begin
@@ -135,7 +135,7 @@ end
Реализация двухвходового мультиплексора с помощью `case` может выглядеть так:
```SystemVerilog
```Verilog
logic Y;
always_comb begin
case(S) // Описываем блок case, где значение сигнала S
@@ -150,9 +150,9 @@ end // (так же как каждый begin должен ок
![../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.svg](../.pic/Basic%20Verilog%20structures/multiplexors/fig_04.drawio.svg)
Здесь уже используется мультиплексор 4в1. Управляющий сигнал `S` в данном случае двухбитный. В блоке `case` мы перечисляем всевозможные варианты значений `S` и описываем выход мультиплексора.
Здесь уже используется мультиплексор 8в1. Управляющий сигнал `S` в данном случае трёхбитный. В блоке `case` мы перечисляем всевозможные варианты значений `S` и описываем выход мультиплексора.
```SystemVerilog
```Verilog
module case_mux_ex(
input logic A,
input logic B,
@@ -192,7 +192,7 @@ endmodule
В контексте примера по мультиплексированию 1024 бит использование оператора может быть выполнено следующим образом:
```SystemVerilog
```Verilog
logic [1023:0] bus1024;
logic [ 9:0] select;
@@ -203,7 +203,7 @@ assign one_bit_result = bus1024[select];
Реализация мультиплексоров через оператор '[]' будет активно применяться вами при реализации различных памятей.
## Итоги
## Итоги главы
1. Мультиплексор — это **комбинационный** блок, подающий на выход один из нескольких входных сигналов.
2. Мультиплексор можно описать множеством способов, среди них: