реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
Волощенко
сообщение Sep 16 2008, 06:37
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Добрый день!
При работе с Nios II 7.2 IDE столкнулся с непонятным ограничением по размеру кода в памяти программ. Через SOPC задал on_chip_memory в 100 кбайт. Компиляция С/С++ сообщает, что задействовано 20 кбайт и еще свободно 80 кбайт.
После загрузки все работает нормально, но когда добавляю еще пару команд, то наблюдаю, нарушение в работе, а убираю эти команды: все нормально. Причем, команды могут быть самые разные, с добавлением в разных местах программы – эффект один. После вырезания из программы произвольного куска кода, т.е. после сокращения в целом ее размера, все ОК и эти дополнительные команды проходят.
Как бы наблюдаются ограничения по размеру кода. Применял лицензии от Альтеры и «наши» - все без отличий.

Кто-то уже сталкивался с подобным? Как это побороть?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 16 2008, 07:43
Сообщение #2


Гуру
******

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



2 Волощенко - странно конечно... Сам не наблюдал такого, но давненько уже код в on_chip_memory не располагал - разве что бутлодырь..
А пробовали перенести код в RAM ?

Кстати - как наблюдаете нарушение в работе ?
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Sep 16 2008, 08:23
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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-а, проверяю их в режиме интерактива через комп. Когда ответа от точек нет, то код явно не рабочий.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 16 2008, 13:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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 всему виной...
Go to the top of the page
 
+Quote Post
Syberian
сообщение Sep 16 2008, 15:45
Сообщение #5


Участник
*

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



Цитата(Волощенко @ Sep 16 2008, 09:37) *
После загрузки все работает нормально, но когда добавляю еще пару команд, то наблюдаю, нарушение в работе, а убираю эти команды: все нормально.Кто-то уже сталкивался с подобным? Как это побороть?


Возможно, я сообщу банальность, Но при размещении кода в Он-чип компилер не всегда корректно отслеживает оверлапы с кэш-памятью. Особенно если играться с разрядностью кэша.
Кэш отключать как бы нельзя (т.к. тогда придется приделывать tightly coupled memory, а запускать из нее код - задача для проктолога). Но попробуй хотя бы уменьшить его разрядность, размер и отключить бурсты.... 4 кило 32-разр кэша - это 16 килобайт ончипа. Разрядность самой памяти тоже лучше свести к 16 бит.
Словом, предполагаю, программа у тебя просто не влазит в он-чип. Ниос ИДЕ делает довольно громоздкий код даже с оптимизацией. Также попробуй входить не в main() а alt_main() и инициализировать все сам.
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Sep 16 2008, 17:50
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Syberian
сообщение Sep 17 2008, 03:17
Сообщение #7


Участник
*

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



Цитата
3. В части "попробуй входить не в main() а alt_main() и инициализировать все сам" для меня полный туман. Где можно почерпнуть информацию?


Когда в Ниос ИДЕ создаешь проект, есть шаблоны - в них лежит проект с альтом. Минимальный размер проги.

Цитата
2. Почеиу "Разрядность самой памяти тоже лучше свести к 16 бит.", ведь команды по 32 разряда?

Я и к восьми сводил, на быстродействие это не влияло. Зато программу можно было впихнуть большего размера. Кэш 512(минималка) 32-разрядный.

Как ни странно, но если прогмем, датамем, хеап и стек сунуть в ext_ram, все работает в 2 раза быстрее, чем если все упихать в ончип о_О
Тестировал на StratixII отладочной плате проектом Dhrystone (есть в шаблонах IDE)
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Sep 17 2008, 06:54
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Попытки перевести память программ на out-chip в моем ките DK-NIOS-2S60N не удались.

Перенес программу из onchip-memory в ssram. Компиляция прошла, но в процессе загрузки какие-то проблемы с верификацией при загрузке, а процессор в приторможенном состоянии. Прошлось вернуться назад.
Проблема остается...

В приложении скрин свойств системной библиотеки, а за ним сообщения при загрузке.
Прикрепленные файлы
Прикрепленный файл  1.zip ( 49.69 килобайт ) Кол-во скачиваний: 88
 
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 17 2008, 08:40
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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 самому копаться smile.gif Не люблю я alt_main()...

И есчё - я так понял у вас автомат проверяет - типа вопрос-ответ - может тут лучше посмотреть Terminal`ом - тобто ручками ?

А вообсче мутно оно как то..
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Sep 17 2008, 09:09
Сообщение #10


Лентяй
******

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



Цитата(Волощенко @ Sep 16 2008, 10:37) *
Как бы наблюдаются ограничения по размеру кода. Применял лицензии от Альтеры и «наши» - все без отличий.

Нет, никаких ограничений по размеру кода быть не должно. Скорее всего у Вас произошел выход за пределы памяти. Проверьте, есть ли в том ПЛИСе, с которым Вы работаете, столько памяти, сколько Вы в SOPC Builder'е задали. При этом надо помнить, что встроенные блоки памяти требуются и для процессорного ядра, и для JTAG-Debug-модуля.
Ну и, наверное, надо написать обработчик исключения по обращению к несуществующей области памяти. Это поможет точнее диагностировать причину такого поведения.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 17 2008, 09:43
Сообщение #11


Гуру
******

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



2 Stewart Little - обычно IDE сама пишет что вылазим за пределы..
Да и квартус не даст выделить больше чем есть - напишет что нету и вывалится по ошибке..
На счёт
Цитата
обработчика исключения

Идея кстати хорошая, вот только я не нашёл в n2sw_nii52006.pdf описания как это сделать.
Так подозреваю что это типа интерупта что-то, вот только как именно ?
Может примеры есть у кого?
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Sep 17 2008, 10:53
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Цитата(Kuzmi4 @ Sep 17 2008, 11:40) *
Есчё галочки на Reduce device drivers и Small C Library - может лучше попробовать без них со стандартными настройками ?
Kuzmi4, спасибо!
Похоже, что причина в этом, уже легче... smile.gif
Я снял галочку с 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.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 17 2008, 11:50
Сообщение #13


Гуру
******

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



2 Волощенко - пожалуста wink.gif
Как обычно дебри компилятора не довели до добра.. smile.gif
На счёт Small C Library - я с самого начала как про неё прочитал в доках, шняга эта мне не понтравилась - ахтунгов много было по тексту..
Может в принципе и полезно, но сам с тех пор стараюсь не юзать.



А вообсче на счёт обработчика исключений есть у кого какие идеи - как его наваять?
В принципе ведь нужная и полезная штука smile.gif
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Sep 19 2008, 05:25
Сообщение #14


Знающий
****

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



Цитата
Как ни странно, но если прогмем, датамем, хеап и стек сунуть в ext_ram, все работает в 2 раза быстрее, чем если все упихать в ончип

Хммм... Интересно, а если он-чип прицепить неявно, а симмитировать ею ext_ram? :-)


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 09:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016