|
Что-то с NIOS II не так, Очень медленно работает... |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Nov 26 2005, 07:11
|
Знающий
   
Группа: Свой
Сообщений: 618
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 375

|
Цитата А какой именно NIOSII используете? Их не менее трех. И на программу (поставил бит в порт-снял бит с порта) хотелось бы взглянуть(на С или на ассемблере). Из какой памяти исполняется, какой кэш, все ли попадает в кэш (инструкции). С памятью другой вопрос. Он обсуждался активно на форуме www.niosforum.com/forum.htm Вот линка, стоит прочитать: http://www.niosforum.com/forum/index.php?showtopic=629Проблема для чтения, но она актуально если код у вас во внешней памяти, и вы без кэша вынужденые его от туда читать. После чего разработчики добавили в ниос 2 версия 5.0 специальный вид памяти: Tightly Coupled Memory (тесно связаная с ядром). Вот линка на релизные изменения в версии 5.0 http://www.niosforum.com/forum/index.php?s...1651&hl=latency
|
|
|
|
|
Nov 26 2005, 20:21
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Nios не 5 но и не 1-й! Не помню версии - на работе стоит... а инета там нету...  Ниос в самой мелкой комплектации - естественно без кэша и т.п В ЕР1С3 - особо не втолкаешь - память команд и констант - внутренняя. А на проблемы с внешней памятью наткнулись на евалюшн борде, потому и на параллельных портах. Программка ессно на С - встроенное все, что в комплекте было... . процедура IOWR_... ну и тп. Попробую кэш прикрутить... может влезет... Хотя даже при такте 40 МГц - должно быстрее работать.
|
|
|
|
|
Nov 27 2005, 06:33
|
Знающий
   
Группа: Свой
Сообщений: 618
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 375

|
Софт проект hello_led добавлен цикл: while(1){ IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x01); IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x00); } Плата 1С20 эвалюха, частота 50МГц HW 1C20 low_cost (код данные из SDRAM, процессор NIOS II/e): период 1.56 мкс.
Тоже самое но для HW small (память данных и кода на М4К блоках внутри циклона (всего 2К байт), процессор NIOS II/e): период 800нс
При этом для ядра NIOS II/e заявляется 5-7 DMIPS. По сгенеренному коду мы имеем: while(1){ IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x01); 60: 00900004 movi r2,16384 64: 00c00044 movi r3,1 68: 10c00035 stwio r3,0(r2) IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x00); 6c: 00900004 movi r2,16384 70: 10000035 stwio zero,0(r2) 74: 003ffa06 br 60 <alt_main+0xc> Disassembly of section .comment:
За один период выполняется 6 команд. Что соответствует заявленым 5-7 мипсам. Проект компилился в дебаге. Реально только запись в R2 лишняя, что уменьшило бы цикл до 4 команд.
Все "железо" компилилось в квартусе 5.0, настройки проектов не изменялись, все по умолчанию.
|
|
|
|
|
Nov 28 2005, 20:13
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Понятно - в общем так и есть... Как и описал Major... цикл приблизительно так-же выглядит (а как иначе-то?  ) Наличие кэша и пр влияет незначительно. Быстрее... но чуть-чуть. В общем - тормоз. И зачем он еще нужен - если только лампочками моргать да клавиатуру сканить... На более серьезные задачи - очень тяжело... А жаль - удобно... Попробовать 5.0 поставить... Хотя если даже на асме писать - такая задержка... Неприемлемо...
|
|
|
|
|
Nov 29 2005, 05:25
|
Знающий
   
Группа: Свой
Сообщений: 618
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 375

|
Нужен, даже в варианте e(economic наверное). Лампой моргать можно и логику привертеть, так же как и клаву. Есть рутинные задачи, которые на конечных автоматах запаристо делать, да и понимание их работы со времененм ухудшается (программы медленее "стареют"). Мне обычно мипсы нужны только пиковые, а так все идет неспешно, то что на авре требует 8 мипс на ниосе хватит 2-3 (за счет битности и внешней логики) плюс большое адресное пространство - это для мелких задач. Цена критерием не является. Это моя оценка, сам я использую только варианты s (standart) и f (fast), и при этом весьма доволен. Ниос мне позволяет делать отложеные решения на этапе проектирования, не заморачиваясь раздачей ног и ресурсов (в локальном смысле). Цена за это своя, но меня она устраивает.
|
|
|
|
|
Nov 29 2005, 06:12
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(EXeGLuMATOR @ Nov 26 2005, 01:40)  Имеется - надо принять поток данных (16 бит) и сложить его во внешнюю память (8 бит), потом соотв прочитать и выдать во внешнее устройство (4 бита). В связи со спецификой решения - все делается на параллельных портах. Результат - крайне низкая скорость. Странно очень для RISC-процессора - на кристалле EP1C3 - при частоте проца 200МГц - длительность импульса (поставил бит в порт-снял бит с порта) - соотв частоте 1МГц. Запись 1 МБ памяти занимает около 2-х секунд!!!  Это так и должно быть? Quartus 4.2 sp 1 + все стандартное из комплекта. Может чего-то не так настроил? 1. Могу добавить только, что конвейер 5 ступеней и при каждом JMP, CALL, RET происходит сборс конвейера. Следовательно, все критичные куски надо писать "в лоб", без этих команд. 2. Сделайте ДМА, если это позволяет обработка Ваших данных. Если нужно что-то особенное, то есть пользовательские команды. Небольшой автомат, определяющий готовность данных. Получите скорость близкую к тактовой. Если внешнее устройство - порт MII, то это гораздо проще сделать аппаратно, чем выделять тетрады. Так что либо сидеть со "спецификой", либо как задумано в Niose. Удачи!
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Dec 2 2005, 15:13
|
Знающий
   
Группа: Свой
Сообщений: 618
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 375

|
Я линукс не пользую. На форуме ниоса народ активное его обсуждает со всех сторон. http://www.niosforum.com/pages/forum.php?cat_id=5Для работы с памятью рекомендую использовать DMA. Да и ядро ставить не economical.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|