zombi 0 30 июля, 2020 Опубликовано 30 июля, 2020 · Жалоба Собственно вот схема. sdc : set_time_format -unit ns -decimal_places 3 derive_clock_uncertainty create_clock -period 25MHz -name {CLK25} [get_ports {CLK25}] create_generated_clock -name {clk} -source [get_ports {CLK25}] -multiply_by 5 [get_nets {Inst_PLL|altpll_component|auto_generated|wire_pll1_clk[0]}] create_generated_clock -name {PCK} -source [get_ports {CLK25}] -multiply_by 5 [get_nets {Inst_PLL|altpll_component|auto_generated|wire_pll1_clk[1]}] -offset 6 set_clock_groups -exclusive -group {clk PCK} -group {CLK25} set_output_delay -clock {PCK} -max 1.5 [get_ports {PRAS PCAS PWE PAA[*] PBA[*] PDQ[*]}] set_output_delay -clock {PCK} -min -0.8 [get_ports {PRAS PCAS PWE PAA[*] PBA[*] PDQ[*]}] Отчёт : Где на диаграмме передний фронт сигнала PCK? Т.е. именно того что на выходном пине плис будет. Задал для данных set_output_delay -max 1.5 относительно PCK, а оно почему-то еще 3.946 нс отнимает. Что за величина -3.946 нс? Задержка чего и относительно чего? И откуда она берётся? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба У вас данные inst_PAA тактируются частотой clk (125MHz, фаза 0), эти данные поступают в другой клоковый домен (другой process или другой always блок), тактируемый частотой PCK (125MHz, фаза 270). Вот на это таймквест и ругается. А дальше надо думать, схема то не вся показана. 9 hours ago, zombi said: Где на диаграмме передний фронт сигнала PCK? смотрите Latch Clock - жирный нарастающий фронт справа, там где 6ns Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба Добавил к 1 сообщению констрейны, может там где ошибка? "смотрите Latch Clock" Ясно. Я так и предполагал. Спасибо. "эти данные поступают в другой клоковый домен" Нет, данные AA[*] тактируются частотой clk нарастающим фронтом в регистрах PAA[*]. С регистров сразу на пины плис. Для всей группы регистров PAA[*] назначил fast_output_register. И я же вижу что данные (Data Arrival) готовы на выходных пинах за -2.405 нс. Всё правильно, так я и хотел. А таймквест чего-то ругается... Выходы PAA - это адресные входы внешней мс sdram, а PCK - её клок ck. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 43 minutes ago, novartis said: схема то не вся показана. Схему дополнил для наглядности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 10 hours ago, zombi said: create_generated_clock -name {clk} -source [get_ports {CLK25}] -multiply_by 5 [get_nets {Inst_PLL|altpll_component|auto_generated|wire_pll1_clk[0]}] create_generated_clock -name {PCK} -source [get_ports {CLK25}] -multiply_by 5 [get_nets {Inst_PLL|altpll_component|auto_generated|wire_pll1_clk[1]}] -offset 6 вместо всех этих команд, описывающих клоки pll, можно написать одну derive_pll_clocks Но у вас тут вроде еще имена clk и PCK привязываются к выходам pll. 10 hours ago, zombi said: set_clock_groups -exclusive -group {clk PCK} -group {CLK25} если PCK идет прям на выходную ножку, и не участвует в тактировании другой логики плис, то нет смысла в этой команде. 48 minutes ago, zombi said: Нет, данные AA[*] тактируются частотой clk нарастающим фронтом в регистрах PAA[*]. С регистров сразу на пины плис. Если это так, то не понятно, почему таймквест выдает ту диаграмму из первого вашего поста. Но можно прописать так: set_clock_groups -exclusive -group {clk PCK} -group {clk} 50 minutes ago, zombi said: Выходы PAA - это адресные входы внешней мс sdram, а PCK - её клок ck. Вы точно кварутсу об этом не сообщили другими констрейнами? В Assignment Editor'е нет записей на эти ножки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 5 minutes ago, novartis said: Вы точно кварутсу об этом не сообщили другими констрейнами? В Assignment Editor'е нет записей на эти ножки? В Assignment Editorе только назначение пинов и fast_output_register=ON для всей группы регистров PAA и больше ничего нет. Спасибо, сейчас буду пробовать поправить sdc следуя Вашим советам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 1 hour ago, zombi said: Выходы PAA - это адресные входы внешней мс sdram, а PCK - её клок ck. а оно так по даташиту требуется, чтобы PCK был с фазой 270 относительно данных? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 1 31 июля, 2020 Опубликовано 31 июля, 2020 (изменено) · Жалоба 10 hours ago, zombi said: create_generated_clock -name {clk} -source [get_ports {CLK25}] -multiply_by 5 [get_nets {Inst_PLL|altpll_component|auto_generated|wire_pll1_clk[0]}] create_generated_clock -name {PCK} -source [get_ports {CLK25}] -multiply_by 5 [get_nets {Inst_PLL|altpll_component|auto_generated|wire_pll1_clk[1]}] -offset 6 Насколько понимаю, этими командами задаются клоки на выходах блоков PLL. Т.е. latch clock не на ноге ПЛИС! Отсюда следует, что ему нужно время дойти до пина, поэтому данные (определенные констрейнами на пине) требует раньше. 8 minutes ago, Yuri124 said: этими командами задаются клоки на выходах блоков PLL Это видно и из диаграммы - время ровненько 6 нс от clk, нет задержки распространения до выхода. ЗЫ подправил выделенное жирным слово. Изменено 31 июля, 2020 пользователем Yuri124 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 1 31 июля, 2020 Опубликовано 31 июля, 2020 (изменено) · Жалоба Можно посмотреть более подробный путь с задержками - вкладка "Data Path", может там будет понятнее. [удалил ненужное, что-то, кажется, не так понял] Смотрите https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/wp/wp-tmqst.pdf - в конце 3 страницы - как они задают в примере соотношение между сформированным с помощью PLL клоком, выведенным наружу, и данными, тоже выходящими наружу. Изменено 31 июля, 2020 пользователем Yuri124 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 3 hours ago, novartis said: вместо всех этих команд, описывающих клоки pll, можно написать одну derive_pll_clocks Как оказалось это не принципиально. 3 hours ago, novartis said: а оно так по даташиту требуется, чтобы PCK был с фазой 270 относительно данных? Конечно нет. Это я уже чего только не мутил - надеялся что поможет. Но кажется я таки понял что надо делать, раз квартус никак не хочет выходную частоту со своего же пина использовать в анализе задержек. А может я просто не умею это ему объяснить. Но я понял что это уже и неважно - пишет квартус ошибки или нет. Ошибки можно убрать если сильно мешают - просто объявлением виртуальной частоты равной частоте clk. И сказать таймквесту проводить анализ относительно этой виртуальной частоты, а не от реальной. И всё чудно, ошибок нет. А вычислить необходимую задержку для реальной частоты просто. На диаграмме видно время задержки данных на выходных пинах плис относительно clk ( 0.539+3.056=3.595 нс) Затем посмотреть отчет по пути от выхода PLL до выходного пина PCK (в моём случае = 4.472 нс) Вычислить необходимую задержку для частоты PLL->PCK так что бы не активный фронт PCK попал как можно ближе к фронту Data Arrival. Поправьте если шибко намудрил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 1 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 15 minutes ago, zombi said: квартус никак не хочет выходную частоту со своего же пина использовать в анализе задержек так это же нужно ему вручную указать. Он же не знает - что творится снаружи ПЛИС. И даже что внутри - тоже без пинка не представляет. Вот как сделано в том примере: create_clock -name SYSCLK -period 5.000 [get_ports CLK_IN] - частота на входе ПЛИС create_generated_clock -name PLLCLK \ -source [get_ports CLK_IN] \ [get_pins pll|CLK[1]] - частота на выходе блока PLL set_output_delay -clock PLLCLK \ -reference_pin [get_ports CLK_OUT] 0.800 \ [get_ports DATA_OUT] - указали вых. порт частоты, относительно которой нужно считать задержки. Возможно - можно и по-другому - задав еще один generated_clock, привязанный к выходному пину. 20 minutes ago, zombi said: Ошибки можно убрать если сильно мешают - просто объявлением виртуальной частоты равной частоте clk. Можно вообще убрать констрейн - и никакого анализа по его нарушению не будет производиться. Только потом не забыть вручную проверить все требуемые пути сигналов по задержкам. И так - каждый раз после правки дизайна. Оно Вам нужно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 26 minutes ago, zombi said: Конечно нет. Это я уже чего только не мутил - надеялся что поможет. тогда так делать не надо У вас есть данные - адресные входы для внешней мс sdram, и есть тактирующий эти данные клок ck. С фазой ck ничего специально придумывать не надо. Нужно оценить длину дорожек от пинов плис до микросхемы SDRAM. Подставить в констрейны и квартус там сам все разрулит. Как оценить длину дорожек и в какие констрейны подставлять - надо почитать мануалы от интела. Вот в том документе есть Board Delay (Data) и Board Delay (Clock) = 0.8ns. Надо подобные констрейны наколдовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 14 minutes ago, Yuri124 said: Вот как сделано в том примере: Ага... reference_pin! ок. ушёл проверять. Quote Оно Вам нужно? Нет. 9 minutes ago, novartis said: Как оценить длину дорожек и в какие констрейны подставлять - надо почитать мануалы от интела. У меня практически нет дорожек. По двум противоположным бокам плис поставил по одной sdram. Длина дорожек примерно одинаковая 1.5 - 2.5 см! Это что дорожки? Это смех. Две мс sdram работают независимо (все сигналы индивидуальны), хотя и на общей частоте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 1 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 9 minutes ago, zombi said: 1.5 - 2.5 см 0,1 нс примерно. Раз констрейны будут всё равно писаться - почему бы не учесть. НО! важно их учитывать относительно клока, который, если приходит тоже через трассу 2 см - то уже задержку данных нивелирует своей задержкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба Клок тоже для каждой мс идёт от плис с индивидуальных пинов и длины дорожек примерно такие же как и все остальные сигналы. 7 minutes ago, Yuri124 said: 0,1 нс примерно. Вы ничего не путаете? 100 ps на ~1.0 см ? Но даже если и так, а у меня будет tSU=tTH=4000 ps ! что мне эта сотня - туда/сюда Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться