Перейти к содержанию
    

Нестабильная зарузку NIOS из onchip mem при герерации тактовой на PLL на Cyclone III

Народ помогите плиз. Есть девайс. На нем- cyclone III и USB котроллер cy7c68013 (очень распрастраненный Cypress, может выдавать на Cyclone тактовую в 12, 24 или 48 мегагерц) На циклоне реализован NIOS, программа небольшая и я решил обойтись без бутлоалера - грузить всю прогу сразу в onchip mem. Все работало при заведении тактовой с USB, однако хотелось бы ее увеличить, тем более что тайминг аналайзер сказал что тактовая до 110 Мг подойдет. Как начал использовать PLL - начали появляться странности - нестабильная прогрузка NIOSa. То есть в 90% случаев он загружается нормально, а в остальных то ли виснет толи непойму что. Но явно не корректно заружается. Тактовую на PLL увеличиваю в два раза - получается 96 Мгц. Тайминг аналайзер не выдает ничего плохого -тактовая нормальная, задержек нигде нет. Если NIOS грузиться девайс может работать по несколько суток без единой ошибки - проверял. В чем может быть проблема с загрузкой? Ногу PLL "locked" анализирую - приостанавливаю подачу тактовой на NIOS (мегафукнция ALTCLKCTRL), Жду пока стабилизируется, потом снова подаю. Процессор при этом не ресетю, но пробовал и ресетить, не помогало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я с PLL делал так: ALTCLKCTRL не ставил, PLL "locked" заводил на reset процессора (полярность только правильную сделать). на 120МГц заводил, без сбоев.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я с PLL делал так: ALTCLKCTRL не ставил, PLL "locked" заводил на reset процессора (полярность только правильную сделать). на 120МГц заводил, без сбоев.

 

Сейчас попробуем, хотя я так тоже пробовал, не сразу я до ALTCLKCTRL дошел, но для чистоты эксперимента, еще разок.

 

Сейчас попробуем, хотя я так тоже пробовал, не сразу я до ALTCLKCTRL дошел, но для чистоты эксперимента, еще разок.

 

Неполучается. Не всегда проходит инициализация. А вы как PLL генерировали? у меня In normal mode, поставил флаг Self reset on lose lock.

Вообще я в первый раз pll использую. Может в этом дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неполучается. Не всегда проходит инициализация. А вы как PLL генерировали? у меня In normal mode, поставил флаг Self reset on lose lock.

Вообще я в первый раз pll использую. Может в этом дело?

Self reset я не ставил, у меня кварцевый опорник. а что значит - инициализация не проходит? если прога в on-chip слинкована и вектор сброса на on-chip нацелен, она вместе с sof загружается. вообще сильно на тайминги смахивает, точно все законстрейнили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Self reset я не ставил, у меня кварцевый опорник. а что значит - инициализация не проходит? если прога в on-chip слинкована и вектор сброса на on-chip нацелен, она вместе с sof загружается.

 

 

Все правильно, прога слинкована в onchip.я для проверки загрузки прилепил к процессору PIO на выход,первой командой в функции main стоит установление этого PIO в единицу (по умолчанию он в 0), так вот он не устанавливается, то есть на этапе загрузки что то по-видимому происходит с процессором, он не доходит до этого места. программа в Onchip слинкована правильно, поскольку он все-таки загружается правильно в большинстве случаев и норм работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тайминги, тайминги и еще раз тайминги.

 

Тайминг аналайзер не выдает ничего плохого -тактовая нормальная, задержек нигде нет.

Это еще не означает, что проект будет функционировать правильно. Зато это может означать, что у Вас не заданы необходимые констрейны.

Как в законах Мерфи - "Если Вам кажется, что Ваш проект работает - значит Вы чего-то не заметили" :)

 

Второе, на что нужно обратить внимание - используете ли Вы начальные состояния триггеров по умолчанию? При этом можно нарваться на неприятности, когда проект будет работать корректно сразу после загрузки ПЛИС, а вот после сброса ниоса вдруг поведет себя непредсказуемо.

Нужно все триггеры приводить в начальное состояние принудительно.

 

Еще вопрос как Вы используете PLL - как компонент в SOPC Builder'е или "снаружи" ниосовской системы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вообще сильно на тайминги смахивает, точно все законстрейнили

 

Тайминг аналайзер квартуса ни выдает ничего плохого. после PLL у меня тактовая получается 96, максимальная по тайминг аналайзеру - 108, в разделе multiconer timing alalyser summary все норм. Кроме того, если процессора все таки загрузиться, я его гонял больше суток по два раза - ни одной ошибки в рассчетах (там криптографию он считает, ошибки бы сразу вылезли если что)

 

но сама ПЛИС сконфигурилась? если flash-programmer`ом в ниос потыкать - проц ему виден?

Да. проц видет, system_id получает

 

Тайминги, тайминги и еще раз тайминги.

 

Это еще не означает, что проект будет функционировать правильно. Зато это может означать, что у Вас не заданы необходимые констрейны.

Как в законах Мерфи - "Если Вам кажется, что Ваш проект работает - значит Вы чего-то не заметили" :)

 

Мой файл SDC:

 

create_clock -name input_clk -period 15.151 [get_ports board_clk]
create_clock -name usb_clk -period 20833 [get_ports usb_clk]

create_generated_clock -source usb_clk \
-multiply_by 2 \
-divide_by 1 \
-name pll_clk  pll:GLOBAL_PLL|altpll:altpll_component|pll_altpll:auto_generated|wire_pll1_clk[0]

 

Еще вопрос как Вы используете PLL - как компонент в SOPC Builder'е или "снаружи" ниосовской системы?

"Снаружи" nios системы

 

я с PLL делал так: ALTCLKCTRL не ставил, PLL "locked" заводил на reset процессора (полярность только правильную сделать). на 120МГц заводил, без сбоев.

 

 

вопрос про полярность выходв PLL "locked" и NIOS_CPU "reset": для того чтобы ввести процессор в Reset : Reset <= '0'; чтобы вывести из ресета - Reset <= '1';

если PLL залочена то locked в '0' Если разлочена - то в '1'.

Соответствено чтобы ресетнуть процессор когда pll теряет lock надо: reset <= not lock. Все правильно?

Изменено пользователем Omen_13
Оформление кода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тайминг аналайзер квартуса ни выдает ничего плохого

warnings есть?

 

вопрос про полярность выходв PLL "locked" и NIOS_CPU "reset": для того чтобы ввести процессор в Reset : Reset <= '0'; чтобы вывести из ресета - Reset <= '1';

если PLL залочена то locked в '0' Если разлочена - то в '1'.

locked - active high (1 в захвате)

reset_n у проца - active low (нулем сбрасывается)

инвертор не нужен, напрямую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну, кроме таймингов на ум ничего не приходит. выкладывайте репорт. картинку в SOPC тоже давайте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

warnings есть?

 

Есть варнинги, щас отпишу, проект пересобиру

 

картика из SOPC:

 

ну, кроме таймингов на ум ничего не приходит. выкладывайте репорт. картинку в SOPC тоже давайте

 

 

отчет тайминг аналайзера:

 

 

 

Я не указывал раньше - тут два процессора. Оба инитсятся из Onchip mem. То что указывал раньше про один проц - справедливо для обоих процов. Бывает что оба не инитятся, бывает что только один. Еще раз повторюсь что в Onchip все правильно слинковано поскольку частенько при включении все нормально инитится и работает. В общем - нет стабильности

post-21655-1270027975_thumb.jpg

usb_nios_input_chip.sta.rar

Изменено пользователем Omen_13

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так, чтобы последние варнинги убрать добавьте derive_clock_uncertainty:

create_clock -name usb_clk -period 20833 [get_ports usb_clk]

create_generated_clock -source usb_clk \
-multiply_by 2 \
-divide_by 1 \
-name pll_clk pll:GLOBAL_PLL|altpll:altpll_component|pll_altpll:auto_generated|wire_pll1_clk[0
]
derive_clock_uncertainty

это даст более точную оценку Fmax.

про board_clk не понял, он имеет какое-то отношение к системе? да, еще он про jtag-овский клок ругается(altera_reserved_tck), у него наверное констрейн уже есть, посмотрите в папке проекта

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

про board_clk не понял, он имеет какое-то отношение к системе?

 

В данный момент не имеет, это у меня генератор на 66 МГц стоит на плате, его я пока не использую, раньше использовал, видимо упоминания остались

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в общем ситауция не поменялась, все так же то рузится то не грузится. С altera_reserved_tck не разобрался, перевернул все *.sdc в проекте, нигде не указывается, варнинг так и есть. Остальные варнинги пропали, Fmax для pll_clk - 108 Мгц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...