Está en la página 1de 8

El enfoque de “caja negra” para cualquier tipo de diseño implica una estructura jerárquica en la

que se encuentran disponibles cantidades variables de detalles en cada uno de los diferentes
niveles de la jerarquía. En el enfoque de caja negra, las unidades de acción que comparten un
propósito similar se agrupan y se abstraen a un nivel superior. Una vez hecho esto, se hace
referencia al módulo por su representación de caja negra inherentemente más simple en lugar de
por los detalles del circuito que realmente realiza esa funcionalidad. Este enfoque tiene dos
ventajas principales. En primer lugar, simplifica el diseño desde el punto de vista de los sistemas.
Examinar un diagrama de circuito que contiene cajas negras con nombres apropiados es mucho
más comprensible que observar un circuito que contiene un número incontable de puertas lógicas.
En segundo lugar, el enfoque de caja negra permite la reutilización de código previamente escrito.
No es sorprendente que las descripciones de circuitos VHDL se basen en el enfoque de caja negra.
Las dos partes principales de cualquier diseño jerárquico son la caja negra y las cosas que van
dentro de la caja negra (que, por supuesto, pueden ser otras cajas negras). En VHDL, la caja negra
se denomina entidad y el material que se encuentra dentro se denomina arquitectura. Por esta
razón, la entidad y la arquitectura VHDL están estrechamente relacionadas. Como probablemente
pueda imaginar, la creación de la entidad es relativamente simple, mientras que una buena parte
del tiempo de codificación de VHDL se dedica a escribir correctamente la arquitectura. Nuestro
enfoque aquí es presentar una introducción a la escritura de código VHDL mediante la descripción
de la entidad y luego pasar a los detalles de la escritura del código. arquitectura. Se espera que la
familiaridad con la entidad le ayude en su aprendizaje de las técnicas para describir la
arquitectura.

3.1

Entidad La construcción de entidad VHDL proporciona un método para abstraer la funcionalidad


de una descripción de circuito a un nivel superior. Proporciona un envoltorio simple para los
circuitos de nivel inferior. Este envoltorio describe efectivamente cómo la caja negra interactúa
con el mundo exterior. Dado que VHDL describe circuitos digitales, la entidad simplemente
enumera las diversas entradas y salidas de los circuitos subyacentes. En términos de VHDL, la caja
negra se describe mediante una declaración de entidad. La sintaxis de la declaración de entidad se
muestra en el Listado 3.1.

myentity define el nombre de la entidad. La siguiente sección no es más que la lista de señales del
circuito subyacente que están disponibles para el mundo exterior, razón por la cual a menudo se la
denomina especificación de interfaz. El nombre del puerto es un identificador utilizado para
diferenciar las distintas señales. La siguiente palabra clave (la palabra clave in) especifica la dirección
de la señal relativa a la entidad donde las señales pueden entrar, salir o hacer ambas cosas. Estas
señales de entrada y salida están asociadas con las palabras clave in, out y inout1 respectivamente.
La siguiente palabra clave (la palabra clave stdlogic) se refiere al tipo de datos que manejará el
puerto. Hay varios tipos de datos disponibles en VHDL, pero trataremos principalmente con el tipo
lógico estándar y las versiones derivadas. Más adelante se analizará más información sobre los
distintos tipos de datos VHDL. Cuando intente escribir un código VHDL bastante complicado, deberá
dividir su código en diferentes archivos, funciones y constructores de paquetes, lo que le ayudará a
manejar mejor su código. En este escenario, el cuerpo de la entidad no solo alojará las declaraciones
de definición de puerto sino, muy probablemente, también otros procedimientos. Hablaremos de
esto más adelante en el libro.

El listado 3.2 muestra un ejemplo de una caja negra y el código VHDL utilizado para describirla. A
continuación se enumeran algunos puntos a tener en cuenta sobre el código del Listado 3.2. La
mayoría de los puntos tratan sobre la legibilidad y comprensión del código VHDL.

Cada nombre de puerto es único y tiene asociado un modo y un tipo de datos. Este es un requisito.
El compilador VHDL permite incluir varios nombres de puerto en una sola línea.

-Los nombres de los puertos están separados por comas. Esfuércese siempre por la legibilidad.

-Los nombres de los puertos están algo alineados en un débil intento de aumentar la legibilidad.
Esto no es un requisito, pero siempre debe esforzarse por la legibilidad. Recuerde que el compilador
ignora los espacios en blanco.

-Se incluye un comentario que nos dice qué hace esta entidad.

-También se proporciona un diagrama de caja negra del circuito. Una vez más, dibujar algún tipo de
diagrama ayuda con cualquier código VHDL que pueda estar escribiendo. Recuerda: no tengas
miedo, haz un dibujo.

Con suerte, estas especificaciones de entidades no le resultarán demasiado desafiantes. De hecho,


son tan sencillas que daremos un último giro antes de abandonar el ámbito de las entidades VHDL.
La mayoría de los circuitos más significativos que diseñará, analizará y probará tienen muchas
entradas y salidas similares y estrechamente relacionadas. Estos se conocen comúnmente como
"señales de bus" en la jerga informática. Las líneas de autobús están formadas por más de una señal
que se diferencian en el nombre por solo un carácter numérico. En otras palabras, cada

La señal separada en el nombre del bus contiene el nombre del bus más un número para separarlo
de otras señales en el bus. Las señales de bus individuales se denominan elementos del bus. Como
se puede imaginar, los buses se usan a menudo en circuitos digitales. Desafortunadamente, la
palabra bus también se refiere a los protocolos de transferencia de datos establecidos. Para eliminar
la ambigüedad de la palabra bus, usaremos la palabra "paquete" para referirnos a un conjunto de
señales similares y bus para referirnos a un protocolo. Los paquetes se describen fácilmente en la
entidad VHDL. Todo lo que se necesita es un nuevo tipo de datos y una notación especial para indicar
cuándo una señal es un paquete o no. Algunos ejemplos se muestran en el Listado 3.3. En estos
ejemplos, tenga en cuenta que el modo sigue siendo el mismo pero el tipo ha cambiado. El tipo de
datos stdlogic ahora se reemplazó por las palabras stdlogicvector para indicar que cada nombre de
señal contiene más de una señal. Hay formas de hacer referencia a miembros individuales de cada
paquete, pero veremos esos detalles más adelante. Como puede ver al examinar el Listado 3.3, hay
dos métodos posibles para describir las señales en un paquete. Estos dos métodos se muestran en
las listas de argumentos que siguen a la declaración del tipo de datos. Las señales del paquete se
pueden enumerar en uno de los dos órdenes especificados por las palabras clave to y downto. Si
desea que la parte más significativa de su paquete sea la primera parte a la izquierda, use la palabra
clave downto. Asegúrese de no olvidar la orientación de las señales cuando utilice esta notación en
su modelo VHDL.

En el recuadro negro del Listado 3.3 puede ver la notación formal de un paquete. Tenga en cuenta
que el recuadro negro usa una notación de barras y números. La barra oblicua en la línea de la señal
indica que la señal es un paquete y el número asociado especifica el número de señales en el
paquete. Con respecto a la caja negra relacionada con el Listado 3.3, vale la pena mencionar que las
líneas de entrada ssel1 y sel0 podrían haberse convertido en un paquete que contiene las dos
señales.

El tipo de datos stdlogic y el tipo de datos stdlogic vector es lo que el IEEE ha estandarizado para la
representación de señales digitales. Normalmente, debe considerar que estos tipos de datos
asumen el valor lógico 1 o el valor lógico 0. Sin embargo, como se especifica en el paquete
stdlogic1164, la implementación del tipo lógico std (y el tipo vectorial lógico std) es un poco más
generosa e incluye 9 valores diferentes, específicamente: 0,1, U, X, Z, W, L, H, -. Los tipos de datos
stdlogic pasan a estar disponibles a usted pronto después de la dec-larationlibrary IEEE; use
IEEE.stdlogic1164.all; al comienzo de su código. La razón de todos estos valores es el deseo de
modelar controladores de tres estados, salidas pull-up y pull-down, estado de alta impedancia y
algunos otros tipos de entradas/salidas. Para obtener más detalles, consulte el estándar IEEE 11642.
Como alternativa al tipo de datos lógicos estándar, los programadores de VHDL a veces usan el tipo
de datos mucho más simple bit, que solo tiene los valores lógicos 1 y 0.

3.2

Bibliotecas estándar VHDL El lenguaje VHDL, como muchos otros lenguajes informáticos, ha pasado
por una larga e intensa evolución. Entre los pasos de estandarización más importantes que podemos
mencionar están el lanzamiento del paquete estándar IEEE 1164, así como algunos estándares
secundarios que ampliaron aún más la funcionalidad del lenguaje. Para aprovechar la principal
característica implementable de VHDL, solo necesita importar los dos paquetes principales de la
biblioteca, como se muestra en las líneas 2∼4 del Listado 3.4.

Una vez que se hayan incluido estos paquetes, tendrá acceso a un conjunto muy grande de ventajas:
varios tipos de datos, operadores sobrecargados, varias funciones de conversión, funciones
matemáticas, etc. Por ejemplo, la inclusión del paquete numericstd.all le dará la posibilidad de
utilizar el tipo de datos sin firmar y la función sin firmar que se muestra en el Listado 3.4. Para
obtener una descripción detallada de lo que incluyen estas bibliotecas, consulte las Plantillas de
lenguaje de su herramienta de software de síntesis favorita. Para obtener más información sobre
las bibliotecas estándar de VHDL, consulte el Apéndice.

3.3

Arquitectura La declaración de entidad VHDL, presentada anteriormente, describe la interfaz o la


representación externa del circuito. La arquitectura describe lo que realmente hace el circuito. En
otras palabras, la arquitectura VHDL describe la implementación interna de la entidad asociada.
Como probablemente pueda imaginar, describir la interfaz externa de un circuito es generalmente
mucho más fácil que describir cómo se pretende que funcione el circuito. Esta afirmación se vuelve
aún más importante a medida que los circuitos que está describiendo se vuelven más complejos.
Puede haber cualquier cantidad de arquitecturas equivalentes que describan una sola entidad.
Como eventualmente descubrirá, el estilo de codificación VHDL utilizado dentro del cuerpo de la
arquitectura tiene un efecto significativo en la forma en que se sintetiza el circuito (cómo se
implementará el circuito dentro de un dispositivo de silicio real). Esto le da al programador de VHDL
la flexibilidad de diseñar sistemas con características positivas o negativas específicas, como un
tamaño físico particular (que mide la cantidad de elementos digitales básicos necesarios) o
velocidad operativa. Por varias razones, como facilitar la reutilización del código y la conectividad. ,
una arquitectura se puede modelar de diferentes maneras. La comprensión de las diversas técnicas
de modelado y la comprensión de cómo usarlas representan los primeros pasos importantes en el
aprendizaje de VHDL. Una arquitectura se puede escribir por medio de tres técnicas de modelado
más cualquier combinación de estas tres. Existe el modelo de flujo de datos, el modelo de
comportamiento, el modelo estructural y los modelos híbridos. Estos modelos se describirán a lo
largo del libro. El listado 3.5 ofrece una vista previa de cómo se ve un bloque de código VHDL simple
pero completo.

3.4

Asignaciones de señales y variables En VHDL hay varios tipos de objetos. Entre los más utilizados
mencionaremos el tipo de objeto de señal, el tipo de objeto variable y el tipo de objeto constante.
El tipo de señal es la representación de software de awire. El tipo de variable, como en C o Java, se
utiliza para almacenar información local.

La constante es como un tipo de objeto variable, cuyo valor no se puede cambiar. Un objeto de señal
puede ser de diferentes tipos; vimos antes, por ejemplo, que un objeto de señal puede ser de tipo
lógico estándar o de otro tipo como entero, tipos personalizados, etc. Lo mismo se aplica a los
objetos variables. Antes de usar cualquier señal o variable, es obligatorio declararlas. Las señales se
declaran en el parte superior del cuerpo de la arquitectura, justo antes de la palabra clave comenzar.
Las variables deben declararse dentro de la construcción del proceso y son locales. Un ejemplo se
muestra en las líneas 14 y 17 del Listado 3.5. Como se ve en las líneas 19 y 20 del Listado 3.5, cuando
desea asignar un nuevo valor a un objeto de tipo señal, utiliza el operador “<=”. Alternativamente,
cuando desee asignar un nuevo valor a un objeto de tipo variable, utilizará el operador “:=”, que se
muestra en la línea 21. Es importante comprender la diferencia entre variables y señales,
específicamente cuando cambia su valor. Una variable cambia su valor poco después de ejecutar la
asignación de la variable. En cambio, una señal cambia su valor "algún tiempo" después de evaluar
la expresión de asignación de señal. Esto tiene consecuencias importantes para los valores
actualizados de variables y señales. Esto significa que nunca debe asumir que una asignación de
señal

puede suceder instantáneamente y también significa que puede aprovechar las variables cada vez
que necesite implementar un contador o almacenar valores dentro de un proceso. Para poder
introducir el uso de una variable tuvimos que emplear la construcción del proceso, una construcción
que aún no estás familiarizado. Veremos con más detalle más adelante en el libro que cada vez que
necesitemos un entorno de ejecución no concurrente donde las líneas de código se ejecuten una
tras otra (como en C o Java), usaremos la construcción del proceso. Dentro de un proceso, todas las
instrucciones son ejecutado consecutivamente de arriba a abajo. Sin embargo, el proceso en sí se
ejecutará simultáneamente con el resto del código (por ejemplo, la instrucción en la línea 24).
Recuerde siempre que la asignación del Listado 3.5 en la línea 24 y la ejecución del proceso no se
ejecutan consecutivamente, sino simultáneamente (todos al mismo tiempo). tiempo). Cualquier
esperanza de que la ejecución de la línea 24 suceda antes o después de la ejecución del proceso solo
resultará en una gran decepción. Como nota final, recordemos que el tipo stdlogic solo existe si
declara la biblioteca ieee.stdlogic1164. como se hizo en la línea 4 del Listado 3.5

3.5 Resumen

-La declaración de la entidad describe las entradas y salidas de su circuito. Este conjunto de señales
a menudo se conoce como la interfaz de su circuito, ya que estas señales son lo que el circuito,
externo a la entidad, usa para interactuar con su circuito.

-Las señales descritas en la declaración de entidad incluyen un especificador de modo y un tipo. El


especificador de modo puede ser anin o anout (o, como veremos más adelante, incluso aninout),
mientras que el tipo es astdlogicostdlogicvector.

-Se prefiere el paquete de palabras al bus de palabras cuando se trata de múltiples señales que
comparten un propósito similar. La palabra bus tiene otras connotaciones que no son consistentes
con la definición de paquete.

-Múltiples señales que comparten un propósito similar deben declararse como un paquete
utilizando astdlogicvectortype. Siempre es más fácil trabajar con señales agrupadas como estas en
VHDL en comparación con tipos escalares como asstdlogic.

La arquitectura describe lo que realmente hace su circuito y cuál es su comportamiento. Varias


implementaciones posibles (modelos) del mismo comportamiento son posibles en VHDL. Estos son
el modelo de flujo de datos, el modelo de comportamiento, el modelo estructural así como cualquier
combinación de ellos, generalmente llamado modelo híbrido.

3.6 Ejercicios

1. ¿A qué se refiere la palabra paquete?

2. ¿Cuál es un método común para representar paquetes en diagramas de caja negra?

3. ¿Por qué se considera un buen enfoque dibujar siempre un diagrama de caja negra cuando se usa
VHDL para modelar circuitos digitales?

4.Escriba declaraciones de entidades VHDL que describan los siguientes diagramas de caja negra:

5. Proporcione diagramas de caja negra definidos por las siguientes declaraciones de VHDLentity:

a)

b)

6. Las siguientes dos declaraciones de entidad contienen dos de los errores de sintaxis más comunes
que se cometen en VHDL. ¿Qué son?

También podría gustarte