|
Некорректное симулирование Nios II системы на Cyclone III. Нужна момощь |
|
|
|
Apr 8 2010, 08:48
|

Частый гость
 
Группа: Участник
Сообщений: 85
Регистрация: 8-04-10
Из: Нижний Новгород
Пользователь №: 56 498

|
Необходимо просимулировать Sopc систему в ModelSim. Документацию по этому на сайте Альтеры прочитал, AN351 выполнил - всё вроде хорошо было. Сейчас надо необходимо сделать тоже самое на cycloneIII embedded evaluation kit, который шел вместе с с платой. НА основе sopcinfo файла создаю BSP библиотеку (с пометкой "только дял симуляции", stdin stdout - через jtag_uart) и стандартое hello world приложение. ЗАпускаю проект на"ios II Modelsim", открывается окно - стандартно компилируется дизайн, запускаю. Процессор, память симмулируются, другие модули вроде тоже. ТОлько jtag_uart модуль БЕЗДЕЙСТВУЕТ, хотя должен по идеи выводить "Hello world". Использую в работе Quartus 9.1 и Nios II SBT, ModelSim 6.5b. Такое проведение связки printf и jtag_uart замечено только на kit'овой библиотеке от платы CycloneIII. Тоже самое делал на стандартнйо kit'овой библиотеке niosII_cycloneII_2c35, которую можно найти в папке nios2eds\examples - проблем никаких не наблюдал. jtag_uart выводил информацию
|
|
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 23)
|
Nov 23 2010, 12:07
|

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

|
Еще раз проверил, уже с DDR-контроллером. Все работает (см. аттач)! Скорее всего, Вы просто не дожидаетесь начала вывода в JTAG UART. Цитата(Shevnnov @ Nov 22 2010, 20:42)  Какие настройки нужно проверить? В BSP ставлю галку ... Вопрос - какой размер кода у вас получается? Попробуйте его сократить до минимума. Вы какую версию драйверов используете - полную или сокращенную? Использование сокращенной версии позволяет сжать код раз в несколько. Если Вы используете полную версию драйверов, то для себя еще раз попробуйте оценить, сколько времени будет выполняться startup-код - у Вас весьма изрядный объем памяти, в ней есть сегмент BSS, в стартапе он заполняется нулями - сколько это потребует времени??) Также проверьте "железную" сторону : - какая опция симуляции установлена для JTAG_UART? - у меня выдача ASCII - какая опция калибровки для режима симуляции установлена для контроллера DDR? - у меня Skip Calibration - на какой тактовой частоте работает ниос? - у меня 100 МГц, ядро Standard. В моем примере выдача в JTAG_UART начинается примерно на сорок шестой микросекунде от начала моделирования. Цитата(Shevnnov @ Nov 22 2010, 20:42)  С компонентом и архитектуры перефирийного устройства косяков не должно бы быть, так как работая в аналогичной системе, но без использвоания Clock-Crossing Bridge ... ModelSim никакой отсебятины в проект не вносит - что Вы ему подсовываете, то он и показывает. Так что косяк я бы искал или в Вашем аппаратном проекте, или в Вашем ниосовском коде.
Эскизы прикрепленных изображений
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Nov 23 2010, 13:37
|

Частый гость
 
Группа: Участник
Сообщений: 85
Регистрация: 8-04-10
Из: Нижний Новгород
Пользователь №: 56 498

|
Цитата(Stewart Little @ Nov 23 2010, 15:07)  Вопрос - какой размер кода у вас получается? Попробуйте его сократить до минимума. Вы какую версию драйверов используете - полную или сокращенную? Использование сокращенной версии позволяет сжать код раз в несколько. Если Вы используете полную версию драйверов, то для себя еще раз попробуйте оценить, сколько времени будет выполняться startup-код - у Вас весьма изрядный объем памяти, в ней есть сегмент BSS, в стартапе он заполняется нулями - сколько это потребует времени??) Размер кода, если оценивать по размеру файла памяти - 234 Kбайта (это е код hello_world, а тестовая программа для перефирийного компонента). Версия драйверов - полная. Поддержка C++ отключена. По поводу аремени оценки - не знаю как оценить, был бы признателен на ссылку на соответствующую литературу. Цитата Также проверьте "железную" сторону : - какая опция симуляции установлена для JTAG_UART? - у меня выдача ASCII - какая опция калибровки для режима симуляции установлена для контроллера DDR? - у меня Skip Calibration - на какой тактовой частоте работает ниос? - у меня 100 МГц, ядро Standard. В моем примере выдача в JTAG_UART начинается примерно на сорок шестой микросекунде от начала моделирования. JTAG_UARY - так же выдача в ASCII. Частота процессора - 100Мгц. У DDR стояла калиброка - Quick Calibration. По поводу времени выдачи - вечра ставил сумуляцию на 30 милесекунд - вывода через jtag не было. Сейчас
|
|
|
|
|
Nov 23 2010, 13:48
|

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

|
Цитата(Shevnnov @ Nov 23 2010, 16:37)  Размер кода, если оценивать по размеру файла памяти - 234 Kбайта Это же можно опупеть от ожидания, пока 234 килобайта кода отсимулируются! Причем львиная доля этого кода, я подозреваю, это стартап. Цитата(Shevnnov @ Nov 23 2010, 16:37)  По поводу аремени оценки - не знаю как оценить, был бы признателен на ссылку на соответствующую литературу. Какую, нахрен, литературу! Смотрите размер области BSS, смотрите, сколько времени нужно за запись одного слова в DDR SDRAM, умножайте первое на второе, и получите время заливки BSS нулями. Цитата(Shevnnov @ Nov 23 2010, 16:37)  DDR стояла калиброка - Quick Calibration. Это еще плюс десяток миллисекунд.
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Nov 24 2010, 11:58
|

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

|
Цитата(Shevnnov @ Nov 24 2010, 13:23)  Урезал код путем использования укророченной версии драйверов, newC lib, отключение C++ до 54Кб. Так же отключил калибровку DDR. Но всё равно через 55ms ответа от jtag_uart не последовало (часов 10 продолжалась симуляция). Ответ на 45us мне кажется чем-то нереальным. 54 кб - это тоже не мало. У меня объем кода 528 байт. А весь код состоит из Код #include "sys/alt_stdio.h"
int main() { alt_putstr("Hello from Nios II!\n"); while (1);
return 0; } Цитата(Shevnnov @ Nov 24 2010, 13:23)  Еще вопрос - посмотрел дизайн на Cyclone II на котором симулировалось всё. Там размер файла ddr.dat - 257Кб. Но выполнение тестовой программы начиналось на 410us. Так весь вопрос в том и есть, а что эта программа делает??? Цитата(vadimuzzz @ Nov 24 2010, 13:33)  а в чем выигрыш от такой симуляции? а многочасовая симуляция нетлиста, да еще от стороннего производителя? не понимаю, зачем это. +100 !!!
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Nov 29 2010, 11:10
|

Частый гость
 
Группа: Участник
Сообщений: 85
Регистрация: 8-04-10
Из: Нижний Новгород
Пользователь №: 56 498

|
Переместив в Linker'е код программы в onchip memory и используя скоращенные версии библиотек и драйверов удалось добиться начала работы тестовой программы на 49us. Но если в Linker'е указать всё класть в память ddr (в предыдущем случае в ddr лежал только heap - в драйвере периферийного устройства используется динамическое выделение памяти), то время реакции много увеличивается, и повторяется пролема обсуждаемая выше. Это вероятно связано с большим временем доступа к ddr контроллеру в режиме симуляции. По поводу выигрыга от такой симуляции - посмотреть как ведет себя компонент во взаимодействии со всей системой, потому что когда я пытаюсь запустить на тестовой плате, на часть тестов я получаю муру, а не результаты. Цитата Так весь вопрос в том и есть, а что эта программа делает??? Абсолютно то же самое, что и тестовая программа, которую я запускаю на Cyclone III дизайне
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|