16MBのRAMを搭載したマイクロコントローラはありますか?


8

これが私の状況です:

個人的なプロジェクトとして、AVRで動作するSega Megadrive(Sega Genesis)のエミュレーターを書きたいと思っています。そのため、MegaDriveに同梱されているMotorola 68kと同様の特性を持つマイクロコントローラーを探していました。ただし、68kの仕様がほとんどの趣味のマイクロと比較されていることに気づきました。ARMではなくAVRを選択しているのは、アーキテクチャが好きで、それが良い挑戦になると思ったからです。

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

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

これは、ローエンドの最新マイクロではかなり典型的です。ラムがmbに多く入るのを見たことがない。

今、私は現代のSRAMが68kが持っていたものとほとんど同じではないと確信していますが、68kのパワーと一致するAVRマイクロを入手することは可能ですか?この問題を間違って見ていますか?最新のマイクロに対応するためにデザインを変更する必要がありますか?

メモリの外部ソースが十分に高速かどうかはわかりません。


6
ウィキペディアよると、セガジェネシスは7.6 MHzで動作し、RAMは72 KBで16 MBではなく、64 KBの追加のビデオメモリしかありませんでした。
tcrosley

2
アプリケーションプロセッサまたはFPGAを使用します。
Peter

11
さらに、エミュレートのオーバーヘッドが完全になくなります。SNES(〜21 MHzのCPUを使用)を適切にエミュレートするには、3 GHz以上のコンピューターが必要ですここを参照)。で最小、7.6 MHzおよび3.58 MHzのCPUを使用していますメガドライブ/ジェネシスをエミュレートするために、あなたは100 + MHzのホストデバイスを必要とすることを期待すべきです。
コナーウルフ2015

12
率直に言って、あなたは本当に理想的なポータブルC.で、最初のエミュレータを書くべきその後 ARMへの移植を見て、その後、あなたが必要なパフォーマンスのためのいくつかの数字を持っていたら、お好みのARM MCU用基板の設計を見てください。率直に言って、あなたは適切で忠実なエミュレーターがどれほど驚くほど複雑に関係しているのか理解していないと思います。単純な古いコンソールでさえも適切にモデル化してエミュレートすることは、完全にデジタルであるというわけではなく、すべてにアナログの癖がたくさんあるため、本当に非常に困難です。
コナーウルフ2015

3
@ConnorWolf注目に値する:データメモリからコードを実行できないため、AVRに動的再コンパイルを実装することは本質的に不可能です。(プログラムメモリに保存することはできますが、それは遅く、フラッシュサイクルを
消費し

回答:


18

Motorola 68000とSega Genesisはかなり古く(1980年代初頭)、ゲーム機全体をエミュレートできるローエンド(つまり8ビット)AVRを見つけることはできません。

Sega Genesisは7.61 MHzで動作し、72KBのRAM(さらに64KBのビデオRAM)が搭載されていました。ただし、ゲームプログラムはROMに常駐していたため、それらを保持するために追加のRAMが必要になります(元のカートリッジを何らかの方法で接続できるようにする予定がない場合)。ほとんどのゲームカートリッジは4 MB未満でしたが、8 MBのROMを持つゲーム(Pier Solar、2010年にリリース)が少なくとも1つあります。

さらに、システムには確かに、何らかのエグゼクティブとして機能するシステムROMが含まれている必要があり、カートリッジに共通のI / Oライブラリーも提供されているはずです(これがどれほど大きいかはわかりません)。それらのROM(またはROMイメージ)を見つけてRAMにコピーする(またはシステムにROMのセクションを追加する)必要があります。

32ビットマイクロコントローラーを使用するIMO。元のカートリッジとプログラムROMを使用し、MBのRAMを必要としない場合は、エミュレーターに十分なスペースがある32ビットマイクロコントローラーのほとんどを使用できます。カートリッジとシステムROMイメージをRAMにダウンロードする場合、8 MB以上のRAMを取得するには、外部メモリバスを備えたマイクロコントローラーが必要になります(8 MBを取得することはできません)マイクロコントローラと同じチップ)。

AVRを使い続けたい場合は、AT32UC3A3256のような、256 KBのフラッシュと128 KBのRAMを備え、84 MHzで動作するプロセッサをお勧めします。問題は、144ピンの表面実装デバイスであるため、はんだ付けが困難になることです。

ただし、このプロセッサの評価キットはElement 14からわずか31.25ドルです。はんだ付けの心配はありません。さらに、ボードには8 MBの外部RAMが搭載されているため、カートリッジをRAMにロードできます。

ここに画像の説明を入力してください

参考までに、Raspberry Piを700 MHzで実行し、512 MBのRAMを搭載し、上記の開発ボードのコストよりも少し安い額を検討する必要があると私は考えています。その速度で実行すると、68000コードをエミュレートして正しい速度でI / Oを実行しても問題はありません。

AVRでもRaspberry Piでも、セガジェネシスには68000の他に、Zilog Z80と、Yamaha YM2612やTexas Instruments SN76489Aなどの特殊用途向けチップがいくつか含まれていました。Z80はサウンドを制御するために使用され、以前のセガマスターシステムとの下位互換性も提供しました。ヤマハチップはFMサウンドシンセサイザーであり、TIチップはプログラマブルサウンドジェネレーターでした(このマシンには多くのサウンドオプションがありました)。Virtual Display Processor(VDP)もありました。おそらくサウンドをスキップできます(つまり、Z80やYamahaやTIのチップを気にする必要はありません)。ただし、グラフィックハードウェアをエミュレートする必要があります。

いくつかのリソース:

EASy68K - 68000用のエディター/アセンブラー/シミュレーター。オープンソースなので、68Kシミュレーションコードを掘り出すことができます。

Cyclone 68000 -ARM 32ビットアセンブリで記述された68000マイクロプロセッサ用のエミュレータ。Raspberry Piを使用する場合にのみ役立ちます

最後に、68000の命令セットにまだ慣れていない場合は、エキスパートになるまでに数週間(またはそれ以上)を費やすことを計画してください。デバッグの多くはエミュレータレベルでダウンし、ゲームカートリッジの68000コードのセクションが正しく実行されない理由を解明しようとします。(これは、カートリッジコードで仮想ブレークポイント機能を設定できるようにする必要があることを意味します。)逆アセンブラも必要になるため、マシンコードを処理する必要はありません。これが1つソースです


1
私はそれを検討しましたが、自分をavrに制限したいと思います。
baordog

1
@baordog 2つの推奨AVRチップで回答を更新しました。
tcrosley

4
あなたが言及した2つのプロセッサはどちらもAVR32パーツであることに注意してください。これらは、OPが使い慣れているAVRアーキテクチャパーツとはほぼ完全に異なりますが、それらは両方ともAtmelによって作成されています。
duskwuff -inactive- 2015

2
@duskwuff彼はこれらよりも強力でないものでうまくいくことができないだろう、そしてAVRプロセッサはAtmelによって作られている。
tcrosley

3
@baordogが私の回答を再度変更しました-32 MB AVRを備えた開発ボードを見つけました。これには8 MBの外部RAMが31ドルで含まれています。
tcrosley

12

起こりません。

外部メモリをサポートするATmegaラインで最大のマイクロコントローラはATmega1284ですが、これは8 KBの内部SRAMを備え、最大64 KBの外部メモリをアドレス指定できます。これは、72 KBのRAM 別の64 KBのビデオメモリを備えたGenesisをエミュレートするには十分ではありません。バンク切り替えを介して追加のメモリへのアクセスを実装することは可能かもしれませんが、これはAVRからのメモリへのアクセスを非常に高価にします。

ATmega1284(16 KB)のように、より多くの内部SRAMを持つATmegaラインにいくつかの部分がありますが、これらは外部メモリをまったくサポートしていません。要するに、ATmegaから64 KBを超えるRAMをアドレス指定することはかなり困難です。

(16 MBの数値がどこから得られたのかわかりません。68000には、レジスタ以外に内部メモリがまったくありません。68000システムのメモリ容量は、劇的に変化する可能性があります。)

さらに、Genesisの68000 CPUは7.6 MHzで動作します。16 MHz AVRでこれをエミュレートすることはできなくなります-AVRのクロックレートは確かに少し高いですが、68000は32ビットCPUであるため、その命令の1つをエミュレートすると、多くの場合、複数の命令が必要になりますAVR。(単純な追加でも、数十の指示が必要になる可能性があります。)

Genesisをエミュレートする場合は、代わりにARMマイクロコントローラーを確認することをお勧めします。


マイナーニッチのカップル:-68000は何かを行うのに少なくとも4クロックかかります(ほとんどの命令は8クロック以上かかります)。したがって、16MHzで実行されているAVRは〜9倍高速です(7.16MHz 68000をエミュレートするのに十分な速度ではありません)。リアルタイムでも)。また、最大のATmegaは1284で、16k RAM、128K ROMを備え、20MHzで動作します。
Bruce Abbott

2
@BruceAbbott私の回答で述べたように、AVRは一度に1つの8ビットレジスタ(または場合によってはペア)でのみ動作でき、命令のロードやデコードなどは言うまでもなく、命令カウントを大幅に増大させます。ATmega1284はSRAMがわずかに多くなりますが、外部メモリをサポートしないため、ここでは使用しません。この基準を反映するように私の回答を更新しました。
duskwuff -inactive- 2015

パララックスのマイクロコントローラーはそのようなタスクを引き出すことができますか?これは32ビットで、RAMが少し多いかもしれませんが、はるかに高速です!それらはVGA出力にもかなり問題ありません。
Ismael Miguel

@IsmaelMiguelいいえ。それでも十分なRAM(32 KB、およびコードがそれに食い込む)に近いところはどこにもありません。奇妙なPropellerアーキテクチャはエミュレーションにあまり適していません。
duskwuff -inactive- 2015

@duskwuffそれは理にかなっています。何か強力なものが実行されているのを見るのは興味深いでしょう。出力にPropellerを使用し、処理にArduinoを使用するのはどうですか?
Ismael Miguel

11

16MBのRAMを搭載したマイクロコントローラはありますか?

はい。ただし、私が知っているのはルネサスのSuperHファミリだけで、ROMが含まれていないため、外部フラッシュが必要ですが、16MバイトのオンボードSRAMが搭載されています。

AVRで動作するSega Megadrive(Sega Genesis)のエミュレーターを書こうと思っています。

Atmel AVRファミリーには16MByte SRAMマイクロコントローラーはありません。または、Atmel製品ラインのどこでも。

ただし、Atmel AVRラインナップのいくつかのデバイスには、追加のメモリを接続できる外部バスインターフェイスがあります。具体的には、ATxmega128A1Uは最大16Mバイトの外部SRAMをサポートできます。

そのため、MegaDriveに同梱されているMotorola 68kと同様の特性を持つマイクロコントローラーを探していました。

...

最近のSRAMは68kとほとんど同じではないと確信していますが、68kのパワーと一致するAVRマイクロを入手することは可能ですか?この問題を間違って見ていますか?最新のマイクロに対応するためにデザインを変更する必要がありますか?

メモリの外部ソースが十分に高速かどうかはわかりません。

ああ、ここにあなたが抱えている問題があります。

68kプロセッサ(Motorola 68000など)はマイクロコントローラではなく、16Mバイトの内部SRAMはありません。

プロセッサは内部的に32ビットですが、ピンの制限により、フラッシュ、sram、およびメモリマップされたデバイスを含む最大16MBytesの外部メモリしかアドレス指定できません。

68kプロセッサをエミュレートするために16Mバイトの内部SRAMを備えたマイクロコントローラーは必要ありません。

Motorolla 68000プロセッサをエミュレートできるAtmel AVR 8ビットマイクロコントローラーはありますか?

私はそう思う。ATxmega128A1Uには、68kプロセッサのバスと同じ大きさの外部メモリバスがあり、68kプロセッサのマイクロコードバージョンを実行できるフラッシュとRAMがたくさんあります。

最大32MHzで実行でき、多くの命令は1サイクルかかりますが、最悪の場合でも内部メモリで5サイクルかかります。外部インターフェイスは低速ですが、高速メモリを選択すると、68kよりもはるかに高速になります。

68kプロセッサは4倍の速度で動作するだけでなく、最低4クロックサイクルかかり、多くの場合、特にメモリアクセスに2〜4倍の時間がかかります。

したがって、遅い(現在の標準では)SRAM(たとえば、70nS 8MByteの部品が$ 10未満)でも、32MHzプロセッサで0の待機状態を使用し、7MHzで実行されている68kの周りを一周できます。たとえば、7.61 MHzで4サイクルかかる68kの単純な移動命令では、525 nSかかります。32MHzで動作するATxmega128A1Uでの同様の単純な移動命令は31nSかかります。したがって、AVRは68Kが1で完了するまでに16の動きを実行できました。いくつかの割り込みタイプでは68kが50サイクルかかりますが、AVRは3サイクルで割り込みにジャンプします。したがって、AVRは68kが1つにジャンプするのにかかる時間内にいくつかの割り込みを処理できます。

細心の注意を払えば、ジッターがなくても完全にサイクルアキュレートで実行できる可能性がありますが、ジッターを受け入れれば、注意深く努力してサイクルアキュレートで実行できると思います。AVRプロセッサは中程度のオーバークロックで問題なく動作するため、おそらく38.35MHzで実行し、68kクロックサイクルあたり5つのAVRサイクルを持つことができます。

これは簡単だと言っているのではなく、AVRで他の方法よりも時間がかかる非常にトリッキーな命令がいくつかあるかもしれません-しかし、これらも注意深い設計で説明できます。

Atmel 8ビットAVRでSega Genesisをエミュレートできますか?

いいえ。セガジェネシスの中心には68kプロセッサが搭載されていますが、サウンドプロセッサ(Z80)とビデオプロセッサも搭載されているため、エミュレートするにはかなり多くのリソースが必要になります。下の図では、68kプロセッサが左上にあります。これは、完全なSega Genesisシステムをエミュレートするために必要なすべての小さな部分です。

ここに画像の説明を入力してください

したがって、セガジェネシスの68kコアをすぐにエミュレートすることはできますが、ジェネシス用に作られたゲームを1つのAVRマイクロコントローラーだけで実行することはできません。68kだけを1つのチップでエミュレートするのは十分に困難です。単純化したとしても、3つのプロセッサすべてを1つの32MHz AVRチップに収めることはできないと思います。

ただし、おそらく2つのチップを2つのAVRでエミュレートできます。奇妙なNTSCタイミングと生成を必要としない、よりシンプルなグラフィックLCDをターゲットにした場合は、少し単純化でき、両方の機能を1つの個別のチップに配置することもできます。

これは巨大なプロジェクトですが、週末のプロジェクトではありません。Arduino開発ボードだけに慣れている段階にいる場合は、シンプルな68kプロセッサーエミュレーターを作成し、メモリアクセス用に小さな外部ROMとRAMを接続するのが興味深いかもしれません。Arduino ATMegaには外部メモリインターフェイスはありませんが、I / Oラインをいじったり、同様にエミュレートしたりできます。プロジェクトで単純な68kプログラムをエミュレートできるところまで十分に進んでいる場合は、Atmel開発環境を使用してarduinoを破棄し、外部バスインターフェイスを備えたより優れたAVRチップを使用して、読み取りと実行を開始できます。カートリッジ。ビデオとサウンドのデータをコンピューターにパイプして、処理中にそれらを解釈することさえできるかもしれません-それは

エミュレーションルーチンが移植可能であることを確認してください。そうすれば、スタックすることがなくなるほど簡単に、より優れたプロセッサに切り替えることができます。

単純なArduino Megaプロジェクトがそれほど遠くない場合、このプロジェクトで多くのリソースを浪費していません。あなたが自分でそれを完成させようとしているのに気づいたら、より有能なAtmelチップへの移行はそれほど圧倒的ではありません。

私はそれを試してみると言います。私が言ったことと他の人が言ったことの一部はこれを克服することができないように思えるかもしれませんが、私たちがあなたの邪魔をさせないようにしてください。障害に遭遇するたびに質問を続けてください。そうすれば、ほとんどのエンジニアが挑戦を楽しみ、理解を深め、この道をはるかに下る必要があることに気付くでしょう。

エミュレーションはとても楽しいです。


fpgaでビデオ/サウンドプロセッサをエミュレートする方が簡単だと思いますか?
baordog 2015

エミュレータを作成する際の課題は、ADD.L(A0)+、D3のような68000命令を処理することになると思います。これで、ATxmega128A1Uは、X、Y、またはZレジスタを使用した同様のアドレッシングフォーマットになります。もちろんそれらは16ビットですが、セガはおそらく72 KBのRAMしか使用していなかったので、余分な8 KBが何に使用されているかによっては、うまくいくかもしれません。AVRには3つのアドレスレジスタがあり、68000には8つのアドレスレジスタがあるため、問題が発生します。突然、エミュレートされたレジスタA0がX、Y、またはZにロードされなくなりました。そのため、状況を変更する必要があります。1つのアドレスレジスタをSP専用にする必要があります。
tcrosley 2015

FPGAアプローチは正常に行われました:code.google.com/p/fpgagen
pjc50

@baordogわからない。サウンドプロセッサはZ80プロセッサです。私はビデオプロセッサを見ていません。ビデオプロセッサには独自のメモリがありますが、複雑なPALまたはNTSC信号も生成されます。グラフィカルLCDディスプレイを統合すると、ビデオプロセッサの複雑さの多くが解消される場合がありますが、どれほど複雑かはわかりません。FPGAでそれを実行できると確信していますが、マイクロコントローラを好む場合は必要ないかもしれません。
Adam Davis、

1
@davidcaryはDigikeyでそれを見つけましたが、ルネサスのWebサイトでも見ていません。R8J73540BGZV - digikey.com/product-search/...
アダムデービス

6

他の回答では、m86k命令セットをネイティブで実行するチップ、つまりColdfireシリーズを入手できるとは述べていません。多くの指示が削除されました。それらがあまり頻繁に使用されない場合、「無効な命令」割り込みをトラップすることによってエミュレートできます。

ただし、Yamaha YM7101ビデオプロセッサとYamaha YM2612サウンドプロセッサをエミュレートする必要があります。より高速なDSPでソフトウェアエミュレーションを構築するか、それらのFPGAバージョンを構築することができます。おそらく、メガドライブの既存のFPGAエミュレーションに基づいています。


1

16MBのRAMを搭載したマイクロコントローラはありますか?

16 MBのオンチップRAMを搭載したプロセッサはないと確信しています。

68000のいくつかの説明で言及されている「16 MB RAM」は、理論的には最大2 ^ 24バイトまでアドレスできる24ビットの外部アドレスバスを示唆しています= 16 MBの外部RAM。私の理解では、68000を使用するシステムの大部分は、16 MBの外部RAMをはるかに下回って接続します。

特に、Sega Mega Drive(別名Sega Genesis)には、72kBのRAMと64kBのビデオRAMがあります。それが外部 RAMです。そのどちらモトローラ68000もそのザイログZ80は、任意のオンチップRAMまたはキャッシュを持っています。

あなたが本当に知りたいことを説明するタイトルを付けた2つ目の独立した質問を作成することをお勧めしますが、この質問はマイクロコントローラーRAMに関する正規の質問として残し、理論上の意味である「16 MB RAM」で誤解される多くの人々を助けます。一部のプロセッサでは最大外部DRAM、「2.5 KB RAM」は他のプロセッサに含まれる実際の物理オンチップSRAMを意味します。

(*)2006年以降に製造されたいくつかの非常にハイエンドなプロセッサには16 MB以上のオンチップキャッシュメモリが搭載されていますが、これらのプロセッサにはさらに多くの外部RAMが必要です。そのため、実際に16 MBのRAMが必要な場合は、何らかの方法で16 MBの外部RAMが必要です。


-3

STMF432ボードのCORTEX -M4を使用できます...非常に強力なRAMとペリフェラルがたくさんあります

ここに画像の説明を入力してください


256 KBのRAMが「大量のRAM」である場合
Nick Alexeev

そしていずれにせよ、OPはARMではなくAVRマイクロコントローラーを使用したいとかなり具体的でした。
duskwuff -inactive- 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.