Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NIOS для начинающих
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
_Desh_
Цитата(Копейкин @ Jun 8 2012, 11:44) *
1) Проверьте, на те ли выводы подаётся тактовая частота и работает ли генератор?
2) Проверьте назначение пина для тактовой частоты в проекте.
3) Есть возможность проверить другую плату/рабочий проект?


1) и 2) - генератор рабочий (если верить осциллографу), тактовый вход задан правильно (потому что проект все-таки работает, если загружать его из EPCS или Quartus Programmer'ом). Другой платы нет, а вот другой проект вчера проверял разработчик платы (я ее использую только как отладочную) - все нормально, в смысле если опять же грузить через EPCS, в Eclipse проверить не получится - проект сделан в Nios II IDE 9.0.

Если будет время, попробую накатить сервис пак - вдруг поможет...
Wic
Сколько у меня было проблем с NIOSом - все были из за моих кривых рук. Или не правильно соберу в СОПКе схему, или ресет не правильно задам, или не правильно указал вектора. Работал в 3ех версиях квартуса, в каждой получалось запустить ниос.
Копейкин
Desh, я работаю с версией 9.1 SP 2 и у меня глюков мало.
Eclipse работает вполне стабильно.
Изредка отваливается/не стартует консоль Nios, но при следующем запуске, как правило всё ОК.
Reanimator++
Небольшой вопрос-уточнение,
как я понял включение галки Small C Library автоматически переключает драйвер для UART из FAST (который с прерываниями работоает) в Small (который Polled). Т.е. комбинаций Small C Library и FAST Driver невозможна.

Т.е. по сути получается что мы можем выводить в UART через printf а читать только через getchar, причем printf будет работать в блокирующем режиме, пока не отправит все байтики код дальше не пойдет.

По сути отличие от Use Lightweight Device Driver API отличие только в том что есть printf. Если он не нужен то лучше и его тоже убить и сэкономить еще пространства для кода в Onchip.

Все ли верно?
_Desh_
В общем, отписываюсь по поводу своей проблемы - дело оказалось в программаторе USB Blaster. Взял (самодельный!) ByteBlaster II (который через LPT) и все заработало, как и должно. Вот такая вот загогулина.
Orochi
Не стал создавать тему ради пустякового вопроса, но нигде не могу найти как создать проект С++ в NIOS II EDS, да и все примеры генерятся на Си. Подскажите где я что пропустил в этой жизни =)

ps: если быть более точным то сам проек на С++ создать не проблема File->New->Project->C/C++ ... но как тогда к нему подключить BSP?
alexPec
Цитата(Orochi @ Jul 31 2012, 00:12) *
Не стал создавать тему ради пустякового вопроса, но нигде не могу найти как создать проект С++ в NIOS II EDS, да и все примеры генерятся на Си. Подскажите где я что пропустил в этой жизни =)

ps: если быть более точным то сам проек на С++ создать не проблема File->New->Project->C/C++ ... но как тогда к нему подключить BSP?


В свойствах проекта указывается путь к BSP. В разных версиях в разных местах но везде есть. Или можно создать New->C project and BSP (как то так, точно не помню), т.е. шаблонный проект с BSP. Тогда сразу в проекте будет указан путь к BSP
Orochi
Создать СИшный проект с BSP не проблема, а вот с С++ проблема.
Wic
Orochi, в настройках bsp проекта есть галочка: support C++. Попробуйте ее включить. А так же порыться в свойствах проекта там есть настройки связанные с С/С++
gosu-art
Никак не могу заставить загружатся ниос из EPCS. Раньше работал только с он чип памятью - прошивал прогаммером и все ок. Сейчас же в системе используется SDRAM. Пытаюсь делать как раньше, т.е. добавляю sof и elf прошиваю... цыклон грузится, ниос видно, но программа не стартует.
Система примерно такая:
Нажмите для просмотра прикрепленного файла Нажмите для просмотра прикрепленного файла Нажмите для просмотра прикрепленного файла
Вектор сброса на EPCS, exeptions на SDRAM.
В дебаге все работает нормально. Почитал an458 и флэшпрограммер юзер гайд и понял, что для этого случая используется стандартный бутлодер.
Что я делаю не так? может кто поможет?
gosu-art
Сделал как написано в этой теме - работает. Но правда пришлось порезать систему т.к. он чип памяти почти не осталось. Так как сделать чтобы отрабатывал бутлоэдер который находится в EPCS контроллере по умолчанию? Я так понял для него не требуется дополнительной памяти.
Kas2901
Здравствуйте! Учусь работать с Quartus II и Nios II. Тренируюсь на KIT'е Cyclone IV GX Transceiver Starter Kit. Поставил для себя задачу через Nios processor написать сакраментальные "Hello World" на установленном на ките LCD. Сделал в Quartus'e схему, в SOPS builder'e процессор сделал. В Nios'e выбрал при создании проекта Hello World. И после Build all выдал ошибки.
Нажмите для просмотра прикрепленного файла
Вижу не хватает памяти. Иду в SOPS builder и меняю объем памяти, на что снова вылезает группа ошибок. Эти ошибки я могу понять. В Datasheet'e память на плиске указана большая, чем Nios просит. Подскажите, что это за ошибки и где я мог накосячить?
Нажмите для просмотра прикрепленного файла
Вот моя схема в Quartus'e.
Нажмите для просмотра прикрепленного файла
naliwator
Цитата(Kas2901 @ Dec 27 2012, 14:58) *
Здравствуйте! Учусь работать с Quartus II и Nios II. Тренируюсь на KIT'е Cyclone IV GX Transceiver Starter Kit. Поставил для себя задачу через Nios processor написать сакраментальные "Hello World" на установленном на ките LCD. Сделал в Quartus'e схему, в SOPS builder'e процессор сделал. В Nios'e выбрал при создании проекта Hello World. И после Build all выдал ошибки.
Нажмите для просмотра прикрепленного файла
Вижу не хватает памяти. Иду в SOPS builder и меняю объем памяти, на что снова вылезает группа ошибок. Эти ошибки я могу понять. В Datasheet'e память на плиске указана большая, чем Nios просит. Подскажите, что это за ошибки и где я мог накосячить?
Нажмите для просмотра прикрепленного файла

Посмотрите на распределение адресного пространства. Выберите автоматическое задание адресов.
Цитата

Посмотрите в настройках проекта поддержка С++. Выключете её, если используете только внутреннюю память. Вообще, если вы только знакомитесь с Nios II, загляните сюда. Возможно, пригодится.
Kas2901
naliwator, хорошо буду пробовать. Спасибо!!
asket
Я в ниосе использую printf для отображения на консоли eclipse отладочной информации, но почему то без аргументов printf("hello world!") выводит один раз, а с аргументами printf("key = %d", key) - выводит на экран постоянно, хотя вызывается один раз, использую встроенную ОС uC/OS II? вывод происходит через Jtag-uart Спасибо
Alexey_Rostov
Здравствуйте. Помогите пожалуйста разобраться с Ethernet для kit Stratix II 2s60. начал с мануала NicheStack TCP/IP Stack Выполняю пример для small socket server. Компилирую в Nios Eclipse. Дохожу до момента когда необходимо ввести в командной строке telnet 192.168.1.234 30. Ввожу. Выдает там же "подключение...", потом "не удалось открыть подключение к этому узлу, на порт 30: Сбой подключения". при этом появляется подключение по локальной сети. В чем причина?
Срочно необходимо осуществить передачу данных с ПЛИС по Ethernet. Вот и начал с примера. Подключение через telnet как я понял в этом примере дает возможность передавать/получать данные с использованием командной строки.

PS И еще в отличии от мануала запустить проект small socket server на Nios II IDE вообще не получилось. Не клмпилируется. Поэтому использую Eclipse
Alexey_Rostov
Вышеупомянутая проблема может быть связана с использованием Eclipse, а не Nios II IDE?
Пытался запустить Nios ide для разных примеров. безуспешно. Постоянно выдает примерно
Код
**** Build of configuration Debug for project simple_socket_server_0 ****

make -s all includes
Creating generated_app.mk...
      3 [main] ? (4072) C:\altera\11.0\quartus\bin\cygwin\bin\make.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x800000, top 0x890000, reserve_size 585728, allocsize 589824, page_const 4096
      2 [main] make 2808 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11
make: C:/altera/11.0/nios2eds/components/altera_hal/build/app_rules.mk:147: fork: Resource temporarily unavailable
/bin/sh: /cygdrive/c/altera/11.0/nios2eds/components/altera_hal: is a directory
      3 [main] ? (3668) C:\altera\11.0\quartus\bin\cygwin\bin\sh.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x680000, top 0x690000, reserve_size 61440, allocsize 65536, page_const 4096
      2 [main] sh 2916 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11
/bin/sh: fork: Resource temporarily unavailable
Error: no processor component available.
SOPC_BUILDER_PATH may be incorrectly set in your environment.
      4 [main] ? (3688) C:\altera\11.0\quartus\bin\cygwin\bin\make.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x6C0000, top 0x7A0000, reserve_size 913408, allocsize 917504, page_const 4096
      2 [main] make 2496 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11
make[1]: vfork: Resource temporarily unavailable
Creating system.h...
      4 [main] ? (3472) C:\altera\11.0\quartus\bin\cygwin\bin\sh.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x710000, top 0x720000, reserve_size 61440, allocsize 65536, page_const 4096
      2 [main] sh 3104 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11
/cygdrive/c/altera/11.0/nios2eds/bin/gtf-generate: fork: Resource temporarily unavailable
make[1]: *** [system_description/../obj/system.h-t] Error 128
make: *** [system_project] Error 2
Build completed in 113.863 seconds;


или

Код
**** Build of configuration Debug for project hello_world_0 ****

make -s all includes
      4 [main] ? (2940) C:\altera\11.0\quartus\bin\cygwin\bin\sh.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x6D0000, top 0x6E0000, reserve_size 61440, allocsize 65536, page_const 4096
      2 [main] sh 3004 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11
/bin/sh: fork: Resource temporarily unavailable
Creating generated_app.mk...
Creating generated_all.mk...
Error: no processor component available.
SOPC_BUILDER_PATH may be incorrectly set in your environment.

make[1]: *** [proc_check] Error 1
make: *** [system_project] Error 2
Build completed in 157.968 seconds
;


При этом различные танцы с бубном, шаманские песни и прочие манипуляции типа: смена версии Quartus с 11.0 на 9.1 на 6.0 на 9.1 sp2, а также window 7 на XP, установка java, не решили ситуацию.
Сейчас использую Window 7, Quartus 11.0, кит Stratix II DSP. Порядок действий: Заливаю в stratix пример Standart sof, далее создаю в IDE Nios C ++ Application, указываю на prf файл, выбираю пример, типа Hello world. Run as - Nios II Hardware.
Serhiy_UA
Цитата(farbius @ Sep 8 2013, 16:56) *
... Помогите пожалуйста разобраться с Ethernet для kit Stratix II 2s60...

А какой чип используется для Ethernet? PHY или контроллер?
У меня был Stratix II 2s60 с контроллером 91c111, все получилось. Правда на NIOS пришлось писать свой усеченный TCP/IP протокол, так как то, что предлагалось от производителей оказалось уж очень мудренным...
Alexey_Rostov
Цитата(Serhiy_UA @ Sep 9 2013, 08:56) *
А какой чип используется для Ethernet? PHY или контроллер?
У меня был Stratix II 2s60 с контроллером 91c111, все получилось. Правда на NIOS пришлось писать свой усеченный TCP/IP протокол, так как то, что предлагалось от производителей оказалось уж очень мудренным...


реализация MAC аппаратная, тоже на 91c111. Сегодня буду собирать свой проект на Qsys. Для Nios опять возьму Small socket server.
Проект в Qsys попробую сделать так:
* cpu - full
* on-chip - 40960 byte
* jtag-uart
* LAN91C111 MAC/PHY (lan91c111 in SOPC Builder)
* PIO 8-bit output (led_pio in SOPC Builder)
* PIO, 16-bit output (seven_seg_pio in SOPC Builder)
* STDOUT device [UART or Joint Test Action Group (JTAG) UART]
* tristate-bridge для lan91C111

Скажите пожалуйста, что представляет собой усеченный TCP/IP протокол?
Serhiy_UA
Цитата(farbius @ Sep 9 2013, 09:38) *
Скажите пожалуйста, что представляет собой усеченный TCP/IP протокол?


Было сделано ICMP/PING, ARP, UDP (прием редко, выдача непрерывным потоком). В итоге Ethernet-100.
Все протоколы на Ниос-2, только вычисление контр.сумм для массивов UDP аппаратно.
В качестве платформы - кит DK-NIOS-2S60N. Там еще много аппаратного на verilog.
На ней было несколько проектов.
Alexey_Rostov
Цитата(Serhiy_UA @ Sep 9 2013, 12:57) *
Было сделано ICMP/PING, ARP, UDP (прием редко, выдача непрерывным потоком). В итоге Ethernet-100.
Все протоколы на Ниос-2, только вычисление контр.сумм для массивов UDP аппаратно.
В качестве платформы - кит DK-NIOS-2S60N. Там еще много аппаратного на verilog.
На ней было несколько проектов.

Каким образом собиралась аппаратная часть? Просто пример типа standart?
Serhiy_UA
Цитата(farbius @ Sep 9 2013, 13:00) *
Каким образом собиралась аппаратная часть? Просто пример типа standart?

Да standart (с режимом fast), все согласно рекомендациям на кит DK-NIOS-2S60N и др.
Только протокол TCP/IP усеченный и свой, так как приладить предлагаемые исходники (их было много) не удалось, и избыточны они, хотя некоторые куски кодов я позаимствовал.
Да и контрольную сумму надо было вычислять быстро, ну здесь уже особенности задачи.


Alexey_Rostov
Цитата(Serhiy_UA @ Sep 9 2013, 13:18) *
Да standart (с режимом fast), все согласно рекомендациям на кит DK-NIOS-2S60N и др.
Только протокол TCP/IP усеченный и свой, так как приладить предлагаемые исходники (их было много) не удалось, и избыточны они, хотя некоторые куски кодов я позаимствовал.
Да и контрольную сумму надо было вычислять быстро, ну здесь уже особенности задачи.

Скажите пожалуйста какая версия Квартуса использовалась? И в чем софт для Nios (Eclipse или IDE)?
В 11.0 и в 9.1 не могу откомпилить проект в Nios IDE, постоянно выдает ошибки в сообщениях выше.
Serhiy_UA
Quartus II 7.2 (32-Bit) и Nios II 7.2 IDE. У меня все проекты на этом софте. Пробовал и на Eclipse, но не получилось сразу, а время на освоение не хватает, так что пока на 7.2 (хоть синица в руках)...

Вы до сих пор не указали тип кита. Если он от Альтеры, то есть много примеров под каждый конкретный кит: с них надо и начинать. Например, там есть и начальные проекты с Ethernet-10/100 (кажется, сокет-сервер). Если они запускаются и работают, то аппаратура цела и можно двигаться дальше...
Alexey_Rostov
Цитата(Serhiy_UA @ Sep 9 2013, 13:57) *
Quartus II 7.2 (32-Bit) и Nios II 7.2 IDE. У меня все проекты на этом софте. Пробовал и на Eclipse, но не получилось сразу, а время на освоение не хватает, так что пока на 7.2 (хоть синица в руках)...

Вы до сих пор не указали тип кита. Если он от Альтеры, то есть много примеров под каждый конкретный кит: с них надо и начинать. Например, там есть и начальные проекты с Ethernet-10/100 (кажется, сокет-сервер). Если они запускаются и работают, то аппаратура цела и можно двигаться дальше...


Кит у меня DK-DSP-2S60N. На кристалле Stratix II EP2S60F1020C4. Примеры для платы есть. Но... Как работают не понятно. Например: загружаю standart для софта использую какой нибудь binary counter или сакраментальный hello world. Загружается, делает вид что работает, но Не моргает, не считает, хелло не вылетает. Создаю свой проект в Qsys. Для того же binary counter. (т.е. ставлю cpu, led_pio, onchip mem и т.д.). Софт при этом работает безупречно: счетчик считает, моргая светодиодами, hello фром ниос в консоль вылетает.
Пример standart возможно не для моей платы. Поэтому буду пробывать собирать свой Qsys для простейшего socket server.
Nios IDE при этом как запустить не знаю. Может знаете как сгенерить ptf файл для указания при создании проекта в nios IDE? (При создании sopcinfo в Qsys не создается ptf файл )
Serhiy_UA
Цитата(farbius @ Sep 9 2013, 20:46) *
...не создается ptf файл..

В Q7.2 через SOPC сам ptf-файл создается нормально (в феврале 2009г.). Вот его название в моем проекте: NiosII_stratixII_2s60_RoHS_small_sopc.ptf. Не зацыкливайтесь на нем (я даже не знал о его существовании), все должно выходить (входить) автоматически...
Если есть уже работающий проект, то отталкивайтесь от него... Если придется писать свой стек, то начинайте с PING, а потом остальное...
Дерзайте....

Еще один довод почему я остался в Q7.2 - это внутренний альтеровский симулятор, который к сожалению удалили начиная с Q9.0. Потом, говорят, что вернули с Q13. Таким образом, есть хороший стимул начать сразу с Q13...
asket
Я начинаю программировать на НИОС, хотел бы уточнить есть ли возможность использовать CFI-flash в качестве ПЗУ для хранения пользовательских данных, помимо хранения в ней прошивки, и где можно посмотреть пример использования cfi-flash на си? Спасибо.
Alexey_Rostov
Цитата(Serhiy_UA @ Sep 10 2013, 08:50) *
В Q7.2 через SOPC сам ptf-файл создается нормально (в феврале 2009г.). Вот его название в моем проекте: NiosII_stratixII_2s60_RoHS_small_sopc.ptf. Не зацыкливайтесь на нем (я даже не знал о его существовании), все должно выходить (входить) автоматически...
Если есть уже работающий проект, то отталкивайтесь от него... Если придется писать свой стек, то начинайте с PING, а потом остальное...
Дерзайте....

Еще один довод почему я остался в Q7.2 - это внутренний альтеровский симулятор, который к сожалению удалили начиная с Q9.0. Потом, говорят, что вернули с Q13. Таким образом, есть хороший стимул начать сразу с Q13...


Спасибо за совет. Сейчас пробую на 10.1 версии. Вопрос глупый: как подключить пины из/в lan91c111? Собрал Sopc, в схемантике вывел пины для Ethernet (т.е. на/из lan). Как их теперь подключить, если через обычный пин редактор они недоступны(как специально назначенные ноги стратикса)?

Цитата(farbius @ Sep 10 2013, 13:12) *
Спасибо за совет. Сейчас пробую на 10.1 версии. Вопрос глупый: как подключить пины из/в lan91c111? Собрал Sopc, в схемантике вывел пины для Ethernet (т.е. на/из lan). Как их теперь подключить, если через обычный пин редактор они недоступны(как специально назначенные ноги стратикса)?


Разобрался
Alexey_Rostov
Цитата(Serhiy_UA @ Sep 10 2013, 08:50) *
В Q7.2 через SOPC сам ptf-файл создается нормально (в феврале 2009г.). Вот его название в моем проекте: NiosII_stratixII_2s60_RoHS_small_sopc.ptf. Не зацыкливайтесь на нем (я даже не знал о его существовании), все должно выходить (входить) автоматически...
Если есть уже работающий проект, то отталкивайтесь от него... Если придется писать свой стек, то начинайте с PING, а потом остальное...
Дерзайте....

Еще один довод почему я остался в Q7.2 - это внутренний альтеровский симулятор, который к сожалению удалили начиная с Q9.0. Потом, говорят, что вернули с Q13. Таким образом, есть хороший стимул начать сразу с Q13...


Добрый день. Может подскажите. Запускаю пример standart для своего кита в Nios IDE. При компиляции выдает ошибку
Error: no processor component available.
SOPC_BUILDER_PATH may be incorrectly set in your environment.

Назначаю системную переменную SOPC_BUILDER_PATH в своей среде и указываю путь, где находятся ядра ( C:\altera\10.1\ip\altera).
Перезагружаюсь.
Ошибка все равно осталась. При этом если собираю свою SOPC систему, в Nios IDE все работает. При работе с примером выпадает вышеприведенная ошибка.
Не могу понять почему компилятор не видит ядро процессора из примера standart. Полагаю, что возможно необходимо перегенерить систему SOPC из примера. Но этого сделать не получается, так как только режим чтения.

Может есть какие нибудь мысли? Для меня принципиально важно пощупать ehternet на примере...
Alexey_Rostov
А потом появилось данное окно:
Serhiy_UA
Цитата(farbius @ Sep 12 2013, 11:04) *
Может есть какие нибудь мысли? Для меня принципиально важно пощупать ehternet на примере...

У меня lan91c111 в составе DK-NIOS-2S60N работал нормально. Я его применил в гражданском прибрежном радаре, там был прием с темпом 25МГц от АЦП 12 разрядов, затем первичная обработка и передача в локальную сеть по Ethernet-100 на вторичную обработку (c наложение на карту и прочее).

1. Советую перейти на проверенный Q7.2, так как DK-DSP-2S60N, да и мой DK-NIOS-2S60N был созданы во времена Q7.2, т.е. там есть все их примеры. После того как дело двинется, можно пересесть на более свежие, например, Q11 и выше. Но можете и игнорировать этот совет...
2. На первом этапе надо использовать Nios II, а потом перейти на аппаратный UDP (возможно, совместно с Nios II). Мне достаточно было Nios II с аппаратным вычислением контрольных сумм (так как эти суммы отнимают много ресурсов у Nios II при пересылке по UDP).
3. Начать надо с PING и ARP, без них все будет не так как у людей, а потом перейти к UDP.
4. А самое начало - это работа с регистрами и FIFO самого чипа lan91c111, типа чтение/запись. А перед этим просто написать программы на Nios II с управлением от кнопом, с миганием светодиодов и работой с LCD-монитором (последний входит в комплект с DK-NIOS-2S60N). Еще был обмен/управление по UART с компьютером, тоже было полезно вместо обмена по JTAG, так как последний отнимал много ресурсов, да и имелась возможность написать сервисно-управляющую программу, что тоже удобно...
Alexey_Rostov
Добрый день. Столкнулся с очередной проблемой при заруске примера Nios II Simple socket server.

Код
InterNiche Portable TCP/IP, v3.1
=============== Software License Reminder ================
This software project uses an unlicensed version of the NicheStack TCP/IP
Network Stack - Nios II Edition. If you want to ship resulting object
code in your product, you must purchase a license for this software from
Altera. For information go to: "http://www.altera.com/nichestack"
=====================================================
InterNiche Portable TCP/IP, v3.1

Copyright 1996-2008 by InterNiche Technologies. All rights reserved.
Your Ethernet MAC address is 00:07:ed:ff:aa:20
prepped 1 interface, initializing...
Created "Inet main" task (Prio: 2)
Created "clock tick" task (Prio: 3)
smsc91c111 Auto-negotiation: 100 Mbps, Full Duplex
SMSC ethernet Rev: 0x3392, ram: 8192
mctest init called
IP address of et1 : 192.168.1.234
DHCP timed out, going back to default IP address(es)
Created "web server" task (Prio: 4)

Web Server starting up


Вместо Simple socket server starting up появляется сообщение о запуске примера Web server.

Как решить проблему? В чем может быть причина?
Full41
Здравствуйте уважаемы коллеги.
У меня возник один вопрос, но корректного описания его ответа, я найти не могу. Как назначается арбитраж для общения нескольких устройств к одной памяти в QSYS?
Stewart Little
Цитата(Full41 @ Oct 2 2013, 13:52) *
Здравствуйте уважаемы коллеги.
У меня возник один вопрос, но корректного описания его ответа, я найти не могу. Как назначается арбитраж для общения нескольких устройств к одной памяти в QSYS?

Cмотрите здесь: http://www.altera.com/literature/hb/qts/qs...nterconnect.pdf
До кучи - спецификация Авалона, сигнал lock для Avalon-MM
COMA
Можно прочитать здесь
http://www.altera.com/literature/hb/qts/qs...nterconnect.pdf 9-13
Цитата
When multiple masters contend for access to a slave, Qsys automatically inserts
arbitration logic which grants access in fairness-based, round-robin order.
In a fairness-based arbitration scheme, each master has an integer value of transfer
shares with respect to a slave. One share represents permission to perform one
transfer. The default arbitration scheme is equal share round-robin that grants equal,
sequential access to all requesting masters. You can change the arbitration scheme to
weighted round-robin by specifying a relative number of arbitration shares to the
masters that access a particular slave. AXI slaves have separate arbitration for their
independent read and write channels, and the Arbitration Shares setting affects both
the read and write arbitration. To display arbitration settings, right-click an instance
on the System Contents tab, and then click Show Arbitration Shares.

Full41
Цитата(COMA @ Oct 2 2013, 14:40) *
Можно прочитать здесь
http://www.altera.com/literature/hb/qts/qs...nterconnect.pdf 9-13

Спасибо, то что нужно.
Full41
Возникла еще проблема с констрейнами. Создал проект на основе готовых блоков NIOS, подключил все готовые SDC файлы прилагаемые к блокам. При компилировании проекта, в TimeQuest много чего красного, но как это поправить я не понимаю, может кто сталкивался с таким.
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Full41
Цитата(Full41 @ Oct 3 2013, 12:40) *
Возникла еще проблема с констрейнами. Создал проект на основе готовых блоков NIOS, подключил все готовые SDC файлы прилагаемые к блокам. При компилировании проекта, в TimeQuest много чего красного, но как это поправить я не понимаю, может кто сталкивался с таким.
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

Я понял какие это ошибки, но как то странно применил готовые блоки с прилагаемыми SDC, а теперь придется их дополнять.
Full41
Цитата(Full41 @ Oct 4 2013, 12:30) *
Я понял какие это ошибки, но как то странно применил готовые блоки с прилагаемыми SDC, а теперь придется их дополнять.


Продолжил разбираться и увидел, что TimeQuest игнорирует файлы, как это можно поправит? Может кто сталкивался?
Нажмите для просмотра прикрепленного файла
Dootch
Доброго времени суток. В разработке проектов с использованием nios я новичек. Работаю с Quartus 12 Web edition. Вопрос следующий:
Собрал процессор в qsys, сгенерировал его, откомпилировал проект в Quartus и зашил в ПЛИС. В Eclipse создал проект на основе Hello world и успешно запустил его в железе. Затем мне понадобилось подредактировать конфигурацию процессора. Вернулся в qsys, добавил пины, поменял частоту, сгенерировал снова. Откомпилировал снова и зашил.
Какие действия нужно проводить с проектом в Eclipse чтобы он подхватил модифицированый процессор? Пробовал заново делать build как проекта, так и BSP - не помогло.
Решаю проблему регулярным созданием нового проекта в Eclipse при модификации процессора, что сильно напрягает.
Stewart Little
Цитата(Dootch @ Oct 16 2013, 18:35) *
Какие действия нужно проводить с проектом в Eclipse чтобы он подхватил модифицированый процессор?

Refresh bsp - Bsp Editor - Create bsp - новая компиляция.
Грендайзер
Всем категорически здрасте! Нужно сделать следующую штуковину - принимать с ПК данные по COM порту с одной скоростью, и передавать их на внешнее с другой скоростью. Решл сделать это на ниосе, что б не особо замарачиваться и встрял... А именно, написл вот такой вот проект:

Код
#include <stdio.h>
#include "system.h"
#include "io.h"
#include "alt_types.h"
#include "sys/alt_irq.h"
#include "altera_avalon_uart_regs.h"

void* context;

alt_8 a = 255;
void uart_test(); // прототип ф-ци выполняемой в прерывании

int main()
{
IOWR(LED_BASE, 0, a);
IOWR(UART_BASE, 3, 128); // маска преерывания
alt_irq_register (UART_IRQ, context, (void*)uart_test); // здесь говорим компилятору неоходимое о прерывании
IOWR(UART_BASE, 4, 5208); // скорость передачи задана в SOPCBUILDER'е, но ещё раз напомним
    
while(1)
    {    
      IOWR(LED_BASE, 0, a);
    }
}


void uart_test() // прерывание
  {
      a = IORD(UART_BASE, 0) & 255; читаем принятый байт
      IOWR(UART_BASE, 4, 2000); // изменяем скорость передачи
      IOWR(UART_BASE, 1, a); // предаём принятый байт на внешн. устр. с другой скоростью
      IOWR(UART_BASE, 4, 5208); // возвращаем предыдущую скорость (9600 бод/сек)
      return;
  }


Так вот, происходит следующее: проц уходит прерывание, считывает байт (пока всё норм) и передаёт его, но вот осциллограф показывает следующее:
Длительность стартового ипульса соответствует необходимой скорости, авот длительности остальных импульсов соответствуют скорости 9600. Такое чувство, что процессор не успев выполнить предыдущую команду, бросается за выполнение следующей. Модифицыровал код подпрогр. прерывания след. образом:
Код
void uart_test()
  {
      a = IORD(UART_BASE, 0) & 255;
      IOWR(UART_BASE, 4, 2000);
      IOWR(UART_BASE, 1, a);
      alt_32 i = 0;
      for(i = 0; i < 10000; i++)
      {}
      IOWR(UART_BASE, 4, 5208);
      return;
  }

и всё стало нормалёк... передача идёт с заданной скоростью... Может кто поделиться соображениями?
Swup
Ну соображение довольно простое.
Команда "IOWR(UART_BASE, 1, a);" - команда записи содержимого a в регистр по адресу UART_BASE со смещением 1. Когда это выполнено, команда считается выполненной. Далее уже ядро уарта получив новый байт переводит его в свой внутренний сдвиговый регистр и начнет потихоньку передавать со своей внутренней скоростью. Как только это начало происходить, процессор уже начнет выполнять следующую команду и (как видимо в ядре нет запрета на изменение управляющих регистров и самого значения рабочей частоты) получается, что частота меняется посреди передачи.

Смотря на ваше решение видится следующее.
Вы могли бы вместо for использовать while и предикате опрашивать регистры уарта, ожидая пока можно будет поменять частоту. Уверен там есть флаги о занятости, о готовности к передаче, о принятой посылке и тд.
Грендайзер
Да, да, да... Спасибо... Вот только сейчас сам допёр... В мануале рус... английским языком всё написано, но про флаги то я и не подумал... Действительно, получается, что передатчик ещё не закончил работу, а я ему уже скорость меняю... Т.о. необходимо уйти в прерывание после того, как передача полностью пройдёт и лишь затем менять скорость.
Alexey_Rostov
Здравствуйте. Подскажите пожалуйста как работать с ядром On Chip FIFO memory core в Eclipse. С документацией пока еще разбираюсь. Задача следующая: данные записать с FPGA проекта в on chip fifo mem nios'а, потом по мере заполнения fifo считать в порядке их поступления. (для контроля вывести например на светодиоды)

При этом функции типа altera_avalon_fifo_read_fifo() требуют адрес для чтения данных. Можно ли считывать с fifo без использования адресов? Например просто инициализировать массив данных по мере заполнения fifo mem для дальнейшего использования?

Или подскажите, пожалуйста, с чего вообще начать работу с On Chip FIFO memory core.
vadimuzzz
Цитата(farbius @ Jan 29 2014, 19:51) *
При этом функции типа altera_avalon_fifo_read_fifo() требуют адрес для чтения данных. Можно ли считывать с fifo без использования адресов? Например просто инициализировать массив данных по мере заполнения fifo mem для дальнейшего использования?

это адреса портов i/o компонента (можно посмотреть в билдере или в system.h), они фиксированы. порядок данных при чтении будет тот же, что и при записи
Alexey_Rostov
Цитата(vadimuzzz @ Jan 30 2014, 07:29) *
это адреса портов i/o компонента (можно посмотреть в билдере или в system.h), они фиксированы. порядок данных при чтении будет тот же, что и при записи


Понемногу разобираюсь с документацией.
Читаю регистр статуса.
Возник вопрос: каким образом записать данные? Использую функцию altera_avalon_write_fifo(alt_u32 write_address, alt_u32 ctrl_address,
alt_u32 data). Если правильно понял ctrl_address это адрес control slave reg, не понятно с write_address адресом base FIFO write slave. Может ли быть это любой адрес в FIFO memory, отсчитываемый от base FIFO control slave (с учетом адресного пространства зарезервированного под регистр статуса)?
Проект в SOPC
Нажмите для просмотра прикрепленного файла

код Eclipse
Код
#include "altera_avalon_fifo_regs.h"
#include "altera_avalon_fifo_util.h"
#include "system.h"
#include "sys/alt_irq.h"
#include <stdio.h>
#include <stdlib.h>
#include "altera_avalon_pio_regs.h"
#include "system.h"
#include <stdio.h>




int main()
{ alt_u32 tmp;
tmp = 100;
// чтение регистра статуса
printf("LEVEL = %u\n", altera_avalon_fifo_read_level(FIFO_IN_CSR_BASE) );
printf("STATUS = %u\n", altera_avalon_fifo_read_status(FIFO_IN_CSR_BASE,
ALTERA_AVALON_FIFO_STATUS_ALL) );
printf("EVENT = %u\n", altera_avalon_fifo_read_event(FIFO_IN_CSR_BASE,
ALTERA_AVALON_FIFO_EVENT_ALL) );
//altera_avalon_fifo_write_ienable(FIFO_IN_CSR_BASE, 3);
printf("IENABLE = %u\n", altera_avalon_fifo_read_ienable(FIFO_IN_CSR_BASE,
ALTERA_AVALON_FIFO_IENABLE_ALL) );
printf("ALMOSTEMPTY = %u\n",
altera_avalon_fifo_read_almostempty(FIFO_IN_CSR_BASE) );
printf("ALMOSTFULL = %u\n\n",
altera_avalon_fifo_read_almostfull(FIFO_IN_CSR_BASE));

// запись в FIFO
altera_avalon_write_fifo( 10 , FIFO_IN_CSR_BASE, tmp);


  return 0;
}



при этом возникает ошибка undefined reference to `altera_avalon_write_fifo'
непонятно почему неправильно вызываю функцию `altera_avalon_write_fifo'...


Цитата(farbius @ Jan 30 2014, 11:49) *
при этом возникает ошибка undefined reference to `altera_avalon_write_fifo'
непонятно почему неправильно вызываю функцию `altera_avalon_write_fifo'...


Ошибку нашел: в мануале функция неправильно названа (altera_avalon_write_fifo, а необходимо altera_avalon_fifo_write_fifo)

записываю и читаю переменную следующим образом

Код
alt_u32 tmp, tmp_read;
tmp = 0xff;

// запись в FIFO
altera_avalon_fifo_write_fifo( FIFO_IN_BASE, FIFO_IN_CSR_BASE, tmp);

// чтение из FIFO

tmp_read = altera_avalon_fifo_read_fifo(FIFO_OUT_BASE, FIFO_IN_CSR_BASE);

printf("read = %02x\n", tmp_read);


Однако вместо 0xff получаю значение read = 92980. Пока не ясно в чем проблема.



vadimuzzz
Цитата(farbius @ Jan 30 2014, 16:37) *
не понятно с write_address адресом base FIFO write slave. Может ли быть это любой адрес в FIFO memory, отсчитываемый от base FIFO control slave (с учетом адресного пространства зарезервированного под регистр статуса)?

нет, не может. пишите все в base FIFO write slave
Alexey_Rostov
Цитата(vadimuzzz @ Jan 30 2014, 14:48) *
нет, не может. пишите все в base FIFO write slave


Благодарю за ответ. Не ясно где прописан base FIFO write slave для записи или base FIFO read slave для чтения данных.
system.h для FIFO

Код
/*
* fifo_in configuration
*
*/

#define ALT_MODULE_CLASS_fifo_in altera_avalon_fifo
#define FIFO_IN_AVALONMM_AVALONMM_DATA_WIDTH 32
#define FIFO_IN_AVALONMM_AVALONST_DATA_WIDTH 32
#define FIFO_IN_BASE 0x1108c
#define FIFO_IN_BITS_PER_SYMBOL 16
#define FIFO_IN_CHANNEL_WIDTH 8
#define FIFO_IN_ERROR_WIDTH 8
#define FIFO_IN_FIFO_DEPTH 16
#define FIFO_IN_IRQ -1
#define FIFO_IN_IRQ_INTERRUPT_CONTROLLER_ID -1
#define FIFO_IN_NAME "/dev/fifo_in"
#define FIFO_IN_SINGLE_CLOCK_MODE 1
#define FIFO_IN_SPAN 4
#define FIFO_IN_SYMBOLS_PER_BEAT 2
#define FIFO_IN_TYPE "altera_avalon_fifo"
#define FIFO_IN_USE_AVALONMM_READ_SLAVE 1
#define FIFO_IN_USE_AVALONMM_WRITE_SLAVE 1
#define FIFO_IN_USE_AVALONST_SINK 0
#define FIFO_IN_USE_AVALONST_SOURCE 0
#define FIFO_IN_USE_BACKPRESSURE 1
#define FIFO_IN_USE_IRQ 1
#define FIFO_IN_USE_PACKET 1
#define FIFO_IN_USE_READ_CONTROL 0
#define FIFO_IN_USE_REGISTER 0
#define FIFO_IN_USE_WRITE_CONTROL 1


/*
* fifo_in_csr configuration
*
*/

#define ALT_MODULE_CLASS_fifo_in_csr altera_avalon_fifo
#define FIFO_IN_CSR_AVALONMM_AVALONMM_DATA_WIDTH 32
#define FIFO_IN_CSR_AVALONMM_AVALONST_DATA_WIDTH 32
#define FIFO_IN_CSR_BASE 0x11040
#define FIFO_IN_CSR_BITS_PER_SYMBOL 16
#define FIFO_IN_CSR_CHANNEL_WIDTH 8
#define FIFO_IN_CSR_ERROR_WIDTH 8
#define FIFO_IN_CSR_FIFO_DEPTH 16
#define FIFO_IN_CSR_IRQ 10
#define FIFO_IN_CSR_IRQ_INTERRUPT_CONTROLLER_ID 0
#define FIFO_IN_CSR_NAME "/dev/fifo_in_csr"
#define FIFO_IN_CSR_SINGLE_CLOCK_MODE 1
#define FIFO_IN_CSR_SPAN 32
#define FIFO_IN_CSR_SYMBOLS_PER_BEAT 2
#define FIFO_IN_CSR_TYPE "altera_avalon_fifo"
#define FIFO_IN_CSR_USE_AVALONMM_READ_SLAVE 1
#define FIFO_IN_CSR_USE_AVALONMM_WRITE_SLAVE 1
#define FIFO_IN_CSR_USE_AVALONST_SINK 0
#define FIFO_IN_CSR_USE_AVALONST_SOURCE 0
#define FIFO_IN_CSR_USE_BACKPRESSURE 1
#define FIFO_IN_CSR_USE_IRQ 1
#define FIFO_IN_CSR_USE_PACKET 1
#define FIFO_IN_CSR_USE_READ_CONTROL 0
#define FIFO_IN_CSR_USE_REGISTER 0
#define FIFO_IN_CSR_USE_WRITE_CONTROL 1


/*
* fifo_out configuration
*
*/

#define ALT_MODULE_CLASS_fifo_out altera_avalon_fifo
#define FIFO_OUT_AVALONMM_AVALONMM_DATA_WIDTH 32
#define FIFO_OUT_AVALONMM_AVALONST_DATA_WIDTH 32
#define FIFO_OUT_BASE 0x11088
#define FIFO_OUT_BITS_PER_SYMBOL 16
#define FIFO_OUT_CHANNEL_WIDTH 8
#define FIFO_OUT_ERROR_WIDTH 8
#define FIFO_OUT_FIFO_DEPTH 16
#define FIFO_OUT_IRQ -1
#define FIFO_OUT_IRQ_INTERRUPT_CONTROLLER_ID -1
#define FIFO_OUT_NAME "/dev/fifo_out"
#define FIFO_OUT_SINGLE_CLOCK_MODE 1
#define FIFO_OUT_SPAN 4
#define FIFO_OUT_SYMBOLS_PER_BEAT 2
#define FIFO_OUT_TYPE "altera_avalon_fifo"
#define FIFO_OUT_USE_AVALONMM_READ_SLAVE 1
#define FIFO_OUT_USE_AVALONMM_WRITE_SLAVE 1
#define FIFO_OUT_USE_AVALONST_SINK 0
#define FIFO_OUT_USE_AVALONST_SOURCE 0
#define FIFO_OUT_USE_BACKPRESSURE 1
#define FIFO_OUT_USE_IRQ 1
#define FIFO_OUT_USE_PACKET 1
#define FIFO_OUT_USE_READ_CONTROL 0
#define FIFO_OUT_USE_REGISTER 0
#define FIFO_OUT_USE_WRITE_CONTROL 1


в этом файле в соответствии с документацией на On chip FIFO memory
FIFO_IN_CSR_BASE -- это the base address of the FIFO control slave

как быть с the base address of the FIFO write slave и the base address of the FIFO read slave?
Изначально была мысль о FIFO_IN_BASE и FIFO_OUT_BASE соответственно.

Цитата(farbius @ Jan 30 2014, 16:22) *
как быть с the base address of the FIFO write slave и the base address of the FIFO read slave?
Изначально была мысль о FIFO_IN_BASE и FIFO_OUT_BASE соответственно.


например в такой конфигурации происходит запись/чтение без проблем для одной переменной

Код
alt_u32 tmp, tmp_read;
tmp = 0xff;

// запись
    altera_avalon_fifo_write_fifo( FIFO_IN_USE_AVALONMM_WRITE_SLAVE, FIFO_IN_CSR_BASE, tmp);
// чтение    
    tmp_read = altera_avalon_fifo_read_fifo(FIFO_IN_USE_AVALONMM_READ_SLAVE , FIFO_IN_CSR_BASE);
    printf("read = %02x\n", tmp_read);


Каким образом можно проверить что записан весь буфер?
Можно, например, сформировать массив, записать используя altera_avalon_fifo_write_fifo, и как потом считать?
vadimuzzz
я же писал, смотрите все адреса в system.h
из вашего же скриншота видно, что порт in (запись) имеет адрес 0x0001108c, out (чтение) 0x00011088. именованные обозначение этих портов лежат в указанном выше файле.
Цитата
Каким образом можно проверить что записан весь буфер?

altera_avalon_fifo_write_fifo пишет данные только если fifo не полна, т.е. смотрите статус перед записью
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.