Está en la página 1de 16

INTERFAZ ENTRE PS/2_KEYBOARD Y

LCD EN SPARTAN-3E

Esta interfaz fue creada con el software XILINX ISE


8.1; realizado con un diseo jerrquico el cual contiene 5
mdulos (2 mdulos del driver LCD, 2 mdulos del driver
ps2_kbd, y el mdulo de programa principal controlador) y el
source ucf que es la asignacin de pines de la tarjeta.
DRIVERS.Los dos drivers utilizados en este proyecto se los puede resumir
de la siguiente manera:
El puerto PS/2 contiene 6 pines: 1 pin de dato, 1 pin de clock, el
pin de Vcc y GND y dos pines restantes sin utilizar. El pin del
dato es el ms importante ya que permite la comunicacion serial
entre el teclado y la tarjeta SPARTAN 3E. Este dato tiene
recepcin como transmisin teniendo el siguiente tratamiento
de seal: 1 bit de start, 8 bits de dato, 1 bit de stop, odd partiy. El
puerto de salida scancode dado en el driver del teclado permite
que envie el cdigo binario de todos los caracteres del teclado
para poder luego mostrarlos en la LCD.

El driver del keyboard PS/2 para la tarjeta SPARTAN 3E de


XILINX se lo encuentra en el siguiente enlace:
Descargar Driver keyboard PS/2
La LCD es un dispositivo de gran ayuda en el campo de la
electrnica, es una panatalla de cristal lquida que se forma de
un numero de pixeles moncromos (el ms utilizado es de
resolucin 2 x 16); la interfaz entre la tarjeta SPARTAN 3E y la
LCD se da por 4 pines de datos <SF_D> y 4 pnes de control
<lcd_rs, lcd_rw, lcd_e, sf_ce0>

Con una mejor informacin y entendimiento del driver de la


LCD para la tarjeta SPARTAN 3E se lo encuentra en el siguiente
enlace el cual posee un tutorial de como controlar o modificar la
LCD, su hardware y la mquina de estados que permite el
funcionamiento, este tutorial hecho por Rahul Vora, estudiante
de la facultad de Ingenieria Elctrica y Computacin de la
Universidad de Nuevo Mxico.

Descargar: Driver LCD - Tutorial LCD


A continuacin mostramos el codigo principal donde hemos ya
agregado los paquetes y adems dejamos como comentario el
ucf del proyecto, donde mostramos la asignacin de pines en la
tarjeta que se la debe hacer con la opcin Assign Package
Pins. en el software
INTEFAZ TECLADO PS/2 LCD
desarrollada con SPARTAN 3E XC3S500E-FG320-4C PROFESIONALES EN FORMACION DE
LA ESCUELA ELECTRONICA Y TELECOMUNICACIONES UTPL: JIMMY ARROBO, CARLOS
ROMERO, DIEGO SANMARTN
PROGRAMA PRINCIPAL DE CONTROL library IEEE; use IEEE.STD_LOGIC_1164.ALL; use
IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use
work.teclao_pcg.all; use work.lcdpkg.all; Asignacion de Pines : clk(C9), reset(L13), ps2_clk(G14),
ps2_data(G13), lcd_rs(L18), lcd_rw(L17), lcd_e(M18), sf_ce0(D16),
sf_d<0>(R15),sf_d<1>(R16), sf_d<2>(P17), sf_d<3>(M15) entity ucontrol is Declaracion de
Puertos IN/OUT Port ( ps2_data,ps2_clk: in STD_LOGIC;DATOS TECLADO
reset,clk: in std_logic;-reset general lcd y clk general sf_d: out
std_logic_vector(3 downto 0); lcd pines de datos lcd_e, lcd_rs, lcd_rw, sf_ce0: out std_logic);
lcd pines de control end entity ucontrol; architecture Behavioral of ucontrol is signal codigo:
STD_LOGIC_VECTOR (7 downto 0);NOS AYUDA A IDENTIFICAR LAS LETRAS DEL TECLADO
signal w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,
w20,w21,w22,w23,w24,w25,w26,w27,w28,w29,w30,w31,w32: std_logic_vector(7 downto 0); signal
s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,
s23,s24,s25,s26,s27,s28,s29,s30,s31,s32: std_logic_vector(7 downto 0); signal temp_1, temp_2,
temp_3: std_logic_vector (1 downto 0) := 00; signal a: std_logic; signal busy,puls: std_logic;
signal b: std_logic_vector(3 downto 0); signal d: std_logic_vector(3 downto 0); signal t:
std_logic:=0; signal reseteo: std_logic:=0; signal segundos: integer:=0; signal x1,x2,x3,x4,x5: bit;
signal i: integer range 0 to 50000000:=0; type estados is
(d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,
d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,d32,d33,d34,d35,d36,d37,d38,
d39,d40,d41,d42,d43,d44,d45,d46,d47,d48,d49,d50,d51,d52,d53,d54,d55,d56,
d57,d58,d59,d60,d61,d62); signal edo_presente, edo_futuro:estados; begin Empiezan los port
map de cada driver Driver del teclado u1:teclado port map ( reseteo => reseteo, clk => clk, rst =>
reset, ps2_clk => ps2_clk, ps2_data => ps2_data, scancode => codigo, parity => OPEN, busy =>

busy, rdy => puls, error => OPEN); Driver de la LCD u2: lcd_opciones port map ( clk =>clk, reset
=> reset, w1 => w1, primera posicion primera linea w2 => w2, w3 => w3, w4 => w4, w5 => w5,
w6 => w6, w7 => w7, w8 => w8, w9 => w9, w10=> w10, w11=> w11, w12=> w12, w13=> w13,
w14=> w14, w15=> w15, w16=> w16, w17=> w17, w18=> w18, w19=> w19, w20=> w20, w21=> w21,
w22=> w22, w23=> w23, w24=> w24, w25=> w25, w26=> w26, w27=> w27, w28=> w28, w29=>
w29, w30=> w30, w31=> w31, w32=> w32, ultima posicion segunda linea sf_d => sf_d, num =>
0000, lcd_e => lcd_e, lcd_rs => lcd_rs, lcd_rw => lcd_rw, sf_ce0 => sf_ce0); escribimos en
la LCD w1 <=s1; w2 <=s2; w3 <=s3; w4 <=s4; w5 <=s5; w6 <=s6; w7 <=s7; w8
<=s8; w9 <=s9; w10<=s10; w11<=s11; w12<=s12; w13<=s13; w14<=s14; w15<=s15;
w16<=s16; w17<=s17; w18<=s18; w19<=s19; w20<=s20; w21<=s21; w22<=s22;
w23<=s23; w24<=s24; w25<=s25; w26<=s26; w27<=s27; w28<=s28; w29<=s29;
w30<=s30; w31<=s31; w32<=s32;
Diseo MEF que controla el teclado y LCD Proceso 1 Combinacional proceso1:
process(edo_presente,codigo) lista sensitiva de estado_presente y scancode de teclado variable
key_press: std_logic_vector (7 downto 0); begin case codigo is when 00011100=>key_press:=
01000001;a when 00110010=>key_press:= 01000010;b when 00100001=>key_press:=
01000011;c when 00100011=>key_press:= 01000100;d when 00101011
=>key_press:=01000110; f when 00110100 =>key_press:=01000111; g when 00110011
=>key_press:=01001000; h when 01000011 =>key_press:=01001001; i when 00111011
=>key_press:=01001010; j when 01000010 =>key_press:=01001011; k when 01001011
=>key_press:=01001100; l when 00111010 =>key_press:=01001101; m when 00110001
=>key_press:=01001110; n when 01000100 =>key_press:=01001111; o when 01001101
=>key_press:=01010000; p when 00010101 =>key_press:=01010001; q when 00101101
=>key_press:=01010010; r when 00011011 =>key_press:=01010011; s when 00101100
=>key_press:=01010100; t when 00111100 =>key_press:=01010101; u when 00101010
=>key_press:=01010110; v when 00011101 =>key_press:=01010111; w when 00100010
=>key_press:=01011000; x when 00110101 =>key_press:=01011001; y when 00100100
=>key_press:=01000101; e when 00011010=>key_press:= 01011010; z when 00101001
=>key_press:=10100000; espacio when 00010110 =>key_press:=00110001; 1 when
00011110 =>key_press:=00110010; 2 when 00100110 =>key_press:=00110011; 3 when
00100101 =>key_press:=00110100; 4 when 00101110 =>key_press:=00110101; 5 when
00110110 =>key_press:=00110110; 6 when 00111101 =>key_press:=00110111; 7 when
00111110 =>key_press:=00111000; 8 when 01000110 =>key_press:=00111001; 9 when
01000101 =>key_press:=00110000; 0 when others=> key_press:=00000000; end case;
case edo_presente is when d0=> if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or

(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or


(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s1<=key_press; edo_futuro<=d1; else edo_futuro<=d0; end if; when d1=> reseteo<=1;
edo_futuro<=d2; when d2=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s2<=key_press; edo_futuro<=d3; else edo_futuro<=d2; end if; when d3=> reseteo<=1;
edo_futuro<=d4; when d4=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s3<=key_press; edo_futuro<=d5; else edo_futuro<=d4; end if; when d5=> reseteo<=1;
edo_futuro<=d6; when d6=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or

(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or


(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s4<=key_press; edo_futuro<=d7; else edo_futuro<=d6; end if; when d7=> reseteo<=1;
edo_futuro<=d8; when d8=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s5<=key_press; edo_futuro<=d9; else edo_futuro<=d8; end if; when d9=> reseteo<=1;
edo_futuro<=d10; when d10=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s6<=key_press; edo_futuro<=d11; else edo_futuro<=d10; end if; when d11=> reseteo<=1;
edo_futuro<=d12; when d12=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or

(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or


(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s7<=key_press; edo_futuro<=d13; else edo_futuro<=d12; end if; when d13=> reseteo<=1;
edo_futuro<=d14; when d14=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s8<=key_press; edo_futuro<=d15; else edo_futuro<=d14; end if; when d15=> reseteo<=1;
edo_futuro<=d16; when d16=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s9<=key_press; edo_futuro<=d17; else edo_futuro<=d16; end if; when d17=> reseteo<=1;
edo_futuro<=d18; when d18=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s10<=key_press; edo_futuro<=d19; else edo_futuro<=d18; end if; when d19=> reseteo<=1;

edo_futuro<=d20; when d20=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or


(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s11<=key_press; edo_futuro<=d21; else edo_futuro<=d20; end if; when d21=> reseteo<=1;
edo_futuro<=d22; when d22=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s12<=key_press; edo_futuro<=d23; else edo_futuro<=d22; end if; when d23=> reseteo<=1;
edo_futuro<=d24; when d24=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s13<=key_press; edo_futuro<=d25; else edo_futuro<=d24; end if; when d25=> reseteo<=1;
edo_futuro<=d26; when d26=> reseteo<=0; iif(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or

(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or


(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s14<=key_press; edo_futuro<=d27; else edo_futuro<=d26; end if; when d27=> reseteo<=1;
edo_futuro<=d28; when d28=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s15<=key_press; edo_futuro<=d29; else edo_futuro<=d28; end if; when d29=> reseteo<=1;
edo_futuro<=d30; when d30=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s16<=key_press; edo_futuro<=d31; else edo_futuro<=d30; end if; when d31=> reseteo<=1;
edo_futuro<=d32; when d32=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or

(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or


(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s17<=key_press; edo_futuro<=d33; else edo_futuro<=d32; end if; when d33=> reseteo<=1;
edo_futuro<=d34; when d34=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s18<=key_press; edo_futuro<=d35; else edo_futuro<=d34; end if; when d35=> reseteo<=1;
edo_futuro<=d36; when d36=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s19<=key_press; edo_futuro<=d37; else edo_futuro<=d36; end if; when d37=> reseteo<=1;
edo_futuro<=d38; when d38=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or

(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then


s20<=key_press; edo_futuro<=d39; else edo_futuro<=d38; end if; when d39=> reseteo<=1;
edo_futuro<=d40; when d40=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s21<=key_press; edo_futuro<=d41; else edo_futuro<=d40; end if; when d41=> reseteo<=1;
edo_futuro<=d42; when d42=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s22<=key_press; edo_futuro<=d43; else edo_futuro<=d42; end if; when d43=> reseteo<=1;
edo_futuro<=d44; when d44=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s23<=key_press; edo_futuro<=d45; else edo_futuro<=d44; end if; when d45=> reseteo<=1;
edo_futuro<=d46; when d46=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or

(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or


(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s24<=key_press; edo_futuro<=d47; else edo_futuro<=d46; end if; when d47=> reseteo<=1;
edo_futuro<=d48; when d48=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s25<=key_press; edo_futuro<=d49; else edo_futuro<=d48; end if; when d49=> reseteo<=1;
edo_futuro<=d50; when d50=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s26<=key_press; edo_futuro<=d51; else edo_futuro<=d50; end if; when d51=> reseteo<=1;
edo_futuro<=d52; when d52=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or

(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or


(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s27<=key_press; edo_futuro<=d53; else edo_futuro<=d52; end if; when d53=> reseteo<=1;
edo_futuro<=d54; when d54=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s28<=key_press; edo_futuro<=d55; else edo_futuro<=d54; end if; when d55=> reseteo<=1;
edo_futuro<=d56; when d56=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s29<=key_press; edo_futuro<=d57; else edo_futuro<=d56; end if; when d57=> reseteo<=1;
edo_futuro<=d58; when d58=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or

(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or


(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s30<=key_press; edo_futuro<=d59; else edo_futuro<=d58; end if; when d59=> reseteo<=1;
edo_futuro<=d60; when d60=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s31<=key_press; edo_futuro<=d61; else edo_futuro<=d60; end if; when d61=> reseteo<=1;
edo_futuro<=d62; when d62=> reseteo<=0; if(((codigo=00011100) or (codigo=00110010) or
(codigo=00100001) or (codigo=00100011) or (codigo=00100100) or (codigo=00101011) or
(codigo=00110100) or (codigo=00110011) or (codigo=01000011) or (codigo=00111011) or
(codigo=01000010) or (codigo=01001011) or (codigo=00111010) or (codigo=00110001) or
(codigo=01000100) or (codigo=01001101) or (codigo=00010101) or (codigo=00101101) or
(codigo=00011011) or (codigo=00101100) or(codigo=00111100) or (codigo=00101010) or
(codigo=00011101) or (codigo=00100010) or (codigo=00110101) or (codigo=00110101) or
(codigo=00101001) or (codigo=00010110) or (codigo=00011110) or (codigo=00100110) or
(codigo=00100101) or (codigo=00101110) or (codigo=00110110) or (codigo=00111101) or
(codigo=00111110) or (codigo=01000110) or (codigo=01000101))and (puls=1)) then
s32<=key_press; edo_futuro<=d62; else edo_futuro<=d0; end if; end case; end process proceso1;
Proceso 2 Secuencial proceso2: process(clk,reset) Lista sensitiva por reloj y reset de la memoria
de la MEF begin if reset =1 then edo_presente <= d0; elsif(clkevent and clk=1) then
edo_presente<=edo_futuro; else null; end if; end process proceso2; end Behavioral;

A continuacin explicamos en los siguientes videos el cdigo


principal y como se realizo la interfaz del keyboard PS/2 y la
LCD
Video 1, enlace: http://www.youtube.com/watch?v=DYaV27ud7Q

Video 2,
enlace: http://www.youtube.com/watch?v=8_eRoptPluo
Video 3, enlace: http://www.youtube.com/watch?v=k818JhW5nA
Continuando con el trabajo en dar la intefaz procedemos ha
chequear sintaxis donde posteriormente generamos y
configuramos la tarjeta mediante el accesorio de xilinx
ISE iMPACT con la opcin Configure Device (iMPACT).

Ya programada la tarjeta obtendremos los siguientes resultados:


Funcionamiento,
enlace: http://www.youtube.com/watch?v=ScI8v8bQyWg

Anexamos tambin el diagrama


de flujo correspondiente el cual reforzar lo que hemos indicado
hasta este momento sobre el trabajo.
Descargar diagrama de flujo
About these ads