基于ARM Cortex-M的SoC存储体系结构和实战

System on Chip Architecture Tutorial Memory Architecture for ARM Cortex-M based SoC-Aviral Mittal

Memory Architecture for Cortex-M bases System on Chip.

一旦你完成了处理器的选择(即在ARM Cortex-M家族中),内存架构可能是SoC架构的第二个最重要的方面。内存结构取决于处理器的选择。

例如,如果选择Cortex-M7,则处理器中内置指令缓存和数据缓存作为选项,因此内存系统可能没有任何缓存。

Cortex-M7还具有紧密耦合存储器(TCMs),它提供非常快速的代码执行(来自指令TCMs)和非常快速的数据访问(来自数据TCMs)。

NVM Memory choice for code storage.

现在,由于这项技术是关于无主机SoC的,即一个自给自足的SoC,并且是系统的主要SoC,它应该有非易失性存储器(NVM)用于代码存储,而不像“托管”SoC,它通常从“主机”接收其代码,并且代码最终在SoC的RAM中。

Flash or R-RAM as NVM for code storage.

一个流行的选择是NAND Flash。对于28nm以上的几何图形,您也可以使用e-Flash,即嵌入式Flash,即集成在SoC中的闪存,但对于28nm以下的几何图形,由于技术限制,e-Flash通常不可用,因此您可能需要选择外部Flash设备,通常通过SPI接口、四SPI接口(QSPI)或八进制SPI接口。(OSPI)。但是,如果您想让NVM在SoC上实现更精细的几何结构,可以选择R-RAM(电阻RAM)或M-RAM(磁RAM)。然而,您必须记住,R-RAM是一个昂贵的事情,可以大大增加SoC的成本。

ROM for code storage

你可以用ROM,它比Flash或者R-RAM速度快,成本低,功耗低,但是ROM的问题是,它不是很灵活。它不能被覆盖,所以如果你想在后期更新你的系统,ROM不会让它发生。然而,ROM是最“安全”的内存,一般不需要验证或解密等。因此,如果您的系统足够稳定,如果您的代码在系统生命周期内不需要更新,ROM是一种方法。有时,在开发过程中,SoC可能有flash或R-RAM,SoCs的初始版本用flash/R-RAM发布,并且随着代码的成熟,flash/R-RAM被ROM取代。

OnChip R-RAM Vs Flash:

重要的是要考虑到Flash中的代码存储通常是在nandflash中,因为它提供随机访问,而不像NOR Flash那样随机访问是不可能的。

从上表中可以很明显地看出,R-RAM在大多数情况下都是胜出的,因此如果成本允许,并且您的SoC需要更多的性能来降低功耗,R-RAM将是NVM的选择。

然而,R-R a M是一项非常新的技术,并且目前非常昂贵,因此,大多数使用ARM Cortex-M类处理器的soc仍然具有e-Flash或片外Flash。

注:需要注意的是,R-RAM不能替代片上RAM。它仍然有有限的写入周期~10000,因此不能像在SoC上使用普通RAM那样使用。

从安全角度看片内与片外NVM:

片上NVM可以被认为是更安全的,因为您不需要“认证”NVM,因为它是片上的。然而,片外NVM至少在每次系统启动时都需要“身份验证”,以确保片外设备是真正的设备。

XIP vs No XIP.

在考虑NVM时,如果它是Flash或R-RAM(而不是ROM,ROM通常总是XIP),您可能还需要考虑是否需要XIP。XIP执行到位。你可以在这里找到更多关于XIP的信息。
如果您的系统没有高性能要求,XIP可能是一个非常好的建议。它非常经济有效,因为它比片上RAM便宜得多,而且您的代码直接从这个内存执行。即使NVM是片外闪存,使用cache存储器也可以缩小性能差距,为各种应用提供足够的性能。

然而,从片外闪存使用XIP的缺点是高功耗。在片外XIP过程中,您将消耗比将代码一次复制到片上RAM并从片上RAM执行多得多的能量。因此,这些是作为SoC架构师必须做出的权衡。成本/功率/性能。没有对错之路。这取决于你的SoC的用例是什么。

然后不使用XIP意味着代码需要从NVM复制到RAM,这意味着需要更多的内存来存储代码,因为有代码复制。但是在这些情况下,代码在NVM中被压缩,然后解压缩到RAM中,这样可以节省一些内存,但是没有XIP意味着比XIP更多的系统内存。

The Security Aspect of XIP vs no XIP

从安全的角度来看,XIP将需要所谓的内联解密,因为代码在执行时将被解密,因为代码通常将从NVM中的随机位置获取。但是,如果没有XIP,则解密方法将是“块”解密,即在将整个图像复制到系统RAM时对其进行一次解密。

Execute In Place (XIP)

当嵌入式系统在没有电源的情况下启动时,它将执行的第一个代码必须来自非易失性存储器源,例如Flash或ROM。

通常应该有一个“bootloader”程序,它将尽可能少地启动和运行系统。

当系统启动时,它没有可用的ram,因此没有可用的堆栈,因此没有可用的内存来存储程序变量。因此,处理器运行的第一个代码必须完全使用处理器寄存器。处理器执行的第一个代码也从它所在的位置执行。也就是说,它是“就地执行”(XIP)。它不能试图修改程序本身的任何内容,因为这段代码可能在ROM中,并且代码不能自我修改。

由于上述考虑,处理器通电后执行的第一个程序通常用汇编语言编写,因为c程序的执行几乎总是需要在读/写存储器(RAM)中设置一个“堆栈”来存储变量,并且在启动或通电时RAM可能不可用。

引导加载程序要做的一件事是使系统RAM可用。然后,它可以将代码从flash重新定位到这个ram中,然后跳到ram来执行这个复制或重新定位的代码。

是的,对于所有的XIP代码,load region=execution region,也就是说,XIP代码存储在根区域中。记住“根区域”的定义是加载地址为=执行地址的区域。

Other applications of XIP:

除了引导加载程序代码之外,XIP在嵌入式世界中也越来越流行,它可以直接从Flash中执行引导代码以外的程序。NOR flash可以像NAND那样随机访问,因此NOR flash显然是这样的XIP存储和就地执行代码的选择。这有助于节省片上ram区域,而这反过来又可以节省成本。当然,执行速度会比RAM执行慢,但是对于许多嵌入式应用程序来说,它带来了成本优势,并提供了足够的性能。

Load Region Vs Execute Region:

在典型的嵌入式系统中,当系统断电时,所有的程序和数据都存储在非易失性存储器中。然而,当系统通电时,一些数据或代码可以在执行前(如果是代码)或在使用前(如果是数据)移动到系统SRAM(volatile mem)中。

当用户编译并“链接”程序时,会生成该程序的“图像”。这是系统可以执行的二进制可执行文件。

二进制“image”通常分为“Read Only”段(包含代码和只读数据)和“Read Write”段(包含可以初始化或零初始化甚至未初始化的数据)。

通常“只读”段甚至可以放入ROM(与flash相反),并且不需要从内存中的位置移动。它是“从它所在的地方执行”即它是在适当的地方执行的。

而“读写”段必须在执行开始前移入系统的读/写存储器,例如SRAM。

因此,对于代码的某些部分,系统关机时该部分所在的内存位置与系统开机时相同。

但是

对于代码的某些部分,当系统处于关机状态时,该部分所在的内存位置与开机时该部分移动到的内存位置不同。

那么谁来移动代码呢?

链接器将把代码添加到处理器将要执行的程序中,并移动代码中需要在通电时移动到系统SRAM中的那些部分。

现在,这些代码段在“加载”时有不同的地址,这是在NVM中,而在“执行”时,通常是在SRAM中的某个地方。

因此,程序映像可以有“加载区域=执行区域”的部分,并且这部分代码是“就地执行”XIP。

对于代码的某些其他部分,“加载区域不等于执行区域”,并且这部分代码没有在适当的位置执行。

Example:

用户有它的应用程序代码,他编译并链接它以生成名为’图像.bin’. '图像.bin’是14246字节。

这意味着系统必须至少有该数量的NVM可供用户在系统中匹配其二进制图像。

然后,系统将具有一些SRAM(比如16KB,在本例中相当慷慨),这是在0x2000_0000和0x2000_3FFF位置。

现在是图像文件的永久地址’图像.bin’将在NVM中,并将占用系统中的内存地址0x0000_0000到0x0000_37A6。

因此,整个二进制文件的加载地址是从0x0000_0000到0x0000_37A6。这可以是一个NVM(闪存),甚至可以是ROM。

但在执行之前,作为最低要求

应设置堆栈内存。

r/w数据(如变量)必须移动到r/w存储器

系统的R/W内存(假设系统中总共有16KB的SRAM可用)位于内存映射中的其他位置,并假设它是从0x2000_0000到0x2000_3FFF(16KB)。

因此image.bin’将被移动到位于0x2000_和0x2000_3FFF之间的内存位置。堆栈指针将被设置为为为“stack”保留一些内存,这些内存也将位于0x2000_0000和0x2000_3FFF之间。

因此,对于图像.bin’文件,加载地址=执行地址,并且它保持永久性,并且在0x0000_0000和0x0000_37A6之间。这也是XIP,在图像.bin’.

鉴于图像.bin’文件,加载地址在0x00000x000037A6之间,执行地址在0x20000x20003FFF之间。i、 e.对于这些部分,加载地址不等于它们的执行地址。

Let us take another example where the Load address is not the same as execution address:

用户有一个用C编写的关键函数。包含此函数的图像文件放在NVM中。但是,用户希望将此函数移到离处理器非常近的SRAM中,以便快速执行。

现在这个函数有两个内存地址。

  1. 加载地址:当系统关机时,该函数在NVM内存中的位置

2.执行地址:当系统启动并运行时,函数在SRAM内存中的位置。

同样,对于这个函数,加载地址与其执行地址不同。

因此,此代码将不是XIP(就地执行)。

Conclusion:

二进制图像中的某些代码可以从内存中的位置执行。此代码永远不会“移动”到内存的另一个区域,并且具有永久地址。当执行此代码时,它是从它所在的位置执行的,这称为就地执行(XIP)。

基于ARM Cortex-M的SoC存储体系结构和实战相关推荐

  1. 基于ARM处理器的无线SoC实现

    随着新一代移动通信技术的快速发展,无线SoC已经成为物联网产业发展的基础,在嵌入式领域中占有越来越重要的地位.实际生活中,无线通信应用几乎无处不在,例如目前智能家居主流2.4G无线通信方案Zigbee ...

  2. 【2022集创赛】安谋科技杯三等奖:基于ARM处理器的无线SoC设计

    本篇文章是2022年第六届全国大学生集成电路创新创业大赛安谋科技杯三等奖作品分享,参加极术社区的**[有奖征集]分享你的2022集创赛作品,秀出作品风采**活动. 团队介绍 参赛单位:厦门大学 队伍名 ...

  3. 基于Arm Cortex内核的32位MCU和MPU(M0、M0+、M3、M4、M33、M7、A7)

    基于Arm Cortex内核的32位MCU和MPU ST意法半导体产品矩阵 M3典型--STM32 F1系列Cortex-M3基础型MCU M4典型--带有DSP和FPU指令的STM32F4系列高性能 ...

  4. 基于ARM Cortex M0 核心的低功耗蓝牙BLE芯片

    MS1793S 是一款基于ARM Cortex M0 核心的低功耗蓝牙芯片,射频采用2.4GHz ISM 频段的频率,2MHz 信道间隔,符合蓝牙规范.MS1793S使用高性能的ARM®Cortex® ...

  5. android平板开发板,基于ARM Cortex A9开发板平板电脑实战项目

    Cortex A9处理器基于先进的推测型八级流水线,该流水线具有高效.动态长度.多发射超标量及无序完成特征,这款处理器的性能.功效和功能均达到了前所未有的水平,能够满足消费.网络.企业和移动应用等领域 ...

  6. 基于ARM Cortex M0国产32位单片机MM32SPIN220B

    灵动MM32SPIN220B使用高性能的ARM®CortexTM-M0为内核的国产32位MCU,内嵌两组具备有自举二极管的N通道半桥栅极驱动器.MCU微控制器工作频率高达96兆赫兹,内置高速SRAM存 ...

  7. 东芝面向消费设备和工业设备推出基于Arm(R) Cortex(R)-M3且具备先进功能的低功耗微控制器

    东京--(美国商业资讯)--东芝电子元件及存储装置株式会社("东芝")面向消费设备和工业设备推出"M3H族"微控制器,成功扩大其基于Arm® Cortex®-M ...

  8. 意法半导体STM32 ARM Cortex 32位微控制器

    STM32系列32位微控制器基于Arm® Cortex®-M处理器,旨在为MCU用户提供新的开发自由度.它包括一系列产品,集高性能.实时功能.数字信号处理.低功耗/低电压操作.连接性等特性于一身,同时 ...

  9. ARM® Cortex®-M内核单片机STM32家族介绍,覆盖STM32F、STM32H、STM32L全系列

     STM32是ARM®Cortex®-M内核单片机.目前提供10大产品线(F0, F1, F2, F3, F4, F7, H7, L0, L1, L4),超过700个型号.STM32产品广泛应用于 ...

最新文章

  1. Visual Studio 2005 通过静态变量及可系列化的HASHTABLE变量优化工厂模式(Factory)的效率,提升性能(E8.Net工作流应用系统优化系列四)...
  2. Python学习之旅 —— 基础篇(二)数据类型、运算、while循环
  3. Laravel 5 中间件、路由群组、子域名路由、 权限控制的基本使用方法
  4. error while loading shared libraries: xxx.so.x错误的原因和解决办法
  5. 即将直播:新一代大数据技术构建PB级云端数仓实践
  6. 飞机大战--显示玩家飞机
  7. linux磁盘fio压力测试,fio进行磁盘压力测试
  8. 设置RadioButton控件中文本的位置.
  9. Django之内置组件
  10. python零基础能学吗-零基础小白多久能学会python
  11. 转载:你需要知道的16个Linux服务器监控命令
  12. [环境搭建] VS-Visual Studio-IIS Express 支持局域网访问
  13. webstorm 主题设置 皮肤设置
  14. Linux下套接字详解(八)----select模式下服务器(非阻塞,单进程+多进程+多线程)
  15. 【杂七杂八】虚拟机win中 腾讯会议视频黑屏
  16. matlab无法打开wps的xls文件,WPS无法打开XLS文件怎么办 XLS文件出现异常无法打开怎么处理...
  17. 潮阳实验学校文件服务器,【潮实】潮阳实验学校校歌(调教用)
  18. Dev C++ 运行出现:源文件未编译
  19. 神经网络压缩库Distiller学习
  20. S3C2416裸机开发系列十六_sd卡驱动实现

热门文章

  1. 2021-2027年中国玩具行业市场研究及前瞻分析报告
  2. 2022-2028年中国大理石料行业市场研究及前瞻分析报告
  3. 遮罩,在指定元素上进行遮罩
  4. 2022-2028年中国XPS挤塑板行业市场全景评估及产业前景规划报告
  5. Python两个字典键同值相加的几种方法
  6. 高级教程: 作出动态决策和 Bi-LSTM CRF 重点
  7. 梯度下降理解和梯度下降计算检查斯坦福
  8. SpringBoot-web开发(二): 页面和图标定制(源码分析)
  9. 服务器BMC、BIOS、IPMI、UEFI技术解析
  10. h265player开发