From fed19d962e0da30668a0365f3d35b3b1687b9c03 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Sat, 3 Feb 2024 00:46:43 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B8=D0=BA?= =?UTF-8?q?=D1=87=20=D0=B2=20Implementation=20steps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...teps_ref_scheme.drawio.png => fig_01.drawio.png} | Bin .../{impl_elaborated_netlist.png => fig_02.png} | Bin .../{impl_synthesised_netlist.png => fig_03.png} | Bin .../{impl_cell_address.png => fig_04.png} | Bin .../{impl_fpga_device_full_view.png => fig_05.png} | Bin ...{impl_fpga_device_zoomed_view.png => fig_06.png} | Bin Introduction/Implementation steps.md | 12 ++++++------ 7 files changed, 6 insertions(+), 6 deletions(-) rename .pic/Introduction/Implementation steps/{impl_steps_ref_scheme.drawio.png => fig_01.drawio.png} (100%) rename .pic/Introduction/Implementation steps/{impl_elaborated_netlist.png => fig_02.png} (100%) rename .pic/Introduction/Implementation steps/{impl_synthesised_netlist.png => fig_03.png} (100%) rename .pic/Introduction/Implementation steps/{impl_cell_address.png => fig_04.png} (100%) rename .pic/Introduction/Implementation steps/{impl_fpga_device_full_view.png => fig_05.png} (100%) rename .pic/Introduction/Implementation steps/{impl_fpga_device_zoomed_view.png => fig_06.png} (100%) diff --git a/.pic/Introduction/Implementation steps/impl_steps_ref_scheme.drawio.png b/.pic/Introduction/Implementation steps/fig_01.drawio.png similarity index 100% rename from .pic/Introduction/Implementation steps/impl_steps_ref_scheme.drawio.png rename to .pic/Introduction/Implementation steps/fig_01.drawio.png diff --git a/.pic/Introduction/Implementation steps/impl_elaborated_netlist.png b/.pic/Introduction/Implementation steps/fig_02.png similarity index 100% rename from .pic/Introduction/Implementation steps/impl_elaborated_netlist.png rename to .pic/Introduction/Implementation steps/fig_02.png diff --git a/.pic/Introduction/Implementation steps/impl_synthesised_netlist.png b/.pic/Introduction/Implementation steps/fig_03.png similarity index 100% rename from .pic/Introduction/Implementation steps/impl_synthesised_netlist.png rename to .pic/Introduction/Implementation steps/fig_03.png diff --git a/.pic/Introduction/Implementation steps/impl_cell_address.png b/.pic/Introduction/Implementation steps/fig_04.png similarity index 100% rename from .pic/Introduction/Implementation steps/impl_cell_address.png rename to .pic/Introduction/Implementation steps/fig_04.png diff --git a/.pic/Introduction/Implementation steps/impl_fpga_device_full_view.png b/.pic/Introduction/Implementation steps/fig_05.png similarity index 100% rename from .pic/Introduction/Implementation steps/impl_fpga_device_full_view.png rename to .pic/Introduction/Implementation steps/fig_05.png diff --git a/.pic/Introduction/Implementation steps/impl_fpga_device_zoomed_view.png b/.pic/Introduction/Implementation steps/fig_06.png similarity index 100% rename from .pic/Introduction/Implementation steps/impl_fpga_device_zoomed_view.png rename to .pic/Introduction/Implementation steps/fig_06.png diff --git a/Introduction/Implementation steps.md b/Introduction/Implementation steps.md index 40eaf21..e886cda 100644 --- a/Introduction/Implementation steps.md +++ b/Introduction/Implementation steps.md @@ -16,7 +16,7 @@ Допустим, мы хотим реализовать следующую цифровую схему: -![../.pic/Introduction/Implementation%20steps/impl_steps_ref_scheme.drawio.png](../.pic/Introduction/Implementation%20steps/impl_steps_ref_scheme.drawio.png) +![../.pic/Introduction/Implementation%20steps/fig_01.drawio.png](../.pic/Introduction/Implementation%20steps/fig_01.drawio.png) Её можно описать следующим **SystemVerilog**-кодом: @@ -38,7 +38,7 @@ endmodule Откроются следующие окна: -![../.pic/Introduction/Implementation%20steps/impl_elaborated_netlist.png](../.pic/Introduction/Implementation%20steps/impl_elaborated_netlist.png) +![../.pic/Introduction/Implementation%20steps/fig_02.png](../.pic/Introduction/Implementation%20steps/fig_02.png) В левом окне мы видим наш нетлист. В нижней части обозначены узлы графа (элементы **ab_i**, **res_i**, **xabc_i**, которые представляют собой **И**, **мультиплексор** и **Исключающее ИЛИ** соответственно. Имена этих элементов схожи с именами проводов, присваиванием которым мы создавали данные элементы) @@ -56,7 +56,7 @@ endmodule После выполнения синтеза у нас появится возможность открыть новый схематик, сделаем это. -![../.pic/Introduction/Implementation%20steps/impl_synthesised_netlist.png](../.pic/Introduction/Implementation%20steps/impl_synthesised_netlist.png) +![../.pic/Introduction/Implementation%20steps/fig_03.png](../.pic/Introduction/Implementation%20steps/fig_03.png) Мы видим, что между входами/выходами схемы и её внутренней логикой появились новые примитивы — **буферы**. Они нужны, преобразовать уровень напряжения между ножками ПЛИС и внутренней логикой (условно говоря, на вход плис могут приходить сигналы с уровнем `3.3 В`, а внутри ПЛИС примитивы работают с сигналами уровня `1.2 В`). @@ -198,17 +198,17 @@ set_property -dict { PACKAGE_PIN C12 IOSTANDARD LVCMOS33 } [get_ports { resetn После выполнения имплементации, нетлист и схема остаются неизменными, однако использованные для реализации схемы примитивы получают свой "адрес" внутри ПЛИС: -![cell_add../.pic/Introduction/Implementation%20steps/impl_cell_address.pngress](../.pic/Introduction/Implementation%20steps/impl_cell_address.png) +![cell_add../.pic/Introduction/Implementation%20steps/fig_04.png](../.pic/Introduction/Implementation%20steps/fig_04.png) Теперь, мы можем посмотреть на "внутренности" нашей ПЛИС `xc7a100tcsg324-1` и то, как через её примитивы будет реализована наша схема. Для этого, необходимо отрыть имплементированное устройство: `Implementation -> Open implemented design`. Откроется следующее окно: -![../.pic/Introduction/Implementation%20steps/impl_fpga_device_full_view.png](../.pic/Introduction/Implementation%20steps/impl_fpga_device_full_view.png) +![../.pic/Introduction/Implementation%20steps/fig_05.png](../.pic/Introduction/Implementation%20steps/fig_05.png) Может показаться очень страшным и непонятным, но это содержимое ПЛИС. Просто из-за огромного количества содержащихся в ней примитивов, она показана в таком масштабе, что все сливается в один цветной ковер. Большая часть этого окна неактивна (показана в темно-синих тонах) и это нормально, ведь мы реализовали крошечную цифровую схему, она и не должна занимать значительное количество ресурсов ПЛИС. Нас интересует "[бледно-голубая точка](https://ru.wikipedia.org/wiki/Pale_Blue_Dot)", расположенная в нижнем левом углу прямоугольника `X0Y1` (выделено красным). Если отмасштабировать эту зону, мы найдем используемый нами LUT: -![../.pic/Introduction/Implementation%20steps/impl_fpga_device_zoomed_view.png](../.pic/Introduction/Implementation%20steps/impl_fpga_device_zoomed_view.png) +![../.pic/Introduction/Implementation%20steps/fig_06.png](../.pic/Introduction/Implementation%20steps/fig_06.png) Кроме того, если поиграться со свойствами этого примитива, мы сможем найти нашу таблицу истинности, инициализирующую этот примитив.