Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как вставить HPS часть в свой проект FPGA
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
nmurzin
Здравствуйте.
Зашел в тупик из которого пока не знаю где смотреть.
Работаю с CyclonV SoC.
Есть у меня проект для FPGA части сделанный на Quartus 16.1 без использования Qsys.
Хочу добавить HPS часть, чтобы хотя бы светодиодом помигать.

Открыл свой проект в квартусе.
Запустил Qsys.
Сохранил Qsys систему в поддиректории с именем <ПАПКА ПРОЕКТА>\HPS\HardProcSys.qsys
Добавил мегафункцию Hard Processor Sysytem.
Нажал кнопку "Generate HDL", и вышел из Qsys.
В результате на диске появились следующие файлы
<ПАПКА ПРОЕКТА>\HPS\HardProcSys\synthesis\HardProcSys.qip
<ПАПКА ПРОЕКТА>\HPS\HardProcSys\synthesis\HardProcSys.vhd

Вопрос - как мне теперь вставить HPS часть в свой проект FPGA на квартусе???

Я добавил в проект файл HardProcSys.qip
И хочу вставить в свой файл верхнего уровня компонент HardProcSys.vhd
Но дальше надо будет назначать пины.
А я помню, что когда я в PinPlaner пытался в FPGA проекте назначить пин из HPS части, то PinPlaner не позволял это сделать.

Как же прикрутить HPS часть???
Может для нее надо создавать отдельный проект и выбирать отдельную микросхему?
FPGA часть и HPS часть это части одного проекта в квартусе, или это должны быть два разных проекта?






sonycman
Цитата(nmurzin @ Apr 27 2017, 11:59) *
Вопрос - как мне теперь вставить HPS часть в свой проект FPGA на квартусе???

Я добавил в проект файл HardProcSys.qip
И хочу вставить в свой файл верхнего уровня компонент HardProcSys.vhd
Но дальше надо будет назначать пины.
А я помню, что когда я в PinPlaner пытался в FPGA проекте назначить пин из HPS части, то PinPlaner не позволял это сделать.

Как же прикрутить HPS часть???
Может для нее надо создавать отдельный проект и выбирать отдельную микросхему?
FPGA часть и HPS часть это части одного проекта в квартусе, или это должны быть два разных проекта?

Приветствую.

FPGA и HPS подсистемы единого чипа SoC могут работать как независимо друг от друга, так и совместно.
По крайней мере так указано в документах.

Сам пока что собирал только проект, в котором и ПЛИС, и процессоры HPS были вместе в одном QSys файле, так как взаимодействовали друг с другом.

Назначать пины для HPS компонента не нужно, в PinPlanner они не доступны, так как назначаются автоматически на основе настроек HPS компонента в QSys.
Kapsik
Завести ТОП уровень в него поместить файл .v .vhd сгенерированный QSYS, а рядом ваши модули, соединяются HPS и рукописные модули по одному из мостов, для FPGA мосты видятся, как Avalon. Пины соответсвенно назначаете для вашей рукописной части. Получается такая штука: ваша программа в HPS по мосту например лайтвейт записывает в рукописный модуль по шине Avalon значение по адресу, ваш рукописный модуль это дело анализирует и зажигает светодиод.
nmurzin
Но ведь модуль сгенерированный Qsys содержит например пины интерфейса DDR3, которые имеют имена типа mem_*
Куда мне девать эти ноги? Зачем он мне их выкатил?
sonycman
Цитата(nmurzin @ Apr 27 2017, 16:41) *
Но ведь модуль сгенерированный Qsys содержит например пины интерфейса DDR3, которые имеют имена типа mem_*
Куда мне девать эти ноги? Зачем он мне их выкатил?

Затем "выкатил", что HPS не может работать без внешней SDRAM памяти, она необходима.

В моём случае файл верхнего уровня имеет внешние пины для DDR3 памяти:
Код
module top (
    ////////// HPS /////////
    ///////// DDR3 /////////
    output    [14:0]    HPS_DDR3_ADDR,
    output     [2:0]        HPS_DDR3_BA,
    output               HPS_DDR3_CAS_N,
    output             HPS_DDR3_CKE,
    output             HPS_DDR3_CK_N,
    output             HPS_DDR3_CK_P,
    output             HPS_DDR3_CS_N,
    output     [3:0]        HPS_DDR3_DM,
    inout     [31:0]    HPS_DDR3_DQ,
    inout     [3:0]     HPS_DDR3_DQS_N,
    inout     [3:0]     HPS_DDR3_DQS_P,
    output               HPS_DDR3_ODT,
    output                HPS_DDR3_RAS_N,
    output                 HPS_DDR3_RESET_N,
    input              HPS_DDR3_RZQ,
    output             HPS_DDR3_WE_N,

к которым подсоединяются выводы memory_* модуля HPS:
Код
system u0 (
        .memory_mem_a                   (HPS_DDR3_ADDR),
        .memory_mem_ba                  (HPS_DDR3_BA),
        .memory_mem_ck                  (HPS_DDR3_CK_P),
        .memory_mem_ck_n                (HPS_DDR3_CK_N),
        .memory_mem_cke                 (HPS_DDR3_CKE),
        .memory_mem_cs_n                (HPS_DDR3_CS_N),
        .memory_mem_ras_n               (HPS_DDR3_RAS_N),
        .memory_mem_cas_n               (HPS_DDR3_CAS_N),
        .memory_mem_we_n                (HPS_DDR3_WE_N),
        .memory_mem_reset_n             (HPS_DDR3_RESET_N),
        .memory_mem_dq                  (HPS_DDR3_DQ),
        .memory_mem_dqs                 (HPS_DDR3_DQS_P),
        .memory_mem_dqs_n               (HPS_DDR3_DQS_N),
        .memory_mem_odt                 (HPS_DDR3_ODT),
        .memory_mem_dm                  (HPS_DDR3_DM),
        .memory_oct_rzqin               (HPS_DDR3_RZQ),


Роутер их подхватывает и автоматически разводит на нужное место, так как это hard controller.

Там ещё куча assigments для пинов памяти нужна:
Нажмите для просмотра прикрепленного файла

Как правило файлы с назначениями идут в комплекте с обучающими платами для разработок, там и примеры есть, на базе которых не так сложно разобраться...
nmurzin
Спасибо sonycman.
Я не мог понять зачем мне ноги памяти, если я не могу раскидать их в PinPlaner.
А если он умный и сам знает где они весят и сам их разводит, то зачем он мне их выписывает.
Сейчас стало понятно как дальше двигаться. a14.gif
dxp
QUOTE (sonycman @ Apr 27 2017, 20:14) *
Затем "выкатил", что HPS не может работать без внешней SDRAM памяти, она необходима.

А вот это, кстати, не понятно, почему она именно необходима? Что мешает процу работать с OCM, тем более, что при старте он только так и работает? И ещё там QSys генерит пачку HDL исходников тоже на тему DDR контроллера, хотя в конфигурации со стороны ПЛИС никаких заявок на работу с DDR нет. Вот зачем это?
sonycman
Цитата(dxp @ Apr 28 2017, 13:08) *
А вот это, кстати, не понятно, почему она именно необходима? Что мешает процу работать с OCM, тем более, что при старте он только так и работает? И ещё там QSys генерит пачку HDL исходников тоже на тему DDR контроллера, хотя в конфигурации со стороны ПЛИС никаких заявок на работу с DDR нет. Вот зачем это?

Я сделал такой вывод потому, что в настройках HPS модуля в разделе SDRAM нельзя отключить память.
Если инстанциируется HPS - то он будет вместе с DDR SDRAM.

Я бы вот также хотел бы видеть на рынке хорошую FPGA с менее "жирным" хардовым ARMом, и чтобы его память также была внутри чипа.
Но не судьба пока что, к сожалению.
Приходится "баловаться" с монстрами 05.gif

Цитата(dxp @ Apr 28 2017, 13:08) *
Что мешает процу работать с OCM, тем более, что при старте он только так и работает?

При старте процессор, всё же, наверное выполняет код в ROM, так как в OCM пусто.
dxp
QUOTE (sonycman @ Apr 28 2017, 20:31) *
Я сделал такой вывод потому, что в настройках HPS модуля в разделе SDRAM нельзя отключить память.
Если инстанциируется HPS - то он будет вместе с DDR SDRAM.

Вот это-то и странно! Впрочем, там хватает "странностей", начиная от упомянутых HDL файлов для DDR контроллера, хотя оный не заявлен для доступа со стороны ПЛИС, и заканчивая необходимостью проводить синтез (соответственно, и создавать HDL проект) только для того, чтобы получить файлы поддержки для процессора. Я отношу это сугубо к кривизне дизайна. При ровном дизайне Qsys и должен бы сгенерить все эти файлы. Подозреваю, что причины тянутся к NIOS'у - поскольку это софтовое ядро, то его по любому надо синтезировать, ну а генерацию файлов сделали на этапе ассемблера. Теперь хотя ядро железное, но файлы всё равно генерятся ассемблером, это вынуждает юзера проводить синтез, хотя по здравому смыслу это было бы не нужно - это подтверждается тем, что, например, в Vivado этого делать не надо, достаточно того, что генерит аналог Qsys - IP Integrator.

QUOTE (sonycman @ Apr 28 2017, 20:31) *
Я бы вот также хотел бы видеть на рынке хорошую FPGA с менее "жирным" хардовым ARMом, и чтобы его память также была внутри чипа.

Вот есть с М3 sm.gif Правда, не знаю, насколько это по вашим меркам хорошая FPGA. Но, имхо, она по мощи где-то соответствует Cortex-M3, т.е решение сбалансированное.

QUOTE (sonycman @ Apr 28 2017, 20:31) *
При старте процессор, всё же, наверное выполняет код в ROM, так как в OCM пусто.

Да, прямо первые такты, конечно, из BOOTROM железно зашитый загрузчик, но дальше этот код грузит программу в OCM и дальше собственно пользовательская программа уже живёт в этой памяти. Я это имел в виду. И то, что какая-то жизнь без SDRAM всё же есть, поэтому жёсткое безусловное навязывание DDR контроллера выглядит грубым.
sonycman
Цитата(dxp @ Apr 28 2017, 18:01) *
Вот это-то и странно! Впрочем, там хватает "странностей", начиная от упомянутых HDL файлов для DDR контроллера, хотя оный не заявлен для доступа со стороны ПЛИС...

Есть вариации чипов с двумя хардовыми DDR SDRAM контроллерами - один (обязательный) для HPS, и второй (опциональный) для FPGA.
Может, это к нему относится?

Цитата
например, в Vivado этого делать не надо

А у Цинков можно использовать MPU без SDRAM контроллера?

Цитата
Вот есть с М3

Да, спасибо, тоже интересный вариант.
dxp
QUOTE (sonycman @ Apr 28 2017, 21:25) *
Есть вариации чипов с двумя хардовыми DDR SDRAM контроллерами - один (обязательный) для HPS, и второй (опциональный) для FPGA.
Может, это к нему относится?

Да нет, там вообще ничего не было указано в Qsys насчёт DDR. Пустой компонент, только GPIO сконфигурированы (светодиодами помигать).

QUOTE (sonycman @ Apr 28 2017, 21:25) *
А у Цинков можно использовать MPU без SDRAM контроллера?

Там аналогично в IP Integrator создаётся блок-дизайн и про экспорте генерируются файлы для инициализации периферии (ps7init.h и ps7init.c), которых достаточно для этой задачи. Никакого синтеза проводить не надо. Т.е. можно ковыряться с процессорной частью независимо и без лишнего гемора. Ну, и конечно, можно абсолютно автономно работать только с OCM, которой там куда больше и которая подцеплена к ядрам поближе и продуманнее (в другой теме писал про это).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.