Falla en el circuito un contador según un multiplexor

277 views
Skip to first unread message

i.hernandez

unread,
Jun 18, 2019, 7:46:33 AM6/18/19
to FPGAwars: explorando el lado libre
Hola he montado este circuito pero me está dando problemas que de primeras no entiendo.
El circuito está formado por 2 contadores, uno ascendente y otro descendente. Sin pulsar el botón el contador descendente va a 5Hz solo muestra la cuenta del 7 al 0 (en vez de F a 0) al pulsar muestra a 1Hz el contador ascendente de 0-F. 
En el segundo circuito (Contador 1) es el mismo circuito pero conectado el contador descendente al conversor de 7 segmentos (Desconectando el multiplexador). En este caso el contador descendente muestra de F-0 correctamente.
No comprendo donde estoy fallando pero el multiplexador no está haciendo funcionar correctamente el circuito. A ver si alguien tiene mejor ojo que yo. 

Un saludo y gracias

Sin título.png


1 contador.ice
Sumador_2_contadores.ice

Demócrito

unread,
Jun 18, 2019, 8:35:28 AM6/18/19
to FPGAwars: explorando el lado libre
Hola Hernandez,

Me voy a referir a la construcción del contador de la izquierda.

Antiguamente yo también hacía los contadores de esa manera, anidando la salida de una báscula D (y que funcionase por flanco de bajada) al clock de la siguiente báscula. Pero esa construcción aunque sólo como contador funciona bien, al ponerla junto con otros elementos suele dar problemas (además de glitches) porque hay un retraso encadenado hasta que finalmente todas las básculas recibe el flanco en el clock.

Por otra parte, en el esquema, según me parece entender y - puedo estar completamente equivocado -, estás mezclando básculas que tiene clock del sistema, con una construcción que creo que no es compatible.

esquema.PNG


Puedes probar a poner un contador normal y corriente y le inviertes las salidas para que cuente al revés. Al multiplexor no le veo problemas.

La sugerencia es esa, eliminar esa construcción de contador descendente, poner uno normal e invertir sus salidas.

El circuito no lo he probado, y lo que comento es sólo una hipótesis.

Un saludo.

i.hernandez

unread,
Jun 18, 2019, 9:42:49 AM6/18/19
to FPGAwars: explorando el lado libre
Gracias Democrito

Me has chafado un poco ;) el objetivo que tenía era enseñar "las tripas" de un contador y otro a modo bloque.

Lo de los relojes de sistema y los retrasos me pierdo un poco pero al funcionar todo con TICs pensaba que ese problema se solucionaba. Lo que me resulta más raro es lo del multiplexador... Ahora estoy a tope de trabajo, a ver si libro un poco y puedo hacer muchas más pruebas.

Un salduo y gracias

Obijuan

unread,
Jun 18, 2019, 4:43:59 PM6/18/19
to FPGAwars: explorando el lado libre
Hola ion!

En el circuito que has enviado, estás violando las reglas del diseño síncrono [1]. Esto significa que los circuitos que generas no son válidos, o que no van a funcionar en todos los casos. Al colocar el multiplexor, el sintetizador realiza alguna simplificación (porque el circuito en realidad es erróneo) e infiere cosas diferentesol

La regla principal del diseño síncrono es la de usar UNA ÚNICA SEÑAL DE RELOJ. Esto significa que en todos los elementos secuenciales de tu circuito, la única señal de reloj que debe entrar por clk (la entrada con el símbolo >) es el reloj del sistema. NUNCA ninguna otra que no sea el reloj del sistema.

Te adjunto tu circuito modificado que ya sí cumple esa regla de diseño y funciona bien. Lo he probado en mi alhambra II, con un display de 7 segmento y todo ok (OJO! He cambiado el decodificador de 7 segmentos para que funcione con ni diplay, así como los pines. Deberás cambiarlos por los tuyos para verlo bien)


Los contadores los puedes hacer de múltiples maneras. Esta es una de ellas. Los puedes hacer como quieras, pero siempre respetando las reglas del diseño síncrono



Saludos, Obijuan
dos-contadores-sincronos-up-down.ice

Obijuan

unread,
Jun 18, 2019, 5:03:34 PM6/18/19
to FPGAwars: explorando el lado libre
Y ya que ha salido el tema, os hago un micro-tutorial sobre contadores :-)  Os muestro ejemplos de contadores de 3 bits, pero sera igual para un número mayor:

Este es el mismo de antes. Es un contador Descendente, de 3 bits
En realidad, un biestable D realimentado con una puerta not es un biestable de cambio, o tipo T. Este sería el circuito equivalente:


Si cambimos los detectores de flanco de bajada, por otros de subida, obtenemos un contador ascendente:

Otro tipo es poniendo los 3 biestables D en paralelo, y sumando 1 al resultado. Si el contador vale 0, en el siguiente ciclo los biestables almacerán el 1, en el siguiente el 2, etc....

Y 3 biestables D en paralelo qué sonn? Pues un registro de 3 bits :-)  Podemos hacer el mismo contador con un registro de 3 bits y un sumador. Este es el modelo que a mí más me gusta:


Porque es muy intuitivo. Además, si ahora queremos que avance de 2 en 2, sólo hay que cambiar la constante de suma a 2. Si queremos que sea descendente, sólo hay que cambiarla a -1 (que en binario sería el número 111) 
Y además podemos cambiar el valor de inicio de la cuenta cambiando el valor inicial de los biestables (la constante superior del registro)

Para descomponerlo en componentes más básicos es muy fácil. El registro se descompone en sus 3 biestables en paralello. Y el sumador en las puertas lógicas necesarias para implementarlo

Os adjunto los fichero en icestudio por si queréis probarlos

Saludos, Obijuan

El martes, 18 de junio de 2019, 9:46:33 (UTC+2), i.hernandez escribió:
contador-2.ice
contador-3.ice
contador-4.ice
contador-5.ice
contador-6.ice

charli va

unread,
Jun 18, 2019, 5:10:50 PM6/18/19
to fpga-wars-explora...@googlegroups.com
Que grande! 

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/ef4f08c1-c86e-4cae-ad8a-a801d1108afe%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Obijuan

unread,
Jun 18, 2019, 5:12:26 PM6/18/19
to FPGAwars: explorando el lado libre

 Ya que estoy probando estoy, he aprovechado para añadir un efecto de transición suave en el contador ascentende de 1Hz, pero NO en el descendente. Le da un toque más chulo :-)


Saludos, Obijuan

El martes, 18 de junio de 2019, 9:46:33 (UTC+2), i.hernandez escribió:
dos-contadores-sincronos-up-down-2.ice

i.hernandez

unread,
Jun 19, 2019, 7:32:27 AM6/19/19
to FPGAwars: explorando el lado libre
Uau me he quedado impresionado! Muchas gracias, menuda currada que te has pegado. Me pongo a ello

i.hernandez

unread,
Jun 19, 2019, 8:29:18 AM6/19/19
to FPGAwars: explorando el lado libre
Hola Obijuan

He probado el primer circuito dos-contadores-sincronos-up-down y funciona perfecto

Al intentar probar el del efecto chulo me he quedado con las ganas dos-contadores-sincronos-up-down-2 me da error "errores detectados en el diseño". Hay algo que no le gusta pero no veo lo que puede ser. 

Gracias por todo, seguiré probando

Juan Gonzalez Gomez

unread,
Jun 19, 2019, 12:17:07 PM6/19/19
to FPGA-WARS: explorando el lado libre
Tienes que probarlo con la última versión de Icestudio, nightly build. Se baja de aquí


El controlador del brillo usa etiquetas

Saludos, Obijuan

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Reply all
Reply to author
Forward
0 new messages