Part II On the integration of advanced battery models in BESS control
6.3 Simulation setup
6.4.4 Assessment of BESS ageing due to solid-electrolyte interphase (SEI) for-
Una vez que se termina el diseño jerárquico se procede con la descripción de cada bloque, usando algún software diseñado para ese propósito, para este proyecto se
usará la herramienta gratuita proporcionada por XILINX (Xilinx ISE Web Pack), que
se la puede encontrar en la siguiente
dirección URL: http://www.xilinx.com/support/download/index.htm.
Para la codificación de los bloques en VHDL se deben tomar en cuenta tres partes fundamentales que son la librería, entidad y arquitectura, estos elementos se requieren en la estructura del código [18].
Figura 2.2 Estructura del código para un multiplexor 2 a 1 en VHDL [15] 2.1.1.2.1 Librería (Library)
Esta sección define las librerías que se usarán para la descripción del código, estas librerías contienen la definición de datos y las estructuras que pueden ser usadas para la descripción [19]. Existen varias librerías predefinidas que se pueden utilizar, pero entra las principales están tres, la librería ieee.std_logic_1164.all que permite usar un objeto tipo std_logic y las librerías ieee.std_logic_arith.all y ieee.std_logic_unsigned.all que permiten usar algunas funciones aritméticas como la suma, resta, comparadores, etc entre objetos std_logic [18].
La siguiente figura muestra la forma en la que se declara una librería, la primera línea abre la librería IEEE y la segunda importa todas las definiciones del paquete std_logic_1164.
2.1.1.2.2 Entidad (Entity)
La entidad se la podría definir como una descripción general del circuito a diseñar, en esta parte se define la parte externa del diseño como son el nombre, modo4,
número de puertos y tipo de datos que las entradas y salidas van a soportar [15] [18].
Pese a que el tipo de datos que soporta VHDL es extenso, para esta sección solo se puede usar el tipo bit, bit_vector o std_logic, std_logic_vector, en si las dos son similares, ya que son la representación de un bit y un bus de datos como podría ser un byte. La diferencia entre los dos es que bit y bit_vector solo podrán tomar los valores 0 y 1, mientras que std_logic puede tomar 7 valores adicionales a los de 0 y 1, estos valores contienen mayor información y hacen que el diseño pueda ser llevado de mejor manera, es por eso que estos tipos de dato son muy usados en los diseños [19].
Otro tema que se debe especificar es el modo en el que está definido un puerto, sea este como salida, entrada o entrada/salida, se etiquetará IN, OUT, INOUT respectivamente a cada puerto según la necesidad que se tenga [15]
Figura 2.4 Estructura de Entity en un código VHDL [15]
La Figura 2.4 muestra el formato que se debe seguir para describir la entidad, en la primera línea se indica el nombre que se va a dar al diseño, las líneas 2,3 y 4 muestran cómo se define un puerto con su nombre, modo y tipo de datos a utilizar. Para entender de mejor manera se describe un ejemplo usando el editor de texto ISE.
4 Modo: Manera de definir a una variable en VHDL, se está como entrada, salida o entrada/salida. Modo IN:
Figura 2.5 Entidad de una compuerta AND y su esquemático usando ISE
Se observa en la Figura 2.5 que el editor ISE no interpreta la descripción hecha como un circuito específico, sino como un circuito de dos entradas y una salida, si se quiere especificar su funcionamiento, se lo debe hacer en la sección arquitectura que se explica a continuación.
2.1.1.2.3 Arquitectura (architecture)
Como ya se mencionó anteriormente, en la arquitectura se describe el funcionamiento del circuito, se hará la descripción en alto nivel y para esto se van a usar variables, lazos, condicionales, funciones, etc, es decir estructuras similares a las que se usaría en cualquier lenguaje de programación [18].
Se puede encontrar gran cantidad de información en libros, la web y las referencias listadas en este proyecto sobre como describir un circuito en VHDL, por lo que no se detallará este tema.
Para dar una ligera idea del uso de la arquitectura, se va a describir en la siguiente figura un ejemplo en ISE, tomando en cuenta la entidad referida a una compuerta AND.
En ISE si se abre el esquemático de la entidad y se puede ver que ahora el software ya lo interpreta como una compuerta AND, debido a la descripción que se realizó dentro de la arquitectura. Sea la descripción de una compuerta AND o de otro circuito, la estructura en VHDL será la misma, deberá contar con sus librerías, una entidad y la arquitectura para su correcta ejecución.
2.1.1.3 Compilación
Una vez finalizada la descripción del bloque, es necesario compilar el código para confirmar que no existan errores en la descripción, ya sean de diseño o de sintaxis. La herramienta ISE permite detectar errores para posteriormente corregirlos. La Figura 2.7 muestra la ventana de diseño, que permite ejecutar la compilación del código y Figura 2.8 muestra la consola, la cual deja ver los errores, warnings y el proceso que se está ejecutando [26].
Figura 2.7 Ventana para chequeo de sintaxis del diseño en ISE
Figura 2.8 Consola de ISE
2.1.1.4 Simulación funcional
Cuando se tiene la seguridad de que el código no presenta errores, se puede ejecutar un test bench en ISE para comprobar su funcionamiento lógico. Un test bench es un subprograma que se ejecuta en ISE y permite generar estímulos y simular el diseño.
Figura 2.9 Test bench compuerta AND en ISE
Usando la descripción de la compuerta AND, se ejecuta su respectivo test bench y se verifica su correcto funcionamiento, se observa en la Figura 2.9 que solo cuando las entradas a y b son 1 su salida es 1, para las demás combinaciones la salida es cero, esto concuerda con el funcionamiento de una compuerta AND.
2.1.1.5 Síntesis
Este paso es la interpretación que hace ISE a un diseño y cómo lo va a describir en hardware, es decir muestra que elementos va a usar, si es necesario varias compuertas, multiplexores, flip flops, etc. Cuando concluye la síntesis ISE permite ver el esquemático del diseño [15].
Figura 2.10 Esquemático compuerta AND en ISE