mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
* WIP: APS cumulative update * Update How FPGA works.md * Перенос раздела "Последовательностная логика" в отдельный док * Исправление картинки * Исправление оформления индексов * Переработка раздела Vivado Basics * Добавление картинки в руководство по созданию проекта * Исправление ссылок в анализе rtl * Обновление изображения в sequential logic * Исправление ссылок в bug hunting * Исправление ссылок * Рефактор руководства по прошивке ПЛИС * Mass update * Update fig_10 * Restore fig_02
42 lines
4.3 KiB
Markdown
42 lines
4.3 KiB
Markdown
# Проверка работы арифметико-логического устройства в ПЛИС
|
||
|
||
После того, как вы проверили на моделировании АЛУ, вам необходимо проверить его работу на прототипе в ПЛИС.
|
||
|
||
Инструкция по реализации прототипа описана [здесь](../../../Vivado%20Basics/07.%20Program%20and%20debug.md).
|
||
|
||
На _рис. 1_ представлена схема прототипа в ПЛИС.
|
||
|
||

|
||
|
||
_Рисунок 1. Структурная схема модуля `nexys_alu`, где блоки `SE` — [знакорасширители](https://ru.wikipedia.org/wiki/Дополнительный_код#Расширение_знака)._
|
||
|
||
Модуль `nexys_alu` позволяет подавать данные на входы `a_i`, `b_i`, `alu_op_i`, а также управлять интерпретацией знака операндов/результата с помощью переключателей.
|
||
|
||
Переключатели `sw[15:0]` и сигналы, ими задаваемые, соотносятся следующим образом:
|
||
- `sw[15:11]` — операнд `a_i`.
|
||
- `sw[10:6]` — операнд `b_i`.
|
||
- `sw[5]` — `sign_on` (назначение этого сигнала подробнее описано дальше по тексту).
|
||
- `sw[4:0]` — `alu_op_i`.
|
||
|
||
Сигнал `sign_on` — определяет интерпретацию (знаковый/беззнаковый) операндов `a_i`, `b_i` и результата `result_o`:
|
||
- Если сигнал принимает значение `1` ("верхнее" положение переключателя), то операнды и результат интерпретируются и отображаются как **знаковые** числа.
|
||
- Если сигнал принимает значение `0` ("нижнее" положение переключателя), то операнды и результат интерпретируются и отображаются как **беззнаковые** числа.
|
||
|
||
Таким образом, область допустимых значений операндов:
|
||
- При знаковой интерпретации: `[-16:15]`
|
||
- При беззнаковой интерпретации: `[0:31]`
|
||
|
||
Числа на семисегментных индикаторах отображаются в **десятичной** системе счисления.
|
||
|
||
Блок результата отображает знак и 3 наименее значимые **цифры** (разряды сотен, десятков, единиц) результата с учетом его интерпретации как знаковое/беззнаковое число. Например, результат операции вычитания `0 - 1` при знаковой интерпретации отобразится как `-1` на семисегментых индикаторах, а при беззнаковой интерпретации как `295` (3 наименее значимые цифры числа `4 294 967 295`).
|
||
|
||
Светодиоды, расположенные над переключателями, отображают 15 бит результата и флаг. То есть `led[15]` соединен с `flag_o` сигналом `alu`, а `led[14:0]` — с `result_o[14:0]`.
|
||
|
||
На _рис. 2_ показан пример сложения `12 + (-16) = -4`.
|
||
|
||

|
||
|
||
_Рисунок 2. Использование АЛУ для вычисления выражения `12 + (-16)` в ПЛИС._
|
||
|
||
Попробуйте выставить на переключателях различные операции (сложение, вычитание, сдвиг и сравнения), посмотрите различие между знаковыми/беззнаковыми операциями, убедитесь, что все работает исправно, и сдавайте работу.
|