Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Facultad de Ingeniería
Manual de Prácticas
Sistemas Digitales con Lógica Reconfigurable (SDLRI)
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 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 7: Reloj.
.
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.
Equipo y Materiales
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;
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.
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
Datos (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;
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;
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.
Objetivo
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.
Equipo y Materiales
Prerrequisitos
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.
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.
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
a(1:0)
b(1:0) o(1:0)
c(1:0)
s(1:0)
library IEEE;
use IEEE.std_logic_1164.all;
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
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
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.
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
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).
0 + 0 = 01
0 + 1 = 01
1 + 0 = 01
1 + 1 = 10
Equipo y Materiales
Prerrequisitos
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
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;
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
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
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.
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
Prerrequisitos
Metodología
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;
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;
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
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.
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
Prerrequisitos
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.
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.
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:
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
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.
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
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
Prerrequisitos
Metodología
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;
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.
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
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
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.
component componente is
port(
IN1 : in std_logic;
IN2 : in std_logic;
OUT : out std_logic
);
end component;
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
entity segundero is
port(
RST : in std_logic;
CLK : in std_logic;
DOUT : out std_logic
);
end segundero;
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;
Entity bcdadecimal is
port (
DIN: in std_logic_vector(3 downto 0);
DOUT: out std_logic_vector(7 downto 0)
);
end bcdadecimal;
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;
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;
begin
U01 : segundero port map(RST, CLK, CLK_S0);
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.
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
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.
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
Prerrequisitos
Metodología
Se envían ocho bits de datos desde una FPGA al puerto serial de una PC.
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;
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;
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;
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;
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;
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;
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;
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;
library IEEE;
use IEEE.std_logic_1164.all;
Entity Testbench is
end Testbench;
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;
begin
--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
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.
MAXINES, David G. y otros, VHDL El arte de programar sistemas digitales, 1ra. ed.
México, 2002. 352 p.