Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 2-ух ядерный Nios II
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
dim99
Имеется:
Quartus 8.0
Nios II 8.0 IDE

В SOPC Buider сгенерил систему с 2-мя ядрами nios ii с общей памятью sram, для разделения использую mutex от altera.

Проблема заключается в компиляции проекта в nios ide, а именно при компиляции совместно двух проектов для разных ядер.
Может кто сталкивался с 2-мя ядрами, есть ли пример для них? буду благодарен за любую помощь.

Скачать с сайта альтеры пример - не помогло, они дают в качестве software лишь сишный файл, без всякого проекта.
Kuzmi4
2 dim99 - а не могли бы вы по подробнее описать этот самый процесс собирания прожекта и совместную компиляцию для 2-х ядер ??
dim99
А что конкретно интересует?

Процесс собирания в sopc не представляет ничего сложного, а вот компиляция в nios ii ide.
завтра постараюсь прилепить скрины, чтоб было понятно о чем идет речь, пока не могу этого сделать.
islavv
Цитата(dim99 @ Feb 24 2009, 18:40) *
Имеется:
Quartus 8.0
Nios II 8.0 IDE

В SOPC Buider сгенерил систему с 2-мя ядрами nios ii с общей памятью sram, для разделения использую mutex от altera.

Проблема заключается в компиляции проекта в nios ide, а именно при компиляции совместно двух проектов для разных ядер.
Может кто сталкивался с 2-мя ядрами, есть ли пример для них? буду благодарен за любую помощь.

А можно поинтересоваться где у Altera на сайте описано как работает процессор Nios-II с двумя ядрами?
И опять же где описано как два ядра используют общую память?
Мне самому было интересно что на Сусlon можно запихать множество Nios - однако как их интегрировать и как IDE может поддерживать несколько процов?
dim99
Ссылка на источник прилагается десь

Само руководство есть tt_nios2_multiprocessor_tutorial.pdf
И где-то здесь пример
id_gene
Цитата(dim99 @ Feb 24 2009, 17:40) *
Проблема заключается в компиляции проекта в nios ide, а именно при компиляции совместно двух проектов для разных ядер.
Может кто сталкивался с 2-мя ядрами, есть ли пример для них? буду благодарен за любую помощь.
Проблема в чем заключается?
Когда создаете в IDE новый проект, указываете ptf и из списка выбираете процессор, для которого собирается софт. В итоге в ИДЕ у вас два проекта. Компилируете оба проекта.
Kuzmi4
2 dim99 - я вот что не могу понять - зачем вам 2 ядра выполняющие одну и ту же ф-цию ?? Вы что - ось собираетесь подымать на 2-х ядрах ??
Да и в той реализации , что по ссылкам - шина то у вас одна - кеша надо побольше в ниосы будет напихать , а то может системка подтормаживать.....
dim99
Kuzmi4
Цитата
а не могли бы вы по подробнее описать этот самый процесс собирания прожекта и совместную компиляцию для 2-х ядер ??

Сам процесс собирания ничем не отличается от простого проекта с 1 ядром.
Нюансы, с которыми столкнулся при сборе 2-ух ядер:

матрица соединений - черные\белые точки на закладке connections - черненькая открывает канал, белая закрывает
irq (прерывания) - простенькая система присвоения приоритета (0-высший приоритет)

Собственно особых вопросов это у меня не вызвало. на рисунке показана сборка 2-ух ядер с матрицей соединений:
Нажмите для просмотра прикрепленного файла

id_gene
Цитата
Когда создаете в IDE новый проект, указываете ptf и из списка выбираете процессор, для которого собирается софт. В итоге в ИДЕ у вас два проекта. Компилируете оба проекта.


Проблемы возникли при компиляции, но вроде потихоньку разгребаю.
По примеру от альтеры получается, что каждое ядро будет дублировать один и тот же код программы, с этим пока вопрос завтра покопаю.

Цитата(Kuzmi4 @ Feb 25 2009, 13:01) *
2 dim99 - я вот что не могу понять - зачем вам 2 ядра выполняющие одну и ту же ф-цию ?? Вы что - ось собираетесь подымать на 2-х ядрах ??
Да и в той реализации , что по ссылкам - шина то у вас одна - кеша надо побольше в ниосы будет напихать , а то может системка подтормаживать.....


Вообще, это тема моей бакалавриатской работы и параллельно по работе.

Речи ни о какой оси не идет, просто проверить возможности нескольких ядер в одном проекте, как себя поведут, вдруг что и пригодится.
id_gene
Цитата(dim99 @ Feb 25 2009, 18:24) *
Проблемы возникли при компиляции, но вроде потихоньку разгребаю.
По примеру от альтеры получается, что каждое ядро будет дублировать один и тот же код программы, с этим пока вопрос завтра покопаю.
Зачем один и тот же код. положите в каждый проект свои исходники. Удачи! Спрашивайте...
Kuzmi4
2 dim99 - вам же id_gene дал чёткий ответ - ложите в каждое ядро свой код и будет вам счастие biggrin.gif

А чем вам не нравится система , где каждый ниос со своей шиной + зашаренная область для всех ядер ? зачем вам всю эту гурьбу садить на 1 шину - чтоб потом 1 cpu ждал пока 2-й освободит ему шину (в смысле я про доступ в память например) ??
islavv
Цитата(Kuzmi4 @ Feb 25 2009, 19:40) *
2 dim99 - вам же id_gene дал чёткий ответ - ложите в каждое ядро свой код и будет вам счастие biggrin.gif

А чем вам не нравится система , где каждый ниос со своей шиной + зашаренная область для всех ядер ? зачем вам всю эту гурьбу садить на 1 шину - чтоб потом 1 cpu ждал пока 2-й освободит ему шину (в смысле я про доступ в память например) ??

Абсолютно согласен - в принципе самое эффективное решение задачи - это просто распараллелить логику и уложить ее просто хардверно в FPGA
Можно наверное специальным Си компиллятором который превращает код в HDL - гикогда сам не делал но вроде как пищут что работает
Процесоор нужен для коммуникации с внешним миром
Если уж сделаны два процессора и есть Shared memory то ее можно поделить пополам и в одну область пишет один процесс а другой читает и наоборот, Можно сделать третью откуда оба читают
Наверное можно еще прерывание завести по которому можно заставлять другой процессор читать
А так два ядра на FPGA это как ящик водки украсть и продать чтобы пропить деньги
dim99
Спасибо за предложения, но моя задача на сегодняшний день просто разобраться как оно работает, а дальше уже буду рассматриваться варианты что и как smile.gif

Насчет кода каждому ядру:
смутило, что альтеровский исходник представляет собой только 1 файл .c и описание, что его нужно везде копироват в проект и будет вам счастье.
Сегодня добью что и как, тогда и посмотрим.

Kuzmi4
Цитата
А чем вам не нравится система , где каждый ниос со своей шиной?

Что-то не пойму, в явном виде разве есть компоненты шины авалон или речь идет о Avalon-MM Pipeline Bridge?
dim99
Выяснил интересную деталь при компиляции software для 2 ядер.
В общем удачно компиляция проходит, только если память для каждого ядра больше 10 Кб, с чем это конкретно связано непонятно.
При компиляции 1 ядра память не влияет на компиляцию, при 2 получается такая ерунда.

По поводу программного кода, кто писал, что можно использовать разные исходники оказался прав smile.gif
в общем, каждое ядро выполняет свой исходный код.

В общем, у меня только один полувопрос smile.gif почему необходимо не менее 10 кб на on-chip memory каждому из ядер? и так ram памяти мало.
id_gene
Цитата(dim99 @ Feb 26 2009, 16:37) *
В общем, у меня только один полувопрос smile.gif почему необходимо не менее 10 кб на on-chip memory каждому из ядер? и так ram памяти мало.
Сказать невозможно, пока вы не покажете целиком проект и логи компиляции. Скорее всего, вы неправильно настроили размещение секций. Для первого процессора все секции кода должны лежать в onchip, для второго - в onchip2. Настраивается в свойствах syslib.
slog
Цитата(dim99 @ Feb 26 2009, 16:37) *
В общем, у меня только один полувопрос smile.gif почему необходимо не менее 10 кб на on-chip memory каждому из ядер? и так ram памяти мало.

Если вы не укажете в свойствах библиотеки что нужно использовать Lightweight device driver API, Small C library, Reduced device driver, Program never exits - то 10кБ это минимальный объём который занимает простейший HelloWorld!. laughing.gif
EvgenyNik
Цитата
10кБ это минимальный объём который занимает простейший HelloWorld!.

Уберите из текста printf'ы, общайтесь с миром иными способами. Ну и рекомендации от slogа.
dim99
id_gene
Цитата
Скорее всего, вы неправильно настроили размещение секций. Для первого процессора все секции кода должны лежать в onchip, для второго - в onchip2.

Здесь-то как раз правильно все расставил.

slog
Цитата
Если вы не укажете в свойствах библиотеки что нужно использовать Lightweight device driver API, Small C library, Reduced device driver, Program never exits - то 10кБ это минимальный объём который занимает простейший HelloWorld!.


А вот за это, действительно, спасибо. В software handbook сегодня посмотрел кто за что отвечает из этих свойств, в итоге сошлись на 5 Кб on-chip memory каждому ядру smile.gif

Зато теперь при отладке, пытаюсь запустить debug 1 ядра и пишет вот что:

Цитата
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Processor is already paused
Initializing CPU cache (if present)
OK

Downloading 0000A000 ( 0%)
Downloaded 3KB in 0.0s

Verifying 0000A000 ( 0%)
Verify failed between address 0xA000 and 0xA90B
Leaving target processor paused


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

Какие есть мнения насчет этой ошибки?
torik
Ошибка в железе...
dim99
А конкретнее?

проект-то я заново соберу и скомпилю, а вот знать бы где ошибка...
dim99
Собрал проект(2 ядра) на Cyclone III, результат - те же яйца - вид сбоку.

Опять выдает ошибку:
Цитата
Downloading 0000A000 ( 0%)
Downloaded 3KB in 0.0s

Verifying 0000A000 ( 0%)
Verify failed between address 0xA000 and 0xA90B
Leaving target processor paused


Есть ли смысл попробовать собрать все на Quartus 8.1 или какие-нибудь другие идеи, кто может подсказать?
torik
Вероятно, для процессора в SOPC указали неверные адреса reset и exception. Либо неправильно подключена ОЗУ.
Может проще для начала проверить память и поглядеть на ее работу в сигналтаб? Или процессору дать on-chip память и провести тест памяти...
dim99
Вряд ли проблема в этом, потому что есть готовый работающий проект с 1 ядром nios ii. Я же просто добавляю 2 ядро память и pio и пробую отладить - в итоге выдает все ту же ошибку.
torik
А что, у обоих процов одни адреса загрузки в одних и тех же памятях?
dim99
Для каждого ядра своя память, из которой должен загружаться софт.
Но адреса одинаковые, вроде в мануале по мультипроцессору на рисунке изображена память с одинаковыми адресами.

При использовании общей памяти для 2 ядер, при отладке ф-ция возвращает id ядра один и тот же, то есть в проекте 2 ядра, а софт видит только 1 ядро.

Тем более, как я понял в отладчике при использовании мультипроцессорной отладки должны загружаться 2 потока main для каждого ядра, у меня же все время загружается только 1 поток.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.