Advertencias de tiempo para el modelo funcional

1

Estoy escribiendo un controlador para un módulo DDR de baja potencia / móvil en mi FPGA. Para permitir la depuración, uso un modelo funcional escrito en Verilog. En él, el tiempo de configuración y retención de alguna señal se establece en 1.5 ns. Si entiendo todo correctamente, esto significa que la señal no puede cambiar 'dentro de' 1.5 ns de un flanco ascendente de reloj.

Sin embargo, el RTL que he escrito no incluye el tiempo, por lo que la señal parece cambiar instantáneamente, lo que produce advertencias de tiempo de espera.

Por un lado, no estoy demasiado preocupado; Solo estoy recibiendo advertencias, y creo que durante un proyecto para mi universidad, se nos dijo que simplemente ignoráramos estos errores.

Por otro lado, no me gusta ignorar las advertencias. El fabricante no habría implementado estas advertencias si no tuvieran un propósito. Como Xilinx ISE puede verificar las restricciones de tiempo, creo que debería ser posible enrutar y mapear mi diseño, y usar los tiempos generados de alguna manera (pero quizás estoy simplificando las cosas aquí).

Estoy seguro de que hay más personas con el mismo problema. ¿Cuál es la forma correcta de lidiar con estas advertencias?

Editar: en esta página , encontré algo más de información. Puede generar un modelo de simulación de mapa posterior o de lugar y ruta. Sospecho que esto incluye los tiempos. Sin embargo, parece que solo modelsim puede realizar la simulación.

Aclaración: idealmente, podría sintetizar (o al menos llegar tan lejos en el proceso de generar el diseño como sea posible) mi parte del diseño (tengo el RTL y he especificado el tablero, así que creo esto debería ser posible), luego combínelo en un banco de pruebas con el modelo funcional para probar si mi diseño tiene los retrasos de tiempo adecuados. Sin embargo, no puedo hacer que esto funcione en Xilinx ISE 14.7.

    
pregunta Ruben

3 respuestas

0

Como señaló dave_59, las comprobaciones de tiempo en RTL no son muy significativas. Dicho esto, aquí hay 4 enfoques posibles:

  1. No compile las comprobaciones de tiempo con RTL
  2. Use una macro de directiva de compilación ( 'ifdef ... 'endif ) alrededor de sus verificaciones de tiempo; verificaciones de tiempo deshabilitadas con RTL
  3. Inyecte el tiempo de espera en el comportamiento de RTL cambiando todas las asignaciones de flop ( <= ) a <= 'D , donde 'D es su retraso (ex 'define D #2 )
    • Idea de NBA con retrasos , por Cliff Cummings
    • Para sintetizar, defina 'D como vacío (también conocido como 'define D )
  4. Hackea tus fichas para tener un atributo de enmascaramiento. ej .:
    $setuphold( D, CLK &&& actiming_enable, tSETUP, tHOLD);
respondido por el Greg
2

Las verificaciones de configuración y retención solo tienen sentido con la información posterior al diseño. Hace un siglo, se podía hacer un análisis de tiempo sin información estructural de diseño porque los retrasos del dispositivo eran abrumadores en comparación con los retrasos de enrutamiento. Ya no puede hacer un análisis preciso de tiempo con el código RTL.

Algunos modelos están escritos para ser usados tanto en RTL como en simulaciones estructurales, por lo que puede ignorar estas advertencias. Aún mejor sería desactivar las verificaciones de tiempo que mejoran el rendimiento de la simulación RTL (quizás no sea relevante en su proyecto, pero eso es lo que hace la gente en la industria).

    
respondido por el dave_59
0

Debería haber alguna forma de ingresar un retardo de tiempo.

Esto podría hacerse de un par de formas en las que puedo pensar (quizás más):

  • Modifique el flip flop de inicio para tener un retardo de salida de reloj que sea mayor que el tiempo de espera del flip flop de captura.
  • Modifique el modelo de flip flop para tener un tiempo de espera de -.1ns.
  • Modifique cualquier puerta (como un búfer) para que tenga un retraso fijo de 1.6ns y ponga esto antes de cada flip flop de captura.
  • Cambia la señal del reloj en el flip flop de captura (segundo flop que experimenta la violación de retención) al menos 1.5ns en relación con el reloj de lanzamiento (va al primer flip flop).

La mayoría de estos implicará modificar la representación de alguna puerta o búfer para incluir un retraso. Si está utilizando .libs para la caracterización, puede configurar la tabla completa de carga / desplazamiento / retardo en un valor predeterminado de 2ns.

    
respondido por el jbord39

Lea otras preguntas en las etiquetas