Yaahoo 3 December 4 Posted December 4 · Report post Я писал о том, что обычно холд, кроме как в IO, никто в синтезе не смотрит, ведь дерево идеальное по умолчанию. А так да, конечно STA гонется и early и late, и с set_clock_latency либо вашим методом вы нарушения в холде можете получить/увидеть, надо только выписать соотвествующий репорт. Конкретно в вашем случае, если скьюить флоп с большим логическим конусом на входе, холда можно не бояться. Ну разве что конус будет сильно не выровненным - часть путей длинная, а часть очень короткая, что вполне себе легко чинится вставкой баферов. Я же писал скорее на общий случай, чтобы не забывали что двигая сетап вы двигаете и холд. Это как бусы на нитке - где то сделаете больше, и тогда в другом месте окажется меньше. У скьюинга очень много нюансов: надо заботиться чтобы этот самый флоп не попал в малтибит во время мэппинга, надо заботиться чтобы в фанауте не было ICG или другой критичной логики, управляющей тактированием. Ну и т.д. 1 Quote Share this post Link to post Share on other sites More sharing options...
GentleFly 0 December 4 Posted December 4 (edited) · Report post 13 часов назад, oratie сказал: Я правильно вас понял, что в кремнии разница между обычным подходом и вашим будет в том, что некоторые флопы будут работать по инверсной фазе клока? Если это так, то придется править RTL, чтобы не ругался LEC (logic equiv checker). Да. Все верно. Здесь, я исходил что не правлю HDL, а правку netlist должен допускать инструмент. Правка заключается в замене регистра, на аналогичный инверсным входом, или включение параметра "инверсии" как это позволяет Vivado(и как показано в репозитории). LEC это желательный минимум, но не уверен, что достаточный. Может GLS (gate level simulation) сможет дать уверенность, что ничто не поломано. GLS с контролем, что "смещенные" и их соседи переключались во время теста. В данном случае стандартных инструментов нет, что влечет за собой вариации по валидации и оценки этих валидаций .... 13 часов назад, Yaahoo сказал: чтобы не забывали что двигая сетап вы двигаете и холд Да, это я не упустил. Спасибо! В репозитории, который дал в начале, скрипт пытается разрешить и нарушения по hold таким методом, но не очень настойчиво 🙂 13 часов назад, Yaahoo сказал: чтобы этот самый флоп не попал в малтибит во время мэппинга Возможно, в этом месте надо аккуратно обрабатывать руками, так как предложенный метод не запрещает двигать весь такой массив во времени. Главное в что бы в результате сдвиг фазы вернулся в 0. 13 часов назад, Yaahoo сказал: другой критичной логики, управляющей тактированием Здесь полностью согласен. Вероятно, работу стоит ограничить только с простейшими регистрами. Иначе, все рискует очень сильно усложнится. 13 часов назад, Yaahoo сказал: У скьюинга очень много нюансов Согласен, что даже тот простой пример скрипта нельзя считать автоматизированным и самостоятельным решением, все равно придется "разглядывать руками" ... Или хотя бы выбирать/искать метод валидации изменений. Может GLS (gate level simulation) будет решением. Edited December 4 by GentleFly Quote Share this post Link to post Share on other sites More sharing options...
Yaahoo 3 Friday at 11:14 PM Posted Friday at 11:14 PM (edited) · Report post Посмотрел ваше выступление на ютубе. Конечно, слэк в полтора периода звучит не просто жестко, а даже уже асбсурдно. Но, что дали, с тем и работаем, понимаю. В процессе просмотра возник вопрос: а ретайминг (retiming) вы делать не пробовали? Если вивадо/квартус ретайминг делать не умеет, есть еще читерский метод синтезнуть RTL в диси или генусе - с ретаймингом, а потом закачатъ получившийся нетлист в вивадо, используя RTL описания селлов в качестве библиотеки. Когда то давно я генерил таким образом житаг/тап контроллер в диси, используя встроенные айпи синопсиса, потом выгружал в виде нетлиста, и патчил RTL, чтобы смакетировать это в плис. Проблем никаких, но лучше весь дизайн через диси не пропускайте, только проблемный блок. И в синтезе советую открыть минимальный базис селлов, чтобы потом большую библиотеку не писать. Я понимаю, что вы за свой метод зацепились, но ретайминг как раз для таких кейсов и был придуман. Единственное, я не знаю как потом LEC делать, после ретайминга, не приходилось Edited Friday at 11:18 PM by Yaahoo Quote Share this post Link to post Share on other sites More sharing options...
GentleFly 0 Saturday at 09:45 PM Posted Saturday at 09:45 PM (edited) · Report post 22 часа назад, Yaahoo сказал: а ретайминг (retiming) вы делать не пробовали? Vivado умеет в retiming. Заметного результата не дало, в данном случае. Я же позже увидел путь которой не позволит отработать ни retiming, ни методу предложенному мной. Он был не с таким большим нарушением, спрятался 🙂. Это путь с нарушением, особенность которого заключалась в том что startpoint и endpoint это один и тот же регистр. В данном случае, эти методы не помогут. Retiming не поможет, так как движение регистра по "кольцу комбинационной логики" бесполезно, так как оно останется кольцом с тем же временным путем, вроде 🤔. В любом случае результата не было. То что я предлагаю, в данном случае, тоже не поможет, так как куда не сдвигай этот регистр - мы одновременно двигаем и startpoint и endpoint ... В данном, конкретном, случае у меня остается надежда только на то что мне удастся найти регистры (программные регистры доступные для программистов, по системной шине) которые я "зажму в константу", а дальше VIvado сократит используемую логику и как следствие проблемные пути... Но там работа фоне идет, медленно, посмотрим ... 🙂 22 часа назад, Yaahoo сказал: читерский метод синтезнуть RTL в диси или генусе - с ретаймингом, а потом закачатъ получившийся нетлист в вивадо, Звучит интересно, но в моем случае думаю не поможет, как retiming и в Vivado есть. Место сложное и для ASIC. Там в "генераторе корки", в логе, предупреждение о том что на целевой частоте, после того как закончите с разводкой, луче проконсультироваться с ними (авторами IP), перед производством. Мне даже стало интересно как так получилось что, потребовалось синтезированный нетлист затягивать в Vivado? Vivado синтаксис какой-то в корке не прожевал ? Спасибо за идею! Может как-нибудь пригодиться 🙂 22 часа назад, Yaahoo сказал: Единственное, я не знаю как потом LEC делать, после ретайминга, не приходилось Не уверен что он пройдет, может SEC (Sequential Equivalence Checking) будет уместнее. Обещал приложить ссылку на запись публичного выступления с докладом по предложенному методу: Намеренное искажение тактового древа для увеличения рабочей частоты дизайна Edited Saturday at 09:51 PM by GentleFly Quote Share this post Link to post Share on other sites More sharing options...