ЛР / Основы разработки систем на кристалле (метода)
.pdf
1.9. Откройте вкладку Address Editor и убедитесь, что все элементы имеют адрес (рис. 81). Если присвоения не произошло, то кликните правой кнопкой мыши на элемент в данной вкладке и выберите пункт Assign Address. Отметьте в протокол адреса всех устройств.
Рис. 81. Адресное пространство проекта
1.10.Для проверки правильности конфигурации проекта нажмите Tools → Validate Design или клавишу F6. Если ошибок не обнаружено, то повторно сохраните проект. Зарисуйте блок-схему в протокол.
1.11.Создайте HDL-wrapper по аналогии с предыдущими работами.
1.12.Синтезируйте проект. Затем запустите размещение проекта на кристалле ПЛИС.
1.13.Если ошибок не обнаружено, то сгенерируйте битовый поток.
2.Экспорт конфигурационных файлов в Xilinx SDK.
2.1.Нажмите File → Export → Export Hardware.
2.2.В появившемся окне установите галочку напротив Include Bitstream
инажмите OK.
2.3.Откройте папку проекта и найдите в ней директорию с названием имя_проекта.sdk. В данной директории проконтролируйте наличие файлаархива с разрешением HDF. Откройте данный архив и зафиксируйте его содержимое в протокол.
2.4.Нажмите на File → Launch SDK, в появившемся окне – OK. Дождитесь запуска среды Xilinx SDK.
2.5.Создайте пакет поддержки платы. Убедитесь, что выбран пункт
Standalone, нажмите OK.
3. Создание приложения.
3.1. Нажмите File → New → Application Project. В открывшемся окне введите имя приложения MP_microblaze, выберите из списка Processor microblaze_0 и установите переключатель Board Support Package в по-
90
ложение Create New. Далее нажмите Next. В списке предлагаемых шаблонов приложения выберите Empty и нажмите Finish.
3.2.Нажмите правой кнопкой мыши на папке SRC проекта в дереве Project Explorer и выберите пункт меню New Source File. В появившемся окне введите имя файла main.c и нажмите Finish.
3.3.Найдите в дереве проекта файл main.c и измените его содержимое согласно листингу:
#include "xparameters.h" #include "xgpio.h"
int main (void) { XGpio dip; char dip_check;
XGpio_Initialize(&dip, XPAR_AXI_GPIO_0_DEVICE_ID);
XGpio_SetDataDirection(&dip, 1, 0xffffffff);
while (1) {
dip_check = XGpio_DiscreteRead(&dip, 1); Xil_Out32(XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR,dip_check+1);
}
}
3.4.По аналогии с предыдущими работами измените идентификаторы
AXI-устройств.
3.5.Сохраните файл и убедитесь, что компиляция прошла без ошибок.
3.6.В случае возникновения ошибок об не-
достаточном количестве памяти откройте файл |
|
lscript.ld, расположенный в папке src проекта, |
|
и задайте меньший размер стека и кучи (рис. 82). |
|
3.7. Нажмите File → New → Application Pro- |
|
ject. В открывшемся окне введите имя приложе- |
|
ния MP_Zynq, выберите из списка Processor |
Рис. 82. Значения |
pc7_cortexa9_0 и установите переключатель |
Stack Size и Heap Size |
Board Support Package в положение Create New. |
|
Нажмите Next. В списке предлагаемых шаблонов приложения выберите
Empty и нажмите Finish.
3.8.Нажмите правой кнопкой мыши на папке SRC проекта в дереве
Project Explorer и выберите пункт меню New → Source File. В появив-
шемся окне введите имя файла main.c и нажмите Finish.
3.9.Найдите в дереве проекта файл main.c и измените его содержимое согласно листингу:
91
#include "xparameters.h" #include "xgpio.h" #include "xgpiops.h"
int main (void) {
static XGpioPs psGpioInstancePtr; XGpioPs_Config* GpioConfigPtr; int xStatus;
char dip_check;
GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,GpioConfigPtr, GpioConfigPtr- >BaseAddr);
if(XST_SUCCESS != xStatus)
print(" PS GPIO INIT FAILED \n\r");
//EMIO is configured as output XGpioPs_SetDirectionPin(&psGpioInstancePtr, 54,1); XGpioPs_SetDirectionPin(&psGpioInstancePtr, 55,1); XGpioPs_SetDirectionPin(&psGpioInstancePtr, 56,1); XGpioPs_SetDirectionPin(&psGpioInstancePtr, 57,1); XGpioPs_SetDirectionPin(&psGpioInstancePtr, 58,1); XGpioPs_SetDirectionPin(&psGpioInstancePtr, 59,1); XGpioPs_SetDirectionPin(&psGpioInstancePtr, 60,1); XGpioPs_SetDirectionPin(&psGpioInstancePtr, 61,1);
// Enable EMIO output XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 54,1); XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 55,1); XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 56,1); XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 57,1); XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 58,1); XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 59,1); XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 60,1); XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, 61,1);
while (1) {
dip_check = Xil_In32(XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR);
XGpioPs_WritePin(&psGpioInstancePtr, 54, dip_check & 0x1); XGpioPs_WritePin(&psGpioInstancePtr, 55, (dip_check & 0x2) >> 1 );
XGpioPs_WritePin(&psGpioInstancePtr, 56, (dip_check & 0x4) >> 2 );
XGpioPs_WritePin(&psGpioInstancePtr, 57, (dip_check & 0x8) >> 3 ); XGpioPs_WritePin(&psGpioInstancePtr, 58, (dip_check & 0x10) >> 4 );
XGpioPs_WritePin(&psGpioInstancePtr, 59, (dip_check & 0x20) >> 5 );
92
XGpioPs_WritePin(&psGpioInstancePtr, 60, (dip_check & 0x40) >> 6 ); XGpioPs_WritePin(&psGpioInstancePtr, 61, (dip_check & 0x80) >> 7 );
}
}
3.10.Если требуется, измените идентификаторы AXI-устройств.
3.11.Сохраните файл и убедитесь, что компиляция прошла без ошибок.
4. Проверка приложения на плате.
4.1.Убедитесь, что jtag-отладчик и UART от платы подключены
ккомпьютеру.
4.2.Включите питание платы.
4.3.Выберите в главном меню SDK пункт Xilinx → Program FPGA и в появившемся окне нажмите Program.
4.4.Нажмите правой кнопкой мыши на названии любого из двух при-
ложений и далее в выпадающих списках Run As → Run Configuration.
4.5.В открывшемся окне нажмите Xilinx C/C++ Application (GDB).
4.6.Настройте отладчик: перейдите во вкладку Application и поставьте галочки в колонке Download напротив обоих процессоров (microblaze_0
иpc7_cortexa9_0).
4.7.Нажмите Save и закройте окно.
4.8.Нажмите правой кнопкой мыши на названии проекта и далее в вы-
падающих списках Run As → Launch on Hardware (GDB). Дождитесь компиляции проекта и прошивки платы.
4.9.Сверьте ожидаемый результат работы программы с результатом
вконсоли.
4.10.Измените программу согласно индивидуальному заданию.
Содержание отчета
1.Задача и цели лабораторной работы
2.Блок-схема проекта в IP-Integrator с назначением каждого элемента.
3.Заметки из протокола.
4.Блок-схема алгоритма работы программы индивидуального задания.
5.Листинги исходного кода приложения из индивидуального задания c поясняющими комментариями строк.
Задания к лабораторной работе
1. Реализуйте вывод значений переключателей SW0, SW1 и SW2 через запись в ячейку памяти XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR
+ 1 на светодиоды LD0, LD2 и LD7.
93
2.Реализуйте вывод значений переключателей SW1, SW2 и SW3 через запись в ячейку памяти XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR
+2 на светодиоды LD1, LD2 и LD3.
3.Реализуйте вывод значений переключателей SW3, SW4 и SW5 через запись в ячейку памяти XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR
+3 на светодиоды LD2, LD3 и LD4.
4.Реализуйте вывод значений переключателей SW4, SW5 и SW6 через запись в ячейку памяти XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR
+4 на светодиоды LD3, LD4 и LD5.
5.Реализуйте вывод значений переключателей SW5, SW6 и SW7 через запись в ячейку памяти XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR
+5 на светодиоды LD4, LD5 и LD6.
6.Реализуйте вывод значений переключателей SW6, SW7 и SW0 через запись в ячейку памяти XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR
+6 на светодиоды LD5, LD6 и LD7.
7.Реализуйте вывод значений переключателей SW7, SW0 и SW1 через запись в ячейку памяти XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR
+7 на светодиоды LD6, LD7 и LD0.
8.Реализуйте вывод значений переключателей SW0, SW2 и SW4 через запись в ячейку памяти XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR
+9 на светодиоды LD0, LD2 и LD4.
94
СПИСОК РЕКОМЕНДУЕМЫХ ИСТОЧНИКОВ
1. Егоров, В. В. Применение ПЛИС в оптических системах связи : учебное пособие / В. В. Егоров, А. А. Прасолов ; СПбГУТ. – Санкт-Петербург, 2022. – 60 с.
2. Харрис, Д. М. Цифровая схемотехника и архитектура компьютера / Д. М. Харрис, С. Л. Харрис. – Москва : ДМК Пресс, 2017. – 792 с.
3.Харрис, Д. М. Цифровая схемотехника и архитектура компьютера. Дополнение по архитектуре ARM / Д. М. Харрис, С. Л. Харрис. – Москва : ДМК Пресс,
2019. – 356 с.
4.Цифровой синтез : практический курс / под общ. ред. А. Ю. Романова, Ю. В. Панчула. – Москва : ДМК Пресс, 2020. – 556 с.
95
Казьмин Олег Юрьевич Прасолов Александр Александрович
ОСНОВЫ РАЗРАБОТКИ СИСТЕМ НА КРИСТАЛЛЕ
Учебно-методическое пособие по выполнению лабораторных работ
Редактор Е. В. Пирогова
Компьютерная верстка Н. А. Ефремовой
План издания 2023 г., п. 5
Подписано к печати 06.06.2023 Объем 6,0 печ. л. Тираж 11 экз. Заказ 1492
Редакционно-издательский отдел СПбГУТ 193232 СПб., пр. Большевиков, 22
Отпечатано в СПбГУТ
96
