也许大家都注意到了,在过去的20多年的时间里,微控制器(MCU)经历了跨越式的发展,这反映在很多方面,比如更高的系统时钟、更多的外设模块、更加便利的调试手段、32位的内核等。但MCU内部的数据内存空间,则始终在十几K(16~32KB)的左右徘徊。虽然有些基于Cortex M4核单片机有多达265kB RAM的型号,但在众多单片机型号阵列中,它们是寥寥无几。
那么,究竟什么原因使得单片机很容易拥有多达数 MB的程序Flash空间,而数据内存只有那么小呢?
在一篇博文“Why do microcontrollers have so little RAM?[1]”中,众人给出了单片机RAM容量小的很多原因。
在所有影响单片机内RAM增加的原因中,一个基础的问题就是RAM会占用很多硅片面积,这也会直接引起芯片价格的增加。这是因为在同样的硅片上,占用硅片面积大会使得MCU数量就会减少,特别是在晶圆片的边界部分造成更大的浪费。祸不单行,面积大的IC也更会产生缺陷,使得成品率下降。
第二个原因就是制作RAM的工序复杂。可以通过不同手段优化RAM生产工艺,但在制作MCU过程中, 同一芯片不可能经历过多的工序。有一些芯片加工服务厂商专门生产DRAM,这是利用特殊的半导体电容技术来极大减少RAM所占用的硅片面积,但DRAM需要通过不停刷新来维持其内部数据。为了延迟DRAM单元保持数据的能力,就要求晶体管漏电流小,这也会造成晶体管的运行速度降低。这需要在速度和数量之间做折中,但这种折中工艺不利于制作高速逻辑电路。
此外,大容量RAM电路在后期的测试阶段也会消耗大量的时间,从而增加生产的时间成本。所以,经济原因造成生产RAM的专门厂商兴起。
功耗是另外一个限制因素。单片机系统通常对功耗有限制,很多情况下,单片机通过进入睡眠状态来减少耗电量。普通的SRAM耗电量很小,通过备用电池往往可以工作很多年。但DRAM则需要通过不断刷新来维持存储的数据。一旦停止刷新,由于漏电流的存在,DRAM的内容在不到一秒钟的时间内就会消失。所以,单片机中不能够使用DRAM而只能使用占用硅片面积更大的SRAM。
在现代CPU技术中,往往在新品中保留数量较少的SRAM作为缓存(Cache),而将大容量的DRAM作为CPU外部的数据存储空间。
有一些非常酷的手段可以将不同生产工艺的RAM和MCU制作工艺融合在一起,例如多芯片封装技术(Multi-Chip Package),将RAM新品放在MCU芯片上面堆叠一起进行封装,这比在电路板上将RAM与MCU集成更加节省系统体积,也提高数据传输速率。
最后一个原因,就是在绝大多数单片机应用的场合所需要的RAM的容量都比较少。比如在嵌入式控制领域,很多很多传感器信息都可以用极少字节的数据来表示,用于控制的参数和控制逻辑占用数据空间也很少。
所以,当需要大量RAM的应用出现的时候,往往就会直接采用集成有大容量DRAM的电路板来工作。通过外部集成大容量RAM芯片,要远比MCU内部集成的RAM更加经济。
除了前面的原因之外,单片机指令集也会限制RAM访问空间。比如Microchip公司的单片机,PIC10LF320,是12bit的指令,它只能够范围128字节的RAM空间。对于8031单片机,直接寻址的RAM空间也只有128字节。如果访问更大的外部存储空间,则需要借助于执行效率更低的间接指令。
单片机总线结构分为Harvard结构和Von Neumann结构,后者中,程序和数据存储空间是在同一个访问空间中。如果单片机中集成了大量的Flash区,那么留给数据RAM空间访问地址就少了。
此外,高效的C语言编译器,可以有效重复应用有限的RAM空间完成所需要的任务。在复杂的应用中,往往会采用多个单片机协同完成,这大大提高系统实时特性。巧妙的设计方案会避免嵌入式系统对大容量RAM的需求。所以,有人认为,正是由于没有大量需要高RAM容量的应用要求,是造成现在单片机内部RAM少的真正原因。
别忘了,早期那些令我们着迷的电子游戏,虽然有着炫酷的图形界面,但它们连程序带数据总共也只有8k字节的存储空间,比如吃豆子游戏,太空入侵游戏等。让我们向早期的这些极简风格嵌入式编程人员致敬吧。
转载自网络,如有侵权,联系删除。