Перейти к содержанию
    

Два NIOSa с разными шинами

Всем доброго времени суток!

Пытаемся разделить два ниоса так чтобы из общего у них оставалась только тактовая частота и все. Принято такое решение потому что попытки реализовать многоядерную систему на одной общей шине приводило к тому что система очень сильно тормозила. Пришли к выводу что процессоры делили между собой шину. Решили разделить шину, каждому свою. На плате планируется оставить две SDRAM и одну EPCS. Но ни как не получается перекачать программу из EPCS в SDRAM второго ядра. В данный момент пробуем использовать SGDMA.

В Qsys собрана система NIOS II, on-chip, sysid, jtag_uart, pio, SDRAM_controller. Вторая система такая же. Все разделено, включая линии reset, первое ядро сбрасывается через clock_source, второе через reset_bridge. EPCS подключена к первому ядру. Задумка такая: сначала программа для второго ядра с помощью самодельного boot_loaderа закачивается из EPCS в SDRAM1 от туда данные перегоняются с помощью SGDMA в SDRAM2, и производиться сброс второй системы от PIO первой системы на reset_bridge второй. Далее программа для первой системы с помощью того же boot_loaderа перекачивается в SDRAM1 и для запуска первой системы выполняется переход на программу по адресу в SDRAM1. Если наблюдать из первой системы то все в порядке, программы перегружаются по очереди из EPCS, SGDMA благополучно отправляет данные в SDRAM2, производиться сброс второй системы, программа для первой системы благополучно выкачивается из EPCS и происходит переход первой системы на выполнение программы уже из SDRAM1. На первой и второй системе к PIO подключены по одному светодиоду, если все успешно, должны мигать оба светодиода, но мигает только один который подключен к первой системе. Вторая система. Для анализа зашли в дебаг второй системы и обнаружили что данные которые должны были с помощью SGDMA попасть в SDRAM2 туда не попали. Уже всю голову сломаль, возможно не правильно используем SGDMA? Еще есть идея сделать два SGDMA, один из первой системы mm to st, другой во вторую систему st to mm, или вообще перегнать данные через SPI, но эти два способа требуют наличие программы во втором ядре, программу можно разместить на on-chip через meminit, и запускаться через call на SDRAM2, но все это как то через чур. Хотелось бы перекачать данные с помощью одного ядра в каждую SDRAM и запустить обе системы на выполнение своих прграмм.Может кто ни будь сталкивался с подобной проблеммой, у кого есть какие решения, Еще одну флешку ставить не хочеться, лишни корпус на плате, плата маленькая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня похожая система.

Два Ниоса, у каждого свой нобор переферии.

Первый Ниос грузиться из epcs, код выполняется в SDRAM.

Второй ниос имеет два блока SRAM. В одном режит исполняемый код программы, второй блок используется как ОЗУ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня похожая система.

Два Ниоса, у каждого свой нобор переферии.

Первый Ниос грузиться из epcs, код выполняется в SDRAM.

Второй ниос имеет два блока SRAM. В одном режит исполняемый код программы, второй блок используется как ОЗУ.

 

А как из EPCS грузится программа во второе ядро?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никак.

Код второго ядра расположен в SRAM.

SRAM инициализируется при включении FPGA.

 

 

Т.е. SRAM имеется ввиду on-chip которая?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для второго ставите он-чип и пишите, примерно, это http://electronix.ru/forum/index.php?showt...=90394&st=0

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для второго ставите он-чип и пишите, примерно, это http://electronix.ru/forum/index.php?showt...=90394&st=0

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мой вариант такой:

1. мультиплексор линий EPCS на 2 проца. (нужно будет за пределами Qsys сделать)

2. как только только загрузился master, он отдает линии EPCS, slave процу.

3. на slave крутится программа из on-chip и ждет флаг разрешения (PIO, например) что можно загрузить программу по данной методике (http://electronix.ru/forum/index.php?showt...=90394&st=0 ) в свою SDRAM из той же EPCS

У каждого процессора будет совой EPCS контроллер. В чем проблема добавить его для второго?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мой вариант такой:

1. мультиплексор линий EPCS на 2 проца. (нужно будет за пределами Qsys сделать)

2. как только только загрузился master, он отдает линии EPCS, slave процу.

3. на slave крутится программа из on-chip и ждет флаг разрешения (PIO, например) что можно загрузить программу по данной методике (http://electronix.ru/forum/index.php?showt...=90394&st=0 ) в свою SDRAM из той же EPCS

У каждого процессора будет совой EPCS контроллер. В чем проблема добавить его для второго?

 

Хорошая идея, завтра попробую ее реализовать, я о чем то подобном думал, только я смотрел в сторону SDRAM, про EPCS как то не подумал!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовали с en-valb на простом проекте, все отлично заработало. Внесли аналогичные изменения в основной проект, пока не работает, что то slave как то не корректно загружается, то ли bootloader, то ли qsys, завтра продолжим разбираться.

Изменено пользователем prussta

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все, запустилось! :08: Дело было в файле mem_init, подключали его через .qip файл, не работало, когда скопировали в корень проекта сам .hex и подключили его все заработало. При чем в простом проекте через .qip работает. Не первый раз замечаю что mem_init файл от проекта к проекту успешно инициализируется по разному. В понедельник будем думать как разложить .sof и .hexы в нужных местах адресного пространства EPCS чтобы при корректировках ПО любого ядра не переделывать mem_init файл. Огромнейшее спасибо gosu-art за подсказку, целый месяц бились как сделать, решение оказалось тривиальным. :a14:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...