From 56b94a1835116d6523e11f357fdb25a85c8864c5 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Wed, 31 Jan 2024 17:43:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=20=D1=80=D1=83=D0=BA=D0=BE=D0=B2=D0=BE=D0=B4=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B0=20=D0=BF=D0=BE=20=D0=BF=D1=80=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B2=D0=BA=D0=B5=20=D0=9F=D0=9B=D0=98=D0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/SUMMARY.md | 2 +- .../How to program an fpga board/fig_1.png | Bin 0 -> 3250 bytes .../How to program an fpga board/fig_2.png | Bin 0 -> 46204 bytes .../board files/README.md | 2 +- Vivado Basics/How to program an fpga board.md | 32 ++++++++++++++++++ Vivado Basics/Program nexys a7.md | 13 ------- Vivado Basics/README.md | 2 +- 7 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 .pic/Vivado Basics/How to program an fpga board/fig_1.png create mode 100644 .pic/Vivado Basics/How to program an fpga board/fig_2.png create mode 100644 Vivado Basics/How to program an fpga board.md delete mode 100644 Vivado Basics/Program nexys a7.md diff --git a/.github/SUMMARY.md b/.github/SUMMARY.md index e844640..ee13442 100644 --- a/.github/SUMMARY.md +++ b/.github/SUMMARY.md @@ -54,7 +54,7 @@ - [Ошибки элаборации](Vivado%20Basics/Elaboration%20failed.md) - [Запуск симуляции](Vivado%20Basics/Run%20Simulation.md) - [Руководство по поиску ошибок](Vivado%20Basics/Debug%20manual.md) -- [Руководство по прошивке ПЛИС](Vivado%20Basics/Program%20nexys%20a7.md) +- [Руководство по прошивке ПЛИС](Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md) - [Заголовочные файлы в Verilog](Vivado%20Basics/Verilog%20Header.md) # Остальное diff --git a/.pic/Vivado Basics/How to program an fpga board/fig_1.png b/.pic/Vivado Basics/How to program an fpga board/fig_1.png new file mode 100644 index 0000000000000000000000000000000000000000..39f16e4aa3ae49836d0a5776c3e0233d09933130 GIT binary patch literal 3250 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 NZkXOOAse9y{{xxSD)ayV literal 0 HcmV?d00001 diff --git a/.pic/Vivado Basics/How to program an fpga board/fig_2.png b/.pic/Vivado Basics/How to program an fpga board/fig_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c07967249074a0b075e7a2f514a0b9d45728d24d GIT binary patch literal 46204 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 UZ{kg`foL?Z>Ru_jeE0GH05KK;q5uE@ literal 0 HcmV?d00001 diff --git a/Labs/03. Register file and memory/board files/README.md b/Labs/03. Register file and memory/board files/README.md index 67f0b56..64634e9 100644 --- a/Labs/03. Register file and memory/board files/README.md +++ b/Labs/03. Register file and memory/board files/README.md @@ -1,6 +1,6 @@ # Проверка работы регистрового файла на ПЛИС -Если вы не понимаете, что лежит в этой папке, или если надо вспомнить, как прошить ПЛИС, можно воспользоваться [`этой инструкцией`](../../../Vivado%20Basics/Program%20nexys%20a7.md) +Если вы не понимаете, что лежит в этой папке, или если надо вспомнить, как прошить ПЛИС, можно воспользоваться [`этой инструкцией`](../../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md) Для работы с регистровым файлом, необходимо выставлять сигналы адресов и данных. У платы недостаточно переключателей, для такого количества входов регистрового файла, поэтому подача сигналов на вход происходит в несколько этапов. diff --git a/Vivado Basics/How to program an fpga board.md b/Vivado Basics/How to program an fpga board.md new file mode 100644 index 0000000..e1387db --- /dev/null +++ b/Vivado Basics/How to program an fpga board.md @@ -0,0 +1,32 @@ +# Как прошить ПЛИС + +После того как вы описали и верифицировали модуль, остается запрототипировать его в ПЛИС. Для этого в большинстве папок лабораторных работ есть подпапка `board_files` в которой хранятся необходимые для этого файлы. Обычно там будет находиться модуль верхнего уровня и файл ограничений, которые позволяют связать вашу логику с периферией, расположенной на плате `Nexys-A7`. + +Для сборки итогового проекта вам необходимо: + +1. Добавить модуль верхнего уровня (содержащийся в файле с расширением `.sv`) в `Design Sources` вашего проекта. +2. Выберете добавленный модуль в качестве модуля верхнего уровня вашего проекта. + 1. Для этого нажмите по нему правой кнопкой мыши. + 2. В контекстном меню выберете `Set as Top`. +3. Добавьте файл ограничений (с расширением `.xdc`) в `Constraints` вашего проекта. Если такой файл уже есть в вашем проекте (а он будет в нем уже после первой лабораторной), вам необходимо заменить старого файла содержимым нового. Ограничения меняются от лабы к лабе. + +После выполнения указанных шагов, ваш проект готов к генерации битстрима — двоичного файла, с помощью которого реконфигурируется ПЛИС. + +Для генерации битстрима вам необходимо нажать на `Generate Bitstream` во вкладке `PROGRAM AND DEBUG` окна `Flow Navigator` (левый нижний угол окна программы). + +![../.pic/Vivado%20Basics/How%20to%20program%20an%20fpga%20board/fig_1.png](../.pic/Vivado%20Basics/How%20to%20program%20an%20fpga%20board/fig_1.png) + +_Рисунок 1. Расположение кнопки `Generate Bitstream`._ + +После нажатия на эту кнопку, нажимайте утвердительно во всех всплывающих окнах (варианты `YES`/`OK`, в зависимости от состояния вашего проекта, число появляющихся окон будет различным). После успешной генерации битстрима откроется окно `Bitstream Generation Completed`. + +Остается прошить ПЛИС. Для этого подключите отладочный стенд к USB-порту компьютера и включите на стенде питание. Затем откройте окно `HARDWARE MANAGER` для этого: + +1. Убедитесь, что выбран пункт `Open Hardware Manager` в окне `Bitstream` и нажмите на OK. +2. Кликните `Open target` → `Auto Connect` → `Program device` → `Program`. + +![../.pic/Labs/board%20files/Program_Device2.png](../.pic/Labs/board%20files/Program_Device2.png) + +_Рисунок 2. Последовательность действий для прошивки ПЛИС._ + +После этого появится окно с индикатором реконфигурации ПЛИС. Когда окно закроется, в ПЛИС окажется прототип вашего модуля. diff --git a/Vivado Basics/Program nexys a7.md b/Vivado Basics/Program nexys a7.md deleted file mode 100644 index 2e20fb7..0000000 --- a/Vivado Basics/Program nexys a7.md +++ /dev/null @@ -1,13 +0,0 @@ -# Как прошить ПЛИС - -После того, как вы создали свой модуль и проверили его на прохождение тестбенча, вы можете использовать предоставленный в папке `board files` модуль окружения, который позволяет связать вашу логику с периферией, расположенной на плате `Nexys-A7`. Для его подключения, скачайте и добавьте файл в проект, либо скопируйте содержимое в новый `.sv` файл вашего проекта. В окне `Sources` нажмите на него ПКМ и выберите `Set as Top`, после чего в иерархии он станет главным, подключив ваш собственный модуль. Для того, чтобы дизайн мог физически подключиться к периферии, нужно в проекте выбрать `Add Sources`, `Add or create constraints` и подключить файл `nexys_a7_100t.xdc`. Если у вас уже подключен этот файл, необходимо заменить данные на те, которые предложены в текущей папке `board files`. - -Для прошивки ПЛИС подключите устройство через USB, включите питание переключателем, выполните синтез и имплементацию вашего дизайна и сгенерируйте битстрим. Если на этом этапе у вас возникают ошибки, постарайтесь исправить их с помощью [`инструкции по работе с ошибками`](Elaboration%20failed.md). - -Все этапы проходят достаточно медленно, подробнее о них можно узнать [`здесь`](Implementation%20steps.md). По завершению у вас всплывет окно, информирующее об окончании генерации битстрима, для следующего шага вы можете выбрать пункт `Open Hardware Manager` и нажать `OK`, либо нажать `Cancel` и выбрать в левом меню в самом низу `Open Hardware Manager`, `Open Target` - `Auto Connect`, затем `Program Device` и ваше устройство прошьется. - -Генерация битстрима -![../.pic/Labs/board%20files/Program_Device1.png](../.pic/Labs/board%20files/Program_Device1.png) - -Прошивка ПЛИС -![../.pic/Labs/board%20files/Program_Device2.png](../.pic/Labs/board%20files/Program_Device2.png) diff --git a/Vivado Basics/README.md b/Vivado Basics/README.md index 38d8390..f298954 100644 --- a/Vivado Basics/README.md +++ b/Vivado Basics/README.md @@ -10,7 +10,7 @@ 1. [установить Vivado](Install%20Vivado.md); 2. [создать демо-проект под отладочный стенд Nexys-7](Vivado%20trainer.md); -3. [загрузить сделанную лабу в ПЛИС](Program%20nexys%20a7.md); +3. [прошить ПЛИС](How%20to%20program%20an%20fpga%20board.md); 4. [разобраться в структуре папок проекта Vivado](Folder%20Structure%20In%20The%20Project.md); 5. [открыть логическую схему написанного вами модуля](How%20to%20open%20a%20schematic.md); 6. [запустить симуляцию](Run%20Simulation.md);