|
|
  |
Nios II 7.2 IDE, Размер кода. Есть ли ограничения? |
|
|
|
Sep 16 2008, 06:37
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Добрый день! При работе с Nios II 7.2 IDE столкнулся с непонятным ограничением по размеру кода в памяти программ. Через SOPC задал on_chip_memory в 100 кбайт. Компиляция С/С++ сообщает, что задействовано 20 кбайт и еще свободно 80 кбайт. После загрузки все работает нормально, но когда добавляю еще пару команд, то наблюдаю, нарушение в работе, а убираю эти команды: все нормально. Причем, команды могут быть самые разные, с добавлением в разных местах программы – эффект один. После вырезания из программы произвольного куска кода, т.е. после сокращения в целом ее размера, все ОК и эти дополнительные команды проходят. Как бы наблюдаются ограничения по размеру кода. Применял лицензии от Альтеры и «наши» - все без отличий.
Кто-то уже сталкивался с подобным? Как это побороть?
|
|
|
|
|
Sep 16 2008, 08:23
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Цитата(Kuzmi4 @ Sep 16 2008, 10:43)  А пробовали перенести код в RAM ? Код в RAM, как я понимаю, это код в той же on_chip_memory, т.е. в самой FPGA. Попадает туда после стартовой загрузки из Flash или напрямую через USB-JTAG. Почему on_chip_memory в FPGA: потому как NiosII работает на 100 MIPS - достаточно высокая частота. Цитата(Kuzmi4 @ Sep 16 2008, 10:43)  Кстати - как наблюдаете нарушение в работе ? Просто есть тестовые точки для своего UART-а, проверяю их в режиме интерактива через комп. Когда ответа от точек нет, то код явно не рабочий.
|
|
|
|
|
Sep 16 2008, 13:35
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 Волощенко - на счёт памяти - я имел ввиду SDRAM, DDR SDRAM ну и так далее. 100 МГц SDRAM-ка выдерживает, а DDR подавно.. Кстати о листинге - он сответствует тому что написано ? Просто есть подозрение что оно считает что 100кб для on_chip_memory это многовато и начинает выЙОжЫваться.. На счёт Цитата тестовых точек - у вас есть интерупт на уарте, на который повешено откликаться, но при обращении отклика нет ? Так ? На счёт интерактива - руками или прога тестит ? И есчё - пробовали написать что-то простое но большое - типа использовать полноценный printf(у меня он вроде бы 60 кб занимает без оптимизации на NIOSII IDE 7.2) и что нибудь страшное по нему отправить, что проверить его - так быстро можно будет увидеть работоспособность в обсчем. Впрочем может оптимизация в GCC всему виной...
|
|
|
|
|
Sep 16 2008, 15:45
|
Участник

Группа: Свой
Сообщений: 68
Регистрация: 29-12-06
Из: Омск
Пользователь №: 23 999

|
Цитата(Волощенко @ Sep 16 2008, 09:37)  После загрузки все работает нормально, но когда добавляю еще пару команд, то наблюдаю, нарушение в работе, а убираю эти команды: все нормально.Кто-то уже сталкивался с подобным? Как это побороть? Возможно, я сообщу банальность, Но при размещении кода в Он-чип компилер не всегда корректно отслеживает оверлапы с кэш-памятью. Особенно если играться с разрядностью кэша. Кэш отключать как бы нельзя (т.к. тогда придется приделывать tightly coupled memory, а запускать из нее код - задача для проктолога). Но попробуй хотя бы уменьшить его разрядность, размер и отключить бурсты.... 4 кило 32-разр кэша - это 16 килобайт ончипа. Разрядность самой памяти тоже лучше свести к 16 бит. Словом, предполагаю, программа у тебя просто не влазит в он-чип. Ниос ИДЕ делает довольно громоздкий код даже с оптимизацией. Также попробуй входить не в main() а alt_main() и инициализировать все сам.
|
|
|
|
|
Sep 16 2008, 17:50
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
to Kuzmi4 1. И SDRAM, и DDR SDRAM есть, попробую, думаю должно пройти. На них и проверю. 2. 100кбайт это немного, там на FPGA около 2500 кбайт встроенной памяти, как бы должно хватать. 3. printf(у) использую, но это для работы с IDE. Просто надо и без IDE. А чтобы без IDE - то через UART-rs232 под свою программу обслуживания (монитор), в которой куча окошек и режимов, так проще и быстрее. Есть режим команда-ответ, есть трасса, ну и другие. А не проходит у меня команда-ответ, на ней спотыкаемся.
to Syberian 1. Что-то о кэше не подумал, даже не знаю, использую или нет.... А tightly coupled memory точно нет. 2. Почеиу "Разрядность самой памяти тоже лучше свести к 16 бит.", ведь команды по 32 разряда? 3. В части "попробуй входить не в main() а alt_main() и инициализировать все сам" для меня полный туман. Где можно почерпнуть информацию?
Убедили.. попробую для памяти программ перейти на out-chip.
|
|
|
|
|
Sep 17 2008, 03:17
|
Участник

Группа: Свой
Сообщений: 68
Регистрация: 29-12-06
Из: Омск
Пользователь №: 23 999

|
Цитата 3. В части "попробуй входить не в main() а alt_main() и инициализировать все сам" для меня полный туман. Где можно почерпнуть информацию? Когда в Ниос ИДЕ создаешь проект, есть шаблоны - в них лежит проект с альтом. Минимальный размер проги. Цитата 2. Почеиу "Разрядность самой памяти тоже лучше свести к 16 бит.", ведь команды по 32 разряда? Я и к восьми сводил, на быстродействие это не влияло. Зато программу можно было впихнуть большего размера. Кэш 512(минималка) 32-разрядный. Как ни странно, но если прогмем, датамем, хеап и стек сунуть в ext_ram, все работает в 2 раза быстрее, чем если все упихать в ончип о_О Тестировал на StratixII отладочной плате проектом Dhrystone (есть в шаблонах IDE)
|
|
|
|
|
Sep 17 2008, 06:54
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Попытки перевести память программ на out-chip в моем ките DK-NIOS-2S60N не удались. Перенес программу из onchip-memory в ssram. Компиляция прошла, но в процессе загрузки какие-то проблемы с верификацией при загрузке, а процессор в приторможенном состоянии. Прошлось вернуться назад. Проблема остается... В приложении скрин свойств системной библиотеки, а за ним сообщения при загрузке.
Прикрепленные файлы
1.zip ( 49.69 килобайт )
Кол-во скачиваний: 88
|
|
|
|
|
Sep 17 2008, 08:40
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 Волощенко : На счёт ssram - частоту он выдерживает нормально ? Может сбоить уже начинает ? Касательно скринки - такое и у меня было по непонятным причинам - вылечивалось полной пересборкой прожекта. Попробуйте, может и вам поможет. А есчё попробуйте убрать onchip-memory вообсче с проекта - засуньте всё в SDRAM например. Есчё галочки на Reduce device drivers и Small C Library - может лучше попробовать без них со стандартными настройками ? Вчера на моём девките на 2-м циклоне и в onchip-memory запихивал всё и в SDRAM - всё нормально было (правда пришлось самому ручками настраивать много чего, а то не влезло бы - у моего сцЫклона мало внутренней для работы стандартными ф-циями). Ошибок в работе не обнаружил. На счёт alt_main() - можно на сате альтеры почитать про это - в 2-х словах он пропускает всю инициализацию. Но мне больше нравится в alt_sysinit.c самому копаться  Не люблю я alt_main()... И есчё - я так понял у вас автомат проверяет - типа вопрос-ответ - может тут лучше посмотреть Terminal`ом - тобто ручками ? А вообсче мутно оно как то..
|
|
|
|
|
Sep 17 2008, 09:09
|

Лентяй
     
Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843

|
Цитата(Волощенко @ Sep 16 2008, 10:37)  Как бы наблюдаются ограничения по размеру кода. Применял лицензии от Альтеры и «наши» - все без отличий. Нет, никаких ограничений по размеру кода быть не должно. Скорее всего у Вас произошел выход за пределы памяти. Проверьте, есть ли в том ПЛИСе, с которым Вы работаете, столько памяти, сколько Вы в SOPC Builder'е задали. При этом надо помнить, что встроенные блоки памяти требуются и для процессорного ядра, и для JTAG-Debug-модуля. Ну и, наверное, надо написать обработчик исключения по обращению к несуществующей области памяти. Это поможет точнее диагностировать причину такого поведения.
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Sep 17 2008, 09:43
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 Stewart Little - обычно IDE сама пишет что вылазим за пределы.. Да и квартус не даст выделить больше чем есть - напишет что нету и вывалится по ошибке.. На счёт Цитата обработчика исключения Идея кстати хорошая, вот только я не нашёл в n2sw_nii52006.pdf описания как это сделать. Так подозреваю что это типа интерупта что-то, вот только как именно ? Может примеры есть у кого?
|
|
|
|
|
Sep 17 2008, 10:53
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Цитата(Kuzmi4 @ Sep 17 2008, 11:40)  Есчё галочки на Reduce device drivers и Small C Library - может лучше попробовать без них со стандартными настройками ? Kuzmi4, спасибо! Похоже, что причина в этом, уже легче... Я снял галочку с Small C Library и все прошло! Видимо, эта опция как-то ограничивает код. Вот что о ней пишется в Help: Small C library - When on, the system library uses a reduced implementation of the Newlib ANSI C standard library. Notably, the printf() family of routines (printf(), fprintf(), sprintf(), etc.) will not support floating-point values. The reduced library is optimized for smaller memory footprint, although the implementation might be less time efficient.
|
|
|
|
|
Sep 19 2008, 05:25
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
Цитата Как ни странно, но если прогмем, датамем, хеап и стек сунуть в ext_ram, все работает в 2 раза быстрее, чем если все упихать в ончип Хммм... Интересно, а если он-чип прицепить неявно, а симмитировать ею ext_ram? :-)
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|