Вступ
Знайшовши в Інтернеті кілька, іноді суперечливих чи неповних даних про те, як правильно створити обмеження часу у форматі SDC , я хотів би попросити співтовариство EE про допомогу з деякими загальними структурами генерації годин, з якими я стикався.
Я знаю, що існують відмінності в тому, як можна було б реалізувати певну функціональність на ASIC або FPGA (я працював з обома), але я думаю, що повинен бути загальний, правильний спосіб обмеження часу заданої структури , незалежно від основні технології - будь ласка, повідомте мене, якщо я помиляюся на цьому.
Існують також деякі відмінності між різними інструментами для впровадження та тимчасового аналізу різних постачальників (незважаючи на те, що Synopsys пропонує вихідний код парсера SDC), але я сподіваюся, що вони в основному є проблемою синтаксису, яку можна переглянути в документації.
Питання
Йдеться про наступну структуру тактового мультиплексора, яка є частиною модуля clkgen, який знову є частиною більшого дизайну:
У той час як ext_clk
передбачаються , вхід генерується з зовнішньої сторони конструкції (що надходить через вхідний контакт), то clk0
і clk4
сигнали також генеруються і використовуються clkgen модуль (див мого пов'язаного питання пульсації годинник для деталей) і пов'язані годинник обмеження по імені baseclk
і div4clk
, відповідно.
Питання полягає в тому, як вказати такі обмеження, що аналізатор хронометражу
- Розглядає
cpu_clk
як мультиплексований годинник, який може бути одним із вихідних годин (fast_clk
абоslow_clk
абоext_clk
), враховуючи затримки через різні ворота AND і OR - У той же час не розрізаючи шляхи між вихідними годинниками, які використовуються в іншому місці дизайну.
У той час, як найпростіший випадок вбудованого мультиплексора на мікросхемі вимагає лише set_clock_groups
твердження SDC :
set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk}
... в даній структурі це ускладнюється тим, що clk0
(через fast_clk
вихід) і clk4
(через slow_clk
) все ще використовуються в дизайні, навіть якщо cpu_clk
він налаштований так, ext_clk
коли use_ext
стверджується тільки .
Як описано тут , set_clock_groups
команда, як описано вище, спричинить наступне:
Ця команда еквівалентна виклику set_false_path з кожного годинника в кожній групі до кожного годинника в кожній іншій групі і навпаки
... що було б неправильно, оскільки інші годинники досі використовуються в іншому місці.
Додаткова інформація
В use_clk0
, use_clk4
і use_ext
входи генеруються таким чином , що тільки один з них є високим в будь-який момент часу. Хоча це може бути використано для зупинки всіх тактових годин, якщо всі use_*
входи низькі, у центрі уваги цього питання є властивість цієї структури мультиплексування годин.
Х2 екземпляр (простий буфер) в схемі просто місце тримач , щоб виділити проблему автоматичні місця і маршрут інструментів , як правило , бути вільним місце буферів в будь-якому місці (наприклад, між and_cpu_1/z
і or_cpu1/in2
штифти). В ідеалі тимчасові обмеження не повинні впливати на це.