mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
brosandr.lab_02_alu (#62)
* Feat(02_Alu):Перепиcывание board модуля * Fix(02_Alu):Замена .v->.sv в board файле * Feat(pic/labs/board):Доб-ие пикчи alu_structure * Ref(pic/labs_board):Обн-ие nexys_alu_structure * Ref(pic/labs/board):Улуч-ие nexys_alu_struct * Ref(02_Alu/board):Замена назв-ий переменных в nexys_alu * Fix(02_Alu/board):Доб-ие @negedge arstn_i в регистр an * Ref(02_Alu/board):Переписывание форм-ия operand_* на assign * Ref(pic/labs/board):Rename ...svg->...drawio.svg * Ref(labs/02_Alu/nexys_alu):Перевод на bcd * Fix(labs/02_alu/nexys):Испр-ие вывода operand_a * Fix(labs/02_alu/nexys):Изм-ие разряд-ти bcd на 42 * Fix(.pic/labs/board/nexys_alu):Обн-ие разрядности * Ref(labs/02_alu/board):Обн-ие README * Ref(02_Alu/board):Дополнение описания оболочки * Ref(labs/02_alu_board):Различные улучшения md * Ref(labs_02_alu/board):Доб-ие точки в md * Repo(pic/labs/board):Уд-ие лишних картинок * Fix(labs/02_alu/board/md):Испр-ие alt названия * Ref(labs/02_alu/board):Перевод тире на юникод симв * Style(02_alu/board):Доб-ие абзаца после картинки * Fix(02_alu/board):Apply suggestions from code review Co-authored-by: Andrei Solodovnikov <VoultBoy@yandex.ru> * Ref(02_alu/board):Уд-ие переносов внутри абзаца * Style(02_alu):Доб-ие блейма * Fix(pic/02_alu):Поворот SE * Ref(pic/02_alu):Вырав-ие разярдностей и их цвета * Fix(02_alu/nexys):Испр-ие блейма * Ref(labs/02_alu/board):Переписывание bin2bcd * Fix(02_Alu):Apply suggestions from code review Co-authored-by: Andrei Solodovnikov <VoultBoy@yandex.ru> * Ref(pic/02_alu/alu_struct):Испр-ие шрифтов * Ref(pic/02_alu):Экспорт в svg * Ref(pic/02_alu/board):Обн-ие экспозиции nexys_alu * Ref(02_alu):Переделка маппинга свитчей в список * Ref(pic/02_alu/board):Подвижка боксов A,B,Sum * Ref(pic/02_alu/board):Замен цветов * Style(01_adder/board):Склеивание строк в абзацах * Ref(pic/02_alu/board):Испр-ие nexys_alu_struct * Fix(02_alu/board):Apply suggestions from code review Co-authored-by: Andrei Solodovnikov <VoultBoy@yandex.ru> * Repo(02_alu/board):Доб-ие шапки создателя --------- Co-authored-by: Andrei Solodovnikov <VoultBoy@yandex.ru>
This commit is contained in:
@@ -1,17 +1,41 @@
|
||||
# Проверка работы арифметико-логического устройства в ПЛИС
|
||||
|
||||
После того, как вы проверили на моделировании АЛУ, вам необходимо проверить его работу на прототипе в ПЛИС.
|
||||
|
||||
Инструкция по реализации прототипа описана [здесь](../../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md).
|
||||
|
||||
После того, как вы создали свое АЛУ и проверили его на прохождение тестирующего модуля, вы можете использовать предложенный модуль окружения [`nexys_alu.v`](nexys_alu.v), который позволяет связать вашу логику с периферией, расположенной на плате `Nexys-A7`. Для его подключения, скачайте и добавьте файл в проект, либо скопируйте содержимое в новый `.v` файл вашего проекта. В окне `Sources` нажмите на него ПКМ и выберите `Set as Top`, после чего в иерархии он станет главным, подключив ваш собственный модуль АЛУ. Для того, чтобы дизайн мог физически подключиться к периферии, нужно в проекте выбрать `Add Sources`, `Add or create constraints` и подключить файл [`nexys_a7_100t.xdc`](nexys_a7_100t.xdc). Если у вас уже подключен этот файл, необходимо заменить данные на те, которые предложены в текущей лабе.
|
||||
На _рис. 1_ представлена схема прототипа в ПЛИС.
|
||||
|
||||
После этого наше устройство будет выглядеть так:
|
||||

|
||||
|
||||

|
||||
_Рисунок 1. Структурная схема модуля `nexys_alu`, где блоки `SE` — [знакорасширители](https://ru.wikipedia.org/wiki/Дополнительный_код#Расширение_знака)._
|
||||
|
||||
Подключенное окружение позволяет производить ввод входных значений (А и В) и управляющего сигнала (ALUOp) с помощью переключателей (номер переключателя отображен на самом краю платы), расположенных на плате. А: 15-11, В: 10-6, ALUOp: 4-0, а переключатель №5 активирует семисегментные индикаторы, на которых отображается на левом блоке операнды А и В, а на правом - ALUOp. На светодиодах, расположенных над переключателями отображается выходное значение в двоичном формате, а 15-й светодиод отвечает за сигнал `Flag`
|
||||
Модуль `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)` в ПЛИС._
|
||||
|
||||
Попробуйте выставить на переключателях различные операции (сложение, вычитание, сдвиг и сравнения), посмотрите различие между знаковыми/беззнаковыми операциями, убедитесь, что все работает исправно, и сдавайте работу.
|
||||
|
Reference in New Issue
Block a user