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

Нестабильно работает проект

Добрый день!

 

Расскажите, пожалуйста, как реализуют на ПЛИС большие проекты?

 

Есть проект, в котором будет использоваться 80% пользовательских пинов, пины уже назначил. В этом проекте пишу 2 своих несложных модуля - передающий, и принимающий, которые по отдельности отлажены и работают нормально, но при сборке их в один модуль они начинают работать некорректно, причем их работа меняется буквально от всего - изменяю что-то в принимающем и уже неправильно работает передающий, либо убираю вообще приемный модуль из проекта и передающая часть всё-равно работает некорректно, но результат симуляции другой, очищаю список назначенных пинов - результат симуляции так же меняется. Это при том, что проект занимает 1-2% логических элементов.

 

Как избавиться от этой нестабильности? Можно как-то зафиксировать разводку модуля? ПЛИС - FLEX9K. Буду благодарен любой информации на эту тему.

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


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

Добрый день.

 

Вам стоило бы подробнее развернуть суть проблемы.

Какая тактовая частота? Как ваши модули работают? Как вы их описали? Проверяете ли вы временные ограничения?

 

FLEX конечно ужасная вещь, но у меня в 5ти тысячном сделан квадратурный приемник, с тактовой частотой 25 МГц, объемом в 95% ПЛИС и 70% пинов и все работало.

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


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

Как избавиться от этой нестабильности? Можно как-то зафиксировать разводку модуля? ПЛИС - FLEX9K. Буду благодарен любой информации на эту тему.

Судя по "Flex", ТС - это студент...

А тогда сам проект - асинхронный, и потому в нем что-то перекашивает...

Ну и в добавок CDC не сделан как надо...

 

А в остальном, все хорошо и "пины назначены"...

 

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


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

iosifk, давай по делу, пожалуйста, Шерлок.

 

Swup, спасибо, тактовая частота 50Мгц. Передающая часть принимает извне 32битные слова, сохраняет их в асинхронную RAM, затем как только накопится какое-то количество слов, считывает их из памяти и передает на максимальной скорости в другой модуль - приемный. В приемном модуле принятые данные так же сохраняются в RAM, затем по внешнему сигналу чтения данные из памяти выставляются на выход.

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

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


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

 

Ну это только два вопроса.

 

TimeQuest вроде не поддерживает Flex`ы, так что посмотрите хотя бы к простом анализаторе.

Опять же, как это описано? Посмотрите результаты синтеза в RTL и убедитесь, что вы именно это имели ввиду.

 

Тут конечно разговор отвлеченный, никто этого не проверит и не скажет наверняка. Ни у кого нету такого кристалла, новый софт его даже и не поддерживает уже.

Максимум вы услышите советы насчет кода.

 

ЗЫ грубить - не красиво.

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


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

iosifk, давай по делу, пожалуйста, Шерлок.

У нас тут принято общаться на "Вы"... Да и нехорошо так к старшим...

А по делу я же все написал - "Краткий Курс", у меня на сайте...

И без кода сказать нечего...

 

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


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

Вопрос понятен, и до боли знаком :crying:

Фиксировать разводку - неправильное решение.

Если кратко изложить ответ, то:

сам проект - асинхронный, и потому в нем что-то перекашивает...

Уберите ассинзронные сбросы и установки. Видел прокты у которых определённое состояние шины через элемент И заводилось на тактовый вход. И проект работал! и люди ничего не хотели менять. Но скорее всего, как и у вас до поры, до времени.

Так что никакого искуственного принуждения схемы к работе, холько синхронизация всего и вся. Можно конечно и отойти от правил, но чётко представляя себе где именно, зачем это надо, и почему это будет работать вечно.

А что студент, так то хорошо.

 

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


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

давай по делу, пожалуйста, Шерлок.

Давай тоже по делу, студент. B)

Два ключевых вопроса:

1) констрейнты на тайминг назначены?

2) констрейнты на тайминг сходится?

Если ответ на вопросы типа "э... а что это такое?" - то RTFM, RTFM и ещё раз RTFM, как завещал Ильич или чуть больше вежливости и , возможно, местные помогут.

 

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


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

TimeQuest вроде не поддерживает Flex`ы,

ACEX и FLEX закончились на Q9.0sp2. хоть TQ в последнем есть, но именно для этих семейств поддержки нет. И нужно избавляться от варнинга

clock skew larger than data delay

Он часто вылазит когда проект большой. обычно помогает сменой фронта с положительного на отрицательный в некоторых участках кода

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


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

iosifk, давай по делу, пожалуйста, Шерлок.

 

Swup, спасибо, тактовая частота 50Мгц. Передающая часть принимает извне 32битные слова, сохраняет их в асинхронную RAM, затем как только накопится какое-то количество слов, считывает их из памяти и передает на максимальной скорости в другой модуль - приемный. В приемном модуле принятые данные так же сохраняются в RAM, затем по внешнему сигналу чтения данные из памяти выставляются на выход.

 

ФЛЕКС на 24 МГц работает с трудом. Греется и ходит под себя. Теоретические 125 МГц в живую не попадалось...

 

ACEX и FLEX закончились на Q9.0sp2. хоть TQ в последнем есть, но именно для этих семейств поддержки нет. И нужно избавляться от варнинга

 

Он часто вылазит когда проект большой. обычно помогает сменой фронта с положительного на отрицательный в некоторых участках кода

 

НИКОГДА не используйте негедж в ПЛИС, где его нет аппаратно. Глюки обеспечены.

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


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

ФЛЕКС на 24 МГц работает с трудом. Греется и ходит под себя. Теоретические 125 МГц в живую не попадалось...

Древний FLEX8000 вполне успешно работал на 40 МГц (лазерный дальномер). От проекта зависит. 40 МГц были не пределом для него.

 

НИКОГДА не используйте негедж в ПЛИС, где его нет аппаратно. Глюки обеспечены.

Категоричное утверждение. И неверное. Всё прекрасно работает. В современных FPGA без проблем вставляется инверсия перед подачей клока на триггер. Другое дело, когда хотят что-то вроде always_ff @(posedge clk, negedge clk), а аппаратура этого не умеет. Но в этом случае, как правило, синтезатор выдаёт ошибку.

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


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

Как избавиться от этой нестабильности? Можно как-то зафиксировать разводку модуля? ПЛИС - FLEX9K. Буду благодарен любой информации на эту тему.

1) Я так понимаю у Вас симуляция с реальными задержками неправильно работает или это сам RTL не работает?

2) А тайминг констрейны у вас как описаны? Напр в SDC формате они есть?

3) А дизайн у Вас 100% синхронный?

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


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

Категоричное утверждение. И неверное. Всё прекрасно работает. В современных FPGA без проблем вставляется инверсия перед подачей клока на триггер. Другое дело, когда хотят что-то вроде always_ff @(posedge clk, negedge clk), а аппаратура этого не умеет. Но в этом случае, как правило, синтезатор выдаёт ошибку.

Проблема в том, что для старых FPGA может некорректно считаться тайминг на отрицательные фронты клока. В современных FPGA и софте действительно всё в порядке.

 

А тайминг констрейны у вас как описаны? Напр в SDC формате они есть?

Этот вопрос ТС-у уже несколько раз задавали. Судя по полному отсутствию ответов, он просто не знает, что это такое. :biggrin:

 

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


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

Древний FLEX8000 вполне успешно работал на 40 МГц (лазерный дальномер). От проекта зависит. 40 МГц были не пределом для него.

 

Категоричное утверждение. И неверное. Всё прекрасно работает. В современных FPGA без проблем вставляется инверсия перед подачей клока на триггер. Другое дело, когда хотят что-то вроде always_ff @(posedge clk, negedge clk), а аппаратура этого не умеет. Но в этом случае, как правило, синтезатор выдаёт ошибку.

 

1. У меня даже на 80 работал, но код вылизывался 1,5 года.

2. В современных ПЛИС. Флекс лучше так не использовать - инверсия клока это 3 ячейки.

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


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

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

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

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

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

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

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

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

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

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