реклама на сайте
подробности

 
 
> Выходные сигналы ПЛИС и их "времянка"
dxp
сообщение Jun 20 2009, 11:00
Сообщение #1


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Давно хотел спросить, но как-то руки не доходили... smile.gif

Вот есть некие сигналы внутри ПЛИС (пусть для определенности какая-нибудь FPGA типа Cyclone от Altera):

Код
bit       clock;
bit [7:0] data;


Задача вывести поток данных наружу на внешнее устройство: выходит шина данных (data) и сигнал тактовой частоты (clock). Есть требование, чтобы clock был сдвинут по фазе относительно данных - задержан, т.е. чтобы на том внешнем устройстве выполнялись требования по setup.

До сих пор задача успешно решалась так: в PLL заводилось два клока - один системный (например, 100 МГц), второй вспомогательный (200 МГц), сдвинутый относительно системного на четверть периода (2.5 нс). Данные выходят наружу через выходные триггеры IO элементов ПЛИС, которые тактируются системным клоком, а clock выходит наружу тоже через выходной триггер IO элемента, но подается он на вход данных триггера, а тактируется этот триггер вышеуказанным вспомогательным высокочастотным клоком, сдвинутым на 2.5 нс. Таким образом, на выходе получаются данные и клок без перекосов и с четко выдержанной времянкой. Все это работает.

Но есть сомнение. Как-то все это кажется сложновато и некрасиво - есть подозрение, что можно вывести клок с заданной задержкой без всяких подобных наворотов, а просто обконстрейнив. На "некрасивость" еще указывает то, что квартус на этот финт выдает предупреждение:

Warning: PLL "ClkGen|pllclkgen:PLLClkGen|altpll:altpll_component|pll" output port clk[0] feeds output pin "SCLK" via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance

Понятно, что страшного ничего нет, но нехорошо.

Какие мнения? Как делать правильно?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Victor®
сообщение Jun 21 2009, 11:21
Сообщение #2


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(dxp @ Jun 20 2009, 14:00) *
Давно хотел спросить, но как-то руки не доходили... smile.gif

Вот есть некие сигналы внутри ПЛИС (пусть для определенности какая-нибудь FPGA типа Cyclone от Altera):

Код
bit       clock;
bit [7:0] data;


Задача вывести поток данных наружу на внешнее устройство: выходит шина данных (data) и сигнал тактовой частоты (clock). Есть требование, чтобы clock был сдвинут по фазе относительно данных - задержан, т.е. чтобы на том внешнем устройстве выполнялись требования по setup.

До сих пор задача успешно решалась так: в PLL заводилось два клока - один системный (например, 100 МГц), второй вспомогательный (200 МГц), сдвинутый относительно системного на четверть периода (2.5 нс). Данные выходят наружу через выходные триггеры IO элементов ПЛИС, которые тактируются системным клоком, а clock выходит наружу тоже через выходной триггер IO элемента, но подается он на вход данных триггера, а тактируется этот триггер вышеуказанным вспомогательным высокочастотным клоком, сдвинутым на 2.5 нс. Таким образом, на выходе получаются данные и клок без перекосов и с четко выдержанной времянкой. Все это работает.

Но есть сомнение. Как-то все это кажется сложновато и некрасиво - есть подозрение, что можно вывести клок с заданной задержкой без всяких подобных наворотов, а просто обконстрейнив. На "некрасивость" еще указывает то, что квартус на этот финт выдает предупреждение:

Warning: PLL "ClkGen|pllclkgen:PLLClkGen|altpll:altpll_component|pll" output port clk[0] feeds output pin "SCLK" via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance

Понятно, что страшного ничего нет, но нехорошо.

Какие мнения? Как делать правильно?


Не кажется Вам, что перемудрили?
Сравните полученный для FPGA Tco и требуемый Tsu...
Если Tclk - Tco > Tsu - то и не каких проблем быть не должно (Tclk - период тактовой)


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 22 2009, 03:27
Сообщение #3


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Victor® @ Jun 21 2009, 18:21) *
Не кажется Вам, что перемудрили?
Сравните полученный для FPGA Tco и требуемый Tsu...
Если Tclk - Tco > Tsu - то и не каких проблем быть не должно (Tclk - период тактовой)

Честно говоря, не понял вашего замечания. Не могли бы вы уточнить, что имелось в виду. Напомню, у меня есть данные и клок, клок должен быть сдвинут (задержан) относительно данных, я реализую это путем размещения выходного регистра данных в триггерах IO элементов ПЛИС, а клок тоже в таком же триггере IO элемента, но подаю его на вход данных (не на тактовый), а на тактовый вход этого триггера подаю вдвое более быстрый клок, сдвинутый на четверть периода основого клока (2.5 нс в моем случае). Таким образом, на выходе четко и гарантировано присутствуют данные с малым "перекосом" и клок, сдвинутый четко на указанную величину.

Цитата(Andr2I @ Jun 21 2009, 21:46) *
Интересно, а чем плохо просто из PLL вытащить два клока 100 МГц и 100 МГц, сдвинутые на четверть периода. Первый тактирует выходные D-триггеры, а второй тупо наружу?
Или расчет строится на то, что при тактировании триггеров разными клоками компилятор разместит их в глобальных шинах и задержка там будет минимальна, т.е. лишенго сдвига по времени не будет (при условии одинаковых выходных триггеров и самое главное одинаковых нагрузочных емкостей)?

Такая мысль тоже посещала, но взяло сомнение насчет временных соотношений. Ведь в случае пропускания клока через триггер выходного элемента имеем четкое соотношение в виду жесткой связности клоков. А тут если просто на выход клок метнуть, кто гарантирует, что он выйдет с четкой задержкой относительно данных, протактированных вторым клоком (ловим-то ведь единицы и доли наносекунд)? Ведь у него совершенно другой путь наружу в отличие от варианта с тактированием клока другим - сдвинутым высокочастотным.

К тому же, преимуществ никаких все равно не видно - все та же возня с клоками - их надо два, надо сдвиг, т.е. все упирается в наличие соответсвующей аппаратной приблуды (PLL).

Цитата(Shtirlits @ Jun 22 2009, 06:30) *
dxp, правильно вам quartus наругался, клок ходит по проводам, которые для данных предназначены. И неприятность этого заключается не только в разбеге фаз и зависимости от условий. Так как клок покидает глобальную сеть, P&R и STA начинают учитывать не только глобальную сеть клока, но и "отросток", который идет к выходным буфферам. В результате, в узких местах будет надублирована логика, что увеличит площадь, что еще ухудшит разводку и еще надублируется логика. Если действительно узко, CRC какой-нибудь.

Проблемы в целом, связанные с пусканием клока по цепям данных, мне понятны. Но ведь тут-то все же просто - вывели клок через триггер выходного элемента, какие тут могут быть проблемы с джиттером и прочим? Похоже, что квартус тут формально оценивает - раз вывели клок, получите предупреждение.

Цитата(Shtirlits @ Jun 22 2009, 06:30) *
Чтобы избавиться от отростка при формировании выходного клока, можно применить трюк:
Что у вас есть - два клока с гарантированным PLL-ем сдвигом фаз и готовые констрейны о нем - о них заботятся quartus или ISE.
Предполагается, что сдвиг не слишком маленький, чтобы были трудности при передаче данных из регистра в регистр в разных доменах. На VHDL этого примерно так, а вы уложитесь в пару строк:
Код
...
process(fast_clk)
begin
   if rising_edge(fast_clk) then
      out_clk <= not (reg_f xor reg_r); -- тоже самое, что и закомментированная строка ниже
--      out_clk <= sys_clk
   end if;
end process;

Это что, весь этот наворот только для того, чтобы вывести сигнал клока в разряд данных? smile.gif

Цитата(Shtirlits @ Jun 22 2009, 06:30) *
Частота умножается в два раза в PLL (DCM), выход подается на буффер глобальной сети клока и оттуда поступает к тактовым входам выходных буфферов и выходного клока, и данных. Выходной клок формируется как данные (смотри выше), а не берется с выхода PLL и тем более не проходит напрямую к ножке.

Неужели нету средств просто завести клок в сигналы данных? Ну, буфер какой-нить для этого использовать... Надо будет поэскпериментировать.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 22 2009, 03:38
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(dxp @ Jun 21 2009, 21:27) *
Неужели нету средств просто завести клок в сигналы данных? Ну, буфер какой-нить для этого использовать... Надо будет поэскпериментировать.


господа, я что то не понимаю или как. что мешает вывести комбинаторно ИНВЕРТИРОВАННЫЙ клок? Не нужны никакие дополнительные выходы PLL, усложнение логики(удвоение системного клока) и т.д. и т.п. Если есть DDRIO то "проблема" вообще решается тривиально и просто(даже warning не будет), на виртуальном инверторе. В этом случае фронт клока будет стоять в середине окна данных и принять его можно будет без проблем.

Проверено на многих ФПГА, для частот до 180 МГц, работает без нареканий.


PS. правда при этом разводка на плате сделана с выравниваем длин шины.


--------------------
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 22 2009, 05:15
Сообщение #5


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(des00 @ Jun 22 2009, 10:38) *
господа, я что то не понимаю или как. что мешает вывести комбинаторно ИНВЕРТИРОВАННЫЙ клок? Не нужны никакие дополнительные выходы PLL, усложнение логики(удвоение системного клока) и т.д. и т.п.

А вы знаете, какие временные соотношения будут в сигналов в том случае? Вот клок фиксирует сигнал данных в триггере IO элемента, далее сигнал через время Tco выходит из триггера и следует до выходного пина через всякие мультиплексоры, элементы задержки, минуя трехстабильный буфер и т.д. Это тоже вносит задержку. Экспериментально для циклонов это время составляет порядка 2.2 нс. Так вот вопрос: а вот этот самый клок, которым такировали вышеописанный триггер, если его пустить тупо напрямую на внешний пин, - какая у него будет задержка? Ведь у него-то путь совсем другой. Начиная с того, что он идет со слоя глобальных сигналов, и заканчивая тем, что он идет мимо триггера.

Даже если провести эксперимент и убедиться, что соотношение времянок в этом случае приемлемое, где гарантия, что это не сопадение и что это соотношение будет выполняться всегда? Я в доке что-то не находил инфы, что-либо утверждающей на этот счет. И вообще это сильно попахивает асинхронщиной. smile.gif

Цитата(des00 @ Jun 22 2009, 10:38) *
Если есть DDRIO то "проблема" вообще решается тривиально и просто(даже warning не будет), на виртуальном инверторе. В этом случае фронт клока будет стоять в середине окна данных и принять его можно будет без проблем.

Т.е. если данные выводить точно на DQ, а клок на DQS? Ну, так это привязка к конкретным пинам, чего бы не очень хотелось, вообще-то.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 22 2009, 05:33
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(dxp @ Jun 21 2009, 23:15) *
А вы знаете, какие временные соотношения будут в сигналов в том случае? Вот клок фиксирует сигнал данных в триггере IO элемента, далее сигнал через время Tco выходит из триггера и следует до выходного пина через всякие мультиплексоры, элементы задержки, минуя трехстабильный буфер и т.д. Это тоже вносит задержку. Экспериментально для циклонов это время составляет порядка 2.2 нс. Так вот вопрос: а вот этот самый клок, которым такировали вышеописанный триггер, если его пустить тупо напрямую на внешний пин, - какая у него будет задержка? Ведь у него-то путь совсем другой. Начиная с того, что он идет со слоя глобальных сигналов, и заканчивая тем, что он идет мимо триггера.


насколько другой путь будет у цепи клока ? особенно по времени ? он пройдет почти те же самые цепи, за исключением выходного триггера. и задержка будет отличаться где то на 0.2-0.5 нс, что при запасе влево-вправо в 5нс (данные на 100МГц) вам это более чем за глаза. А поднять тактовую с глобальной линии и вывести ее на LUT/IO буфер можно в любом месте. И ква поднимает его по месту, а не где то вначале у PLL. В температуре плыть задержки у клока и данных будут в ту же самую сторону, так что и тут я проблем не вижу.

Цитата
Даже если провести эксперимент и убедиться, что соотношение времянок в этом случае приемлемое, где гарантия, что это не сопадение и что это соотношение будет выполняться всегда? Я в доке что-то не находил инфы, что-либо утверждающей на этот счет. И вообще это сильно попахивает асинхронщиной. smile.gif


вам никто не мешает использовать возможности Time Quest который умеет анализировать Clock as Data и прописать диапазоны задержек.

Цитата
Т.е. если данные выводить точно на DQ, а клок на DQS? Ну, так это привязка к конкретным пинам, чего бы не очень хотелось, вообще-то.


у хилых я делал так

Код
ODDR
ODDR
(
  .Q  ( clk_pin ), // 1-bit DDR output data
  .C  ( clk     ), // 1-bit clock input
  .CE ( 1'b1    ), // 1-bit clock enable input
  // this is virtual inverter
  .D0 ( 1'b0    ), // 1-bit data input
  .D1 ( 1'b1    ), // 1-bit data input
  //
  .R  ( 1'b0    ), // 1-bit reset input
  .S  ( 1'b0    )  // 1-bit set input
);


--------------------
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 22 2009, 07:31
Сообщение #7


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(des00 @ Jun 22 2009, 12:33) *
насколько другой путь будет у цепи клока ? особенно по времени ? он пройдет почти те же самые цепи, за исключением выходного триггера. и задержка будет отличаться где то на 0.2-0.5 нс, что при запасе влево-вправо в 5нс (данные на 100МГц) вам это более чем за глаза. А поднять тактовую с глобальной линии и вывести ее на LUT/IO буфер можно в любом месте. И ква поднимает его по месту, а не где то вначале у PLL. В температуре плыть задержки у клока и данных будут в ту же самую сторону, так что и тут я проблем не вижу.

В ваших рассуждениях есть логика. smile.gif Осталось еще реализовать функцию clk_en (для клока и для данных - поток данных нерегулярный, в нем есть паузы). Если сделать просто тупо на логике (clock & clk_en), то эта логика будет размещена во внутренней ячейке ПЛИС, и оттуда до IO элемента время доставки сигнала уже не 0.2-0.5 нс и, соответсвенно, этот сигнал уже будет иметь иную (возможно, неприемлемую) задержку.




Цитата(SM @ Jun 22 2009, 13:18) *
А я что-то запутался. А откуда квартус знает, что выход триггера это клок? Ему и на вход данных что-ли клок приходит? Так это глюк идейный.

А вы как понимали до этого? И как правильно с вашей точки зрения?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dxp   Выходные сигналы ПЛИС и их "времянка"   Jun 20 2009, 11:00
- - SM   Цитата(dxp @ Jun 20 2009, 15:00) Какие мн...   Jun 20 2009, 11:25
|- - dxp   Цитата(SM @ Jun 20 2009, 18:25) Ну, напри...   Jun 20 2009, 12:05
|- - SM   Цитата(dxp @ Jun 20 2009, 16:05) Да, варн...   Jun 20 2009, 12:38
|- - Boris_TS   Цитата(dxp @ Jun 20 2009, 16:05) Еще вари...   Jun 20 2009, 17:27
|- - FPGA   В FPGA от XILINX очень удобно использовать блоки D...   Jun 20 2009, 20:19
|- - DENDI   Цитата(FPGA @ Jun 20 2009, 23:19) В FPGA ...   Jun 21 2009, 11:10
|- - SM   Цитата(DENDI @ Jun 21 2009, 15:10) Интере...   Jun 21 2009, 11:32
||- - MrYuran   Цитата(des00 @ Jun 22 2009, 07:38) господ...   Jun 22 2009, 04:15
|||- - SM   Цитата(dxp @ Jun 22 2009, 11:31) А вы как...   Jun 22 2009, 07:32
|||- - dxp   Цитата(SM @ Jun 22 2009, 14:32) Я понимал...   Jun 22 2009, 08:28
|||- - Andr2I   Цитата(dxp @ Jun 22 2009, 12:28) Цитата(S...   Jun 22 2009, 18:52
||||- - Shtirlits   Цитата(Andr2I @ Jun 22 2009, 22:52) ...по...   Jun 22 2009, 19:21
|||- - SM   Цитата(dxp @ Jun 22 2009, 12:28) В чем кр...   Jun 25 2009, 08:39
|||- - dxp   Цитата(SM @ Jun 25 2009, 15:39) По идее н...   Jun 26 2009, 02:45
||- - ReAl   Цитата(dxp @ Jun 22 2009, 08:15) И вообще...   Jun 22 2009, 08:44
|- - SM   Цитата(dxp @ Jun 22 2009, 07:27) Но ведь ...   Jun 22 2009, 06:18
||- - des00   Цитата(SM @ Jun 22 2009, 00:18) А я что-т...   Jun 22 2009, 06:24
|- - Shtirlits   Цитата(dxp @ Jun 22 2009, 07:27) Это что,...   Jun 22 2009, 10:56
|- - dxp   Цитата(Shtirlits @ Jun 22 2009, 17:56) Ес...   Jun 22 2009, 11:24
- - Andr2I   Цитата(dxp @ Jun 20 2009, 15:00) До сих п...   Jun 21 2009, 14:46
- - Shtirlits   dxp, правильно вам quartus наругался, клок ходит п...   Jun 21 2009, 23:30
- - disel   У ксалинса в ДДР было сделано так: выход клока зав...   Jun 22 2009, 09:56
- - Shtirlits   В данном случае то, что клок чуть раньше данных то...   Jun 22 2009, 11:44


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 09:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01487 секунд с 7
ELECTRONIX ©2004-2016