Использование microblaze на примере отладочной платы Xilinx VC707

В данной статье рассматривается пошаговое создание проекта на основе Microblaze для Xilinx EDK в Xilinx ISE 14.

Рассмотрим процесс создания проекта для microblaze на примере отладочной платы Xilinx VC707.

1 Подготовка проекта в ISE

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


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

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


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

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


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

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


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

Откроется помощник создания конфигурации BSP (Рис. 5).

2 Конфигурирование в Xilinx Platform Studio


Рис. 5: Помощник создания конфигурации BSP. Шаг 1

На первом шаге помощника выбираем тип соединения AXI System. На втором шаге (Рис. 6) также оставляем параметры по умолчанию. И переходим к третьему шагу (Рис. 7).


Рис. 6: Помощник создания конфигурации BSP. Шаг 2

Все модификации осуществляются на третьем шаге. Из конфигурации исключаем не используемые для данного проекта составляющие: DDR3 SDRAM, DIP_Switches_8bits, Linear_Flash, Push_Buttons_5Bits и RS232_Uart_1 (Рис. 8).


Рис. 7: Помощник создания конфигурации BSP. Шаг 3 перед модификацией


Рис. 8: Помощник создания конфигурации BSP. Шаг 3 после модификации

В результате сформируется аппаратная конфигурация встраиваемой системы (Рис. 9).


Рис. 9: Xilinx Platform Studio

На следующем шаге необходимо сформировать в ISE Project Navigator’е файл верхнего уровня проекта. Это действие выполняется атоматизированно. В иерархии проекта выбирается элемент cpu, в панели действий (processes) запускается на выполнение пункт «Generate Top HDL Source»(Рис. 10).


Рис. 10: Генерация HDL источника верхнего уровня

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


Рис. 11: Генерация образа bit

Далее перейдем к формированию настроек SDK. Эта операция выполняется автоматизированно путем выбора процессора в иерархии проекта и запуска в панели действий «Export Hardware Design To SDK with Bitstream»(Рис. 12).


Рис. 12: Экспорт параметров встраиваемой системы в Xilinx SDK

3 Создание программы в Xilinx SDK

На следующем шаге создадим проект в Xilinx SDK (Рис. 13). Он уже должен быть автоматически запущен после предыдущего шага.


Рис. 13: Запуск Xilinx SDK

Создаем новый проект приложения Xilinx (Рис. 14).


Рис. 14: Новый проект Xilinx C

В качестве шаблона используем «A blank C project»(Рис. 16).


Рис. 15: Параметры проекта Xilinx C


Рис. 16: Новый проект из пустого шаблона

Добавляем в проект новый файл исходного кода на C (Рис. 17).


Рис. 17: Создание нового файла исходного кода

Задаем имя файла (Рис. 18).


Рис. 18: Присвоение имени файлу

Далее приведем листинг файла led.c. Он является модификацией файла xgpio_example.c, входящего в состав EDK.

#include "xparameters.h"
#include "xgpio.h"


/************************** Constant Definitions *****************************/

#define LED 0x02   /* Assumes bit 0 of GPIO is connected to an LED  */

/*
 * The following constant maps to the name of the hardware instances that
 * were created in the EDK XPS system.
 */
#define GPIO_EXAMPLE_DEVICE_ID XPAR_LEDS_8BITS_DEVICE_ID
//#define GPIO_EXAMPLE_DEVICE_ID  XPAR_LEDS_POSITIONS_DEVICE_ID

/*
 * The following constant is used to wait after an LED is turned on to make
 * sure that it is visible to the human eye.  This constant might need to be
 * tuned for faster or slower processor speeds.
 */
#define LED_DELAY     100000

/*
 * The following constant is used to determine which channel of the GPIO is
 * used for the LED if there are 2 channels supported.
 */
#define LED_CHANNEL 1

/**************************** Type Definitions *******************************/


/***************** Macros (Inline Functions) Definitions *********************/

#ifdef PRE_2_00A_APPLICATION

/*
 * The following macros are provided to allow an application to compile that
 * uses an older version of the driver (pre 2.00a) which did not have a channel
 * parameter. Note that the channel parameter is fixed as channel 1.
 */
#define XGpio_SetDataDirection(InstancePtr, DirectionMask) \
        XGpio_SetDataDirection(InstancePtr, LED_CHANNEL, DirectionMask)

#define XGpio_DiscreteRead(InstancePtr) \
        XGpio_DiscreteRead(InstancePtr, LED_CHANNEL)

#define XGpio_DiscreteWrite(InstancePtr, Mask) \
        XGpio_DiscreteWrite(InstancePtr, LED_CHANNEL, Mask)

#define XGpio_DiscreteSet(InstancePtr, Mask) \
        XGpio_DiscreteSet(InstancePtr, LED_CHANNEL, Mask)

#endif

/************************** Function Prototypes ******************************/


/************************** Variable Definitions *****************************/

/*
 * The following are declared globally so they are zeroed and so they are
 * easily accessible from a debugger
 */

XGpio Gpio; /* The Instance of the GPIO Driver */

/*****************************************************************************/
/**
*
* The purpose of this function is to illustrate how to use the GPIO level 1
* driver to turn on and off an LED.
*
* @param	None
*
* @return	XST_FAILURE to indicate that the GPIO Intialisation had failed.
*
* @note		This function will not return if the test is running.
*
******************************************************************************/
int main(void)
{
	u32 Data;
	u8 LedData = LED;
	int Status;
	volatile int Delay;

	/*
	 * Initialize the GPIO driver
	 */
	Status = XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID);
	if (Status != XST_SUCCESS) {
		return XST_FAILURE;
	}

	/*
	 * Set the direction for all signals to be inputs except the
	 * LED output
	 */
	XGpio_SetDataDirection(&Gpio, LED_CHANNEL, ~LED);

	/* Loop forever blinking the LED */
	while (1) {
		/*
		 * Read the state of the data so that only the LED state can be
		 * modified
		 */
		if (LedData) LedData = 0; else LedData = LED;

		/* Wait a small amount of time so the LED is visible */
		for (Delay = 0; Delay < LED_DELAY; Delay++);

		/*
		 * Set the LED to the opposite state such that it blinks using
		 * the other API functions
		 */
		if (LedData) {
			XGpio_DiscreteClear(&Gpio, LED_CHANNEL, LED);
		} else {
			XGpio_DiscreteSet(&Gpio, LED_CHANNEL, LED);
		}

		/* Wait a small amount of time so the LED is visible */
		for (Delay = 0; Delay < LED_DELAY; Delay++);
	}
	return XST_SUCCESS;
}


 

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


Рис. 19: Вызов конфигуратора отладчика SDK

Диалоговое окно настройки конфигурации представлено на Рис. 20.


Рис. 20: Конфигурирование отладчика SDK

Далее необходимо настроить порт STDIO (Рис. 21).


Рис. 21: Назначение порта для STDIO

4 Программирование отладочной платы

К этому моменту проведены все подготовительные этапы и можно приступить к программированию FPGA, расположенной на отладочной плате. Открываем диалог «Program FPGA»через меню Xilinx Tools (22). При этом необходимо выбрать ELF файл для инициализации BRAM памяти встравиваемой памяти.
При нажатии на кнопку «Program»на отладочную плату передастся образ прошивки, содержащий также программу, разработанную в Xilinx SDK.

Таким образом здесь показана последовательность действий, выполняемых для создании проекта на Microblaze с использованием пакета Xilinx ISE.


Рис. 22: Выбор скомпилированного объектного файла для прошивки в FPGA

Комментарии (8)

RSS свернуть / развернуть
Один вопрос. Где Вы это (vc707) взяли? (давно хочу, но достал только kc)
0
Служба снабжения предприятия у официалов заказывала plis.ru
0
Норм, для старта самое то. Будет продолжение?
Я не успел разобраться еще как хранить прошивку на внешней памяти — BRAM то совсем небольшая, проект пожирнее уже не помещается, да и расходовать ресурсы дорогой ПЛИС на такое жалко.
0
Страшно представить, что будет на второе...? Если для старта vc707.
0
Ну понятное дело, плата не для домашних забав.
0
Планирую выполнить несколько публикаций на тематику ПЛИС. В основном будут касаться проектов с использованием HDL Verilog.
0
Код лучше избавить от номеров строк и поместить в тег <code>.
0
  • avatar
  • Vga
  • 08 ноября 2014, 18:32
Замечание учел :)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.