Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Переполнение кристала или неверная компановка проекта?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Кирилл Лубнин
Добрый день, Уважаемые Коллеги!
Столкнулся я с такой бедой. Был проект на ПЛИС EPF10K20RI208-4. Жил он и развивался, пока не подошел к своему логическому завершению, а именно реализации на БМК. Проект не то чтобы сложный, но всеже. По сути набор автоматов обработки входных данных, контроллер Манчестер (сильно урезанный под протокол) и интерфейс обмена с процессором. В проекте 3 домена частот 40, 37,5 и 12МГц. 40 и 37,5 связанные частоты (37,5 производится из 40 внешним ФАПЧ), 12 - асинхронная (не привязана к другим). Из констрейнов заданы были только эти частоты и расчет временЫх параметров производился Quartus'ом без анализа переходов между доменами. Сейчас проект занимает 91% логической емкости кристала и 68% пинов. И все было хорошо: проект компилился, разводился, работал адекватно и предсказуемо реагировал на изменения в логике и пинах. Но, как всегда это бывает, в последний момент появилась необходимость доработки проекта, в связи с аппаратными доработками. И тут НАЧАЛОСЬ!!! После реализации половины доработок проект начал работать, что называется "как есть". Шаг в право, шаг в лево - расстрел, т.е. любые попытки изменения приводят к тому, что проект перестает работать (на железе), причем перестает довольно хитро и не понятно. Например есть у меня несколько выходных пинов в проекте (тестовых), которые жестко не привязаны в пин-планере (отдано на откуп компилятору). Я смотрю в репорте к какому внешнему пину компилятор привязал мой тестовый, в пинпланенре повторяю эту привязку (тоесть "оффициально" прошу Quartus вывести мне этот сигнал на этот пин) и после компиляции проект на железе не работает (нет всязи с процессором, либо автоматы отработывают один раз и затыкаются и т.д. и т.п.) Причем на симмуляции - все работает все тесты проходят. Тоже самое происходит при попытке добавления пинов, при попытке изменения логики (например вместо данных с процессора я выставляю константу). Что теперь делать - ума не приложу. Есть ли у кого-нибудь мысли по этому поводу? Нужно именно доводить текущий проект, т.к. сроки поджимают.
litv
а временные констрэйны как ?
Кирилл Лубнин
запас по частота, по оценкам Quartus'а, порядка 1,5 - 2 раза.
litv
Ну вывести на внешние ножки парочку внутренних контрольных сигналов и смотреть.

Значит блоки есть асинхронные..........
Каким нибудь быстрым клоком их ....
sazh
Цитата(Кирилл Лубнин @ Sep 7 2012, 10:07) *
проект на ПЛИС EPF10K20RI208-4. В проекте 3 домена частот 40, 37,5 и 12МГц. 40 и 37,5 связанные частоты (37,5 производится из 40 внешним ФАПЧ), 12 - асинхронная (не привязана к другим).


В этом кристалле ничего нет. Ни pll, ни двухпортовой памяти.
Переходите на одноклоковую синхронизацию.
(Посмотрите fitter- resource section- global&other fast signal, имеют ли все ваши клоки атрибут global)
Кирилл Лубнин
Цитата(litv @ Sep 7 2012, 15:21) *
Ну вывести на внешние ножки парочку внутренних контрольных сигналов и смотреть.

Значит блоки есть асинхронные..........
Каким нибудь быстрым клоком их ....


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

Цитата(sazh @ Sep 7 2012, 15:33) *
В этом кристалле ничего нет. Ни pll, ни двухпортовой памяти.
Переходите на одноклоковую синхронизацию.
(Посмотрите fitter- resource section- global&other fast signal, имеют ли все ваши клоки атрибут global)


Да этот кристал пуст - только логика. (Двухпортовая память в другом проекте, мне приходится до 4-х проектов вести одновременно wacko.gif ). Перейти на дноклоковою снхронизацию неполучится вся суть проекта в работе с двумя частотами 37,5 и 40. Максимум что можно - это выкинуть 12. Но пока смысла не вижу, от нее только Манчестер работает, на основные автоматы она не завязана. Все клоки глобальные. 37,5 и 40 заведены на входы частоты, 12 - на "быстрый вход".
bogaev_roman
Цитата(Кирилл Лубнин @ Sep 7 2012, 11:07) *
Из констрейнов заданы были только эти частоты и расчет временЫх параметров производился Quartus'ом без анализа переходов между доменами.

Ключевое место, мне кажется здесь. Каким образом пересинхронизация у Вас идет?
Если эти три куска относительно независимы, то можно попробовать развести их отдельно и встаить в топовый проект, как разведенный нетлист, если это возможно (не работал с EPF10K20RI208-4). При этом в каждом куске можно делать упор на слабое место, если проблем с частотой нет - упор на оптимизацию по площади.
Кирилл Лубнин
Да, куски можно считать независимыми. Переход с частоты на частоту происходит через двойную буферизацию (два последовательных триггера с новой частотой). Вроде бы переходов не очень много и не в критичных местах, тоесть не должно быть пропусков и затыков автомата. на Моделировании без анализа метосостояния (а по другому и не получится) все работает. Переходы идут широкими синалами, т.е никаких выбрасов быть не должно. Если не поподет на первом такте - не страшно. Логик-лок регионов в данной ПЛИС нет, если вы их имели ввиду. Поэтому реализовывать в виде отдельных разведенных нетлистов не получится. Теоретически есть возможность фиксировать расположение логических ячеек, но я с такими вещами не работал, и не думаю, что у меня получится лучше чем у фитера.
bogaev_roman
Цитата(Кирилл Лубнин @ Sep 7 2012, 16:15) *
Да, куски можно считать независимыми. Переход с частоты на частоту происходит через двойную буферизацию (два последовательных триггера с новой частотой).

То есть данные получаем в регистре на одной частоте, а записываем в регистр на другой без доплогики? Но если частота передатчика больше, то приемник не всегда будет хватать данные, а если наоборот, то данные могут захватываться приемником в некоторых случаях два раза. Наиболее интересная ситуация, когда частота записи и считывания примерно совпадут по времянке и запишется в регистр только часть данных (если это не однорзрядный сигнал), в этом случае сигнал на выход пойдет неправильным. Может Вы все таки используете что-то подобное fifo с записью на одной частоте, а считыванием на другой с использованием кода Грея?
Кирилл Лубнин
Вот тут крепко подумать надо. Вроде бы ничего такого нет все шины данных переходят вместе с сигналами записи, и при этом данные появляются на несколько тактов раньше записи т.е таких ситуаций с неполным защелгиванием быть не должно. Но на всякий случай еще раз проверю в понедельник. Да и при такой ситуации он бы вылетал постоянно, а не только после компиляции с изменениями. Там частоты близкие 40 и 37,5 они за 15/16 тактов полностью сходятся и расходятся.
bogaev_roman
Цитата(Кирилл Лубнин @ Sep 7 2012, 22:46) *
Вот тут крепко подумать надо. Вроде бы ничего такого нет все шины данных переходят вместе с сигналами записи, и при этом данные появляются на несколько тактов раньше записи т.е таких ситуаций с неполным защелгиванием быть не должно. Но на всякий случай еще раз проверю в понедельник. Да и при такой ситуации он бы вылетал постоянно, а не только после компиляции с изменениями. Там частоты близкие 40 и 37,5 они за 15/16 тактов полностью сходятся и расходятся.

Я Вас сбивать не хочу, может я непрвильно что-то понял, условий очень мало - покажите схему или описание перехода.
iosifk
Цитата(Кирилл Лубнин @ Sep 7 2012, 22:46) *
Вот тут крепко подумать надо. Вроде бы ничего такого нет все шины данных переходят вместе с сигналами записи, и при этом данные появляются на несколько тактов раньше записи т.е таких ситуаций с неполным защелгиванием быть не должно.

У меня на сайте, в статьях - "Краткий Курс"... Там есть глава о CDC... Может быть и поможет...
Но я думаю, что дело в том, что исчерпаны ресурсы по интерконнектам. А Вы не рассматривали, чтобы сократить логику? Ну, возможно компилятор ставит дублирующие регистры? Или что-то в проекте можно сократить?
Кирилл Лубнин
Вроде разобрался. Оказалась банальная невнимательность. В процессе доработок каким-то образом покарежил цыфровую часть системы ФАПЧ, расположенную в ПЛИС (странно, вроде бы этот блок вообще не трогал). В итоге ФАПЧ вместо 37,5 генерил что придется. Сейчас все поправил - все работает. Всем спасибо за активное участие и полезные советы. a14.gif
sazh
Цитата(Кирилл Лубнин @ Sep 11 2012, 13:27) *
В итоге ФАПЧ вместо 37,5 генерил что придется.


Если не секрет, зачем 37.5
iosifk
Цитата(sazh @ Sep 11 2012, 15:12) *
Если не секрет, зачем 37.5

Это наверное температура... sm.gif
Кирилл Лубнин
на двух частотах 37,5 и 40 реализован нониусный метод измерения временнЫх задержек.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.