You are on page 1of 14

PRACTICA FINAL VHDL: MAQUINAS DE ESTADO

INTEGRANTES: JOHNNY CHINCHAJOA MAURICIO RUIZ

PRESENTADO A: ING. FERNANDO A. URBANO M.

CIRCUITOS DIGITALES II INGENIERA ELECTRNICA Y TELECOMUNICACIONES FIET UNIVERSIDAD DEL CAUCA 2013

RESUMEN.
El proyecto consta de tres partes, en la primera se va a disear el sistema para la conexin de un teclado cuatro por tres haciendo uso de la tcnica scanning o polling, en la segunda etapa se a implementar un sistema digital que codifique el cdigo morse y en la tercera parte se va integrar el teclado y el codificador morse para mostrar un mensaje escrito en el teclado y codificado en cdigo morse. El diseo, desarrollo e implementacin del sistema se realiz usando las herramientas que ofrece la aplicacin Quartus atreves del lenguaje de descripcin hardware VHDL. Adems se hicieron las respectivas simulaciones en el software de simulacin de sistemas digitales Modelsim. Posteriormente se presentaron simulaciones e implementacin en la FPGA de los sistemas diseados. Por ltimo se realiz las pruebas con toda su implementacin. El diseo de las componentes de la prctica se disear e implementar haciendo uso de mquinas de estados y aplicando el manejo de componentes.

INTRODUCCION.
El teclado utiliza una serie de botones o teclas, que actan como interruptores electrnicos que envan informacin a una computadora u otro dispositivo, en nuestro caso la FPGA. Para facilitar la conexin y no tener que conectar cada botn lo que se hace es realizar un barrido de las filas mientras se enva una columna a cero, de esta manera se ahorran un nmero considerable de cables. El cdigo morse es un sistema de representacin de letras y nmeros mediante seales emitidas de forma intermitente. Fue desarrollado a la par con la invencin del telgrafo elctrico. Se cre un mtodo segn el cual cada letra o nmero era transmitido de forma individual con un cdigo consistente en rayas y puntos, es decir, seales telegrficas que se diferencian en el tiempo de duracin de la seal activa. La duracin del punto es la mnima posible. Una raya tiene una duracin de aproximadamente tres veces la del punto.

TECLADO MATRICIAL 4X3.


En esta etapa del proyecto se quiere hacer funcionar un teclado de cuatro filas por tres columnas utilizando la tcnica de exploracin o verificacin. Esta tcnica consiste en enviar una columna a bajo mientras se leen las filas secuencialmente, si se presiona una tecla y esta coincide con una columna en nivel lgico cero, la fila adquiere el estado bajo mientras las otras permanecen en alto

debido a la resistencia de pull-up. Pull up es la accin de elevar la tensin de salida de un circuito lgico. De esta forma se reduce el nmero de conexiones del teclado al circuito. Tambin se tuvieron en cuenta algunos requerimientos; El primero es realizar la codificacin de las teclas en cdigo ASCII, tambin se deber adicionar una salida de un bit que se pondr en alto cada que haya una salida disponible. A continuacion se muestra un esquema del teclado y del sistema para el proyecto a realizar:

El sistema se divide en tres mdulos, el primero es el de la mquina de estados, el segundo lo llamamos registro y el tercero es un codificador. MAQUINA DE ESTADOS:

Este bloque va a tener como entrada una seal de reloj (clk), un vector de cero a tres que permitir conectar las filas del teclado (input). Las salidas que tiene son un bit ndata y un vector de dos a cero que har las veces de las columnas.

En la tcnica de exploracin para la lectura del teclado, las columnas van a ser salidas del sistema. Como se necesita que la salida cambie enviado una columna a cero, se implementa una mquina de estados en el mdulo. La mquina consta de tres estados, en cada estado la salida toma un valor para que una columna del teclado pase a bajo. El cambio de estado se realiza en cada flanco de subida de la seal de reloj. Diagrama de estados:

S0

S1

S3

La asignacin de la salida para cada estado en VHDL se vera as (when s0 = salida <= "011";) En cada cambio de estado la salida se pone a bajo para un bit. En el estado s0 la columna uno se pone a bajo, en s1 la columna dos y en s3 la tercera columna va a bajo. En este bloque tambin se realizan unas comparaciones para determinar si la entrada ingresada es correcta, de serlo el ndata toma el valor de uno, las entradas correctas corresponden a los valores que toman las filas cuando se presiona una sola tecla a la vez. En caso de que la entrada no sea vlida ndata tomara el valor de cero, en VHDL esto es (if inputi = "0111" then ndata <= '1';).

Simulacin:

En la simulacin se puede ver como en los flancos de subida del reloj la salida cambia su valor, poniendo a cero una columna a la vez para cada salida. Adems tenemos que el ndata cambia su valor dependiendo de la entrada que se recibe, para esta simulacin el bit toma el valor bajo para la entrada (1100) que no corresponde a una entrada valida.

REGISTRO

El modulo tiene como entrada los bits de las filas, las columnas que son salidas del mdulo mquina, un ndatam que es tambin es salida de la mquina y la seal de reloj clk. Como salidas tiene un vector data de siete bits que representa el valor del digito presionado en cdigo ASCII y un ndata de un bit que se pondr a uno cada vez que haya una entrada disponible. El modulo consta de un registro que va a comparar el valor de la entrada presente con el de la actual para obtener el valor de ndatai, este tomara el valor de uno si la entrada anterior es 1111, lo que significa que no hay presionada ninguna tecla y puedo ingresar otra, se pondr a cero si las entradas son iguales o si no es igual a 1111. Lo que se consigue con esto es mantener el valor de una tecla presionada as se presione otra, la prioridad la tiene la primera entrada. Ya con el valor de ndatai, operamos este a travs de una AND con el ndatam, (ndataii <= ndatai and ndatam), con esto obtenemos el valor de ndataii que ser 1 cada vez que tenga una nueva salida disponible si la entrada es vlida y es antecedida por la entrada en la cual todas las filas estn en alto. A continuacin se verifica si ndataii ha tomado el valor uno para hacer la respectiva decodificacin de la tecla presionada a ACSII. En caso de tener ndata en cero se iguala la entrada actual con la anterior

La decodificacin ACSII se realiz de la siguiente manera: when "0110111" => datai <="0110001"; Donde cada entrada va a tener su correspondiente ACSII. Para obtener el dato a decodificar se concatena la columna con la fila obteniendo un vector de 7 bits (fc <= columnas & filas;). Simulacin:

En la simulacin podemos ver que obtenemos una nueva salida despus del pulso que hace ndata, el pulso se presenta cuando la entrada anteriores (1111) y si la entrada actual es vlida. Como ltimo bloque tenemos el decodificador siete segmentos. Diagrama completo del sistema:

CODIFICADOR MORSE
CODIFICADOR MORSE Para el diseo del codificador morse se utilizan los interruptores como entrada, para nuestro caso una entrada de 5 bits que ingresa a un codificador, el cual tiene tambin como entrada adicional la del pulsador que es el que me habilitara la codificacin, una vez habilitado dicho codificador har lo siguiente: when "00001" => -- A puntos_rayas <= "00001001"; A cada letra se le asigna el valor en nmero binario como vemos en el caso anterior y posteriormente esa entrada se convierte en una salida de 8 bits que corresponde al valor en

puntos y rayas como lo vemos A = punto-raya donde el punto ser 01 y la raya ser 10, ms adelante veremos qu pasa con los bits que son 00, y esta es la funcin de este codificador. Bloque funcional:

Simulacin en ModelSim:

Aqu observamos el funcionamiento del codificador, iniciando la entrada en 00000 y su respectivo valor despus de esta entrada vienen los valores de cada una de las letras en su respectivo orden alfabtico, observamos tambin que cuando se deja de presionar el enable la salida ser 00000000 y por consiguiente el circuito no har ninguna accin.

REGISTRO El segundo bloque que describiremos es un registro que posee una entrada de 8 bits dicha entrada esta o se encuentra ya codificada en puntos_rayas, el registro funciona con los flancos de subida del reloj y en dicho flanco almacena la entrada, para pero para que me sostenga la entrada despus del ingreso inicial va sincronizado con el pulso, entonces cuando el pulso sea 0 la entrada se va a sostener, ahora la funcin de este registro es hacer que me almacene el dato hasta que

termine de realizar la secuencia, por tal razn su reset va conectado al registro que describiremos ms adelante. Bloque funcional:

Simulacin en ModelSim:

Observamos que cuando el pulso o pulsador esta oprimido y cambiamos la entrada el dato es cambiado por el nuevo valor, pero si el pulsador esta sin ser presionado el dato se conserva almacenado en el registro hasta un nuevo pulso. REGISTRO SELECTOR El tercer bloque corresponde a un registro al cual le hemos asignado una seal interna que corresponde a un contador, con esto lo que pretendemos es hacer comparaciones en los flancos de subida, cada dos bits, posee una entrada de 8 bits que son los que le llegan del registro anterior, luego va haciendo la comparacin cada dos bits como ya lo dije esta comparacin consta de que si eso bits comparados son 01 ser un punto y la salida ser 0, o sino si es 10 la salida ser 1 simulando una raya, en cada una de la comparaciones se encuentran dos de las salidas de este registro que hemos denominado pare y terminado, pare ser la que me resetea el registro anterior y terminado ser la que me habilita la mquina de estados cuando dichas seales son 0 tanto la maquina como el registro estarn en funcionamiento, y en 1 suceder lo contrario, adems del reset y la entrada de datos este registro posee una entrada llamada indicadora que se encuentra

conectada a la mquina el funcionamiento de esta entrada lo describiremos en la mquina de estados. Bloque funcional:

Simulacin ModelSim:

Para este registro se dificulta un poco la observacin de lo que hace, ya que este est fuertemente ligado a la accin la mquina de estados que describiremos ms adelante, por tal razn solo verificamos el funcionamiento en la entradas mostradas, vemos que la entrada es 00000001 la maquina solo compara los bits 0 y 1 y observa que es un punto por tal razn pone la salida en cero, y en el instante en que indicadora esta en 1 simplemente ese ser el uno que recibe de la maquina indicando que ya termino su secuencia como ya no hay ms datos que comparar el registro termina, y as vemos que para el segundo caso la entrada termina en 10 indicando una raya por tal razn la salida se pone en uno y realiza la misma secuencia con la entrada indicadora, pero vemos que para el tercer caso ingresa el dato 00000011 en el cual ningn dato es vlido vemos que la salida se queda con el valor que traa pero terminado siempre es uno indicando que los datos no se van a comparar, la seal de pare simplemente los que hace es decirle al registro anterior que mande otro dato. MAQUINA CONTADOR DE SECUENCIA Para finalizar con los bloques que utilizamos para el funcionamiento del codificador morse, implementamos la mquina de estados, que hemos denominado contador de secuencias, el

funcionamiento de esta mquina es muy sencillo, los que hace es generarme los retardos de 0.5s para el punto y de 1.5s para la raya, esta mquina posee cuatro estados s0 denominado el estado inicial, que es en el cual la maquina apaga el led o el led permanece apagado, en este estado se realiza entonces la comparacin de la entrada para saber si es un punto o una raya despus de este estado la maquina simplemente har una secuencia si es un uno har el recorrido por los estados s1,s2,s3 respectivamente y regresando al estado inicial, de lo contario ira a s3 y regresara. La mquina adems del led posee otra salida que hemos denotado como ter la cual se pondr en 1 solo en el estado s3, que el en el cual tanto punto como raya terminan su secuencia, habilitando entonces el registro anterior y dando lugar a que este proceda a hacer la comparacin de los bits siguientes. A continuacin mostramos el diagrama de estados de dicha maquina:

Cabe aclarar que se utiliz un divisor de 2Hz para generar los retardos anteriormente mencionados, utilizado tanto para los registros como para mquina. Bloque funcional:

Simulacin ModelSim: Secuencial de la raya

Se observa que siempre y cuando comparacin este en cero la maquina funciona ahora vemos que la entrada es 1 entonces la maquina realiza el recorrido por los tres estados simulando el valor de la raya, al finalizar vemos que indicadora que es la seal interna se coloca a uno y le asigna ese valor a ter, que sera el que le indique al registro anterior que ya puede realizar la siguiente comparacin. Secuencia del punto

La entrada comparacin contina el cero, entonces en el estado s0 mira cual es el valor de la entrada, para este caso es 0, con lo cual ira al estado s3 simulando un punto y regresara al estado inicial.

Para este caso observemos que comparacin se encuentra en 1, por tanto, tanto led como indicadora no realizan ninguna accin, lo que si se logra observar es que cuando la entrada vara nx_state indica a que estado debe ir. Conexin de los bloques:

INTEGRACION DE LOS SISTEMAS TECLADO MATRICIAL Y CODIFICADOR MORSE


Ya con los anteriores sistemas realizados y funcionando se procede a implementarlos en uno solo. Lo que se hizo fue asignarle a cada una de los botones del teclado matricial una letra, lo que se espera es que al presionar una tecla esta se muestre en cdigo morse a travs del led que sale del sistema codificador morse. Se procedi entonces a conectar la salida data del mdulo registro del sistema del teclado, a un codificador para convertir el cdigo ASCII en una salida de cuatro bits que en seguida se va a conectar a la entrada del codificador morse del segundo sistema. Adems se conect el bit ndata del procedimiento teclado a las entradas enable y pulso de los mdulos codificador morse y registro del sistema codificador morse. De esta manera el bit ndata har las veces del pulsador. Entonces, cada vez que haya una salida disponible, esta se codificara en cdigo morse.

La conexin de ndata no se pudo realizar directamente debido a que los sistemas funcionan a diferentes frecuencias, para solucionar este problema se us un generador de pulsos, aumentando el pulso de ndata al doble. De esta forma se consigue que los sistemas se sincronicen y no haya retardos entre el pulso de la tecla y la codificacin morse. A continuacin tenemos el sistema tenemos los esquemas de los bloques usados para realizar la conexin.

CONCLUCIONES
En la descripcin del lenguaje VHDL al realizar un proceso se deben tener en cuenta todos los casos posibles para evitar hardware innecesario. De igual manera debemos tratar que el hardware sea lo ms simple posible. Una manera de lograr esto el haciendo una definicin de la arquitectura para el sistema y as poder tener una visin ms amplia del proyecto para definir las partes que lo terminaran componindolo. Todo esto para obtener un sistema ms eficiente. En el desarrollo de la prctica nos dimos cuenta que aunque el simulador de altera nos da facilidad a la hora de realizar simulaciones, este no es del todo confiable ya que obvia muchos casos que ocasiona errores, errores que se muestran en la implementacin de los proyectos. El manejo de mdulos o bloques facilita la interconexin de sistemas, consiguiendo un seguimiento en cada etapa del proyecto para evitar errores.

BIBLIOGRAFIA
[1]Conferencias Ingeniero Fernando Aparicio [3] UNIVERSIDAD POLITCNICA DE MADRID, (2013, May, 20), VHDL, disponible en: http://www.eweb.unex.es/eweb/fisteor/antonio_astillero/ec/vhdl/Manual%20VHDL.pdf

[4]Felipe Snchez, (2013, May, 20), VHDL, disponible en: http://eciencia.urjc.es/jspui/bitstream/10115/4045/3/diseno_de_circuitos_digitales_con_vhdl_v1 .01.pdf

You might also like