Haciendo que el componente combinacional sea sincrónico

2

Tengo una entidad combinacional que se implementa con lot de lógica combinacional. La síntesis (usando Xilinx ISE) indica:

  

Retardo máximo de la ruta combinacional: 62.367ns

Cuando se coloca en un diseño síncrono (sincronizado), la frecuencia máxima a la que puede funcionar todo el sistema (dominio del reloj) es de solo ~ 16 MHz. Esencialmente, este único componente reduciría la velocidad de reloj máxima de todo el sistema.

Lo que quiero hacer, es envolver este componente combinacional en alguna lógica síncrona (con start input, done output), que esencialmente "espera" en el retardo de propagación del componente asíncrono. Básicamente, simplemente se engancha en la entrada, espera N ciclos de reloj y luego engancha la salida a un registro. Sin embargo, después de la síntesis, ISE todavía dice Maximum Frequency: 16.975MHz .

¿Cómo puedo hacer que ISE ignore el retraso de propagación de este dispositivo? O, ¿de qué otra manera puedo atacar esto?

EDITAR:

Me refiero a la combinación en lugar de asíncrono.

Esto es parte de una tarea. Anteriormente, debíamos implementar un módulo factorial en cada uno de "iterativo", "baja latencia" (combinacional) y "alto rendimiento" (etapas registradas). Ahora estamos usando los dos primeros de los núcleos IP para Xilinx XPS system builder. La implementación sincrónica fue muy fácil de usar (¡probablemente porque así se debe hacer!) Por supuesto, las restricciones de tiempo no se cumplen para la versión de baja latencia, por lo que debo agregar lógica para solucionar esto.

Ahora que sé que el término es "Ruta de varios ciclos", los siguientes recursos son útiles:

1 respuesta

3

Supongo que quiere decir que tiene una lógica combinacional (no asíncrona) que representa la ruta de sincronización crítica que limita la frecuencia, ¿no?

Su herramienta de Análisis de tiempo estático (STA) no tiene idea de que le permite a este componente pasar varios ciclos de reloj antes de esperar obtener una salida válida. La síntesis aún cree que la propagación de la etapa de entrada a la etapa de salida debe tener lugar en un solo ciclo de reloj. Hace todo lo posible para optimizar esta ruta, pero aún así, el retraso de propagación es demasiado largo.

Tienes varias opciones:

  1. La mejor opción en estos casos es dividir la ruta combinacional en una ruta más pequeña y agregar un registro para muestrear los resultados intermedios de las rutas reducidas. Esto reducirá los retrasos de propagación, pero agregará latencia: obtendrá el retardo de salida válido por el número de etapas de muestreo.
  2. Si no desea meterse con esta lógica (es demasiado complejo, o está "probado como silicona", o por cualquier otra razón), puede hacer lo que hizo: agregar etapas de muestreo antes y después de la lógica, y agregue lógica de control adicional que sepa cuántos ciclos esperar a los datos válidos (y no permitir que las entradas cambien). Sin embargo, debe comunicar una intención tan inusual a todas las herramientas. Información como esta recibió un nombre general: "restricciones de diseño". Ahora, no sé cómo especificar restricciones de diseño para su FPGA (creo que no le llevará más de 10 minutos entender cómo). ¿Qué restricción necesitas agregar? Este tipo de rutas combinacionales que toman más de un ciclo se denominan "rutas multi-ciclo" (MCP). Encuéntrelo en la documentación de su FPGA \ IDE.

NOTA: hay otra restricción de diseño que puede ayudarlo: "ruta falsa" (FP). Cuando define alguna ruta como FP, ninguna herramienta intentará derivar ningún tiempo para esta ruta. Esto es útil para cosas de DFT, muxes de reloj, etc. Sin embargo, incluso puede estar tentado a usarlo en este caso (los FP son mucho más simples de definir adecuadamente que los MCP), ¡no lo haga! Las restricciones de MCP deben ser validadas por herramientas formales, por lo tanto, si define MCP como FP, está ocultando muchos errores potenciales.

    
respondido por el Vasiliy

Lea otras preguntas en las etiquetas