Representar binario usando displays BCD 7 segmentos

#1
Hola buenas, lo primero es decir que trabajo con FPGA, en concreto con software de Xilinx, en él implemento un circuito lógico que luego cargo en la FPGA. Tuve que hacer un multiplicador de números en binario de 8 bits, el resultado es un número de 16 bits. Ahora me piden que exprese este resultado en decimal con displays BCD-7 segmentos, es decir que necesitaré 5 displays para representar el número ya que 2^16 = 65536, luego necesitaré un número por dígito.

Ahora bien, he pensado en hacer una tabla de verdad en la que dependiendo del valor binario que introduzca se activen o se desactiven los correspondientes segmentos de cada display e implementarla a base de puertas lógicas, pero esto supondría una tabla de verdad de 65536 filas, resultado muy grande, aunque después se pudiera simplificar mediante mapas de Karnaugh.

¿Alguna sugerencia? Se agradecerá eternamente. Un saludo!
 
#2
Es cierto que hay una tabla de la verdad posible, pero de 64k posiciones y 7 columnas!!!

Yo siempre lo he convertido por soft; dividiendo y quedandome con el resto, tarda mas pero no es demasiado complejo.

Edito; perdón en realidad 35 columnas en la tabla de la verdad, casi nada.
 
Última edición:
#3
Tengo que construir el conversor de binario a BCD-7segmentos utilizando comparadores, puertas lógicas, contadores, multiplexores, etc...

A ver si consigo sacar algo, si se te ocurre cualquier cosa, avísame.
 
#5
No te entiendo, puedo utilizar un registro de desplazamiento para dividir entre 10, pero ¿luego cómo paso las señales para que se enciendan los respectivos LED's de los correspondientes displays? Es decir, si tengo el 25 en decimal, que en binario con 16 bits es el: 0000 0000 0001 1001, ¿cómo hago para que los 3 primeros displays 7 segmentos muestren el 0, el cuarto muestre el 2 y el quinto el 5?

Edito: yo tengo un número en binario con 16 bits y lo tengo que mostrar en los displays, pero en decimal.
 
#6
No te entiendo, puedo utilizar un registro de desplazamiento para dividir entre 10, pero ¿luego cómo paso las señales para que se enciendan los respectivos LED's de los correspondientes displays? Es decir, si tengo el 25 en decimal, que en binario con 16 bits es el: 0000 0000 0001 1001, ¿cómo hago para que los 3 primeros displays 7 segmentos muestren el 0, el cuarto muestre el 2 y el quinto el 5?

Edito: yo tengo un número en binario con 16 bits y lo tengo que mostrar en los displays, pero en decimal.
Hola amigo, lo q tienes q hacer es un algoritmo que calcule el exceso "6" y genere todos los acarreos p q pueda mostrarte el valor en decimal q se necesita.
Necesitaras d un PIC p eso!!
Con tablas de verdad NI se t ocurra, acabaras desistiendo antes de empezar!!!
 
#7
Si la cosa es que la tengo que hacer con lógica digital para luego cargarlo en una FPGA, tengo que servirme de acumuladores, sumadores,registros de desplazamiento, contadores, multiplexores, etc. no puedo usar código, con código si sé hacerlo. Se me queda una cosa más o menos así (este es parte del multiplicador del que he hablado más arriba):

http://imageshack.us/f/694/scrsht.jpg/

Lo que ves en la captura son multiplexores, contadores, puertas...
 
#8
uhh nunca habia visto un programa asi! que construyas circuitos y te lo pase a codigo! debe estar muy bueno.

Bueno para hacer el circuito podes dividir unidades, decenas, centenas, etc con contadores que se reseteen al llegar a 10, conectados en cascada.
Despues si podes hacerte una tabla de verdad que pase el valor de cada uno de los contadores (4 bits binarios) a display de 7 segmentos. Y la simplificas con Karnaugh y la construis con compuertas.

Suerte!
 
#9
Si la cosa es que la tengo que hacer con lógica digital para luego cargarlo en una FPGA, tengo que servirme de acumuladores, sumadores,registros de desplazamiento, contadores, multiplexores, etc. no puedo usar código, con código si sé hacerlo. Se me queda una cosa más o menos así (este es parte del multiplicador del que he hablado más arriba):

http://imageshack.us/f/694/scrsht.jpg/

Lo que ves en la captura son multiplexores, contadores, puertas...
Ok, bueno una vez arme un pequeño controlador con pura logica secuencial y combinacional, mas d uno me dijo q estaba loco.... pero bueno me llevo 3 años armarlo cuenta con casi 100 integrados CMOS, puede hacer calculos matematicos (suma,resta,conversion de codigo binario a decimal), le di la aplicacion de domotica, y controla una alarma... pero aun asi tiene una memoria en donde almacena registros y demas!!! .-
 
#10
Hola solosito

Según entiendo por tu mensaje original, Dices:
Tuve que hacer un multiplicador de números en binario de 8 bits, el resultado es un número de 16 bits.

Supongo que son 8 BIT’s para el multiplicando y otros 8 BIT’s para el multiplicador.
Con esa cantidad de BIT’s puedes multiplicar hasta un máximo de: 255 x 255 = 65,025 = 11111111 x 11111111 = 1111111000000001, si nó me equiboco.
Y Si, se requieren 5 Display’s de 7-seg. para mostrar esa cantidad.

Entiendo, tambien por toda la mensajería que se ha generado que ya tienes el multiplicador por lo tanto solo té falta un decodificador de binario natural a BCD para poder mostrar en los Display’s el resultado de la multiplicación en DECIMAL.

Hay 3 o cuatro métodos para convertir de binario natural a BCD. El que a mí me parece más sencillo es el que utiliza una memoria EEPROM en la cual las direcciones son el número binario y el contenido de esas direcciones en el número en BCD.
Se requiere una EEPROM de 16 BIT’s de direcciones (Address BUS) y 20 En la salida de datos (Data BUS).
Como no creo que exista ese tipo de EEPROM se pueden hacer arreglos con varias EEPROM para lograr esa cantidad de BIT’s en el Address BUS y DATA BUS.

Asómate por acá; en este enlace hay varios circuitos que te pueden ayudar a continuar con tu proyecto.
https://www.forosdeelectronica.com/f25/convertir-valores-binarios-bcd-3757/index4.html#post502432

saludos
a sus ordenes
 
#11
Hola, lo primero es agradeceros a todos el interés.

MrCarlos la cosa es que yo tengo 2^16 = 65536 posiciones, si fueran menos sería más fácil hacerlo, pero ponerme a escribir tantas posiciones es una locura, te adjunto un ejemplo de una memoria ROM de 256 posiciones ya hecha para que le eches un ojo y me digas algo, la tengo que editar con el bloc de notas, pero he copiado el contenido a un .doc para que me deje subirlo. Necesito ayuda, pero psiquiátrica, porque me estoy volviendo loco...

Gracias ante todo.
 

Adjuntos

#14
Hola solosito

Cierto son demasiados números.
Pero en tu sistema o programa no hay un For y Next ?? ó un While y Do ??.
Se existen algunas instrucciones como esas ya no tendrías que escribir tantos números. El propio programita lo haría.

Habría que declarar las variables Correctamente.

For BinarioX 0 To 65536
For DecimalX 0 to ???
Aquí:
Almacenar en Dirección BinarioX El DecimalX.
Next DecimalX
Next BinarioX
EndIF
EndIF

saludos
a sus ordenes
 
#15
No puedo programar nada, esa es la cosa. Ya lo tengo casi terminado, cuando lo acabe os subiré el esquemático por si queréis echarle un ojo. Muchas gracias por todo.
 
#17
Hola, lo primero es agradeceros a todos el interés.

MrCarlos la cosa es que yo tengo 2^16 = 65536 posiciones, si fueran menos sería más fácil hacerlo, pero ponerme a escribir tantas posiciones es una locura, te adjunto un ejemplo de una memoria ROM de 256 posiciones ya hecha para que le eches un ojo y me digas algo, la tengo que editar con el bloc de notas, pero he copiado el contenido a un .doc para que me deje subirlo. Necesito ayuda, pero psiquiátrica, porque me estoy volviendo loco...

Gracias ante todo.
Un truco... realiza la numeracion en excel, luego solo copia y pega al notepad...
 
#20
Si, haz la prueba: 255 en binario es 11111111 y en bcd es 0010 0101 0101 ves probando y verás que el bit menos significativo (el de la derecha del todo) es siempre el mismo.
 
Arriba