Что такое сдвиг часов и почему он может быть отрицательным?

Мой компилятор HDL (Quartus II) генерирует отчеты о времени. В нем узлы имеют столбец «перекос часов». Единственное определение смещения часов, которое я нашел, находится в документации TimeQuest (см. стр. 7-24):

Чтобы вручную задать погрешность синхронизации или перекос для передачи от такта к такту, используйте set_clock_uncertaintyкоманду.

Итак, если перекос — это «неопределенность», почему некоторые из моих перекосов часов отрицательны (например, -0,048)? Что такое сдвиг часов?

Ответы (3)

Из Википедии :

В синхронной схеме перекос часов ( Т С к е ж ) — разница во времени прихода между двумя последовательно-соседними регистрами. Даны два последовательно-соседних регистра р я и р Дж со временем прихода часов на выводы часов регистра как Т С я и Т С Дж соответственно, тогда сдвиг часов можно определить как:

Т С к е ж я , Дж знак равно Т С я Т С Дж

Расхождение часов может быть положительным или отрицательным. Если тактовые сигналы находятся в полной синхронности, то наблюдаемый в этих регистрах сдвиг часов равен нулю.

Таким образом, величина рассогласования часов в одном регистре зависит от другого регистра. Поскольку это относительное значение, оно может быть положительным или отрицательным.

Некоторые иллюстрации:

положительный/отрицательный перекос асимметрия опережения/отставания

Возьмем, к примеру, внутритактовую передачу, как определено в предоставленном вами документе TimeQuest:

Внутритактовые передачи происходят, когда передача от регистра к регистру происходит в ядре устройства, а такты источника и получателя поступают с одного и того же выходного вывода PLL или порта синхронизации.

Таким образом, если регистр назначения физически ближе к схеме генерации тактового сигнала, то тактовый сигнал, вероятно, прибудет в регистр назначения до того, как он достигнет регистра-источника, что приведет к сдвигу опережающего тактового сигнала, который на самом деле положительный. Если бы регистр назначения получил фронт часов после регистра-источника, рассогласование часов было бы запаздывающим или отрицательным.

Другими словами, рассогласование часов — это неопределенность в отношении того, насколько близко друг к другу во времени фронт часов достигнет двух отдельных регистров, заданных в единицах времени по отношению к исходному регистру при передаче от регистра к регистру.

Расширение этого определения за счет включения межтактовых передач, а также времени установки и удержания становится немного запутанным. Поэтому, вероятно, проще думать об этом как о том, «насколько синхронны» фронт или время удержания между двумя регистрами. Мы склонны думать о «синхронном» как о «происходящем одновременно». Но вещи редко происходят абсолютно в одно и то же время. Таким образом, мы должны установить допуск на это время. И допуски часто указываются в виде положительных и отрицательных значений (т.е. ±).

Современные цифровые логические устройства обычно (*) разрабатываются с использованием «практики синхронного проектирования»: глобально синхронный стиль проектирования передачи регистров с запуском по фронту (RTL): все последовательные схемы разбиты на регистры с запуском по фронту, подключенные к глобальному тактовому сигналу CLK. и чистая комбинационная логика.

Этот стиль проектирования позволяет людям быстро проектировать цифровые логические системы независимо от времени. Их система будет «просто работать», пока есть достаточно времени от одного фронта часов до следующего для установления внутреннего состояния.

С этим стилем дизайна перекос часов и другие проблемы, связанные с синхронизацией , не имеют значения, за исключением выяснения «Какова максимальная тактовая частота для этой системы?».

Что такое сдвиг часов?

Например:

...
     R1 - register 1              R3
     +-+                  
   ->| |------>( combinational  )  +-+
...->| |------>(         logic  )->| |--...
   ->|^|------>(                )->|^|
     +-+       (                )  +-+
      |   +--->(                )   |
     CLK  | +->(                )  CLK
          | |
     R2:  | |
     +-+  | |               
...->| |->+ |
   ->|^|->--+
     +-+
      |
     CLK

В реальном аппаратном обеспечении сигнал «CLK» никогда не переключается точно одновременно в каждом регистре. Раскос часов Tskew — это задержка часов нисходящего потока относительно часов восходящего потока ( a ):

Tskew(источник, место назначения) = время_назначения - время_источника

где source_time — это время активного фронта тактового сигнала в исходном регистре восходящего потока (в данном случае R1 или R2), а target_time — это время «того же» активного фронта тактового сигнала в некотором нисходящем регистре назначения (в данном случае R3) .

  • отрицательный сдвиг часов: CLK на R3 переключается раньше часов на R1.
  • положительное смещение часов: CLK на R3 переключается после часов на R1.

Каков эффект смещения часов?

(возможно, приведенная здесь временная диаграмма сделает это более понятным)

Чтобы все работало правильно, даже в худшем случае, входы R3 не должны изменяться в течение времени установки или удержания R3. Хуже того, чтобы что-то работало должным образом, мы должны проектировать вещи таким образом, чтобы:

Tskew(R1, R3) < Tco - Th.

Tclk_min = Tco + Tрасч + 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 каждого регистра. вход 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командой — зачем мне вообще «указывать вручную» перекос?

(*) Одно исключение: асинхронные системы .

Я считаю, что идея добавления задержки для минимизации перекоса часов может иногда включать задержку часов почти на полный цикл. Как только часы запущены и работают, вы можете настроить их так, чтобы триггер A видел край часов 1 в то же самое время, когда триггер B видел край часов 2. С внешней точки зрения, это разные края, но схема не все равно, пока края идеально выровнены.

Перекос часов - это когда часы достигают разных точек цепи в разное время из-за расстояния, емкости и т. д., что может привести к их неисправности. Я думаю, что негатив должен быть, когда часы доходят до этой точки, прежде чем они доберутся до ссылки