Hola
Ultimamente he estado intentando rehacer uno de mis diseños de modo que se pueda fabricar en uno de los runs de Tiny Tapeout (
https://tinytapeout.com), aunque desafortunadamente me he quedado fuera de plazo para la hornada de este mes.
Y no es que no tuviese el diseño adaptado a tiempo, estaba ya listo casi dos semanas antes del deadline, pero conseguir que Tiny Tapeout nos mandase una factura proforma mínimamente decente como para que pasara las cribas administrativas de la UVA ha sido una misión imposible. Y si no pagas rápido no hay chip ;)
De todos modos me gustaría comentar los retos técnicos de la fabricación de un chip en Tiny Tapeout, que resultan bastante más limitantes que los que afrontamos en un diseño digital para FPGAs
- Lo primero es que no hay memoria disponible. No tenemos bloques BRAM, y si intentamos sintetizar una RAM, por pequeña que sea ocupa un área de chip prohibitiva. ( Uno de los diseños, un clon de Atari 2600, ocupa nada menos que 10 "tiles" (tile: 160um x 110um = +$50) y eso que solo tiene 128 bytes de RAM)
- Lo siguiente es que tampoco podemos usar valores iniciales conocidos en los registros. Los bloques "initial" funcionan a nivel Verilog, pero cuando se simulan las puertas lógicas del chip esos valores iniciales son todos 'X'. Esto lo he solventado a base de incluir señales de reset en casi todos los registros, lo que seguramente fuese innecesario puesto que los registros tendrán algún valor inicial, sea el que sea, pero sin estos resets no hay manera de pasar una simulación a nivel de puertas lógicas que nos de alguna seguridad de que el diseño está bien.
- Y para terminar tenemos el escaso número de pines que nos permite Tiny Tapeout: 8 pines de entrada, 8 de salida, y 8 bidireccionales, (aparte de los pines de reset y de reloj)
En fin, el diseño que se ha quedado aparcado se puede ver aquí:
Y esta es una "foto" del supuesto chip
Por supuesto, este prototipo, más una memoria externa de 128KBytes, está sintetizado y corriendo en una placa FPGA (ICECREAM)
Saludos