0% encontró este documento útil (0 votos)
33 vistas24 páginas

Código Concurrente en VHDL: Guía Completa

El documento aborda el diseño de código concurrente en VHDL, diferenciando entre lógica combinacional y secuencial. Se explican características del código concurrente, incluyendo el uso de las sentencias WHEN y GENERATE, así como ejemplos prácticos. Además, se presentan ejercicios para implementar circuitos utilizando estas sentencias.

Cargado por

andyservy17
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
33 vistas24 páginas

Código Concurrente en VHDL: Guía Completa

El documento aborda el diseño de código concurrente en VHDL, diferenciando entre lógica combinacional y secuencial. Se explican características del código concurrente, incluyendo el uso de las sentencias WHEN y GENERATE, así como ejemplos prácticos. Además, se presentan ejercicios para implementar circuitos utilizando estas sentencias.

Cargado por

andyservy17
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Diseño de Sistemas Computacionales para

Aplicación Específica

Sesión 05: Código concurrente


en VHDL

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

Temario:

- Concurrente vs secuencial
- Características del código concurrente
- La sentencia WHEN
- La sentencia GENERATE
- Ejericios aplicativos

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.1.- Concurrente vs. Secuencial

¿Qué quieren decir los términos


concurrente y secuencial?

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.1.- Concurrente vs. Secuencial

Lógica combinacional vs. Lógica secuencial


● Por definición, lógica combinacional es aquella en donde la salida del cicuito depende,
solamente, de las entradas actuales. Por lo tanto, el sistema no requiere memoria y puede
ser implementado utilzando compuertas lógicas convencionales.


En contraste, la lógica secuencial se define como aquella en donde la salida depende de
las entradas actuales y también de las salidas anteriores. Por lo tanto, se requieren
elementos de almacenamiento, los cuales son conectados al bloque de lógica
combinacional mediante un lazo de retroalimentación, de modo que los estados
almacenados también afectarán la salida del circuito.

Circuito lógico combinacional. Circuito lógico secuencial.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.2.- Características del código concurrente


En esta clase discutiremos el código concurrente, es decir, estudiaremos las sentencias que
solamente pueden ser usadas fuera de los procesos (PROCESS), funciones (FUNCTION)
y procedimientos (PROCEDURE).


De forma resumida, en el código concurrente pueden utilizarse: Operadores (vistos en la
clase anterior), la sentencia WHEN y la sentencia GENERATE.

● El código en VHDL es inherentemente concurrente. Solamente las sentencias colocadas


dentro de un PROCESS, FUNCTION o PROCEDURE son secuenciales. Sin embargo,
aunque dentro de estos bloques la ejecución es secuencial, el bloque, como un todo, es
concurrente con cualquier otra sentencia externa.

● En general, solamente podemos construir circuitos lógicos combinacionales con código


concurrente. Para obtener circuitos lógicos secuenciales, debe emplearse código
secuencial.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.3.- Código concurrente con operadores


Es posible construir diversos circuitos lógicos combinacionales empleando solamente
operadores.

Imagine que se desea implementar el multiplexor que se muestra en la imagen inferior ¿Es
posible describir su comportamiento empleando solamente operadores lógicos?

Definitivamente, es posible construir este circuito en base a operadores. Sin embargo, la
implementación del código no es tan directa, ya que se debe hacer un análisis previo del
comportamiento del sistema para determinar los operadores que serán necesarios (mapa
de Karnaugh).

En estos casos es mejor emplear sentencias condicionales concurrentes, las cuales se
describirán a continuación.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.3.- Código concurrente con operadores

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.4.- La sentencia WHEN simple

● La sentencia WHEN es utilizada para llevar a cabo una acción determinada, en base al
cumplimiento de una condición específica. En este sentido, la sentencia WHEN (cuando) se
comporta de manera equivalente a la sentencia IF(si). La diferencia principal es que, en
VHDL, la sentencia WHEN se emplea solamente para código concurrente; mientras
que la sentencia IF se emplea solamente para código secuencial.


La sentencia WHEN presenta 02 formas: WHEN simple y WHEN con selector. Primero
analizaremos la sintaxis de la sentencia WHEN simple.


La sentencia WHEN simple en VHDL se comporta de forma análoga a una estructura de if
anidados en el lenguaje C. Su sintaxis es la siguiente:

asignación WHEN condición ELSE


asignación WHEN condición ELSE
asignación WHEN condición ELSE
.
.
.
asignación;

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.4.- La sentencia WHEN simple

Por ejemplo, el multiplexor visto anteriormente puede ser descrito mediante la sentencia
WHEN simple, de la siguiente manera:

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.5.- La sentencia WHEN con selector


La sentencia WHEN con selector es una versión modificada del WHEN simple. A diferencia
de este último, el WHEN con selector nos permite reducir las expresiones condicionales.

● Sin embargo, la sentencia WHEN con selector solamente es útil cuando TODAS las
expresiones condicionales preguntan por el valor de un mismo elemento (entrada, variable
o señal) en particular. Además, cuando se utiliza el WHEN con selector se deben
considerar TODOS los casos posibles.


En este sentido, la sentencia WHEN en VHDL se comporta de forma análoga a la
sentencia switch en el lenguaje C. Su sintaxis es la siguiente:

WITH identificador SELECT


asignación WHEN valor,
asignación WHEN valor,
.
.
.
asignación WHEN valor;

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.5.- La sentencia WHEN con selector

Por ejemplo, el multiplexor visto anteriormente puede ser descrito mediante la sentencia
WHEN con selector, de la siguiente manera:

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.6.- WHEN simple vs. WHEN con selector

● Cuado deseamos evaluar múltiples condiciones que hacen referencia a más de un


elemento (entrada, variable o señal) debemos emplear la sentencia WHEN simple. En
estos casos no es posible utilizar el WHEN con selector, ya que éste solamente puede
evaluar el valor de un elemento (el selector).


Cuando deseamos evaluar múltiples condiciones que hacen referencia a un slo elemento,
podemos emplear tanto WHEN simple como WHEN con selector. Sin embargo, el código
empleando WHEN con selector será más reducido, debido a que sus expresiones
condicionales se encuentran abreviadas.

● Cuando empleamos la sentencia WHEN con selector debemos asegurarnos de especificar


una asignación para CADA VALOR POSIBLE del selector. En caso de que se tenga una
asignación “por defecto” que se repite con múltiples valores, puede emplearse la palabra
OTHERS.


Cuando empleamos la sentencia WHEN con selector, y se desea que un valor permanezca
sin cambio ante una condición determinada, puede emplearse la palabra UNAFFECTED.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.6.- WHEN simple vs. WHEN con selector

A continuación, se muestran ejemplos de código VHDL empleando las setencias WHEN


simple y WHEN con selector:

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.6.- WHEN simple vs. WHEN con selector

Al emplear la sentencia WHEN simple se infiere que lo que se desea es emplear una red de
multiplexores con prioridades, como el que se muestra en la imagen inferior.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.6.- WHEN simple vs. WHEN con selector

Al emplear la sentencia WHEN son selector se infiere que lo que se desea es emplear un
multiplexor, como se muestra en la imagen inferior.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.7.- La sentencia GENERATE

Considere que tiene una señal x, de 8 bits, una señal y, de 16 bits, y una señal z a la que se
desea asignar el resultado de una AND entre los 08 MSB (bits más a la izquierda) de x e y.
Esto puede lograrse empleando la sentencia GENERATE y el atributo ‘RANGE (o
‘REVERSE_RANGE), tal como se muestra a continuación:

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.7.- La sentencia GENERATE

Al emplear la sentencia FOR/GENERATE, se genera hardware y conexiones que siguen un


patron, como el ejemplo que se muestra en la imagen inferior.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

1.- CÓDIGO CONCURRENTE

1.8.- Restricciones de la sentencia GENERATE


Es importante recalcar que, al utilizar la sentencia GENERATE, ambos límites del rango
(superior e inferior) deben ser estáticos. En este sentido, no está permitido utilizar
elementos (señales, variables o entradas) como límites en GENERATE.
● Por ejemplo, en el siguiente segmento de código “valor” es una entrada:

No_Valido: FOR I IN 0 TO valor GENERATE


(sentencias concurrentes)
END GENERATE;


Por otro lado, debemos tener cuidado de no asignar más de una vez un valor a un bit. Por
ejemplo, los siguientes segmentos de código son inválidos:

No_Valido: FOR i IN 0 TO 7 GENERATE


salida <= “11111111” WHEN (a(i) AND b(i)) = ‘1’ ELSE “00000000”; END GENERATE;

No_Valido: FOR i IN 0 TO 7 GENERATE


acumulador <= acumulador + 1 WHEN x(i) = ‘1’; END
GENERATE;

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

2.- EJERCICIOS

2.1.- La sentencia WHEN

Escribir un código en VHDL, empleando la sentencia WHEN, que implemente un buffer tri-
estado como el que se muestra a continuación.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

2.- EJERCICIOS

2.1.- La sentencia WHEN

Escribir un código en VHDL, empleando la sentencia WHEN, para implementar un


decodificador para display de 7 segmentos. Este circuito debe recibir una entrada de 04 bits y
debe entregar a la salida una secuencia que permita visualizar el valor de la entrada como un
dígito hexadecimal (de 0 a F).

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

2.- EJERCICIOS

2.1.- La sentencia WHEN

Escribir un código en VHDL, empleando la sentencia WHEN, para implementar una unidad
aritmética lógica (ALU). Este circuito debe contar con: 02 entradas, a y b, de 02 bits cada una;
una entrada c_in, que representa un carry de entrada; una entrada sel, de 04 bits, que indica
la operación que se llevará a cabo (ver tabla inferior); y una salida y, de 02 bits, que muestra el
resultado de la operación.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

2.- EJERCICIOS

2.2.- La sentencia GENERATE

Escribir un código en VHDL, empleando la sentencia GENERATE, para implementar una un


codificador de binario a Gray. Considere que cuenta con una entrada a, de 08 bits, y una
salida b, de 08 bits.

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

3.- RESUMEN
Estilos de código

Código concurrente → Solo sirve para circuitos combinacionales.

Código secuencial → Sirve para circuitos combinacionales y secuenciales

Código concurrente

Operadores (aritméticos, lógicos, etc.)

Sentencia WHEN

Sentencia GENERATE

Sentencia WHEN

WHEN simple →Multiplexores con prioridad

WHEN con selector → Multiplexor

Sentencia GENERATE

Se emplea con FOR (generalmente)

Genera hardware y conexiones que siguen un patrón

Se debe tener cuidado de no generar “corto circuitos”

Sesión 05 – Código concurrente MSc. Ántero C.


Diseño de Sistemas Computacionales para
Aplicación Específica

4.- PREGUNTAS

Sesión 05 – Código concurrente MSc. Ántero C.

También podría gustarte