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

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

|
Давно хотел спросить, но как-то руки не доходили...  Вот есть некие сигналы внутри ПЛИС (пусть для определенности какая-нибудь 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 Понятно, что страшного ничего нет, но нехорошо. Какие мнения? Как делать правильно?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
 |
Ответов
|
Jun 21 2009, 11:21
|

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

|
Цитата(dxp @ Jun 20 2009, 14:00)  Давно хотел спросить, но как-то руки не доходили...  Вот есть некие сигналы внутри ПЛИС (пусть для определенности какая-нибудь 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
|
|
|
|
|
Jun 22 2009, 03:27
|

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; Это что, весь этот наворот только для того, чтобы вывести сигнал клока в разряд данных?  Цитата(Shtirlits @ Jun 22 2009, 06:30)  Частота умножается в два раза в PLL (DCM), выход подается на буффер глобальной сети клока и оттуда поступает к тактовым входам выходных буфферов и выходного клока, и данных. Выходной клок формируется как данные (смотри выше), а не берется с выхода PLL и тем более не проходит напрямую к ножке. Неужели нету средств просто завести клок в сигналы данных? Ну, буфер какой-нить для этого использовать... Надо будет поэскпериментировать.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|