Визуальная электроника

В данной статье рассматривается пошаговое создание проекта на основе Microblaze для Xilinx EDK в Xilinx ISE 14.7. Рассмотрим процесс создания проекта для microblaze на примере отладочной платы VE-XC6SLX9. MicroBlaze — soft-процессорное ядро, разработанное компанией Xilinx для использования в FPGA. MicroBlaze реализуется с помощью стандартной логики и блоков памяти ПЛИС. С точки зрения архитектуры, MicroBlaze очень похож на процессор с основанной на RISC DLX-архитектурой, описанной в книге Д. Паттерсона (David Patterson) и Дж. Хеннеси (John L. Hennessy). За исключением отдельных случаев MicroBlaze может выполнять по одной инструкции за такт, сохраняя такую производительность практически в любых условиях.

В этом материале мы создадим проект, использующий Microblaze для организации управления периферийными устройствами FPGA. Создание проекта начнем с запуска Project Navigator’a, входящего в комплект ISE Design Suite (Рис. 1) и выбора пункта «New Project» меню File.

pic1

Рис. 1: Создание нового проекта в ISE Project Navigator

Следующим шагом (Рис. 2) зададим параметры FPGA, используемой в проекте. В данном случае параметры определяются для отладочной платы VE-XC6SLX9, для которой выполняется создание проекта.

pic2

Рис. 2: Конфигурирование нового проекта в IDE ISE

После описанных действий убедимся в корректности заданных параметров (Рис. 3) и перейдем к непосредственно описанию аппаратной конфигурации, используемой в проекте.

pic3

Рис. 3: Проверка параметров нового проекта, описанного в мастере

В созданный проект добавим процессор Microblaze (Рис. 4).

pic4

Рис. 4: Добавление процессора

В открывшемся списке выбираем процессор Microblaze (Рис. 5).

pic5

Рис. 5: Выбираем процессор MicroBlaze MCS 1.4

Нажимаем Next и видим информацию о созданном процессоре (Рис. 6).

pic6

Рис. 6: Общая информация о нашем процессоре

Далее приступим к настройке микропроцессора Microblaze. На вкладке MCS обязательно необходимо установить галку в пункт Enable Debug Support (Рис. 7).

pic7

Рис. 7: Настройка процессора, вкладка MCS

На вкладке GPO добавим один 32 битный порт вывода данных (Рис. 8).

pic8

Рис. 8: Настройка порта вывода, вкладка GPO

На этом настройка нашего проекта закончена. На следующем шаге добавим виртуальные индикаторы, из нашего предыдущего проекта Виртуальные светодиоды и 7-ми сегментный индикатор. Для этого добавим файлы display.v, hvsync.v, vga_leds.v а также создадим модуль синтезатора частоты pll. (Рис. 9).

pic9

Рис. 9: Добавление файлов виртуальных индикаторов

Модуль верхнего уровня должен выглядеть следующим образом:

Verilog Code:
  1. module vga_leds(
  2. input wire CLK50MHZ,
  3. input wire KEY0,
  4. input wire KEY1,
  5. output wire [7:0]LED,
  6. // outputs:
  7. output wire hsync,
  8. output wire vsync,
  9.  
  10. //high-color test video signal
  11. output wire [3:0]r,
  12. output wire [3:0]g,
  13. output wire [3:0]b
  14. );
  15.  
  16. wire w_clk_video;
  17. wire w_clk_cpu;
  18. wire w_clk_hdmi;
  19. wire w_locked;
  20.  
  21. clk_wiz_v3_6 mypll_inst(
  22. .CLK_IN1( CLK50MHZ ),
  23. .CLK_OUT1( w_clk_video ), //74MHz
  24. .CLK_OUT2( w_clk_cpu ), //100MHz
  25. .LOCKED( w_locked )
  26. );
  27.  
  28. wire [31:0]counter;
  29.  
  30. cpu cpu_inst(
  31. .Clk (w_clk_cpu),
  32. .Reset (~w_locked),
  33. .GPO1 (counter)
  34. );
  35.  
  36. display display_inst(
  37. .reset( ~w_locked ),
  38. .clk_video( w_clk_video ),
  39. .red_leds( counter[31:16] ),
  40. .green_leds( ~counter[31:16] ),
  41. .segments( counter[31:16] ),
  42. .hsync (hsync),
  43. .vsync (vsync),
  44. .r (r),
  45. .g (g),
  46. .b (b)
  47. );
  48.  
  49. endmodule

После внесения всех изменений в проект, смело жмем пункт Generate Programming File. Если процесс прошел без ошибок, мы с помощью программатора iMPACT прошиваем нашу плату. В принципе на этом шаге, на дисплее VGA монитора уже должны отобразится наши виртуальные приборы. Причем зеленые светодиоды должны гореть, красные должны быть погашены а индикатор отображать число 00000.

Далее приступим к созданию прошивки для нашего процессора. Для этого выберем приложение Xilinx Software Development Kit. После запуска, нам будет предложено выбрать путь к нашим будущим проектам (Рис. 10).

pic10

Рис. 10: Выбор пути для каталога проектов

Выбираем пункт меню File->New->Application Project (Рис. 11).

pic11

Рис. 11: Новый проекта

На этом шаге создаем Hardware Project, куда включаем файлы с залитым в нашу плату битстримом и Block RAM Memory Map (карта памяти) (Рис. 12).

pic12

Рис. 12: Новый проекта

Теперь создадим собственно сам проект для нашего процессора. Для этого выбираем пункт меню File->New->Project, выбираем Application Project и жмем Next (Рис. 13).

pic13

Рис. 13: Новый проекта

На этом шаге выбираем для нашего проекто, ранее созданную аппаратную платформу (Рис. 14).

pic14

Рис. 14: Выбор платформы

Надеюсь что все прошло хорошо, и Вы увидел окно с только что созданным проектом (Рис. 15).

pic15

Рис. 15: Созданный проект

Изменяем текст программы helloworld.c, для управления нашими виртуальными индикаторами:

C++ Code:
  1. /*
  2.  * Copyright (c) 2009-2012 Xilinx, Inc. All rights reserved.
  3.  *
  4.  * Xilinx, Inc.
  5.  * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
  6.  * COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
  7.  * ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
  8.  * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
  9.  * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
  10.  * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
  11.  * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
  12.  * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
  13.  * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
  14.  * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
  15.  * AND FITNESS FOR A PARTICULAR PURPOSE.
  16.  *
  17.  */
  18.  
  19. #include <stdio.h>
  20. #include "platform.h"
  21. #include "xil_io.h"
  22.  
  23. #define ADDR_GPIO_BASE 0x80000000
  24.  
  25. void print(char *str);
  26.  
  27. int main()
  28. {
  29. unsigned long tst;
  30. init_platform();
  31.  
  32. for(tst=0x00000000;tst<0x7FFFFFFF;tst++)
  33. {
  34. Xil_Out32(ADDR_GPIO_BASE + 0x10, tst);
  35. }
  36.  
  37. return 0;
  38. }

Так выглядит среда разработки с нашей программой (Рис. 16).

pic16

Рис. 16: Текст программы

Осталось настроить отладку. Выбираем пункт меню Run->Debug Gonfigurations.

Делаем двойной клик левой кнопкой мыши на пункте Xilinx C/C++ application (GDB) (Рис. 17).

pic17

Рис. 17: Меню настройки отладчика

Если никаких ошибок не совершено, то должна автоматически создатся конфигурация для отладки проекта (Рис. 18).

pic18

Рис. 18: Готовая вкладка отладчика

Осталось нажать кнопку Debug! (Рис. 19).

pic19

Рис. 19: Отладка проекта

На видео показана работа микропроцессора Microblaze:

Проект дизайна микропроцессора Microblaze для платы VE-XC6SLX9: microblaze_hard.zip

Проект программы микропроцессора Microblaze для платы VE-XC6SLX9 microblaze_soft.zip

Добавить комментарий