El sincronizador de cuatro fases presentado es una implementación correcta y correcta.
Solo tiene una desventaja:
Tiene una entrada V
, para notificar al sincronizador las entradas modificadas.
Esto se puede automatizar mediante un registro de n bits en el dominio del reloj de origen y el comparador de n bits: si se cambia la entrada, afirmar V=1
.
Input_d <= Input when rising_edge(Clock);
V <= '1' when (Input_d /= Input) else '0'; -- input changed
La implementación de un sincronizador de 2 FF, el núcleo de cada sincronizador de nivel superior, con los atributos y restricciones requeridos, se puede encontrar de la siguiente manera:
¿Qué es tan especial en comparación con las chancletas dobles normales?
- Deshabilita la extracción del registro de desplazamiento (
SHREG_EXTRACT = NO
). La síntesis intenta encontrar cadenas de chanclas y colocarlas en registros de turnos dedicados como Xilinx SRL32
. Estos desplazadores dedicados no son buenos para entradas meta estables.
- Marque los registros como registros asíncronos (
ASYNC_REG = TRUE
). Esto es necesario para que las simulaciones posteriores a la síntesis supriman los valores metaestables.
- Coloque registros cerca uno del otro (
RLOC = X0Y0
). Esto coloca el sincronizador 2-FF en la misma porción.
-
Los flip flops tienen nombres únicos y se colocan en un grupo de tiempo especial llamado METASTABILITY_FFS
. Restricciones de Xilinx:
INST "*FF1_METASTABILITY_FFS" TNM = "METASTABILITY_FFS";
Todas las rutas de tiempo desde un FF normal a un FF metaestable se ignoran, a través de la restricción TIG
.
NET "*_async" TIG;
INST "*_meta*" TNM = "METASTABILITY_FFS";
TIMESPEC "TS_MetaStability" = FROM FFS TO "METASTABILITY_FFS" TIG;
Fuentes: sync_Bits_Xilinx.ucf , Metastability.ucf
Editar: sincronizador 2-FF específico de Altera:
Agregué una nueva declaración de generación en genérico 2-FF implementación, para elegir una implementación específica de Altera: sync_Bits_Altera.vhdl
¿Qué tiene de especial esta versión?
- Ambos flip flops están marcados con
PRESERVE
para dificultar las optimizaciones.
-
El primer / el flip-flop metaestable se anota con:
attribute ALTERA_ATTRIBUTE of Data_meta : signal is "-name SYNCHRONIZER_IDENTIFICATION ""FORCED IF ASYNCHRONOUS""";
para marcar este flip flops como un circuito sincronizador.
-
Todas las rutas a estos registros se establecen como false_path
:
attribute ALTERA_ATTRIBUTE of rtl : architecture is "-name SDC_STATEMENT ""set_false_path -to [get_registers {*|sync_Bits_Altera:*|\gen:*:Data_meta}] """;
Esta es la sintaxis de anotación de restricción SDC en línea.
Sincronizadores de nivel superior:
Por causa, PoC-Library también tiene un sincronizador predefinido para los vectores de bits llamado PoC.misc.sync.Vector , que se basa en el sincronizador genérico 2-FF. Si los bits maestros cambian, todos los bits se transfieren al dominio del reloj del receptor.