¿Hay un microcontrolador con 16 MB de RAM?

8

Aquí está mi situación:

Como proyecto personal, estoy buscando escribir un emulador para Sega Megadrive (Sega Genesis) que se ejecuta en AVR. Así que he estado buscando un microcontrolador que tenga características similares al Motorola 68k que se envió con el MegaDrive. Sin embargo, he notado que las especificaciones para el 68k en comparación con la mayoría de los micros de aficionados. Elijo AVR en lugar de ARM porque me gusta la arquitectura y pensé que sería un buen desafío.

M68K:
32-bit CPU
16-bit data bus
Up to 20 MHz
16 MB RAM
No I/O ports

Aquí están las especificaciones para un Arduino Leonardo:

Input Voltage (recommended) 7-12V
Input Voltage (limits)  6-20V
Digital I/O Pins    20
PWM Channels    7
Analog Input Channels   12
DC Current per I/O Pin  40 mA
DC Current for 3.3V Pin 50 mA
Flash Memory    32 KB (ATmega32u4) of which 4 KB used by bootloader
SRAM    2.5 KB (ATmega32u4)
EEPROM  1 KB (ATmega32u4)
Clock Speed 16 MHz
Length  68.6 mm
Width   53.3 mm
Weight  20g

Esto parece bastante típico para los micros modernos de gama baja. Nunca veo que el carnero se meta mucho en los mbs.

Ahora, estoy seguro de que la SRAM moderna no es casi la misma que la que tenía el 68k, pero ¿es posible que obtenga un micro AVR que coincida con la potencia de un 68k? ¿Estoy mirando mal este problema? ¿Necesito cambiar mi diseño para acomodar micros modernos?

No sé si alguna fuente externa de memoria será lo suficientemente rápida.

baordog
fuente
66
Según Wikipedia , el Sega Genesis funcionaba a 7,6 MHz y tenía solo 72 KB de RAM, no 16 MB, más 64 KB de memoria de video adicional.
tcrosley
2
Use un procesador de aplicaciones o un FPGA.
Peter
11
Además, te estás perdiendo completamente la sobrecarga de emular . Emular correctamente un SNES (que utiliza una CPU de ~ 21 MHz) requiere fielmente una computadora de más de 3 GHz (ver aquí ). Como mínimo , para emular un Megadrive / genesis, que utiliza una CPU de 7,6 MHz y 3,58 MHz, debe esperar un dispositivo host de más de 100 MHz.
Connor Wolf
12
Francamente, realmente debería escribir el emulador primero, idealmente en el portátil C. Luego, considere portarlo a ARM, y luego busque diseñar una placa para el MCU ARM de su elección, una vez que tenga algunos números para el rendimiento requerido. Francamente, creo que no te das cuenta de lo increíblemente involucrados que son los emuladores fieles y adecuados. Modelar y emular adecuadamente incluso consolas antiguas simples es muy, muy difícil, porque ninguna de ellas es completamente digital, todas tienen muchas peculiaridades analógicas.
Connor Wolf
3
@ConnorWolf Vale la pena señalar: Es esencialmente imposible implementar la recompilación dinámica en AVR, ya que no puede ejecutar código desde la memoria de datos. (Puede almacenar para programar la memoria, ¡pero eso es lento y
consume

Respuestas:

18

Aunque el Motorola 68000 y el Sega Genesis son bastante antiguos (principios de la década de 1980), no encontrará un AVR de gama baja (es decir, 8 bits) que pueda emular toda la máquina de juego.

El Sega Genesis corrió a 7,61 MHz y tenía 72 KB de RAM (más 64 KB adicionales de RAM de video). Sin embargo, los programas de juego residían en ROM, por lo que necesitará RAM adicional para mantenerlos (a menos que planee poder conectar los cartuchos originales de alguna manera). La mayoría de los cartuchos de juegos tenían menos de 4 MB, pero hay al menos un juego (Pier Solar, lanzado en 2010) que tiene una ROM de 8 MB.

Además, el sistema ciertamente debe haber incluido una ROM del sistema que actuó como algún tipo de ejecutivo y también habría proporcionado una biblioteca de E / S común para los cartuchos (no puedo encontrar ninguna referencia a qué tan grande era). Tendrá que encontrar las ROM (o imágenes de ROM) para esas y copiarlas en su RAM también (o agregar una sección de ROM a su sistema).

En mi opinión, querrás usar un microcontrolador de 32 bits. Si va a usar los cartuchos originales más una ROM de programa, y ​​no necesita MB de RAM, puede usar la mayoría de los microcontroladores de 32 bits que tengan suficiente espacio para su emulador. Si va a descargar los cartuchos y la imagen de ROM del sistema en la RAM, para obtener 8 MB o más de RAM, necesitará un microcontrolador que tenga un bus de memoria externo (no puede obtener 8 MB en el mismo chip que el microcontrolador).

Dado que desea seguir con AVR, le sugiero un procesador como el AT32UC3A3256 , que tiene 256 KB de Flash, 128 KB de RAM y funciona a 84 MHz. El problema es que es un dispositivo de montaje en superficie de 144 pines, que será difícil de soldar.

Sin embargo , hay un kit de evaluación para este procesador de Element 14 por solo $ 31.25. Para que no tenga que preocuparse por soldar. Además, la placa tiene 8 MB de RAM externa, por lo que puede cargar un cartucho en la RAM.

ingrese la descripción de la imagen aquí

Solo para el registro , sigo pensando que debería considerar la Raspberry Pi , que funciona a 700 MHz con 512 MB de RAM por un poco menos que el costo de la placa de desarrollo anterior. Al ejecutar a esa velocidad, no tendría problemas para emular el código 68000 y realizar E / S a la velocidad correcta.

Ya sea que vaya a la ruta AVR o Raspberry Pi, además del 68000, el Sega Genesis también incluyó un Zilog Z80 y varios chips de propósito especial, incluidos Yamaha YM2612 y Texas Instruments SN76489A. El Z80 se usó para controlar el sonido y también proporciona compatibilidad con el anterior Sega Master System. El chip Yamaha era un sintetizador de sonido FM y el chip TI era un generador de sonido programable (esta máquina tenía muchas opciones de sonido). También había un procesador de pantalla virtual (VDP). Probablemente pueda omitir el sonido (lo que significa que no necesita preocuparse por los chips Z80 o Yamaha o TI) pero tendrá que emular el hardware de gráficos.

Un par de recursos:

EASy68K - Editor / Ensamblador / Simulador para el 68000. Código abierto para que pueda desenterrar el código de simulación del 68K

Cyclone 68000 - emulador para el microprocesador 68000, escrito en ensamblaje ARM de 32 bits. Solo es útil si decides usar Raspberry Pi

Finalmente, si aún no está familiarizado con el conjunto de instrucciones 68000, planee pasar semanas (o más) para convertirse en un experto. Gran parte de su depuración se reducirá al nivel del emulador, tratando de descubrir por qué una sección del código 68000 en el cartucho del juego no se ejecuta correctamente. (Lo que significa que probablemente querrá poder configurar un punto de interrupción virtual en el código del cartucho). También necesitará un desensamblador, por lo que no tendrá que lidiar con el código de la máquina; Aquí está la fuente de uno .

tcrosley
fuente
1
Lo consideré pero quiero restringirme a avr.
baordog
1
@baordog He actualizado mi respuesta con dos chips AVR sugeridos.
tcrosley
44
Tenga en cuenta que los dos procesadores que mencionó son ambas partes AVR32. Estas son casi completamente diferentes de las partes de la arquitectura AVR con las que el OP está familiarizado, más allá de que ambas están hechas por Atmel.
duskwuff -inactive-
2
@duskwuff Él no podrá sobrevivir con nada menos poderoso que estos, y los procesadores AVR están hechos por Atmel.
tcrosley
3
@baordog Modificó mi respuesta nuevamente: encontré una placa de desarrollo con un AVR de 32 bits que incluye 8 MB de RAM externa por $ 31.
tcrosley
12

No va a pasar.

El microcontrolador más grande en la línea ATmega con soporte para memoria externa es el ATmega1284, pero este solo tiene 8 KB de SRAM interna y puede direccionar hasta 64 KB de memoria externa. Esto no será suficiente para emular el Genesis, que tenía 72 KB de RAM y otros 64 KB de memoria de video. Es posible implementar el acceso a memoria adicional a través de la conmutación de bancos, pero esto haría que el acceso a la memoria desde el AVR sea muy costoso.

Hay algunas partes en la línea ATmega con más SRAM interna, como el ATmega1284 (16 KB), pero estas no admiten memoria externa en absoluto. Larga historia, corta, abordar más de 64 KB de RAM de un ATmega es bastante difícil.

(No estoy seguro de dónde obtuviste la cifra de 16 MB. El 68000 no tiene memoria interna, además de registros; la cantidad de memoria en un sistema 68000 puede variar dramáticamente).

Además, la CPU 68000 en el Genesis funciona a 7.6 MHz. Emular esto en un AVR de 16 MHz no será posible, aunque la velocidad del reloj del AVR es un poco más alta, el 68000 es una CPU de 32 bits, por lo que emular una de sus instrucciones con frecuencia requerirá mucho más que una instrucción en El AVR. (Incluso una simple adición probablemente requerirá unas pocas docenas de instrucciones).

Si desea emular el Genesis, le recomiendo que busque en su lugar los microcontroladores ARM.

duskwuff -inactive-
fuente
Un par de trampas menores: el 68000 necesita al menos 4 relojes para hacer algo (y la mayoría de las instrucciones toma 8 relojes o más), por lo que un AVR que funciona a 16MHz es ~ 9 veces más rápido (Todavía no lo suficientemente rápido como para emular un 68000 de 7.16MHz en aunque en tiempo real). También el ATmega más grande es el 1284, que tiene 16k de RAM, 128K de ROM y funciona a 20MHz.
Bruce Abbott
2
@BruceAbbott Como se señaló en mi respuesta, el AVR solo puede funcionar en un registro de 8 bits (o, a veces, un par) a la vez, lo que explota el recuento de instrucciones con bastante severidad, sin mencionar la carga de la instrucción, la decodificación, etc. El ATmega1284 tiene un poco más de SRAM, pero no admite memoria externa, por lo que no sirve de nada aquí. Actualicé mi respuesta para reflejar este criterio.
duskwuff -inactive-
¿Sería capaz un microcontrolador Parallax de realizar dicha tarea? ¡Es de 32 bits, puede tener un poco más de RAM y son mucho más rápidos! También están bastante bien para la salida VGA.
Ismael Miguel
@IsmaelMiguel No. Todavía no tiene suficiente RAM (32 KB, y el código se come eso), y la extraña arquitectura Propeller no es adecuada para la emulación.
duskwuff -inactive-
@duskwuff Eso tiene sentido. Sería interesante ver algo poderoso corriendo sobre él. ¿Qué pasa con el uso de una hélice para la salida y salida Y un Arduino para el procesamiento?
Ismael Miguel
11

¿Hay un microcontrolador con 16 MB de RAM?

Si. Sin embargo, el único que conozco es en la familia Renesas SuperH, y no incluye ROM, por lo que debe tener una memoria flash externa, pero tiene 16 MBytes de SRAM integrada.

Estoy buscando escribir un emulador para Sega Megadrive (Sega Genesis) que se ejecuta en AVR.

No hay microcontroladores SRAM de 16 MByte en la familia Atmel AVR. O en cualquier lugar de la línea de productos Atmel.

Sin embargo, varios dispositivos en la línea Atmel AVR tienen una interfaz de bus externo que le permitirá conectar memoria adicional. Específicamente, el ATxmega128A1U puede admitir hasta 16MBytes de SRAM externa.

Así que he estado buscando un microcontrolador que tenga características similares al Motorola 68k que se envió con el MegaDrive.

...

Estoy seguro de que la SRAM moderna no es casi la misma que la que tenía el 68k, pero ¿es posible para mí obtener un micro AVR que coincida con la potencia de un 68k? ¿Estoy mirando mal este problema? ¿Necesito cambiar mi diseño para acomodar micros modernos?

No sé si alguna fuente externa de memoria será lo suficientemente rápida.

Ah, aquí está el problema que tienes.

El procesador 68k (es decir, Motorola 68000) NO es un microcontrolador y NO tiene 16 MBytes de SRAM interna.

Si bien el procesador tiene 32 bits internamente, debido a las limitaciones de los pines, solo puede direccionar hasta 16 MB de memoria externa, incluidos flash, sram y cualquier dispositivo mapeado de memoria.

No necesita un microcontrolador con 16 MBytes de SRAM interno para emular el procesador 68k.

¿Existe un microcontrolador Atmel AVR de 8 bits que pueda emular el procesador Motorolla 68000?

Creo que sí. El ATxmega128A1U tiene un bus de memoria externo tan grande como el bus del procesador 68k, y tiene suficiente memoria flash y RAM que le permitirían ejecutar una versión de microcódigo del procesador 68k.

Puede correr hasta 32MHz, y muchas instrucciones toman un ciclo, pero incluso el peor de los casos toma 5 ciclos en la memoria interna. La interfaz externa es más lenta, pero si elige una memoria rápida, seguirá siendo mucho más rápida que la 68k.

El procesador 68k no solo funciona 4 veces más lento, sino que las operaciones más rápidas que realiza requieren al menos 4 ciclos de reloj, y muchas demoran entre 2 y 4 veces más, en particular los accesos a la memoria.

Entonces, incluso con SRAM lento (según los estándares actuales) (digamos, una parte de 70 MB de 8 MB por menos de $ 10) puede usar 0 estados de espera en el procesador de 32 MHz y ejecutar círculos alrededor de los 68k que se ejecutan a 7 MHz. Por ejemplo, una simple instrucción de movimiento en el 68k que tomaría 4 ciclos a 7.61 MHz toma 525 nS. Una instrucción de movimiento simple similar en el ATxmega128A1U que se ejecuta a 32MHz toma 31nS. Por lo tanto, el AVR podría ejecutar 16 movimientos para cuando el 68K se hiciera con uno. El 68k toma 50 ciclos para algunos tipos de interrupciones, mientras que el AVR salta a la interrupción en 3 ciclos, por lo que el AVR podría manejar un puñado de interrupciones en el tiempo que le toma al 68k simplemente saltar a uno.

Espero que pueda ejecutar el ciclo con precisión con un esfuerzo cuidadoso si acepta alguna fluctuación, aunque es posible que pueda ejecutarlo con precisión de ciclo sin fluctuación si fuera meticuloso. Los procesadores AVR funcionan bien con overclocking moderado, por lo que probablemente podría ejecutarlo a 38.35MHz y tener 5 ciclos AVR por ciclo de reloj de 68k.

Esto no quiere decir que sea fácil, y puede haber algunas instrucciones muy complicadas que tomarían más tiempo en el AVR que de otra manera, pero incluso estas pueden explicarse con un diseño cuidadoso.

¿Puedo emular un Sega Genesis con un Atmel AVR de 8 bits?

No. El Sega Genesis tiene, en esencia, un procesador de 68k, pero también tiene un procesador de sonido (Z80) y un procesador de video que necesitaría significativamente más recursos para emular. En el diagrama a continuación, encontrará el procesador 68k en la esquina superior izquierda; tenga en cuenta que es una pequeña porción de todo lo necesario para emular un sistema Sega Genesis completo.

ingrese la descripción de la imagen aquí

Entonces, si bien podría emular fácilmente el núcleo de 68k del Sega Genesis, no podría ejecutar juegos hechos para el Genesis con solo un microcontrolador AVR. Emular el 68k solo en un chip sería bastante difícil, incluso si simplificaste las cosas, dudo que puedas colocar los tres procesadores en un solo chip AVR de 32MHz.

Sin embargo, probablemente podría emular esos dos chips con dos AVR más. Si apuntaste a una pantalla LCD gráfica más simple que no requiriera tiempos y generación de NTSC extraños, podrías simplificar un poco las cosas e incluso podrías poner ambas funciones en un chip separado.

Sin embargo, este es un gran proyecto, ciertamente no es un proyecto de fin de semana. Si se encuentra en una etapa en la que solo se siente cómodo con las placas de desarrollo Arduino, puede ser interesante crear un simple emulador de procesador 68k y conectar un poco de ROM externa y RAM para acceder a la memoria. El Arduino ATMega no tiene una interfaz de memoria externa, pero puede cambiar las líneas de E / S y emular eso también. Si avanza lo suficiente en el proyecto donde puede emular programas simples de 68k, entonces podría valer la pena deshacerse de Arduino, usar el entorno de desarrollo Atmel y un mejor chip AVR con una interfaz de bus externa, y puede comenzar a leer y ejecutar cartuchos Incluso puede canalizar datos de video y sonido a la computadora e interpretarlos en el procesamiento:

Asegúrese de que sus rutinas de emulación sean portátiles y podrá cambiar a un mejor procesador con la suficiente facilidad como para no quedarse atascado.

Si el simple proyecto Arduino Mega nunca llega muy lejos, no ha desperdiciado muchos recursos en este proyecto. Si te ves obligado a completarlo, pasar a un chip Atmel más capaz no será tan abrumador.

Yo digo que trates. Algo de lo que he dicho y otros han dicho puede parecer que esto es insuperable, pero no dejes que nos interpongamos en tu camino. Siga haciendo preguntas cada vez que se encuentre con un obstáculo y encontrará que la mayoría de los ingenieros disfrutan de un desafío y le brindarán la comprensión y la ayuda que necesita para avanzar por este camino.

La emulación es muy divertida.

Adam Davis
fuente
¿Crees que sería más fácil emular los procesadores de video / sonido con fpga?
baordog
Creo que los desafíos al escribir el emulador se enfrentarán a 68000 instrucciones como: ADD.L (A0) +, D3. Ahora el ATxmega128A1U tiene un formato de direccionamiento similar utilizando los registros X, Y o Z. Esos, por supuesto, son de 16 bits, pero supuestamente el Sega solo usó 72 KB de RAM, por lo que podría funcionar, dependiendo de para qué se usen esos 8 KB adicionales. Se produce un problema porque el AVR tiene tres registros de direcciones y el 68000 tiene ocho. De repente, el registro emulado A0 no se carga en X, Y o Z. Por lo tanto, hay que barajar las cosas. Un registro de dirección probablemente tendrá que estar dedicado a un SP.
tcrosley
El enfoque FPGA se ha realizado con éxito: code.google.com/p/fpgagen
pjc50
@baordog no lo sé. El procesador de sonido es un procesador Z80. No he mirado el procesador de video. Debería investigar un poco más para descubrir qué implica: el procesador de video tiene su propia memoria, pero también generó señales PAL o NTSC complejas. Si integrara una pantalla LCD gráfica, es posible que desaparezca gran parte de la complejidad del procesador de video, pero nuevamente no estoy seguro de cuán complejo es. Estoy seguro de que puede hacerlo en un FPGA, pero es posible que no lo necesite si prefiere los microcontroladores.
Adam Davis
1
@davidcary lo encontró en Digikey pero tampoco lo veo en el sitio web de Renesas. R8J73540BGZV - digikey.com/product-search/…
Adam Davis
6

Ninguna de las otras respuestas ha mencionado que podría obtener un chip que ejecuta el conjunto de instrucciones m86k de forma nativa: la serie Coldfire . Se han eliminado varias instrucciones; si no se usan con demasiada frecuencia, podrían emularse atrapando la interrupción de "instrucción no válida".

Sin embargo, aún necesitaría emular el procesador de video Yamaha YM7101 y el procesador de sonido Yamaha YM2612. Puede intentar crear emulaciones de software en un DSP mucho más rápido o crear una versión FPGA de ellas. Posiblemente basado en emulaciones FPGA existentes de Megadrive.

pjc50
fuente
1

¿Hay un microcontrolador con 16 MB de RAM?

Estoy bastante seguro de que no hay procesadores con 16 MB de RAM en chip.

El "16 MB de RAM" mencionado en algunas descripciones del 68000 alude al bus de direcciones externo de 24 bits que, en teoría, podría abordar un máximo de hasta 2 ^ 24 bytes = 16 MB de RAM externo. Tengo entendido que la gran mayoría de los sistemas que utilizan el 68000 se conectan con menos de 16 MB de RAM externa.

En particular, el Sega Mega Drive (también conocido como Sega Genesis) tiene 72kB de RAM y 64 kB de video RAM. Eso es RAM externa . Ni su Motorola 68000 ni su Zilog Z80 tienen RAM o caché en el chip.

Le sugiero que cree una segunda pregunta independiente con un título que describa lo que realmente quiere saber, pero deje esta pregunta como una pregunta canónica sobre la RAM del microcontrolador para ayudar a las muchas, muchas personas engañadas por "16 MB de RAM" que significa teórico DRAM externa máxima en algunos procesadores, mientras que "2.5 KB RAM" significa SRAM física en chip real incluida en otros procesadores.

(*) Algunos procesadores de muy alta gama producidos después de 2006 tienen 16 MB o más de memoria caché en chip, pero esos procesadores requieren aún más RAM externa, por lo que si realmente necesita 16 MB de RAM, va a necesita 16 MB de RAM externa de una forma u otra.

davidcary
fuente
-3

Puede USAR un CORTEX -M4 de la placa STMF432 ... muy potente con muchas megas de RAM y periféricos

ingrese la descripción de la imagen aquí

TraceKira
fuente
¿Desde cuándo 256 KB de RAM son "muchos megas de ram"?
Nick Alexeev
Y en cualquier caso, el OP era bastante específico de que querían usar un microcontrolador AVR, no ARM.
duskwuff -inactive-