
El debate se retuerce según de donde provengan los comentarios. En estos últimos años he leído de todo y parece ser que no existe una definición específica y que esta cambia según el escenario. La explicación que Sorgelig ofrece en el Wiki de MiSTer me parece bastante acertada y en la que mi opinión casi casi encaja al 100%. Por tanto aprovecho parte de su texto que aprovecho para este post. Fuente: https://github.com/MiSTer-devel/Main_Mi ... i/Why-FPGA
Pues bienvenidos a la flexibilidad, versatilidad y al valhalla de los escenarios, esto seguramente que será interpretado de muchas formas. Creo que he encontrado el punto "intermedio" en donde se puede comentar que es una FPGA: ¿ Emulación, Simulación, Réplica o qué coño es eso ?... la teoría es que una FPGA puede convertirse en cualquier cosa para la que tenga suficientes puertas.
Pongámonos en la piel de un usuario que toda la vida ha utilizado los equipos físicos y que dispone de algún gadget para cargar desde SD, etc...
Bien, este usuario en alguna ocasión o con más frecuencia ha utilizado un emulador, bien para emular sus propias máquinas o para probar otras, ya que es un medio asequible y rápido para conocer y asomarse a otras plataformas. Sin embargo, creo que la intención es si prefiere (en última instancia) la emulación de software a la emulación de hardware.
Los que venimos emulando de toda la vida sabemos de que va todo el rollo, no voy a pararme a explicar todas y cada una de las ventajas y de los inconvenientes, de las particularidades y de los detalles de cada emulador, si son multiplataforma o si son exclusivos, es todo un universo....
Así que la forma clásica es: micro físico y/o emulación, pero últimamente se le viene dando al bombo con el tema de las FPGA y pretendo que quien lea este post, conozca una opinión, no condicionada y objetiva a este respecto. Sin grandes pretensiones e intentando generar un debate que busca de alguna manera explicar de forma entendible, ¿ qué son, para qué sirven y si son una opción ?. Las FPGA han llegado definitivamente no solo para quedarse, sino para ser uno de los complementos más útiles a los que un aficionado le puede sacar partido.
Vamos al debate, ¿ Porqué una FPGA si ya están los emuladores ?
He leído como he comentado, muchos debates en los últimos años. Yo mismo he sido al principio bastante reacio y hasta cierto punto purista con respecto a las FPGA. Pero todo ha de ser entendido e interpretado y al menos ha de cumplir con las expectativas de quien lo usa o necesita.
Usualmente cada usuario interpreta a su propia manera el proceso de simulación de hardware real en FPGA. Unos a ese proceso le llaman emulación, otros implementación, algunos simulación y un último grupo que lo denomina como replicación. Hay gente que prefiere la emulación debido a la flexibilidad. Y, sin embargo, la estabilidad y la consistencia de las FPGA son muy atractivas. ¿ Cuál es tu elección ?
Para otros directamente la FPGA es emulación. La pregunta importante es si la emulación tiene un ciclo preciso, lo que puede ser el caso para el software o la emulación de FPGA.
Veamos desde un punto de vista práctico como entenderlo. Si el código FPGA ( core ) se basa en un circuito de hardware real ( con los ajustes habituales para la compatibilidad con FPGA ), se llama réplica.
Cualquier otra cosa es emulación, ya que incluye diferentes tipos de aproximación. A día de hoy es difícil encontrar un core en FPGA que se pueda denominar como una réplica: la mayoría de los cores se basan en la recreación más o menos funcional en lugar de la recreación de circuitos reales.
Va, venga ron, pero aclara esto: ( Ahora lo vais a entender )
Algunos de los CPU core en FPGA, como el de Z80 ( el T80 concretamente ) y de M68000 ( el TG68K por ejemplo ) son utilizados por muchos cores pero se trata de puras emulaciones funcionales, no réplicas. Por tanto, es correcto llamar a los core FPGA emuladores a menos que se demuestre que son réplicas.
Ahora mismo es difícil determinar cuales son réplicas puras, cuales usan réplicas y emulación conjuntamente y cuales están basados en emulación pura y dura. Esto precisamente genera discusiones y debates bastante estériles que suelen terminar cabreando a unas partes y a otras.
Volvemos a la pregunta inicial: ¿ Entonces si es una emulación, porqué una FPGA ?
Desde el punto de vista del hardware, una FPGA puede recrear cualquier chip con el mayor nivel de perfección, puede haber diferentes bloques operando en paralelo. En contraste, la emulación puede ser lenta porque tiene que recrear secuencialmente estas tareas paralelas, esta es la causa por la que cualquier emulación que pudiera parecer sencilla puede requerir una máquina considerable.
Y aquí es donde se resuelve el entuerto. La emulación en FPGA es "TOTALMENTE" diferente a la emulación tradicional por CPU. Un emu clásico en PC por CPU ejecuta el código secuencialmente. Esta forma de emulación es de por si complicada porque el hardware real suele muchos integrados y todos ellos trabajan en paralelo. La CPU, la memoria, el chip de Video, el de Audio, Input / Output, Controladoras, etc..., junto con sus respectivos controladores, temporizadores, secuencias y han de funcionar al unísono. Por tanto la emulación tradicional tiene que ocuparse de todos estos componentes y se trata de hacer sonar la orquesta al mismo tiempo, ejecutando de un integrado a otro, generando la ejecución esperada y simultáneamente con la mayor precisión posible.
Aquí es donde se ve la calidad de un emulador, si está bien programado y es bueno o si por el contrario es una emulación de alto nivel ( HLE ) y la particularidad de los emuladores es que requieren bastante potencia de CPU ( a veces hasta fuerza bruta ) para emular incluso un micro retro antiguo y lento. A veces, incluso con una CPU moderna que funciona cientos de veces más rápido que el micro a emular no es suficiente, por lo que el emulador tiene que usar la aproximación u omitir la emulación de algunas partes menos importantes, o asumir algunas tareas estándar del sistema emulado sin un uso extraordinario.
Para que se entienda un poco mejor esto último, pongamos un ejemplo para comparar. Amiga UAE en RPi. Emulando Amiga en una Pi2 o Pi3 se consiguen ratios de potencia del 68000 original de 100X. Es que salen muchos MIPS. Entonces, se asume que el Amiga emulado es 100 veces más rápido que uno real. PUES NO, no es así. Si ejecutas diferentes tipos de demos o juegos, verás que el video a veces glitchea o parpadea. Por ejemplo, con la demo de "State of The Art", notarás que el video se ve entrecortado en algunos puntos, mientras que en un Amiga 600 real con 1x de velocidad de CPU reproduce la demo de manera muy suave. Así es como funcionan los emuladores tradicionales en RPi.
La emulación FPGA funciona muy diferente de la emulación tradicional por CPU. La FPGA la forman una gran variedad de disparadores simples y otra lógica. Exactamente lo mismo que todos los chips/CPUs. La única diferencia es que el chip/CPU específico tiene dichos disparadores/lógica conectados permanentemente, mientras que una FPGA permite conectarlos como se quiera. Un lenguaje HDL especial describe cómo conectar todos estos disparadores/celdas lógicas. Todo en FPGA funciona en paralelo como en chips/dispositivos originales. Por lo tanto, la FPGA está bastante más cerca del hardware original. La FPGA no necesita altas frecuencias para emular micros y consolas retro, por lo que funciona a frecuencias mucho más bajas que las que requieren los emuladores tradicionales. Dado que todo en FPGA funciona en paralelo, no hay problema para manejar cualquier uso posible del sistema emulado. Los desarrolladores de FPGA generalmente se concentran en la parte específica para que funcione correctamente, y funcionará como debería en cualquier situación posible. En la misma demo de Amiga usada de referencia "State of the Art", podéis ver un video donde se ve tan suave como en el HW original.
Esbozo una sonrisa y pienso... la pregunta del millón: ¿ Porqué no están todos los emuladores en FPGA ?
La programación en FPGA no es tan trivial. Cada bit en FPGA funciona en paralelo, por lo que el desarrollador también debería pensar en paralelo. Lo que es trivial en una emulación por CPU, no es trivial en FPGA. Aunque algunas partes triviales en FPGA cuestan mucho en código de CPU.
Para compensar el brick: 11 Myths About Hardware Emulation.
https://www.electronicdesign.com/eda/11 ... -emulation