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

Нестабильные результаты altera EP3C55F

Коллеги, буду признателен, если подскажете как решить проблему:

 

получаю нестабильные результаты при имплементацмм дизайна в альтеровскую FPGA EP3C55F.

Т.е., например, имплементирую прошивку с подключенным сигналтапом, она работает отлично,

отключаю сигналтап, она перестает работать.

Или вношу изменения в обдин блок, а отрубается другой, не связанный с ним.

 

Работаю в 9м квартусе.

Дизайн написан на верилоге. Цепи сброса описаны как асинхронные (т.е. always @( posedge clk or posedge rst)

Максимальная частота - 125Мгц.

Имеются тактовые домены с более низкими частотами.

 

Возможно, кто-то из вас сталкивался с такой проблемой и знает, как это "лечится"?

 

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


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

Возможно, кто-то из вас сталкивался с такой проблемой и знает, как это "лечится"?

Лечится изгнанием асинхронщины из проекта и грамотным CDC.

Используйте TimeQuest, он покажет, где у Вас узкие места.

Также, перед добавлением SignalTap'а, включите полный режим инкрементальной компиляции.

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


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

Лечится изгнанием асинхронщины из проекта и грамотным CDC.

Используйте TimeQuest, он покажет, где у Вас узкие места.

Также, перед добавлением SignalTap'а, включите полный режим инкрементальной компиляции.

 

Спасибо.

 

Режим инкрементальной компиляции у меня включен всегда.

Таймквестом еще не пользовался, попробую...

А насчет асинхронности можно уточнить: вы об асинхронном сбросе или о чем-то еще?

Может быть мне лучше использовать синхронный сброс?

 

Кстати, когда подключаю signaltap, результаты почему-то получаются лучше, чем без него. Для меня это странно.

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

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


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

Режим инкрементальной компиляции у меня включен всегда.

Ох, терзают меня смутные сомнения, что Вы таки заблуждаетесь...

 

А насчет асинхронности можно уточнить: вы об асинхронном сбросе или о чем-то еще?

Может быть мне лучше использовать синхронный сброс?

Я и о том, и о другом. Как правило, асинхронный сброс используется только для организации глобального сброса всего проекта целиком. Использовать асинхронный сброс для формирования сигналов - моветон.

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

 

Кстати, когда подключаю signaltap, результаты почему-то получаются лучше, чем без него. Для меня это странно.

Вот это говорит о том, что инкрементальная компиляция у Вас не используется. Иначе бы результат был всегда плохой, не зависимо от подключения SignalTap'а :)

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


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

По поводу асинхронщины почитайте статью http://iosifk.narod.ru/hdl_coding/hdl_coding_12_kit_2_09.pdf, мне очень помогло, и вообще на сайте iosifk.narod.ru много чего интересного можно найти).

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


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

...мне очень помогло, и вообще на сайте iosifk.narod.ru много чего интересного можно найти).

Спасибо!

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


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

По поводу асинхронщины почитайте статью http://iosifk.narod.ru/hdl_coding/hdl_coding_12_kit_2_09.pdf, мне очень помогло, и вообще на сайте iosifk.narod.ru много чего интересного можно найти).

 

Спасибо.

Сайт уважаемого Иосифа Григорьевича мне известен. Данную статью я читал. Кроме того, у него есть чудесный рассказ "Записки инженера" о об испытаниях Бурана. Читал и одновременно смеялся и плакал.

 

Спасибо за разъяснения.

План дальнейших действий:

1. Переписать сорцы под синхронный сброс

2. Проверить, включена ли инкрементальная компиляция. Если нет - включить

3. Написать корректный sdc файл и подключить таймквест.

4. Используя таймквест Убрать узкие места.

 

Где-то месяца на 2 работы ...

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

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


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

1. Переписать сорцы под синхронный сброс

2. Проверить, включена ли инкрементальная компиляция. Если нет - включить

3. Написать корректный sdc файл и подключить таймквест.

4. Используя таймквест Убрать узкие места.

1. не начинайте холивар по поводу синхронного-асинхронного сброса, если это глобальный сброс - оставьте

2. перевод про инкрементальную компиляцию есть здесь - http://www.naliwator.narod.ru/

если коротко и быстро - использовать галку в incremental compilation -> rapid recompile -> on ну и другие настройки

3. как грамотно пользоваться таймквестом начало здесь http://embedders.org/content/timequest-dly...hast-1-vvedenie

Эти первые три пункта работы на несколько часов. С последним можете провозиться от нуля до бесконечности.

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


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

1. не начинайте холивар по поводу синхронного-асинхронного сброса, если это глобальный сброс - оставьте

Не до холивара, но часть модулей переписать придется, ибо у них сброс нелокальный.

 

2. перевод про инкрементальную компиляцию есть здесь - http://www.naliwator.narod.ru/

если коротко и быстро - использовать галку в incremental compilation -> rapid recompile -> on ну и другие настройки

В 9м квартусе я такой галки не увидел. Там только два кружочка: "off" и "full incremental compilation".

Имеет ли смысл перейти на более новый квартус?

 

 

3. как грамотно пользоваться таймквестом начало здесь http://embedders.org/content/timequest-dly...hast-1-vvedenie

Эти первые три пункта работы на несколько часов. С последним можете провозиться от нуля до бесконечности.

Спасибо, нашел сам, уже читаю ...

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


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

С альтерой не работал, но на Xilinx подобные ужасы нашего городка возникали, если:

- ошибочно заданы constraint-ы, например, занижена или не указана частота внешнего тактового сигнала;

- неверно сделаны переходы между тактовыми доменами;

- тактовый сигнал низкочастотного домена сделан на пользовательской логике (счетчик/делитель) в высокочастотном домене :)

- существуют локальные асинхронные сигналы сброса.

 

Как правило эти вызванные асинхронностью эффекты бывают весьма плавающими, т.к. реальная схема зависит от того, "как карта ляжет". И, нередко, подключаемый Chipscope (аналог SignalTap) вместо выявления успешно вылечивал проблему :)

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


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

С альтерой не работал, но на Xilinx подобные ужасы нашего городка возникали, если:

- ошибочно заданы constraint-ы, например, занижена или не указана частота внешнего тактового сигнала;

- неверно сделаны переходы между тактовыми доменами;

- тактовый сигнал низкочастотного домена сделан на пользовательской логике (счетчик/делитель) в высокочастотном домене :)

- существуют локальные асинхронные сигналы сброса.

 

Как правило эти вызванные асинхронностью эффекты бывают весьма плавающими, т.к. реальная схема зависит от того, "как карта ляжет". И, нередко, подключаемый Chipscope (аналог SignalTap) вместо выявления успешно вылечивал проблему :)

С альтерой тоже самое. К сожалению, дизайн достался мне в наследство, начал разбираться, нашел много некорректностей. Потихонечку убираю ...

Реально помогает TimeQuest. Спасибо всем откликнувшимся. Советы были полезными.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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