O que é o desvio do relógio e por que ele pode ser negativo?

10

Meu compilador HDL (Quartus II) gera relatórios de tempo. Nele, os nós possuem a coluna "clock skew". A única definição de inclinação do relógio que encontrei está na documentação do TimeQuest (na página 7-24):

Para especificar manualmente a incerteza do relógio, ou inclinação, para transferências relógio a relógio, use o set_clock_uncertaintycomando

Portanto, se a inclinação é "incerteza", por que alguns dos meus desvios do relógio são negativos (por exemplo, -0,048)? O que exatamente é o desvio do relógio?

Randomblue
fonte

Respostas:

8

Da Wikipedia :

Em um relógio de circuito síncrono, a inclinação ( ) é a diferença no tempo de chegada entre dois registros sequencialmente adjacentes. Dado dois registradores seqüencialmente adjacentes e com horários de chegada do relógio nos pinos do relógio do registrador como e respectivamente, a inclinação do relógio pode ser definida como: R i R j T C i T C jTSkewRiRjTCiTCj

TSkewi,j=TCiTCj

A inclinação do relógio pode ser positiva ou negativa. Se os sinais do relógio estiverem em completa sincronicidade, o desvio do relógio observado nesses registros será zero.

Portanto, a quantidade de inclinação do relógio em um registro é relativa a outro registro. Como é relativo, pode ser positivo ou negativo.

Algumas ilustrações:

inclinação positiva / negativa inclinação de avanço / atraso

Tomemos, por exemplo, uma transferência intraclock, conforme definido no documento TimeQuest que você forneceu:

As transferências entre bloqueios ocorrem quando a transferência de registro para registro ocorre no núcleo do dispositivo e os relógios de origem e destino vêm do mesmo pino de saída PLL ou porta de relógio.

Portanto, se o registro de destino estiver fisicamente mais próximo dos circuitos de geração de relógio, provavelmente o relógio chegará ao registro de destino antes de chegar ao registro de origem, resultando em uma inclinação do relógio principal que é realmente positiva. Se o registro de destino receber a borda do relógio após o registro de origem, a inclinação do relógio ficará atrasada ou negativa.

Dito de outra maneira, a inclinação do relógio é a incerteza sobre a proximidade do tempo em que uma borda do relógio atingirá dois registros separados, dados em unidades de tempo, em relação a um registro de origem em uma transferência de registro para registro.

A expansão dessa definição para incluir transferências entre horários e tempo de configuração e espera fica um pouco confusa. Portanto, é provavelmente mais fácil pensar nisso como "quão síncrona" uma borda ou um tempo de espera é entre dois registros. Tendemos a pensar em "síncrono" como "ocorrendo ao mesmo tempo". Mas as coisas raramente ocorrem exatamente ao mesmo tempo. Então, precisamos colocar uma tolerância nesse momento. E as tolerâncias são freqüentemente declaradas em termos de positivo e negativo (ou seja, ±).

Embedded.kyle
fonte
10

Os dispositivos lógicos digitais modernos são geralmente (*) projetados com "prática de projeto síncrona": um estilo de design de transferência de registro (RTL) acionado por borda síncrona globalmente: todos os circuitos sequenciais são divididos em registradores acionados por borda conectados ao sinal de relógio global CLK e lógica combinacional pura.

Esse estilo de design permite que as pessoas projetem rapidamente sistemas lógicos digitais sem levar em consideração o tempo. O sistema deles "funcionará" desde que haja tempo suficiente de uma extremidade do relógio para a próxima para que o estado interno se estabilize.

Com esse estilo de design, a inclinação do relógio e outros problemas relacionados ao tempo são irrelevantes, exceto para descobrir "Qual é a taxa máxima de clock para este sistema?".

O que exatamente é o desvio do relógio?

Por exemplo:

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

Em hardware real, o sinal "CLK" nunca muda exatamente ao mesmo tempo em todos os registros. A inclinação do relógio Tskew é o atraso do relógio a jusante em relação ao relógio a montante ( a ):

Tskew (origem, destino) = hora_do_destino - hora_de_origem

em que source_time é o horário de uma borda do relógio ativa no registro de origem (neste caso, R1 ou R2), e destination_time é o horário da "mesma" borda do relógio ativo em algum registro de destino a jusante (nesse caso, R3) .

  • inclinação negativa do relógio: o CLK em R3 muda antes do relógio em R1.
  • inclinação positiva do relógio: o CLK em R3 muda após o relógio em R1.

Qual é o efeito da inclinação do relógio?

(talvez um diagrama de tempo aqui torne isso mais claro)

Para que as coisas funcionem corretamente, mesmo no pior caso, as entradas do R3 não devem mudar durante o tempo de configuração ou o tempo de espera do R3. Em outro caso, para que as coisas funcionem corretamente, precisamos projetar coisas que:

Tskew (R1, R3) <Tco - Th.

Tclk_min = Tco + Tcalc + Tsu - Tskew (R1, R3).

Onde:

  • Tcalc é o tempo máximo de acomodação, no pior dos casos, de qualquer bloco de lógica combinatória em qualquer lugar do sistema. (Às vezes, podemos reprojetar o bloco de lógica combinacional que está no caminho crítico, empurrando as peças para montante ou para jusante ou inserindo outro estágio de pipelining, para que o novo design tenha um Tcalc menor, o que nos permite aumentar a taxa de clock) .
  • Tclk_min é o período mínimo de tempo de um limite do relógio ativo até o próximo limite do relógio ativo. Nós calculamos a partir da equação acima.
  • Tsu é o tempo de configuração do registro. O fabricante do registro espera que usemos um relógio lento o suficiente para sempre atender a esse requisito.
  • Th é o tempo de espera do registro. O fabricante do registro espera que controlemos a inclinação do relógio o suficiente para sempre atender a esse requisito.
  • Tco é o atraso do relógio para a saída (tempo de propagação). Após cada borda do relógio ativo, R1 e R2 continuam a direcionar os valores antigos para a lógica combinacional por um curto período de tempo antes de mudar para os novos valores. Isso é definido pelo hardware e garantido pelo fabricante, mas apenas enquanto atendermos aos requisitos de Tsu e Th e outros requisitos especificados pelo fabricante para operação normal.

Muita inclinação positiva é um desastre absoluto. Muita inclinação positiva pode (com algumas combinações de dados) causar "sneak caminhos", de modo que, em vez de R3 travar os "dados corretos" no relógio N + 1 (uma função determinística dos dados anteriormente travados em R1 e R2 no relógio N) , os novos dados travados em R1 e R2 no relógio N + 1 podem vazar, perturbar a lógica combinacional e fazer com que dados incorretos sejam travados em R3 na "mesma" borda do relógio N + 1.

Qualquer quantidade de inclinação negativa pode ser "fixa" diminuindo a velocidade do relógio. É apenas "ruim" no sentido em que nos obriga a executar o sistema em uma taxa de clock mais lenta, a fim de dar às entradas de R3 tempo para se estabelecerem depois que R1 e R2 travam novos dados na borda do relógio N e depois R3 trava o resultado na "próxima" borda do relógio N + 1.

Muitos sistemas usam uma rede de distribuição de clock que tenta reduzir o desvio para zero. Contra-intuitivamente, adicionando cuidadosamente atrasos ao longo do caminho do relógio - o caminho do gerador de relógio para a entrada CLK de cada registro - é possível aumentar a velocidade aparente que a frente de onda da borda do relógio viaja fisicamente da entrada CLK de um registro para o entrada CLK do próximo registro para mais rápido que a velocidade da luz.

A documentação da Altera menciona

"Evite usar a lógica combinacional nos caminhos do relógio, pois contribui para o desvio do relógio".

Isso se refere ao fato de que muitas pessoas escrevem HDL que são compiladas em um FPGA de uma maneira que de alguma forma faz com que algo diferente do sinal CLK global direcione a entrada CLK local de alguns registros. (Pode ser uma lógica de "clock gating"), de modo que novos valores sejam carregados em um registro somente quando determinadas condições forem atendidas; ou lógica de "divisor de clock" que permite apenas 1 entre N relógios, etc.). Esse CLK local geralmente é derivado do CLK global de alguma forma - o CLK global funciona e, em seguida, o CLK local não muda, ou (um pequeno atraso após o CLK global para o sinal se propagar através desse "algo diferente") o CLK local muda uma vez.

Quando essa "outra coisa" aciona o CLK do registrador a jusante (R3), torna a inclinação mais positiva. Quando esse "algo diferente" aciona o CLK do registro upstream (R1 ou R2), torna a inclinação mais negativa. Ocasionalmente, o que aciona o CLK do registro upstream e o que aciona o CLK do registro downstream têm praticamente o mesmo atraso, tornando a inclinação entre eles praticamente zero.

A rede de distribuição de clock dentro de alguns ASICs é projetada deliberadamente com pequenas quantidades de inclinação positiva de clock em alguns registros, o que dá à lógica combinacional upstream um pouco mais de tempo para resolver e, portanto, todo o sistema pode ser executado em uma taxa de clock mais rápida. Isso é chamado de "otimização da inclinação do relógio" ou "agendamento da inclinação do relógio" e está relacionado à " reimpressão ".

Ainda estou confuso com o set_clock_uncertaintycomando - por que eu desejaria "especificar manualmente" a inclinação?

(*) Uma exceção: sistemas assíncronos .

davidcary
fonte
Acredito que a idéia por trás da adição de atraso para minimizar a distorção do relógio às vezes pode envolver o atraso do relógio em quase um ciclo completo. Uma vez que o relógio esteja funcionando, você pode configurá-lo para que o flip-flop A veja a borda do relógio 1 ao mesmo tempo exato, o flip-flop B veja a borda do relógio 2. De uma visão externa, são bordas diferentes, mas o circuito não se importa desde que as bordas estejam perfeitamente alinhadas.
precisa saber é
1

inclinação do relógio é quando o relógio chega a diferentes pontos do circuito em momentos diferentes devido à distância, capacitância etc., o que pode causar mau funcionamento. Eu acho que o negativo deve ser quando o relógio chega a esse ponto antes de chegar à referência

user12108
fonte