Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В этом уроке мы собираемся использовать FPGA для управления внешней светодиодной схемой. Мы собираемся реализовать следующие задачи
(A) Используйте кнопки на FPGA Cyclone IV DuePrologic для управления светодиодом.
(B) Периодическое мигание светодиода
Видео демонстрация
Меню лаборатории:
Шаг 1: Создайте электронную схему
Шаг 2. Проверьте планировщик контактов и отредактируйте код Verilog
Шаг 3. Отредактируйте код Verilog
При покупке FPGA DueProLogic вы получите DVD. После того, как вы откроете "Projects_HDL", вы должны увидеть исходный файл кода.
Добавьте выделенный код. Он регистрирует порты ввода-вывода и присваивает им номера.
выходной провод [7: 0] XIO_1, // XIO - D2-D9
выходной провод [5: 0] XIO_2, // XIO - D10-D12
выходной провод [5: 0] XIO_3, // XIO - D22-D29
входной провод [5: 0] XIO_4, // XIO - D30-D37
входной провод [5: 0] XIO_5, // XIO - D38-D45
выходной провод [4: 0] XIO_6_OUT, // XIO - D46-D53
входной провод [31: 5] XIO_6, // XIO - D46-D53
выходной провод [2: 0] XIO_7, // XIO - D69, D70, D71, D74, D75, D76
входной провод UBA, // Кнопочные переключатели
входной провод UBB // Кнопочные переключатели
назначить XIO_1 [3] = start_stop_cntrl;
назначить XIO_2 [1] = start_blinky; // Светодиодная вспышка Светодиод включается и выключается
присваиваем XIO_2 [2] = 1'b1; // выводим ВЫСОКИЙ
назначить XIO_2 [3] = ~ UBA; // Нажимаем кнопку A
присвоить XIO_2 [4] = UBB; // Нажимаем кнопку B
назначить c_enable = XIO_5 [2];
назначить LEDExt = XIO_5 [5];
Затем мы должны установить таймер задержки. Прокомментируйте исходный код таймера и напишите новую функцию таймера
//-----------------------------------------------
// Светодиодный мигающий старт
//-----------------------------------------------
/*
всегда @ (posedge CLK_66 или negedge RST)
начинать
если (! RST)
start_blinky <= 1'b0;
еще
начинать
если (control_register [7: 4]> 0)
start_blinky <= 1'b1;
еще
start_blinky <= 1'b0;
конец
конец
*/
рег [31: 0] пр.;
начальное начало
ex <= 32'b0;
start_blinky <= 1'b0;
конец
всегда @ (posedge CLK_66)
начинать
ex <= ex + 1'b1;
if (ex> 100000000) // мигание вкл / выкл ~ 1,6 секунды, частота 66 МГц
начинать
start_blinky <=! start_blinky;
ex <= 32'b0;
конец
конец
//-----------------------------------------------
// Счетчик таймера задержки светодиода
//-----------------------------------------------
/*
всегда @ (posedge CLK_66 или negedge RST)
начинать
если (! RST)
led_delay_counter <= TIMER_LOW_LIMIT;
еще
начинать
если (состояние [SELECT_MODE])
led_delay_counter <= timer_value;
иначе, если (укажите [WAIT_FOR_TIMER])
led_delay_counter <= led_delay_counter - 1'd1;
конец
конец*/
Шаг 4: скомпилируйте код Verilog
Нажмите «Начать компиляцию» в Quartus, сообщение об ошибке не должно появляться.
Если вы получаете сообщение об ошибке о нескольких контактах. Перейдите в раздел Назначения -> Устройство -> Параметры устройства и контактов -> Контакты двойного назначения -> измените значение соответствующего контакта на «Использовать как обычный ввод / вывод».
После компиляции вы должны напрямую получить выходной файл pof. Если ваше программное обеспечение устарело, вы можете получить только файл софт. Когда это произойдет, нажмите «Файл» в Quartus -> «Конвертировать программные файлы». Измените настройки, отмеченные красными полями.
Шаг 5. Давайте попробуем
Ведь должно работать !!! Желтый светодиод всегда горит. Красный светодиод мигает. Синий светодиод гаснет, если вы нажимаете кнопку B. Зеленый светодиод включается, если вы нажимаете кнопку A.