mirror of
https://github.com/MPSU/APS.git
synced 2025-09-16 17:40:41 +00:00
45 lines
5.8 KiB
Markdown
45 lines
5.8 KiB
Markdown
# Проверка работы полного 32-битного сумматора в ПЛИС
|
||
|
||
После того, как вы создали проверили на моделировании 32-разрядный сумматор, вам необходимо проверить его работу на прототипе в ПЛИС.
|
||
|
||
Для этого вам потребуется модуль верхнего уровня [`nexys_adder.sv`](nexys_adder.sv), который позволяет связать вашу логику с периферией, расположенной на плате `Nexys-A7`. Для его подключения, скачайте и добавьте файл в проект, либо скопируйте содержимое в новый `.sv` файл вашего проекта. В окне `Sources` нажмите на него ПКМ и выберите `Set as Top`, после чего в иерархии он станет главным (название главного модуля выделено **жирным** шрифтом).
|
||
|
||
Для того, чтобы входы и выходы этого модуля были соединены с нужными входами и выходами ПЛИС, нужно в проекте выбрать `Add or create constraints` и подключить файл [`nexys_a7_100t.xdc`](nexys_a7_100t.xdc). На _рис. 1_ представлен пример иерархии проекта, готовой к созданию битстрима (двоичного файла, предназначенного для конфигурации ПЛИС таким образом, чтобы она воспроизводила логику описанного вами модуля).
|
||
|
||

|
||
|
||
_Рисунок 1. Пример иерархии проекта с модулем верхнего уровня `nexys_adder`._
|
||
|
||
После этого наше устройство будет выглядеть, как представлено на _рис. 2_:
|
||
|
||

|
||
|
||
_Рисунок 2. Структурная схема модуля `nexys_adder`._
|
||
|
||
Модуль `nexys_adder` позволяет подавать данные с переключателей на входы `a_i`, `b_i`, а так же передавать входной бит переноса с помощью кнопки `BTND`.
|
||
|
||
Переключатели делятся пополам между операндами `a_i`, `b_i` (переключатели `sw[7:0]` относятся к операнду `b_i`, переключатели `sw[15:8]` относятся к операнду `a_i`). Так как переключателей всего 16, каждому операнду достается только по 8. Таким образом, с переключателей можно ввести 8 младших бит каждого из операнда.
|
||
|
||
Старшие биты дополняются нулями, это значит что на нашем прототипе можно складывать числа в диапазоне [0:255] (плюс можно прибавлять входной бит переноса), а значит диапазон результатов будет [0:511].
|
||
|
||
|
||
Семисегментные индикаторы отображают на левом блоке значение операндов `a_i` и `b_i` в шестнадцатеричном формате, а на правом — результат сложения. Светодиоды, расположенные над переключателями, дублируют сумму, представляя ее в двоичном формате.
|
||
|
||
На *рисунке 3* показано сложение `(A=0x48) + (B=0x18) == 0x60` при нулевом входном преносе (нулевом, тк не нажата кнопка `BTND` aka сигнал `Pin`)
|
||
|
||

|
||
|
||
*Рисунок 3. Использование сумматора для вычисления выражения `0x48 + 0x18` в ПЛИС*
|
||
|
||
Для прошивки ПЛИС подключите утройство через USB, включите питание переключателем, выполните синтез и имплементацию вашего дизайна и сгенерируйте битстрим. Если на этом этапе у вас возникают ошибки, постарайтесь ее исправить с помощью [`инструкции по работе с ошибками синтеза`](../../../Vivado%20Basics/Elaboration%20failed.md). После этого выберите в левом меню `Open Target` - `Auto Connect`, затем `Program Device` и ваше устройство прошьется. Процедура запуска генерации битстрима показана на *рисунке 4*, а прошивка сгенерированного битстрима в ПЛИС - на *рисунке 5*.
|
||
|
||

|
||
|
||
*Рисунок 4. Генерация битстрима*
|
||
|
||

|
||
|
||
*Рисунок 5. Прошивка битстрима в ПЛИС*
|
||
|
||
Попробуйте выставить на переключателях различные слагаемые, убедитесь, что все работает исправно и сдавайте работу.
|