Есть ли микроконтроллер с 16 МБ оперативной памяти?

8

Вот моя ситуация:

В качестве личного проекта я хочу написать эмулятор для Sega Megadrive (Sega Genesis), который работает на AVR. Поэтому я искал Микроконтроллер, который имеет характеристики, аналогичные Motorola 68k, который поставляется с MegaDrive. Тем не менее, я заметил, что спецификации для 68k по сравнению с большинством микро любителей. Я выбираю AVR, а не ARM, потому что мне нравится архитектура, и я подумал, что это будет хорошим испытанием.

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

Это кажется довольно типичным для более низких современных микро. Я никогда не видел, чтобы баран сильно проник в мбс.

Теперь я уверен, что современная SRAM не такая же, как у 68k, но могу ли я получить AVR micro, который соответствует мощности 68k, я смотрю на эту проблему неправильно? Нужно ли менять дизайн, чтобы приспособить его к современным микросхемам?

Я не знаю, будет ли какой-нибудь внешний источник памяти достаточно быстрым.

baordog
источник
6
Согласно Википедии , Sega Genesis работала на частоте 7,6 МГц и имела только 72 КБ ОЗУ, а не 16 МБ, плюс 64 КБ дополнительной видеопамяти.
tcrosley
2
Используйте процессор приложений или ПЛИС.
Питер
11
Кроме того, вы полностью пропускаете накладные расходы на эмуляцию . Для правильной эмуляции SNES (которая использует процессор ~ 21 МГц) действительно требуется компьютер с тактовой частотой 3 ГГц (см. Здесь ). Как минимум , для эмуляции Megadrive / genesis, который использует 7,6 МГц и 3,58 МГц ЦП, вы должны ожидать хост-устройство 100+ МГц.
Коннор Вольф,
12
Честно говоря, вам действительно следует сначала написать эмулятор, в идеале - на переносимом C. Затем посмотрите на его перенос на ARM, а затем на разработку платы для выбранного вами ARM MCU, как только у вас появятся цифры для требуемой производительности. Честно говоря, я думаю, вы не понимаете, насколько удивительны правильные, верные эмуляторы. Правильно моделировать и эмулировать даже простые старые консоли действительно очень сложно, потому что ни одна из них не является полностью цифровой, у всех есть много аналоговых особенностей.
Коннор Вольф,
3
@ConnorWolf Стоит отметить: по сути невозможно реализовать динамическую перекомпиляцию на AVR, так как вы не можете запустить код из памяти данных. (Вы можете сохранить в памяти программы, но это медленно и съедает циклы вспышки!)
duskwuff -inactive-

Ответы:

18

Несмотря на то, что Motorola 68000 и Sega Genesis довольно старые (начало 1980-х), вы не найдете низкоуровневую (то есть 8-битную) AVR, которая может подражать всей игровой машине.

Sega Genesis работала на частоте 7,61 МГц и имела 72 КБ ОЗУ (плюс дополнительные 64 КБ видеопамяти). Однако игровые программы находятся в ПЗУ, поэтому вам потребуется дополнительная оперативная память для их хранения (если только вы не планируете каким-либо образом подключить оригинальные картриджи). У большинства игровых картриджей было менее 4 МБ, но есть по крайней мере одна игра (Pier Solar, выпущенная в 2010 году) с 8 МБ ПЗУ.

Кроме того, система, безусловно, должна была включать системное ПЗУ, которое выполняло роль некоего исполнительного органа, а также обеспечивало бы общую библиотеку ввода-вывода для картриджей (я не могу найти никаких ссылок на то, насколько большим это было). Вам нужно будет найти для них ПЗУ (или образы ПЗУ) и скопировать их в свою ОЗУ (или добавить раздел ПЗУ в свою систему).

ИМО, вы собираетесь использовать 32-разрядный микроконтроллер. Если вы собираетесь использовать оригинальные картриджи с программным ПЗУ и не нуждаетесь в МБ ОЗУ, вы можете использовать большинство 32-разрядных микроконтроллеров, в которых достаточно места для эмулятора. Если вы собираетесь загружать картриджи и образ системного ПЗУ в ОЗУ, то для получения 8 МБ или более ОЗУ вам потребуется микроконтроллер с внешней шиной памяти (вы не можете получить 8 МБ на тот же чип, что и микроконтроллер).

Учитывая, что вы хотите использовать AVR, я предлагаю процессор, подобный AT32UC3A3256 , который имеет 256 КБ флэш-памяти, 128 КБ ОЗУ и работает на частоте 84 МГц. Дело в том, что это 144-контактное устройство для поверхностного монтажа, которое будет трудно спаять.

Тем не менее , есть оценочный комплект для этого процессора от Element 14 всего за $ 31,25. Так что вам не нужно беспокоиться о пайке. Кроме того, плата имеет 8 МБ внешней памяти, поэтому вы можете загрузить картридж в оперативную память.

введите описание изображения здесь

Просто для записи , я все еще думаю, что вы должны рассмотреть Raspberry Pi , работающий на частоте 700 МГц с 512 МБ ОЗУ, что немного меньше, чем стоимость платы разработки выше. Работая с такой скоростью, у вас не возникнет проблем с эмуляцией кода 68000 и выполнением операций ввода-вывода с правильной скоростью.

Идете ли вы по маршруту AVR или Raspberry Pi, в дополнение к 68000 Sega Genesis также включает в себя Zilog Z80 и несколько чипов специального назначения, включая Yamaha YM2612 и Texas Instruments SN76489A. Z80 использовался для управления звуком, а также для обеспечения обратной совместимости с более ранней Sega Master System. Чип Yamaha был синтезатором звука FM, а чип TI - программируемым генератором звука (у этой машины было много вариантов звука). Был также процессор виртуального дисплея (VDP). Вы, вероятно, можете пропустить звук (что означает, что вам не нужно беспокоиться о Z80, чипах Yamaha или TI), но вам придется эмулировать графическое оборудование.

Пара ресурсов:

EASy68K - Редактор / Ассемблер / Симулятор для 68000. Открытый исходный код, чтобы вы могли найти код симуляции 68K

Cyclone 68000 - эмулятор для микропроцессора 68000, написанный в ARM 32-битной сборке. Полезно только если вы решили использовать Raspberry Pi

Наконец, если вы еще не знакомы с набором инструкций 68000, запланируйте потратить недели (или больше), чтобы стать экспертом. Большая часть вашей отладки будет недоступна на уровне эмулятора, пытаясь выяснить, почему часть кода 68000 в игровом картридже не выполняется должным образом. (Это означает, что вы, вероятно, захотите настроить виртуальную точку останова в коде картриджа.) Вам также понадобится дизассемблер, поэтому вам не придется иметь дело с машинным кодом; вот источник для одного .

tcrosley
источник
1
Я думал об этом, но я хочу ограничить себя авр.
baordog
1
@baordog Я обновил свой ответ двумя предлагаемыми чипами AVR.
Тросли
4
Обратите внимание, что оба упомянутых вами процессора являются частями AVR32. Они почти полностью отличаются от частей архитектуры AVR, с которыми знаком OP, кроме того, что оба они сделаны Atmel.
сумерки -неактив-
2
@duskwuff Он не сможет обойтись ничем менее мощным, чем эти, и процессоры AVR сделаны Atmel.
Тросли
3
@baordog Изменил мой ответ еще раз - я нашел плату для разработки с 32-разрядным AVR, который включает в себя 8 МБ внешней памяти за 31 доллар.
Тросли
12

Не произойдет.

Самым крупным микроконтроллером в линейке ATmega с поддержкой внешней памяти является ATmega1284, но он имеет только 8 КБ внутренней SRAM и может адресовать до 64 КБ внешней памяти. Этого будет недостаточно для эмуляции Genesis с 72 КБ ОЗУ и еще 64 КБ видеопамяти. Можно было бы реализовать доступ к дополнительной памяти через переключение банков, но это сделало бы доступ к памяти из AVR очень дорогостоящим.

В линейке ATmega есть несколько частей с большей внутренней SRAM, например ATmega1284 (16 КБ), но они вообще не поддерживают внешнюю память. Короче говоря, обращение к более чем 64 КБ оперативной памяти от ATmega довольно сложно.

(Я не уверен, откуда вы взяли цифру в 16 МБ. У 68000 вообще нет никакой внутренней памяти, кроме регистров; объем памяти в системе 68000 может сильно различаться.)

Кроме того, процессор 68000 в Genesis работает на 7,6 МГц. Эмуляция этого на 16 МГц AVR не будет возможна - хотя тактовая частота AVR предположительно немного выше, 68000 - это 32-битный ЦП, поэтому для эмуляции одной из его инструкций часто требуется гораздо больше, чем одна инструкция на AVR. (Даже простое дополнение, вероятно, потребует нескольких десятков инструкций.)

Если вы хотите подражать Genesis, я бы посоветовал вам взглянуть на микроконтроллеры ARM.

сумеречный
источник
Несколько мелких неприятностей: - 68000 требует по крайней мере 4 такта, чтобы что-то сделать (и большинство инструкций занимает 8 тактов или более), поэтому AVR, работающий на 16 МГц, работает в ~ 9 раз быстрее (все еще недостаточно быстр, чтобы эмулировать 6800 МГц на 7,16 МГц). хотя в реальном времени). Также самой большой ATmega является 1284 - которая имеет 16 КБ ОЗУ, 128 КБ ПЗУ и работает на частоте 20 МГц.
Брюс Эбботт
2
@BruceAbbott Как отмечалось в моем ответе, AVR может работать только с одним 8-битным регистром (или иногда с парой) одновременно, что значительно увеличивает количество команд - не говоря уже о загрузке команд, декодировании и т. Д. ATmega1284 имеет немного больше SRAM, но не поддерживает внешнюю память, поэтому здесь нет смысла. Обновил мой ответ, чтобы отразить этот критерий.
сумерки -неактив-
Сможет ли микроконтроллер Parallax справиться с такой задачей? Это 32-битный, может иметь немного больше оперативной памяти, и они намного быстрее! Они достаточно хороши для вывода VGA.
Исмаэль Мигель
@IsmaelMiguel Нет. До сих пор недостаточно оперативной памяти (32 КБ, и в нее входит код), и странная архитектура Propeller не очень подходит для эмуляции.
сумерки -неактив-
@ Duskwuff Это имеет смысл. Было бы интересно увидеть что-то мощное, работающее на нем. Как насчет использования Propeller для вывода и вывода И Arduino для обработки?
Исмаэль Мигель
11

Есть ли микроконтроллер с 16 МБ оперативной памяти?

Да. Единственный, о котором я знаю, относится к семейству Renesas SuperH и не включает в себя ПЗУ - поэтому вам нужно иметь внешнюю флэш-память, но она имеет 16 МБ встроенной SRAM.

Я ищу написать эмулятор для Sega Megadrive (Sega Genesis), который работает на AVR.

В семействе Atmel AVR нет микроконтроллеров SRAM 16MByte. Или в любом месте в линейке продуктов Atmel.

Однако некоторые устройства в линейке Atmel AVR имеют интерфейс внешней шины, который позволяет подключать дополнительную память. В частности, ATxmega128A1U может поддерживать до 16 МБ внешней SRAM.

Поэтому я искал Микроконтроллер, который имеет характеристики, аналогичные Motorola 68k, который поставляется с MegaDrive.

...

Я уверен, что современная SRAM не почти такая же, как у 68k, но могу ли я получить AVR micro, который соответствует мощности 68k, я смотрю на эту проблему неправильно? Нужно ли менять дизайн, чтобы приспособить его к современным микросхемам?

Я не знаю, будет ли какой-нибудь внешний источник памяти достаточно быстрым.

Ах, вот какая у тебя проблема.

Процессор 68k (то есть Motorola 68000) НЕ является микроконтроллером и НЕ имеет 16 МБ внутренней SRAM.

Внутренний процессор имеет 32 бита, из-за ограничений выводов он может адресовать только до 16 МБ внешней памяти, включая флэш-память, sram и любые устройства, отображаемые в памяти.

Вам не нужен микроконтроллер с 16 МБ внутренней SRAM для эмуляции процессора 68 КБ.

Существует ли 8-разрядный микроконтроллер Atmel AVR, который может эмулировать процессор Motorolla 68000?

Я думаю так. ATxmega128A1U имеет шину внешней памяти размером с шину процессора 68k, а также имеет много флэш-памяти и ОЗУ, что позволяет ему запускать версию микрокода процессора 68k.

Он может работать на частоте до 32 МГц, и многие инструкции занимают один цикл, но даже в наихудшем случае внутренняя память занимает 5 циклов. Внешний интерфейс медленнее, но если вы выберете быструю память, он все равно будет намного быстрее, чем 68k.

Процессор 68k не только работает в 4 раза медленнее, но и для самых быстрых операций он занимает не менее 4 тактов, а многие из них занимают в 2-4 раза больше, особенно доступ к памяти.

Таким образом, даже с медленной (по сегодняшним меркам) SRAM (скажем, 70-мегабайтной 8-мегабайтной частью менее чем за 10 долларов) вы можете использовать 0 состояний ожидания на 32-мегагерцовом процессоре и бегать по кругу 68 тыс. С тактовой частотой 7 МГц. Например, простая инструкция перемещения на 68k, которая будет занимать 4 цикла на 7,61 МГц, занимает 525 нс. Аналогичная простая инструкция перемещения на ATxmega128A1U, работающем на частоте 32 МГц, занимает 31 нс. Таким образом, AVR мог выполнить 16 ходов к тому времени, когда 68K был сделан с одним. 68k берет 50 циклов для некоторых типов прерываний, в то время как AVR переходит к прерыванию за 3 цикла - таким образом, AVR может обрабатывать несколько прерываний в то время, когда 68k просто переходит в одно.

Я ожидаю, что вы могли бы выполнить его точный цикл с осторожным усилием, если вы принимаете какой-то джиттер, хотя вы могли бы сделать так, чтобы он работал с точным циклом без дрожания, если вы были дотошными. Процессоры AVR работают нормально с умеренным разгоном, так что вы, вероятно, можете запустить его на частоте 38,35 МГц и иметь 5 циклов AVR на такт 68k.

Это не означает, что это будет легко, и может быть несколько очень хитрых инструкций, которые потребуют больше времени на AVR, чем в противном случае - но даже это можно объяснить с осторожным дизайном.

Могу ли я эмулировать Sega Genesis с 8-битным AVR Atmel?

Нет. В основе Sega Genesis лежит процессор 68k, но также есть звуковой процессор (Z80) и видеопроцессор, для которого вам потребуется значительно больше ресурсов для эмуляции. На диаграмме ниже вы увидите процессор 68k в левом верхнем углу - обратите внимание, что это одна небольшая часть всего, что необходимо для эмуляции полноценной системы Sega Genesis.

введите описание изображения здесь

Поэтому, хотя вы могли бы легко эмулировать ядро ​​68k Sega Genesis, вы не сможете запускать игры, созданные для Genesis, только с одним микроконтроллером AVR. Эмулировать только 68k на одном чипе было бы достаточно сложно - даже если вы упростили вещи, я сомневаюсь, что вы сможете разместить все три процессора в одном чипе AVR 32 МГц.

Тем не менее, вы, вероятно, могли бы эмулировать эти два чипа еще двумя AVR. Если вы выбрали более простой графический ЖК-дисплей, для которого не требовались странные временные и временные характеристики NTSC, вы могли бы немного упростить задачу и, возможно, даже поместить обе функции в один отдельный чип.

Это огромный проект, хотя, конечно, не проект выходного дня. Если вы находитесь на этапе, когда вам удобны только платы разработки Arduino, то может быть интересно создать простой эмулятор процессора 68k и подключить немного внешнего ПЗУ и ОЗУ для доступа к памяти. Arduino ATMega не имеет интерфейса внешней памяти, но вы можете переключать линии ввода-вывода и эмулировать их. Если вы достаточно далеко продвинулись в проекте, где вы можете эмулировать простые программы 68k, то, возможно, стоит отказаться от Arduino, используя среду разработки Atmel, и более качественный чип AVR с интерфейсом внешней шины, и вы можете начать читать и выполнять картриджи. Возможно, вы даже сможете передавать видео и звуковые данные на компьютер и интерпретировать их при обработке.

Убедитесь, что ваши процедуры эмуляции являются переносимыми, и вы сможете достаточно легко переключиться на лучший процессор, чтобы не застрять.

Если простой проект Arduino Mega никогда не заходит слишком далеко, вы не потратили впустую много ресурсов на этот проект. Если вы столкнетесь с необходимостью завершить его, переход на более способный чип Atmel не будет таким огромным.

Я говорю, попробуй. Некоторые из того, что я сказал, а другие сказали, могут показаться непреодолимыми, но не позволяйте нам мешать вам. Продолжайте задавать вопросы каждый раз, когда вы сталкиваетесь с препятствием, и вы обнаружите, что большинство инженеров справляются с задачей и дадут вам понимание и помощь, необходимые для того, чтобы пройти этот путь далеко.

Эмуляция это очень весело.

Адам Дэвис
источник
Как вы думаете, было бы проще эмулировать видео / звуковые процессоры с помощью fpga?
baordog
Я думаю, что проблемы написания эмулятора будут касаться 68000 инструкций, таких как: ADD.L (A0) +, D3. Теперь ATxmega128A1U имеет аналогичный формат адресации с использованием регистров X, Y или Z. Они, конечно, 16-битные, но предположительно Sega использовала только 72 КБ ОЗУ, так что это может сработать, в зависимости от того, для чего используются эти дополнительные 8 КБ. Проблема возникает, потому что AVR имеет три адресных регистра, а 68000 имеет восемь. Внезапно эмулируемый регистр A0 не загружается в X, Y или Z. Таким образом, все должно быть перемешано. Один адресный регистр, вероятно, должен быть выделен для SP.
tcrosley
Подход FPGA был успешно реализован: code.google.com/p/fpgagen
pjc50,
@baordog Я не знаю. Звуковой процессор представляет собой процессор Z80. Я не смотрел на видео процессор. Вы должны сделать еще несколько исследований, чтобы выяснить, что в этом участвует - видеопроцессор имеет собственную память, но он также генерирует сложные сигналы PAL или NTSC. Если бы вы интегрировали графический ЖК-дисплей, вы можете обнаружить, что большая часть сложности видеопроцессора уходит, но опять же я не уверен, насколько он сложен. Я уверен, что вы можете сделать это в FPGA, но вам может не понадобиться, если вы предпочитаете микроконтроллеры.
Адам Дэвис
1
@davidcary нашел его на Digikey, но не увидел и на веб-сайте Renesas. R8J73540BGZV - digikey.com/product-search/…
Адам Дэвис
6

Ни в одном из других ответов не упоминалось, что вы могли бы просто получить микросхему, которая изначально выполняет набор инструкций m86k: серия Coldfire . Ряд инструкций был удален; если они используются не слишком часто, их можно эмулировать, перехватывая прерывание «неверная инструкция».

Однако вам все равно придется эмулировать видеопроцессор Yamaha YM7101 и звуковой процессор Yamaha YM2612. Вы можете либо попытаться создать программную эмуляцию в гораздо более быстром DSP, либо создать их FPGA-версию. Возможно, на основе существующих эмуляций FPGA Megadrive.

pjc50
источник
1

Есть ли микроконтроллер с 16 МБ оперативной памяти?

Я уверен, что нет процессоров с 16 МБ встроенной оперативной памяти.

«16 МБ ОЗУ», упомянутое в некоторых описаниях 68000, ссылается на 24-разрядную шину внешних адресов, которая теоретически может адресовать максимум до 2 24 байт = 16 МБ внешней ОЗУ. Насколько я понимаю, подавляющее большинство систем, использующих 68000, подключают гораздо меньше 16 МБ внешней памяти.

В частности, Sega Mega Drive (он же Sega Genesis) имеет 72 КБ ОЗУ и 64 КБ видеопамяти. Это внешняя RAM. Ни у Motorola 68000, ни у Zilog Z80 нет ни встроенной оперативной памяти, ни кеша.

Я предлагаю вам создать второй, независимый вопрос с заголовком, который описывает то, что вы действительно хотите знать, но оставьте этот вопрос как канонический вопрос об оперативной памяти микроконтроллера, чтобы помочь многим, многим людям, которые вводят в заблуждение «16 МБ ОЗУ», что означает теоретический максимальное внешнее ОЗУ в некоторых процессорах, тогда как «2,5 КБ ОЗУ» означает реальную физическую встроенную ОЗУ, встроенную в другие процессоры.

(*) Некоторые процессоры очень высокого класса, выпущенные после 2006 года, имеют 16 МБ или более встроенной кэш-памяти, но эти процессоры требуют еще больше внешней ОЗУ - поэтому, если вам действительно нужно 16 МБ ОЗУ, вы собираетесь нужно 16 МБ внешней оперативной памяти, так или иначе.

davidcary
источник
-3

Вы можете использовать CORTEX -M4 с платы STMF432 ... очень мощный, с большим количеством оперативной памяти и периферийных устройств

введите описание изображения здесь

TraceKira
источник
С каких пор 256 КБ ОЗУ - это "много мегабайт оперативной памяти"?
Ник Алексеев
И в любом случае OP был довольно конкретным, потому что они хотели использовать микроконтроллер AVR, а не ARM.
сумерки -неактивно-