Современные цифровые логические устройства обычно (*) разрабатываются с «практикой синхронного проектирования»: глобально синхронный стиль проектирования передачи с регистрацией по фронту (RTL): все последовательные цепи разбиты на регистры с инициированным фронтом, подключенные к глобальному тактовому сигналу CLK и чистая комбинационная логика.
Этот стиль дизайна позволяет людям быстро проектировать цифровые логические системы без учета времени. Их система будет «просто работать» до тех пор, пока для установления внутреннего состояния достаточно времени от одного фронта часов к другому.
С этим стилем дизайна перекос часов и другие вопросы, связанные с синхронизацией , не имеют значения, за исключением выяснения «Какова максимальная тактовая частота для этой системы?».
Что именно является перекосом часов?
Например:
...
R1 - register 1 R3
+-+
->| |------>( combinational ) +-+
...->| |------>( logic )->| |--...
->|^|------>( )->|^|
+-+ ( ) +-+
| +--->( ) |
CLK | +->( ) CLK
| |
R2: | |
+-+ | |
...->| |->+ |
->|^|->--+
+-+
|
CLK
В реальном оборудовании сигнал "CLK" никогда не переключается точно одновременно на каждом регистре. Часы перекос Tskew является задержка вниз по течению часов по отношению к потоку часов ( ):
Tskew (источник, назначение) = destination_time - source_time
где source_time - это время активного фронта тактового импульса в регистре источника в восходящем направлении (в данном случае R1 или R2), а destination_time - время "того же" фронта активного тактового импульса в некотором регистре назначения в нисходящем направлении (в данном случае R3) ,
- отрицательный перекос часов: CLK на R3 переключается перед часами на R1.
- положительный перекос часов: CLK на R3 переключается после часов на R1.
Каково влияние перекоса часов?
(возможно, временная диаграмма здесь сделает это более ясным)
Чтобы все работало должным образом, даже в худшем случае, входы R3 не должны изменяться во время установки R3 или времени удержания. Иными словами, чтобы вещи работали должным образом, мы должны спроектировать вещи так, чтобы:
Tskew (R1, R3) <Tco - Th.
Tclk_min = Tco + Tcalc + Tsu - Tskew (R1, R3).
где:
- Tcalc - это максимальное время установления в худшем случае любого блока комбинационной логики в любой точке системы. (Иногда мы можем перепроектировать блок комбинационной логики, который находится на критическом пути, выдвигая части вверх или вниз по потоку или вставляя другой этап конвейерной обработки, так что новый дизайн имеет меньшую Tcalc, что позволяет нам увеличить тактовую частоту) ,
- Tclk_min - минимальный период времени от одного активного фронта часов до следующего активного фронта часов. Мы рассчитываем это из приведенного выше уравнения.
- Tsu - время установки регистра. Производитель регистра ожидает, что мы будем использовать часы достаточно медленные, чтобы всегда соответствовать этому требованию.
- Th - время удержания регистра. Производитель регистров ожидает, что мы будем контролировать перекос часов, чтобы всегда соответствовать этому требованию.
- Tco - задержка времени на выходе (время распространения). После каждого активного фронта тактового сигнала R1 и R2 продолжают вводить старые значения в комбинационную логику в течение короткого времени Tco перед переключением на новые значения. Это устанавливается аппаратным обеспечением и гарантируется производителем, но только при условии соблюдения Tsu и Th и других требований, которые производитель устанавливает для нормальной работы.
Слишком сильный позитивный перекос - это полная катастрофа. Слишком много положительного перекоса может (с некоторыми комбинациями данных) вызывать «пути утечки», так что вместо того, чтобы R3 фиксировал «правильные данные» в тактовые импульсы N + 1 (детерминированная функция данных, ранее зафиксированных в R1 и R2 в тактовых импульсах N) новые данные, зафиксированные в R1 и R2 в тактовом сигнале N + 1, могут просачиваться, нарушать комбинационную логику и вызывать фиксацию неправильных данных в R3 на «том же» фронте тактового сигнала N + 1.
Любое количество отрицательного перекоса может быть «исправлено» путем замедления тактовой частоты. Это только «плохо» в том смысле, что это заставляет нас запускать систему с более низкой тактовой частотой, чтобы дать входам R3 время для установления после того, как R1 и R2 фиксируют новые данные на фронте N тактовых импульсов, а затем позже R3 фиксирует результат на «следующем» фронте тактовой частоты N + 1.
Многие системы используют сеть распределения тактовых импульсов, которая пытается уменьшить перекос до нуля. Неудобно, путем тщательного добавления задержек вдоль тактового пути - пути от тактового генератора к входу CLK каждого регистра - можно увеличить кажущуюся скорость, с которой фронт фронта синхросигнала физически перемещается от входа CLK одного регистра к CLK вход следующего регистра, чтобы быстрее, чем скорость света.
В документации Altera упоминается
«Избегайте использования комбинационной логики в путях синхронизации, потому что это способствует перекосу часов».
Это относится к тому факту, что многие люди пишут HDL, который компилируется в FPGA таким способом, который каким-то образом вызывает что-то кроме глобального сигнала CLK для управления локальным входом CLK некоторых регистров. (Это может быть логика «стробирования тактовых импульсов», так что новые значения загружаются в регистр только при соблюдении определенных условий; или логика «делителя тактовых импульсов», которая пропускает только 1 из N тактов, или т. Д.). Этот локальный CLK обычно получается как-то из глобального CLK - тикает глобальный CLK, а затем либо локальный CLK не меняется, либо (небольшая задержка после того, как глобальный CLK пропускает сигнал через это «что-то другое») локальный CLK меняется один раз.
Когда это «что-то другое» управляет CLK нижестоящего регистра (R3), это делает перекос более позитивным. Когда это «что-то другое» управляет CLK вышестоящего регистра (R1 или R2), это делает перекос более отрицательным. Время от времени, что бы ни управляло CLK вышестоящего регистра, и то, что управляет CLK нижестоящего регистра, имеют практически одинаковую задержку, что делает перекос между ними практически нулевым.
Сеть распределения тактовых импульсов внутри некоторых ASIC специально разработана с небольшим количеством положительного сдвига тактовой частоты в некоторых регистрах, что дает комбинационной логике немного больше времени для установления, и поэтому вся система может работать с более высокой тактовой частотой. Это называется «оптимизацией перекоса часов» или «планированием асимметрии часов» и связано с « ретаймингом ».
Я все еще озадачен set_clock_uncertainty
командой - зачем мне когда-либо хотеть «вручную» указать перекос?
(*) Единственное исключение:
асинхронные системы .