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

 
 
> Выходные сигналы ПЛИС и их "времянка"
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
SM
сообщение Jun 22 2009, 06:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



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

А я что-то запутался. А откуда квартус знает, что выход триггера это клок? Ему и на вход данных что-ли клок приходит? Так это глюк идейный.
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
|- - des00   Цитата(dxp @ Jun 21 2009, 21:27) Неужели ...   Jun 22 2009, 03:38
||- - MrYuran   Цитата(des00 @ Jun 22 2009, 07:38) господ...   Jun 22 2009, 04:15
||- - dxp   Цитата(des00 @ Jun 22 2009, 10:38) господ...   Jun 22 2009, 05:15
||- - des00   Цитата(dxp @ Jun 21 2009, 23:15) А вы зна...   Jun 22 2009, 05:33
|||- - dxp   Цитата(des00 @ Jun 22 2009, 12:33) наскол...   Jun 22 2009, 07:31
|||- - 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
||- - 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 - 06:25
Рейтинг@Mail.ru


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