Cruce de dominio de reloj para pulso y señal de nivel

Para el pulso usamos el sincronizador de pulso y para la señal de nivel usamos el sincronizador de 2 flop, pero ¿qué pasa si la señal puede tener un comportamiento de pulso o nivel? ¿Hay alguna forma de sincronizar eso?

EDITAR:

Después de la respuesta de @Paebbels, hay una modificación en el circuito, debería ser así, la transformación de la señal está en el dominio del reloj tx en lugar del dominio del reloj rx.

ingrese la descripción de la imagen aquí

y su simulación es como a continuación,

ingrese la descripción de la imagen aquí

Pero ahora el problema es transformar el número de ciclos en el lado del reloj tx al lado del reloj rx. Al menos el nivel CDC convergerá al nivel en el dominio del reloj rx, podemos eliminar la restricción del número de transformación del ciclo.

¿Puede mostrar la arquitectura del circuito básico de sus dos sincronizadores? A veces, el sincronizador de 2 o 3 flop puede pasar un pulso si el pulso es ancho en comparación con la velocidad de reloj de los flop. Luego puede aplicar técnicas de detección de bordes en la salida del sincronizador para crear el pulso cuando sea necesario.
@MichaelKaras Quiero que el circuito funcione independientemente de conocer la frecuencia del reloj, por lo que su suposición de generar pulso en el sincronizador de salida no cumple con los criterios.

Respuestas (2)

Puede agregar una detección de bordes al sincronizador de pulso/luz estroboscópica.

¿Cómo funciona un sincronizador de pulso/estroboscópico normal?

  1. Si admite una señal de ocupado, la entrada se bloquea hasta que el circuito esté listo
  2. La señal se transforma de impulso a cambio de nivel mediante un T-FF (D-FF + XOR)
  3. La señal de nivel/bandera se transfiere al otro dominio de reloj mediante 2 D-FF
  4. El impulso es restaurado por otra puerta XOR y un retardo (D-FF)
  5. 2 D-FF más están transfiriendo la señal de regreso al dominio del reloj de origen, por lo que se puede derivar una señal de ocupado (XOR).

¿Qué le puede pasar a este circuito, si los pulsos están formando una señal constante?

El circuito comenzará a alternar y generar muchos pulsos en la salida.

Solución:

Esta alternancia se puede detener agregando una detección de borde en la entrada (D-FF + NOT + AND) o si el remitente cumple con la señal de ocupado.

esquemático

simular este circuito : esquema creado con CircuitLab

Fuente: PoC.misc.sync.Strobe

Gracias por su explicación clara, escribiré el código Verilog y veré si funciona o no, también me aseguraré de que siga las reglas de los CDC y se lo haré saber. Si hay algún problema.
¿Está apuntando a un ASIC? Asegúrese de usar flip-flops adecuados para el sincronizador 2-FF, que son más adecuados para la metaestabilidad. En nuestra solución FPGA, usamos primitivos de proveedor + restricciones (Xilinx) o atributos VHDL (Altera). Por ejemplo, es posible que deba deshabilitar la extracción del registro de desplazamiento; de lo contrario, la síntesis podría combinar estos 2 FF en un pequeño desplazador con propiedades de metaestabilidad más pobres. También estamos utilizando restricciones de ubicación relativas, para restringir la longitud de la ruta entre estos 2 FF. PS Vea nuestros otros módulos de sincronización, para sincronizar señales de más de 1 bit :).
Sí, apunto tanto para ASIC como para FPGA. Pero ahora la preocupación es sólo método, y lo has explicado muy bien.
¿Está seguro de que su bloque de "Transformación de señal" no se verá afectado por la metaestabilidad?
porque la salida de XOR será combinacional y depende de la señal (usted mencionó en ese punto "changed_clk1") que es asíncrono y puede afectar ese FF.
¿Puedes mirar la pregunta editada?
@PrakashDarji Tiene razón, cometí un error en el dibujo, ¡T1 debe ser impulsado por Clock1 no Clock2!
¿Tiene entonces una solución o una idea para la segunda pregunta? ¿Significa que podemos tener nivel en un dominio a otro usando el mismo módulo?
No, eso no es posible, en una solución común. El circuito presentado puede transferir pulsos. Con la detección de flanco ascendente también puede hacer frente a los niveles, porque los niveles se acortan al pulso de flanco ascendente del nivel. Si realmente necesita ambos, entonces necesita un FIFO para transmitir de 1 a n pulsos. Tal vez podría transferir un nivel al usar 2-3 de estos circuitos: 1) transmitir pulso (flanco ascendente), 2) transmitir el segundo ciclo del nivel (la señal aún es alta) 3) flanco descendente de un nivel (necesita detectar la secuencia 1-1-0 => 2 D-FF). 2) activa una S de un RS-FF, 3) activa una R en ese FF.
Entonces, si es un nivel, entonces se activa un RS-FF para mantener el nivel en el lado del receptor, hasta que el nivel baje en el lado del transmisor... otra solución usaría contadores, más o menos. Pero de verdad, debe revisar su diseño cuando una señal puede transportar ambos tipos de señal (pulso y nivel). Que no hay buen diseño :).
¡Sí, estás en lo correcto! Según la aplicación específica, tenemos que seleccionar el mecanismo CDC. Cualquier creo que no hay un mecanismo generalizado para el pulso y el nivel de ambos.
Incluso si pudiera construir un circuito de este tipo, es muy grande para cubrir todos los casos de esquina. También aumenta el tiempo de demora/ida y vuelta de un dominio a otro.
Sí. ¡Yo también pienso lo mismo!

Depende de qué información sobre la señal es importante. Si tiene algo que puede ser un nivel relativamente constante, así como pulsos relativamente cortos que están poco espaciados, entonces lo que debe hacer es usar un FIFO asíncrono y almacenar el valor de la señal en el FIFO cuando cambia. Los sincronizadores de nivel y pulso solo funcionan bien con señales 'escasas' que no cambian muy a menudo. Sin embargo, si sus pulsos tienen al menos varios ciclos de reloj, un sincronizador de nivel podría estar bien.