Estoy escribiendo un controlador para un módulo DDR móvil/de baja potencia en mi FPGA. Para permitir la depuración, uso un modelo funcional escrito en Verilog. En él, el tiempo de configuración y espera para 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 del reloj.
Sin embargo, el RTL que he escrito no incluye el tiempo, por lo que la señal parece cambiar instantáneamente, lo que genera advertencias de tiempo de espera.
Por un lado, no me preocupa demasiado; Solo recibo advertencias, y creo que durante un proyecto para mi universidad, nos dijeron 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 ningún propósito. Dado que 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 tal vez estoy haciendo las cosas demasiado simples aquí).
Seguro que hay más gente con el mismo problema. ¿Cuál es la forma correcta de manejar estas advertencias?
Editar: En esta página , encontré más información. Puede generar un modelo de simulación posterior al mapa o posterior al lugar y la ruta. Sospecho que esto incluye los tiempos. Sin embargo, parece que solo modelsim puede realizar la simulación.
Aclaración: Idealmente, sería capaz de sintetizar (o al menos llegar lo más lejos posible en el proceso de generar el diseño) mi parte del diseño (tengo el RTL y he especificado la placa, así que creo que 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.
Como señaló dave_59, las comprobaciones de tiempo en RTL no son muy significativas. Dicho esto, aquí hay 4 enfoques posibles:
`ifdef ... `endif
) alrededor de sus controles de tiempo; controles de tiempo deshabilitados con RTL<=
) a <= `D
, donde `D
está su retraso (ex `define D #2
)
`D
como vacío (también conocido como `define D
)$setuphold( D, CLK &&& actiming_enable, tSETUP, tHOLD);
Las comprobaciones de tiempo de configuración y retención solo tienen sentido con la información posterior al diseño. Hace un siglo, se podía realizar un análisis de tiempo sin información estructural del diseño porque los retrasos del dispositivo eran abrumadores en comparación con los retrasos en el enrutamiento. Ya no puede realizar un análisis de tiempo preciso con el código RTL.
Algunos modelos están escritos para usarse tanto en RTL como en simulaciones estructurales, por lo que puede ignorar estas advertencias. Aún mejor sería desactivar las comprobaciones de tiempo que mejoran el rendimiento de la simulación RTL (tal vez no sea relevante en su proyecto, pero eso es lo que hace la gente en la industria).
Debería haber alguna forma de ingresar un retraso de tiempo.
Esto podría hacerse de un par de maneras en las que puedo pensar (tal vez más):
La mayoría de estos implicarán modificar la representación de alguna puerta o búfer para incluir un retraso. Si está utilizando .libs para la caracterización, puede configurar toda la tabla de carga/giro/retraso en un valor predeterminado de 2 ns.
Rubén
greg