Esiste un microcontrollore con 16 MB di RAM?


8

Ecco la mia situazione:

Come progetto personale, sto cercando di scrivere un emulatore per il Sega Megadrive (Sega Genesis) che gira su AVR. Quindi ho cercato un microcontrollore con caratteristiche simili al Motorola 68k fornito con il MegaDrive. Tuttavia, ho notato che le specifiche per il 68k rispetto alla maggior parte dei micro hobbisti. Sto scegliendo AVR al contrario di ARM perché mi piace l'architettura e ho pensato che sarebbe stata una bella sfida.

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

Ecco le specifiche per 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

Questo sembra abbastanza tipico per i micro moderni di fascia bassa. Non vedo mai il montone entrare molto nei mbs.

Ora, sono sicuro che la SRAM moderna non è quasi uguale a quella del 68k, ma è possibile per me ottenere un micro AVR che corrisponda alla potenza di un 68k, sto vedendo questo problema in modo sbagliato? Devo modificare il mio design per adattarsi ai micro moderni?

Non so se alcune fonti esterne di memoria saranno abbastanza veloci.


6
Secondo Wikipedia , la Sega Genesis funzionava a 7,6 MHz e aveva solo 72 KB di RAM, non 16 MB, oltre a 64 KB di memoria video aggiuntiva.
Tcrosley,

2
Utilizzare un processore di applicazioni o un FPGA.
Peter,

11
Inoltre, ti manca completamente il sovraccarico dell'emulazione . Emulare correttamente un SNES (che utilizza una CPU ~ 21 MHz) richiede fedelmente un computer da 3+ GHz (vedi qui ). Come minimo , per emulare una Megadrive / genesi, che utilizza una CPU da 7,6 MHz e 3,58 MHz, è necessario prevedere un dispositivo host da 100+ MHz.
Connor Wolf,

12
Francamente, dovresti davvero scrivere prima l'emulatore, idealmente nel portatile C. Quindi guarda il porting su ARM, quindi cerca di progettare una scheda per l'MCU ARM di tua scelta, una volta che hai alcuni numeri per le prestazioni richieste. Francamente, penso che non ti rendi conto di quanto siano incredibilmente coinvolti emulatori propri e fedeli. Modellare ed emulare correttamente anche le console meno recenti è davvero, davvero difficile, perché nessuno di loro è interamente digitale, hanno tutti un sacco di stranezze analogiche.
Connor Wolf,

3
@ConnorWolf Vale la pena notare: è praticamente impossibile implementare la ricompilazione dinamica su AVR, poiché non è possibile eseguire il codice dalla memoria dei dati. (Puoi memorizzare per programmare la memoria, ma è lento e mangia cicli di flash!)
duskwuff -inattivo-

Risposte:


18

Anche se il Motorola 68000 e il Sega Genesis sono piuttosto vecchi (primi anni '80), non troverai un AVR di fascia bassa (cioè a 8 bit) in grado di emulare l'intera macchina da gioco.

Il Sega Genesis funzionava a 7,61 MHz e aveva 72 KB di RAM (più altri 64 KB di RAM video). Tuttavia, i programmi di gioco risiedevano nella ROM, quindi avrai bisogno di RAM aggiuntiva per conservarli (a meno che tu non abbia intenzione di essere in grado di collegare le cartucce originali in qualche modo). La maggior parte delle cartucce di gioco era inferiore a 4 MB, ma esiste almeno un gioco (Pier Solar, rilasciato nel 2010) con una ROM da 8 MB.

Inoltre, il sistema doveva sicuramente includere una ROM di sistema che fungeva da una sorta di dirigente e avrebbe anche fornito una libreria I / O comune per le cartucce (non riesco a trovare alcun riferimento a quanto fosse grande). Dovrai trovare le ROM (o le immagini ROM) per quelle e copiarle anche nella tua RAM (o aggiungere una sezione di ROM al tuo sistema).

IMO che vorrai utilizzare un microcontrollore a 32 bit. Se hai intenzione di utilizzare le cartucce originali più una ROM di programma e non hai bisogno di MB di RAM, allora puoi usare quasi tutti i microcontrollori a 32 bit che hanno abbastanza spazio per il tuo emulatore. Se stai per scaricare le cartucce e l'immagine della ROM di sistema nella RAM, quindi per ottenere 8 MB o più di RAM, avrai bisogno di un microcontrollore con un bus di memoria esterno (non puoi ottenere 8 MB su lo stesso chip del microcontrollore).

Dato che vuoi rimanere con AVR, suggerisco un processore come l' AT32UC3A3256 , che ha 256 KB di Flash, 128 KB di RAM e funziona a 84 MHz. Il problema è che si tratta di un dispositivo a montaggio superficiale a 144 pin, che sarà difficile da saldare.

Tuttavia , esiste un kit di valutazione per questo processore da Element 14 per soli $ 31,25. Quindi non devi preoccuparti di saldare. Inoltre, la scheda ha 8 MB di RAM esterna, quindi puoi caricare una cartuccia nella RAM.

inserisci qui la descrizione dell'immagine

Per la cronaca , penso ancora che dovresti prendere in considerazione il Raspberry Pi , che funziona a 700 MHz con 512 MB di RAM a un costo leggermente inferiore rispetto al costo della scheda di sviluppo sopra. Funzionando a quella velocità, non avresti problemi con l'emulazione del codice 68000 e l'esecuzione degli I / O alla velocità corretta.

Sia che tu segua il percorso AVR o Raspberry Pi, oltre al 68000 il Sega Genesis includeva anche una Zilog Z80 e diversi chip per scopi speciali, tra cui Yamaha YM2612 e Texas Instruments SN76489A. Lo Z80 è stato usato per controllare il suono e fornire anche retrocompatibilità con il precedente Sega Master System. Il chip Yamaha era un sintetizzatore audio FM e il chip TI era un generatore di suono programmabile (questa macchina aveva molte opzioni audio). C'era anche un Virtual Display Processor (VDP). Probabilmente puoi saltare il suono (il che significa che non devi preoccuparti dei chip Z80 o Yamaha o TI) ma dovrai emulare l'hardware grafico.

Un paio di risorse:

EASy68K - Editor / Assembler / Simulator per il 68000. Open source, quindi dovresti essere in grado di estrarre il codice di simulazione 68K

Cyclone 68000 - emulatore per microprocessore 68000, scritto in assembly ARM a 32 bit. Utile solo se decidi di utilizzare Raspberry Pi

Infine, se non hai già familiarità con il set di istruzioni 68000, pianifica di trascorrere settimane (o più) per diventare un esperto. Gran parte del tuo debug verrà interrotto a livello di emulatore, cercando di capire perché una sezione di codice 68000 nella cartuccia del gioco non viene eseguita correttamente. (Il che significa che probabilmente vorrai essere in grado di impostare una funzione di breakpoint virtuale nel codice della cartuccia.) Avrai anche bisogno di un disassemblatore, quindi non dovrai occuparti del codice della macchina; ecco la fonte per uno .


1
L'avevo considerato, ma voglio limitarmi ad avr.
baordog,

1
@baordog Ho aggiornato la mia risposta con due chip AVR suggeriti.
Tcrosley,

4
Nota che i due processori che hai citato sono entrambi parti AVR32. Questi sono quasi completamente diversi dalle parti dell'architettura AVR con cui l'OP ha familiarità, oltre al fatto che sono entrambi realizzati da Atmel.
duskwuff -inattivo-

2
@duskwuff Non sarà in grado di cavarsela con niente di meno potente di questi, e i processori AVR sono realizzati da Atmel.
Tcrosley,

3
@baordog Modificata di nuovo la mia risposta: ho trovato una scheda di sviluppo con un AVR a 32 bit che include 8 MB di RAM esterna per $ 31.
Tcrosley,

12

Non succederà.

Il più grande microcontrollore della linea ATmega con supporto per la memoria esterna è l'ATmega1284, ma questo ha solo 8 KB di SRAM interna e può indirizzare fino a 64 KB di memoria esterna. Questo non sarà sufficiente per emulare la Genesis, che aveva 72 KB di RAM e altri 64 KB di memoria video. Potrebbe essere possibile implementare l'accesso a memoria aggiuntiva tramite il cambio di banco, ma ciò renderebbe molto costoso l'accesso alla memoria dall'AVR.

Ci sono alcune parti nella linea ATmega con più SRAM interne, come l'ATmega1284 (16 KB), ma queste non supportano affatto la memoria esterna. Per farla breve, indirizzare oltre 64 KB di RAM da un ATmega è piuttosto difficile.

(Non sono sicuro da dove hai ottenuto la cifra di 16 MB. Il 68000 non ha alcuna memoria interna, oltre ai registri; la quantità di memoria su un sistema 68000 può variare in modo drammatico.)

Inoltre, la CPU 68000 nella Genesis funziona a 7,6 MHz. Emulare questo su un AVR a 16 MHz non sarà possibile - mentre la frequenza di clock dell'AVR è un po 'più alta, il 68000 è una CPU a 32 bit, quindi emulare una delle sue istruzioni richiederà spesso molto più di un'istruzione su l'AVR. (Anche una semplice aggiunta richiederà probabilmente alcune decine di istruzioni.)

Se desideri emulare la Genesi, ti consiglio di guardare invece ai microcontrollori ARM.


Un paio di piccoli pignoli: - il 68000 impiega almeno 4 clock per fare qualsiasi cosa (e la maggior parte delle istruzioni richiede 8 clock o più) quindi un AVR che funziona a 16MHz è ~ 9 volte più veloce (ancora non abbastanza veloce da emulare un 68000 in 7.16MHz in tempo reale però). Anche il più grande ATmega è il 1284 - che ha 16k RAM, 128K ROM e funziona a 20MHz.
Bruce Abbott,

2
@BruceAbbott Come notato nella mia risposta, l'AVR può funzionare solo su un registro a 8 bit (o talvolta una coppia) alla volta, il che fa saltare il conteggio delle istruzioni piuttosto gravemente - per non parlare del carico delle istruzioni, della decodifica, ecc. L'ATmega1284 ha leggermente più SRAM, ma non supporta la memoria esterna, quindi non è utile qui. Aggiornato la mia risposta per riflettere questo criterio.
duskwuff -inattivo-

Un microcontrollore Parallax sarebbe in grado di svolgere tale compito? È a 32 bit, potrebbe avere un po 'più di RAM e sono molto più veloci! Sono abbastanza ok anche per l'uscita VGA.
Ismael Miguel,

@IsmaelMiguel No. Ancora poco vicino a RAM sufficiente (32 KB e codice mangia), e la strana architettura dell'elica non è adatta per l'emulazione.
duskwuff -inattivo-

@duskwuff Ha senso. Sarebbe interessante vedere qualcosa di potente correre su di esso. Che dire di usare un'elica per l'output e l'output E un Arduino per l'elaborazione?
Ismael Miguel,

11

Esiste un microcontrollore con 16 MB di RAM?

Sì. L'unico di cui sono a conoscenza, tuttavia, è nella famiglia Renesas SuperH e non include la ROM - quindi devi avere un flash esterno, ma ha 16 MB di memoria SRAM integrata.

Sto cercando di scrivere un emulatore per il Sega Megadrive (Sega Genesis) che gira su AVR.

Non ci sono microcontroller SRAM 16MByte nella famiglia Atmel AVR. O ovunque nella linea di prodotti Atmel.

Tuttavia, diversi dispositivi della gamma Atmel AVR dispongono di un'interfaccia bus esterna che consente di collegare memoria aggiuntiva. In particolare, ATxmega128A1U può supportare fino a 16 MB di SRAM esterna.

Quindi ho cercato un microcontrollore con caratteristiche simili al Motorola 68k fornito con il MegaDrive.

...

Sono sicuro che la SRAM moderna non è quasi la stessa di qualsiasi cosa avesse il 68k, ma è possibile per me ottenere un micro AVR che corrisponda alla potenza di un 68k, sto vedendo questo problema in modo sbagliato? Devo modificare il mio design per adattarsi ai micro moderni?

Non so se alcune fonti esterne di memoria saranno abbastanza veloci.

Ah, ecco il problema che stai riscontrando.

Il processore 68k (ovvero Motorola 68000) NON è un microcontrollore e NON ha 16 MB di SRAM interna.

Mentre il processore è a 32 bit internamente, a causa delle limitazioni dei pin può indirizzare solo fino a 16 MB di memoria esterna, inclusi flash, sram e qualsiasi dispositivo mappato in memoria.

Non è necessario un microcontrollore con 16 MB di SRAM interna per emulare il processore 68k.

Esiste un microcontrollore Atmel AVR a 8 bit in grado di emulare il processore Motorolla 68000?

Credo di si. L'ATxmega128A1U ha un bus di memoria esterno grande quanto il bus del processore 68k e ha un sacco di flash e RAM che gli permetterebbero di eseguire una versione microcodice del processore 68k.

Può funzionare fino a 32 MHz e molte istruzioni richiedono un ciclo, ma anche il caso peggiore richiede 5 cicli nella memoria interna. L'interfaccia esterna è più lenta, ma se scegli la memoria veloce sarà comunque molto più veloce del 68k.

Il processore 68k non solo esegue 4 volte più lentamente, ma le operazioni più veloci ha almeno 4 cicli di clock e molti richiedono 2-4 volte più a lungo, in particolare gli accessi alla memoria.

Quindi, con SRAM anche lenta (secondo gli standard odierni) (diciamo, una parte da 70nS 8MByte per meno di $ 10) puoi usare 0 stati di attesa sul processore a 32MHz ed eseguire cerchi attorno ai 68k che funzionano a 7MHz. Ad esempio, una semplice istruzione di spostamento sul 68k che richiederebbe 4 cicli a 7,61 MHz richiede 525 nS. Un'istruzione di spostamento semplice simile su ATxmega128A1U a 32MHz richiede 31nS. Quindi l'AVR poteva eseguire 16 mosse entro il termine del 68K con una. Il 68k impiega 50 cicli per alcuni tipi di interrupt, mentre l'AVR salta all'interruzione in 3 cicli - così l'AVR potrebbe gestire una manciata di interruzioni nel tempo che impiega il 68k a saltare semplicemente in uno.

Mi aspetto che tu possa eseguire il ciclo in modo accurato con uno sforzo accurato se accetti un po 'di jitter, anche se potresti essere in grado di farlo funzionare in modo perfettamente accurato senza jitter se fossi meticoloso. I processori AVR funzionano bene con un overclock moderato, quindi potresti probabilmente eseguirlo a 38.35MHz e avere 5 cicli AVR per ciclo di clock 68k.

Questo non vuol dire che sarebbe facile, e potrebbero esserci alcune istruzioni molto complicate che richiederebbero più tempo sull'AVR che altrimenti - ma anche queste possono essere spiegate con un'attenta progettazione.

Posso emulare una Sega Genesis con un Atmel 8 bit AVR?

No. Il Sega Genesis ha, al suo cuore, un processore 68k, ma ha anche un processore audio (Z80) e un processore video di cui avresti bisogno di molte più risorse per emulare. Nel diagramma seguente, troverai il processore 68k in alto a sinistra - nota che è una piccola parte di tutto il necessario per emulare un sistema Sega Genesis completo.

inserisci qui la descrizione dell'immagine

Quindi, mentre potresti facilmente emulare il core 68k di Sega Genesis, non saresti in grado di eseguire giochi creati per Genesis con un solo microcontrollore AVR. Emulare il 68k da solo su un chip sarebbe abbastanza difficile, anche se hai semplificato le cose, dubito che potresti adattare tutti e tre i processori in un singolo chip AVR a 32 MHz.

Tuttavia, potresti probabilmente emulare quei due chip con altri due AVR. Se scegli come target un LCD grafico più semplice che non richiedesse strani tempi e generazione NTSC, potresti essere in grado di semplificare un po 'le cose e forse potresti persino mettere entrambe le funzioni su un chip separato.

Questo è un grande progetto, tuttavia, certamente non un fine settimana. Se ti trovi nella fase in cui ti senti a tuo agio con le schede di sviluppo Arduino, potrebbe essere interessante creare un semplice emulatore di processore 68k e collegare una piccola ROM esterna e RAM per gli accessi alla memoria. Arduino ATMega non ha un'interfaccia di memoria esterna, ma puoi modificare le linee I / O ed emularle. Se vai abbastanza avanti nel progetto in cui puoi emulare semplici programmi 68k, allora varrebbe la pena abbandonare Arduino, usando l'ambiente di sviluppo Atmel e un chip AVR migliore con un'interfaccia bus esterna, e puoi iniziare a leggere ed eseguire cartucce. Potresti persino essere in grado di reindirizzare i dati audio e video al computer e interpretarli durante l'elaborazione:

Assicurati che le tue routine di emulazione siano portatili e sarai in grado di passare a un processore migliore abbastanza facilmente da non rimanere bloccato.

Se il semplice progetto Arduino Mega non arriva mai molto lontano, non hai sprecato molte risorse in questo progetto. Se ti trovi spinto a completarlo, passare a un chip Atmel più capace non sarà così travolgente.

Dico di provarlo. Parte di ciò che ho detto e altri hanno detto potrebbe sembrare insormontabile, ma non lasciarci ostacolare. Continuate a porre domande ogni volta che incontrate un ostacolo e scoprirete che la maggior parte degli ingegneri si divertono con una sfida e vi fornirà la comprensione e l'aiuto di cui avete bisogno per percorrere questa strada.

L'emulazione è molto divertente.


Pensi che sarebbe più facile emulare i processori video / audio con FPGA?
baordog,

Penso che le sfide nella scrittura dell'emulatore riguarderanno 68000 istruzioni come: ADD.L (A0) +, D3. Ora ATxmega128A1U ha un formato di indirizzamento simile utilizzando i registri X, Y o Z. Quelli ovviamente sono a 16 bit, ma presumibilmente il Sega usava solo 72 KB di RAM, quindi potrebbe funzionare, a seconda di cosa vengono usati quegli 8 KB in più. Si verifica un problema perché l'AVR ha tre registri di indirizzi e il 68000 ne ha otto. All'improvviso il registro emulato A0 non viene caricato in X, Y o Z. Quindi le cose devono essere mescolate. Un registro di indirizzi dovrà probabilmente essere dedicato a un SP.
Tcrosley,

L'approccio FPGA è stato eseguito correttamente: code.google.com/p/fpgagen
pjc50

@baordog Non lo so. Il processore del suono è un processore Z80. Non ho visto il processore video. Dovresti fare qualche ricerca in più per scoprire cosa è coinvolto: il processore video ha la sua memoria, ma ha anche generato segnali PAL o NTSC complessi. Se dovessi integrare un display LCD grafico, potresti scoprire che molta della complessità del processore video scompare, ma non sono ancora sicuro di quanto sia complesso. Sono certo che puoi farlo in un FPGA, ma potresti non averne bisogno se preferisci i microcontrollori.
Adam Davis,

1
@davidcary lo ha trovato su Digikey ma non lo vede neanche sul sito Web di Renesas. R8J73540BGZV - digikey.com/product-search/…
Adam Davis

6

Nessuna delle altre risposte ha detto che si potrebbe semplicemente ottenere un chip che esegue nativamente le istruzioni m86k: la serie Coldfire . Sono state rimosse alcune istruzioni; se non vengono usati troppo frequentemente potrebbero essere emulati intrappolando l'interrupt "istruzione non valida".

Tuttavia, dovrai comunque emulare il processore video Yamaha YM7101 e il processore audio Yamaha YM2612. Potresti provare a creare emulazioni software in un DSP molto più veloce o crearne una versione FPGA. Forse basato sulle emulazioni FPGA esistenti del Megadrive.


1

Esiste un microcontrollore con 16 MB di RAM?

Sono abbastanza sicuro che non ci siano processori con 16 MB di RAM su chip.

La "16 MB di RAM" menzionata in alcune descrizioni del 68000 allude al bus di indirizzo esterno a 24 bit che potrebbe, in teoria, indirizzare un massimo di 2 ^ 24 byte = 16 MB di RAM esterna. La mia comprensione è che la stragrande maggioranza dei sistemi che utilizzano il 68000 si collegano molto meno di 16 MB di RAM esterna.

In particolare, il Sega Mega Drive (aka Sega Genesis) ha 72kB di RAM e 64 kB di RAM video. Questa è RAM esterna . Né il suo Motorola 68000 né il suo Zilog Z80 hanno RAM o cache su chip.

Ti suggerisco di creare una seconda domanda indipendente con un titolo che descriva ciò che vuoi veramente sapere, ma lascia questa domanda come una domanda canonica sulla RAM del microcontrollore per aiutare molte, molte persone che sono indotte in errore da "16 MB RAM" che significa teorico DRAM esterna massima in alcuni processori, mentre "2,5 KB RAM" significa SRAM fisica effettiva su chip inclusa in altri processori.

(*) Alcuni processori di fascia alta prodotti dopo il 2006 hanno 16 MB o più di memoria cache su chip, ma quei processori richiedono ancora più RAM esterna, quindi se hai davvero bisogno di 16 MB di RAM, stai per sono necessari 16 MB di RAM esterna in un modo o nell'altro.


-3

È possibile USARE un CORTEX -M4 dalla scheda STMF432 ... molto potente con molti mega di RAM e periferiche

inserisci qui la descrizione dell'immagine


Da quando 256 KB di RAM sono "molti mega di ram"?
Nick Alexeev

E in ogni caso, l'OP era piuttosto specifico nel voler utilizzare un microcontrollore AVR, non ARM.
duskwuff -inattivo-
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.