Detección de bordes simultáneos de dos relojes asíncronos

3

Esta pregunta se hizo inicialmente en StackOverflow como una pregunta de Verilog, pero, eventualmente, se convirtió en más hardware que discusión de software.

La pregunta: cómo se pueden detectar los bordes simultáneos (positivos) de dos relojes asíncronos en un circuito digital.

La pregunta original no contenía ninguna información sobre cuánto tiempo es "simultáneo", por lo que sus sugerencias e ideas al respecto también son bienvenidas. Para mayor claridad, definamos "simultáneo" como 0.5 o 0.25 veces el período del reloj más lento.

Una de las soluciones propuestas utiliza configuraciones de flip-flop no estándar descritas en las siguientes patentes: US6320442 B1 , < a href="http://www.google.com/patents/US5793236"> US5793236 A , US5327019 A . ¿Es este enfoque 100% seguro o aún existe la posibilidad de pasar por alto el evento en cuestión (debido a la metastabilidad interna, o cualquier otra razón)?

¿Existe un enfoque estándar para tratar este tipo de tareas?

EDIT:

Se sugirieron pocas soluciones, pero ninguna mostró explícitamente cómo la información sobre la ocurrencia de bordes simultáneos puede ser alimentada (de manera confiable) a la lógica digital. Tenga en cuenta que (esencialmente) esta es la pregunta, y cualquier solución que no aborde este tema está incompleta.

    
pregunta Vasiliy

3 respuestas

1

No creo que esto deba ser difícil. Suponiendo que tiene un reloj maestro que es más rápido que cualquiera de los relojes asíncronos, todo lo que necesita son 2 conjuntos de sincronizadores dobles y una máquina de estado que se ejecuta en el dominio del reloj maestro para "detectar" eventos. Esta configuración dará una resolución de 2 ciclos en el dominio del reloj maestro para la definición de "simultáneo". Así que eso dictará lo que debe ser el reloj maestro de frecuencia mínima.

simular este circuito : esquema creado usando CircuitLab

Es absolutamente importante que ClkA y Clkb sean verdaderas señales de reloj sin transitorios. Si se denominaran señales simples, agregaría un flip flop frente al sincronizador en ese dominio de reloj como tal.

simular este circuito

La máquina de estado debe ser directa en la que las transiciones de 00 a 11 o 00- > 01 / 10- > 11 se produzcan en 1 o 2 ciclos.

    
respondido por el mj6174
2

La forma más simple de hardware puro sería el circuito a continuación.

simular este circuito : esquema creado usando CircuitLab

Esto funciona porque hay un retraso de propagación a través de los inversores. Durante ese retardo de propagación, las dos entradas inferiores seguirán siendo altas, pulsando la salida de la puerta NAND. Solo tiene que hacer que el retardo de propagación sea lo suficientemente largo para satisfacer los tiempos de configuración y retención de la NAND, pero lo suficientemente corto para que se descargue completamente entre los ciclos de reloj.

Es sensible al tiempo pero definitivamente se puede hacer. La gente lo hace por accidente todo el tiempo.

    
respondido por el Karl Bielefeldt
1

He editado mi respuesta para mostrar el diagrama del circuito con más detalle y también para cubrir las preguntas en los comentarios de David Kessner y Vasiliy Zukanov: -

Seutilizandospuertas;lacompuertaORtienequeserceroantesdequesecebeuntemporizadorsincronizadoconloquehellamado"super reloj". Una vez que está preparado, comienza a contar tan pronto como CLK1, CLK2 o ambos suban.

Finaliza el tiempo tan pronto como se detecta un cero en la salida de la puerta EXOR.

2nd EDIT para proporcionar información que sea un poco más clara.

Super-reloj es un reloj que funciona significativamente más alto que CLK1 o CLK2. El período de super reloj es mucho más pequeño que el período de CLK1 o CLK2.

Si el temporizador no cuenta para nada después de ser cebado y activado, es porque la diferencia de tiempo de borde positivo entre CLK1 y CLK2 es insignificante.

Si cuenta hasta 1 y no más, se puede suponer que el retardo de tiempo entre CLK1 y CLK2 está entre cero y el período de un super reloj, es decir, aún es insignificante. Si cuenta hasta dos o más, se puede tomar de forma arbitraria ya que los dos relojes no aumentan de forma sincrónica.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas