Facultad de Ingeniería en Eléctrica y Computación
Laboratorio de Digitales
Tema proyecto:
“Decodificador de datos”
Grupo 10:
Ronny Murillo
Diego Pezo
Paralelo: 7 y8
Ing. Ronald Ponguillo
Guayaquil, Ecuador
II Término 2012-2013
1.- ESPECIFICACION:
DECODIFICADOR DE DATOS
Diseñar un circuito secuencial sincrónico con una línea de entrada serial, que recibirá una trama
que consta de diez bits, con el siguiente formato:
Para que la trama sea válida deberá tener las siguientes características:
La secuencia de inicio consta de los tres bits: 110
Los cuatro dígitos siguientes corresponden a la información, que es un número en formato BCD
El siguiente bit es un bit de complemento, que para nuestro caso no significará nada en
especial
Los dos últimos bits representan la secuencia de fin de trama y será: 01
El circuito estará listo para recibir la trama cada vez que se presione y suelte el botón START.
Este circuito deberá hacer la validación de la trama y en caso de haber error generar la señal
correspondiente. Los tres posibles errores que se pueden dar son: Error de secuencia de inicio,
Error de secuencia de fin y error de formato de dato, cada uno de los cuales se presentarán
visualmente por medio de diodos led, y de activarse deberán mantener su estado hasta que se
presione la señal START. Si existe una trama válida se deberá encender la salida VALIDO y si
se presiona el botón MOSTRAR deberá verse el dato en un display de siete segmentos.
El circuito DECODIFICADOR DE DATOS debe funcionar tanto con reloj manual (pulsando un
botón), como con reloj automático.
2.- DIAGRAMA DE BLOQUE
Para la entrada nos están pidiendo que sea por un solo terminal serial en este caso procedemos
a plantear cual será el mecanismo que usaremos para guardar los datos de entrada, usando un
registro de desplazamiento para ir almacenado los datos e ingresando los nuevos datos, a su
vez colocaremos un contador para que nos envíe una señal cuando ya hayamos ingresado los
diez datos, el controlador recibirá estas señales para enviarnos a otro estado donde
verificaremos las diferentes partes de la trama.
La parte de la verificación de la trama se hace mediante unos comparadores, luego esa salidas
de esos comparadores serán evaluadas para ver qué tipos de errores tiene la trama, una vez
que toda la trama ha sido verificada, en un estado del controlador esperara en caso de ser
valido el dato la señal de mostrar, luego mostrara el dato en el display y por ultimo cuando
presionemos la entrada start nos llevara al estado inicial.
Controlador
Módulo de ingreso
de datos.
Módulo de
verificación de los
datos,
comparadores, uno
para cada parte de
la trama.
Modulo de salida
de los datos,
decodificador,
display de 7
segmentos y leds
para los errores.
3.- CONTROLADORDEL CIRCUITO
DESCRIPCION DE LAS SEÑALES:
ENTRADA
CLOCK.-Señal de reloj. El sistema trabaja con dos diferentes frecuencias de reloj, usamos 10Hz
para la maquina de estados del controlador (ASM).
START.- Botonera de lógica positiva. Señal de inicio del sistema, necesaria para comenzar el
ingreso del dato.
DATO.- Señal con lógica positiva, que indica el dato de ingreso que procederemos a verificar.
ENTER.- Señal con lógica positiva, que resetea el valor de los contadores de cada trabajador,
para un nuevo control de tiempo.
MOSTRAR.- Señal con lógica positiva, que permite ver el valor del numerobcd valido.
C0.- Señal con lógica positiva, sirve para verificar que se ingresaron los 10 bits del datos.
CN Señal con lógica positiva, sirve para verificar que el Dato sea valido o erróneo.
RESETN.- Botonera de lógica negativa. Señal de reinicio, que al presionarse, regresa a todo el
sistema a su estado inicial.
SALIDA
EN.- indica que el Dato va ha guardarse en un registro de sostenimiento.
EN1 Y LD1.- son las señales enviadas a un registro de desplazamiento, para desplazar 1 0
respectivamente y 1 1 para resetear el dato.
EN2 Y LD2.- son las señales enviadas a un contador hacia atrás, para contar 1 0
respectivamente y 1 1 para resetear el dato.
SEL.-esta señal es enviada a un mux2a1 para mostrar el dato si este fuera el caso.
SEL1.- esta señal es enviada a un mux2a1 al momento de ingresar un dato altoo uno.
SEL2.-esta señal es enviada a un mux2a1 para mostrar el error como un vector.
VALIDO.- indica por medio del encendido de un led si el valor del Dato es correcto.
DI.-indica por medio de un led que el sistema está receptando el valor del Dato.
CONTROLADOR
Clock
Resetn
Dato
Enter
Start
Mostrar
En
Sel
Sel1
Valido
En2 Ld2
En1 Ld1
Sel2
DI
C0
Cn
4.- DIAGRAMA ASM DEL CONTROLADOR
El controlador es un bloque de nuestro diseño el cual se encarga de manejar las senales
internas de nuestro circuito, activando la respectivas salidas cuando sea necesario, secuencial
este bloque es el principal de una MSS porque es el que le da la secuencialidad al circuito, la
implementacion puede ser de dos formas pero para nuestro proyecto la implementacion es en
vhdl, y para la señal de reloj usaremos el reloj interno del CPLD.
En En1 Ld1
En2 Ld2
Start
Start
Tb
Resetn
0
1
Ta
0
1
DI
C0
DI Sel1
Enter
Td
0
1
Tc
0
1
Dato
0
Enter
DI
Enter
Te
0
1
En1 En2
En1 En2
1
En
Cn
11
Tf
Valido
Mostrar
Sel
Ti
0
1
0
Th
Start
Sel2
Start
Tj
0
1
Start
0
0
0
0
Tg
5.- DIAGRAMA DE TIEMPO
Figura 4
Del circuito controlador principal, que debe indicar todas las señales de entrada
y salida del mismo. Este diagrama debe obtenerse de la simulación previa del
sistema en MAX+PLUS II.
6.- ESQUEMATICO: Quartus II
Figura 5
Compilación del esquemático junto con todo los vhdl agregados al proyecto,
mostrándonos una respectiva ejecución con éxito.
VCC
Resetn INPUT
VCC
Dato INPUT
VCC
Enter INPUT
VCC
Start INPUT
VCC
Mostrar INPUT
VCC
Pulso INPUT
VCC
Auto INPUT
ValidoOUTPUT
EinicioOUTPUT
Ef ormatoOUTPUT
Ef inOUTPUT
DIOUTPUT
Display [1..7]OUTPUT
Resetn
Clock
Dato
Enter
Start
Mostrar
Valido
Einicio
Ef ormato
Ef in
DI
Display [1..7]
data_decoder
inst
CLOCK_8MHz CLOCK_1MHz
CLOCK_100KHz
CLOCK_10KHz
CLOCK_1KHz
CLOCK_100Hz
CLOCK_10Hz
CLOCK_1Hz
CLOCK_DIV
inst1
PB_N
CLOCK_100Hz
PB_SIN_REBOTE
ANTIREBOTE
inst3 PB_SIN_REBOTE
CLOCK
UN_PULSO
RELOJ
inst4
A
B
Sel
S
mux21
inst2
7. VHDL
DATA DECODER (PRINCIPAL)
libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
usework.elementos.all;
Entity data_decoder is
port(Resetn,Clock,Dato,Enter,Start,Mostrar:instd_logic;
Valido,Einicio,Eformato,Efin,DI:outstd_logic;
Display:outstd_logic_vector(1 to 7));
End data_decoder;
Architecture sol of data_decoder is
Signal En,En1,Ld1,En2,Ld2,Tecla,Sel,Sel1,Sel2: std_logic;
Signal C0,C1,C2,C3,Cn,mayor1,menor1,mayor2,igual2,mayor3,menor3: std_logic;
Signal cero10,Q,R: std_logic_vector(9 downto 0);
signal diez,conteo,formato,uno4,S,cero4,S1,C,cero,L: std_logic_vector(3 downto 0);
signalinicio: std_logic_vector(2 downto 0);
signal fin: std_logic_vector(1 downto 0);
Begin
Reg_des_d_i:reg_d_i generic map(n=>10)
port map(Resetn,Clock,En1,Ld1,L(0),cero10,R);
Reg_1:reg_sost generic map(n=>10)
port map(Resetn,Clock,En,R,Q);
Contd:contador_down generic map(n=>4)
port map(Resetn,Clock,En2,Ld2,diez,conteo);
Comp1:comp generic map(n=>3)
port map(inicio,Q(9 downto 7),mayor1,C1,menor1);
Comp2:comp generic map(n=>4)
port map(Q(6 downto 3),formato,mayor2,igual2,C2);
Comp3:comp generic map(n=>2)
port map(Q(1 downto 0),fin,mayor3,C3,menor3);
muxd:mux port map(uno4,Q(6 downto 3),sel,S);
muxe:muxportmap(cero4,C,Sel2,S1);
muxf:muxportmap(cero,uno4,Sel1,L);
dec7seg:DEC_BCD_7 port map(S,Display);
controlador:controlador_decport
map(Resetn,Clock,Start,Mostrar,Dato,Enter,Cn,C0,En1,En2,Ld1,Ld2,En,Valido,Sel,Sel1,Sel2,DI);
C0<='1' when conteo="0000" else '0';
Cn<='1' when C="0000" else '0';
C(3)<=not C3;
C(2)<=not C2;
C(1)<=not C1;
C(0)<='0';
cero10<="0000000000";
diez<="1010";
inicio<="110";
formato<="1010";
fin<="01";
cero4<="0001";
uno4<="1111";
cero<="0000";
Einicio<=S1(1);
Eformato<=S1(2);
Efin<=S1(3);
End sol;
CONTROLADOR
libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
Entity controlador_dec is
port(Resetn,Clock,Start,Mostrar,Dato,Enter,Cn,C0:in std_logic;
En1,En2,Ld1,Ld2,En,Valido,Sel,Sel1,Sel2,DI:out std_logic);
endcontrolador_dec;
Architecture sol of controlador_dec is
type estado is(Ta,Tb,Tc,Td,Te,Tf,Tg,Th,Ti,Tj);
signal y:estado;
Begin
--controlador
Process(Resetn,Clock)
Begin
if Resetn='0' then y<=Ta;
elsifclock'event and clock='1' then
case y is
when Ta=>if Start='0' then y<=Ta;
else y<=Tb; end if;
when Tb=>if Start='1' then y<=Tb;
else y<=Tc; end if;
when Tc=>if C0='1' then y<=Tf;
elsif Dato='1' then y<=Td;
elsif Enter='1' then y<=Te;
else y<=Tc; end if;
when Td=>if Enter='1' then y<=Te;
else y<=Td; end if;
when Te=>if Enter='1' then y<=Te;
else y<=Tc; end if;
when Tf=>if Cn='1' then y<=Th;
else y<=Tg; end if;
whenTg=>if Start='0' then y<=Tg;
else y<=Tj; end if;
whenTh=>if Mostrar='0' then y<=Th;
else y<=Ti; end if;
when Ti=>if Start='0' then y<=Ti;
else y<=Tj; end if;
when Tj=>if Start='0' then y<=Ta;
else y<=Tj; end if;
end case;
end if;
end process;
--salidas
Process(y,Start,Mostrar,Dato,Enter,C0,Cn)
Begin
En1<='0'; En2<='0'; Ld1<='0'; Ld2<='0'; En<='0'; Sel<='0';
Sel1<='0'; Sel2<='0'; Valido<='0'; DI<='0';
Case y is
When Ta=>En1<='1'; Ld1<='1'; En2<='1'; Ld2<='1'; En<='1';
When Tb=>
When Tc=>DI<='1';
if Enter='1' then
En1<='1'; En2<='1';
end if;
if C0='1' then
En<='1';
end if;
When Td=>Sel1<='1'; DI<='1';
if Enter='1' then
En1<='1'; En2<='1';
end if;
When Te=>DI<='1';
When Tf=>
When Tg=>Sel2<='1';
When Th=>Valido<='1';
When Ti=>Sel<='1';
When Tj=>
end case;
end process;
end sol;
8.REPORTE SOBRE APROVECHAMIENTO

Decodificador de datos en vhld y usando Quartus II

  • 1.
    Facultad de Ingenieríaen Eléctrica y Computación Laboratorio de Digitales Tema proyecto: “Decodificador de datos” Grupo 10: Ronny Murillo Diego Pezo Paralelo: 7 y8 Ing. Ronald Ponguillo Guayaquil, Ecuador II Término 2012-2013
  • 2.
    1.- ESPECIFICACION: DECODIFICADOR DEDATOS Diseñar un circuito secuencial sincrónico con una línea de entrada serial, que recibirá una trama que consta de diez bits, con el siguiente formato: Para que la trama sea válida deberá tener las siguientes características: La secuencia de inicio consta de los tres bits: 110 Los cuatro dígitos siguientes corresponden a la información, que es un número en formato BCD El siguiente bit es un bit de complemento, que para nuestro caso no significará nada en especial Los dos últimos bits representan la secuencia de fin de trama y será: 01 El circuito estará listo para recibir la trama cada vez que se presione y suelte el botón START. Este circuito deberá hacer la validación de la trama y en caso de haber error generar la señal correspondiente. Los tres posibles errores que se pueden dar son: Error de secuencia de inicio, Error de secuencia de fin y error de formato de dato, cada uno de los cuales se presentarán visualmente por medio de diodos led, y de activarse deberán mantener su estado hasta que se presione la señal START. Si existe una trama válida se deberá encender la salida VALIDO y si se presiona el botón MOSTRAR deberá verse el dato en un display de siete segmentos. El circuito DECODIFICADOR DE DATOS debe funcionar tanto con reloj manual (pulsando un botón), como con reloj automático.
  • 3.
    2.- DIAGRAMA DEBLOQUE Para la entrada nos están pidiendo que sea por un solo terminal serial en este caso procedemos a plantear cual será el mecanismo que usaremos para guardar los datos de entrada, usando un registro de desplazamiento para ir almacenado los datos e ingresando los nuevos datos, a su vez colocaremos un contador para que nos envíe una señal cuando ya hayamos ingresado los diez datos, el controlador recibirá estas señales para enviarnos a otro estado donde verificaremos las diferentes partes de la trama. La parte de la verificación de la trama se hace mediante unos comparadores, luego esa salidas de esos comparadores serán evaluadas para ver qué tipos de errores tiene la trama, una vez que toda la trama ha sido verificada, en un estado del controlador esperara en caso de ser valido el dato la señal de mostrar, luego mostrara el dato en el display y por ultimo cuando presionemos la entrada start nos llevara al estado inicial. Controlador Módulo de ingreso de datos. Módulo de verificación de los datos, comparadores, uno para cada parte de la trama. Modulo de salida de los datos, decodificador, display de 7 segmentos y leds para los errores.
  • 4.
    3.- CONTROLADORDEL CIRCUITO DESCRIPCIONDE LAS SEÑALES: ENTRADA CLOCK.-Señal de reloj. El sistema trabaja con dos diferentes frecuencias de reloj, usamos 10Hz para la maquina de estados del controlador (ASM). START.- Botonera de lógica positiva. Señal de inicio del sistema, necesaria para comenzar el ingreso del dato. DATO.- Señal con lógica positiva, que indica el dato de ingreso que procederemos a verificar. ENTER.- Señal con lógica positiva, que resetea el valor de los contadores de cada trabajador, para un nuevo control de tiempo. MOSTRAR.- Señal con lógica positiva, que permite ver el valor del numerobcd valido. C0.- Señal con lógica positiva, sirve para verificar que se ingresaron los 10 bits del datos. CN Señal con lógica positiva, sirve para verificar que el Dato sea valido o erróneo. RESETN.- Botonera de lógica negativa. Señal de reinicio, que al presionarse, regresa a todo el sistema a su estado inicial. SALIDA EN.- indica que el Dato va ha guardarse en un registro de sostenimiento. EN1 Y LD1.- son las señales enviadas a un registro de desplazamiento, para desplazar 1 0 respectivamente y 1 1 para resetear el dato. EN2 Y LD2.- son las señales enviadas a un contador hacia atrás, para contar 1 0 respectivamente y 1 1 para resetear el dato. SEL.-esta señal es enviada a un mux2a1 para mostrar el dato si este fuera el caso. SEL1.- esta señal es enviada a un mux2a1 al momento de ingresar un dato altoo uno. SEL2.-esta señal es enviada a un mux2a1 para mostrar el error como un vector. VALIDO.- indica por medio del encendido de un led si el valor del Dato es correcto. DI.-indica por medio de un led que el sistema está receptando el valor del Dato. CONTROLADOR Clock Resetn Dato Enter Start Mostrar En Sel Sel1 Valido En2 Ld2 En1 Ld1 Sel2 DI C0 Cn
  • 5.
    4.- DIAGRAMA ASMDEL CONTROLADOR El controlador es un bloque de nuestro diseño el cual se encarga de manejar las senales internas de nuestro circuito, activando la respectivas salidas cuando sea necesario, secuencial este bloque es el principal de una MSS porque es el que le da la secuencialidad al circuito, la implementacion puede ser de dos formas pero para nuestro proyecto la implementacion es en vhdl, y para la señal de reloj usaremos el reloj interno del CPLD. En En1 Ld1 En2 Ld2 Start Start Tb Resetn 0 1 Ta 0 1 DI C0 DI Sel1 Enter Td 0 1 Tc 0 1 Dato 0 Enter DI Enter Te 0 1 En1 En2 En1 En2 1 En Cn 11 Tf Valido Mostrar Sel Ti 0 1 0 Th Start Sel2 Start Tj 0 1 Start 0 0 0 0 Tg
  • 6.
    5.- DIAGRAMA DETIEMPO Figura 4 Del circuito controlador principal, que debe indicar todas las señales de entrada y salida del mismo. Este diagrama debe obtenerse de la simulación previa del sistema en MAX+PLUS II. 6.- ESQUEMATICO: Quartus II Figura 5 Compilación del esquemático junto con todo los vhdl agregados al proyecto, mostrándonos una respectiva ejecución con éxito. VCC Resetn INPUT VCC Dato INPUT VCC Enter INPUT VCC Start INPUT VCC Mostrar INPUT VCC Pulso INPUT VCC Auto INPUT ValidoOUTPUT EinicioOUTPUT Ef ormatoOUTPUT Ef inOUTPUT DIOUTPUT Display [1..7]OUTPUT Resetn Clock Dato Enter Start Mostrar Valido Einicio Ef ormato Ef in DI Display [1..7] data_decoder inst CLOCK_8MHz CLOCK_1MHz CLOCK_100KHz CLOCK_10KHz CLOCK_1KHz CLOCK_100Hz CLOCK_10Hz CLOCK_1Hz CLOCK_DIV inst1 PB_N CLOCK_100Hz PB_SIN_REBOTE ANTIREBOTE inst3 PB_SIN_REBOTE CLOCK UN_PULSO RELOJ inst4 A B Sel S mux21 inst2
  • 7.
    7. VHDL DATA DECODER(PRINCIPAL) libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_unsigned.all; usework.elementos.all; Entity data_decoder is port(Resetn,Clock,Dato,Enter,Start,Mostrar:instd_logic; Valido,Einicio,Eformato,Efin,DI:outstd_logic; Display:outstd_logic_vector(1 to 7)); End data_decoder; Architecture sol of data_decoder is Signal En,En1,Ld1,En2,Ld2,Tecla,Sel,Sel1,Sel2: std_logic; Signal C0,C1,C2,C3,Cn,mayor1,menor1,mayor2,igual2,mayor3,menor3: std_logic; Signal cero10,Q,R: std_logic_vector(9 downto 0); signal diez,conteo,formato,uno4,S,cero4,S1,C,cero,L: std_logic_vector(3 downto 0); signalinicio: std_logic_vector(2 downto 0); signal fin: std_logic_vector(1 downto 0); Begin Reg_des_d_i:reg_d_i generic map(n=>10) port map(Resetn,Clock,En1,Ld1,L(0),cero10,R); Reg_1:reg_sost generic map(n=>10) port map(Resetn,Clock,En,R,Q); Contd:contador_down generic map(n=>4) port map(Resetn,Clock,En2,Ld2,diez,conteo); Comp1:comp generic map(n=>3) port map(inicio,Q(9 downto 7),mayor1,C1,menor1); Comp2:comp generic map(n=>4) port map(Q(6 downto 3),formato,mayor2,igual2,C2); Comp3:comp generic map(n=>2) port map(Q(1 downto 0),fin,mayor3,C3,menor3); muxd:mux port map(uno4,Q(6 downto 3),sel,S); muxe:muxportmap(cero4,C,Sel2,S1); muxf:muxportmap(cero,uno4,Sel1,L); dec7seg:DEC_BCD_7 port map(S,Display); controlador:controlador_decport map(Resetn,Clock,Start,Mostrar,Dato,Enter,Cn,C0,En1,En2,Ld1,Ld2,En,Valido,Sel,Sel1,Sel2,DI); C0<='1' when conteo="0000" else '0'; Cn<='1' when C="0000" else '0'; C(3)<=not C3; C(2)<=not C2; C(1)<=not C1; C(0)<='0'; cero10<="0000000000"; diez<="1010"; inicio<="110"; formato<="1010"; fin<="01"; cero4<="0001"; uno4<="1111"; cero<="0000"; Einicio<=S1(1); Eformato<=S1(2); Efin<=S1(3); End sol; CONTROLADOR libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_unsigned.all; Entity controlador_dec is port(Resetn,Clock,Start,Mostrar,Dato,Enter,Cn,C0:in std_logic; En1,En2,Ld1,Ld2,En,Valido,Sel,Sel1,Sel2,DI:out std_logic); endcontrolador_dec; Architecture sol of controlador_dec is type estado is(Ta,Tb,Tc,Td,Te,Tf,Tg,Th,Ti,Tj); signal y:estado; Begin --controlador Process(Resetn,Clock) Begin
  • 8.
    if Resetn='0' theny<=Ta; elsifclock'event and clock='1' then case y is when Ta=>if Start='0' then y<=Ta; else y<=Tb; end if; when Tb=>if Start='1' then y<=Tb; else y<=Tc; end if; when Tc=>if C0='1' then y<=Tf; elsif Dato='1' then y<=Td; elsif Enter='1' then y<=Te; else y<=Tc; end if; when Td=>if Enter='1' then y<=Te; else y<=Td; end if; when Te=>if Enter='1' then y<=Te; else y<=Tc; end if; when Tf=>if Cn='1' then y<=Th; else y<=Tg; end if; whenTg=>if Start='0' then y<=Tg; else y<=Tj; end if; whenTh=>if Mostrar='0' then y<=Th; else y<=Ti; end if; when Ti=>if Start='0' then y<=Ti; else y<=Tj; end if; when Tj=>if Start='0' then y<=Ta; else y<=Tj; end if; end case; end if; end process; --salidas Process(y,Start,Mostrar,Dato,Enter,C0,Cn) Begin En1<='0'; En2<='0'; Ld1<='0'; Ld2<='0'; En<='0'; Sel<='0'; Sel1<='0'; Sel2<='0'; Valido<='0'; DI<='0'; Case y is When Ta=>En1<='1'; Ld1<='1'; En2<='1'; Ld2<='1'; En<='1'; When Tb=> When Tc=>DI<='1'; if Enter='1' then En1<='1'; En2<='1'; end if; if C0='1' then En<='1'; end if; When Td=>Sel1<='1'; DI<='1'; if Enter='1' then En1<='1'; En2<='1'; end if; When Te=>DI<='1'; When Tf=> When Tg=>Sel2<='1'; When Th=>Valido<='1'; When Ti=>Sel<='1'; When Tj=> end case; end process; end sol; 8.REPORTE SOBRE APROVECHAMIENTO