Está en la página 1de 1

Pontificia Universidad Javeriana

Departamento de Electrónica
System on Chip

Taller de Máquinas de Estados Finitos


Finite State Machine with Data Path

Circuito generador de secuencia de Fibonacci


1. La secuencia de Fibonacci constituye una serie de números definidos como:
0 𝑖=0
𝑓𝑖𝑏(𝑖) = 1 𝑖=1
𝑓𝑖𝑏(𝑖 − 1) + 𝑓𝑖𝑏(𝑖 − 2) 𝑖 > 1

Una manera de calcular fib(i) es construir una función iterativa, desde 0 hasta el i-ésimo
término deseado. Esta aproximación requiere dos registros temporales para almacenar dos
los números de Fibonacci más recientes (fib(i-1) y fib(i-2)), y un registro adicional que
almacena el índice i para llevar la cuenta del número de iteraciones. Construya un módulo
parametrizable para calcular una secuencia de Fibonacci de hasta seis dígitos utilizando una
máquina de estados finitos con camino de datos (FSMD). El parámetro recibido como
entrada será el número de iteraciones deseadas, con un máximo de 31 que corresponde al
número 832,040 (la siguiente iteración, i=32 corresponde al número 1,346,269). El módulo
recibirá una señal de disparo por un ciclo de reloj, que iniciará el cálculo. Verifique el
funcionamiento el módulo en simulación. La generación de los dígitos de Fibonacci
sucederá a la velocidad máxima posible.

2. Modifique el módulo anterior para generar una interfaz con el usuario. El módulo deberá
recibir de la tarjeta, además del reset asincrónico, una señal adicional de habilitación
mediante un botón, el cual disparará el cálculo de la secuencia cuando sea oprimido. El
sistema deberá recibir el número de iteraciones deseadas mediante los switches de la
tarjeta. El módulo deberá mostrar el número calculado utilizando los displays 7-segmentos
y permitir la visualización de cada uno de ellos por 1 segundo. Una vez se cumplan las
iteraciones deseadas, deberá encender un LED indicando fin de la operación, quedando en
modo stand-by, hasta recibir un nuevo número máximo de iteraciones y señal de disparo
del botón.

3. Diseñe un módulo de memoria para almacenar los números de la serie de Fibonacci


calculados. En FPGA no es posible diseñar arreglos de longitud variable como se hace en
lenguajes de alto nivel (ej. Arraylist en Java o malloc en C). La memoria diseñada deberá
definir el tamaño máximo tanto en posiciones como en longitud de palabra en tiempo de
compilación. Modifique el módulo diseñado en el punto 2, de tal forma que incluya dos
señales de entrada adicionales provenientes de dos de los botones de la tarjeta. Una vez el
cálculo de la serie es finalizada y desplegada en los 7 segmentos, los botones deberán leer
en orden ascendente y descendente respectivamente las posiciones de la memoria y
deberán desplegar el número leído en los displays 7-segmentos. El recorrido del arreglo
deberá ser circular en ambos sentidos. Recuerde utilizar su circuito Antibouncer.

También podría gustarte