topor_topor 0 10 ноября, 2014 Опубликовано 10 ноября, 2014 · Жалоба Вообще, set_min_delay проверяется вместе с холдами, а set_max_delay - с сетапами. Поэтому, они не должны (а по моему опыту и не могут) игнорироваться - они проверяются и оптимизируются на разных этапах. set_min_delay\set_max_delay с сетап\холдами не связан. Это отдельный констрейн. если оба сразу заданы на одну цепь, то тулзе труно их выполнить, изза расброса задержек буферов итд... Вот и игнорит иногда... просто говорит что не выполнено... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 10 ноября, 2014 Опубликовано 10 ноября, 2014 · Жалоба set_min_delay\set_max_delay с сетап\холдами не связан. Это отдельный констрейн. Да, отдельный. НО!!! С холдами связан! Синтезатор на него вообще плюет с высокой колокольни (если его не пнуть специально, но, в общем случае, это обычно не делают, оставляя холды и min_delay на роутер), а вот разводчик занимается оптимизацией на тему min_delay именно во время этапа коррекции холдов, а в остальном процессе игнорирует. По крайней мере, так работают Synopsys DC в связке с IC Compiler или Astro. Да и FPGA-тулы работают точно так же. Да и анализируется он всегда вместе с холдами, на fast корнере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 10 ноября, 2014 Опубликовано 10 ноября, 2014 · Жалоба ВЫВОД: set_min_delay - игнорируется :( Вывод почти неверный. Он не игнорируется роутером, когда ему дать команду коррекции холдов (а это процесс отдельный, делается после разводки, когда слаки по сетапам и max_delay уже положительные)! Вот тогда он поправит и холды, и ошибки по min_delay (при этом, если вилка слишком жесткая, может испортить max_delay, этот процесс его не проверяет). А на почти всех других этапах таки да, игнорируется, но я об этом сразу сказал. Почему "почти" - потому, что Synopsys DC делает вот так (цитата из dcug): If fix_hold is not specified on any clocks, the minimum delay cost is not considered during compilation. If fix_hold or min_delay is specified, the minimum delay cost is a secondary optimization cost. То есть, как бы это не было странным, но если не указан синтезатору set_fix_hold хотя бы одному клоку, то и все set_min_delay будут проигнорированы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 10 ноября, 2014 Опубликовано 10 ноября, 2014 · Жалоба Я таки ошибся свыводами.... При set_max_delay 10.0 -from in1 -to Q set_min_delay 5.0 -from in1 -to Q мы имеем: # Command: report_timing -early -from in1 -to Q -view worst > res ############################################################### Path 1: VIOLATED Path Delay Check Endpoint: Q (v) Beginpoint: in1 (v) triggered by leading edge of '@' Analysis View: worst - External Delay 0.000 + Path Delay 5.000 = Required Time 5.000 Arrival Time 2.153 Slack Time -2.847 Clock Rise Edge 0.000 + Input Delay 0.000 + Drive Adjustment 0.128 = Beginpoint Arrival Time 0.128 +--------------------------------------------------------------------------------------------------------+ | Pin| Cell | Net | Arc | Delay | Load | Slew | Fanout | Arrival | Required | | | | | | | | | | Time | Time | |-----------+---------+---------+------------+---------+---------+---------+--------+---------+----------| | in1 -> | | in1 | in1 v | | 0.019 | 0.204 | 1 | 0.128 | 2.975 | | i_24/Q | AO211X4 | Q | A v -> Q v | 2.014 | 1.007 | 1.843 | 1 | 2.142 | 4.989 | | Q -> | | | Q v | 0.011 | 1.007 | 1.843 | | 2.153 | 5.000 | +--------------------------------------------------------------------------------------------------------+ # Command: report_timing -late -from in1 -to Q -view worst > res ############################################################### Path 1: MET Path Delay Check Endpoint: Q (^) Beginpoint: in1 (^) triggered by leading edge of '@' Analysis View: worst - External Delay 0.000 + Path Delay 10.000 = Required Time 10.000 - Arrival Time 2.396 = Slack Time 7.604 Clock Rise Edge 0.000 + Input Delay 0.000 + Drive Adjustment 0.170 = Beginpoint Arrival Time 0.170 +-----------------------------------------------------------------------------------------------------+ | Pin| Cell | Net| Arc | Delay | Load | Slew | Fanout | Arrival | Required | | | | | | | | | | Time | Time | |----------+---------+-------+------------+---------+---------+---------+--------+---------+----------| | in1 -> | | in1 | in1 ^ | | 0.025 | 0.299 | 1 | 0.170 | 7.774 | | i_24/Q | AO211X4 | Q | A ^ -> Q ^ | 2.215 | 1.007 | 2.340 | 1 | 2.385 | 9.989 | | Q -> | | | Q ^ | 0.011 | 1.007 | 2.340 | | 2.396 | 10.000 | +-----------------------------------------------------------------------------------------------------+ Роутер видит все минимальные задержки и репортит. --------------------------------- Задаём только set_min_delay 5.0 -from in1 -to Q path 1: Pin Type Fanout Load Slew Delay Arrival (fF) (ps) (ps) (ps) ------------------------------------------------------ in1 in port 1 35.6 397 +229 229 R i_25/A +1 229 i_25/Q AO211X4 1 1016.8 2357 +2259 2489 R Q out port +15 2504 R ------------------------------------------------------ Timing slack : UNCONSTRAINED Start-point : in1 End-point : Q МАХ задержка UNCONSTRAINED Теперь роутер: Видит МІN # Command: report_timing -early -from in1 -to Q -view worst > res ############################################################### Path 1: VIOLATED Path Delay Check Endpoint: Q (v) Beginpoint: in1 (v) triggered by leading edge of '@' Analysis View: worst - External Delay 0.000 + Path Delay 5.000 = Required Time 5.000 Arrival Time 2.093 Slack Time -2.907 Clock Rise Edge 0.000 + Input Delay 0.000 + Drive Adjustment 0.092 = Beginpoint Arrival Time 0.092 +------------------------------------------------------------------------------------------------------+ | Pin| Cell | Net| Arc | Delay | Load | Slew | Fanout | Arrival | Required | | | | | | | | | | Time | Time | |-----------+---------+-------+------------+---------+---------+---------+--------+---------+----------| | in1 -> | | in1 | in1 v | | 0.013 | 0.161 | 1 | 0.092 | 2.998 | | i_25/Q | AO211X4 | Q | A v -> Q v | 2.002 | 1.000 | 1.824 | 1 | 2.093 | 5.000 | | Q -> | | | Q v | 0.000 | 1.000 | 1.824 | | 2.093 | 5.000 | +------------------------------------------------------------------------------------------------------+ и МАХ (как unconstrained): # Command: report_timing -late -from in1 -to Q -view worst > res ############################################################### No constrained timing paths with given description found. Paths may be unconstrained (try '-unconstrained' option) or may not exist. Надо учится репорты получать :) Задав таки только set_min_delay или set_min_delay\set_max_delay без задания клоков - мы получим что хотели Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 10 ноября, 2014 Опубликовано 10 ноября, 2014 · Жалоба интересно.... в случае простой комбинаторики холда нету...как нет и клоков... Да вообще, на этапе синтеза нет никакого смысла ни в fix_hold, и в min_delay, так как эти проблемы решаются именно роутером, специальным проходом с удлинением разводки и вставлением буферов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться