有 16MB 内存的微控制器吗?

电器工程 avr 设计
2022-01-11 17:32:25

这是我的情况:

作为一个个人项目,我希望为在 AVR 上运行的 Sega Megadrive (Sega Genesis) 编写一个模拟器。因此,我一直在寻找与 MegaDrive 随附的摩托罗拉 68k 具有相似特性的微控制器。但是,我注意到 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

这对于低端现代微型机来说似乎是相当典型的。我从来没有看到公羊进入mbs。

现在,我确信现代 SRAM 与 68k 所拥有的几乎不一样,但是我是否有可能获得与 68k 功率相匹配的 AVR micro,我看错了这个问题吗?我是否需要更改我的设计以适应现代微型设备?

我不知道某些外部内存来源是否足够快。

4个回答

尽管摩托罗拉 68000 和 Sega Genesis 已经很老了(1980 年代初期),但您不会找到可以模拟整个游戏机的低端(即 8 位)AVR。

Sega Genesis 的运行频率为 7.61 MHz,拥有 72KB 的 RAM(加上额外的 64KB 视频 RAM)。然而,游戏程序驻留在 ROM 中,因此您需要额外的 RAM 来保存它们(除非您打算以某种方式插入原始卡带)。大多数游戏卡带小于 4 MB,但至少有一款游戏(Pier Solar,2010 年发布)具有 8 MB ROM。

此外,该系统肯定包含一个系统 ROM,它充当某种执行程序,并且还为盒式磁带提供了一个通用 I/O 库(我找不到任何关于它有多大的参考资料)。您将不得不为这些找到 ROM(或 ROM 映像)并将它们也复制到您的 RAM 中(或将一部分 ROM 添加到您的系统中)。

IMO 您将要使用 32 位微控制器。如果您要使用原始卡带和程序 ROM,并且不需要 MB 的 RAM,那么您可以使用大多数为模拟器提供足够空间的 32 位微控制器。如果您要将磁带和系统 ROM 映像下载到 RAM 中,那么为了获得 8 MB 或更多的 RAM,您将需要一个具有外部存储器总线的微控制器(您无法获得 8 MB与微控制器相同的芯片)。

鉴于您想坚持使用 AVR,我建议使用像AT32UC3A3256这样的处理器,它有 256 KB 的闪存、128 KB 的 RAM,运行频率为 84 MHz。问题是它是一个 144 引脚表面贴装器件,很难焊接。

但是,Element 14 有一个针对此处理器的评估套件,价格仅为 31.25 美元。所以你不必担心焊接。此外,该板具有 8 MB 的外部 RAM,因此您可以将盒式磁带加载到 RAM 中。

在此处输入图像描述

仅作记录,我仍然认为您应该考虑运行 700 MHz 和 512 MB RAM 的Raspberry Pi,其成本略低于上述开发板的成本。以该速度运行,模拟 68000 代码并以正确的速度执行 I/O 不会有任何问题。

无论你走 AVR 还是 Raspberry Pi 路线,除了 68000 之外,世嘉创世纪还包括一个 Zilog Z80 和几个专用芯片,包括雅马哈 YM2612 和德州仪器 SN76489A。Z80 用于控制声音并提供与早期 Sega Master 系统的向后兼容性。Yamaha 芯片是 FM 声音合成器,TI 芯片是可编程声音发生器(这台机器有很多声音选项)。还有一个虚拟显示处理器(VDP)。您可能可以跳过声音(这意味着您无需担心 Z80 或 Yamaha 或 TI 芯片),但您必须模拟图形硬件。

一些资源:

EASy68K -- 68000 的编辑器/汇编器/模拟器。开源所以你应该能够挖掘出 68K 模拟代码

Cyclone 68000——68000微处理器的仿真器,用 ARM 32 位汇编编写。仅当您决定使用 Raspberry Pi 时才有用

最后,如果您还不熟悉 68000 指令集,请计划花费数周(或更长时间)成为专家。您的很多调试都将在模拟器级别进行,试图找出为什么游戏卡带中的一段 68000 代码没有正确执行。(这意味着您可能希望能够在墨盒代码中设置虚拟断点功能。)您还需要一个反汇编程序,因此您不必处理机器代码;这是一个的来源

不会发生。

ATmega 系列中最大的支持外部存储器的微控制器是 ATmega1284,但它只有 8 KB 的内部 SRAM,并且可以寻址高达 64 KB 的外部存储器。这不足以模拟具有 72 KB RAM另外 64 KB 视频内存的 Genesis。或许可以通过bank-switching 实现对额外内存的访问,但这会使从AVR 访问内存的成本非常高。

ATmega 系列中有一些具有更多内部 SRAM 的部件,例如 ATmega1284 (16 KB),但它们根本不支持外部存储器。长话短说,从 ATmega 寻址超过 64 KB 的 RAM 相当困难。

(我不确定你从哪里得到 16 MB 的数字。68000 除了寄存器之外根本没有任何内部存储器;68000 系统上的内存量可能会有很大差异。)

此外,Genesis 中的 68000 CPU 以 7.6 MHz 运行。在 16 MHz AVR 上模拟这个是不可能的——虽然 AVR 的时钟频率确实要高一点,但 68000 是一个 32 位 CPU,所以模拟它的一条指令通常需要多于一条指令AVR。(即使是简单的添加也可能需要几十条指令。)

如果您想模仿 Genesis,我建议您改用 ARM 微控制器。

有 16MB 内存的微控制器吗?

是的。不过,我知道的唯一一个是 Renesas SuperH 系列,不包括 ROM - 所以你必须有外部闪存,但它有 16MBytes 的板载 SRAM。

我正在为在 AVR 上运行的 Sega Megadrive (Sega Genesis) 编写一个模拟器。

Atmel AVR 系列中没有 16MByte SRAM 微控制器。或 Atmel 产品线中的任何位置。

但是,Atmel AVR 系列中的一些设备具有外部总线接口,可让您连接额外的内存。具体来说,ATxmega128A1U 可以支持高达 16MBytes 的外部 SRAM。

因此,我一直在寻找与 MegaDrive 随附的摩托罗拉 68k 具有相似特性的微控制器。

...

我确信现代 SRAM 与 68k 所拥有的几乎不一样,但是我是否有可能获得与 68k 的功率相匹配的 AVR micro,我看错了这个问题吗?我是否需要更改我的设计以适应现代微型设备?

我不知道某些外部内存来源是否足够快。

啊,这就是你遇到的问题。

68k 处理器(即摩托罗拉 68000)不是微控制器,也没有 16MBytes 的内部 SRAM。

虽然处理器内部是 32 位,但由于引脚限制,它只能寻址高达 16MBytes 的外部存储器,包括闪存、sram 和任何内存映射设备。

您不需要具有 16MBytes 内部 SRAM 的微控制器来模拟 68k 处理器。

是否有可以模拟 Motorolla 68000 处理器的 Atmel AVR 8 位微控制器?

我想是这样。ATxmega128A1U 有一个与 68k 处理器总线一样大的外部存储器总线,并且有足够的闪存和 RAM,使其能够运行 68k 处理器的微码版本。

它可以运行到 32MHz,许多指令需要一个周期,但即使是最坏的情况,内部存储器也需要 5 个周期。外部接口速度较慢,但​​如果你选择快速内存,它仍然会比68k快很多。

68k 处理器不仅运行速度慢了 4 倍,而且其最快的操作至少需要 4 个时钟周期,而且很多需要 2-4 倍的时间,尤其是内存访问。

因此,即使是慢速(按照今天的标准)SRAM(例如,70nS 8MByte 部件,价格低于 10 美元),您也可以在 32MHz 处理器上使用 0 等待状态,并在 7MHz 运行的 68k 周围运行循环。例如,在 7.61 MHz 下需要 4 个周期的 68k 上的简单移动指令需要 525 nS。以 32MHz 运行的 ATxmega128A1U 上类似的简单移动指令需要 31nS。因此,当 68K 完成一次移动时,AVR 可以执行 16 次移动。对于某些中断类型,68k 需要 50 个周期,而 AVR 在 3 个周期内跳转到中断 - 因此 AVR 可以在 68k 简单地跳转到一个中断的时间内处理少量中断。

如果您接受一些抖动,我希望您可以通过仔细的努力使其循环准确地运行,但如果您一丝不苟,您可能能够让它在没有抖动的情况下完美地循环准确地运行。AVR 处理器在适度超频的情况下运行良好,因此您可以在 38.35MHz 下运行它,并且每 68k 时钟周期有 5 个 AVR 周期。

这并不是说这很容易,并且可能会有一些非常棘手的指令在 AVR 上花费的时间比其他方式要长 - 但即使是这些也可以通过精心设计来解决。

我可以用 Atmel 8 位 AVR 模拟 Sega Genesis 吗?

不。世嘉创世纪的核心是一个 68k 处理器,但它也有一个声音处理器 (Z80) 和一个视频处理器,你需要更多的资源来模拟。在下图中,您会在左上角找到 68k 处理器 - 请注意,它只是模拟完整 Sega Genesis 系统所需的一切的一小部分。

在此处输入图像描述

因此,虽然您可以轻松模拟 Sega Genesis 的 68k 内核,但您无法仅使用一个 AVR 微控制器运行为 Genesis 制作的游戏。在一个芯片上单独模拟 68k 已经足够困难了——即使你简化了一些事情,我怀疑你是否可以将所有三个处理器都安装到一个 32MHz AVR 芯片中。

但是,您可能可以用另外两个 AVR 来模拟这两个芯片。如果您的目标是一种不需要奇怪的 NTSC 时序和生成的更简单的图形 LCD,您也许可以稍微简化一些事情,甚至可以将这两种功能放在一个单独的芯片上。

不过,这是一个巨大的项目,当然不是周末项目。如果您正处于只对 Arduino 开发板感到满意的阶段,那么创建一个简单的 68k 处理器仿真器并连接一些外部 ROM 和 RAM 用于内存访问可能会很有趣。Arduino ATMega 没有外部存储器接口,但您也可以旋转 I/O 线并对其进行仿真。如果您在项目中走得足够远,可以模拟简单的 68k 程序,那么可能值得放弃 arduino,使用 Atmel 开发环境,以及具有外部总线接口的更好的 AVR 芯片,您可以开始阅读和执行墨盒。您甚至可以将视频和声音数据通过管道传输到计算机并在处理过程中对其进行解释——它

确保您的仿真程序是可移植的,并且您将能够轻松地切换到更好的处理器,而不会被卡住。

如果简单的 Arduino Mega 项目从未走得很远,那么您并没有在这个项目上浪费很多资源。如果您发现自己有动力去完成它,那么转向功能更强大的 Atmel 芯片就不会那么难了。

我说试试看。我所说的和其他人所说的有些似乎是不可克服的,但不要让我们妨碍你。每次遇到障碍时不断提出问题,您会发现大多数工程师都喜欢挑战,并且会为您提供理解并帮助您在这条道路上走得更远。

仿真很有趣。

其他答案都没有提到您可以获得一个本机运行 m86k 指令集的芯片:Coldfire系列。删除了一些说明;如果它们不经常使用,则可以通过捕获“无效指令”中断来模拟它们。

但是,您仍然需要模拟 Yamaha YM7101 视频处理器和 Yamaha YM2612 声音处理器。您可以尝试在速度更快的 DSP 中构建软件仿真,或者构建它们的 FPGA 版本。可能基于 Megadrive 的现有 FPGA 仿真。