tttt 0 15 ноября, 2013 Опубликовано 15 ноября, 2013 · Жалоба Добрый день! Расскажите, пожалуйста, как реализуют на ПЛИС большие проекты? Есть проект, в котором будет использоваться 80% пользовательских пинов, пины уже назначил. В этом проекте пишу 2 своих несложных модуля - передающий, и принимающий, которые по отдельности отлажены и работают нормально, но при сборке их в один модуль они начинают работать некорректно, причем их работа меняется буквально от всего - изменяю что-то в принимающем и уже неправильно работает передающий, либо убираю вообще приемный модуль из проекта и передающая часть всё-равно работает некорректно, но результат симуляции другой, очищаю список назначенных пинов - результат симуляции так же меняется. Это при том, что проект занимает 1-2% логических элементов. Как избавиться от этой нестабильности? Можно как-то зафиксировать разводку модуля? ПЛИС - FLEX9K. Буду благодарен любой информации на эту тему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 15 ноября, 2013 Опубликовано 15 ноября, 2013 · Жалоба Добрый день. Вам стоило бы подробнее развернуть суть проблемы. Какая тактовая частота? Как ваши модули работают? Как вы их описали? Проверяете ли вы временные ограничения? FLEX конечно ужасная вещь, но у меня в 5ти тысячном сделан квадратурный приемник, с тактовой частотой 25 МГц, объемом в 95% ПЛИС и 70% пинов и все работало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 ноября, 2013 Опубликовано 15 ноября, 2013 · Жалоба Как избавиться от этой нестабильности? Можно как-то зафиксировать разводку модуля? ПЛИС - FLEX9K. Буду благодарен любой информации на эту тему. Судя по "Flex", ТС - это студент... А тогда сам проект - асинхронный, и потому в нем что-то перекашивает... Ну и в добавок CDC не сделан как надо... А в остальном, все хорошо и "пины назначены"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tttt 0 15 ноября, 2013 Опубликовано 15 ноября, 2013 (изменено) · Жалоба iosifk, давай по делу, пожалуйста, Шерлок. Swup, спасибо, тактовая частота 50Мгц. Передающая часть принимает извне 32битные слова, сохраняет их в асинхронную RAM, затем как только накопится какое-то количество слов, считывает их из памяти и передает на максимальной скорости в другой модуль - приемный. В приемном модуле принятые данные так же сохраняются в RAM, затем по внешнему сигналу чтения данные из памяти выставляются на выход. Изменено 15 ноября, 2013 пользователем tttt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 15 ноября, 2013 Опубликовано 15 ноября, 2013 · Жалоба Ну это только два вопроса. TimeQuest вроде не поддерживает Flex`ы, так что посмотрите хотя бы к простом анализаторе. Опять же, как это описано? Посмотрите результаты синтеза в RTL и убедитесь, что вы именно это имели ввиду. Тут конечно разговор отвлеченный, никто этого не проверит и не скажет наверняка. Ни у кого нету такого кристалла, новый софт его даже и не поддерживает уже. Максимум вы услышите советы насчет кода. ЗЫ грубить - не красиво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 ноября, 2013 Опубликовано 15 ноября, 2013 · Жалоба iosifk, давай по делу, пожалуйста, Шерлок. У нас тут принято общаться на "Вы"... Да и нехорошо так к старшим... А по делу я же все написал - "Краткий Курс", у меня на сайте... И без кода сказать нечего... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kuchynski 0 15 ноября, 2013 Опубликовано 15 ноября, 2013 · Жалоба Вопрос понятен, и до боли знаком :crying: Фиксировать разводку - неправильное решение. Если кратко изложить ответ, то: сам проект - асинхронный, и потому в нем что-то перекашивает... Уберите ассинзронные сбросы и установки. Видел прокты у которых определённое состояние шины через элемент И заводилось на тактовый вход. И проект работал! и люди ничего не хотели менять. Но скорее всего, как и у вас до поры, до времени. Так что никакого искуственного принуждения схемы к работе, холько синхронизация всего и вся. Можно конечно и отойти от правил, но чётко представляя себе где именно, зачем это надо, и почему это будет работать вечно. А что студент, так то хорошо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
o_khavin 0 15 ноября, 2013 Опубликовано 15 ноября, 2013 · Жалоба давай по делу, пожалуйста, Шерлок. Давай тоже по делу, студент. B) Два ключевых вопроса: 1) констрейнты на тайминг назначены? 2) констрейнты на тайминг сходится? Если ответ на вопросы типа "э... а что это такое?" - то RTFM, RTFM и ещё раз RTFM, как завещал Ильич или чуть больше вежливости и , возможно, местные помогут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosu-art 0 15 ноября, 2013 Опубликовано 15 ноября, 2013 · Жалоба TimeQuest вроде не поддерживает Flex`ы, ACEX и FLEX закончились на Q9.0sp2. хоть TQ в последнем есть, но именно для этих семейств поддержки нет. И нужно избавляться от варнинга clock skew larger than data delay Он часто вылазит когда проект большой. обычно помогает сменой фронта с положительного на отрицательный в некоторых участках кода Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corner 0 18 ноября, 2013 Опубликовано 18 ноября, 2013 · Жалоба iosifk, давай по делу, пожалуйста, Шерлок. Swup, спасибо, тактовая частота 50Мгц. Передающая часть принимает извне 32битные слова, сохраняет их в асинхронную RAM, затем как только накопится какое-то количество слов, считывает их из памяти и передает на максимальной скорости в другой модуль - приемный. В приемном модуле принятые данные так же сохраняются в RAM, затем по внешнему сигналу чтения данные из памяти выставляются на выход. ФЛЕКС на 24 МГц работает с трудом. Греется и ходит под себя. Теоретические 125 МГц в живую не попадалось... ACEX и FLEX закончились на Q9.0sp2. хоть TQ в последнем есть, но именно для этих семейств поддержки нет. И нужно избавляться от варнинга Он часто вылазит когда проект большой. обычно помогает сменой фронта с положительного на отрицательный в некоторых участках кода НИКОГДА не используйте негедж в ПЛИС, где его нет аппаратно. Глюки обеспечены. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 69 19 ноября, 2013 Опубликовано 19 ноября, 2013 · Жалоба ФЛЕКС на 24 МГц работает с трудом. Греется и ходит под себя. Теоретические 125 МГц в живую не попадалось... Древний FLEX8000 вполне успешно работал на 40 МГц (лазерный дальномер). От проекта зависит. 40 МГц были не пределом для него. НИКОГДА не используйте негедж в ПЛИС, где его нет аппаратно. Глюки обеспечены. Категоричное утверждение. И неверное. Всё прекрасно работает. В современных FPGA без проблем вставляется инверсия перед подачей клока на триггер. Другое дело, когда хотят что-то вроде always_ff @(posedge clk, negedge clk), а аппаратура этого не умеет. Но в этом случае, как правило, синтезатор выдаёт ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 19 ноября, 2013 Опубликовано 19 ноября, 2013 · Жалоба Как избавиться от этой нестабильности? Можно как-то зафиксировать разводку модуля? ПЛИС - FLEX9K. Буду благодарен любой информации на эту тему. 1) Я так понимаю у Вас симуляция с реальными задержками неправильно работает или это сам RTL не работает? 2) А тайминг констрейны у вас как описаны? Напр в SDC формате они есть? 3) А дизайн у Вас 100% синхронный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
o_khavin 0 19 ноября, 2013 Опубликовано 19 ноября, 2013 · Жалоба Категоричное утверждение. И неверное. Всё прекрасно работает. В современных FPGA без проблем вставляется инверсия перед подачей клока на триггер. Другое дело, когда хотят что-то вроде always_ff @(posedge clk, negedge clk), а аппаратура этого не умеет. Но в этом случае, как правило, синтезатор выдаёт ошибку. Проблема в том, что для старых FPGA может некорректно считаться тайминг на отрицательные фронты клока. В современных FPGA и софте действительно всё в порядке. А тайминг констрейны у вас как описаны? Напр в SDC формате они есть? Этот вопрос ТС-у уже несколько раз задавали. Судя по полному отсутствию ответов, он просто не знает, что это такое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corner 0 19 ноября, 2013 Опубликовано 19 ноября, 2013 · Жалоба Древний FLEX8000 вполне успешно работал на 40 МГц (лазерный дальномер). От проекта зависит. 40 МГц были не пределом для него. Категоричное утверждение. И неверное. Всё прекрасно работает. В современных FPGA без проблем вставляется инверсия перед подачей клока на триггер. Другое дело, когда хотят что-то вроде always_ff @(posedge clk, negedge clk), а аппаратура этого не умеет. Но в этом случае, как правило, синтезатор выдаёт ошибку. 1. У меня даже на 80 работал, но код вылизывался 1,5 года. 2. В современных ПЛИС. Флекс лучше так не использовать - инверсия клока это 3 ячейки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться