Mejores prácticas para sincronizar estímulos VHDL con un circuito

1

¿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.

    
pregunta penguin359

1 respuesta

0
  

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

Este no es un enfoque preferido. Desea que su TB represente el sistema en el que operará. En su sistema, tendrá un reloj que irá a su FPGA, y tendrá relojes que irán a los BFM con los que se conectará. Si no está modelando los BFM (por ejemplo, DSP, microprocesador, etc.) no está modelando, y por lo tanto verificando, la operación / protocolo del bus, solo que puede aplicar datos a la interfaz y que su FPGA interpretará esos datos una vez recibidos. . Esto es típico en un TB rudimentario que utiliza los métodos de FileIO para leer un conjunto secuencial de valores e impulsar esos valores en los pines. Esto está bien, tal vez para un control de cordura, pero no alcanza lo que debería considerarse "verificación".

Lamentablemente, VHDL no es un lenguaje de verificación como Vera, Specman o el espacio OOP de SystemVerilog. VHDL, a través de los esfuerzos de Jim Lewis (Synthworks), ha avanzado mucho en términos de OSVVM y, como tal, ayuda enormemente a los diseños de un modelo (posiblemente verificables) que utilizan VHDL. Si no tiene acceso a SV o el conocimiento para emplearlo, y es estrictamente VHDL, OSVVM es probablemente lo mejor que puede obtener, y ciertamente mejor que usar "archivos de casos de prueba" a través de los métodos de FileIO.

    
respondido por el CapnJJ

Lea otras preguntas en las etiquetas