Fpga Señales de cruce entre dominios de reloj relacionados

2

Tengo un diseño de fpga con dos relojes, uno es de 54MHz y el otro es un reloj dividido por 4 de los 54MHz, este es un reloj de 13.5MHz.

El reloj de 13.5MHz se genera al dividir el reloj de 54MHz en vhdl, y alimentarlo a través de un búfer de reloj interno con alto abanico. El fpga en el que trabajo no tiene PLLs.

¿Tengo que preocuparme por la metastabilidad cuando las señales cruzan los dominios de reloj relacionados?

    
pregunta JakobJ

1 respuesta

1

No, no tiene que preocuparse por la metaestabilidad, pero sí necesita asegurarse de limitar los relojes adecuadamente. Muchas de las herramientas modernas de Análisis de Temporización Estática de FPGA (STA) tienen comandos para ayudar a restringir los relojes relacionados.

No mencionaste qué proveedor estás usando. Por ejemplo, el proceso para Altera sería especificar una restricción de reloj en el reloj de origen de 54MHz como lo haría normalmente, y luego usar "create_generated_clock" para el reloj más lento como se muestra a continuación.

create_clock -name {clk} -period 18.518 [get_ports {clk}]
create_generated_clock -name {clk4} -source [get_ports {clk}] -divide-by 4 -master_clock {clk} [get_keepers {clk_div_4}]

Tenga en cuenta que no especificamos la frecuencia para el reloj más lento. Solo le dijimos a la herramienta STA que es la frecuencia del reloj de origen dividido por 4. Si sigue este enfoque, la herramienta STA tomará en cuenta adecuadamente las latencias de los relojes de origen y derivados.

Para verificar que las cosas funcionan como lo desea, a menudo es útil simplemente usar la herramienta STA para informar el tiempo entre los registros que cruzan el dominio y ver si los resultados coinciden con sus expectativas. Nuevamente, no está seguro de qué proveedor está utilizando, pero probablemente querrá buscar comandos como "informe de transferencias de reloj" o "árbol de reloj de informe".

En cuanto a si su enfoque es bueno o no, ya que funciona con todos los 54MHz, eso depende de los detalles de su diseño y no hay una respuesta correcta. Cualquiera de los dos enfoques es aceptable en varias situaciones. Por ejemplo, si ejecuta todo el diseño a una frecuencia más alta, entonces no tiene que preocuparse por los cruces de reloj, pero su código puede ser mucho más complicado debido a la canalización o al uso de rutas de múltiples ciclos. Sin embargo, si es solo una pequeña parte de su diseño que desea ejecutar en un reloj más lento, tal vez sería mejor hacer el trabajo extra para canalizarlo en lugar de tratar con el segundo dominio de reloj.

    
respondido por el David Gardner

Lea otras preguntas en las etiquetas