Skip to content

djadik0/RGB-LED

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

RGB LED and 7-Segment Display Controller for Nexys A7-100T

Небольшой учебный проект на SystemVerilog для платы Nexys A7-100T, в котором положение переключателей sw_i[15:0] управляет цветом встроенного RGB LED, а также выводит шестнадцатеричное представление цвета на 7-segment display.

Описание проекта

Модуль led принимает 16-битное значение с переключателей и использует его как источник компонент цвета:

  • красный канал R
  • зелёный канал G
  • синий канал B

Цвет выводится двумя способами:

  • через встроенный RGB LED с помощью PWM
  • через шестиразрядную индикацию 7-segment, где отображается значение RGB в шестнадцатеричном формате

Таким образом проект одновременно показывает:

  • базовую работу с внешними входами платы
  • генерацию PWM
  • динамическую индикацию на семисегментном дисплее
  • использование XDC-констрейнтов для реальной FPGA-платы

Что реализовано

В проекте реализованы:

  • приём 16-битного значения от переключателей sw_i
  • формирование компонент red, green, blue
  • расширение цветовых каналов до 8 бит
  • генерация PWM для LED16_R, LED16_G, LED16_B
  • формирование 24-битного слова hex_RGB
  • мультиплексирование 6 разрядов семисегментного индикатора
  • декодер hex -> 7-segment
  • простой testbench
  • файл ограничений XDC для платы Nexys A7-100T

Интерфейс модуля

Входные сигналы

  • clk_i — тактовый сигнал
  • rst_i — асинхронный сброс, активный низким уровнем
  • sw_i[15:0] — входы от переключателей платы

Выходные сигналы

  • LED16_R — красный канал встроенного RGB-светодиода
  • LED16_G — зелёный канал встроенного RGB-светодиода
  • LED16_B — синий канал встроенного RGB-светодиода
  • an_o[7:0] — управление разрядами семисегментного индикатора
  • ca_o ... cg_o — сегменты индикатора

Принцип работы

Формирование цвета

Значение sw_i[15:0] разбивается на три цветовых канала:

  • red — старшие биты
  • green — средние биты
  • blue — младшие биты

Для красного и синего каналов используется расширение до 6 бит, после чего все три канала преобразуются в 8-битный формат:

  • red_8
  • green_8
  • blue_8

Далее формируется общее 24-битное значение:

hex_RGB = {red_8, green_8, blue_8}

Управление RGB LED

Для управления яркостью используется PWM.

В модуле работает 6-битный счётчик cnt_my_ff, который непрерывно увеличивается.
На каждом такте текущие значения цветовых каналов сравниваются со счётчиком:

  • если cnt_my_ff < red, включается красный канал
  • если cnt_my_ff < green, включается зелёный канал
  • если cnt_my_ff < blue, включается синий канал

За счёт этого формируется широтно-импульсная модуляция, и яркость каждого цвета зависит от положения переключателей.

Вывод на 7-segment display

Параллельно значение hex_RGB выводится на семисегментный индикатор.

Для этого:

  • делитель частоты clk_div_ff замедляет переключение разрядов
  • счётчик scan_cnt_ff выбирает активный разряд
  • из hex_RGB выбирается текущая 4-битная тетрада
  • декодер преобразует её в сигналы сегментов ca_o ... cg_o

В проекте используются 6 разрядов, поскольку 24-битное значение RGB содержит 6 шестнадцатеричных цифр.

Что проверялось в testbench

В testbench проверялись следующие сценарии:

  • начальный сброс
  • запуск модуля после снятия сброса
  • установка значения только для красного канала
  • установка значения только для зелёного канала
  • установка значения только для синего канала
  • установка нулевого значения
  • установка 16'hFFFF для проверки максимального заполнения

Для проверки использовались значения:

  • 16'b11111_000000_00000
  • 16'b00000_111111_00000
  • 16'b00000_000000_11111
  • 16'h0000
  • 16'hFFFF

Это позволяет посмотреть на waveform:

  • изменение сигналов LED16_R, LED16_G, LED16_B
  • работу PWM
  • переключение активных разрядов an_o
  • формирование сегментов индикатора

Используемая плата

Проект подготовлен под плату:

  • Digilent Nexys A7-100T

В файле nexys_a7_100t.xdc заданы ограничения для:

  • входного тактового сигнала clk_i
  • переключателей sw_i[15:0]
  • встроенного RGB LED
  • семисегментного индикатора

Результат работы

В результате был получен учебный модуль, который преобразует положение переключателей в цветовое значение, управляет встроенным RGB-светодиодом через PWM и одновременно отображает шестнадцатеричное значение цвета на семисегментном индикаторе.

Работа проекта была проверена в моделировании с помощью простого testbench и подготовлена для запуска на реальной FPGA-плате через XDC-констрейнты.

Файлы

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors