为什么微控制器的 RAM 这么少?

电器工程 微控制器 集成电路 记忆 内存 理论
2022-01-10 07:35:15

也许这更像是一个感知问题,但似乎微控制器在过去 20 年中取得了突飞猛进的发展,几乎在所有方面,更高的时钟速度、更多的外围设备、更容易的调试、32 位内核等......

在 10 KB (16/32 KB) 中看到 RAM 仍然很常见。

这似乎不是直接的成本或尺寸问题。RAM控制器超过某个阈值是否存在复杂性问题?

还是只是它通常不是必需的?

查看一家流行的 Internet 供应商的零件矩阵,我看到一个256 KB 的Cortex M4不到 8 美元,然后再多花几美元,你可以找到更多没有 ROM 的,但看起来很稀疏......

我并不完全需要具有 MB 易失性存储的微控制器,但似乎有人可能......

4个回答

有几个原因。

首先,内存占用了大量的硅片面积。这意味着增加 RAM 的数量会直接增加芯片的硅面积,从而增加成本。更大的硅片面积对价格产生“双重打击”:更大的芯片意味着每个晶圆的芯片更少,尤其是在边缘附近,更大的芯片意味着每个芯片更有可能出现缺陷。

二是流程问题。RAM 阵列应该以不同于逻辑的方式进行优化,并且不可能通过不同的工艺发送同一芯片的不同部分——整个芯片必须使用相同的工艺制造。有些半导体代工厂或多或少致力于生产 DRAM。不是 CPU 或其他逻辑,只是直接使用 DRAM。DRAM 需要具有面积效率的电容器和泄漏极低的晶体管。制造电容器需要特殊处理。制造低泄漏晶体管会导致晶体管速度变慢,这对于 DRAM 读出电子设备来说是一个很好的折衷方案,但对于构​​建高性能逻辑并不是那么好。在微控制器芯片上生产 DRAM 意味着您需要以某种方式权衡工艺优化。大型 RAM 阵列也更容易出现故障,这仅仅是因为它们的面积大,降低了产量并增加了成本。测试大型 RAM 阵列也很耗时,因此包括大型阵列会增加测试成本。此外,与更专业的微控制器相比,规模经济更能降低单独 RAM 芯片的成本。

功耗是另一个原因。许多嵌入式应用程序都受到功率限制,因此构建了许多微控制器,以便它们可以进入非常低功耗的睡眠状态。为了实现极低功耗的睡眠,使用了 SRAM,因为它能够以极低的功耗保持其内容。电池供电的 SRAM 可以在单个 3V 纽扣电池的情况下保持其状态数年。另一方面,DRAM 保持其状态的时间不能超过几分之一秒。电容器是如此之小,以至于少数电子会隧穿并进入基板,或者通过单元晶体管泄漏。为了解决这个问题,必须不断地读取和写回 DRAM。因此,DRAM 在空闲时比 SRAM 消耗更多的功率。

另一方面,SRAM 位单元比 DRAM 位单元大得多,因此如果需要大量内存,DRAM 通常是更好的选择。这就是为什么使用少量 SRAM(kB 到 MB)作为片上高速缓存与大量片外 DRAM(MB 到 GB)相结合是很常见的原因。

已经有一些非常酷的设计技术用于以低成本增加嵌入式系统中可用的 RAM 数量。其中一些是多芯片封装,其中包含用于处理器和 RAM 的单独裸片。其他解决方案包括在 CPU 封装顶部生产焊盘,以便可以在顶部堆叠 RAM 芯片。该解决方案非常聪明,因为可以根据所需的内存量将不同的 RAM 芯片焊接到 CPU 顶部,而无需额外的板级布线(内存总线非常宽且占用大量板面积)。请注意,这些系统通常不被视为微控制器。

无论如何,许多非常小的嵌入式系统并不需要太多的 RAM。如果您需要大量 RAM,那么您可能会想要使用具有外部 DRAM 而不是板载 SRAM 的高端处理器。

内存可能占用了最多的硅空间,并且使用速度非常快的 RAM 是易失的 - 并且不断使用电源来保持其状态。除非您需要大量 RAM,否则它对许多其他应用程序没有用处。如果嵌入式系统设计人员需要更多 RAM,他们只需获得一个外部 RAM 芯片并使用微控制器如今通常具有的外围存储器接口,即可非常轻松地进行即插即用存储器扩展。这就是为什么我认为微控制器通常仍然具有合理的低板载 RAM 的原因,因为合理的应用程序代码和用例场景通常不需要太多。

当您开始着手构建需要在操作系统上完整运行的大型架构时,RAM 变得非常重要,但是这超出了微控制器的范围,进入了嵌入式计算机,更像是您在 Beaglebone 和 Raspberri Pi 板上看到的那些天。即使在这个阶段,处理器也是如此复杂且功能如此丰富,以至于它们没有空间容纳其任务所需的 RAM 量,因此它们几乎需要外部存储器才能运行。

编辑:

作为个人轶事,我最近制作了一个小型自主机器人控制板,旨在将其用于低分辨率计算机视觉,如运动检测和对象跟踪和跟踪。我为此任务选择了低引脚数的 ARM Cortex M3,在查看 Atmel 对其 SAM3 系列处理器的选择时,我确实选择了我能找到的最高 RAM - 因为在这种情况下我不想购买外部 RAM IC由于电路板空间和不希望 PCB 上高速 RAM 存储器总线的复杂性。在这种情况下,对于我的特定应用程序,如果可能的话,我非常希望可以选择多 100 KB 的 RAM。

除了其他答案中提出的优秀观点之外,RAM 受限的另一个原因是微控制器的架构。例如,以 Microchip PIC10LF320 为例,它只有 448字节的程序(闪存)存储器和 64字节的 RAM。但大批量生产时可能只需要 25 埃(或更少)。PIC10 指令字(12 位)的有限大小使其只能直接寻址 128 字节的 RAM。

我确信还有其他只有 8 位地址总线的微控制器,将它们限制为 256 字节的 RAM。

但大多数中档微控制器(即使是那些具有 8 位数据路径的微控制器)都具有 16 位地址总线。这些芯片的主要架构考虑是芯片是使用哈佛还是冯诺依曼架构。

大多数微控制器使用哈佛架构,它为程序存储器、RAM 和存储器映射的 I/O 地址提供单独的 16 位地址空间。因此对于这些,16 位地址总线可以访问多达 64K (65,536) 字节的 RAM。架构仍然设置了 64K 限制,如果想要超过该限制,则必须使用某种分页。为程序空间而不是 RAM 空间进行分页更为常见。

使用冯诺依曼架构的微控制器,例如 Freescale HCS08 系列,只有一个地址空间在程序存储器、RAM 和存储器映射 I/O 之间划分。为了获得合理数量的程序空间,这会将 RAM 的数量限制为通常为 4K 或 8K。同样,可以使用分页来增加可用的程序或 RAM 空间。

使用微控制器和小型系统已经有一段时间了,我想指出,通常只需要很少的 RAM。请记住,尽管 MCU 可能能够完成大量工作,但如今的趋势是使用比以往更多的 MCU,并使用更多的 MCU 在更大的系统中分配许多任务。这与在 Windows 中编程所需的臃肿开发系统不同,MCU 开发通常使用非常优化的编译器,通常使用非常高效的 C 和 C++ 源代码,有时甚至几乎没有操作系统开销。虽然你几乎不可能编写一个 Windows 程序来在任何设备上显示你的名字而不消耗至少数百千字节,包括操作系统资源,

当然,正如其他人所指出的那样,存在成本和空间问题。但这里的历史是,现在被新手认为是少量 RAM 的东西实际上比以往任何时候都要多,而 MCU 需要与之交互的组件和设备本身也变得越来越智能。老实说,我最近在许多 MCU 应用中最大的 RAM 用途是用于中断驱动的通信缓冲区,以释放 MCU 用于其他任务而不必担心丢失数据。但不管你信不信,对于普通的逻辑和计算功能,MCU 与其有限的内置 RAM 和闪存资源非常匹配,你真的可以用很少的钱做很多事情。

请记住,曾几何时,具有粗糙图形但游戏逻辑复杂的著名视频游戏(如“PAC Man”和“Space Invaders”)通常是在 8K ROMS 内完成的,机器几乎没有 8 或 16 KB 的 RAM!