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

Как правильно устанавливать тайминги в Xilinx софтваре

Здравствуйте.

Помогите плиз.

 

Есть выходящий из ПЛИС синхронизирующий 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:

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


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

Оффсет ИН задает максимальный путь для входных данных. Оффсет ОУТ для выходных, но только относительно входного клока, а не выходного. Нужно просто МАХДЕЛЕЙ поставить. Про ОФФСЕТ хорошо написано в wp237.

 

А что кстати во временном отчете про " NET "data_out" OFFSET = IN 2 ns BEFORE "clk_out" rising; " пишется?

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


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

К сожалению Maxdelay не поможет - он задает наибольшее допустимое время распространения сигнала, а не наименьшее.

И offset out наверное тоже ничем не поможет.

 

Если у Вами используемой ПЛИС (было бы хорошо указать что же Вы всё-таки используете, а то гадать что у Вас есть из ресурсов очень тяжело, и телепаты уже уехали в летний отпуск) есть возможность завести 2 ветки clock'ов сдвинутых на 2ns относительно друг друга (при помощи DCM естественно), то тогда работайте с этими 2 clock'ами и обязательно положите в оба IOB выходные триггеры.

 

Да и условие задачи у Вас странно сформулировано, вот ровно на 2 ns - это технически не реализуемо, из-за технологических разбросов параметров ПЛИС и из-за ухода этих же параметров в зависимости от рабочей температуры... Что-то мне подсказывает, что у Вас задан диапазон, что данные должны появиться не менее чем за 2 нс до прихода активного фронта clock; тогда оцените с другой стороны: а не раньше чем за сколько могут появиться данных ? Если можно выставить данные на пол периода clock раньше активного фронта clock, то поставьте в IOB выходные триггеры и работайте по различным фронтам.

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


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

Да, махделей не поможет, сгоряча ляпнул. Но две ветки клоков со сдвигом тоже не то: как обеспчить их требуемое временное соотношение на выходных падах?

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


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

как обеспечить их требуемое временное соотношение на выходных падах?

Ну неужели до этого так сложно догадаться имея два внутренних 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).

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


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

Извините, дал маху в задании. Время предустановки данных data_out относительно активного уровня клока clk_out равно 10 ns +- 2 ns. Временная диограмма интерфейса должна выглядеть как на рисунке.

Интерфейс представляет из себя чтото вроде SPI с одним слейвом, когдае есть clk_out приемник (слейв) синхронно clk_out считывает данные data_out, когда данные передавать не нужно то clk_out остается в положении низкого логического уровня. Все это реализовано на ПЛИС Virtex 4 FX 12.

post-39870-1245170192_thumb.jpg

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

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


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

Ну неужели до этого так сложно догадаться имея два внутренних 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 в рисунке равны) или двумя разными клоками с нужным фазовым соотношением, как выше Борис советовал. Разница от выходного триггера до пада, весьма стабильна и мала. С такими большими временами это не проблема.

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


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

Время предустановки данных 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 - а его порой так нахватает...

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


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

Временная диограмма интерфейса должна выглядеть как на рисунке.

 

клок при выдаче проинвертируйте и все. для ваших частот никаких проблем не будет, да и для более высоких тоже.

 

ЗЫ. на вашей фпга клок кошерно выдавать через DDR выходной регистр, на нем же и про инвертируйте.

 

то работайте на удвоенной внутренней частоте

 

в данном конкретном случае, кроме гемороя это ничего не даст.

 

 

PS. Только инвертируйте клок НЕ на PLL, а именно берете клок, которым тактируются регистры в IOB и его инвертируете и выводите наружу

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


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

Всем спасибо за помощь.

 

Мне понравился вариант des00 с инвертированием , попробую его.

 

PS. Только инвертируйте клок НЕ на PLL, а именно берете клок, которым тактируются регистры в IOB и его инвертируете и выводите наружу

 

 

Я понял :rolleyes:

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


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

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

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

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

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

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

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

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

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

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