Está en la página 1de 39

Universidad Autónoma de Querétaro

Facultad de Ingeniería

Manual de Prácticas
Sistemas Digitales con Lógica Reconfigurable (SDLRI)

Que como parte de los requisitos para obtener el grado de

Ingeniero en Automatización

Presenta
Luis Ramón Olvera Córdoba

Enero 2022
Universidad Autónoma de Querétaro
Facultad de Ingeniería

Presenta:
Luis Ramón Olvera Córdoba

Dirigido por:
Dr. Juvenal Rodríguez Reséndiz

SINODALES

Nombre del Sinodal _________________


Presidente Firma

Nombre del Sinodal _________________


Secretario Firma

Nombre del Sinodal _________________


Vocal Firma

Nombre del Sinodal _________________


Suplente Firma

____________________ ___________________
Nombre y Firma Nombre y Firma
Director de la Facultad Director de Investigación y Posgrado

Centro Universitario

Querétaro, Qro.

Fecha
México
Contenido

Práctica 1: Registro.

Práctica 2: Multiplexor.

Práctica 3: Sumador.

Práctica 4: Multiplicador.

Práctica 5: Maquina de Estados.

Práctica 6: Codificador BCD a 7 segmentos.

Práctica 7: Reloj.

Práctica 8: Comunicación Serial.

.
Nombre de la asignatura Sistemas Digitales con Lógica Reconfigurable
Nombre de la Práctica Descripción en código VHDL de un Registro
Número de Práctica 1 Número de Horas 4

Objetivo

El alumno será capaz de realizar la descripción y simulación de un registro utilizando VHDL además de
implementarlo en una FPGA.

Marco Teórico

La operación más común en un registro es la transferencia de datos según su tipo. Registro paralelo o Registro
de desplazamiento, también llamado registro serial donde el paralelo transmite todos los datos al mismo tiempo
y el serial transmite los datos bit por bit uno tras otro.

Los registros son clasificados de acuerdo a la forma en que se da salida a los datos ingresados.

 Entrada en paralelo, salida en paralelo.


 Entrada en serie, salda en serie.
 Entrada en paralelo, salida en serie (Figura 1.1).
 Entrada en serie, salida en paralelo.

Figura 1.1. Entrada en paralelo, salida en serie.

Equipo y Materiales

 Equipo de cómputo con Windows con Windows XP o superior.


 Active HDL 8.1 o superior.
 Tarjeta de desarrollo.

Prerrequisitos

1. Describir qué es una Entidad, la función que desempeña y ejemplificar su declaración con dos entradas
A y B además de una salida C todos con un valor de un bit.

Una entidad (entity) es el bloque elemental de diseño en VHDL. Las entidades son todos los elementos
electrónicos (sumadores, contadores, compuertas, flip-flops, memorias, multiplexores, etc.) que
forman de manera individual o en conjunto un sistema digital. Además la integración de varios
subsistemas puede representarse mediante una entidad. Los subsistemas pueden conectarse
internamente entre sí; pero la entidad sigue identificando con claridad sus entradas y salidas generales.

Entity entidad is
Port(
A, B: in bit;
C: out bit
);
End sumador;

2. Describir qué es una Arquitectura y la función que desempeña.

Una arquitectura se define como la estructura que describe el funcionamiento de una entidad, de tal
forma que permita el desarrollo de los procedimientos que se llevaran a cabo con el fin de que la
entidad cumpla las condiciones de funcionamiento deseadas.

3. Mencionar cuatro tipos de datos en VHDL y los rangos de valores.

Bit, valores de 0 y 1 lógico.


Boolean, define valores de verdadero o falso en una expresión.
Bit_vector que representa un conjunto de bits para cada variable de entrada o salida.
Integer que representa un número entero.

4. ¿Qué es un sistema combinacional?

En sistemas digitales se denomina sistema combinacional a aquel cuyas salidas dependen únicamente
del estado de sus entradas en un momento dado.

5. Describir qué es un Flip Flop, mencionar algunos de los tipos que existen.

El flip flop o celda binaria es el elemento básico de memoria en sistemas síncronos o asíncronos. La
característica principal de un flip flop es mantener o almacenar un bit de manera indefinida hasta que
a través de un pulso o una señal cambie de estado. Los flip flops más conocidos son los tipos SR, JK,
T y D.

Metodología

Se realizará el siguiente registro de n bits mediante una descripción en VHDL

Datos (N:0)

REGISTRO Salida (N:0)

Reset

Reloj
Para poder ejemplificar se presentará la descripción para un registro genérico asignado con 4 bits.

library IEEE;
use IEEE.std_logic_1164.all;

entity registro is
generic(
n:integer:=4
);
port(
rst : in std_logic;
clk : in std_logic;
D : in std_logic_vector(n-1 downto 0);
Q : out std_logic_vector(n-1 downto 0)
);
end registro;

architecture estructural of registro is


begin
S:process(rst,clk)
begin
if(rst='1')then
Q<=(others => '0');
elsif(clk'event and clk='1')then
Q<=D;
end if;
end process S;
end estructural;

Banco de Pruebas

library IEEE;
use IEEE.std_logic_1164.all;

entity testbench_reg is
generic
(
n: integer:=4
);
end testbench_reg;

architecture TB of testbench_reg is
signal RST : std_logic;
signal CLK : std_logic;
signal D : std_logic_vector(n-1 downto 0);
signal Q : std_logic_vector(n-1 downto 0);
begin
U1: entity work.Registro port map(RST,CLK,D,Q);
process
begin
rst <= '1';
D <= "1011";
wait for 100 nS;
rst<= '0';
D <= "1001";
wait for 100 nS;
rst<= '0';
D <= "0110";
Wait for 100ns;

std.env.stop; -- sirve para detener la simulación automáticamente


end process;
end TB;
Formas de onda del banco de pruebas

Ejercicio: Explicar la descripción de Hardware presentada en el ejemplo y el banco de pruebas.

En la descripción cada que hay un pulso de reloj la salida Q de cuatro bits (o n bits) toma el valor de la
entrada D del mismo número de bits. En el banco de pruebas hay un cambio de valor cada 1oo nS, sin
embargo el primer valor no es tomado en cuenta pues la señal rst está en activo.

Evaluación de la Práctica

Deberá realizarse una descripción de hardware según indicaciones del profesor, está deberá ser acompañada
por el código, simulación e implementación en una FPGA así como una explicación paso a paso del
funcionamiento.

Conclusiones

Explicar la relación entre Flip Flops y Registros. Mencionar la relación entre las descripciones realizadas en
laboratorio y los temas vistos en clase. Proponer una implementación de registros para un proyecto.

Bibliografía

ROMERO TRONCOSO, René de Jesús, Electrónica Digital y Lógica Programable, 1ra. ED.
México, 2007. 567 p. ISBN: 968-864-449-8.

MORRIS, Mano y otros, Fundamentos de Diseño Lógico y computadoras, 1ra ed.


Naucalpan de Juárez, Edo. De México, 1998. 604 p. ISBN: 0-13-182098-2.
Nombre de la asignatura Sistemas Digitales con Lógica Reconfigurable
Nombre de la Práctica Descripción en código VHDL de un multiplexor
Número de Práctica 2 Número de Horas 4

Objetivo

El alumno comprenderá el funcionamiento y la finalidad de un multiplexor adquiriendo la capacidad de


realizar su descripción, simulación e implementación en una FPGA.

Marco Teórico

Los multiplexores o selectores de datos binarios tienen la función de tomar una de varias entradas y enviarla
a la salida (Figura 2.1).
Un multiplexor actúa como un interruptor de posiciones múltiples controlado digitalmente, donde por medio
de un código aplicado a las entradas determina cual de estás será enrutada a la salida.

Figura 2.1. Simbología básica de un multiplexor.

Equipo y Materiales

 Equipo de cómputo con Windows con Windows XP o superior.


 Active HDL 8.1 o superior.
 Tarjeta de desarrollo par FPGA.

Prerrequisitos

Describir que son las bibliotecas en VHDL.

Una librería o biblioteca es un lugar al que se tiene acceso para utilizar las unidades de diseño predeterminadas
por el fabricante de la herramienta (paquete) y su función es agilizar el diseño.
Describir que es un paquete en VHDL.

Un paquete es una unidad de diseño que permite desarrollar un programa en VHDL de una manera ágil,
debido a que contiene algoritmos preestablecidos (sumadores, restadores, contadores, etc.) que ya tienen
optimizado su comportamiento.

¿Qué es una declaración concurrente?

Una declaración concurrente es aquella no importa el orden en que se escriban las señales pues ya que el
resultado para determinada función sería el mismo.

Dar un ejemplo de la declaración de las sentencia concurrente when-else.

Q <= “01” when a= '0' else


“11” when a= '1' else
“00” when others;

Definir que son los operadores aritméticos, relacionales y lógicos.

Los operadores aritméticos permiten realizar operaciones del tipo aritmético, como suma, resta, ultiplicación,
división, cambios de signo, valor absoluto y concatenación. Los operadores relaciónales se usan para evaluar
la igualdad, desigualdad o la magnitud en una expresión. Los operadores lógicos son tilizados en la descripción
de funciones booleanas, son los operadores and, or, nand, xor, xnor y not.

Metodología

Se describirá el siguiente multiplexor mediante una descripción en VHDL

a(1:0)

b(1:0) o(1:0)

c(1:0)

s(1:0)
library IEEE;
use IEEE.std_logic_1164.all;

entity mux is port(


a,b,c : in std_logic_vector(1 downto 0);
s : in std_logic_vector(1 downto 0);
o : out std_logic_vector(1 downto 0)
);
end mux;

architecture behavioral of mux is


begin
with s select
o <= a when "00",
b when "01",
c when "10",
"00" when others;
end behavioral;

Banco de Pruebas
Library IEEE;
use IEEE.std_logic_1164.all;

entity Mux_TB is
end Mux_TB;

architecture TB of Mux_TB is
signal a,b,c: std_logic_vector(1 downto 0);
signal s: std_logic_vector(1 downto 0);
signal o: std_logic_vector(1 downto 0);

begin k

U1: entity work.Mux port map(a,b,c,s,o);


process
begin
a <= "01";
b <= "10";
c <= "11";-- Asignar valores a las señales de entrada a,b,c,d.

s <= "01"; -- Asignar valores a la señal de selección s.


wait for 100 nS;
s <= "10";
wait for 100 nS;
s <= "11";
wait for 100 nS;
s <= "00";
wait for 100 nS;

std.env.stop; -- Detener simulación


end process;
end TB;

Formas de onda del banco de pruebas.

Ejercicio: Explicar la descripción de Hardware presentada en el ejemplo y el banco de pruebas por medio del
diagrama de formas de onda.

Se tienen las entradas a, b y c que pueden ser mínimo de dos bits, la entrada select que determina cual será el
dato de entrada seleccionado para presentarlo en la salida.
Evaluación de la Práctica

Deberá realizarse una descripción de hardware según indicaciones del profesor, está deberá ser acompañada
por el código, simulación e implementación en una FPGA así como una explicación paso a paso del
funcionamiento.

Conclusiones

Explicar el funcionamiento de un Multiplexor. Mencionar la relación entre las descripciones realizadas en


laboratorio y los temas vistos en clase. Proponer una implementación de un multiplexor para una aplicación
electrónica.

Bibliografía

ROMERO TRONCOSO, René de Jesús, Electrónica Digital y Lógica Programable, 1ra. ED.
México, 2007. 567 p. ISBN: 968-864-449-8.

MORRIS, Mano y otros, Fundamentos de Diseño Lógico y computadoras, 1ra. ed.


Naucalpan de Juárez, Edo. De México, 1998. 604 p. ISBN: 0-13-182098-2.

MAXINES, David G. y otros, VHDL El arte de programar sistemas digitales, 1ra. ed.
México, 2002. 352 p.
Nombre de la asignatura Sistemas Digitales con Lógica Reconfigurable
Nombre de la Práctica Descripción en código VHDL de un sumador
Número de Práctica 3 Número de Horas 4

Objetivo

El alumno será capaz de realizar la descripción y simulación de un sumador utilizando VHDL además de
implementarlo en una FPGA.

Marco Teórico

El sistema numérico binario es el lenguaje natural en los sistemas digitales. Es un sistema de base 2, es decir,
únicamente tiene dos dígitos. Para expresar una equivalencia decimal de un número binario esté se calcula
disponiendo los números con series de potencias con base de 2 como se muestra a continuación.

23 22 21 20
1 0 1 1

El número binario representado anteriormente se representa como falso o verdadero. Los casos de 23, 21, 20
resultan verdaderos y el caso de 22 falso, es decir que el equivalente decimal de este número binario es:
23 + 21 + 20 = 8 + 2 + 1 = 11

Números Binarios de hasta 3 bits

Número Binario Número Decimal Número Binario Número Decimal


000 0 100 4
001 1 101 5
010 2 110 6
011 3 111 7

Suma Binaria

Es importante para el estudiante asimilar que la suma de dos números binarios se calcula basándose en las
mismas reglas que los números decimales. Considerando el hecho de que los valores binarios solo pueden ser
0 o 1 si la suma de dos números es 1+1 está supera los valores posibles y retorna a 0 entonces se genera un
acarreo.

Ejemplos:
10110  Acarreo
+ 1011  Sumando
1001  Sumando
10100  Suma

El ejemplo anterior puede ser explicado considerando que la ecuación lógica que corresponde es la función or-
exclusiva para la suma y and para el acarreo (Figura 3.1), lo cual debe ser considerado al momento de realizar
una descripción de hardware.
AND2

XOR
01
01 0 0 0
0 0 0 0 1 0
0 1 1 1 0 0
1 0 1 1 1 1
1 1 0 Compuerta AND.
Compuerta XOR (or-exclusiva).

Figura 3.1. Operadores booleanos en una sumatoria binaría

Finalmente la regla básica de la adición nos dice que:

0 + 0 = 01
0 + 1 = 01
1 + 0 = 01
1 + 1 = 10

Equipo y Materiales

 Equipo de cómputo con Windows con Windows XP o superior.


 Active HDL 8.1 o superior.
 Tarjeta de desarrollo.

Prerrequisitos

Mencionar cinco operadores aritméticos.


Suma, resta, multiplicación, división y potencia.

Realizar 5 sumas binarias indicadas por el profesor, describiendo el proceso.

Describir qué es un semisumador y un sumador completo.


Un semisumador es aquel que tiene al menos dos entradas, una salida con el valor de la suma y una salida con
acarreo. Un sumador completo a diferencia del semisumador considera un acarreo de entrada.

Realizar un esquema donde se represente semisumador usando las compuertas AND y XOR.
I1
IN1 O
I0 Suma
IN2

I1
O
I0 Acarreo

Metodología

Se ejemplifica realizando la descripción de un sumador genérico.

IN1(N:0)

SUMA (N+1:0)

IN2(N:0)
library IEEE;
use IEEE.std_logic_1164.all;

entity sumador is
generic(
n:integer:=4
);
port(
IN1,IN2 : in std_logic_vector (n-1 downto 0);
SUMA : out std_logic_vector (n downto 0)
);
end sumador;

architecture behavioral of sumador is


signal C : std_logic_vector(n downto 0);
signal S : std_logic_vector(n downto 0);
begin
U1: process(IN1,IN2,C)
begin
for i in 0 to n-1 loop
if i=0 then
S(i) <= IN1(i) xor IN2(i);
C(i)<= IN1(i) and IN2(i);
elsif i>0 then
S(i) <= IN1(i) xor IN2(i) xor C(i-1);
C(i)<= (IN1(i) and IN2(i)) or (C(i-1) and (IN1(i) xor IN2(i)));
end if;
end loop;
S(n)<= C(n-1);
end process U1;
SUMA <= S;
end behavioral;

Banco de Pruebas
library IEEE;
use IEEE.std_logic_1164.all;

entity TB_Sumador is
generic(
n: integer:=4
);
end TB_Sumador;

architecture TB of TB_Sumador is
signal IN1,IN2 : std_logic_vector (n-1 downto 0);
signal SUMA : std_logic_vector (n downto 0);
begin
U1: entity work.Sumador port map(IN1,IN2,SUMA);
process
begin
IN1 <= "0001"; --1
IN2 <= "0010"; --2
wait for 300 nS;
IN1 <= "0011"; --3
IN2 <= "1100"; --12
wait for 300 nS;
IN1 <= "1101"; --13
IN2 <= "1001"; --9
wait for 300 nS;
std.env.stop; -- sirve para parar la simulación automaticamente
end process;
end TB;
Formas de onda

Ejercicio: Explicar la descripción de Hardware presentada en el ejemplo y el banco de pruebas.

Se realiza la suma de las entradas IN1 e IN2 presentando los resultados hexadecimales 0x03, 0x0F, 0x16
mediante un sumador completo.

Evaluación de la Práctica

Deberá realizarse una descripción de hardware según indicaciones del profesor, está deberá ser acompañada
por el código, simulación e implementación en una FPGA así como una explicación paso a paso del
funcionamiento.

Conclusiones

Explicar el funcionamiento de un Sumador. Mencionar la relación entre las descripciones realizadas en


laboratorio y los temas vistos en clase. Proponer una implementación de un sumador para una aplicación
electrónica.

Bibliografía

ROMERO TRONCOSO, René de Jesús, Electrónica Digital y Lógica Programable, 1ra. ED.
México, 2007. 567 p. ISBN: 968-864-449-8.

MORRIS, Mano y otros, Fundamentos de Diseño Lógico y computadoras, 1ra ed.


Naucalpan de Juárez, Edo. De México, 1998. 604 p. ISBN: 0-13-182098-2.

MAXINES, David G. y otros, VHDL El arte de programar sistemas digitales, 1ra. ed.
México, 2002. 352 p.
Nombre de la asignatura Sistemas Digitales con Lógica Reconfigurable
Nombre de la Práctica Descripción en código VHDL de una Multiplicador
Número de Práctica 4 Número de Horas 4

Objetivo

El alumno será capaz de realizar la descripción y simulación de un multiplicador utilizando VHDL además
de implementarlo en una FPGA.

Marco Teórico

La multiplicación de números binarios sigue el mismo principio de orden que la multiplicación de números
decimales, es decir, como observa en la siguiente operación.

0 0
0 2 5 0 0 0 0 1 1 0 0 1
0 1 2 0 0 0 0 0 1 1 0 0
0 5 0 0 0 0 0 0 0 0 0 0
2 5 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 1 1 0 0 1 0 0
0 1 1 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0
1 0 0 1 0 1 1 0 0

En el ejemplo anterior se puede observar que ambos métodos son el mismo a excepción que en una
multiplicación binaria la operación realizada entre ambos elementos es por medio de una compuerta and.

And
0 0 0
0 1 0
1 0 0
1 1 1

Equipo y Materiales

 Equipo de cómputo con Windows con Windows XP o superior.


 Active HDL 8.1 o superior.

Prerrequisitos

¿Qué librería nos permite realizar operaciones aritméticas en VHDL?


IEEE.std_logic_unsigned.

Describir que es un proceso en VHDL y dar un ejemplo de su declaración.


Un proceso es la sentencia concurrente definida en VHDL para agrupar internamente sentencias secuenciales.
[Etiqueta:] process (Lista de sensibilidad) is
begin
[Cuerpo del proceso]
End preocess [etiqueta];
Describir y dar un ejemplo de declaración de un ciclo for.
Causa la ejecución de un bucle un número fijo de veces. Su sintaxis es:
[etiqueta:] for índice in rango loop
[sentencias secuenciales]
End loop [etiqueta];

Desarrollar cinco multiplicaciones binarias indicadas por el profesor.

Metodología

Se describirá un multiplicador de n bits mediante una descripción en VHDL

IN A

IN B
n bits
* 2*n bits
OUT

n bits

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity mult is
generic(
n : integer:=3
);
port(
IN1,IN2 : in std_logic_vector(n-1 downto 0);
MUL : out std_logic_vector((2*n)-1 downto 0)
);
end mult;

architecture behavioral of mult is


signal aux : std_logic_vector((2*n)-1 downto 0);
signal suma : std_logic_vector((2*n)-1 downto 0);
begin
U1: process(IN1,IN2)
begin
MUL <= IN1*IN2;
end process U1;

end behavioral;
Banco de pruebas de multiplicador
entity TB_Multi is
generic(
n : integer:=3
);
end TB_Multi;

architecture TB of TB_Multi is
signal IN1,IN2 : std_logic_vector(n-1 downto 0);
signal MUL : std_logic_vector((2*n)-1 downto 0);

begin
U1: entity work.Multi port map(IN1,IN2,MUL);
process
begin
IN1<="001";
IN2<="010";
wait for 100 nS;
IN1<="100";
IN2<="010";
wait for 100 nS;
IN1<="111";
IN2<="111";
wait for 100 nS;
std.env.stop; -- Detener simulación
end process;
end TB;

Formas de onda de multiplicador

Ejercicio: Explicar el funcionamiento según la forma de onda.

Se realizan la multiplicaciones hexadecimales 0x01*0x02=0x02; 0x04*0x02=0x08 y 0x07*0x07=0x31


respectivamente en intervalos de 100 nS.

Evaluación de la Práctica

Deberá realizarse una descripción de hardware según indicaciones del profesor, está deberá ser acompañada
por el código, simulación e implementación en una FPGA así como una explicación paso a paso del
funcionamiento.
Conclusiones

Explicar el funcionamiento de un Multiplicador. Mencionar la relación entre las descripciones realizadas en


laboratorio y los temas vistos en clase. Proponer una implementación de un multiplicador para una aplicación
electrónica.

Bibliografía

ROMERO TRONCOSO, René de Jesús, Electrónica Digital y Lógica Programable, 1ra. ED.
México, 2007. 567 p. ISBN: 968-864-449-8.

MORRIS, Mano y otros, Fundamentos de Diseño Lógico y computadoras, 1ra. ed.


Naucalpan de Juárez, Edo. De México, 1998. 604 p. ISBN: 0-13-182098-2.

MAXINES, David G. y otros, VHDL El arte de programar sistemas digitales, 1ra. ed.
México, 2002. 352 p.
Nombre de la asignatura Sistemas Digitales con Lógica Reconfigurable
Nombre de la Práctica Descripción en código VHDL de una Maquina de Estados
Número de Práctica 5 Número de Horas 4

Objetivo

El alumno será capaz de realizar la descripción y simulación de una máquina de estados utilizando VHDL
además de implementarlo en una FPGA.

Marco Teórico

En sistemas digitales una máquina de estados finitos (FSM) se puede definir como un algoritmo consistente
en una serie de pasos que ejecutan una tarea de proceso. Estas máquinas son llamadas de estados finitos porque
el número de combinaciones lógicas posibles de los elementos del circuito son cantidades finitas, además es
importante mencionar que las FSM siempre describen circuitos secuenciales.

En la descripción de una FSM existen cuatro características fundamentales: Estados, transiciones, entradas y
salidas.

Las máquinas de estados finitos son descritas por diagramas en los cuales un estado se representa por un círculo
y las transiciones entre los estados se indican mediante líneas orientadas que conectan los círculos.

En los Autómatas de Mealy, las líneas orientadas se etiquetan con dos números binarios separados por una
barra /. El valor de la entrada durante el estado actual precede a la barra, y el siguiente valor tras la barra es el
valor de la salida durante el estado actual aplicando dicha entrada. Una línea orientada que conecta un círculo
consigo mismo indica que no se produce ningún cambio de estados.

Equipo y Materiales

 Equipo de cómputo con Windows con Windows XP o superior.


 Active HDL 8.1 o superior.

Prerrequisitos

¿Qué es un bloque de estado y cómo se conforma en una FSM?

El bloque de estado representa el "estado" de una máquina secuencial y debe contener la siguiente información.
• Nombre del estado. Por lo general se utilizan números (0, 1, 2, 3,... etc.) o letras (A, B, C,... etc).
• Código del estado ("xxxx"). Se refiere al código binario asignado al estado.
• Lista de salidas. Señales de salida asignadas al estado y que sólo se encuentran activas durante el tiempo que
permanezca el sistema en ese estado.

¿Qué es un bloque de decisión y cómo se conforma en una FSM?

El rombo o bloque de decisión se refiere a las variables de entrada al sistema y contienen la siguiente
información:
• Una variable de entrada. En este rombo se indica el nombre de la variable de entrada.
• Una salida verdadera.
• Una salida falsa.

¿Qué es un bloque de salida condicional y cómo se conforma en una FSM?

El bloque de salidas condicionales se utiliza para activar señales de salida que sólo se encuentran disponibles
para ciertas condiciones de entrada. La información contenida en dicho bloque es la siguiente:

• Una lista de salidas condicionales que dependen de cierta condición de entrada.

Metodología

Se describirá un semáforo.

CTR!=T
CTR!=T CTR!=T

S0
S7 CTR=T S1
CTR=T Verde
Rojo Amarillo

CTR=T CTR=T CTR!=T

CTR!=T
S2

Apagado
S6

Apagado
CTR!=T CTR!=T
CTR=T
CTR=T
S5 CTR!=T
S3

Amarillo Amarillo
S4
CTR=T CTR=T
Apagado

Donde CTR es un contador y T es una variable de tiempo que determina la duración del estado, toma
diferentes valores dependiendo del estado.

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity SM is
port(
rst : in std_logic;
clk : in std_logic;
sem : out std_logic_vector(2 downto 0)
);
end SM;

architecture desarrollo of SM is
constant verde : std_logic_vector (2 downto 0):="001";
constant amarillo : std_logic_vector (2 downto 0):="010";
constant rojo : std_logic_vector (2 downto 0):="100";
constant apagado : std_logic_vector (2 downto 0):="000";
signal Ea : std_logic_vector (3 downto 0);
signal Es : std_logic_vector (3 downto 0);
signal tiempo : std_logic_vector (7 downto 0);
signal ctr : std_logic_vector (7 downto 0);

begin

--FSM
maquina: process(Ea)
begin
case Ea is
when "0000" => sem <= verde;
tiempo<="01100100";
Es <= "0001";
when "0001" => sem <= amarillo;
tiempo<="00001010";
Es <= "0010";
when "0010" => sem <= apagado;
tiempo<="00001010";
Es <= "0011";
when "0011" => sem <= amarillo;
tiempo<="00001010";
Es <= "0100";
when "0100" => sem <= apagado;
tiempo<="00001010";
Es <= "0101";
when "0101" => sem <= amarillo;
tiempo<="00001010";
Es <= "0110";
when "0110" => sem <= apagado;
tiempo<="00001010";
Es <= "0111";
when "0111" => sem <= amarillo;
tiempo<="00001010";
Es <= "1000";
when "1000" => sem <= rojo;
tiempo<="01100100";
Es <= "0000";
when others => sem <="111";
Es <= "0000";
end case;
end process maquina;

--CONTADOR
contador: process(clk)
begin
if rst='1' and clk'event then
Ea <= "0000";
elsif clk='1' and clk'event then
if ctr = tiempo then
ctr<="00000000";
Ea <= Es;
else
ctr<=ctr+1;
end if;
end if;
end process contador;
end desarrollo;
Ejercicio: Explicar la descripción de Hardware presentada en el ejemplo y las formas de onda.

El semáforo comienza en verde, después en intervalos más pequeños de tiempo oscila entre amarillo y
apagado para finalizar en rojo el mismo intervalo de tiempo que el rojo.

Evaluación de la Práctica

Deberá realizarse una descripción de hardware según indicaciones del profesor, está deberá ser acompañada
por el código, simulación e implementación en una FPGA así como una explicación paso a paso del
funcionamiento.

Conclusiones

Explicar el funcionamiento de una máquina de estados. Mencionar la relación entre las descripciones
realizadas en laboratorio y los temas vistos en clase. Proponer una implementación de una máquina de
estados para una aplicación electrónica.

Bibliografía

ROMERO TRONCOSO, René de Jesús, Electrónica Digital y Lógica Programable, 1ra. ED.
México, 2007. 567 p. ISBN: 968-864-449-8.

MORRIS, Mano y otros, Fundamentos de Diseño Lógico y computadoras, 1ra ed.


Naucalpan de Juárez, Edo. De México, 1998. 604 p. ISBN: 0-13-182098-2.

MAXINES, David G. y otros, VHDL El arte de programar sistemas digitales, 1ra. ed.
México, 2002. 352 p.
Nombre de la asignatura Sistemas Digitales con Lógica Reconfigurable
Nombre de la Práctica Codificador BCD a Siete Segmentos
Número de Práctica 6 Número de Horas 4

Objetivo

El alumno será capaz de realizar la descripción, simulación e implementación de un codificador a siete


segmentos utilizando VHDL además de implementarlo en una FPGA.

Marco Teórico

Decodificadores

La programación de circuitos se basa en establecer la relación entre un código binario aplicado a las entradas
del dispositivo y el nivel de salida obtenido. En esta práctica se presenta una representación decimal codificada
a binario (BCD) al ser uno de los decodificadores más representativos en sistemas digitales.

El sistema binario es el sistema numérico más natural para las computadoras, sin embargo las personas están
acostumbradas al uso del sistema decimal. La solución más evidente para establecer una interface entre un
sistema digital y un usuario humano es realizar una conversión de binario a decimal habiendo realizado todas
las operaciones en binario.

Los diez posibles dígitos en el sistema decimal pueden ser representados por bloques de cuatro bits (“0000”)
que como ya se ha visto en prácticas anteriores pueden representar hasta diez y seis valores (23 + 22 + 21 +
20 ) donde quedan seis valores sin asignar.

Un decodificador BCD a siete segmentos es aquel que acepta códigos BCD en las en las entradas y proporciona
salidas capaces de excitar un display de siete segmentos que represente un valor decimal.

Equipo y Materiales

 Equipo de cómputo con Windows con Windows XP o superior.


 Active HDL 8.1 o superior.
 Tarjeta de desarrollo.

Prerrequisitos

Mostrar una tabla de equivalencias entre sistema binario y sistema decimal.


Sistema Binario Sistema Decimal Sistema Binario Sistema Decimal
0000 0 0101 5
0001 1 0110 6
0010 2 0111 7
0011 3 1000 8
0100 4 1001 9

¿Qué diferencia existe entre un display de ánodo común y cátodo común?


En los display de ánodo común todos los leds están unidos internamente a un pin común que va conectado a
voltaje positivo y en los de cátodo común el pin común va conectado a negativo.

Realice una tabla de conversión BCD a display de siete segmentos.

Segmentos del display


Código BCD
a b c d e f g
0 0 0 0 0 0 0 0 0 0 1
0 0 0 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 0
0 0 1 1 0 0 0 0 1 1 0
0 1 0 0 1 0 0 1 1 0 0
0 1 0 1 0 1 0 0 1 0 0
0 1 1 0 0 1 0 0 0 0 0
0 1 1 1 0 0 0 1 1 1 0
1 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 1 0 0

Metodología

Se ejemplifica realizando la descripción de un decodificador BCD a decimal.

library ieee;
use ieee.std_logic_1164.all;

Entity bcdadecimal is
port (
DIN: in std_logic_vector(3 downto 0);
DOUT: out std_logic_vector(7 downto 0)
);
end bcdadecimal;

Architecture desarrollo of bcdadecimal is


begin
DOUT <=
"00000011" when DIN = "0000" else
"10011111" when DIN = "0001" else
"00100101" when DIN = "0010" else
"00001101" when DIN = "0011" else
"10011001" when DIN = "0100" else
"01001001" when DIN = "0101" else
"01000001" when DIN = "0110" else
"00011101" when DIN = "0111" else
"00000001" when DIN = "1000" else
"00001001" when DIN = "1001" else
"11111111";
end desarrollo;

Ejercicio: Explicar la descripción de Hardware presentada en el ejemplo e implementarla en una FPGA.


La descripción presenta una entidad que detecta todo el tiempo una entrada de cuatro bits que relaciona con
una salida de ocho bits que son la codificación de los bits de entrada para imprimir dígitos en un display de
siete segmentos.

Evaluación de la Práctica

Deberá realizarse una descripción de hardware según indicaciones del profesor, está deberá ser acompañada
por el código, simulación e implementación en una FPGA así como una explicación paso a paso del
funcionamiento.
Conclusiones

Explicar la necesidad de un decodificador BCD. Mencionar la relación entre las descripciones realizadas en
laboratorio y los temas vistos en clase. Proponer una implementación de una máquina de estados para una
aplicación que sirva como proyecto final.

Bibliografía

ROMERO TRONCOSO, René de Jesús, Electrónica Digital y Lógica Programable, 1ra. ED.
México, 2007. 567 p. ISBN: 968-864-449-8.

MORRIS, Mano y otros, Fundamentos de Diseño Lógico y computadoras, 1ra ed.


Naucalpan de Juárez, Edo. De México, 1998. 604 p. ISBN: 0-13-182098-2.

MAXINES, David G. y otros, VHDL El arte de programar sistemas digitales, 1ra. ed.
México, 2002. 352 p.
Nombre de la asignatura Sistemas Digitales con Lógica Reconfigurable
Nombre de la Práctica Descripción en código VHDL de un reloj
Número de Práctica 7 Número de Horas 4

Objetivo

El alumno será capaz de realizar la descripción y simulación e implementación de un reloj utilizando


VHDL además de implementarlo en una FPGA.

Marco Teórico

Un componente es la parte de un programa que define un elemento físico, el cual puede ser usado en otros
diseños o entidades. El primer paso consiste en describir de manera individual cada uno de los componentes
y/o unidades del circuito. Después de realizar los componentes se procede a crear una entidad principal donde
se implementan para crear una entidad más compleja.

Equipo y Materiales

 Equipo de cómputo con Windows con Windows XP o superior.


 Active HDL 8.1 o superior.
 Tarjeta de desarrollo.

Prerrequisitos

¿Qué es un contador?
Son entidades de diseño lógico que realizan operaciones de incremento o decremento provocadas por estimulos
externos de tiempo o eventos.

Ejemplificar la declaración de un componente.

component componente is
port(
IN1 : in std_logic;
IN2 : in std_logic;
OUT : out std_logic
);
end component;

¿Qué es un programa de alto nivel (Top Level)?


Es el algoritmo que une cada bloque o componente de diseño interconectado a través de señales o buses
internos.

¿A qué se refiere cuando se llama sistema síncrono?


A que cada uno de los elementos que interactúan en el sistema se encuentran conectados a la misma señal de
reloj.
Metodología

Realizar un Reloj

Diagrama de referencia

Generador de 1 Display
Reloj Contador 0 - 9 BCD a Display Segundos
pulso por segundo 0-9

Display
Contador 0 - 5 BCD a Display Segundos
0-5

Display
Contador 0 - 9 BCD a Display Minutos
0-9

Display
Contador 0 - 5 BCD a Display Minutos
0-5

Reset

Generador de pulsos de un segundo


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

entity segundero is
port(
RST : in std_logic;
CLK : in std_logic;
DOUT : out std_logic
);
end segundero;

architecture desarrollo of segundero is


signal seg: integer range 0 to 50000000;
begin
secuencial: process(RST,CLK)
begin
if RST='0' then
seg <= 0;
elsif CLK'event and CLK = '1' then
if seg >= 50000000 then
DOUT <= '1';
seg <= 0;
else
seg <= seg+1;
DOUT <= '0';
end if;
end if;
end process secuencial;

end desarrollo;
Contador de 0 a 9 o 0 a 5
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

entity contador_10 is
port(
RST : in std_logic;
CLK : in std_logic;
EN : out std_logic;
DOUT : out std_logic_vector(3 downto 0)
);
end contador_10;

architecture desarrollo of contador_10 is


signal Ep, Ef : std_logic_vector(3 downto 0);
signal flag: integer range 0 to 1:=0;
begin
combinacional: process(Ep)
begin
if Ep >= "1001" then – Puede ser 9 o 5
Ef <= "0000";
flag <= 1;
else
Ef <= Ep + 1;
if Ef = "0001" then
if flag=1 then
EN <= '1';
end if;
else
EN <= '0';
end if;
end if;
DOUT <= Ep;
end process combinacional;
secuencial: process(RST,CLK)
begin
if RST='0' then
Ep <= "0000";
elsif CLK'event and CLK = '1' then
Ep <= Ef;
end if;
end process secuencial;
end desarrollo;

Convertidos BCD a Decimal


library ieee;
use ieee.std_logic_1164.all;

Entity bcdadecimal is
port (
DIN: in std_logic_vector(3 downto 0);
DOUT: out std_logic_vector(7 downto 0)
);
end bcdadecimal;

Architecture desarrollo of bcdadecimal is


begin
DOUT <=
"11000000" when DIN = "0000" else
"11111001" when DIN = "0001" else
"10100100" when DIN = "0010" else
"10110000" when DIN = "0011" else
"10011001" when DIN = "0100" else
"10010010" when DIN = "0101" else
"10000010" when DIN = "0110" else
"11111000" when DIN = "0111" else
"10000000" when DIN = "1000" else
"10010000" when DIN = "1001" else
"00000000";
end desarrollo;
Integración de reloj
library ieee;
use ieee.std_logic_1164.all;

Entity Reloj is
port (
RST: in std_logic;
CLK: in std_logic;
DOUT0: out std_logic_vector(7 downto 0);
DOUT1: out std_logic_vector(7 downto 0);
DOUT2: out std_logic_vector(7 downto 0);
DOUT3: out std_logic_vector(7 downto 0)
);
end Reloj;

architecture desarrollo of Reloj is


component segundero is
port(
RST : in std_logic;
CLK : in std_logic;
DOUT: out std_logic
);
end component;

component contador_10 is
port(
RST : in std_logic;
CLK : in std_logic;
EN : out std_logic;
DOUT: out std_logic_vector(3 downto 0)
);
end component;

component contador_60 is
port(
RST : in std_logic;
CLK : in std_logic;
EN : out std_logic;
DOUT: out std_logic_vector(3 downto 0)
);
end component;

component bcdadecimal is
port (
DIN: in std_logic_vector(3 downto 0);
DOUT: out std_logic_vector(7 downto 0)
);
end component;

signal CLK_S0: std_logic;


signal CLK_S1: std_logic;
signal CLK_M0: std_logic;
signal CLK_M1: std_logic;
signal D0,D1,D2,D3: std_logic_vector(3 downto 0);

begin
U01 : segundero port map(RST, CLK, CLK_S0);

U02 : contador_10 port map(RST, CLK_S0,CLK_S1,D0);


U03 : contador_60 port map(RST, CLK_S1,CLK_M0,D1);
U04 : contador_10 port map(RST, CLK_S0,CLK_M1,D2);
U05 : contador_60 port map(RST, CLK_S0,OPEN ,D3);
U06 : bcdadecimal port map(D0,DOUT0);
U07 : bcdadecimal port map(D1,DOUT1);
U08 : bcdadecimal port map(D2,DOUT2);
U09 : bcdadecimal port map(D3,DOUT3);
end desarrollo;

Ejercicio: Explicar la descripción de Hardware presentada.

La descripción ésta compuesta por un divisor de frecuencia que parte de un reloj de 50 MHz
Para generar pulsos con un periodo de un segundo. A continuación se generan cuatro contadores
que funcionan consecutivamente para obtener el conteo de minutos y segundos.
Evaluación de la Práctica

Deberá realizarse una descripción de hardware según indicaciones del profesor, está deberá ser acompañada
por el código, simulación e implementación en una FPGA así como una explicación paso a paso del
funcionamiento.

Conclusiones

Explicar el funcionamiento del reloj desde la relación entre sus componentes utilizados. Mencionar la
relación entre las descripciones realizadas en laboratorio y los temas vistos en clase. Proponer una
implementación de un sumador para una aplicación electrónica.

Bibliografía

ROMERO TRONCOSO, René de Jesús, Electrónica Digital y Lógica Programable, 1ra. ED.
México, 2007. 567 p. ISBN: 968-864-449-8.

MORRIS, Mano y otros, Fundamentos de Diseño Lógico y computadoras, 1ra ed.


Naucalpan de Juárez, Edo. De México, 1998. 604 p. ISBN: 0-13-182098-2.

MAXINES, David G. y otros, VHDL El arte de programar sistemas digitales, 1ra. ed.
México, 2002. 352 p.
Nombre de la asignatura Sistemas Digitales con Lógica Reconfigurable
Nombre de la Práctica Descripción en código VHDL de comunicación serial
Número de Práctica 8 Número de Horas 4

Objetivo

El alumno será capaz de realizar la descripción, simulación e implementación de comunicación serial en


VHDL.

Marco Teórico

La comunicación entre dispositivos puede realizarse en serie o en paralelo. En las transferencias en paralelo
cada dato tiene su propio camino y se transmite todo el mensaje de una vez, es decir, un mensaje de n bits se
transmite en n caminos separados. En una transmisión serie cada bit del mensaje se envía en secuencia, de uno
en uno.

Transmisión Asíncrona: En las transmisiones asíncronas, cada carácter está formado por tres partes: el bit de
arranque, los bits del carácter y el bit de parada. El convenio es que el transmisor mantiene la línea a 1 cuando
no se transmiten caracteres. El primer bit, llamado bit de arranque es siempre 0 y se usa para indicar el
comienzo del carácter.

La comunicación realizada esta compuesta de la siguiente manera:

1 Bit de inicio
8 Bits de datos
1 Bit de paro
________________________
10 bits en total

LSB MSB
Inicio 0 1 3 4 5 6 7 8 Paro
B0 B1 B2 B3 B4 B5 B6 B7

El receptor puede detectar un carácter transmitido aplicando las reglas de transmisión Cuando no se envía un
carácter la línea permanece en el estado 1. La inicialización de la transmisión se detecta mediante el bit de
arranque, que es siempre 0. Los bits del carácter siempre siguen al bit de arranque. Después de que el último
bit del carácter se ha transmitido, se detecta un bit de parada cuando la línea vuelve a 1 durante al menos el
tiempo necesario para transmitir un bit. Mediante estas reglas, el receptor puede detectar el bit de arranque
cuando la línea pasa de 1 a 0. Mediante el uso de un reloj, el receptor examina la línea en los instantes de
tiempo adecuados para determinar el valor del bit. El receptor conoce la tasa de transferencia de los bits y el
número de caracteres por bit que acepta.

Transmisión síncrona: En esta transmisión para operar adecuadamente, se necesita que los relojes del
transmisor y del receptor permanezcan sincronizados todo el tiempo. La línea de comunicación solo transporta
los bits del dato, de cuya información se debe extraer la frecuencia de reloj.
Equipo y Materiales

 Equipo de cómputo con Windows con Windows XP o superior.


 Active HDL 8.1 o superior.
 Tarjeta de desarrollo.

Prerrequisitos

¿Qué es el protocolo RS-232?


Es un modelo de comunicación serial asíncrono donde las frecuencias de transmisión y recepción, aunque
deben ser iguales no se encuentran correlacionadas.

¿Qué es el bit de paridad?


Para detectar errores en la comunicación y el procesamiento de datos, a veces se añade un bit adicional a una
palabra de código binario para definir su paridad. Un bit de paridad es un bit extra incluido para conseguir
que la cantidad de 1 en la palabra de código resultante sea o par o impar.

Mencionar cinco velocidades típicas de la comunicación RS-232.


1200, 2400, 9600, 19200 y 115200 baudios.

Metodología

Se envían ocho bits de datos desde una FPGA al puerto serial de una PC.

Diagrama a bloques de envió de datos seriales

1-8 TX
Detector de
Datos
Paridad
1

Generador de Maquina de
9600 baudios Estados

Reloj
Restet
Generador de pulsos a 9600 Baudios
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

Entity Timer_9600 is
port(
RST : in std_logic;
CLK : in std_logic;
B : out std_logic
);
End Timer_9600;

Architecture behavioral of Timer_9600 is

signal cont: integer range 0 to 5208:=0;

begin
Secuencial : Process(RST,CLK)
begin
if RST='1' then
cont<=0;
elsif CLK'event and CLK='0' then
if cont=5208 then
B<='1';
cont<=0;
else
B<='0';
cont<=cont+1;
end if;
end if;
end process Secuencial;
end behavioral;

Formas de onda de generador de 9600 Baudios.

CLK es un reloj de 50 MHz.


cont es el contador que determina cuando se llega a los 5208 pulsos.

Multiplexor de datos a enviar


library IEEE;
use IEEE.std_logic_1164.all;

Entity MUX_TX is
port(
M : in std_logic_vector(3 downto 0);
D : in std_logic_vector(7 downto 0);
P : in std_logic;
TX : out std_logic
);
End MUX_TX;

architecture behavioral of MUX_TX is


begin
process(M,D,P)
begin
case M is
when "0000" => TX <= '0';
when "0001" => TX <= D(0);
when "0010" => TX <= D(1);
when "0011" => TX <= D(2);
when "0100" => TX <= D(3);
when "0101" => TX <= D(4);
when "0110" => TX <= D(5);
when "0111" => TX <= D(6);
when "1000" => TX <= D(7);
when "1001" => TX <= P;
when others => TX <= '1';
end case;
end process;
end behavioral;

Máquina de estados para enviar datos


library IEEE;
use IEEE.std_logic_1164.all;

Entity FSM_TX is
port(
RST : in std_logic;
CLK : in std_logic;
B : in std_logic;
STT : in std_logic;
EOT : out std_logic;
M : out std_logic_vector(3 downto 0)
);
end FSM_TX;

Architecture behavioral of FSM_TX is

signal Qn, Qp : std_logic_vector(3 downto 0);

begin

Combinational : process(Qp,STT,B)
begin
case Qp is
when "0000" =>
if (STT='0') then
Qn<=Qp;
else
Qn<="0001";
end if;
EOT<='1'; --End of transmision activado
M<="1111"; --Provoca que TX sea '1'
when "0001" =>
if(B='0') then
Qn<=Qp;
else
Qn<="0010";
end if;
EOT <='0'; --Desactiva
M<="1111"; -- TX sigue en '1'
when "0010" =>
if (B='0') then
Qn<=Qp;
else
Qn<="0011";
end if;
EOT<='0';
M<="0000";
when "0011" =>
if (B='0') then
Qn<=Qp;
else
Qn<="0100";
end if;
EOT<='0';
M<="0001";
when "0100" =>
if (B='0') then
Qn<=Qp;
else
Qn<="0101";
end if;
EOT<='0';
M<="0010";
when "0101" =>
if (B='0') then
Qn<=Qp;
else
Qn<="0110";
end if;
EOT<='0';
M<="0011";
when "0110" =>
if(B='0') then
Qn<=Qp;
else
Qn<="0111";
end if;
EOT<='0';
M<="0100";
when "0111" =>
if(B='0') then
Qn<=Qp;
else
Qn<="1000";
end if;
EOT<='0';
M<="0101";
when "1000" =>
if(B='0') then
Qn<=Qp;
else
Qn<="1001";
end if;
EOT<='0';
M<="0110";
when "1001" =>
if(B='0') then
Qn<=Qp;
else
Qn<="1010";
end if;
EOT<='0';
M<="0111";
when "1010" =>
if(B='0') then
Qn<=Qp;
else
Qn<="1011";
end if;
EOT<='0';
M<="1000";
when "1011" =>
if(B='0') then
Qn<=Qp;
else
Qn<="0000";
end if;
EOT<='0';
M<="1001";
when others =>
Qn<="0000";
EOT<='0';
M<="1111";
end case;
end process Combinational;

Secuential: process(RST,CLK)
begin
if(RST='1') then
Qp<=(others=>'0');
elsif(CLK'event and CLK='0') then
Qp<=Qn;
end if;
end process Secuential;
end behavioral;
Generador de Paridad

library IEEE;
use IEEE.std_logic_1164.all;

Entity Paridad is
port(
D : in std_logic_vector(7 downto 0);
P : out std_logic
);
End Paridad;

Architecture behavioral of Paridad is


begin
P <= ((D(0) xor D(1)) xor (D(2) xor D(3))) xor ((D(4) xor D(5)) xor (D(6) xor D(7)));
end behavioral;

Integración de componentes para enviar datos serialmente


library IEEE;
use IEEE.std_logic_1164.all;

Entity R_TX is
port(
RST : in std_logic;
CLK : in std_logic;
STT : in std_logic;
EOT : out std_logic;
D : in std_logic_vector(7 downto 0);
TX : out std_logic
);
end R_TX;

Architecture behavioral of R_TX is

Component FSM_TX
port(
RST : in std_logic;
CLK : in std_logic;
B : in std_logic;
STT : in std_logic;
EOT : out std_logic;
M : out std_logic_vector(3 downto 0)
);
end component;

Component Timer_9600
port(
RST : in std_logic;
CLK : in std_logic;
B : out std_logic
);
End component;

Component Paridad
port(
D : in std_logic_vector(7 downto 0);
P : out std_logic
);
End Component;

Component MUX_TX
port(
M : in std_logic_vector(3 downto 0);
D : in std_logic_vector(7 downto 0);
P : in std_logic;
TX : out std_logic
);
End Component;

signal M : std_logic_vector(3 downto 0);


signal P,B : std_logic;

begin
--Instancias
U1: FSM_TX port map(RST,CLK,B,STT,EOT,M);
U2: Timer_9600 port map(RST,CLK,B);
U3: Paridad port map(D,P);
U4: MUX_TX port map(M,D,P,TX);
end behavioral;

Banco de pruebas de transmisor serial

library IEEE;
use IEEE.std_logic_1164.all;

Entity Testbench is
end Testbench;

architecture behavioral of Testbench is

component R_TX
port(
RST : in std_logic;
CLK : in std_logic;
STT : in std_logic;
EOT : out std_logic;
D : in std_logic_vector(7 downto 0);
TX : out std_logic
);
end component;

signal RST, CLK, STT, EOT, TX : std_logic;


signal D : std_logic_vector(7 downto 0);

begin

U1: R_TX port map(RST, CLK, STT, EOT, D, TX);

--Reset
Reset : process
begin
RST <= '1';
wait for 100 ns;
RST <= '0';
wait for 100 ns;
end process Reset;

--Dato
Dato : process
begin
D <= "10100110";
wait for 100 ns;
end process;

--Inicio de transmisión
Inicio : process
begin
STT <= '0';
wait for 100 ns;
STT <= '1';
wait for 200 ns;
STT <= '0';
wait for 200 ns;
end process Inicio;
std.env.stop;
end behavioral;
Formas de onda de comunicación serial.

Evaluación de la Práctica

Deberá realizarse una descripción de hardware según indicaciones del profesor, está deberá ser acompañada
por el código, simulación e implementación en una FPGA así como una explicación paso a paso del
funcionamiento.

Conclusiones

Explicar el funcionamiento de la comunicación serial asíncrono. Mencionar la relación entre las


descripciones realizadas en laboratorio y los temas vistos en clase. Proponer una implementación de un
sumador para una aplicación electrónica.

Bibliografía

ROMERO TRONCOSO, René de Jesús, Electrónica Digital y Lógica Programable, 1ra. ED.
México, 2007. 567 p. ISBN: 968-864-449-8.

MORRIS, Mano y otros, Fundamentos de Diseño Lógico y computadoras, 1ra ed.


Naucalpan de Juárez, Edo. De México, 1998. 604 p. ISBN: 0-13-182098-2.

MAXINES, David G. y otros, VHDL El arte de programar sistemas digitales, 1ra. ed.
México, 2002. 352 p.

También podría gustarte