Hay muchas formas de implementar una CPU Intel i386 sobre una FPGA, y el uso del microcódigo original probablemente sea uno de los enfoques más interesantes. Es exactamente lo que hace el proyecto z386 del desarrollador nand2mario, según un reciente blog post que resume el desarrollo hasta ahora.
Este proyecto es similar al previamente desarrollado z8086, que como uno podría suponer hace algo similar pero para la CPU Intel 8086. Al ejecutar el microcódigo original se garantiza una compatibilidad muy cercana al hardware real, aunque la escala de ese microcódigo entre un 8086 y un 80386 es bastante distinta.
¿Qué hace que el 80386 sea más complejo de reconstruir?
Hay un set de instrucciones mucho más amplio con un estado interno correspondientemente mucho más complicado de seguir, incluyendo todas las funciones "nuevas" como gestión de memoria, paginación y registros de debugging, además de las extensiones al modo protegido que empezaron con el i286.
Actualmente z386 corre sobre varias FPGAs, incluyendo la Altera Cyclone V y la Gowin GW5A, con un rendimiento equivalente a un i386 de unos 70 MHz aunque con una eficiencia por ciclo levemente peor, algo que podría deberse en parte al caché limitado de 16 kB comparado con los 32+ kB de las versiones más rápidas del i386. De cualquier forma, es más que suficiente para correr todo tipo de software, incluido juegos como DOOM.
¿Cuál es el objetivo del proyecto?
Es importante notar que el objetivo acá no es ser más performante que cores como el ao486 (uno de los soft-cores i486 open source más populares en escena retro), sino que funciona más como una reconstrucción arqueológica del hardware original y su interacción con el microcódigo del chip.
El 80386 fue históricamente uno de los puntos de inflexión más relevantes en la línea x86. Con sus 32 bits, modo protegido, paginación y buena compatibilidad hacia atrás, fijó el contrato de hardware-software que dio forma al x86 moderno. Reconstruirlo con su microcódigo original sobre FPGA, en vez de reescribir un equivalente lógico, permite verificar el comportamiento exacto del chip y estudiar cómo Intel resolvió la transición de 16 a 32 bits a mediados de los 80.
Imagen superior: lineup de CPUs Intel 286, 386 y 486. (Crédito: Sgroey, Wikimedia)



