mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 09:10:10 +00:00
Merge pull request #55 from MPSU/svg-transition
Перенос drawio-изображений в svg-формат
This commit is contained in:
@@ -43,25 +43,25 @@
|
||||
|
||||
Логический вентиль **И** принимает два входа и выдает на выход значение `1` только в том случае, если оба входа равны `1`. Если хотя бы один из входов `0`, то на выходе будет `0`. На схемах, логический вентиль **И** отображается следующим образом:
|
||||
|
||||
<img src="../.pic/Introduction/How%20FPGA%20works/FPGA_ang_gate.png" alt="../.pic/Introduction/How%20FPGA%20works/FPGA_ang_gate.png" width="150"/>
|
||||

|
||||
|
||||
_Рисунок 1. Обозначение логического вентиля **И**._
|
||||
|
||||
Логический вентиль **ИЛИ** принимает два входа и выдает на выход значение `1` в случае, если хотя бы один из входов равен `1`. Если оба входа равны `0`, то на выходе будет `0`. На схемах, логический вентиль **ИЛИ** отображается следующим образом:
|
||||
|
||||
<img src="../.pic/Introduction/How%20FPGA%20works/FPGA_or_gate.png" alt="../.pic/Introduction/How%20FPGA%20works/FPGA_or_gate.png" width="150"/>
|
||||

|
||||
|
||||
_Рисунок 2. Обозначение логического вентиля **ИЛИ**._
|
||||
|
||||
Логический вентиль **Исключающее ИЛИ** принимает два входа и выдает на выход значение `1` в случае, если значения входов не равны между собой (один из них равен `1`, а другой `0`). Если значения входов равны между собой (оба равны `0` или оба равны `1`), то на выходе будет `0`. На схемах, логический вентиль **Исключающее ИЛИ** отображается следующим образом:
|
||||
|
||||
<img src="../.pic/Introduction/How%20FPGA%20works/FPGA_xor_gate.png" alt="../.pic/Introduction/How%20FPGA%20works/FPGA_xor_gate.png" width="150"/>
|
||||

|
||||
|
||||
_Рисунок 3. Обозначение логического вентиля **Исключающее ИЛИ**._
|
||||
|
||||
Логический вентиль **НЕ** — самый простой. Он принимает один вход и подает на выход его инверсию. Если на вход пришло значение `0`, то на выходе будет `1`, если на вход пришло значение `1`, то на выходе будет `0`. Он обозначается на схемах следующим образом:
|
||||
|
||||
<img src="../.pic/Introduction/How%20FPGA%20works/FPGA_not_gate.png" alt="../.pic/Introduction/How%20FPGA%20works/FPGA_not_gate.png" width="150"/>
|
||||

|
||||
|
||||
_Рисунок 4. Обозначение логического вентиля **НЕ**._
|
||||
|
||||
@@ -71,7 +71,7 @@ _Рисунок 4. Обозначение логического вентиля
|
||||
|
||||
На приведенном ниже рисунке показан способ построения логического вентиля **И** на базе двух транзисторов. Подача значения `1` на вход **А** или **B** "открывает" соответствующий транзистор. Если оба транзистора открыты, на выход идет **напряжение питания** (`1` в контексте **цифровых значений**). В случае, если хотя бы на одном входе **А** или **B** будет значение `0`, соответствующий транзистор будет закрыт (можно считать, что он превратится в разрыв цепи). В этом случае выход будет подключен к **земле** (`0` в контексте цифровых значений). Как вы видите, напряжение на выход подается от **источников постоянного питания** или **земли**, а не от входов вентиля, именно этим и обеспечивается постоянное обновление напряжения и устойчивость **цифровых схем** к помехам.
|
||||
|
||||
<img src="../.pic/Introduction/How%20FPGA%20works/FPGA_and_gate_transistor.drawio.png" alt="../.pic/Introduction/How%20FPGA%20works/FPGA_and_gate_transistor.drawio.png" width="300"/>
|
||||

|
||||
|
||||
_Рисунок 5. Обозначение логического вентиля **Схема логического вентиля И, построенного на транзисторах**._
|
||||
|
||||
@@ -85,7 +85,7 @@ _Рисунок 5. Обозначение логического вентиля
|
||||
|
||||
Схематически, мультиплексор обозначается следующим образом:
|
||||
|
||||
<img src="../.pic/Introduction/How%20FPGA%20works/FPGA_mux_symbol.png" alt="../.pic/Introduction/How%20FPGA%20works/FPGA_mux_symbol.png" width="200"/>
|
||||

|
||||
|
||||
_Рисунок 6. Обозначение Мультиплексора._
|
||||
|
||||
@@ -97,19 +97,19 @@ _Рисунок 6. Обозначение Мультиплексора._
|
||||
|
||||
Посмотрим, как можно реализовать мультиплексор с управляющим сигналом, использующим `one-hot`-кодирование, используя только логические вентили **И**, **ИЛИ**:
|
||||
|
||||
<img src="../.pic/Introduction/How%20FPGA%20works/FPGA_mux6in1_onehot_initial.drawio.png" alt="../.pic/Introduction/How%20FPGA%20works/FPGA_mux6in1_onehot_initial.drawio.png" width="500"/>
|
||||

|
||||
|
||||
_Рисунок 7. Реализация мультиплексора, использующего one-hot кодирование._
|
||||
|
||||
Если мы выставим значение управляющего сигнала, равное `000010`, означающее что только **первый** бит этого сигнала (**счет ведется с нуля**) будет равен **единице** (`sel[1] = 1`), то увидим, что на один из входов каждого логического вентиля **И** будет подано значение `0`. Исключением будет логический вентиль **И** для входа `b`, на вход которого будет подано значение `1`. Это означает, что все логические вентили **И** (кроме первого, на который подается вход `b`) будут выдавать на выход `0` (см. [Логические вентили](#логические-вентили)) вне зависимости от того, что было подано на входы a,c,d,e и f. Единственным входом, который будет на что-то влиять окажется вход `b`. Когда он равен `1`, на выходе соответствующего логического вентиля **И** окажется значение `1`. Когда он равен `0` на выходе **И** окажется значение `0`. Иными словами, выход **И** будет повторять значение `b`.
|
||||
|
||||
<img src="../.pic/Introduction/How%20FPGA%20works/FPGA_mux6in1_onehot_path.drawio.png" alt="../.pic/Introduction/How%20FPGA%20works/FPGA_mux6in1_onehot_path.drawio.png" width="500"/>
|
||||

|
||||
|
||||
_Рисунок 8. Реализация мультиплексора, использующего one-hot кодирование._
|
||||
|
||||
Логический вентиль **ИЛИ** на данной схеме имеет больше двух входов. Подобный вентиль может быть создан в виде каскада логических вентилей **ИЛИ**:
|
||||
|
||||

|
||||

|
||||
|
||||
_Рисунок 9. Реализация многоходового логического **ИЛИ**._
|
||||
|
||||
@@ -117,7 +117,7 @@ _Рисунок 9. Реализация многоходового логиче
|
||||
|
||||
Но для нашей схемы мультиплексора гарантируется, что каждый вход **ИЛИ** кроме одного будет равняться `0` (поскольку выход каждого **И** кроме одного будет равен `0`). Это означает, что выход **многовходового ИЛИ** будет зависеть только от **одного** входа (в случае, когда `sel = 000010` — от входа `b`).
|
||||
|
||||
<img src="../.pic/Introduction/How%20FPGA%20works/FPGA_mux6in1_onehot_output.drawio.png" alt="../.pic/Introduction/How%20FPGA%20works/FPGA_mux6in1_onehot_output.drawio.png" width="500"/>
|
||||

|
||||
|
||||
_Рисунок 10. Реализация мультиплексора, использующего one-hot кодирование._
|
||||
|
||||
@@ -133,7 +133,7 @@ _Рисунок 10. Реализация мультиплексора, испо
|
||||
|
||||
Представьте мультиплексор с четырьмя входными сигналами, и двухбитным управляющим сигналом (обратите внимание, что в теперь это сигнал не использует `one-hot`-кодирование). Но теперь, вместо того чтобы выставлять входные сигналы во внешний мир, давайте подключим их к программируемой памяти. Это означает, что мы можем "запрограммировать" каждый из входов на какое-то константное значение. Поместим то, что у нас получилось в отдельный блок и вот, мы получили двухвходовую **Таблицу подстановки** (далее **LUT**).
|
||||
|
||||

|
||||

|
||||
|
||||
_Рисунок 11. Реализация таблицы подстановки (Look-Up Table, LUT)._
|
||||
|
||||
@@ -157,9 +157,9 @@ _Рисунок 11. Реализация таблицы подстановки (
|
||||
|
||||
**D-триггер** — это цифровой элемент, способный хранить один бит информации. В базовом варианте у этого элемента есть два входа и один выход. Один из входов подает значение, которое будет записано в **D-триггер**, второй вход управляет записью (обычно он называется `clk` или `clock` и подключается к тактирующему синхроимпульсу схемы). Когда управляющий сигнал меняет свое значение с `0` на `1` (либо с `1` на `0`, зависит от схемы), в **D-триггер** записывается значение сигнала данных. Обычно, описывая **D-триггер**, говорится, что он строится из двух защелок, которые в свою очередь строятся из **RS-триггеров**, однако в конечном итоге, все эти элементы строятся на базе логических вентилей **И**/**ИЛИ**, **НЕ**:
|
||||
|
||||

|
||||

|
||||
|
||||
_Рисунок 12. Реализация D-триггера[[2]](https://www.build-electronic-circuits.com/d-flip-flop/)._
|
||||
_Рисунок 12. Реализация D-триггера._
|
||||
|
||||
## Арифметика
|
||||
|
||||
@@ -167,7 +167,7 @@ _Рисунок 12. Реализация D-триггера[[2]](https://www.bui
|
||||
|
||||
Все эти блоки могут быть реализованы через логические вентили, например так можно реализовать сумматор:
|
||||
|
||||

|
||||

|
||||
|
||||
_Рисунок 13. Реализация полного однобитного сумматора._
|
||||
|
||||
@@ -181,7 +181,7 @@ _Рисунок 13. Реализация полного однобитного
|
||||
|
||||

|
||||
|
||||
_Рисунок 14. Схема логической ячейки[[3]](https://en.wikipedia.org/wiki/Field-programmable_gate_array)._
|
||||
_Рисунок 14. Схема логической ячейки[[2]](https://en.wikipedia.org/wiki/Field-programmable_gate_array)._
|
||||
|
||||
Может показаться запутанным, но все достаточно просто. Логический блок представляет собой цепочку операций: `логическая функция, реализованная через LUT -> арифметическая операция -> Запись в D-триггер`. Каждый из мультиплексоров определяет то, будет ли пропущен какой-либо из этих этапов.
|
||||
Таким образом, конфигурируя каждый логический блок, можно получить следующие вариации кусочка цифровой схемы:
|
||||
@@ -196,7 +196,7 @@ _Рисунок 14. Схема логической ячейки[[3]](https://en
|
||||
|
||||
А вот реальный пример использования логического блока в ПЛИС `xc7a100tcsg324-1` при реализации Арифметико-логического устройства (АЛУ), подключенного к периферии отладочной платы `Nexys-7`:
|
||||
|
||||

|
||||

|
||||
|
||||
_Рисунок 15. Пример использования логической ячейки._
|
||||
|
||||
@@ -223,5 +223,4 @@ _Рисунок 15. Пример использования логической
|
||||
## Источники
|
||||
|
||||
1. Alchitry, Ell C / [How Does an FPGA Work?](https://learn.sparkfun.com/tutorials/how-does-an-fpga-work/all)
|
||||
2. Omar Muñoz Urias / [The D Flip-Flop (Quickstart Tutorial)](https://www.build-electronic-circuits.com/d-flip-flop/)
|
||||
3. [Field-programmable gate array](https://en.wikipedia.org/wiki/Field-programmable_gate_array)
|
||||
2. [Field-programmable gate array](https://en.wikipedia.org/wiki/Field-programmable_gate_array)
|
||||
|
Reference in New Issue
Block a user