#15 —Basys2 Project 7: Barrel Shifter / Комбинаторный сдвиг
Автор: KONTAKT`S
Загружено: 2026-01-21
Просмотров: 8
Описание:
Плату Basys 2 я покупал по этой ссылке:
https://megabonus.com/y/olJ5u
*Ссылка аффилиатная. Она используется для статистики и не влияет
на цену для вас.*
#FPGA #Basys2 #Xilinx #Spartan #VHDL
===
В этом видео делаем Project 7: Barrel Shifter (комбинаторный сдвиг) 4-bit на плате Digilent Basys2 на VHDL.
Barrel shifter — это комбинаторный узел, который сдвигает слово на 0..3 разряда сразу, без такта. Не путать со сдвиговым регистром (там нужен CLK).
✅ Что в выпуске
что такое barrel shifter и чем он отличается от shift register
управление: направление (DIR), величина сдвига (SH), заполнитель (FILL)
VHDL-реализация через if/case без latch
симуляция в ISim + testbench с полным перебором (256 векторов)
сборка .bit в Xilinx ISE и прошивка Basys2 через Adept/JTAG
Getting Started with FPGA
🎛️ Управление на Basys2 (SW/LED)
SW(3..0) = A(3..0) (данные)
SW(5..4) = SH(1..0) (0..3)
SW(6) = DIR (0=влево, 1=вправо)
SW(7) = FILL (0/1 — чем заполняем освободившиеся биты)
Выход:
LED(7..4) = исходное A(3..0)
LED(3..0) = результат Y(3..0)
🔥 Быстрая проверка на плате (готовые тест-векторы)
Смотри блок “SW байтом → LED байтом” в README ниже — там 4 обязательных примера (0x1A→0xA4 и т.д.).
🛠️ Важно для прошивки (ISE + Adept)
Если программируешь FPGA напрямую через JTAG (Adept), в ISE обязательно поставь:
FPGA Start-Up Clock → JTAG Clock (Generate Programming File → Process Properties → Startup Options).
README_RU
Базовые шаги прошивки через Adept: выбрать .bit → Program.
Getting Started with FPGA
📂 Код курса
https://github.com/AIDevelopersMonste...
#FPGA #VHDL #Basys2 #XilinxISE #Digilent #BarrelShifter #DigitalLogic #ISim #Testbench
📄 Краткий README.md для Project 7 (с обязательными примерами)
Project 7 — Barrel Shifter (комбинаторный сдвиг) 4-bit | Basys2 | VHDL
Что делает проект
Комбинаторный barrel shifter сдвигает 4-битное слово `A(3..0)` на 0..3 разряда:
`DIR=0` — сдвиг влево
`DIR=1` — сдвиг вправо
`FILL` — бит заполнения освобождающихся разрядов (0 или 1)
Это *комбинаторика* (без такта). Не путать со **сдвиговым регистром**, где нужен `CLK`.
---
Подключение (SW/LED)
*Входы (SW):*
`SW(3..0)` = `A(3..0)` данные
`SW(5..4)` = `SH(1..0)` величина сдвига (0..3)
`SW(6)` = `DIR` (0=влево, 1=вправо)
`SW(7)` = `FILL` (бит заполнения)
*Выходы (LED):*
`LED(7..4)` = `A(3..0)` (показываем вход для сравнения)
`LED(3..0)` = `Y(3..0)` (результат)
---
Сборка и прошивка (ISE + Adept)
1) В ISE: Synthesize → Implement → Generate Programming File
2) *Важно для JTAG (Adept):*
`FPGA Start-Up Clock → JTAG Clock`
(Generate Programming File → Process Properties → Startup Options).
3) В Adept: выбрать `.bit` и нажать Program.
Подробности о конфигурации Basys2 и режимах PC/ROM — в reference manual.
---
Проверка прошивки на плате
После успешного программирования через Adept FPGA начнёт работать сразу.
На Basys2 есть статус-индикация успешной конфигурации (LED/статус), см. manual.
Если переключатели SW меняют `LED(7..4)` (вход A), но `LED(3..0)` не меняется — чаще всего проблема в:
неправильном top-модуле в проекте,
UCF/пинах,
прошит не тот `.bit`.
---
Примеры проверки “байт на SW → байт на LED” (ОБЯЗАТЕЛЬНО)
В этом проекте удобно проверять всё **байтом**:
`SW[7:0] = FILL DIR SH1 SH0 A3 A2 A1 A0`
`LED[7:0] = A3 A2 A1 A0 Y3 Y2 Y1 Y0` (потому что `LED = A & Y`)
Быстрые тесты:
*SW = 0x1A* (`0b0_0_01_1010`) → влево на 1, `FILL=0`
Ожидаем: `Y=0100` → *LED = 0xA4* (`1010_0100`)
*SW = 0x5A* (`0b0_1_01_1010`) → вправо на 1, `FILL=0`
Ожидаем: `Y=0101` → *LED = 0xA5* (`1010_0101`)
*SW = 0xF8* (`0b1_1_11_1000`) → вправо на 3, `FILL=1`
Ожидаем: `Y=1111` → *LED = 0x8F* (`1000_1111`)
*SW = 0xA3* (`0b1_0_10_0011`) → влево на 2, `FILL=1`
Ожидаем: `Y=1111` → *LED = 0x3F* (`0011_1111`)
---
Файлы
`P07_Shifter.vhd` — top (синтез)
`tb_P07_Shifter.vhd` — testbench (256 векторов + assert)
`*.ucf` — ограничения под SW/LED
🎬 Плейлист FPGA (Basys 2):
👉 • FPGA
Повторяем попытку...
Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: