程序在哪里执行?

先上结论:计算机程序可以在ROM或者RAM里执行。

摘自RL78芯片datasheet:

The RL78/F13 and RL78/F14 incorporate the flash memory to which a program can be written, erased, and overwritten. The flash memory includes the “code flash memory”, in which programs can be executed, and the “data flash memory”, an area for storing data.

计算机设备,包括单片机,PC,DSP,FPGA等不同类型的电子设备,可以从ROM中执行程序(试想系统刚上电,也只有ROM中可以读取指令)。初始化完成后,为了提高执行速度可以将ROM中存储的程序到RAM中,再从RAM中执行。

由于RAM执行速度(~GHz)相较于NorFlash的XIP执行速度(~100MHz)快很多,所以如果RAM空间足够的情况下,从RAM执行程序速度更快。
但是由于成本原因,NorFlash在单片机(code flash一般从几K到几M大小)中作为存储程序的主存储器也是很常见的。

NorFlash支持XIP(eXecute In Place),CPU直接从NorFlash取指令、译码、执行。
NorFlash更像RAM,使用标准的存储接口,具有独立的地址总线和数据总线,支持随机访问,地址总线与数据总线共用;而NandFlash更像一个硬盘,需要特殊的驱动来访问,地址总线和数据总线是与I/O总线共享,只允许按页访问,。
NorFlash直接执行的设备,还是需要RAM的,因为NorFlash中只能存储不可变的指令或数据,运行过程中可变的数据还是需要存储在RAM中。
NorFlash的特点(线性存储空间,100%无坏点,随机访问)决定了支持XIP。
NorFlash的XIP最快执行速度~100MHz。
NorFlash的读取速度(~100ns)比NandFlash(us)快,NandFlash的擦除和写入速度比NorFlash快很多。

NandFlash只能保证98%无坏块(bad block),需要坏块处理;会有位翻转(bit-flipping)问题,需要EDC(Error Detection Code)/ECC(Error Correction Code)来检错纠错。

comparison_NOR_NAND.png
  • SRAM(Static Random Access Memory) - cache/register - faster but more expensive
  • DRAM(Dynamic Random Access Memory) - Main Memory - slower but cheaper
    动态随机存取存储器,最为常见的系统内存。DRAM 只能将数据保持很短的时间。为了保持数据,DRAM使用电容存储,所以必须隔一段时间刷新(refresh)一次,如果存储单元没有被刷新,存储的信息就会丢失。 (关机就会丢失数据)
    • SDRAM(Synchronous Dynamic Random Access Memory):
      同步动态随机存储器,同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准.
    • DDR(Dual Data Rate) SDRAM:双倍速率同步动态随机存储器
  • Flash
    • NorFlash
    • NandFlash
      • SD(Secure Digital)卡
      • eMMC(embedded multi-media card)
      • SSD(Solid State Disk)
      • UFS(Universal Flash Storage)

References:

  1. Flash Memory
  2. Execute In Place
  3. norflash芯片内执行(XIP)
  4. Toshiba NAND vs. NOR Flash Memory Technology Overview
  5. Two Flash Technologies Compared: NOR vs. NAND Two Flash Technologies Compared: NOR vs. NAND
  6. Does RAM access slow-down CPU?
  7. flash-and-ram-code-execution