Современная электроника №8/2023

ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 21 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА • № 8 / 2023 размер ITCM или размер DTCM в этих ПЛИС равен 256 Кбайт , то размер дру - гого вида памяти не может превышать 16 Кбайт . Как показано на рис . 4, размер ITCM задаём равным 32 Кбайт , а размер DTCM – равным 16 Кбайт . На страницах «Output», «Listing» окна настройки проекта все параметры остав - ляем заданными по умолчанию . Настраиваем формат выходных фай - лов нашего проекта . По умолчанию IDE ARM Keil MDK генерирует выход - ной файл проекта с расширением *.axf. Однако для загрузки пользовательско - го ПО процессорного IP- ядра в ПЛИС GOWIN нам необходимо иметь ком - плект из четырёх загрузочных фай - лов в формате , распознаваемомПЛИС : itcm0–itcm3. Эти файлы могут быть сформированы только из выходно - го файла проекта IDE ARM Keil MDK с расширением *.bin. Таким образом , нам необходимо выходной файл про - екта с расширением *.axf сначала пре - образовать в файл с расширением *.bin, а затем уже файл с расширением *.bin пре - образовать в четыре загрузочных файла ПЛИС itcm0–itcm3. Для первого преоб - разования используется утилита fromelf. exe, которая имеется в составе IDE ARM Keil MDK. Для второго преобразова - ния используется специальная утили - та make_hex.exe из состава архива « сер - вис пак » Gowin_EMPU_M1_Vx.x.x.zip. Добавляем каталог bin, содержащий утилиту make_hex.exe с её библиотека - ми , в каталог PROJECT нашего проекта , где находится выходной файл с именем проекта и расширением *.bin. На странице «User» окна настрой - ки проекта добавляем две пользо - вательские команды , выполняемые после сборки проекта , следующего формата : Run #1: fromelf.exe --bin -o bin-file axf-file Run #2: make_hex.exe bin- file В нашем проекте вместо формаль - ных имен bin-file и axf-file указываем реальные имена наших файлов (FPGA_ project_keil_soft.bin и FPGA_project_keil_ soft.axf), также указываем реальные пути к утилитам fromelf.exe и make_hex. exe на диске ПК . У автора эти команды имеют следующий вид : Run #1: D:\Keil_v5\ARM\ ARMCC\bin\fromelf.exe --bin -o FPGA_project_keil_soft.bin. \Objects\FPGA_project_keil_ soft.axf Run #2: bin\make_hex.exe FPGA_project_keil_soft.bin Помечаем добавленные команды галочками , как показано на рис . 5. Настраиваем параметры компиля - ции нашего проекта . На странице «C/ C++» окна настройки проекта уста - навливаем настройки , как показано на рис . 6. В частности , указываем пути к каталогам проекта в формате , показан - ном на рис . 7. На страницах «Asm», «Linker» окна настройки проекта все параметры оставляем заданными по умолчанию . На странице «Debug» окна настрой - ки проекта устанавливаем настройки , как показано на рис . 8. В частности , указываем тип аппаратного отладчи - ка - программатора , который в дальней - шем будем использовать для отладки кода в нашем программном процес - сорном IP- ядре , например , J-LINK/J- TRACE Cortex. Теперь наполним наш проект кон - кретным содержанием в части поль - зовательского дизайна . В файле main. с из подкаталога USER напи - шем несложный пользовательский код , реализующий обмен данными через UART, опрос входа подклю - чения кнопки и выдачу сигналов на выходы подключения светодиодов . В программе производится началь - ная инициализация процессорного ядра с помощью функции SystemInit(), начальная инициализация UART для скорости обмена 115 200 бит / с с помо - щью функции UartInit() и начальная инициализация линий GPIO с помо - щью функции GPIOInit(). Все перечис - ленные функции содержатся в скопи - рованных из Keil_RefDesign файлах system_GOWIN_M1.c, GOWIN_M1_ uart.c, GOWIN_M1_gpio.c, входящих в состав нашего проекта . В основном цикле программы опра - шивается вход GPIO, к которому на плате TangNano 9K подключена кноп - ка , и , в зависимости от её состояния , выдаются разные сигналы управления на выходы GPIO, к которым на плате TangNano 9K подключены светодио - ды . Также в зависимости от состояния кнопки через UART выдаются сообще - ния «Button_ON» или «Button_OFF». Также в основном цикле проверяет - ся , не принят ли байт данных через UART, и , если принят , производится его сравнение с заданной констан - той ( символ «A»). В случае совпаде - ния через UART выдаётся сообщение «OK» и устанавливается высокий уро - вень на одном выходе GPIO ( вывод 86 ПЛИС на плате TangNano 9K), в слу - чае несовпадения – сообщение «ERR» и низкий уровень на указанном выхо - де GPIO. Как уже было сказано , функция SystemInit() является стандартной и содержится в файле system_GOWIN_ M1.c. Однако в нашем случае в этот файл необходимо внести следующие Рис . 6. Страница «C/C++» окна настройки проекта Рис . 7. Задание путей к каталогам проекта

RkJQdWJsaXNoZXIy MTQ4NjUy