Пожалуйста, поправьте меня, если я ошибаюсь. Обычно я читал, что для стробирования FPGA главные часы являются плохой практикой проектирования и что следует использовать главные часы и активировать часы всякий раз, когда схеме требуются разделенные часы, и использовать PLL для умножения главных часов.
Применяются ли те же принципы и к конструкциям ASIC?
Каковы безопасные методы проектирования, когда схема нуждается в разделенных или умноженных тактовых импульсах?
Чтобы ответить на ваш вопрос, те же рекомендации не применяются к ASIC, и стробируемые часы очень часто используются для снижения энергопотребления.
В FPGA тактовые сигналы имеют выделенные ресурсы маршрутизации, которые обеспечивают доставку тактовых импульсов с малым перекосом в довольно большие области схем. Если вы попытаетесь стробировать тактовый сигнал, то выход логического элемента, вероятно, будет вынужден использовать ресурсы маршрутизации обычных логических сигналов, что может привести к значительным задержкам и вызвать большие расхождения тактовых импульсов. FPGA разрабатываются с некоторыми предположениями о том, как должна выполняться логическая схема, и одно из этих предположений заключается в том, что вы используете сигналы разрешения тактирования, а не стробированные тактовые импульсы. Для обычных FPGA энергопотребление в любом случае огромно, поэтому нет особой мотивации для стробирования тактовых импульсов.
ASIC — это совсем другой зверь. Когда вы проектируете ASIC, у вас есть полный контроль над воротами и проводами. Вы можете безопасно создать стробируемый тактовый сигнал и убедиться, что стробируемый тактовый сигнал распределяется правильно. Это очень распространенный метод минимизации энергопотребления. Например, посмотрите на современный микроконтроллер, и вы увидите, что вы можете программно включать и выключать тактовый сигнал для больших блоков схемы, таких как UART. Недостатком является то, что разработчики ASIC должны использовать очень дорогие и сложные инструменты временного анализа, чтобы сделать это правильно.
Краткий ответ: закрытые часы очень плохи.
По возможности избегайте использования нескольких часов (называемых доменами часов).
Исследуйте и внедрите пересечение часовых доменов, когда это невозможно.
Узнайте о доменах синхронных часов (связанных часах) и доменах асинхронных часов.
Узнайте о метастабильности.
Длинный ответ:
вы правы, настоятельно рекомендуется использовать одиночные часы, а затем передавать разрешающие сигналы в вашем проекте компонентам, которые должны быть выключены или включены условно, а не стробировать часы. Вы также можете использовать сигнал включения, как вы предложили, чтобы запустить раздел на более низкой тактовой частоте - подробнее об этом позже.
Идея состоит в том, чтобы свести к минимуму количество доменов часов и минимизировать количество пересечений доменов часов. Это абсолютно справедливо как для ASIC, так и для FPGA и даже для дискретных логических схем.
Когда вся логика выполняется с одними и теми же часами (без тактов), вся логика обновляется одновременно (с небольшой задержкой, называемой рассогласованием часов).
Это здорово, потому что вы можете быть уверены, что все входы во все ваши регистры были правильно настроены с достаточным временем, чтобы быть действительными для следующих часов, и вы знаете, что все выходы регистров будут действительны после того, как часы сработают. Это основы синхронного дизайна.
Когда у вас есть два связанных события, которые происходят на разных часах, даже если они тесно связаны (например, чтение регистра из другого регистра, но с часов со стробированием), существует риск того, что данные могут быть повреждены при их передаче. Это называется метастабильностью.
Если вам нужно более одного тактового генератора, тщательно определите, что должно происходить в каждом домене тактового генератора, и каковы требования к связи устройства. Вам нужно отправлять данные в обоих направлениях или вам нужно отправлять данные только с более быстрых часов на более медленные? Или, может быть, более медленные часы к более быстрым? Сколько данных мне нужно отправить и как часто я должен их отправлять?
Для каждого из этих случаев существует междоменное решение, и каждое решение немного отличается. К счастью, вам не нужно заново изобретать велосипед (хотя вам, вероятно, придется его переписать)
У FPGA 4 fun есть отличное введение в это:
http://www.fpga4fun.com/CrossClockDomain.html
Тим
Трэвисбартли
нурабха
Трэвисбартли
нурабха
Василий