Cuando creo un bloque deja de funcionar

73 views
Skip to first unread message

i.hernandez

unread,
Aug 30, 2018, 3:01:39 PM8/30/18
to FPGAwars: explorando el lado libre
Hola tengo un circuito que quiero convertirlo en bloque para poder usarlo desde la librería. Lo convierto y obtengo el bloque pero al subirlo deja de funcionar. Os dejo los 2 archivos, uno es el ejemplo donde funciona al cargarlo y el otro es el bloque.

ejemplo.png

Bloque dentro.png

Bloque.png


Os dejo las capturas del ejemplo, del bloque por dentro y del bloque, algo estoy haciendo mal y no consigo saber el que. A ver si a alguien se le ocurre. Saludos y gracias


PWM-fading.ice
PWM-fading.ice

Democrito

unread,
Aug 30, 2018, 8:08:34 PM8/30/18
to FPGAwars: explorando el lado libre
Según veo el fallo está en los "clock" (igual hay más cosas, no lo sé, comento lo primero que veo). No deben de definirse relojes de esa manera porque luego en un bloque (al subir de nivel) se pierde esa señal. Sé que no es sencillo de entender, pero si vas a hacer un bloque, las señales de reloj deben ir con en ">" indicado en esa cajetilla. Como sé que esto no se entiende, te lo traduzco a imagen y de paso te lo adjunto. Hay dos formas de hacerlo, la más secilla es la más obvia, tal como se haría para subirlo a la FPGA, y la segunda forma es otra manera, sin especificar el puerto, porque ya tiene intención de bloque, pero que al tener el ">" el compilador entiende que es una señal de reloj.

Forma funcional que siempre te va a funcionar: (valga la rebuznancia!) [Me tomé la libertad de poner una entrada a la señal "resetN" porque no estaba conectado a nada]

BloqueFuncional.png

La otra forma si ya sabes que va a ser un bloque y no lo vas a utilizar como circuito individual:

clock como bloque.png

O sea, eso de que salga el clock como un cuadrado pequeño al lado de nuestra caja de código, sólo se ha de poner cuando es un circuito final, no un bloque. Si defines "clk" como clock, sale por defecto, pero si lo llamas de otra manera no, o si enlazas un cable de entrada definiendo eso que entra con el ">")  

Si no me explico bien no te cortes en comentarlo, pero haz pruebas antes!

Un saludo.



Democrito

unread,
Aug 30, 2018, 8:17:26 PM8/30/18
to FPGAwars: explorando el lado libre
Se me olvidó el adjunto y adjunto queda.

Observa que al hacer doble clic sobre el "clock" puedes hacerlo real (definiendo un pin, tal como está en el adjunto). Si sabes que sólo va a ser un bloque, entonces no hace falta definir pin (sería clk, es decir un reloj genérico que toda FPGA lleva) y habilitas entonces el pin de "show clock", que es decirlo lo mismo, pero sin definir el pin.

Para comenzar en estos temas lo ideal es que el clock sea uno solo, y esté definido como pin de la FPGA. Así nunca te dará problemas con los niveles de bloques (al igual que en el adjunto).
Funcional_noBloque_PWM-fading.ice

Democrito

unread,
Aug 30, 2018, 8:26:23 PM8/30/18
to FPGAwars: explorando el lado libre
En el bloque te ha de salir el clock, sea como nombre, o si no como cuadradito, entonces es correcto. Con el cudradito como clock no has de hacer nada más (al menos en ese mismo nivel), y si te aparece como nombre, le pones una entrada de clock.

La cosa es que según tu intención se hace de una u otra manera.

Aunque parezca confuso, con el tiempo lo pillarás!

Juan Gonzalez Gomez

unread,
Aug 31, 2018, 1:36:40 AM8/31/18
to FPGA-WARS: explorando el lado libre
Hola Ion,

La solución es muy fácil. Como te dice demócrito, te falta añadir la entrada de reloj de tu bloque

Lo que has creado es un bloque quequtiene tiene solo un puerto de salida, y ninguna entrada. En realidad tu bloque necesita un reloj, y se lo tienes que poner explicitamente

Solo tienes que añadir una entrada, indicar que se trata de una entrada de reloj y conectarla a todas las entrada de reloj de los bloques que estás usando

Aquí puedes ver un ejemplo sencillo de cómo se hace:


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.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/e520fa7c-8ac4-4a01-8ef9-75e620fc4859%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Juan Gonzalez Gomez

unread,
Aug 31, 2018, 2:29:07 AM8/31/18
to FPGA-WARS: explorando el lado libre
Este bloque ya es funcional. Sólo he añadido la entrada de reloj:

Screenshot from 2018-08-31 08-24-39.png

Y este el ejemplo de pruebas:

Screenshot from 2018-08-31 08-26-08.png

Te adjunto los dos circuitos, probados en una Icezum Alhambra y comprobado que van ok

Saludos, Obijuan


test-fading.ice
PWM-fading.ice

Juan Gonzalez Gomez

unread,
Aug 31, 2018, 2:43:57 AM8/31/18
to FPGA-WARS: explorando el lado libre
Adjunto un gif animado de la prueba anterior, sobre un LED externo

Saludos, Obijuan

Nota: Como se ve en el gif, el componente funciona. Sin embargo, no se respectas las reglas del diseño síncrono. Esto no tiene mayor importancia en estos circuitos que funcionan a baja velocidad, y son para aprender pensamiento hardware. Primero hay que ganar intuición en hardware, y después optimizar y aplicar las reglas. Para los que quieran profundizar un poco más aquí hay información


Peek 2018-08-31 08-36.gif

i.hernandez

unread,
Aug 31, 2018, 4:28:17 AM8/31/18
to FPGAwars: explorando el lado libre
Muchas gracias a los dos (Democrito y Obijuan) por el trabajazo que os habéis pegado!!!

Ni se me ocurrió hacer nada con los Clocks, ahora ya lo se. Lo de las reglas de diseño es para tomárselo con calma, porque las he leído y aunque el paraque me ha quedado claro, como hacerlo no tanto. Por supuesto no he aplicado las reglas de diseño porque es un frankistein que he ido creando sobre la marcha y sobre todo porque no las conocía. Intentaré hacer algo, a ver si lo consigo. Gracias de nuevo y un saludo

Juan Gonzalez Gomez

unread,
Aug 31, 2018, 4:33:28 AM8/31/18
to FPGA-WARS: explorando el lado libre
Ni te preocupes de las reglas de diseño síncrono. Es más importante primero desarrollar la intuición "hardware". ¡Has conseguido hacer el circuito querías! Eso es todo un logro!. Al principio cuesta un poco, pero cuando te acostumbras a este pensamiento, cada vez es más fácil. Sólo hay una receta: practicar y practicar

Saludos, Obijuan

El vie., 31 ago. 2018 a las 10:28, i.hernandez (<i.her...@fpdonbosco.com>) escribió:
Muchas gracias a los dos (Democrito y Obijuan) por el trabajazo que os habéis pegado!!!

Ni se me ocurrió hacer nada con los Clocks, ahora ya lo se. Lo de las reglas de diseño es para tomárselo con calma, porque las he leído y aunque el paraque me ha quedado claro, como hacerlo no tanto. Por supuesto no he aplicado las reglas de diseño porque es un frankistein que he ido creando sobre la marcha y sobre todo porque no las conocía. Intentaré hacer algo, a ver si lo consigo. Gracias de nuevo y un saludo

--
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.

i.hernandez

unread,
Aug 31, 2018, 4:54:49 AM8/31/18
to FPGAwars: explorando el lado libre
Jaja tarde has abierto la caja de Pandora, ya me he obsesionado con las reglas de diseño!

He estado mirando el circuito y la verdad es que los bloque que he ido usando parece que si que cumplen, así que yo no lo he realizado bien. Por lo que he entendido tengo 2 puntos mal:
  • El Toggle: Porque su clock tiene que estar conectado al clock del sistema. Encima al estar conectado al T cambia en los flancos de subida y bajada.
  • El corazon: Su salida está conectada con los clock de 2 contadores, cuando los clock de los contadores deberían estar conectados a los clock del sistema.
La soluciones que se me han ocurrido:
  • Quitar el Toggle y buscar otro biestable que haga la misma función de interruptor pero con una entrada de datos y otra de clock separadas.
  • Sustituir la salida T del detector de flancos por la salida F
  • Lo del corazón no lo tengo muy claro, lo único que se me ocurre es cambiar el contador para que este tenga 2 entradas uno para el clock y otro para la señal que haga contar.
¿Alguna cosa más? muchas gracias!!

Democrito

unread,
Aug 31, 2018, 6:50:15 AM8/31/18
to FPGAwars: explorando el lado libre
Oops! me acacabo de dar cuenta de una metida de gamba mía. En mi último post puse la imagen que está abajo y no es correcta. Sólo puede haber un clock como tal!

clock como bloque.png

Democrito

unread,
Aug 31, 2018, 8:09:11 AM8/31/18
to FPGAwars: explorando el lado libre
Te dejo adjunto un circuito como el tuyo pero más resumido. Sólo utilizo 3 bits para intentar simplificarlo al máximo y a la vez se pueda ver el funcionamiento. La filosfía es como puedes ver en esta imagen.



Fue uno de los primeros circuitos que hice y lo publiqué en su momento, pero no te pongo el enlace porque las explicaciones que daba son muy confusas (Icestudio era nuevo para mí).
pwm_triangular.ice

Democrito

unread,
Aug 31, 2018, 8:42:01 AM8/31/18
to FPGAwars: explorando el lado libre
Una explicación gráfica del funcionamiento: (Para verlo a tamaño real doble clic en la imagen o "abrir imagen en una ventana nueva" con el botón derecho del ratón.)

ExplicacionGraficaOndaTriangular.png


i.hernandez

unread,
Aug 31, 2018, 3:08:02 PM8/31/18
to FPGAwars: explorando el lado libre

Gracias Democrito por la explicación pero no entiendo lo que hacen esos 3 xor. Si no me he colado he mirado el resultado de la conversión y no veo el patrón de un pulso PWM, aunque seguro que lo hay pero de logica hardware voy muy justito.
0000 -> 000
0001 -> 001
0010 -> 010
0011 -> 011
0100 -> 100
0101 -> 101
0110 -> 110
0111 -> 111
1000 -> 100
1001 -> 101
1010 -> 110
1011 -> 111
1100 -> 000
1101 -> 001
1110 -> 010
1111 -> 011

Por ahora mi circuito lo he modificado a este, pero lo de meter mano al contador son palabras  mayores.

Sin nombre.png



PWM-fading-pruebas.ice

Jose Pico

unread,
Aug 31, 2018, 4:13:17 PM8/31/18
to FPGAwars: explorando el lado libre

Democrito

unread,
Aug 31, 2018, 4:37:46 PM8/31/18
to FPGAwars: explorando el lado libre
Hola de nuevo Hernández. He provado tu circuito y funciona estupendamente bien.

Las puertas Xor lo que hace depende del último bit del contador. Si ese último bit (común a todas las entradas de las Xors) está a 0, no pasa nada, la cuenta del contador sale tal cual de las susodichas Xor, pero cuando ese último bit del contador se pone a 1, entonces lo que hace es invertir. El resultado es que el conjunto de puertas Xors junto con el contador forma un -pseudo- contador bidireccional. En realidad no lo es, pero tiene ese efecto porque cuenta hacia delante y luego pasa a descontar. Te adjunto el circuito que hace lo que te acabo de comentar. Son pequeños trucos sencillos que una vez que se conocen se puede aplicar a otras historias, como por ejemplo hacer las lucecitas de KITT (el coche fantástico), añadiendo un decoder o tb llamado demultiplexor.

grafico combinacional kitt.PNG


PseudoContadorBidireccional.ice

Democrito

unread,
Aug 31, 2018, 4:49:56 PM8/31/18
to FPGAwars: explorando el lado libre
En el circuito que adjunté repetí una etiqueta de salida. Todo está bien porque por dentro el bloque es correcto, al renombrar las salidas se me olvidó cambiar de nombre la última.

correccion.png


i.hernandez

unread,
Sep 1, 2018, 9:24:23 AM9/1/18
to FPGAwars: explorando el lado libre
Gracias Democrito me queda mucho más claro y la verdad es que es muy curioso el efecto de los xor que bien funcionan.

Jose Pico había visto tu wiki pero ahora veo que tienes varios módulos en github muy interesantes, pero tengo que mirarlo con más calma.

Gracias a los dos y un saludo
Reply all
Reply to author
Forward
0 new messages