Assert - Report - Severity

La instrucción secuencial Assert permite validar el comportamiento de un modelo. Va asociada a los parámetros Report - Severity

Formato

instrucción <= [etiqueta:] assert expresión_booleana
[report expresión] [severity expresión];

Funcionamiento

Se espera que la expresión booleana sea cierta. En caso contrario se produce una violación de la aserción
Cuando existe violación de la aserción, el simulador puede informar (report) sobre la acción
La acción puede informar sobre la incidencia. Y se informa de acuerdo al tipo de datos (ya definido) severity_level:

type severity_level is (note, warning, error, failure)

note -> Da información sobre el proceso
warning -> Es un aviso. A efectos de simulación, puede continuar, pero los resultados pueden ser distintos de los esperados
error -> Nivel de aviso grave. Ha pasado algo que provoca que la simulación no pueda continuar
failure -> Violación grave. Informa de una inconsistencia que no podría pasar nunca

El uso de Assert es muy conveniente en la depuración de modelos en cuanto permite proporcionar información en etapas intermedias, especialmente cuando los modelos son complejos.

Las notificaciones de Assert se observan en la pantalla principal de Modelsim

Ejemplo: latch SR.

El latch SR, bajo una determinada entrada, tiene las salidas Q i nQ iguales, motivo por el que, en esta circunstancia, no actua como biestable. Esta inconsistencia puede ser documentada mediante la instrucción Assert

El código siguiente muestra una forma de documentarlo:

El modelo de test se encuentra en

En el modelo del latch se han introducido retardos para provocar violaciones de la aserción

La instrucción assert utiliza el atributo señal'image(señal). Su misión es crear una imagen de la señal e imprimirla. De esta forma no se interacciona sobre la misma

Nota: El atributo 'image está definido en el VHDL'93

Notas sobre el ejemplo:

En la aserción se consideran correctos dos casos:

El caso Q=not(nQ). Es el funcionamiento típico de un biestable

En el tiempo inicial t=0 fs. Al iniciarse la simulación se cumple esta condición temporal. Por consiguiente no se detecta (warning) que Q y nQ son iguales (que durante la inicialización del instante inicial puede ocurrir)

Puesto que la incidencia es un fallo normal del latch se documenta como warning, advirtiendo que no debería pasar

Al correr la simulación se puede comprobar que assert se activa a los 11 ns debido al retardo de simulación impuesto en el modelo: durante 1 ns Q=nQ y, ello, activa la condición de error

La siguiente figura muestra el resultado de la simulación. En ella se pueden observar todos los comentarios anteriores

- Si continuamos ejecutando la simulación, ¿que ocurre (a los 20 ns)? Expresamente se ha puesto un wait de espera en la ejecución del programa de test igual al retardo en la propagación de señales del latch. Con ello se provocan retardos de simulación idénticos a los retardos de propagación, motivo por el que el simulador entra en un bucle de resultados oscilatorio. Con tiempos de simulación adecuados, esta oscilación desaparece. Probar de cambiar el tiempo de espera de la instrucción wait (0.1, 0.5, 2, 5, ... ns)

Anterior
Volver a inicio curso
Volver a inicio capítulo


WcN - Joan Oliver. Diseño de circuitos digitales con VHDL: VHDL: modelado y verificación