Oops 0 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба Здравствуйте. Помогите плиз. Есть выходящий из ПЛИС синхронизирующий clk_out 30 MHz, синхронно ему из ПЛИС выходят данные data_out, нужно чтобы данные устанавливались раньше активного уровня clk_out на 2 ns. В *.ucf файле прописал это так: ....................... Net clk_out LOC=W22 |IOSTANDARD = LVCMOS33; Net data_out LOC=W24 |IOSTANDARD = LVCMOS33; NET "data_out" OFFSET = IN 2 ns BEFORE "clk_out" rising; ....................... Синтезируется нормально, без ошибок. Посмотрите пожалуйста правильно я сделал, будет работать??? :wassat: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
disel 0 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба Оффсет ИН задает максимальный путь для входных данных. Оффсет ОУТ для выходных, но только относительно входного клока, а не выходного. Нужно просто МАХДЕЛЕЙ поставить. Про ОФФСЕТ хорошо написано в wp237. А что кстати во временном отчете про " NET "data_out" OFFSET = IN 2 ns BEFORE "clk_out" rising; " пишется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба К сожалению Maxdelay не поможет - он задает наибольшее допустимое время распространения сигнала, а не наименьшее. И offset out наверное тоже ничем не поможет. Если у Вами используемой ПЛИС (было бы хорошо указать что же Вы всё-таки используете, а то гадать что у Вас есть из ресурсов очень тяжело, и телепаты уже уехали в летний отпуск) есть возможность завести 2 ветки clock'ов сдвинутых на 2ns относительно друг друга (при помощи DCM естественно), то тогда работайте с этими 2 clock'ами и обязательно положите в оба IOB выходные триггеры. Да и условие задачи у Вас странно сформулировано, вот ровно на 2 ns - это технически не реализуемо, из-за технологических разбросов параметров ПЛИС и из-за ухода этих же параметров в зависимости от рабочей температуры... Что-то мне подсказывает, что у Вас задан диапазон, что данные должны появиться не менее чем за 2 нс до прихода активного фронта clock; тогда оцените с другой стороны: а не раньше чем за сколько могут появиться данных ? Если можно выставить данные на пол периода clock раньше активного фронта clock, то поставьте в IOB выходные триггеры и работайте по различным фронтам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
disel 0 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба Да, махделей не поможет, сгоряча ляпнул. Но две ветки клоков со сдвигом тоже не то: как обеспчить их требуемое временное соотношение на выходных падах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба как обеспечить их требуемое временное соотношение на выходных падах? Ну неужели до этого так сложно догадаться имея два внутренних clock с заданными временными соотношениями ? - да точно также, как и в любом синхронном проекте обеспечивается это самое "заданное" соотношение между выходами одного clock domain вне зависимости от расположения IOPAD'ов по всему кристаллу - надо использовать тактируемые элементы IOB. Для ряда ПЛИС (Virtex-4/5, Spartan3x) это делается легко и просто: 1. Надо иметь внутри кристалла 2 линии clock, имеющих между собой заданное смещение (в данном случае 2нс) - как это сделать - это отдельный вопрос, ответ на который базируется на особенностях имеющихся ПЛИС (о которой пока ни слово не сказано !). 2. Все выходные сигналы выводятся с обязательным (!) тактирование в выходных IOB. 3. Данные выдаются через OFF, тактируемый "опережающим" внутренним clock. 4. Выходной clock формируется: либо при помощи DDR OMUX (от "запаздывающего" внутреннего clock номинальной частоты), либо при помощи OFF (но в этом случае, тактируется удвоенным "запаздывающим" внутренним clock). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oops 0 16 июня, 2009 Опубликовано 16 июня, 2009 (изменено) · Жалоба Извините, дал маху в задании. Время предустановки данных data_out относительно активного уровня клока clk_out равно 10 ns +- 2 ns. Временная диограмма интерфейса должна выглядеть как на рисунке. Интерфейс представляет из себя чтото вроде SPI с одним слейвом, когдае есть clk_out приемник (слейв) синхронно clk_out считывает данные data_out, когда данные передавать не нужно то clk_out остается в положении низкого логического уровня. Все это реализовано на ПЛИС Virtex 4 FX 12. Изменено 16 июня, 2009 пользователем Oops Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
disel 0 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба Ну неужели до этого так сложно догадаться имея два внутренних clock с заданными временными соотношениями ? - да точно также, как и в любом синхронном проекте обеспечивается это самое "заданное" соотношение между выходами одного clock domain вне зависимости от расположения IOPAD'ов по всему кристаллу - надо использовать тактируемые элементы IOB. Для ряда ПЛИС (Virtex-4/5, Spartan3x) это делается легко и просто: 1. Надо иметь внутри кристалла 2 линии clock, имеющих между собой заданное смещение (в данном случае 2нс) - как это сделать - это отдельный вопрос, ответ на который базируется на особенностях имеющихся ПЛИС (о которой пока ни слово не сказано !). 2. Все выходные сигналы выводятся с обязательным (!) тактирование в выходных IOB. 3. Данные выдаются через OFF, тактируемый "опережающим" внутренним clock. 4. Выходной clock формируется: либо при помощи DDR OMUX (от "запаздывающего" внутреннего clock номинальной частоты), либо при помощи OFF (но в этом случае, тактируется удвоенным "запаздывающим" внутренним clock). Все это конечно красиво. На выходе DCM конечно все будет замечательно, но от выхода DCM до выходного пада клоковые линии будут разными, с разными задержками, которые будут зависеть от степени заполненности кристалла, нагрузки на тактовую сеть, температуры, питания и т.д. Конечно это подстраивается, но как сделать чтобы синтезатор ( и остальной софт) поддерживал это автоматически? При изменении нагрузки на тактовую сеть? И с какой точностью, вот в чем вопрос. А так согласен конечно, аналогичные решения в DDR применяются. Извините, дал маху в задании. Время предустановки данных data_out относительно активного уровня клока clk_out равно 10 ns +- 2 ns. Временная диограмма интерфейса должна выглядеть как на рисунке. Интерфейс представляет из себя чтото вроде SPI с одним слейвом, когдае есть clk_out приемник (слейв) синхронно clk_out считывает данные data_out, когда данные передавать не нужно то clk_out остается в положении низкого логического уровня. Все это реализовано на ПЛИС Virtex 4 FX 12. Формировать данные и клок триггерами, которые расположены в IOB. Тактировать их на удвоенной частоте ( если Tds и Tdh в рисунке равны) или двумя разными клоками с нужным фазовым соотношением, как выше Борис советовал. Разница от выходного триггера до пада, весьма стабильна и мала. С такими большими временами это не проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба Время предустановки данных data_out относительно активного уровня клока clk_out равно 10 ns +- 2 ns. Для меня как-то непривычно выглядит Tos = 10 ns +- 2 ns. Пока что я встречался только например с: Tos minimum = 8 ns. А вот ято Вы не указали, так это Toh, которое очень важно. При clk_out 30 MHz получает период около 66нс. Тогда если Toh minimum меньше чем 33нс (пол периода 30 MHz), то работайте на удвоенной внутренней частоте: состояние data_out меняйте во время отрицательного фронта clk_out - достаточно будет одного внутреннего clock. Если вдруг Toh minimum больше чем 33нс, то тогда я бы работал на учетверенной (от 30 MHz) частоте, и соответственно тогда бы выдавал данные data_out со сдигом на 1/4 периода относительно clk_out. Все это реализовано на ПЛИС Virtex 4 FX 12. С этим кристаллом проблем быть не должно. но от выхода DCM до выходного пада клоковые линии будут разными, с разными задержками, которые будут зависеть от степени заполненности кристалла, нагрузки на тактовую сеть, температуры, питания и т.д. Конечно это подстраивается, но как сделать чтобы синтезатор (и остальной софт) поддерживал это автоматически? При изменении нагрузки на тактовую сеть? И с какой точностью, вот в чем вопрос. От температуры и питания задержки должны уплывать для обоих clock на весьма близкое время (разница на уровне ps,.. а может и меньше), из-за заметной разницы fanout clock'и у Virtex-4 (по-моему) недолжны расходиться более чем на 1нс - что хорошо помещается в требуемые -+2нс, хотя лучше промоделировать. А ISE никак не сможет учесть разброс от fanout - т.к. тут больше зависимость от качества изготовления ПЛИС, на одной партии может быть очень малое время, на другой - очень большое... Soft это учесть не может, поэтому и нет constraint Mindelay - а его порой так нахватает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба Временная диограмма интерфейса должна выглядеть как на рисунке. клок при выдаче проинвертируйте и все. для ваших частот никаких проблем не будет, да и для более высоких тоже. ЗЫ. на вашей фпга клок кошерно выдавать через DDR выходной регистр, на нем же и про инвертируйте. то работайте на удвоенной внутренней частоте в данном конкретном случае, кроме гемороя это ничего не даст. PS. Только инвертируйте клок НЕ на PLL, а именно берете клок, которым тактируются регистры в IOB и его инвертируете и выводите наружу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oops 0 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба Всем спасибо за помощь. Мне понравился вариант des00 с инвертированием , попробую его. PS. Только инвертируйте клок НЕ на PLL, а именно берете клок, которым тактируются регистры в IOB и его инвертируете и выводите наружу Я понял :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться