Apakah ada Mikrokontroler dengan Ram 16MB?

8

Inilah situasi saya:

Sebagai proyek pribadi, saya ingin menulis emulator untuk Sega Megadrive (Sega Genesis) yang berjalan pada AVR. Jadi saya telah mencari Micro-controller yang memiliki karakteristik yang mirip dengan Motorola 68k yang dikirimkan dengan MegaDrive. Namun, saya perhatikan bahwa spesifikasi untuk 68k dibandingkan dengan kebanyakan hobbyist micros. Saya memilih AVR sebagai lawan ARM karena saya suka arsitekturnya, dan saya pikir itu akan menjadi tantangan yang bagus.

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

Berikut ini spesifikasi untuk 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

Ini tampaknya cukup khas untuk mikron modern ujung bawah. Saya tidak pernah melihat domba jantan banyak masuk ke mbs.

Sekarang, saya yakin SRAM modern hampir tidak sama dengan apa pun yang dimiliki 68k, tetapi apakah mungkin bagi saya untuk mendapatkan mikro AVR yang cocok dengan kekuatan 68k, apakah saya melihat masalah ini salah? Apakah saya perlu mengubah desain saya untuk mengakomodasi micros modern?

Saya tidak tahu apakah beberapa sumber memori eksternal akan cukup cepat.

baordog
sumber
6
Menurut Wikipedia , Sega Genesis berlari pada 7,6 MHz dan hanya memiliki 72KB RAM, bukan 16 MB, ditambah 64KB memori video tambahan.
tcrosley
2
Gunakan prosesor aplikasi atau FPGA.
Peter
11
Lebih jauh lagi, Anda benar-benar kehilangan overhead meniru . Benar meniru SNES (yang menggunakan MHz CPU ~ 21) setia memerlukan komputer 3 + GHz (lihat di sini ). Pada minimum , untuk meniru Megadrive / genesis, yang menggunakan 7,6 MHz dan 3,58 MHz CPU, Anda harus berharap untuk memerlukan perangkat host 100 + MHz.
Connor Wolf
12
Terus terang, Anda benar-benar harus menulis emulator terlebih dahulu, idealnya dalam portable C. Kemudian lihat porting ke ARM, dan kemudian lihat merancang papan untuk MCU ARM pilihan Anda, setelah Anda memiliki beberapa angka untuk kinerja yang diperlukan. Terus terang, saya pikir Anda tidak menyadari betapa luar biasanya melibatkan emulator yang tepat dan setia. Benar memodelkan dan meniru bahkan konsol yang lebih tua sederhana benar- benar sulit, karena tidak satupun dari mereka sepenuhnya digital, mereka semua memiliki banyak kebiasaan analog.
Connor Wolf
3
@ConnorWolf Layak dicatat: Pada dasarnya mustahil untuk mengimplementasikan kompilasi dinamis pada AVR, karena Anda tidak dapat menjalankan kode dari memori data. (Anda dapat menyimpan ke memori program, tapi itu lambat dan makan siklus flash!)
Duskwuff -inactive-

Jawaban:

18

Meskipun Motorola 68000 dan Sega Genesis sudah cukup tua (awal 1980-an), Anda tidak akan menemukan AVR low-end (yaitu 8-bit) yang dapat meniru seluruh mesin game.

Sega Genesis berlari pada 7,61 MHz dan memiliki 72KB RAM (ditambah 64KB tambahan RAM video). Akan tetapi, program-program game ada dalam ROM, jadi Anda akan membutuhkan RAM tambahan untuk menahannya (kecuali jika Anda berencana untuk memasukkan kartrid yang asli entah bagaimana). Sebagian besar kartrid gim berada di bawah 4 MB, tetapi setidaknya ada satu gim (Pier Solar, dirilis pada 2010) yang memiliki ROM 8 MB.

Selain itu, sistem pasti harus menyertakan ROM sistem yang bertindak sebagai semacam eksekutif dan juga akan menyediakan perpustakaan I / O umum untuk kartrid (saya tidak dapat menemukan referensi seberapa besar ini). Anda harus menemukan ROM (atau gambar ROM) untuk itu dan menyalinnya juga ke RAM Anda (atau menambahkan bagian ROM ke sistem Anda).

IMO Anda akan ingin menggunakan mikrokontroler 32-bit. Jika Anda akan menggunakan kartrid asli plus ROM program, dan tidak perlu MB RAM, daripada Anda dapat menggunakan sebagian besar mikrokontroler 32-bit yang memiliki cukup ruang untuk emulator Anda. Jika Anda akan mengunduh kartrid dan gambar ROM sistem ke dalam RAM, maka untuk mendapatkan 8 MB atau lebih dari RAM, Anda akan memerlukan mikrokontroler yang memiliki bus memori eksternal (Anda tidak bisa mendapatkan 8 MB pada chip yang sama dengan mikrokontroler).

Mengingat Anda ingin tetap menggunakan AVR, saya sarankan prosesor seperti AT32UC3A3256 , yang memiliki 256 KB Flash, 128 KB RAM, dan berjalan pada 84 MHz. Gotcha adalah bahwa itu adalah perangkat pemasangan 144 pin permukaan, yang akan sulit untuk disolder.

Namun , ada kit evaluasi untuk prosesor ini dari Elemen 14 hanya $ 31,25. Jadi Anda tidak perlu khawatir tentang penyolderan. Plus, board memiliki 8 MB RAM eksternal, sehingga Anda dapat memuat kartrid ke dalam RAM.

masukkan deskripsi gambar di sini

Sebagai catatan , saya masih berpikir Anda harus mempertimbangkan Raspberry Pi , berjalan pada 700 MHz dengan RAM 512 MB untuk sedikit kurang dari biaya papan pengembangan di atas. Berjalan pada kecepatan itu, Anda tidak akan memiliki masalah dengan meniru kode 68000 dan melakukan I / O pada kecepatan yang benar.

Baik Anda menggunakan rute AVR atau Raspberry Pi, selain 68000, Sega Genesis juga menyertakan Zilog Z80 dan beberapa chip tujuan khusus, termasuk Yamaha YM2612 dan Texas Instruments SN76489A. Z80 digunakan untuk mengontrol suara dan juga memberikan kompatibilitas dengan Sistem Master Sega sebelumnya. Chip Yamaha adalah synthesizer suara FM dan chip TI adalah Programmable Sound Generator (mesin ini memiliki banyak pilihan suara). Ada juga Virtual Display Processor (VDP). Anda mungkin dapat melewatkan suara (yang berarti Anda tidak perlu khawatir tentang Z80 atau chip Yamaha atau TI) tetapi Anda harus meniru perangkat keras grafisnya.

Beberapa sumber daya:

EASy68K - Editor / Assembler / Simulator untuk 68000. Sumber terbuka sehingga Anda harus dapat menggali kode simulasi 68K

Cyclone 68000 - emulator untuk mikroprosesor 68000, ditulis dalam unit ARM 32-bit. Hanya berguna jika Anda memutuskan untuk menggunakan Raspberry Pi

Terakhir, jika Anda belum terbiasa dengan set instruksi 68000, rencanakan untuk menghabiskan berminggu-minggu (atau lebih) untuk menjadi seorang ahli. Banyak proses debug Anda akan turun pada level emulator, mencoba mencari tahu mengapa bagian dari 68000 kode dalam cartridge game tidak dieksekusi dengan benar. (Yang berarti Anda mungkin ingin dapat mengatur fasilitas breakpoint virtual dalam kode kartrid.) Anda juga akan memerlukan pembongkar, sehingga Anda tidak perlu berurusan dengan kode mesin; inilah sumbernya .

tcrosley
sumber
1
Saya telah mempertimbangkan hal itu tetapi saya ingin membatasi diri saya untuk avr.
baordog
1
@baordog Saya telah memperbarui jawaban saya dengan dua chip AVR yang disarankan.
tcrosley
4
Perhatikan bahwa kedua prosesor yang Anda sebutkan adalah bagian AVR32. Ini hampir sepenuhnya berbeda dari bagian arsitektur AVR yang dikenal OP, di luar itu keduanya dibuat oleh Atmel.
duskwuff -inactive-
2
@duskwuff Dia tidak akan bisa bertahan dengan apa pun yang kurang kuat dari ini, dan prosesor AVR dibuat oleh Atmel.
tcrosley
3
@baordog Memodifikasi jawaban saya lagi - Saya menemukan papan pengembangan dengan AVR 32-bit yang mencakup 8 MB RAM eksternal sebesar $ 31.
tcrosley
12

Tidak akan terjadi.

Mikrokontroler terbesar di jalur ATmega dengan dukungan memori eksternal adalah ATmega1284, tetapi ini hanya yang memiliki SRAM internal 8 KB, dan dapat mengatasi memori eksternal hingga 64 KB. Ini tidak akan cukup untuk meniru Kejadian, yang memiliki 72 KB RAM dan 64 KB memori video. Mungkin dimungkinkan untuk menerapkan akses ke memori tambahan melalui transfer bank, tetapi ini akan membuat mengakses memori dari AVR menjadi sangat mahal.

Ada beberapa bagian dalam jajaran ATmega dengan SRAM yang lebih internal, seperti ATmega1284 (16 KB), tetapi ini tidak mendukung memori eksternal sama sekali. Ceritanya panjang, pendek, menangani lebih dari 64 KB RAM dari ATmega agak sulit.

(Saya tidak yakin dari mana Anda mendapatkan angka 16 MB. 68000 tidak memiliki memori internal sama sekali, selain register; jumlah memori pada sistem 68000 dapat bervariasi secara dramatis.)

Selain itu, CPU 68000 dalam Genesis berjalan pada 7,6 MHz. Meniru ini pada AVR 16 MHz tidak akan mungkin - sementara laju clock AVR diakui sedikit lebih tinggi, 68000 adalah CPU 32-bit, sehingga meniru salah satu instruksinya akan sering membutuhkan lebih dari satu instruksi pada AVR. (Bahkan penambahan sederhana mungkin membutuhkan beberapa lusin instruksi.)

Jika Anda ingin meniru Kejadian, saya sarankan Anda melihat mikrokontroler ARM.

duskwuff -inactive-
sumber
Beberapa nitpicks minor: - 68000 membutuhkan setidaknya 4 jam untuk melakukan apa saja (dan sebagian besar instruksi membutuhkan 8 jam atau lebih) sehingga AVR yang berjalan pada 16MHz ~ 9 kali lebih cepat (Masih tidak cukup cepat untuk mengemulasi 7.16MHz 68000 dalam waktu sebenarnya). Juga ATmega terbesar adalah 1284 - yang memiliki 16k RAM, 128K ROM, dan berjalan pada 20MHz.
Bruce Abbott
2
@BruceAbbott Seperti disebutkan dalam jawaban saya, AVR hanya dapat beroperasi pada satu register 8-bit (atau kadang-kadang sepasang) sekaligus, yang meledakkan jumlah instruksi dengan cukup parah - belum lagi beban instruksi, decode, dll. ATmega1284 memiliki sedikit lebih SRAM, tetapi tidak mendukung memori eksternal, jadi tidak ada gunanya di sini. Memperbarui jawaban saya untuk mencerminkan kriteria ini.
duskwuff -inactive-
Apakah micro-controller Parallax dapat melakukan tugas seperti itu? Ini 32-bit, mungkin memiliki sedikit lebih banyak RAM dan mereka jauh lebih cepat! Mereka cukup ok untuk output VGA juga.
Ismael Miguel
@IsmaelMiguel No. Masih tidak ada cukup RAM (32 KB, dan kode memakan itu), dan arsitektur Propeller aneh tidak cocok untuk emulasi.
duskwuff -inactive-
@duskwuff Itu masuk akal. Akan menarik melihat sesuatu yang kuat berjalan di atasnya. Bagaimana dengan menggunakan Propeller untuk output dan output DAN sebuah Arduino untuk diproses?
Ismael Miguel
11

Apakah ada Mikrokontroler dengan Ram 16MB?

Iya. Satu-satunya yang saya ketahui, adalah di keluarga SuperHes Renesas, dan tidak termasuk ROM - jadi Anda harus memiliki flash eksternal, tetapi memiliki 16MBytes SRAM onboard.

Saya mencari untuk menulis emulator untuk Sega Megadrive (Sega Genesis) yang berjalan pada AVR.

Tidak ada mikrokontroler SRAM 16MByte dalam keluarga Atmel AVR. Atau di mana saja di lini produk Atmel.

Namun, beberapa perangkat di jajaran Atmel AVR memiliki Antarmuka Bus Eksternal yang akan memungkinkan Anda untuk menghubungkan memori tambahan. Secara khusus, ATxmega128A1U dapat mendukung hingga 16MBytes SRAM eksternal.

Jadi saya telah mencari Micro-controller yang memiliki karakteristik yang mirip dengan Motorola 68k yang dikirimkan dengan MegaDrive.

...

Saya yakin SRAM modern hampir tidak sama dengan apa pun yang dimiliki 68k, tetapi apakah mungkin bagi saya untuk mendapatkan AVR mikro yang cocok dengan kekuatan 68k, apakah saya melihat masalah ini salah? Apakah saya perlu mengubah desain saya untuk mengakomodasi micros modern?

Saya tidak tahu apakah beberapa sumber memori eksternal akan cukup cepat.

Ah, ini masalahnya.

Prosesor 68k (yaitu, Motorola 68000) BUKAN mikrokontroler dan TIDAK memiliki SRAM internal 16MB.

Sementara prosesor 32 bit secara internal, karena keterbatasan pin itu hanya dapat menangani hingga 16MB memori eksternal, termasuk flash, sram, dan perangkat yang dipetakan memori.

Anda tidak memerlukan mikrokontroler dengan 16MB SRAM internal untuk meniru prosesor 68k.

Apakah ada mikrokontroler Atmel AVR 8-bit yang dapat meniru prosesor Motorolla 68000?

Aku pikir begitu. ATxmega128A1U memiliki bus memori eksternal sebesar bus prosesor 68k, dan memiliki banyak flash dan RAM yang memungkinkannya menjalankan versi mikrokode dari prosesor 68k.

Ini dapat berjalan hingga 32MHz, dan banyak instruksi mengambil satu siklus, tetapi bahkan kasus terburuk membutuhkan 5 siklus dalam memori internal. Antarmuka eksternal lebih lambat, tetapi jika Anda memilih memori cepat itu masih akan jauh lebih cepat daripada 68k.

Prosesor 68k tidak hanya berjalan 4 kali lebih lambat, tetapi operasi tercepat yang dibutuhkan setidaknya 4 siklus jam, dan banyak yang memakan waktu 2-4 kali lebih lama, terutama akses memori.

Jadi dengan SRAM yang bahkan lambat (menurut standar saat ini) (katakanlah, bagian 70nS 8MByte untuk di bawah $ 10) Anda dapat menggunakan status tunggu 0 pada prosesor 32MHz dan menjalankan lingkaran di sekitar 68k yang berjalan di 7MHz. Misalnya, instruksi langkah sederhana pada 68k yang akan mengambil 4 siklus pada 7,61 MHz membutuhkan 525 nS. Instruksi langkah sederhana yang serupa pada ATxmega128A1U yang berjalan pada 32MHz membutuhkan 31nS. Jadi AVR dapat melakukan 16 gerakan pada saat 68K dilakukan dengan satu. 68k membutuhkan 50 siklus untuk beberapa tipe interupsi, sementara AVR melompat ke interupsi dalam 3 siklus - sehingga AVR dapat menangani beberapa interupsi dalam waktu yang dibutuhkan 68k untuk hanya melompat menjadi satu.

Saya berharap Anda bisa menjalankannya dengan siklus akurat dengan upaya hati-hati jika Anda menerima beberapa jitter, meskipun Anda mungkin bisa membuatnya berjalan dengan sempurna siklus akurat tanpa jitter jika Anda teliti. Prosesor AVR berjalan dengan baik dengan overclocking moderat, sehingga Anda mungkin dapat menjalankannya pada 38,35MHz dan memiliki 5 siklus AVR per siklus clock 68k.

Ini bukan untuk mengatakan itu akan mudah, dan mungkin ada beberapa instruksi yang sangat rumit yang akan memakan waktu lebih lama pada AVR daripada yang lain - tetapi bahkan ini dapat dipertanggungjawabkan dengan desain yang cermat.

Bisakah saya meniru Sega Genesis dengan Atmel 8 bit AVR?

Tidak. The Sega Genesis memiliki, pada intinya, prosesor 68k, tetapi juga memiliki prosesor suara (Z80) dan prosesor video yang Anda perlukan sumber daya yang jauh lebih besar untuk ditiru. Pada diagram di bawah ini, Anda akan menemukan prosesor 68k di kiri atas - perhatikan bahwa itu adalah sebagian kecil dari semua yang diperlukan untuk meniru sistem Sega Genesis penuh.

masukkan deskripsi gambar di sini

Jadi, sementara Anda bisa dengan mudah meniru inti 68k dari Sega Genesis, Anda tidak akan dapat menjalankan game yang dibuat untuk Genesis hanya dengan satu mikrokontroler AVR. Meniru 68k sendirian pada satu chip akan cukup sulit - bahkan jika Anda menyederhanakan hal-hal saya ragu Anda bisa memasukkan ketiga prosesor ke dalam chip AVR 32MHz tunggal.

Namun, Anda mungkin bisa meniru kedua chip tersebut dengan dua AVR lagi. Jika Anda menargetkan LCD grafis sederhana yang tidak memerlukan pengaturan waktu dan generasi NTSC yang aneh, Anda mungkin dapat menyederhanakan hal-hal sedikit, dan mungkin bahkan dapat menempatkan kedua fungsi ke dalam satu chip terpisah.

Ini adalah proyek besar, tentu saja, bukan proyek akhir pekan. Jika Anda berada pada tahap di mana Anda hanya merasa nyaman dengan papan pengembangan Arduino, maka mungkin menarik untuk membuat emulator prosesor 68k sederhana dan menghubungkan sedikit ROM eksternal dan RAM untuk akses memori. Arduino ATMega tidak memiliki antarmuka memori eksternal, tetapi Anda dapat mengubah jalur I / O dan mengemulasi itu juga. Jika Anda cukup jauh dalam proyek di mana Anda dapat meniru program 68k sederhana, maka mungkin layak membuang arduino, menggunakan lingkungan pengembangan Atmel, dan chip AVR yang lebih baik dengan antarmuka bus eksternal, dan Anda dapat mulai membaca dan mengeksekusi kartrid. Anda bahkan mungkin dapat menyalurkan data video dan suara ke komputer dan menafsirkannya dalam pemrosesan - itu '

Pastikan rutinitas emulasi Anda portabel dan Anda dapat dengan mudah beralih ke prosesor yang lebih baik sehingga Anda tidak akan terjebak.

Jika proyek Arduino Mega yang sederhana tidak pernah berjalan terlalu jauh, Anda belum membuang banyak sumber daya untuk proyek ini. Jika Anda merasa terdorong untuk menyelesaikannya, pindah ke chip Atmel yang lebih mampu tidak akan terlalu berlebihan.

Saya katakan mencobanya. Beberapa dari apa yang saya katakan dan yang lain katakan mungkin tampak seperti ini tidak dapat diatasi, tetapi jangan biarkan kami menghalangi jalan Anda. Terus ajukan pertanyaan setiap kali Anda mengalami hambatan dan Anda akan menemukan bahwa sebagian besar insinyur menikmati tantangan dan akan memberi Anda pemahaman dan bantuan yang Anda butuhkan untuk menempuh jalan ini.

Emulasi sangat menyenangkan.

Adam Davis
sumber
Apakah Anda pikir akan lebih mudah untuk meniru prosesor video / suara dengan FPGA?
baordog
Saya pikir tantangan menulis emulator akan berurusan dengan 68.000 instruksi seperti: ADD.L (A0) +, D3. Sekarang ATxmega128A1U memiliki format pengalamatan yang serupa menggunakan register X, Y, atau Z. Itu tentu saja 16-bit, tetapi konon Sega hanya menggunakan 72 KB RAM, sehingga mungkin bekerja, tergantung pada apa yang digunakan untuk tambahan 8 KB. Masalah terjadi karena AVR memiliki tiga register alamat, dan 68000 memiliki delapan register. Tiba-tiba register A0 yang diemulasikan tidak dimuat ke X, Y atau Z. Jadi semuanya harus dikocok. Satu register alamat mungkin perlu didedikasikan untuk SP.
tcrosley
Pendekatan FPGA telah berhasil dilakukan: code.google.com/p/fpgagen
pjc50
@baordog saya tidak tahu. Prosesor suara adalah prosesor Z80. Saya belum melihat prosesor video. Anda harus melakukan riset lebih lanjut untuk mencari tahu apa yang terlibat - prosesor video memiliki memori sendiri, tetapi juga menghasilkan sinyal PAL atau NTSC yang kompleks. Jika Anda mengintegrasikan layar LCD grafis, Anda mungkin menemukan bahwa banyak kerumitan prosesor video hilang - tetapi sekali lagi saya tidak yakin seberapa kompleksnya. Saya yakin Anda dapat melakukannya dalam FPGA, tetapi Anda mungkin tidak perlu melakukannya jika Anda lebih suka mikrokontroler.
Adam Davis
1
@davidcary menemukannya di Digikey tetapi tidak melihatnya di situs web Renesas juga. R8J73540BGZV - digikey.com/product-search/…
Adam Davis
6

Tidak ada jawaban lain yang menyebutkan bahwa Anda hanya bisa mendapatkan chip yang menjalankan set instruksi m86k secara native: seri Coldfire . Sejumlah instruksi telah dihapus; jika mereka tidak terlalu sering digunakan mereka dapat ditiru dengan menjebak interupsi "instruksi tidak valid".

Namun, Anda masih harus meniru prosesor video Yamaha YM7101 dan prosesor suara Yamaha YM2612. Anda bisa mencoba membangun emulasi perangkat lunak dalam DSP yang jauh lebih cepat, atau membangun versi FPGA mereka. Mungkin berdasarkan pada emulasi FPGA dari Megadrive.

pjc50
sumber
1

Apakah ada Mikrokontroler dengan Ram 16MB?

Saya cukup yakin tidak ada prosesor dengan 16 MB RAM on-chip.

"16 MB RAM" yang disebutkan dalam beberapa deskripsi dari 68000 menyinggung bus alamat eksternal 24-bit yang, secara teori, dapat mengatasi maksimum hingga 2 ^ 24 byte = 16 MB RAM eksternal. Pemahaman saya adalah bahwa sebagian besar sistem yang menggunakan 68000 menghubungkan jauh lebih sedikit dari 16 MB RAM eksternal.

Secara khusus, Sega Mega Drive (alias Sega Genesis) memiliki 72kB RAM dan 64 kB video RAM. Itu adalah RAM eksternal . Baik Motorola 68000 atau Zilog Z80 memiliki RAM on-chip atau tembolok.

Saya sarankan Anda membuat pertanyaan independen kedua dengan judul yang menggambarkan apa yang benar-benar ingin Anda ketahui, tetapi tinggalkan pertanyaan ini sebagai pertanyaan kanonik tentang mikrokontroler RAM untuk membantu banyak orang yang menyesatkan "16 MB RAM" yang berarti teoretis. DRAM eksternal maksimum pada beberapa prosesor, sementara "2.5 KB RAM" berarti SRAM on-chip fisik aktual yang termasuk dalam prosesor lainnya.

(*) Beberapa prosesor yang sangat canggih yang diproduksi setelah 2006 memiliki 16 MB atau lebih memori cache on-chip, tetapi prosesor tersebut membutuhkan lebih banyak RAM eksternal - jadi jika Anda benar-benar membutuhkan 16 MB RAM, Anda akan membutuhkan 16 MB RAM eksternal dengan satu atau lain cara.

davidcary
sumber
-3

Anda dapat MENGGUNAKAN CORTEX -M4 dari papan STMF432 ... sangat kuat dengan banyak MB RAM dan periferal lainnya

masukkan deskripsi gambar di sini

TraceKira
sumber
Sejak kapan 256 KB RAM "banyak MB ram"?
Nick Alexeev
Dan dalam hal apa pun, OP cukup spesifik sehingga mereka ingin menggunakan mikrokontroler AVR, bukan ARM.
duskwuff -inactive-