Existe-t-il un microcontrôleur avec 16 Mo de RAM?

8

Voici ma situation:

En tant que projet personnel, je cherche à écrire un émulateur pour le Sega Megadrive (Sega Genesis) qui fonctionne sur AVR. Je cherchais donc un micro-contrôleur ayant des caractéristiques similaires au Motorola 68k livré avec le MegaDrive. Cependant, j'ai remarqué que les spécifications du 68k par rapport à la plupart des micros amateurs. Je choisis AVR par opposition à ARM parce que j'aime l'architecture et j'ai pensé que ce serait un bon défi.

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

Voici les spécifications d'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

Cela semble assez typique pour les micros modernes bas de gamme. Je ne vois jamais le bélier entrer beaucoup dans les mbs.

Maintenant, je suis sûr que la SRAM moderne n'est pas presque la même que celle du 68k, mais est-il possible pour moi d'obtenir un micro AVR qui correspond à la puissance d'un 68k, est-ce que je regarde mal ce problème? Dois-je changer ma conception pour s'adapter aux micros modernes?

Je ne sais pas si une source de mémoire externe sera assez rapide.

baordog
la source
6
Selon Wikipédia , la Sega Genesis fonctionnait à 7,6 MHz et n'avait que 72 Ko de RAM, pas 16 Mo, plus 64 Ko de mémoire vidéo supplémentaire.
tcrosley
2
Utilisez un processeur d'applications ou un FPGA.
Peter
11
De plus, il vous manque complètement les frais généraux de l'émulation . Émuler correctement un SNES (qui utilise un processeur ~ 21 MHz) nécessite fidèlement un ordinateur 3+ GHz (voir ici ). Au minimum , pour émuler un Megadrive / genesis, qui utilise un processeur de 7,6 MHz et 3,58 MHz, vous devez vous attendre à avoir besoin d'un périphérique hôte 100+ MHz.
Connor Wolf
12
Franchement, vous devriez vraiment écrire l'émulateur en premier, idéalement en C. portable. Ensuite, envisagez de le porter sur ARM, puis de concevoir une carte pour le MCU ARM de votre choix, une fois que vous avez quelques chiffres pour les performances requises. Franchement, je pense que vous ne réalisez pas à quel point les émulateurs appropriés et fidèles sont incroyablement impliqués. Bien modéliser et émuler des consoles anciennes, même simples, est vraiment très difficile, car aucune d'entre elles n'est entièrement numérique, elles ont toutes beaucoup de bizarreries analogiques.
Connor Wolf
3
@ConnorWolf À noter: Il est essentiellement impossible d'implémenter une recompilation dynamique sur AVR, car vous ne pouvez pas exécuter de code à partir de la mémoire de données. (Vous pouvez stocker dans la mémoire de programme, mais c'est lent et mange des cycles de flash!)
duskwuff -inactive-

Réponses:

18

Même si le Motorola 68000 et le Sega Genesis sont assez anciens (début des années 1980), vous ne trouverez pas un AVR bas de gamme (c'est-à-dire 8 bits) qui puisse émuler la machine de jeu entière.

La Sega Genesis fonctionnait à 7,61 MHz et avait 72 Ko de RAM (plus 64 Ko de RAM vidéo supplémentaires). Cependant, les programmes de jeu résidaient dans la ROM, vous aurez donc besoin de RAM supplémentaire pour les contenir (sauf si vous prévoyez de pouvoir brancher les cartouches d'origine d'une manière ou d'une autre). La plupart des cartouches de jeu avaient moins de 4 Mo, mais il y a au moins un jeu (Pier Solar, sorti en 2010) qui a une ROM de 8 Mo.

En outre, le système doit certainement avoir inclus une ROM système qui a agi comme une sorte de cadre et aurait également fourni une bibliothèque d'E / S commune pour les cartouches (je ne trouve aucune référence à sa taille). Vous devrez trouver la ROM (ou les images ROM) pour celles-ci et les copier également dans votre RAM (ou ajouter une section de ROM à votre système).

IMO, vous allez vouloir utiliser un microcontrôleur 32 bits. Si vous allez utiliser les cartouches d'origine plus une ROM de programme, et n'avez pas besoin de Mo de RAM, vous pouvez utiliser la plupart des microcontrôleurs 32 bits qui ont suffisamment d'espace pour votre émulateur. Si vous allez télécharger les cartouches et l'image ROM du système dans la RAM, alors pour obtenir 8 Mo ou plus de RAM, vous allez avoir besoin d'un microcontrôleur doté d'un bus de mémoire externe (vous ne pouvez pas obtenir 8 Mo sur la même puce que le microcontrôleur).

Étant donné que vous souhaitez vous en tenir à AVR, je suggère un processeur comme l' AT32UC3A3256 , qui a 256 Ko de Flash, 128 Ko de RAM et fonctionne à 84 MHz. Le problème est qu'il s'agit d'un dispositif de montage en surface à 144 broches, qui sera difficile à souder.

Cependant , il existe un kit d'évaluation pour ce processeur d'Element 14 pour seulement 31,25 $. Vous n'avez donc pas à vous soucier de la soudure. De plus, la carte dispose de 8 Mo de RAM externe, vous pouvez donc charger une cartouche dans la RAM.

entrez la description de l'image ici

Juste pour mémoire , je pense toujours que vous devriez considérer le Raspberry Pi , fonctionnant à 700 MHz avec 512 Mo de RAM pour un peu moins que le coût de la carte de développement ci-dessus. En cours d'exécution à cette vitesse, vous n'auriez aucun problème à émuler le code 68000 et à effectuer des E / S à la bonne vitesse.

Que vous optiez pour la route AVR ou Raspberry Pi, en plus du 68000, la Sega Genesis comprenait également un Zilog Z80 et plusieurs puces à usage spécial, dont le Yamaha YM2612 et le Texas Instruments SN76489A. Le Z80 a été utilisé pour contrôler le son et fournir également une compatibilité descendante avec le système Sega Master antérieur. La puce Yamaha était un synthétiseur de son FM et la puce TI était un générateur de son programmable (cette machine avait beaucoup d'options sonores). Il y avait également un processeur d'affichage virtuel (VDP). Vous pouvez probablement ignorer le son (ce qui signifie que vous n'avez pas à vous soucier du Z80 ou des puces Yamaha ou TI) mais vous devrez émuler le matériel graphique.

Quelques ressources:

EASy68K - Editeur / Assembleur / Simulateur pour le 68000. Open source pour que vous puissiez être en mesure de creuser le code de simulation 68K

Cyclone 68000 - émulateur pour le microprocesseur 68000, écrit en assemblage ARM 32 bits. Utile uniquement si vous décidez d'utiliser le Raspberry Pi

Enfin, si vous n'êtes pas déjà familier avec le jeu d'instructions 68000, prévoyez de passer des semaines (ou plus) pour devenir un expert. Une grande partie de votre débogage se fera au niveau de l'émulateur, essayant de comprendre pourquoi une section de code 68000 dans la cartouche de jeu ne s'exécute pas correctement. (Ce qui signifie que vous voudrez probablement être en mesure de configurer une fonction de point d'arrêt virtuel dans le code de la cartouche.) Vous aurez également besoin d'un démonteur, vous n'aurez donc pas à vous occuper du code machine; voici la source pour un .

tcrosley
la source
1
J'y avais pensé mais je veux me limiter à avr.
baordog
1
@baordog J'ai mis à jour ma réponse avec deux puces AVR suggérées.
tcrosley
4
Notez que les deux processeurs que vous avez mentionnés sont tous deux des composants AVR32. Ceux-ci sont presque complètement différents des parties de l'architecture AVR que l'OP connaît, au-delà du fait qu'ils sont tous deux fabriqués par Atmel.
duskwuff -inactive-
2
@duskwuff Il ne pourra pas se débrouiller avec quoi que ce soit de moins puissant, et les processeurs AVR sont fabriqués par Atmel.
tcrosley
3
@baordog A encore modifié ma réponse - J'ai trouvé une carte de développement avec un AVR 32 bits qui comprend 8 Mo de RAM externe pour 31 $.
tcrosley
12

Ça n'arrivera pas.

Le plus grand microcontrôleur de la gamme ATmega prenant en charge la mémoire externe est l'ATmega1284, mais celui-ci ne dispose que de 8 Ko de mémoire SRAM interne et peut traiter jusqu'à 64 Ko de mémoire externe. Cela ne suffira pas à émuler la Genesis, qui avait 72 Ko de RAM et 64 Ko de mémoire vidéo. Il pourrait être possible d'implémenter l'accès à de la mémoire supplémentaire par le biais d'un changement de banque, mais cela rendrait l'accès à la mémoire à partir de l'AVR très coûteux.

La gamme ATmega comporte certaines parties avec davantage de mémoire SRAM interne, comme l'ATmega1284 (16 Ko), mais celles-ci ne prennent pas du tout en charge la mémoire externe. En résumé, adresser plus de 64 Ko de RAM à partir d'un ATmega est plutôt difficile.

(Je ne sais pas d'où vous avez obtenu le chiffre de 16 Mo. Le 68000 n'a pas de mémoire interne du tout, à part les registres; la quantité de mémoire sur un système 68000 peut varier considérablement.)

De plus, le processeur 68000 de la Genesis fonctionne à 7,6 MHz. Émuler cela sur un AVR 16 MHz ne sera pas possible - alors que la fréquence d'horloge de l'AVR est certes un peu plus élevée, le 68000 est un processeur 32 bits, donc émuler une de ses instructions nécessitera souvent plus d'une instruction sur l'AVR. (Même un simple ajout nécessitera probablement quelques dizaines d'instructions.)

Si vous souhaitez émuler la Genesis, je vous recommande de regarder plutôt les microcontrôleurs ARM.

duskwuff -inactif-
la source
Quelques astuces mineures: - le 68000 prend au moins 4 horloges pour faire quoi que ce soit (et la plupart des instructions prennent 8 horloges ou plus), donc un AVR fonctionnant à 16 MHz est ~ 9 fois plus rapide (toujours pas assez rapide pour émuler un 68000 à 7,16 MHz temps réel cependant). Le plus grand ATmega est également le 1284 - qui a 16k RAM, 128K ROM et fonctionne à 20MHz.
Bruce Abbott
2
@BruceAbbott Comme indiqué dans ma réponse, l'AVR ne peut fonctionner que sur un registre 8 bits (ou parfois une paire) à la fois, ce qui fait exploser le nombre d'instructions assez sévèrement - sans parler de la charge des instructions, du décodage, etc. L'ATmega1284 a un peu plus de SRAM, mais ne prend pas en charge la mémoire externe, donc ce n'est pas utile ici. Mis à jour ma réponse pour refléter ce critère.
duskwuff -inactive-
Un microcontrôleur Parallax serait-il capable d'effectuer une telle tâche? Il est en 32 bits, peut avoir un peu plus de RAM et ils sont beaucoup plus rapides! Ils sont également assez bien pour la sortie VGA.
Ismael Miguel
@IsmaelMiguel Non. Toujours pas assez près de RAM (32 Ko, et le code en mange), et l'architecture étrange de Propeller n'est pas bien adaptée à l'émulation.
duskwuff
@duskwuff Cela a du sens. Il serait intéressant de voir quelque chose de puissant fonctionner dessus. Qu'en est-il de l'utilisation d'une hélice pour la sortie et la sortie ET d'un Arduino pour le traitement?
Ismael Miguel
11

Existe-t-il un microcontrôleur avec 16 Mo de RAM?

Oui. Le seul que je connaisse, cependant, est dans la famille Renesas SuperH, et n'inclut pas la ROM - vous devez donc avoir un flash externe, mais il a 16 Mo de SRAM intégré.

Je cherche à écrire un émulateur pour le Sega Megadrive (Sega Genesis) qui fonctionne sur AVR.

Il n'y a pas de microcontrôleurs SRAM 16 Mo octets dans la famille Atmel AVR. Ou n'importe où dans la gamme de produits Atmel.

Cependant, plusieurs appareils de la gamme Atmel AVR ont une interface de bus externe qui vous permettra de connecter de la mémoire supplémentaire. Plus précisément, l'ATxmega128A1U peut prendre en charge jusqu'à 16 Mo de SRAM externe.

Je cherchais donc un micro-contrôleur ayant des caractéristiques similaires au Motorola 68k livré avec le MegaDrive.

...

Je suis sûr que la SRAM moderne n'est pas presque la même que celle du 68k, mais est-il possible pour moi d'obtenir un micro AVR qui correspond à la puissance d'un 68k, est-ce que je regarde mal ce problème? Dois-je changer ma conception pour s'adapter aux micros modernes?

Je ne sais pas si une source de mémoire externe sera assez rapide.

Ah, voici le problème que vous rencontrez.

Le processeur 68k (c.-à-d. Motorola 68000) N'EST PAS un microcontrôleur et N'A PAS 16 Mo de SRAM interne.

Bien que le processeur soit 32 bits en interne, en raison des limitations de broches, il ne peut traiter que jusqu'à 16 Mo de mémoire externe, y compris le flash, le sram et tout périphérique mappé en mémoire.

Vous n'avez pas besoin d'un microcontrôleur avec 16 Mo de SRAM interne pour émuler le processeur 68k.

Existe-t-il un microcontrôleur Atmel AVR 8 bits qui peut émuler le processeur Motorolla 68000?

Je le pense. L'ATxmega128A1U possède un bus de mémoire externe aussi gros que le bus du processeur 68k, et a beaucoup de flash et de RAM qui lui permettraient d'exécuter une version microcode du processeur 68k.

Il peut fonctionner jusqu'à 32 MHz et de nombreuses instructions prennent un cycle, mais même le pire des cas prend 5 cycles dans la mémoire interne. L'interface externe est plus lente, mais si vous choisissez une mémoire rapide, elle sera toujours beaucoup plus rapide que le 68k.

Le processeur 68k fonctionne non seulement 4 fois plus lentement, mais les opérations les plus rapides qu'il a nécessitent au moins 4 cycles d'horloge, et beaucoup prennent 2 à 4 fois plus longtemps, en particulier les accès à la mémoire.

Ainsi, avec une SRAM encore lente (selon les normes d'aujourd'hui) (disons, une partie de 70 nS à 8 Mo pour moins de 10 $), vous pouvez utiliser 0 état d'attente sur le processeur à 32 MHz et exécuter des cercles autour du 68k à 7 MHz. Par exemple, une simple instruction de déplacement sur le 68k qui prendrait 4 cycles à 7,61 MHz prend 525 nS. Une instruction de déplacement simple similaire sur l'ATxmega128A1U fonctionnant à 32 MHz prend 31 nS. L'AVR pouvait donc exécuter 16 coups au moment où le 68K en avait terminé un. Le 68k prend 50 cycles pour certains types d'interruption, tandis que l'AVR passe à l'interruption en 3 cycles - de sorte que l'AVR pourrait gérer une poignée d'interruptions dans le temps qu'il faut au 68k pour simplement sauter en un.

Je m'attends à ce que vous puissiez l'exécuter avec un cycle précis avec un effort minutieux si vous acceptez une gigue, bien que vous puissiez l'obtenir pour fonctionner parfaitement avec un cycle précis sans gigue si vous étiez méticuleux. Les processeurs AVR fonctionnent bien avec un overclocking modéré, vous pouvez donc probablement le faire fonctionner à 38,35 MHz et avoir 5 cycles AVR par cycle d'horloge de 68k.

Cela ne veut pas dire que ce serait facile, et il peut y avoir quelques instructions très délicates qui prendraient plus de temps sur l'AVR qu'autrement - mais même celles-ci peuvent être prises en compte avec une conception soignée.

Puis-je émuler une Sega Genesis avec un AVR Atmel 8 bits?

Non. Le Sega Genesis a, en son cœur, un processeur 68k, mais il a aussi un processeur de son (Z80) et un processeur vidéo dont vous auriez besoin de beaucoup plus de ressources pour émuler. Dans le diagramme ci-dessous, vous trouverez le processeur 68k dans le coin supérieur gauche - notez qu'il s'agit d'une petite partie de tout ce qui est nécessaire pour émuler un système Sega Genesis complet.

entrez la description de l'image ici

Ainsi, bien que vous puissiez facilement émuler le noyau 68k de la Sega Genesis, vous ne pourriez pas exécuter des jeux conçus pour la Genesis avec le seul microcontrôleur AVR. Émuler le 68k seul sur une puce serait déjà assez difficile - même si vous simplifiez les choses, je doute que vous puissiez intégrer les trois processeurs dans une seule puce AVR 32 MHz.

Cependant, vous pourriez probablement émuler ces deux puces avec deux autres AVR. Si vous visiez un écran LCD graphique plus simple qui ne nécessitait pas de synchronisation et de génération NTSC étranges, vous pourriez peut-être simplifier un peu les choses, et peut-être même mettre les deux fonctions sur une puce distincte.

C'est un énorme projet, cependant, certainement pas un projet de week-end. Si vous êtes au stade où vous n'êtes à l'aise qu'avec les cartes de développement Arduino, il peut être intéressant de créer un émulateur de processeur 68k simple et de connecter un peu de ROM et de RAM externes pour les accès à la mémoire. L'Arduino ATMega n'a pas d'interface de mémoire externe, mais vous pouvez également manipuler les lignes d'E / S et émuler cela. Si vous allez assez loin dans le projet pour émuler de simples programmes 68k, alors il vaut peut-être la peine d'abandonner Arduino, d'utiliser l'environnement de développement Atmel et une meilleure puce AVR avec une interface de bus externe, et vous pouvez commencer à lire et à exécuter cartouches. Vous pourriez même être en mesure de transférer des données vidéo et audio vers l'ordinateur et de les interpréter lors du traitement - c'est ''

Assurez-vous que vos routines d'émulation sont portables et vous pourrez passer à un meilleur processeur assez facilement pour ne pas être coincé.

Si le simple projet Arduino Mega ne va jamais très loin, vous n'avez pas gaspillé beaucoup de ressources sur ce projet. Si vous vous retrouvez déterminé à le terminer, passer à une puce Atmel plus performante ne sera pas si écrasant.

Je dis de l'essayer. Certains de ce que j'ai dit et d'autres l'ont dit peuvent sembler insurmontables, mais ne nous laissons pas vous gêner. Continuez à poser des questions chaque fois que vous rencontrez un obstacle et vous constaterez que la plupart des ingénieurs aiment relever un défi et vous donneront la compréhension et l'aide dont vous avez besoin pour aller loin dans cette voie.

L'émulation est très amusante.

Adam Davis
la source
Pensez-vous qu'il serait plus facile d'émuler les processeurs vidéo / audio avec fpga?
baordog
Je pense que les défis d'écriture de l'émulateur concerneront 68000 instructions comme: ADD.L (A0) +, D3. Désormais, l'ATxmega128A1U a un format d'adressage similaire utilisant les registres X, Y ou Z. Ceux-ci sont bien sûr de 16 bits, mais soi-disant le Sega n'utilisait que 72 Ko de RAM, ce qui pourrait fonctionner, selon l'utilisation de ces 8 Ko supplémentaires. Un problème se produit car l'AVR a trois registres d'adresses et le 68000 en a huit. Tout à coup, le registre émulé A0 n'est pas chargé dans X, Y ou Z. Les choses doivent donc être mélangées. Un registre d'adresses devra probablement être dédié à un SP.
tcrosley
L'approche FPGA a été effectuée avec succès: code.google.com/p/fpgagen
pjc50
@baordog je ne sais pas. Le processeur de son est un processeur Z80. Je n'ai pas regardé le processeur vidéo. Vous devriez faire des recherches supplémentaires pour découvrir ce qui est impliqué - le processeur vidéo a sa propre mémoire, mais il a également généré des signaux PAL ou NTSC complexes. Si vous deviez intégrer un écran LCD graphique, vous constaterez peut-être qu'une grande partie de la complexité du processeur vidéo disparaît - mais encore une fois, je ne suis pas sûr de sa complexité. Je suis certain que vous pouvez le faire dans un FPGA, mais vous n'en aurez peut-être pas besoin si vous préférez les microcontrôleurs.
Adam Davis
1
@davidcary l'a trouvé sur Digikey mais ne le voit pas non plus sur le site Web de Renesas. R8J73540BGZV - digikey.com/product-search/…
Adam Davis
6

Aucune des autres réponses n'a mentionné que vous pourriez simplement obtenir une puce qui exécute le jeu d'instructions m86k en mode natif: la série Coldfire . Un certain nombre d'instructions ont été supprimées; s'ils ne sont pas trop fréquemment utilisés, ils pourraient être émulés en interceptant l'interruption "instruction invalide".

Cependant, vous devez toujours émuler le processeur vidéo Yamaha YM7101 et le processeur audio Yamaha YM2612. Vous pouvez soit essayer de créer des émulations logicielles dans un DSP beaucoup plus rapide, soit en créer une version FPGA. Peut-être basé sur les émulations FPGA existantes du Megadrive.

pjc50
la source
1

Existe-t-il un microcontrôleur avec 16 Mo de RAM?

Je suis sûr qu'il n'y a pas de processeurs avec 16 Mo de RAM sur puce.

Les "16 Mo de RAM" mentionnés dans certaines descriptions du 68000 font allusion au bus d'adresse externe 24 bits qui pourrait, en théorie, adresser un maximum de 2 ^ 24 octets = 16 Mo de RAM externe. Ma compréhension est que la grande majorité des systèmes qui utilisent le 68000 connectent beaucoup moins de 16 Mo de RAM externe.

En particulier, le Sega Mega Drive (alias le Sega Genesis) a 72 Ko de RAM et 64 Ko de RAM vidéo. C'est de la RAM externe . Ni son Motorola 68000 ni son Zilog Z80 n'ont de RAM ou de cache sur puce.

Je vous suggère de créer une deuxième question indépendante avec un titre qui décrit ce que vous voulez vraiment savoir, mais laissez cette question comme une question canonique sur la RAM du microcontrôleur pour aider les nombreuses personnes qui sont trompées par "16 Mo de RAM", ce qui signifie théorique DRAM externe maximale dans certains processeurs, tandis que "2,5 Ko de RAM" signifie SRAM physique réelle sur puce incluse dans d'autres processeurs.

(*) Quelques processeurs très haut de gamme produits après 2006 ont 16 Mo ou plus de mémoire cache sur puce, mais ces processeurs nécessitent encore plus de RAM externe - donc si vous avez vraiment besoin de 16 Mo de RAM, vous allez besoin de 16 Mo de RAM externe d'une manière ou d'une autre.

davidcary
la source
-3

Vous pouvez UTILISER un CORTEX -M4 à partir de la carte STMF432 ... très puissant avec beaucoup de mégaoctets de RAM et de périphériques

entrez la description de l'image ici

TraceKira
la source
Depuis quand 256 Ko de RAM c'est "beaucoup de mégaoctets de RAM"?
Nick Alexeev
Et en tout cas, l'OP était assez précis pour qu'ils voulaient utiliser un microcontrôleur AVR, pas ARM.
duskwuff -inactive-