Вот моя ситуация:
В качестве личного проекта я хочу написать эмулятор для 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, я смотрю на эту проблему неправильно? Нужно ли менять дизайн, чтобы приспособить его к современным микросхемам?
Я не знаю, будет ли какой-нибудь внешний источник памяти достаточно быстрым.
Ответы:
Несмотря на то, что 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 в игровом картридже не выполняется должным образом. (Это означает, что вы, вероятно, захотите настроить виртуальную точку останова в коде картриджа.) Вам также понадобится дизассемблер, поэтому вам не придется иметь дело с машинным кодом; вот источник для одного .
источник
Не произойдет.
Самым крупным микроконтроллером в линейке 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.
источник
Есть ли микроконтроллер с 16 МБ оперативной памяти?
Да. Единственный, о котором я знаю, относится к семейству Renesas SuperH и не включает в себя ПЗУ - поэтому вам нужно иметь внешнюю флэш-память, но она имеет 16 МБ встроенной SRAM.
В семействе Atmel AVR нет микроконтроллеров SRAM 16MByte. Или в любом месте в линейке продуктов Atmel.
Однако некоторые устройства в линейке Atmel AVR имеют интерфейс внешней шины, который позволяет подключать дополнительную память. В частности, ATxmega128A1U может поддерживать до 16 МБ внешней SRAM.
...
Ах, вот какая у тебя проблема.
Процессор 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 не будет таким огромным.
Я говорю, попробуй. Некоторые из того, что я сказал, а другие сказали, могут показаться непреодолимыми, но не позволяйте нам мешать вам. Продолжайте задавать вопросы каждый раз, когда вы сталкиваетесь с препятствием, и вы обнаружите, что большинство инженеров справляются с задачей и дадут вам понимание и помощь, необходимые для того, чтобы пройти этот путь далеко.
Эмуляция это очень весело.
источник
Ни в одном из других ответов не упоминалось, что вы могли бы просто получить микросхему, которая изначально выполняет набор инструкций m86k: серия Coldfire . Ряд инструкций был удален; если они используются не слишком часто, их можно эмулировать, перехватывая прерывание «неверная инструкция».
Однако вам все равно придется эмулировать видеопроцессор Yamaha YM7101 и звуковой процессор Yamaha YM2612. Вы можете либо попытаться создать программную эмуляцию в гораздо более быстром DSP, либо создать их FPGA-версию. Возможно, на основе существующих эмуляций FPGA Megadrive.
источник
Я уверен, что нет процессоров с 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 МБ внешней оперативной памяти, так или иначе.
источник
Вы можете использовать CORTEX -M4 с платы STMF432 ... очень мощный, с большим количеством оперативной памяти и периферийных устройств
источник