VHDL para la descripción estructurada
La descripción estructurada de un sistema se realiza a través de componentes que son interconectados mediante señales, donde cada componente, a su vez, puede venir descrito de forma estructurada
El sistema, de forma global, puede ser visto como una estructura jerarquizada
A nivel global, la descripción estructurada de un sistema viene descrito por
clásulas use (librerías)
entidad
arquitectura
declaración de componentes
declaración de señales
begininstanciación de componentes
estructuras concurrentes (instrucciones concurrentes + process’s)end
Por consiguiente el uso de un componente en un fichero VHDL estructurado implica tres acciones
Declarar el componente
Especificar la configuración
Instanciar el componente
Declaración de componentes
La declaración del componente se realiza en la arquitectura, previo desarrollo del código del sistema
Su sintaxis es
component <nombreComponente>
[generic(listaGenéricos);][port(especificación de señales);]
end component;
La declaración de señales del componente se realiza mimetizando la descripción de la entidad
Ejemplo:
Un componente se define a través de su entidad como
Entity fa is
port(a,b: in std_logic;
c: in std_logic;
s, co: out std_logic);end fa;
Entonces, su uso en un componente distinto implica que previeamente debe ser declarado y se realiza previa especificación de la arquitectura
En este caso, el componente anterior se declararía en el nuevo componente como
Architecture estructural of Suma is
...
component fa
port (a,b: in std_logic;
c: in std_logic;
s, co: out std_logic);end component;
...
Especificación
Un componente puede estar implementado por más de un modelo. Esto es, puede definirse mediante distintas arquitecturas: descripción a nivel transistor, de puerta lógica, RTL, comportamental, ...
La especificación de un componente determina la arquitectura del componente que se usa en en el componente que se crea
El formato de la especificación viene descrito por
for <etiqueta>: <nombreComponente> use entity <libreria>. <nombreEntidad>(nombreArquitectura);
Ejemplo:
for u1, u2: fa use entity work.fa(logica);
Normalmente (y conviene hacerlo así) todos los componentes que se crean para un diseño se encuentran en el mismo directorio. Este (usualmente) es el directorio de trabajo. VHDL lo reconoce como la librería work. Así, work.fa(logica) indica que estamos utilizando la arquitectura logica del componente fa que tenemos creado en nuestro directorio de trabajo
Instanciación de componentes
La instanciación de un componente puede verse como una copia de la entidad del componente en la arquitectura del componente que se crea con una asignación de puertos acorde con la interconexión que debe tener en el diseño en el que se introduce
La instanciación se realiza utilizando la instrucción port map. El formato es el siguiente
etiqueta: <nombreComponente> port map <listaPuertos>
La asociación de puertos puede realizarse
· Directamente, asociando señales en el mismo orden como están definidas en la entidad
· Mediante el operador de asignación => asociando señales definidas en la entidad a las señales de la arquitectura. Esta aproximación es útil cuando el orden de las señales es distinto en relación a su definición en la entidad
· Cuando una señal no recibe ninguna asignación puede emplearse la asignación open