[Duda] Suma Acumulativa

46 views
Skip to first unread message

Hoze

unread,
Mar 11, 2020, 8:57:25 AM3/11/20
to FPGAwars: explorando el lado libre
Hola comunidad, 

Estoy usando las FPGAs libres(En concreto la Icezum Alhambra) en el desarrollo de mi TFG. Llevo tiempo leyéndoos y me parece increíble lo que hacéis, a ver si me podéis echar un cable!

Quiero implementar un sistema que sume los valores que van llegando (son de 8bits) hasta cierto módulo (ventanas de por ejemplo 200 valores) y que al comparar cada ventana con un umbral fijado por mí tenga una salida u otra.  Por así decirlo quiero que la suma se vaya acumulando (que comience con un valor 0), y que cada valor que llegue se sume a la suma de los anteriores. (Yo voy enviando los datos a mí voluntad por el puerto serie)

He pensado en usar un bloque sumador de 8 bits y con registros de 8 bit ir fijando el valor de salida y enviarlo de nuevo al sumador, pero no obtengo buen resultado. 

¿Cómo lo haríais vosotros? ¿Existe algún bloque creado por algún compañero que haga algo parecido?

Muchas gracias !!

Demócrito

unread,
Mar 11, 2020, 10:13:06 AM3/11/20
to FPGAwars: explorando el lado libre
Ese acumulador lo hice hace muchos meses y lo utilizaba para hacer pruebas de medias aritméticas. Si no lo encuentro lo re-hago. Cuando llegue a casa esta noche te lo adjuntaré.

Saludos.

Hoze

unread,
Mar 11, 2020, 10:26:35 AM3/11/20
to FPGAwars: explorando el lado libre
Muchas gracias Demócrito!

Democrito

unread,
Mar 11, 2020, 7:14:35 PM3/11/20
to FPGAwars: explorando el lado libre
Te voy a poner imágenes y te voy comentando. Te he adjuntado todo lo que aquí aparece.

sumatorio_8bits.PNG

Se trata de un registro de 8 bits con un sumador también de 8 bits. Esto puede ser un problema (que tenga el mismo número de bits que la entrada) porque es muy fácil que desborde. Si sumas (acumulando, que es lo que hace este circuito) sólo dos números mayores de 127 no será capaz de darte la operación real, desbordaría.

Por eso te adjunto otro ejemplo (imagen de abajo), que tiene una entrada de 8 bits, pero es capaz de operar con 16 bits, dándote un sumatorio máximo de 65.535.

sumatorio_entrada_8bits_salida_16bits.PNG



El "ok" es el mismo tic de entrada que en "load" pero retrasada un ciclo de reloj, para que permita dar tiempo a hacer la operación y en el siguiente ciclo validar dicha operación porque ya estará la salida estable.

Como dijiste que esto lo quieres hacer por el puerto serie, te adjunto un tercer circuito (imagen de abajo) en el que le he añadido el receptor serie (lo he probado y funciona).

sumatorio 16 bits con receptor serie.PNG


En este ejemplo funcional, sólo tomo los 8 bits más bajos para sacarlos por los leds (porque sólo hay 8 leds en la placa), pero en realidad tienes 16 bits disponibles.

Desconozco tu nivel de experiencia, entonces igual te comento cosas que ya sabes, pero por si no es así:

No se puede utilizar un terminal serie normal para enviar números (como el de Arduino o muchos otros), entonces necesitas un terminal que realmente lo haga, y el programa "ScriptCommunicator" te permite hacerlo, que es por ejemplo enviar números en hexadecimal o en binario, ya que enviar en ASCII no tiene sentido, porque con ASCII no envías un número, sino un código que significa una letra, un número dado, o un símbolo dado, pero que en el caso de los números no se corresponde con el número real que quieres enviar. Por ejemplo, el número 0 en ASCII vale 40 en realidad.

Te adjunto dos módulos y un ejemplo para el puerto serie.

Saludos.
Sumatorio_8bits.ice
Sumatorio16bits.ice
Ejemplo_con_RX.ice

Democrito

unread,
Mar 16, 2020, 9:03:21 PM3/16/20
to FPGAwars: explorando el lado libre
Aprovecho este ejemplo de "Sumatorio" para incluir un conversor ASCII a binario que explico aquí.

a.PNG

De esta forma te permitirá enviar los números que quieras sumar sucesivamente desde cualquier terminal serie.
Sumatorio16bits_serie.ice
Reply all
Reply to author
Forward
0 new messages