Есть ли микроконтроллер с 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 не будет таким огромным.
Я говорю, попробуй. Некоторые из того, что я сказал, а другие сказали, могут показаться непреодолимыми, но не позволяйте нам мешать вам. Продолжайте задавать вопросы каждый раз, когда вы сталкиваетесь с препятствием, и вы обнаружите, что большинство инженеров справляются с задачей и дадут вам понимание и помощь, необходимые для того, чтобы пройти этот путь далеко.
Эмуляция это очень весело.