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チップへの移行はそれほど圧倒的ではありません。
私はそれを試してみると言います。私が言ったことと他の人が言ったことの一部はこれを克服することができないように思えるかもしれませんが、私たちがあなたの邪魔をさせないようにしてください。障害に遭遇するたびに質問を続けてください。そうすれば、ほとんどのエンジニアが挑戦を楽しみ、理解を深め、この道をはるかに下る必要があることに気付くでしょう。
エミュレーションはとても楽しいです。