有一个带有16MB Ram的微控制器吗?


8

这是我的情况:

作为个人项目,我希望为在AVR上运行的Sega Megadrive(Sega Genesis)编写一个模拟器。因此,我一直在寻找一种具有与MegaDrive随附的Motorola 68k相似的特性的微控制器。但是,我注意到68k的规格与大多数业余爱好者的micros相比。我选择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几乎不一样,但是我有可能获得与68k的功率相匹配的AVR微型计算机吗?我在看这个问题吗?我是否需要更改设计以适应现代微镜?

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


6
根据Wikipedia的说法,Sega Genesis的运行频率为7.6 MHz,只有72KB的RAM,而不是16MB,外加64KB的额外视频内存。
tcrosley15年

2
使用应用处理器或FPGA。
彼得

11
此外,您完全没有了emulation的开销。忠实仿真SNES(使用约21 MHz的CPU)需要3 GHz以上的计算机(请参阅此处)。在最低限度,以模拟MEGADRIVE /起源,它采用了7.6 MHz和3.58 MHz的CPU,你应该会需要超过100 MHz的主机设备。
康纳·沃尔夫

12
坦白说,您确实应该首先编写仿真器,理想情况下是使用可移植C语言编写。然后考虑将其移植到ARM,然后再为所需的ARM MCU设计板,一旦获得所需性能的编号。坦率地说,我认为您没有意识到正确,忠实的仿真器是多么令人惊讶。正确地建模和仿真甚至是简单的较旧的控制台也确实非常困难,因为它们都不是完全数字化的,它们都有很多模拟怪癖。
康纳·沃尔夫

3
@ConnorWolf值得注意的是:在AVR上实现动态重新编译基本上是不可能的,因为您不能从数据存储器中运行代码。(您可以存储到程序存储器中,但是速度很慢,并且会
消耗

Answers:


18

即使Motorola 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。

在此处输入图片说明

仅作记录,我仍然认为您应该考虑Raspberry Pi,它以700 MHz运行,具有512 MB RAM,而价格略低于上述开发板的成本。以这种速度运行,您将不会仿真68000代码并以正确的速度执行I / O。

无论您采用AVR还是Raspberry Pi路线,Sega Genesis除了68000之外,还包括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代码部分无法正确执行。(这意味着您可能希望能够在盒式代码中设置虚拟断点工具。)您还需要一个反汇编程序,因此您不必处理机器代码。这是一个的来源


1
我曾考虑过,但我确实想限制自己使用AVR。
baordog

1
@baordog我用两个建议的AVR芯片更新了我的答案。
tcrosley15年

4
请注意,您提到的两个处理器都是AVR32的一部分。这些几乎与OP所熟悉的AVR架构部分完全不同,除了它们都是由Atmel制造。
duskwuff -inactive

2
@duskwuff他将无法使用比这些功能更强大的功能,而AVR处理器由Atmel制造。
tcrosley15年

3
@baordog再次修改了我的答案-我找到了一个带有32位AVR的开发板,其中包括8 MB的外部RAM,价格为31美元。
tcrosley15年

12

不会发生。

ATmega系列中最大的支持外部存储器的微控制器是ATmega1284,但这只具有8 KB的内部SRAM,并且可以寻址多达64 KB的外部存储器。这不足以模仿Genesis,因为Genesis具有72 KB的RAM 另外64 KB的视频内存。可能可以通过存储区切换来实现对其他内存的访问,但这将使从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微控制器。


几个次要的建议:-68000至少需要4个时钟来执行任何操作(大多数指令需要8个时钟或更多时钟),因此以16MHz运行的AVR快9倍左右(仍然不够快,无法模拟7.16MHz 68000 in实时)。最大的ATmega也是1284-具有16k RAM,128K ROM,并以20MHz运行。
布鲁斯·雅培

2
@BruceAbbott如我的回答所述,AVR一次只能在一个8位寄存器(或有时是一对)上运行,这会严重破坏指令计数-更不用说指令加载,解码等了。ATmega1284具有SRAM多一点,但不支持外部存储器,因此在这里没有用。更新了我的答案以反映该标准。
duskwuff -inactive-

视差微控制器能够执行此任务吗?它是32位的,可能有更多的RAM,而且速度要快得多!对于VGA输出,它们也可以。
Ismael Miguel

@IsmaelMiguel否。仍然没有足够的RAM(32 KB,并且代码占用了它的空间),而且奇怪的Propeller体系结构也不适合仿真。
duskwuff -inactive

@duskwuff有意义。看到强大的功能正在运行将很有趣。使用Propeller进行输出和Arduino进行处理呢?
伊斯梅尔·米格尔

11

有一个带有16MB Ram的微控制器吗?

是。我唯一知道的是Renesas SuperH系列,它不包含ROM-因此您必须具有外部闪存,但它具有16MB的板载SRAM。

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

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

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

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

...

我敢肯定,现代SRAM与68k几乎不一样,但是我有可能获得与68k功率相匹配的AVR微型计算机吗?我在看这个问题吗?我是否需要更改设计以适应现代微镜?

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

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

68k处理器(即Motorola 68000)不是微控制器,也不具有16MBytes的内部SRAM。

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

您不需要带有16MBytes内部SRAM的微控制器来仿真68k处理器。

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

我认同。ATxmega128A1U的外部存储器总线与68k处理器的总线一样大,并具有大量闪存和RAM,使其可以运行68k处理器的微码版本。

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

68k处理器不仅运行速度慢4倍,而且运行速度最快,至少需要4个时钟周期,许多运行时间要长2-4倍,特别是内存访问。

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

我希望您可以在接受一些抖动的情况下谨慎地进行准确的周期运行,尽管如果您一丝不苟,则可以使它在没有抖动的情况下可以完美地准确运行。AVR处理器可以在适当的超频下正常运行,因此您可以在38.35MHz上运行它,并且每68k时钟周期有5个AVR周期。

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

我可以使用Atmel 8位AVR模拟世嘉创世纪吗?

否。SegaGenesis的核心是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程序,那么使用Atmel开发环境以及带有外部总线接口的更好的AVR芯片,可以放弃arduino,您可以开始阅读和执行墨盒。您甚至可以将视频和声音数据传输到计算机,并在处理过程中解释它们-

确保您的仿真例程具有可移植性,并且可以轻松切换到更好的处理器,以免卡住。

如果简单的Arduino Mega项目永远不会走太远,那么您就不会在这个项目上浪费很多资源。如果您发现自己渴望完成它,那么选择功能更强大的Atmel芯片将不会让人感到不知所措。

我说试试看。我说过的某些话似乎有些不可逾越,但不要让我们妨碍您。每次遇到障碍时都不断提问,您会发现大多数工程师都面临挑战,并且会为您提供理解并帮助您走这条路。

模拟很有趣。


您认为用fpga模拟视频/声音处理器会更容易吗?
baordog 2015年

我认为编写仿真器的挑战将是处理68000条指令,例如:ADD.L(A0)+,D3。现在,ATxmega128A1U使用X,Y或Z寄存器具有类似的寻址格式。那些当然是16位的,但是据说Sega只使用了72 KB的RAM,因此这可能行得通,具体取决于这8 KB的用途。发生问题是因为AVR具有三个地址寄存器,而68000具有八个地址寄存器。突然之间,仿真寄存器A0并未加载到X,Y或Z中。因此,必须进行重新整理。一个地址寄存器可能需要专用于SP。
tcrosley15年

FPGA方法已成功完成:code.google.com/p/fpgagen
pjc50

我不知道@baordog。声音处理器是Z80处理器。我没有看视频处理器。您应该进行更多研究以找出其中的内容-视频处理器具有自己的内存,但它也会生成复杂的PAL或NTSC信号。如果要集成图形LCD显示屏,您可能会发现视频处理器的许多复杂性已经消失了-但是我不确定它有多复杂。我敢肯定您可以在FPGA中完成此操作,但是如果您更喜欢微控制器,则可能不需要。
亚当·戴维斯

1
@davidcary在Digikey上找到了它,但在瑞萨网站上也没有看到它。R8J73540BGZV - digikey.com/product-search/...
亚当·戴维斯

6

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

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


1

有一个带有16MB Ram的微控制器吗?

我很确定没有处理器具有16 MB的片上RAM。

在68000的某些描述中提到的“ 16 MB RAM”指的是24位外部地址总线,理论上,它可以寻址最大2 ^ 24字节= 16 MB的外部RAM。我的理解是,使用68000的绝大多数系统所连接的外部RAM远远少于16 MB。

特别是,Sega Mega Drive(又名Sega Genesis)具有72kB的RAM和64kB的视频RAM。那就是外部 RAM。无论是它的Motorola 68000处理器也没有了它的Zilog Z80有任何片上RAM或高速缓存。

我建议您创建一个第二个独立的问题,其标题描述您真正想知道的内容,但是将此问题保留为有关微控制器RAM 的规范问题,以帮助许多人误解“ 16 MB RAM”的含义。某些处理器中最大的外部DRAM,而“ 2.5 KB RAM”表示其他处理器中包含的实际物理片上SRAM。

(*)2006年以后生产的一些非常高端的处理器具有16 MB或更多的片上高速缓存,但是这些处理器需要更多的外部RAM-因此,如果您确实需要16 MB的RAM,您将一种方式需要16 MB的外部RAM。


-3

您可以使用STMF432板上的CORTEX -M4 ...非常强大,具有大量的RAM和外围设备

在此处输入图片说明


从什么时候开始,当256 KB的RAM是“大量的内存”时?
尼克·阿列克谢耶夫

在任何情况下,OP都非常具体,他们希望使用AVR微控制器而不是ARM。
黄昏
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.