9. EVALUACIÓN DEL ELABORADOR
9.2. Ejemplos grandes
Lomas.
Los elementos del lenguaje utilizados son:
- Uso de una configuración (tb_testbench) como unidad de inicio de la elaboración. Esta configuración tiene una especificación de instanciación (UUT) que utiliza a su vez otra unidad de configuración.
[155]
- La arquitectura de test (arc_testbench) instancia un componente (UUT) sin haber declarado una especificación de configuración para éste. De esta forma el componente no puede ser instanciado en la sentencia y debe ser almacenado hasta encontrar una especificación de instanciación en una unidad superior en la jerarquía del diseño.
- La asociación de puertos utilizada es mediante el identificador de la parte formal y actual, y no mediante su posición.
- Procesos sin lista de sensibilidad.
- Declaración de tipos, subtipos y funciones dentro de una arquitectura (simple). - Un único nivel de instanciación.
La salida del elaborador es correcta en su simulación. Cfg_pid.
Los elementos del lenguaje utilizados que son diferentes a lo probado anteriormente son:
- Uso de la librería IEEE, y del paquete STD_LOGIC_1164. - Uso de la librería estándar TEXTIO.
- Uso de paquetes definidos por el usuario (std_logic_arith).
- La declaración de los puertos de una entidad contiene expresiones de inicialización utilizadas por defecto.
- Declaración de constantes genéricas sin expresión de inicialización. - Sentencias concurrentes de asignación de señal sin condición. - Procesos con lista de sensibilidad.
- En las unidades de configuración se utilizan especificaciones de instanciación mediante la palabra reservada ALL.
- Declaración de variables locales dentro de sentencias process. - Bloques sin expresión de guarda.
- Hasta diez niveles de instanciación, utilizando instanciaciones de componentes mediante unidades de configuración simple.
- Asociaciones de puertos realizados mediante posición. Además, las listas de asociaciones tienen un tamaño considerable.
Durante la compilación del fichero resultante, se ha encontrado este problema:
- Existen conflictos entre los tipos declarados en la arquitectura final y los tipos que utiliza internamente Veribest. Todos los tipos que presentan conflicto son los definidos en las librerías STANDARD y TEXTIO. El elaborador incluye estos
[156]
tipos en la arquitectura final, ya que han sido declarados y utilizados en el diseño de “cfg_pid”, pero al compilarlo con la herramienta se obtiene un error ya que no espera que se redefinan esos tipos (o subprogramas). La solución es comentar las líneas de código de la declaración de estos tipos en el fichero resultado.
Resuelto ese problema, la simulación del diseño es el correcto. Cpu_rtl.
Los elementos del lenguaje utilizados que son diferentes a lo probado anteriormente son:
- Sentencias de instanciación de componentes de la versión VHDL’93.
- Instanciaciones no resueltas en arquitecturas, a la espera de encontrar una especificación de instancia dentro de alguna unidad de configuración.
- La configuración inicial (behavioural) contiene esa lista de especificaciones de instanciación para todos los componentes no resueltos. La configuración se considera medianamente compleja al utilizar hasta tres niveles de especificación de instancias.
Durante la elaboración del diseño, se encuentra el siguiente problema:
- Las sentencias de instanciación que utilizan la sintaxis VHDL’93 no son reconocidas por el elaborador, ya que éste utiliza la sintaxis VHDL’87. Se produce por tanto un error en la sintaxis del código. La solución es modificar el código de estas sentencias para transformarlas en su versión anterior.
Resuelto este problema, la compilación y la posterior simulación del diseño resultante es el correcto.
Form9.
Este diseño está formado por 1275 instanciaciones de tres tipos diferentes de componentes. Las unidades implicadas (puertas and, or e inverter) son simples, teniendo una única sentencia concurrente de asignación de señales.
Se hace uso de un paquete definido por el usuario donde se declaran dos funciones de conversión.
[157]
Se utilizan declaraciones de especificación de configuración utilizando la palabra reservada ALL que permite especificar para todas las instancias del componente la entidad y arquitectura que deben utilizar.
Este diseño, aún siendo algo simple, prueba el funcionamiento del elaborador cuando son declaradas gran cantidad de señales y de instancias. La compilación y simulación del diseño resultante es el correcto.
Fpa.
Este diseño está formado por tres paquetes definidos por el usuario, junto con declaraciones de entidades y arquitecturas. Se utilizan declaraciones de tipo alias que facilitan la labor de asignación de las señales utilizadas.
Las sentencias concurrentes que aparecen en el cuerpo de las arquitecturas son las siguientes:
- Se utilizan sentencias Block con expresiones de guarda. Hay gran número de sentencias de este tipo, por lo que se prueba el correcto funcionamiento. - Se utilizan sentencias de asignación de señales con condición.
- Se realizan llamadas a subprogramas en algunas sentencias de asignación. - Se utilizan instanciaciones de compontes que fueron declarados con
especificaciones de configuración utilizando la palabra reservada ALL. Durante la elaboración de este diseño se encuentran los siguientes problemas:
- Se realizan algunas llamadas a subprogramas utilizando el paso de parámetros mediante el identificador:
write(ptr,NOW,FIELD=>6);
El elaborador no tiene implementado este tipo de paso de parámetros en las llamadas a subprogramas, por lo que se produce un error de identificador (FIELD) no encontrado. Por lo tanto, para que elabore correctamente es necesario redeclarar esa sentencia para modificarla por un paso de parámetros mediante la posición y no el identificador.
[158]
Resuelto este problema, el diseño resultante al ser compilado presenta el siguiente problema:
- Existen entidades cuya declaración de puertos utiliza como tipo de datos un vector sin rango establecido (unconstrained array). Esta declaración de puertos es elaborada de tal forma que se crean tantas declaraciones de señales como puertos haya definidos, y el tipo de éstas es el mismo que el declarado en los puertos, es decir, un vector de tamaño indefinido. Este tipo produce un error en la compilación ya que las señales deben tener un tamaño definido.
Para solucionar este problema debe modificase el tipo de los puertos a vectores de tamaño definido.
Este error de la elaboración tiene su raíz en el mismo problema que el encontrado al elaborar sentencias Generate. Para una explicación del error y de la posible solución, véase el apartado sobre la elaboración de esas sentencias.
Se tiene que tener en cuenta que las declaraciones de tipo alias aparecen como tal en la arquitectura final. No han sido tratadas durante la elaboración, por lo que pueden ser motivo de error en la siguiente fase que traduce el fichero resultante a código ADA. Lfsr_50.
Este diseño está formado por una serie de entidades y arquitecturas que son instanciadas en todos los casos mediante unidades de configuración, no existiendo ninguna declaración de especificación.
Por tanto, se prueba el correcto funcionamiento de las sentencias de instanciación que no pueden ser resueltas en el momento en el que son elaboradas. Estas instancias son resueltas por las unidades de configuración de niveles más altos en la jerarquía de diseño.
Se hace uso también de parámetros genéricos de tipo time en la declaración de entidades.
La elaboración del diseño se realiza correctamente, junto con su posterior compilación y simulación.
[159]