¿Cuál es la mejor práctica o método para sincronizar la entrada y salida de estímulos con un bloque lógico secuencial en VHDL?
Actualmente estoy ejecutando solo simulaciones de comportamiento, pero quiero asegurarme de que mi banco de pruebas también funcione correctamente con simulaciones de temporización. Estoy probando varias entidades que estoy escribiendo para manejar la suma / multiplicación modular y un divisor antes de conectarlos todos juntos. Toda la lógica secuencial está escrita para usar el flanco ascendente del reloj.
Originalmente estaba proporcionando estímulos en el flanco ascendente del reloj al inicio de la simulación y esperando múltiplos enteros del período de reloj antes de verificar los resultados, sin embargo, encontré que la lógica omitiría algunas entradas o duraría un ciclo más. que lo esperado. Desde entonces he llegado a la conclusión de que, dado que las entradas deben ser estables en el flanco ascendente del reloj, debería cambiar los estímulos solo en el flanco descendente del reloj. Ahora estoy usando una instrucción de espera para alinearme con el flanco descendente del reloj y, para la lógica que toma un número bien definido de ciclos, espere el número apropiado de períodos de reloj y verifique los resultados. Esto parece solucionar los problemas que estaba teniendo, pero ¿es esta una práctica recomendada o debo usar un enfoque diferente?
Además, al esperar señales de salida, como una señal de listo o de acuse de recibo, ¿debo combinar eso con una espera hasta el aumento de pendiente () y listo = '1', o mantener todo, salida y entrada, alineados en el borde descendente? Actualmente, parece que funciona el aumento de la ventaja para las salidas.