Tengo un camino de datos síncrono en mi diseño que falla la verificación negativa de la sincronización, y lo más probable es que pueda corregirlo poniendo registros adicionales en la tubería entre los bloques de datos al cambiar las fuentes de RTL.
También he intentado restringir la ruta de varios ciclos como esta (hizo un proyecto de prueba simple para descubrir cómo funcionan las restricciones de tiempo, son nuevas para mí):
# tell the router that 'do' should be 5 cycles late
set_multicycle_path -setup 5 -to [get_ports {do}]
Por alguna razón, esperé que el enrutador pusiera registros adicionales en la ruta para 'hacer' el puerto de salida para aumentar la latencia, pero trató de hacer una red muy larga y todavía no pudo alcanzar la sincronización. Ahora sospecho que, dado que la canalización implica cambiar el comportamiento de RTL, el enrutador y sus controles de tiempo no tienen nada que ver con eso, y esas restricciones son solo para establecer los requisitos de tiempo.
Entonces traté de hacer esto:
# don't care how fast the route is as long as it's up
# to 5 cycles
set_multicycle_path -setup 5 -to [get_ports {do}]
set_multicycle_path -hold 4 -to [get_ports {do}]
Este tiempo fijo se comprueba, pero aún no hay canalización adicional y ahora no puedo estar seguro de qué tan rápido es el camino a menos que específicamente mire el tiempo. Creo que esto se convertiría en un problema al restringir un bus de esa manera, ya que las diferentes líneas podrían pasar la verificación de la temporización, pero aún podrían estar fuera de alineación entre sí.
Entonces, aquí está la pregunta: ¿hay alguna manera de hacer que las herramientas FPGA hagan el trabajo de averiguar cuánto necesita canalizar un camino y luego insertarlo automáticamente?