Existe um microcontrolador com 16 MB de RAM?

8

Aqui está a minha situação:

Como projeto pessoal, estou procurando escrever um emulador para o Sega Megadrive (Sega Genesis) que roda no AVR. Então, eu tenho procurado por um microcontrolador que tenha características semelhantes ao Motorola 68k que acompanha o MegaDrive. No entanto, notei que as especificações do 68k são comparadas com a maioria dos micros amadores. Estou escolhendo o AVR, em vez do ARM, porque gosto da arquitetura e achei que seria um bom desafio.

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

Aqui estão as especificações para um 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

Isso parece bastante típico para micros modernos de gama baixa. Eu nunca vejo o carneiro entrar muito nos mbs.

Agora, tenho certeza de que a SRAM moderna não é quase a mesma que os 68k tinham, mas é possível obter um micro AVR que corresponda ao poder de um 68k, estou vendo esse problema errado? Preciso alterar meu design para acomodar micros modernos?

Não sei se alguma fonte externa de memória será rápida o suficiente.

baordog
fonte
6
Segundo a Wikipedia , o Sega Genesis funcionava a 7,6 MHz e tinha apenas 72 KB de RAM, não 16 MB, além de 64 KB de memória de vídeo adicional.
tcrosley
2
Use um processador de aplicativos ou um FPGA.
Peter
11
Além disso, você está perdendo completamente a sobrecarga de emular . A emulação adequada de um SNES (que usa uma CPU de ~ 21 MHz) requer fielmente um computador com mais de 3 GHz (veja aqui ). No mínimo , para emular um Megadrive / genesis, que usa uma CPU de 7,6 MHz e 3,58 MHz, você deve exigir um dispositivo host de mais de 100 MHz.
Connor Wolf
12
Francamente, você realmente deve escrever o emulador primeiro, idealmente no portátil C. Em seguida, observe como portá-lo no ARM e depois projetar uma placa para o ARM MCU de sua escolha, depois de ter alguns números para o desempenho necessário. Francamente, acho que você não percebe o quão incrivelmente envolvidos são emuladores fiéis e adequados. Modelar e emular adequadamente até mesmo os consoles antigos simples é realmente muito difícil, porque nenhum deles é totalmente digital, todos eles têm muitas peculiaridades analógicas.
Connor Wolf
3
@ConnorWolf Vale ressaltar: é essencialmente impossível implementar a recompilação dinâmica no AVR, pois você não pode executar o código da memória de dados. (Você pode armazenar a memória de programa, mas isso é lento e come piscar ciclos!)
duskwuff -inactive-

Respostas:

18

Embora o Motorola 68000 e o Sega Genesis sejam bastante antigos (início dos anos 80), você não encontrará um AVR de baixo custo (isto é, 8 bits) que pode emular toda a máquina de jogo.

O Sega Genesis funcionava a 7,61 MHz e tinha 72 KB de RAM (mais 64 KB adicionais de RAM de vídeo). No entanto, os programas de jogos residiam na ROM, portanto você precisará de RAM adicional para armazená-los (a menos que planeje conectar os cartuchos originais de alguma forma). A maioria dos cartuchos de jogos tinha menos de 4 MB, mas há pelo menos um jogo (Pier Solar, lançado em 2010) que possui uma ROM de 8 MB.

Além disso, o sistema certamente deve ter incluído uma ROM do sistema que funcionava como algum tipo de executivo e também forneceria uma biblioteca de E / S comum para os cartuchos (não consigo encontrar nenhuma referência sobre o tamanho). Você terá que encontrar as ROMs (ou imagens de ROM) para elas e copiá-las para sua RAM também (ou adicionar uma seção de ROM ao seu sistema).

Na IMO, você vai querer usar um microcontrolador de 32 bits. Se você for usar os cartuchos originais mais uma ROM do programa e não precisar de MB de RAM, poderá usar a maioria dos microcontroladores de 32 bits com espaço suficiente para o seu emulador. Se você deseja fazer o download dos cartuchos e da imagem da ROM do sistema na RAM, para obter 8 MB ou mais de RAM, você precisará de um microcontrolador com um barramento de memória externo (não é possível obter 8 MB no o mesmo chip que o microcontrolador).

Como você deseja manter o AVR, sugiro um processador como o AT32UC3A3256 , que possui 256 KB de Flash, 128 KB de RAM e roda a 84 MHz. O problema é que é um dispositivo de montagem em superfície de 144 pinos, que será difícil de soldar.

No entanto , existe um kit de avaliação para este processador do Element 14 por apenas US $ 31,25. Então você não precisa se preocupar com solda. Além disso, a placa possui 8 MB de RAM externa, para que você possa carregar um cartucho na RAM.

insira a descrição da imagem aqui

Apenas para constar , ainda acho que você deve considerar o Raspberry Pi , rodando a 700 MHz com 512 MB de RAM por um pouco menos do que o custo da placa de desenvolvimento acima. Executando nessa velocidade, você não teria problemas em emular o código 68000 e executar E / S na velocidade correta.

Seja na rota AVR ou Raspberry Pi, além do 68000, o Sega Genesis também inclui um Zilog Z80 e vários chips para fins especiais, incluindo o Yamaha YM2612 e o Texas Instruments SN76489A. O Z80 foi usado para controlar o som e também fornecer compatibilidade retroativa com o Sega Master System anterior. O chip Yamaha era um sintetizador de som FM e o chip TI era um gerador de som programável (esta máquina tinha muitas opções de som). Havia também um processador de exibição virtual (VDP). Provavelmente você pode pular o som (o que significa que não precisa se preocupar com os chips Z80, Yamaha ou TI), mas precisará emular o hardware gráfico.

Alguns recursos:

EASy68K - Editor / Montador / Simulador para o 68000. Código aberto para que você possa descobrir o código de simulação 68K

Cyclone 68000 - emulador para o microprocessador 68000, escrito no conjunto ARM de 32 bits. Útil apenas se você decidir usar o Raspberry Pi

Por fim, se você ainda não está familiarizado com o conjunto de instruções 68000, planeje passar semanas (ou mais) para se tornar um especialista. Muita da sua depuração será reduzida no nível do emulador, tentando descobrir por que uma seção do código 68000 no cartucho do jogo não está sendo executada corretamente. (O que significa que você provavelmente desejará configurar um recurso de ponto de interrupção virtual no código do cartucho.) Você também precisará de um desmontador, para não precisar lidar com o código da máquina; aqui está a fonte de um .

tcrosley
fonte
1
Eu tinha considerado isso, mas quero me restringir a avr.
baordog
1
@baordog Atualizei minha resposta com dois chips AVR sugeridos.
Tcrosley 29/09/2015
4
Observe que os dois processadores que você mencionou são partes do AVR32. Eles são quase completamente diferentes das partes da arquitetura do AVR com as quais o OP está familiarizado, além do que os dois são fabricados pela Atmel.
você precisa saber é o seguinte
2
@duskwuff Ele não conseguirá sobreviver com nada menos poderoso do que esses, e os processadores AVR são fabricados pela Atmel.
tcrosley
3
@baordog Modifiquei minha resposta novamente - encontrei uma placa de desenvolvimento com um AVR de 32 bits que inclui 8 MB de RAM externa por US $ 31.
tcrosley
12

Não vai acontecer.

O maior microcontrolador da linha ATmega com suporte para memória externa é o ATmega1284, mas este possui apenas 8 KB de SRAM interna e pode endereçar até 64 KB de memória externa. Isso não será suficiente para emular o Genesis, que tinha 72 KB de RAM e outros 64 KB de memória de vídeo. Pode ser possível implementar o acesso à memória adicional por meio da troca de banco, mas isso tornaria o acesso à memória do AVR muito caro.

Existem algumas partes da linha ATmega com SRAM mais interna, como a ATmega1284 (16 KB), mas elas não suportam memória externa. Para encurtar a história, abordar mais de 64 KB de RAM de um ATmega é bastante difícil.

(Não sei de onde você tirou a figura de 16 MB. O 68000 não possui memória interna, além de registros; a quantidade de memória em um sistema 68000 pode variar drasticamente.)

Além disso, a CPU 68000 no Genesis é executada em 7,6 MHz. Não é possível emular isso em um AVR de 16 MHz - enquanto a taxa de clock do AVR é ​​reconhecidamente um pouco maior, o 68000 é uma CPU de 32 bits; portanto, a emulação de uma de suas instruções frequentemente requer muito mais de uma instrução em o AVR. (Mesmo uma simples adição provavelmente exigirá algumas dezenas de instruções.)

Se você gostaria de imitar o Genesis, recomendo que olhe para os microcontroladores ARM.

duskwuff -inactive-
fonte
Alguns pequenos detalhes: - o 68000 leva pelo menos 4 relógios para fazer qualquer coisa (e a maioria das instruções leva 8 relógios ou mais), de modo que um AVR rodando a 16MHz é ~ 9 vezes mais rápido (ainda não rápido o suficiente para emular um 7.1000MHz 68000 em embora em tempo real). Também o maior ATmega é o 1284 - que tem 16k RAM, 128K ROM e roda a 20MHz.
Bruce Abbott
2
@BruceAbbott Conforme observado na minha resposta, o AVR só pode operar em um registro de 8 bits (ou algumas vezes em um par) de uma só vez, o que aumenta bastante a contagem de instruções - sem mencionar a carga, decodificação etc. O ATmega1284 possui um pouco mais de SRAM, mas não suporta memória externa, por isso não adianta aqui. Atualizei minha resposta para refletir esse critério.
você precisa saber é o seguinte
Um microcontrolador Parallax seria capaz de executar essa tarefa? É de 32 bits, pode ter um pouco mais de RAM e são muito mais rápidos! Eles também são razoáveis ​​para a saída VGA.
Ismael Miguel
@IsmaelMiguel No. Ainda está longe de RAM suficiente (32 KB e código consome isso), e a estranha arquitetura Propeller não é adequada para emulação.
duskwuff -inactive-
@duskwuff Isso faz sentido. Seria interessante ver algo poderoso rodando nele. Que tal usar uma hélice para saída e saída E um Arduino para processamento?
Ismael Miguel
11

Existe um microcontrolador com 16 MB de RAM?

Sim. O único que eu conheço, porém, está na família Renesas SuperH e não inclui ROM - então você precisa ter um flash externo, mas ele possui 16 MBytes de SRAM onboard.

Estou procurando escrever um emulador para o Sega Megadrive (Sega Genesis) que roda no AVR.

Não há microcontroladores SRAM de 16 MByte na família Atmel AVR. Ou em qualquer lugar da linha de produtos Atmel.

No entanto, vários dispositivos da linha Atmel AVR possuem uma interface de barramento externo que permite conectar memória adicional. Especificamente, o ATxmega128A1U pode suportar até 16 MBytes de SRAM externa.

Então, eu tenho procurado por um microcontrolador que tenha características semelhantes ao Motorola 68k que acompanha o MegaDrive.

...

Tenho certeza de que a SRAM moderna não é quase a mesma que o 68k tinha, mas é possível obter um micro AVR que corresponda ao poder de um 68k, estou vendo esse problema errado? Preciso alterar meu design para acomodar micros modernos?

Não sei se alguma fonte externa de memória será rápida o suficiente.

Ah, aqui está o problema que você está tendo.

O processador de 68k (ou seja, Motorola 68000) NÃO é um microcontrolador e NÃO possui 16 MBytes de SRAM interna.

Embora o processador tenha 32 bits internamente, devido a limitações de pinos, ele pode endereçar até 16 MBytes de memória externa, incluindo flash, sram e quaisquer dispositivos mapeados na memória.

Você não precisa de um microcontrolador com 16 MBytes de SRAM interna para emular o processador de 68k.

Existe um microcontrolador Atmel AVR de 8 bits que pode emular o processador Motorolla 68000?

Acho que sim. O ATxmega128A1U possui um barramento de memória externo do tamanho do barramento do processador de 68k e possui bastante flash e RAM que permitiriam executar uma versão em microcódigo do processador de 68k.

Ele pode rodar até 32 MHz e muitas instruções levam um ciclo, mas até o pior caso leva 5 ciclos na memória interna. A interface externa é mais lenta, mas se você escolher memória rápida, ela ainda será muito mais rápida que a de 68k.

O processador de 68k não apenas roda 4 vezes mais devagar, mas as operações mais rápidas que leva demoram pelo menos 4 ciclos de clock e muitos demoram 2 a 4 vezes mais, principalmente o acesso à memória.

Assim, mesmo com a SRAM lenta (pelos padrões atuais) (digamos, uma parte de 70nS 8MByte por menos de US $ 10), você pode usar 0 estados de espera no processador de 32MHz e executar círculos em torno dos 68k em 7MHz. Por exemplo, uma instrução de movimentação simples nos 68k que levaria 4 ciclos a 7,61 MHz leva 525 nS. Uma instrução de movimento simples semelhante no ATxmega128A1U em execução em 32MHz leva 31nS. Assim, o AVR poderia executar 16 movimentos no momento em que os 68K foram feitos com um. O 68k leva 50 ciclos para alguns tipos de interrupção, enquanto o AVR pula para a interrupção em 3 ciclos - para que o AVR possa lidar com algumas interrupções no tempo que leva o 68k para simplesmente pular em um.

Espero que você possa executar o ciclo com precisão, com um esforço cuidadoso, se aceitar alguma instabilidade, embora seja possível fazê-lo funcionar perfeitamente com a precisão do ciclo sem instabilidade, se você for meticuloso. Os processadores AVR funcionam bem com overclock moderado, então você provavelmente pode executá-lo a 38,35 MHz e ter 5 ciclos AVR por 68k clock clock.

Isso não quer dizer que seria fácil, e pode haver algumas instruções muito complicadas que levariam mais tempo no AVR do que o contrário - mas mesmo essas podem ser explicadas com um design cuidadoso.

Posso emular um Sega Genesis com um AVR de 8 bits da Atmel?

Não. O Sega Genesis possui, no coração, um processador de 68k, mas também possui um processador de som (Z80) e um processador de vídeo que você precisaria de significativamente mais recursos para emular. No diagrama abaixo, você encontrará o processador de 68k no canto superior esquerdo - observe que é uma pequena porção de tudo o que é necessário para emular um sistema Sega Genesis completo.

insira a descrição da imagem aqui

Assim, embora você pudesse emular prontamente o núcleo de 68k do Sega Genesis, não seria capaz de executar jogos feitos para o Genesis com apenas um microcontrolador AVR. Emular os 68k sozinho em um chip já seria bastante difícil - mesmo se você simplificasse as coisas, duvido que pudesse encaixar os três processadores em um único chip AVR de 32MHz.

No entanto, você provavelmente poderia emular esses dois chips com mais dois AVRs. Se você visou um LCD gráfico mais simples que não exigisse tempo e geração estranhos de NTSC, seria possível simplificar um pouco as coisas e talvez até colocar as duas funções em um chip separado.

Este é um projeto enorme, embora certamente não seja um projeto de fim de semana. Se você está no estágio em que se sente confortável apenas com as placas de desenvolvimento do Arduino, pode ser interessante criar um emulador simples de processador de 68k e conectar um pouco de ROM e RAM externas para acessar a memória. O ATMega do Arduino não possui uma interface de memória externa, mas você pode ajustar as linhas de E / S e emular isso também. Se você se aprofundar o suficiente no projeto para emular programas simples de 68k, pode valer a pena abandonar o arduino, usando o ambiente de desenvolvimento Atmel, e um chip AVR melhor com uma interface de barramento externa, e você pode começar a ler e executar cartuchos. Você pode até canalizar dados de vídeo e som no computador e interpretá-los no processamento - é '

Verifique se suas rotinas de emulação são portáteis e você poderá mudar para um processador melhor com facilidade o suficiente para não ficar preso.

Se o simples projeto Arduino Mega nunca chegar muito longe, você não gastou muitos recursos nesse projeto. Se você se sentir motivado a concluí-lo, mudar para um chip Atmel mais capaz não será tão avassalador.

Eu disse para tentar. Parte do que eu disse e outros disseram pode parecer intransponível, mas não nos deixe atrapalhar. Continue fazendo perguntas cada vez que encontrar um obstáculo e descobrirá que a maioria dos engenheiros gosta de um desafio e lhe dará a compreensão e a ajuda necessárias para percorrer esse caminho.

Emulação é muito divertida.

Adam Davis
fonte
Você acha que seria mais fácil emular os processadores de vídeo / som com FPGA?
baordog
Eu acho que os desafios para escrever o emulador estarão lidando com 68000 instruções como: ADD.L (A0) +, D3. Agora, o ATxmega128A1U possui um formato de endereçamento semelhante, usando os registros X, Y ou Z. É claro que eles são de 16 bits, mas supostamente a Sega usava apenas 72 KB de RAM, portanto isso pode funcionar, dependendo do uso desses 8 KB extras. Ocorre um problema porque o AVR possui três registradores de endereço e o 68000 possui oito. De repente, o registro emulado A0 não é carregado em X, Y ou Z. Portanto, as coisas precisam ser embaralhadas. Um registro de endereço provavelmente precisará ser dedicado a um SP.
tcrosley
A abordagem do FPGA foi realizada com êxito: code.google.com/p/fpgagen
pjc50
@ Baordog eu não sei. O processador de som é um processador Z80. Eu não olhei para o processador de vídeo. Você deve fazer mais algumas pesquisas para descobrir o que está envolvido - o processador de vídeo tem sua própria memória, mas também gera sinais PAL ou NTSC complexos. Se você integrar um monitor gráfico em LCD, poderá descobrir que grande parte da complexidade do processador de vídeo desaparece - mas, novamente, não tenho certeza de quão complexo é. Estou certo de que você pode fazer isso em um FPGA, mas talvez não seja necessário se preferir microcontroladores.
Adam Davis
1
O @davidcary o encontrou no Digikey, mas também não o vê no site da Renesas. R8J73540BGZV - digikey.com/product-search/...
Adam Davis
6

Nenhuma das outras respostas mencionou que você poderia obter um chip que executa o conjunto de instruções m86k nativamente: a série Coldfire . Várias instruções foram removidas; se não forem usados ​​com muita frequência, eles podem ser emulados interceptando a interrupção "instrução inválida".

No entanto, você ainda precisará emular o processador de vídeo Yamaha YM7101 e o processador de som Yamaha YM2612. Você pode tentar criar emulações de software em um DSP muito mais rápido ou criar uma versão FPGA delas. Possivelmente com base nas emulações de FPGA existentes do Megadrive.

pjc50
fonte
1

Existe um microcontrolador com 16 MB de RAM?

Tenho certeza de que não há processadores com 16 MB de RAM no chip.

Os "16 MB RAM" mencionados em algumas descrições do 68000 fazem alusão ao barramento de endereço externo de 24 bits que, em teoria, poderia endereçar um máximo de até 2 ^ 24 bytes = 16 MB de RAM externa. Meu entendimento é que a grande maioria dos sistemas que usam o 68000 conecta muito menos que 16 MB de RAM externa.

Em particular, o Sega Mega Drive (também conhecido como Sega Genesis) possui 72kB de RAM e 64 kB de vídeo RAM. Essa é a RAM externa . Nem o Motorola 68000 nem o Zilog Z80 possuem RAM ou cache no chip.

Sugiro que você crie uma segunda pergunta independente com um título que descreva o que você realmente deseja saber, mas deixe essa pergunta como uma pergunta canônica sobre a RAM do microcontrolador para ajudar muitas e muitas pessoas que são enganadas por "16 MB de RAM", o que significa teórico. DRAM externa máxima em alguns processadores, enquanto "2,5 KB de RAM" significa SRAM física no chip real incluída em outros processadores.

(*) Alguns processadores de última geração produzidos após 2006 possuem 16 MB ou mais de memória cache no chip, mas esses processadores exigem ainda mais RAM externa - portanto, se você realmente precisar de 16 MB de RAM, precisará precisa de 16 MB de RAM externa de uma maneira ou de outra.

davidcary
fonte
-3

Você pode USAR UM CORTEX-M4 da placa STMF432 ... muito poderoso com muitos megas de RAM e periféricos

insira a descrição da imagem aqui

TraceKira
fonte
Desde quando 256 KB de RAM são "muitos megas de RAM"?
Nick Alexeev
E, em qualquer caso, o OP era bem específico de que eles desejavam usar um microcontrolador AVR, não o ARM.
duskwuff -inactive-