Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нестабильно работает проект
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
tttt
Добрый день!

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

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

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

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

FLEX конечно ужасная вещь, но у меня в 5ти тысячном сделан квадратурный приемник, с тактовой частотой 25 МГц, объемом в 95% ПЛИС и 70% пинов и все работало.
iosifk
Цитата(tttt @ Nov 15 2013, 16:20) *
Как избавиться от этой нестабильности? Можно как-то зафиксировать разводку модуля? ПЛИС - FLEX9K. Буду благодарен любой информации на эту тему.

Судя по "Flex", ТС - это студент...
А тогда сам проект - асинхронный, и потому в нем что-то перекашивает...
Ну и в добавок CDC не сделан как надо...

А в остальном, все хорошо и "пины назначены"...
tttt
iosifk, давай по делу, пожалуйста, Шерлок.

Swup, спасибо, тактовая частота 50Мгц. Передающая часть принимает извне 32битные слова, сохраняет их в асинхронную RAM, затем как только накопится какое-то количество слов, считывает их из памяти и передает на максимальной скорости в другой модуль - приемный. В приемном модуле принятые данные так же сохраняются в RAM, затем по внешнему сигналу чтения данные из памяти выставляются на выход.
Swup
Цитата(tttt @ Nov 15 2013, 16:44) *


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

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

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

ЗЫ грубить - не красиво.
iosifk
Цитата(tttt @ Nov 15 2013, 16:44) *
iosifk, давай по делу, пожалуйста, Шерлок.

У нас тут принято общаться на "Вы"... Да и нехорошо так к старшим...
А по делу я же все написал - "Краткий Курс", у меня на сайте...
И без кода сказать нечего...
kuchynski
Вопрос понятен, и до боли знаком crying.gif
Фиксировать разводку - неправильное решение.
Если кратко изложить ответ, то:
Цитата(iosifk @ Nov 15 2013, 14:37) *
сам проект - асинхронный, и потому в нем что-то перекашивает...

Уберите ассинзронные сбросы и установки. Видел прокты у которых определённое состояние шины через элемент И заводилось на тактовый вход. И проект работал! и люди ничего не хотели менять. Но скорее всего, как и у вас до поры, до времени.
Так что никакого искуственного принуждения схемы к работе, холько синхронизация всего и вся. Можно конечно и отойти от правил, но чётко представляя себе где именно, зачем это надо, и почему это будет работать вечно.
А что студент, так то хорошо.
o_khavin
Цитата(tttt @ Nov 15 2013, 16:44) *
давай по делу, пожалуйста, Шерлок.

Давай тоже по делу, студент. cool.gif
Два ключевых вопроса:
1) констрейнты на тайминг назначены?
2) констрейнты на тайминг сходится?
Если ответ на вопросы типа "э... а что это такое?" - то RTFM, RTFM и ещё раз RTFM, как завещал Ильич или чуть больше вежливости и , возможно, местные помогут.
gosu-art
Цитата(Swup @ Nov 15 2013, 16:54) *
TimeQuest вроде не поддерживает Flex`ы,

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

Он часто вылазит когда проект большой. обычно помогает сменой фронта с положительного на отрицательный в некоторых участках кода
Corner
Цитата(tttt @ Nov 15 2013, 16:44) *
iosifk, давай по делу, пожалуйста, Шерлок.

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


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

Цитата(gosu-art @ Nov 15 2013, 21:08) *
ACEX и FLEX закончились на Q9.0sp2. хоть TQ в последнем есть, но именно для этих семейств поддержки нет. И нужно избавляться от варнинга

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


НИКОГДА не используйте негедж в ПЛИС, где его нет аппаратно. Глюки обеспечены.
dxp
QUOTE (Corner @ Nov 18 2013, 22:38) *
ФЛЕКС на 24 МГц работает с трудом. Греется и ходит под себя. Теоретические 125 МГц в живую не попадалось...

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

QUOTE (Corner @ Nov 18 2013, 22:38) *
НИКОГДА не используйте негедж в ПЛИС, где его нет аппаратно. Глюки обеспечены.

Категоричное утверждение. И неверное. Всё прекрасно работает. В современных FPGA без проблем вставляется инверсия перед подачей клока на триггер. Другое дело, когда хотят что-то вроде always_ff @(posedge clk, negedge clk), а аппаратура этого не умеет. Но в этом случае, как правило, синтезатор выдаёт ошибку.
Torpeda
Цитата(tttt @ Nov 15 2013, 15:20) *
Как избавиться от этой нестабильности? Можно как-то зафиксировать разводку модуля? ПЛИС - FLEX9K. Буду благодарен любой информации на эту тему.

1) Я так понимаю у Вас симуляция с реальными задержками неправильно работает или это сам RTL не работает?
2) А тайминг констрейны у вас как описаны? Напр в SDC формате они есть?
3) А дизайн у Вас 100% синхронный?
o_khavin
Цитата(dxp @ Nov 19 2013, 09:33) *
Категоричное утверждение. И неверное. Всё прекрасно работает. В современных FPGA без проблем вставляется инверсия перед подачей клока на триггер. Другое дело, когда хотят что-то вроде always_ff @(posedge clk, negedge clk), а аппаратура этого не умеет. Но в этом случае, как правило, синтезатор выдаёт ошибку.

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

Цитата(Torpeda @ Nov 19 2013, 13:37) *
А тайминг констрейны у вас как описаны? Напр в SDC формате они есть?

Этот вопрос ТС-у уже несколько раз задавали. Судя по полному отсутствию ответов, он просто не знает, что это такое. biggrin.gif
Corner
Цитата(dxp @ Nov 19 2013, 09:33) *
Древний FLEX8000 вполне успешно работал на 40 МГц (лазерный дальномер). От проекта зависит. 40 МГц были не пределом для него.

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


1. У меня даже на 80 работал, но код вылизывался 1,5 года.
2. В современных ПЛИС. Флекс лучше так не использовать - инверсия клока это 3 ячейки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.