Está en la página 1de 8

CAPTULO 10.

Paquetes y componentes
10.1 Introduccin

De la figura 10.1, hemos cubierto en detalle todo necesario para construir el tipo de cdigo del lado izquierdo.
Nuevos bloques de construccin para la asignacin de biblioteca, lado derecho.
Estas unidades se localizan en el cdigo principal
(lado izquierda).
Propsito principal: permitir que piezas comunes de
cdigo que se puedan reutilizar y compartir, se
coloquen en una biblioteca.
Conduce a cdigo de particin, til en cdigos largos.
Piezas de uso frecuente de cdigo se pueden escribir
en forma de componentes, FUNCIONES o
procedimientos, a continuacin, dentro de un
paquete, que es compilado en la biblioteca de
destino.
3 bibliotecas son generalmente necesarias en un diseo: (ieee, std, work).

10.2 PAQUETE

Las piezas de uso frecuente de cdigo VHDL se escriben en forma de componentes, funciones o procedimientos.
Estos cdigos son entonces colocado dentro de un paquete y compilado en la biblioteca de destino. la
importancia de esta tcnica es que permite que el cdigo de particin, cdigo compartido, y el cdigo reutilizar.
Comenzamos con la descripcin de la estructura de un paquete.
Adems COMPONENTES, Funciones y procedimientos, sino que tambin pueden contener TYPE y CONSTANTE
definiciones, entre otros.
Sintaxis: se compone de dos partes:
1. Package
2. Package Body
La primera es obligatoria y contiene todas las
declaraciones
La segundo es necesaria slo cuando uno o ms
subprogramas (funcin o procedimiento) se declaran en la
parte superior, en ese caso debe contener las descripciones (cuerpo) de los subprogramas.
Package y Package Body debe tener la el mismo nombre.
La lista de declaraciones puede contener: COMPONENTE, FUNCIN, PROCEDIMIENTO, TIPO, CONSTANTE, etc.

Ejemplo 10.1: Simple Paquete

muestra un paquete llamado my_package. Slo contiene


TIPO y declaraciones de constantes, por lo que un
cuerpo del paquete no es necesario.

Ejemplo 10.2: Conjunto con una funcin

ejemplo contiene, de tipos y constantes, declaraciones, una funcin.


Por lo tanto, ahora se necesita un cuerpo del paquete (los detalles sobre cmo escribir un FUNCIN se ver en el
captulo 11). Esta funcin devuelve TRUE cuando un positivo borde se produce en CLK.

Cualquiera de los paquetes anteriores (ejemplo 10.1 o 10.2 ejemplo) ahora puede
haber compilado, convirtindose en la parte de nuestro trabajo de la biblioteca (o
cualquier otro). Para hacer uso de la misma en un cdigo VHDL, tenemos que aadir
una nueva clusula USO al cdigo principal (USO work.my package.all), como se
muestra a continuacin.

10.3 COMPONENTE

pieza de cdigo convencional (es decir, LIBRERIA


+ARQUITECTURA+ENTIDAD)
Forma de dividir un cdigo, facilita el intercambio y
reutilizacin de cdigo.
Por ejemplo, los circuitos de uso comn, flip-flops,
multiplexores, sumadores, puertas bsicas, etc.,
Se pueden colocar en una libreria, para que cualquier
proyecto haga uso de ellos sin tener que volver a escribir
cdigos.
declaracin es similar a la de una entidad (seccin 2.3);
especificar nombres de los, junto con sus modos (IN,
OUT, tampn o INOUT) y tipos de datos
(STD_LOGIC_VECTOR, INTEGER, BOOLEANA, etc.).

Para crear una instancia de un componente se requiere una etiqueta, seguido por el nombre del componente y una
declaracin PORT MAP.

Por ltimo, Port_list es slo una lista relativa a los puertos del circuito real a los puertos del componente pre-diseado
que est siendo instanciado.

Ejemplo: Consideremos un inversor, que ha sido diseado previamente

(inverter.vhd) y compilado en la biblioteca de trabajo. Podemos hacer


uso de ella por medio del cdigo que se muestra a continuacin. La
etiqueta elegida para este componente era U1. Los nombres de los
puertos en el circuito real son x e y, que estn siendo asignados a A y B,
respectivamente, del inversor prediseado (esto se llama mapeo
posicional, por primera en una seal corresponde a la primera seal en la
otra, la segunda en una a la segundos en la otra, y as sucesivamente).
Hay dos formas bsicas para declarar un componente (figura 10.2). Una vez que tenemos lo dise y lo puso en la
biblioteca de destino, podemos declarar que en el propio cdigo principal, como se muestra en la figura 10.2 (a), o
podemos declararla usando un paquete, como en la figura 10.2 (b). Este ltimo evita la repeticin de la declaracin cada
vez El componente se crea una instancia. Se presentan ejemplos de ambos enfoques a continuacin.

Ejemplo 10.3: Componentes declarados en el Cdigo Principal

Queremos implementar el circuito de la figura 10.3 empleando slo COMPONENTES (inversor, nand_2 y nand_3), pero
sin crear un paquete especfico para declarar ellos, as como en la figura 10.2 (a). Entonces se necesitan cuatro piezas de
cdigo VHDL: un para cada componente, ms uno para el proyecto (cdigo principal). Todos los cuatro archivos se
muestran a continuacin. Tenga en cuenta que, dado que no hemos creado un paquete, el COMPONENTES debe ser
declarado en el cdigo principal (en la parte declarativa de la arquitectura). Resultados de la simulacin se presentan en
la figura 10.4.
Ejemplo 10.4: Componentes Declarado en un paquete

Queremos aplicar el mismo proyecto del ejemplo anterior


(figura 10.3).

Sin embargo, Ahora vamos a crear un paquete en el que


todos los componentes (inversor, nand_2 y nand_3) sern declarados, como en la figura 10.2 (b).

As, ahora cinco piezas de cdigo VHDL son necesarios: una para cada componente, uno para el paquete, y finalmente,
una para el proyecto.

A pesar de tener un archivo adicional (PAQUETE), existe el fichero adicional necesita ser creado slo una vez, evitando
as la necesidad de declarar los componentes en el cdigo principal cada vez que se crean instancias.

Observe que una clusula adicional USO (USO work.my_components.all) ahora es necesario, con el fin de hacer el
paquete my_components visible para el diseo. Los resultados de la simulacin son obviamente las mismas que las de la
figura 10.4
10.4 PUERTO MAPA

Hay dos formas de asignar los puertos de un componente durante su ejemplificacin: mapeo de posicin y cartografa
nominal. Consideremos lo siguiente ejemplo: Inversor COMPONENTE ES PORT (a: EN std_logic; b: OUT std_logic);
COMPONENTE END;... U1: inversor PORT MAP (x, y);
En ella, el mapeo es posicional; es decir, empalmes X e Y corresponden a a y b, respectivamente. Por otra parte, un
mapeo nominal sera la siguiente:
U1: inversor MAPA DEL PUERTO (x => a, y => b); Mapeo posicional es ms fcil de escribir, pero mapeo nominal es
menos propenso a errores. Los puertos tambin se pueden dejar sin conectar (utilizando la palabra clave OPEN). Por
ejemplo:
U2: my_circuit MAPA DEL PUERTO (x => a, y => b, w => OPEN, z => d);
10.5 MAPA GENRICO

Unidades genricas tambin se pueden crear instancias.


MAPA genrico debe ser utilizado en la creacin de
instancias COMPONENTE para pasar informacin a los
parmetros genricos.
diferenciass de la sintaxis ya presentados son la inclusin de la
palabra genrica y de una lista de parmetros.

El propsito es informar que esos parmetros se deben


considerar como genrico.

Ejemplo 10.5: Crear instancias de un componente genrico

Consideremos el generador de paridad genrica del ejemplo 4.3


(repetido en la figura 10.5), que aade un bit para el vector de
entrada (en su lado izquierdo). Dicho bit debe ser un '0' si el nmero
de 'de 1 en el vector de entrada es par, o un' 1 'si es impar, de forma
que el vector resultante contendr siempre un nmero par de 'de 1. El
cdigo se presenta a continuacin es genrico (es decir, funciona para
cualquier entero positivo n). Dos archivos se muestran: un con respecto al componente (par_generator, que, de hecho,
Podemos asumir diseado como anteriormente y disponibles en la biblioteca de trabajo), y uno en relacin con el
mismo (cdigo principal) proyecto, donde el componente es par_generator instanciado. Observe que el valor
predeterminado (n = 7) de genricos en el archivo COMPONENTE(parity_gen) ser reemplazado por el valor de n = 2
pas a l por medio de la MAPA declaracin genrica en la creacin de instancias COMPONENTE. Observe tambin que
el Declaracin genrica que aparece junto con la declaracin COMPONENTE en el segundo archivo es necesario, ya que
es parte de la entidad (del componente) originales. Sin embargo, no es necesario declarar su valor por defecto de nuevo.
Resultados de la simulacin desde el circuito sintetizado con el cdigo de abajo se muestra en la figura 10.6
Ejemplo 10.6: ALU Hecho de COMPONENTES

En el ejemplo 5.5, el diseo de una ALU (unidad aritmtica lgica) se present (diagrama repetido en la figura 10.7). En
ese ejemplo, el cdigo era autnomo (es decir, Ningn componente externo, funcin o procedimiento se llama). en el
ejemplo presente, sin embargo, vamos a suponer que nuestra biblioteca contiene los tres componentes (logic_unit,
arith_unit, y mux) con el que la ALU se puede construir. En el cdigo que se muestra a continuacin, adems del cdigo
principal (alu.vhd), tambin hemos incluido el diseo de los tres componentes mencionados anteriormente. Como
puede verse, los componentes fueron declarados en el propio cdigo principal. Resultados de la simulacin se muestran
en la figura

10.8, que son similares a los del ejemplo 5.5.

También podría gustarte