Está en la página 1de 4

Arquitectura Flujo de Datos en VHDL

Alexander Lara
Facultad de Ingeniería Eléctrica y Electrónica
Laboratorio de Sistemas Digitales
luis.lara01@epn.edu.ec

Abstract— A continuación, se presentará el análisis y búsqueda de circuitos relacionadas a las operaciones

Keywords— AND, OR, NOT, XOR, DIP-switch, Proteus.


I. OBJETIVOS
 Familiarizar al estudiante con la sintaxis y funcionamiento de las sentencias concurrentes para el control de flujo
de datos en VHDL.
 Codificar programas utilizando sentencias concurrentes de control de flujo para la resolución de circuitos
combinacionales básicos escritos en VHDL.
 Relacionar conceptos de sistemas digitales con el funcionamiento de dispositivos lógicos programables.
II. TRABAJO PREPARATORIO
A. ¿Qué es la arquitectura Flujo de Datos en VHDL? (200 palabras).
Primero se puede definir que el flujo de datos representa a un sistema digital con un conjunto concurrente de ecuaciones que
expresan el flujo de información por los módulos del sistema. Al momento de usar VHDL hay que pensar como si se hiciera
un programa completo para cualquier ordenador. El modelado de flujo de datos describe la arquitectura de la entidad bajo
diseño sin describir sus componentes en términos de flujo de datos desde la entrada hacia la salida. Este estilo es el más
cercano a la descripción RTL del circuito. El modelado de flujo de datos es un estilo concurrente de modelado en VHDL, es
decir, a diferencia del modelado de comportamiento, el orden de las declaraciones no es importante. [1].

En la arquitectura se especifica la funcionalidad de una entidad donde se debe definir el flujo de información a través de cada
puerta. Principalmente se utiliza declaraciones de asignación de señales concurrentes y declaraciones de bloque en el modelo
de flujo de datos. [2] La mayoría de la descripción de flujo de datos tienen una correspondencia casi directa con su
implementación hardware correspondiente. Ya que los sistemas digitales tienen múltiples unidades funcionales que trabajan
simultáneamente, todos los lenguajes que pretendan describir hardware deben ser como mínimo concurrentes. [3]
B. ¿Qué es una sentencia concurrente? (200 palabras).
Las sentencias concurrentes son sentencias condicionales que tienen al menos un valor por defecto para cuando no se cumplen
ninguna de las condiciones. En esta sentencia siempre modificamos el valor de una misma señal, pero las condiciones pueden
ser independientes (actuar sobre distintas señales cada una), dónde la colocación de las condiciones indica la preferencia de
unas sobre otras, es decir, la condición 1 tiene preferencia sobre el resto, la condición 2 sobre todas menos la 1 y así
sucesivamente. Posee las siguientes características: [4]
 Se ejecutan de forma asíncrona unas respecto de las otras en el mismo tiempo de simulación.
 El orden en que se escriban es indiferente ya que no siguen un orden de ejecución predefinido. No obstante, conviene
escribir el código en el orden que mejor se pueda entender y mejor documente el programa.
 Las sentencias concurrentes se ejecutan en “paralelo”, de manera simultánea y no importa el orden en que se
escriban dentro de la arquitectura.
 Las sentencias concurrentes equivalen a procesos.
 Los resultados independientes del orden en el que se ejecutan.
 Es una forma compacta de describir un proceso que asigna a una señal una onda seleccionada por un conjunto de
condiciones.
Por otro lado, las sentencias concurrentes sirven para especificar los siguientes casos: [4]
 Interconexiones entre componentes.
 Estructuras jerárquicas.
 Estructuras regulares.
 Transferencias entre registros.

C. Consultar cuál es la estructura básica y función de las siguientes sentencias concurrentes en VHDL:
1. When-Else

Sentencia de selección múltiple. En hardware es necesario incluir todas las opciones posibles. En este caso es obligatorio
siempre acabar la expresión con un ELSE.
Fig. 1 Estructura de When-Else en VHDL

Siempre es obligatorio asignar algo, aunque es posible no realizar ninguna acción, para ello se utiliza la palabra reservada
UNAFFECTED. De esta forma se asignará el mismo valor que tenía la señal. [5]

2. With-Select-When

En este caso se modificará el valor de una señal dependiendo de los valores de una señal condición, aparecerán como máximo
tantas líneas como valores posibles pueda tener la señal condición. Es similar a las sentencias CASE o SWITCH de C. La
asignación se hace según el contenido de un objeto o resultado de cierta expresión. [5]

Fig. 1 Estructura de With-Select-When en VHDL


D. Utilizando una sentencia concurrente realizar un programa en VHDL que permita simular el funcionamiento de un
mux 4 a 1. Presentar el código implementado y la simulación del correcto funcionamiento utilizando el Universal
Program VWF.
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity mux_4to1 is
port(

A,B,C,D : in STD_LOGIC;
S0,S1: in STD_LOGIC;
Z: out STD_LOGIC
);
end mux_4to1;

architecture bhv of mux_4to1 is


begin
process (A,B,C,D,S0,S1) is
begin
if (S0 ='0' and S1 = '0') then
Z <= A;
elsif (S0 ='1' and S1 = '0') then
Z <= B;
elsif (S0 ='0' and S1 = '1') then
Z <= C;
else
Z <= D;
end if;

end process;
end bhv;

E. Utilizando una sentencia concurrente realizar un programa en VHDL que permita convertir un numero binario de 4
bits en su correspondiente número BCD. Emplee una variable de 4 bits para las unidades y una variable de 4 bits para
las decenas. Presentar el código implementado y la simulación del correcto funcionamiento utilizando el Universal
Program VWF con formato de variables unsigned decimal.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Conv_Bin_BCD is
Port ( Bin : in STD_LOGIC_VECTOR (3 downto 0);
Dec : out STD_LOGIC_VECTOR (3 downto 0);
Uni : out STD_LOGIC_VECTOR (3 downto 0));
end Conv_Bin_BCD;

architecture Behavioral of Conv_Bin_BCD is

begin
Process(Bin)
variable Z: STD_LOGIC_VECTOR (15 downto 0);
begin

for i in 0 to 15 loop
Z(i) := '0';
end loop;

Z(10 downto 3) := Bin;

for i in 0 to 4 loop

if Z(11 downto 8) > 4 then


Z(11 downto 8) := Z(11 downto 8) + 3;
end if;

if Z(15 downto 12) > 4 then


Z(15 downto 12) := Z(15 downto 12) + 3;
end if;

Z(17 downto 1) := Z(16 downto 0);


end loop;

Dec <= Z(15 downto 12);


Uni <= Z(11 downto 8);
end Process;
end Behavioral;

III. REFERENCIAS
[1] «Chapter 5. Dataflow Modelling - VHDL [Book]».
https://www.oreilly.com/library/view/vhdl/9788131732113/xhtml/chapter005.xhtml (accedido feb. 21,
2021).
[2] D. Joshi, «Dataflow modeling architecture in VHDL», Technobyte, abr. 11, 2020.
https://technobyte.org/vhdl-dataflow-modeling-architecture-style/ (accedido feb. 21, 2021).
[3] «GUÍA BÁSICA DEL VHDL». Instituto Tecnológico de Querétaro, [En línea]. Disponible en:
http://www.itq.edu.mx/carreras/IngElectronica/archivos_contenido/Apuntes%20de
%20materias/Apuntes_VHDL_2016.pdf.
[4] Agustín Álvarez Marquina Marquina, «Descripción de VHDL». [En línea]. Disponible en:
https://www.ele.uva.es/~sduenas/ASIC/VHDL2B.pdf.
[5] Fernando Nuño García, «Introducción al lenguaje VHDL». [En línea]. Disponible en: Fernando
Nuño García.

También podría gustarte