Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Что делать после получения директории handoff
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
nmurzin
Имею KIT для CyclonV.
С процессором ARM раньше не работал ни когда.
Работаю с Quartus 16.1
Со стороны HPS на вывод GPIO41 припаян светодиод.
Я хочу чтобы программа исполняемая процессором мигала светодиодом.
Для этого сделал следующее.
В Qsys создал компонент Hard Processor System.
В настройках HPS отключил всё кроме DDR3(её нельзя отключить).
На закладке "Peripherals_Pins" кликнул на вывод GPIO41.
GPIO41 стал отображаться жирным шрифтом.
Сгенерировал Qsys систему, прикрутил ее в свой модуль верхнего уровня.
Откомпилировал проект.
На этапе компиляции Assemblies создалась директория hps_isw_handoff.
На сколько я понимаю эта директория содержит описание процессорной системы.

Я знаю, что с помощью BSP Editor на основе директории hps_isw_handoff
можно сгенерировать файлы загрузчика, затем откомпилировать их и получить Preloader в виде bin файла.

А дальше не знаю что делать.
На сколько я понимаю Preloader всего лишь настроит процессорную систему,
загрузит содержимое флэш памяти в DDR и передаст управление.
У меня сейчас следующие вопросы:
1. Откуда процессор узнает, из какого носителя надо брать Preloader?
2. Как записать Preloader bin файл на носитель, с которой его заберет процессор?
3. Как создать загрузчик следующего уровня, тот самый, который в DDR ляжет?
4. Откуда Preloader узнает из какого места надо тянуть следующий загрузчик?

Если кто-то может помочь советом или указявкой где все это искать буду очень благодарен.
sonycman
Какая у вас плата с циклоном?

По поводу загрузки "голого" приложения (Bare Metal) смогу подсказать.

В настройках HPS модуля не забудьте включить SD/MMC контроллер (для того, чтобы загрузиться с SD карты памяти).
Также включите UART0, для вывода отладочной информации загрузчиками или своим приложением.

По вашим вопросам:
1. Начальной загрузкой занимается первичный загрузчик, который находится в BootROM. Выбор устройства задаётся пинами BSEL (BOOTSEL), на отладочных платах для этого обычно ставят dip переключатель или жёстко распаивают режим загрузки - с карты памяти, например.

2. Из консоли SoC EDS Command Shell, например, для карты памяти - командой "alt-boot-disk-util -a write -p mpl_C5_s-mkpimage.bin -d k", где mpl_C5_s-mkpimage.bin - файл загрузчика и буква k - буква диска (кардридер с картой памяти).

3. В DDR ложится уже либо большой загрузчик - UBOOT для линукса, либо своё приложение baremetal.
В первом случае не подскажу - пока не пробовал, а во втором без проблем - ниже.

4. Это задаётся настройками перед компиляцией прелоадера.

После того, как Квартус сгенерировал папку hps_isw_handoff, в консоли SoC EDS Command Shell запустите редактор командой bsp-editor.
В нём выбираете в меню New HPS BSP и указываете путь до файла hps.xml внутри hps_isw_handoff.
Ставите нужные настройки и генерируете BSP.

Далее надо собрать прелоадер.
Для MPL загрузчика - исходники находятся в папке examples дистрибутива SoC EDS под именем Altera-SoCFPGA-HardwareLib-MPL.tar.gz
Импортируйте его в DS-5, настройте и скомпилируйте.
Он может также загружать и FPGA, что очень удобно - не надо с этим возиться самому.

Вот страничка Bare Metal User Guide с полезной информацией.

В моём случае получается так: на карте памяти в формате FAT лежат файлы приложения и прошивки для FPGA.
MPL загрузчик грузит оба файла, конфигурирует FPGA и передаёт управление моему приложению.

ЗЫ: карту памяти нужно несколько хитро отформатировать - на ней должно быть два раздела.
Первый - это обычный FAT, а вот маленький второй - кастомный с типом раздела 0xA2, в котором лежит прелоадер.
nmurzin
У меня KIT: DK-DEV-5CSXC6N
https://www.altera.com/products/boards_and_...lone-v-soc.html

Заказчик хочет тестировать AriaV на входном контроле.
KIT на AriaV приедет только через 12 недель. Разбираюсь пока на ките CyclonV.

В итоге мне нужно будет прийти к тому, что у вас.
Чтобы процессор заливал зашивки в FPGA.

nmurzin
Видео сделано для среды версии 14.1
В видео ведущий редактирует файл config.mk
При этом он меняет запись
HANDOFF_BASE := $(SOCEDS_DEST_ROOT)\examples\hardware\cv_soc_devkit_ghrd
на вот такую
HANDOFF_BASE := С:\demo\cv_soc_devkit_ghrd

Остальные записи ссылаются на $(HANDOFF_BASE)\.

У меня среда версии 16.1
И в моем файле config.mk нет такой записи.
Есть только такая
SOCEDS_DEST_ROOT ?= $(SOCEDS_ROOT)


Цитата
# Must be set to either SDMMC, SDMMC_FAT, QSPI, or NAND
BOOT_SOURCE := QSPI

# Must be set to either C5 (Cyclone5), A5 (Arria5), or A10 (Arria10)
DEVICE := C5

# Set this to have MPL print status to serial out, or 0 for no status
PRINTF_UART := 1

# Must be either ARM or GNU
COMPILER := GNU

# Enable this to indicate that MPL should load the FPGA
LOAD_FPGA := 1

# Enable the MPL to boot the HPS device from the FPGA
BOOT_FROM_FPGA := 0

SOCEDS_DEST_ROOT ?= $(SOCEDS_ROOT)



Что мне сделать, чтобы пример из видео заработал?
nmurzin
И еще, зачем они вызывают BSP Editor и генерируют BSP?
В результате создается поддиректория <Директория проекта>\software\spl_bsp
Но они дальше не пользуются содержимым поддиректории \software\spl_bsp
Они работают только с Altera-SoCFPGA-HardwareLib-MPL.
sonycman
Цитата(nmurzin @ May 5 2017, 17:46) *
Видео сделано для среды версии 14.1
В видео ведущий редактирует файл config.mk
При этом он меняет запись
HANDOFF_BASE := $(SOCEDS_DEST_ROOT)\examples\hardware\cv_soc_devkit_ghrd
на вот такую
HANDOFF_BASE := С:\demo\cv_soc_devkit_ghrd

Что мне сделать, чтобы пример из видео заработал?

HANDOFF_BASE задаётся в файле Makefile, который лежит в одной папке с config.mk.
Эта переменная должна указывать на директорию проекта с папкой hps_isw_handoff.

А в config.mk задаются другие важные параметры загрузчика - выставьте их правильно.
Цитата
И еще, зачем они вызывают BSP Editor и генерируют BSP?
В результате создается поддиректория <Директория проекта>\software\spl_bsp
Но они дальше не пользуются содержимым поддиректории \software\spl_bsp
Они работают только с Altera-SoCFPGA-HardwareLib-MPL.

Затем, что файлы BSP непосредственно используются MPL при его компиляции, на них указывает другая переменная из Makefile: HANDOFF_DIR ?= $(HANDOFF_BASE)/software/spl_bsp/generated

Любому загрузчику необходима информация о сгенерированной системе, чтобы правильно её проинициализировать.
Эти данные предоставляются с помощью BSP-Editor.
dxp
QUOTE (nmurzin @ May 5 2017, 20:46) *
Что мне сделать, чтобы пример из видео заработал?

Тут придётся поредактировать.

QUOTE (nmurzin @ May 5 2017, 22:03) *
И еще, зачем они вызывают BSP Editor и генерируют BSP?
В результате создается поддиректория <Директория проекта>\software\spl_bsp
Но они дальше не пользуются содержимым поддиректории \software\spl_bsp
Они работают только с Altera-SoCFPGA-HardwareLib-MPL.

Я тоже ковырял эту тему, в конце зафиксировал результат, посмотрите, может быть вам что-то пригодится. Больше этого не скажу, не стал дальше копать SoC CV.

Проект собирается (только пути к тулчейну и HWLib надо откорректировать). Я его загружал по JTAG, он работает, в т.ч. печатает диагностические сообщения в консоль.
nmurzin
Наконец-то до редактировал до того, чтобы пример заработал.

И так в дирекории Altera-SoCFPGA-HardwareLib-MPL есть файлы:
mpl_C5_q-mkpimage.bin это Preloader с заголовком.
mpl_test_C5_whdr.bin это приложение которое мигает светодиодами.

Заметил, что при выполнении команды make
обновляется только файл прелодера mpl_C5_q-mkpimage.bin,
а файл приложения mpl_test_C5_whdr.bin остается неизменным.

Теперь у меня следующий вопрос.
Как и с помощью чего мне увидеть код приложения mpl_test_C5_whdr
где его поменять и как перекомпилировать, чтобы получить свой mpl_test_C5_whdr ?

Подозреваю, что с помощью DS-5, но какой последовательностью действий?
Мне нужно как-то открыть проект из директории Altera-SoCFPGA-HardwareLib-MPL
найти код приложения mpl_test_C5_whdr и как-то его перекомпилировать.
sonycman
Создавайте новый проект, и делайте в нем, что хотите.
Выбирайте новый проект для циклона и baremetal приложения.

Примеры есть на сайте Альтеры в разделе Design Examples.

Тут, кстати, очень помогает отладка по JTAG, которая есть только в платной версии DS-5.
В закромах она есть.
sonycman
В той же папке с примерами в SoC EDS (в моём случае c:\altera\16.0\embedded\examples\software\), где лежит проект MPL, рядом лежит совсем простой проект Altera-SoCFPGA-HelloWorld-Baremetal.
Он просто выводит текст в UART.

Попробуйте его собрать, по JTAG загрузить в железо и запустить.

В случае со светодиодом надо ещё предварительно настроить нужный порт GPIO.
Пример для двух пинов - один вход с кнопкой, второй - выход со светодиодом (HardwareLib):
Код
    // Setup GPIOs
    // Reset GPIO module
    alt_gpio_init();
    ALT_GPIO_CONFIG_RECORD_t gpio_init_pins[] =
    {
        // HPS_LED
        { ALT_GPIO_1BIT_53, ALT_GPIO_PIN_OUTPUT, ALT_GPIO_PIN_LEVEL_TRIG_INT, ALT_GPIO_PIN_ACTIVE_LOW, ALT_GPIO_PIN_NODEBOUNCE, ALT_GPIO_PIN_DATAZERO },
        // HPS_KEY
        { ALT_GPIO_1BIT_54, ALT_GPIO_PIN_INPUT, ALT_GPIO_PIN_LEVEL_TRIG_INT, ALT_GPIO_PIN_ACTIVE_LOW, ALT_GPIO_PIN_DEBOUNCE, ALT_GPIO_PIN_DATAZERO }
    };
    alt_gpio_group_config(gpio_init_pins, ARRAY_COUNT(gpio_init_pins));


nmurzin
Спасибо <Sonycman> только что увидел твой ответ, буду пробовать.

А пока наткнулся вот на что.

Смотрю данное видео в котором ведущий создает Bare Metal приложение.
https://www.youtube.com/watch?v=GHuM2mBlLxc

В среде eclipse он кликнул пункт меню File->New->C_Project
А в диалоговом окне "C Project" сделал следующий выбор.
Project Type: Bare Metal Executable ;;НО у меня нет такого варианта!!!
ToolChains: DS-5 GCC

У меня есть только такой вариант.
Project Type: Executable
А в ToolChains доступны следующие варианты:
ARM Compiler 5 (DS-5 built-in)
ARM Compiler 6 (DS-5 built-in)
Cygwin GCC
GCC 4.x [arm-linux-gnueabihf](DS-5 built-in)
MinGW GCC

Какой из них выбрать?
Чем они отличаются?
sonycman
Вероятнее всего первые три варианта и есть версии компиляторов под чистое железо.
ARM - это фирменный коммерческий компилятор, а GCC - бесплатный "народный".
Выбирайте между ними то, с чем привычнее работать.

Точнее смогу подсказать только вечером, когда с работы приду.

Четвёртый вариант - это линуксовый тулчейн, вам он пока что не нужен.
nmurzin
Цитата
совсем простой проект Altera-SoCFPGA-HelloWorld-Baremetal.
Он просто выводит текст в UART.

Попробуйте его собрать, по JTAG загрузить в железо и запустить


Не получается загрузить.
То ли я что-то не понимаю, то ли у меня среда не рабочая.
Скачивал я SoC EDS где положено с официального сайта. Лицензия тоже имеется.

Импортирую проект Altera-SoCFPGA-HelloWorld-Baremetal из архива в свое рабочее пространство.
Компилирую Project->Build Project
Дальше хочу залить и выполнить.
Выбираю Project->Debug as
Выбираю пункт DS-5 Debugger, выбираю мою ПЛИС, включаю KIT.
Далее в одном из выпадающих списков выбираю USB-Blaster и жму кнопку "Browse"
Должно появится окошко, в котором я должен выбрать свой USB Blaster.
Окошко-то появляется, но оно пустое, и не просто пустое а с сообщением о том что не удалось запустить обозреватель и советует смотреть некий Error log.

Я не понимаю, это поведение связано с тем что у меня со средой что-то не так?
Или все дело в настройках проекта, которые тоже надо как-то настраивать? А как?

Ну должен же быть простой алгоритм действий, чтобы с чистого листа создать и запустить программу "Hello World".
Пожалуйста помогите преодолеть этот тупик.




sonycman
Цитата(nmurzin @ May 11 2017, 21:55) *
Импортирую проект Altera-SoCFPGA-HelloWorld-Baremetal из архива в свое рабочее пространство.
Компилирую Project->Build Project
Дальше хочу залить и выполнить.
Выбираю Project->Debug as
Выбираю пункт DS-5 Debugger, выбираю мою ПЛИС, включаю KIT.
Далее в одном из выпадающих списков выбираю USB-Blaster и жму кнопку "Browse"
Должно появится окошко, в котором я должен выбрать свой USB Blaster.
Окошко-то появляется, но оно пустое, и не просто пустое а с сообщением о том что не удалось запустить обозреватель и советует смотреть некий Error log.

Я не понимаю, это поведение связано с тем что у меня со средой что-то не так?
Или все дело в настройках проекта, которые тоже надо как-то настраивать? А как?

Ну должен же быть простой алгоритм действий, чтобы с чистого листа создать и запустить программу "Hello World".
Пожалуйста помогите преодолеть этот тупик.

Работаете под Windows, насколько я понимаю?

Запускаете DS-5 напрямую? Через иконку Eclipse for DS-5?

Это неправильно.
Его надо запускать из под консоли SoC EDS Command Shell.
В ней набираете eclipse - запустится DS-5.

Консоль активирует системные переменные окружения, без которых среда правильно работать не будет.

Попробуйте sm.gif
nmurzin
Изначально запускаю через консоль командой eclipse.
Саму консоль запускаю путем запуска bat файла в директории embedded.
Это какой-то кошмарный сон.
Завтра попробую все переустановить и задать вопросы в icgamma где покупал KIT.
dxp
Там есть следующая проблема: для работы usb-blaster в качестве jtag отладчика ему нужна некая динамическая библиотека (название не помню, .dll на венде, .so на линухе), она лежит в недрах квартуса. Для того, чтобы DS-5 находила эту либу, нужно, чтобы эта либа была "в путях". Вот поэтому нужно организовывать запуск DS-5, так, чтобы она "видела" этот путь к библиотеке. Тут либо добавить этот путь в конфигурацию ОС, либо запускать DS-5, как указал выше sonycman.

Насколько помню, ему нужна переменная окружения QUARTUS_ROOTDIR. Я просто добавил это переменную окружения:

export QUARTUS_ROOTDIR="/opt/cad/altera/16.1/quartus"
sonycman
Нужно ещё проверить, чтобы версии квартуса и SoC EDS были одинаковые.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.