rash230691 0 21 октября, 2019 Опубликовано 21 октября, 2019 · Жалоба Доброго всем! Имеется плата с кривым разводом DVI и как следствие кривым приемом данных по этому самому DVI. Решил поправить данную ситуацию с помощью TimeQuest, но, скорее всего из-за малого опыта, у меня это не удалось. Схема всего этого безобразия во вложении, вкратце поясню: данные со скоростью 650 Mbps поступают в сдвиговый регистр 1:10, далее уходят на пиксельной частоте в обработку PLL имеет тип source synchronous, умножает входную частоту на 20, первый выход делит на 2, второй на 20 имеется простой блок подстройки фаз PLL, который ориентируется на входные данные Все что я знаю о источнике сигналов - глазковая диаграмма из спецификации на интерфейс(во вложении, диаграмма нормализованная) Имея сей стартовый набор данных, я набросал ограничений: Spoiler create_clock -name {TMDS_CLK} -period 15.384 [get_ports {TMDS_CLK}] create_clock -name {TMDS_virt} -period 1.538 -waveform {0.769 1.538} set_clock_groups -logically_exclusive -group {TMDS_CLK TMDS_virt} #Размеры глаза set TMDS_Tsu [expr 0.25 * $freq_period] set TMDS_Th [expr 0.25 * $freq_period] #Скорость распространения сигнала set spd 0.007 #Длины линий set TMDS_D0_min 111.729 set TMDS_D0_max 111.729 set TMDS_D1_min 130.603 set TMDS_D1_max 133.275 set TMDS_D2_min 138.99 set TMDS_D2_max 142.327 set TMDS_CLK_min 113.957 set TMDS_CLK_max 114.785 #Задержки set TMDS_D0_min_delay [expr $TMDS_D0_min * $spd] set TMDS_D0_max_delay [expr $TMDS_D0_max * $spd] set TMDS_D1_min_delay [expr $TMDS_D1_min * $spd] set TMDS_D1_max_delay [expr $TMDS_D1_max * $spd] set TMDS_D2_min_delay [expr $TMDS_D2_min * $spd] set TMDS_D2_max_delay [expr $TMDS_D2_max * $spd] set TMDS_CLK_min_delay [expr $TMDS_CLK_min * $spd] set TMDS_CLK_max_delay [expr $TMDS_CLK_max * $spd] set_input_delay -clock { TMDS_virt } -min [expr $TMDS_D0_min - $TMDS_Th - $TMDS_CLK_max ] [get_ports {TMDS_DATA[0]}] set_input_delay -clock { TMDS_virt } -max [expr $TMDS_D0_max + $TMDS_Tsu - $TMDS_CLK_min ] [get_ports {TMDS_DATA[0]}] set_input_delay -clock { TMDS_virt } -min [expr $TMDS_D1_min - $TMDS_Th - $TMDS_CLK_max ] [get_ports {TMDS_DATA[1]}] set_input_delay -clock { TMDS_virt } -max [expr $TMDS_D1_max + $TMDS_Tsu - $TMDS_CLK_min ] [get_ports {TMDS_DATA[1]}] set_input_delay -clock { TMDS_virt } -min [expr $TMDS_D2_min - $TMDS_Th - $TMDS_CLK_max ] [get_ports {TMDS_DATA[2]}] set_input_delay -clock { TMDS_virt } -max [expr $TMDS_D2_max + $TMDS_Tsu - $TMDS_CLK_min ] [get_ports {TMDS_DATA[2]}] Описал входную частоту Описал виртуальную частоту со сдвигом 180 градусов(center aligned) Объединил их в одну группу Задал задержки относительного виртуальной частоты Собственно к чему все это... Просьба "оценить" написанные ограничения, да и от советов по приему и десериализации данных сигналов не откажусь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 21 октября, 2019 Опубликовано 21 октября, 2019 · Жалоба DVI констрейны по данным и не нужны по сути ) В соответствии со стандартом - положение клока относительно данных может быть абсолютно случайным. Задача приемника по тестовым данным (которые передаются пока DE = 0) подстроиться под центр глаза - соответственно констрейны никак не помогут P.S. Лучше не в сдвиговый регистр 1:10 данные принимать. А в DDR регистр - сможете больше разрешений принять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rash230691 0 21 октября, 2019 Опубликовано 21 октября, 2019 · Жалоба 15 minutes ago, Flip-fl0p said: DVI констрейны по данным и не нужны по сути ) В соответствии со стандартом - положение клока относительно данных может быть абсолютно случайным. Задача приемника по тестовым данным (которые передаются пока DE = 0) подстроиться под центр глаза - соответственно констрейны никак не помогут P.S. Лучше не в сдвиговый регистр 1:10 данные принимать. А в DDR регистр - сможете больше разрешений принять. Я хочу максимально компенсировать разницу в длине дифф пар. Приемник у меня конечно может и простой, но в нем конкретно прописаны длины синхронизирующих последовательностей, но вот от компиляции к компиляции результат не стабилен, он может "поймать" синхронизацию, а может и не принять Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться