Vous êtes sur la page 1sur 29

Informe practica 4

Sistema Secuencial Contadores

Juan Esteban Velsquez Franco


c.c. 1020448036
Alejandro Gutierrez Mrquez
c.c.1020459010

A:
Ricardo Andres Velasquez Velez

Departamento de Ingeniera Electrnica


Facultad de Ingeniera
Universidad de Antioquia
2016

Introduccin
En informes anteriores manejamos circuitos cuyas salidas estaban
exclusivamente en funcin de sus entradas o mejor llamados circuitos
combinacionales. Para este laboratorio es necesario utilizar otra
metodologa ya que las salidas no van a depender de las entradas sino que
son cambiantes dependiendo de unas seales y estados cambiantes, para
ello manejaremos la lgica secuencial.
Sistemas secuenciales:
A diferencia de los sistemas combinacionales, en los sistemas secuenciales,
los valores de las salidas, en un momento dado, no dependen
exclusivamente de los valores de las entradas en dicho momento, sino
tambin dependen del estado anterior o estado interno. El sistema
secuencial ms simple es el biestable, de los cuales, el de tipo D (o cerrojo)
es el ms utilizado actualmente. La mayora de los sistemas secuenciales
estn gobernados por seales de reloj. A stos se los denomina "sncronos"
o "sincrnicos", a diferencia de los "asncronos" o "asincrnicos" que son
aquellos que no son controlados por seales de reloj.
Los principales sistemas secuenciales los cuales podemos encontrar en
forma de circuitos integrados o como estructuras en sistemas programados
son: Contadores y registros.
Poseen uno o ms caminos de realimentacin, es decir, una o ms seales
internas o de salida se vuelven a introducir como seales de entradas.
Gracias a esta caracterstica se garantiza la dependencia de la operacin con
la secuencia anterior.
Como es lgico, existe una dependencia explcita del tiempo. Esta
dependencia se produce en los lazos de realimentacin antes mencionados.
En estos lazos es necesario distinguir entre las salidas y las entradas
realimentadas. Esta distincin se traducir en un retraso de ambas seales
(en el caso ms ideal), como se puede ver en la figura 1.2, el cual puede
producirse mediante dos elementos:
Elementos de retraso, ya sean explcitos o implcitos debido al retraso
de la lgica combinacional. Este retraso es fijo e independiente de
cualquier seal.

Elementos de memoria, que son dispositivos que almacena el valor de


la entrada en un instante determinado por una seal externa y lo
mantiene hasta que dicha seal ordene el almacenamiento de un nuevo
valor.
En el siguiente procedimiento veremos cmo utilizaremos esos elementos
para hacer un cronometro, son necesarios ya que necesitamos mandar
seales internas que conecten y sincronicen los contadores y mdulos a
realizar.

Procedimiento
El sistema escogido es el siguiente:
Cronometro: Disear un cronometro con minutos, segundos y centsimas de
segundo. El cronometro tendr un pulsador de start, uno de stop y otro para
el reset. Los minutos deben visualizarse en los leds de la FPGA en formato
BCD, los segundos y las centsimas de segundo deben visualizarse en los
displays de 7 segmentos de la FPGA.
Diagrama de bloques del sistema:
Modulo cabecera

Modulo del controlador de los display 7 segmentos:

Diseo:
El primer bloque que diseamos fue el divisor de frecuencia para convertir
la frecuencia de 50Mhz suministrada por la seal de reloj de la FPGA a la
deseada.
El divisor de frecuencia es un componente simple, cuyo objetivo es reducir
la frecuencia de entrada. ste se implementa con ayuda del factor de
escalamiento y un contador. Primeramente, el factor de escalamiento es la
relacin entre la frecuencia de entrada y la frecuencia de salida deseada:

En nuestro caso necesitamos una frecuencia de 100 ciclos por segundo (100
Hercios) tenemos:
=

50
= 500000
100

Por lo tanto, el contador para el divisor de frecuencia tiene como funcin


generar la seal de salida de 100Hz cada 500000 ciclos.
Una seal de reloj se mantiene el mismo tiempo en alto que en bajo; para
este caso en particular, 250000 ciclos en alto y 250000 ciclos en bajo. Dado
que comenzamos a contar desde cero, el lmite superior es 250000-1.

Luego hicimos cuentas del nmero de


modulo:

contadores necesarios y de que

4 contadores mdulo 10 para las centsimas, unidades de segundos y


unidades de minutos.
2 contadores mdulo 6 para las decenas de segundos y decenas de minuto.
Creamos primero el contador mdulo 10 para las unidades de centsimas
pero ser un contador diferente a los otros contadores mdulo 10 ya que
este ser al que conectaremos tanto el reloj como las seales de los botones
de stop,start y ser el que controle y arranque los dems contadores.
Para ello creamos entradas para leer los pulsadores start, stop, reset,
tambin para la seal de reloj de 100Hz.Las salidas sern dos: una cadena de
4 bits por la cual saldrn las unidades de centsimas y una salida por la cual
mandaremos una seal que le avisara al contador siguiente de decenas de
centsimas que ya las unidades llegaron a 9 y que puede contar.
Para implementar los botones usamos un flip-flop para en el caso por
ejemplo del botn start mantenga el estado de actividad y no tener que
mantener presionado el botn para que funcione el cronometro. Tanto el
flip-flop como el contador lo escribimos en un process con el reset y la seal
de reloj en la lista de sensibilizacin

Con el reset asncrono todas nuestras


seales y el contador se ponen en cero.
Ahora dentro del if condicionado con el
comando rising_edge(clk) ejecutamos las
instrucciones a continuacin siempre que
haya un flanco de subida de reloj. Con el
start y el stop condicionamos la variable
que me define cuando cuento y cuando
dejo de contar.Por ltimo ya que
creamos la variable de contador como
entera para un uso ms fcil al
incrementar y asignarle valores usamos
el comando conv_std_logic_vector() para
convertir este tipo integer a un vector de
4 bits std_logic y llevarlo a la salida as:

Explicacin del comando:

Tomado de:
https://www.cs.sfu.ca/~ggbaker/reference/std_logic/arith/conv_std_logic_
vector.html

A continuacin diseamos los dems contadores. El contador mdulo 10


normal es lo mismo que el anterior explicado pero ya no tendr, el flip-flop
del start ni el stop y tampoco esas dos entradas, solo tendr el reset y el clk
como entradas y la salida que manda la seal al siguiente contador
indicndole que ya puede incrementar. Por la entrada del clk es donde llega
la seal que manda el contador anterior formndose una cadena para que
asi el contador de unidades de centsimas controle todo los dems.El
proceso de este queda as:

Para los contadores mdulo 6 se disea de la misma manera que el anterior


que era mdulo 10 pero simplemente la seal integer que creamos como
contador ya no le damos un rango de 0 a 9 sino de 0 a 5 :
Y condicionamos el if interno ya no con contador=9 sino contador =5.
Una vez tenemos los contadores ya pensamos en como mostrar los nmeros
de las centsimas y los segundos por medio de los display y los minutos por
los leds de la FPGA, la ventaja es que al manejarlos individualmente y de a 4
bits ya se en encuentran en formato BCD y as no debemos hacer un
conversor. Para los minutos es ms sencillo ya que solo es asignar en orden
a las variables de 4 bit donde tenemos las unidades y las decenas cada grupo
de 4 leds as:

Para la tarea de conectar los nmeros con los display buscamos un


controlador el cual maneja esto y selecciona por medio de los nodos de los
display cual usar. El diagrama de bloques lo podemos encontrar despus de
el diagrama global de proyecto unas pginas atrs, consiste en un contador
mdulo 2 el cual servir de entrada a un decodificador 2 a 4 y como selector
a un MUX 4 a 1 al cual entraran los nmeros en BCD dependiendo de este
selector pasa uno de los 4 a un decodificador 4 a 8, de esta manera activara
el display que es y le mandara el nmero que corresponde.
Con el siguiente ejemplo veremos cmo funcionan los display y como
disear los decodificadores que darn la salida del controlador:

Como podemos observar debemos mandar 0 al anodo del display que


queremos usar y lo mismo con los segmentos que queremos encender asi
que estos decos tendrn lgica invertida
Deco nodos:

Deco segmentos:

Estas variables irn a las salidas del controlador que llamamos nodo (4bits)
y segmentos (7bits) y en el mdulo para poder as en el mdulo cabecera en
el cual instanciaremos este controlador conectarlas directamente a los pines
as:

Todo este proceso que acabamos de explicar se debe dar en un tiempo muy
rpido para que engae al ojo humano al encender y apagar los nodos que
seleccionan cada display pero la frecuencia de encendido/apagado de los
nodos no debe ser tan elevada, pues a medida de que aumenta la
frecuencia, aumenta el comportamiento capacitivo de los LEDs que
conforman el display. Una frecuencia de unos cientos de Hz se considera
adecuada para operar el display. Encontramos que una seal de reloj
adecuada y recomendada para manejar el contador que maneja el
controlador es de 1khz por lo cual creamos un divisor de voltaje de 50mhz a
1khz como el creado al inicio para poder usarlo aqu.
Simulacin de cada modulo
_Contador mdulo 10 con start y stop:

Como podemos observar el botn start inicia el conteo y el contador


funciona bien, la salida de next_clk tiene esos tramos rojos debido a que solo
sabemos el valor de sta cuando se cuenta que es cero y cuando llega a 9 el
contador que sera uno pero de resto no toma el valor de uno. As es como
se genera el nuevo pulso para el siguiente contador el cual tiene un flanco
de subida cada que cuenta 9 unidades de centsima.

En esta parte de la simulacin podemos observar como paramos el conteo


con el stop activo y reactivamos con el start, coincidencialmente paro en
cero pero no significa que el stop este reseteando.

Y por ltimo probamos el reset asncrono y efectivamente no solo detiene el


conteo sino que pone en cero el contador y lo hace de inmediato.

_ Contador mdulo 10:

Probamos de una vez el reset y funciona muy bien, esta seal de rst fue
implementada en todos los contadores y conectadas todas a el botn que
usaremos para el reset del cronometro.

Timing Report

_ Contador mdulo 6:

Timing report

_Controlador display 7 segmentos:

Como podemos observar funciona muy bien el controlador.Recordemos que


los decos activan ya sea el segmento o el anodo cuando toma valor de
cero,entonces cuando el anodo a2 esta seleccionado nos deberia mostrar
en el display lo que hay en el bcd2 y efectivamente lo hace ,en el inicio de la
simulacion tenemos en el anodo a2 activado y en bcd2 tenemos el 7 asi que
se activan los segmentos abc osea que el binario sera 00011111
incluyendo en todos como siempre el ultimo bit que es dp en 1.

Timing Report

_Divisor de frecuencia de 50MHz a 100Hz:

Como podemos observar funciona bien ya que hace un ciclo cada


10ms=0,01s y 0,01s*100=1s para un total de 100Hz o 100 ciclos por segundo
como lo queramos.

_Divisor de frecuencia de 50MHz a 1KHz:

Aqu se cumple tambin ya que: 1000us=0,001s y 0,001s*1000=1s para un


total de 1000 ciclos por segundo o 1Khz.

Simulacin sistema completo:


Empezamos probando el botn de start, como podemos observar en la
imagen anterior el sistema se mantiene apagado mientras no se pulse este
botn. Una vez pulsamos start comienza a contar y a encender segmentos
los cuales se encuentran bien y estn sealando las unidades de centsima:

Aqu observamos el aumento en las decenas de centsimas:

Una vez accionamos el botn stop para el conteo y se mantiene el valor en


que estaba (30 centsimas):

Al accionar el start reanuda el conteo:

Accionamos el reset , se inicializa todo y se para el sistema:

Por ultimo mostramos el conteo un poco ms adelante () para mostrar que


se funcionan los minutos y segundos:

Timing Report

Conclusiones
La seal de reset es una seal indispensable en cualquier sistema
digital ya que con ella podemos darle al sistema un valor inicial en caso
de no poseerlo o si necesitamos reutilizar o ejecutar de nuevo el
sistema lo podemos hacer sin necesidad de apagar y encender todo.

Cuando necesitamos conectar una seal de reloj a un sistema que


pone a variar el encendido y el apagado de un led o como en el caso
de los display 7 segmentos es importante tener en cuenta la
frecuencia de la seal de reloj que conectamos ya que no debe ser
muy alta no debe ser tan elevada, pues a medida de que aumenta la
frecuencia, aumenta el comportamiento capacitivo de los LEDs que
conforman el display. Una frecuencia de unos cientos de Hz se
considera adecuada para operar el display.
Una seal de reloj se mantiene el mismo tiempo en alto que en bajo
por ello el contador de los divisores de frecuencia se hace a la mitad
de la divisin entre frecuenciaoriginal/frecuencia deseada.

Bibliografa
http://stackoverflow.com/questions/15205202/clkevent-vs-risingedge
http://www.ics.uci.edu/~jmoorkan/vhdlref/sig_dec.html
http://www.estadofinito.com/divisor-frecuencia-vhdl/
http://foro.make-a-tronik.com/fpga/(codigo-vhdl)-contador-0-fcuadruple-en-display-7-segmentos/
https://www.cs.sfu.ca/~ggbaker/reference/std_logic/arith/conv_std
_logic_vector.html
https://es.wikipedia.org/wiki/Sistema_secuencial
http://www.uhu.es/raul.jimenez/DIGITAL_II/dig2_i.pdf

Vous aimerez peut-être aussi