Hola amigos! con la perla que nos ha dejado Jesús no he podido evitar usarlo como prueba de fuego para una cosa que me traigo entre manos......esto es una imagen durante el desarrollo ( abajo vídeo navegando por el fractal ):

Estoy preparando un sistema de simulación, que integraré en icestudio, pero también se puede usar desde código directamente (usando módulos y frameworks ya montados en verilog), desde la web con una interfaz muy chula o desde el propio icestudio dentro del flujo de trabajo.
Ahora mismo voy teniendo piezas ya funcionales, que voy avanzando con las pruebas que hago para el desarrollo de icestudio (intento encontrar sinergias entre las diferentes historias para llevarlas lo más en paralelo posible).
Entre ellas tengo ya bastante estable, el framework del simulador VGA, es una idea muy tonta pero funcional, lo que permite es coger un diseño que tengas y que use una pantalla VGA y sin tocar nada en tu códifo poder simularlo y verlo funcionar.
El reto que me plantee es no tener que tocar nada del diseño original, ya que esta técnica que no es nueva, hay mucha gente haciendo cosas de este estilo , siempre implica montar un circo con el diseño, la gracia de esto es un "plug and play" ahora mismo a nivel de código, instanciar en un top, conectar señales y listo.
La pasada no es solo poder ver en la pantalla, sino que puedes sacar mensajes por consola, medir tiempos , sacarte tablas,.... en tiempo de simulación! :)
En el ejemplo que os traigo, he integrado el gamepad y puedo navegar por el fractal mientras se simula! :)
Esto no es una traducción a software del diseño de Jesús, es literalmente el diseño simulado lo más a tiempo real que se puede bit a bit (ahora mismo mi equipo da 15FPS , aunque esto depende mucho de la máquina que ejecute, estoy bastante orgulloso del simulador porque muchas de estas simulaciones van a 1FPS, 0.05 FPS y cosas así, vamos que te mueres antes de ver un frame y de echo así empezó el framework, con un ejemplo muy sencillo apenas conseguía 1.5FPS.
Ahora mismo con un ejemplo sencillo obtengo unos 52 FPS en mi equipo y en Mandelbrot que es un diseño ya complejo, estamos entre 15 y 17, suficiente para poder interactuar.
Incluso si solo diera 1FPS para la depuración esta técnica de depuración es muy muy útil.
Así que nada, pensé.... el diseño de Jesús es ideal como una prueba de fuego... podemos ver si esto es funcional y si tiene sentido (porque si requiriera hacer muchos cambios en el diseño original, el concepto pierde sentido).
El diseño de JEsús, cumplía todos los puntos críticos:
1) Utiliza una memoria externa (diversión asegurada).
2) Como Jesús es un mago de la optimización y usa la SRAM con maestría funciona en flancos de subida y bajada, para leer y escribir en el mismo ciclo y aunque eso con el hardware real una vez sincronizas las señales es fácil, en simulación tiene su miga porque el simulador las cosas "asíncronas" y con buses flotentes se le atragantan y te puede generar "alucinaciones" o retraso en las señales de forma que se generen bloqueos en el diseño así que, crear un modelo de sram que funcionara con el diseño de JEsús sin tocar sus señales, era un reto.
3) Utiliza una resolución no estándar, el módulo debería de más o menos pintar sin tener que ajustar nada (me esperaba peor resultado del obtenido). La idea es hacer el módulo tolerante pero de momento está en un estado inicial.
4) Tiene interacción con un gamepad, así que otro handicap ¿podemos simular algo con lo que podamos interactuar? y además al igual que antes, sin modificar el código origina. Pues la respuesta es... Sí, también he creado un módulo para simular el gamepad de la NES y enchufarlo a la máquina de Mandelbrot como si fuera un pad de NES, pero realmente lo que toma son las pulsaciones de las teclas del teclado.
Las simulaciones no son perfectas, a veces hacen estragos y son muy estrictas con el código (en el fondo te obligan a hacer las cosas muy bien), por lo que intentar simular así a la primera un código como este pues me planteaba que podría errar y no conseguirlo.
También nos enfrentamos a al eficiencia, en cosas pesadas como esta puede ir extremadamente lento que por ejemplo para interactura se podría convertir en algo inusable.
Al final ha sido un éxito , el diseño ha funcionado prácticamente a la primera en cuanto he tenido el modelo de sram operativo y ajustar algunos anchos de buses (verilator es muy estricto).
La integración del pad también me ha parecido muy práctica.
Esto es muy útil a parte de molón, porque imaginad, se pueden probar por ejemplo los multiplicadores, podrías probar el diseño con una memoria más grande a más resolución, etc y todo con un esfuerzo muy medido y sin necesidad de tener ese hardware (imaginad que estais pensando en diseñar una tarjeta pero dudáis en ciertas características y puedes simular las diferentes configuraciones para tomar datos y tomar decisiones con datos).
No os quiero bombardear con mil cosas si realmente no son de interés, si realmente os apetece ver las tripas, levantad la mano y le doy unas pinceladas al código y hago una pequeña documentación y os lo lanzo el finde.
A mi personalmente no me importa hacer ese trabajo porque si me dais feedback de las pruebas, o si mas adelante lo usáis en cosas vuestras y me reportáis problemas o ideas para mi es muy gratificante y constructivo, pero eso ya me decís, si no sigo con ello a mi aire y ya os contaré más adelante.
Inicialmente sólo os lo mando así porque he tenido un "pico" de emoción al ver aparecer Mandelbrot dentro de mi pequeño simulador, pero realmente el framework que son 3 ficheros tontos fuciona muy bien y quizá os puede ser útil, al igual que el modelo simulado de sram que eso os puede dar juego.
Por cierto como veréis se descuadra un poco (se me sale por la derecha y aparece por la izquierda), y es porque uno de mis objetivos es que el framework actúe literalmente como una pantalla vga y tenga cierto margen para soportar pequeñas desincronizaciones en los modos, por ejemplo realmente el simulador está trabajando a 640x480 y acepta las señales que emite Jesús a 512x480, tengo que robustecer eso porque ahora mismo como veis se me desfasa un poco.
Os dejo el vídeo, no es gran cosa pero lo veréis en ejecución y yo ando pulsando las teclas para navegar por el fractal.
Ya me contáis que os parece, espero que os guste y si os motiva, mano arriba! y el finde os lo paso :)