0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MAX32655:为什么两核优于一个核

星星科技指导员 来源:ADI 作者:ADI 2022-12-16 15:54 次阅读

两个核心比一个好!有时,两个不同的内核比两个相同的内核更好!本应用笔记解释了原因。

介绍

当大多数人想到多核处理器时,他们的脑海中会立即想到个人电脑智能手机或其他高级计算设备。这些设备统一具有复杂的用户界面和抢占模式操作系统

当我们阅读新PC或新智能手机的评论时,通常会提到的一件事是内核数量:“该设备中的CPU有四个内核,最多支持八个线程。有了这些信息,我们知道操作系统可以将任务调度到任何内核,以尝试平衡整体工作负载。

在这种环境中,所有计算核心都尽可能相同。毕竟,必须针对不同的 CPU 架构单独编译每个任务是没有意义的。

但对于深度嵌入式处理器,拥有大量相同类型的内核可能不如拥有多个专用内核那么理想。

差异化内核案例

首先,在许多深度嵌入式应用程序中,甚至可能没有操作系统。由设计人员决定哪些任务在哪些内核上运行、何时运行以及运行多长时间。其次,主任务很可能在单个线程中运行,任何其他内核都将在那里运行特定的专用任务。

在这些情况下,人们并不真正关心内核是否都相同,一个CPU处理所有监督任务,另一个从属计算内核处理专用任务。拥有在特定区域具有更多功能、使用更少功率或消耗更少芯片硅面积的专用内核更有意义。

例如,考虑MAX32655。它是一款基于 Arm Cortex-M4 的微控制器,Arm Cortex-M4 是一款功能强大、备受推崇的单线程 CPU 内核。MAX32655具有半兆字节闪存、128KRAM和许多外设,包括低功耗蓝牙无线电。®

现在,就停在那里。低功耗蓝牙可能听起来像是硬件功能,但它与软件和硬件一样多。你看,硬件实际上相当简单:发射器和接收器必须具有一定的频率捷变性,因为它们必须调谐到四十个可能的通道中的任何一个,并且它们必须快速完成。发射器和接收器均可快速打开和关闭以节省功率。他们必须处理高斯频移键控调制和解调。不是微不足道的,但也不是特别具有挑战性。

但是软件 - 这可能是真正的挑战!主机必须管理一整套协议——属性协议、链路层控制和适应协议、安全管理器协议等。并且有一个接口将主机连接到控制器层。正是这一层管理无线电硬件,也不是微不足道的。有一个设备管理器、链路管理器和链路控制器——这些功能块将无线电硬件的细节抽象到主机协议。

关于BLE软件堆栈的好消息是您不必编写它。在大多数环境中, 当您指定特定的 BLE 设备时,软件堆栈就会出现.坏消息是BLE软件堆栈要求很高。这并不是说它需要特别大的处理器带宽或存储,但BLE堆栈中的时序至关重要。这意味着当BLE需要完成某事时,需要立即完成!如果微控制器内核已经在执行一些时间关键型功能,则必须提供一些东西!

这就是第二个核心的用武之地。主内核被释放出来,将其资源投入到用户程序中,因为它可以将BLE任务移交给第二个内核。没有延迟问题,不用担心BLE堆栈会在错误的时刻中断内核。第二个独立核心解决了很多问题!

选择合适的核心

第二个内核对于运行BLE堆栈是有意义的。但是选择哪个核心呢?

一种选择是使用第二个Arm Cortex-M4。M4带来了很多资源。它是AMBA总线的原生版本,蓝牙库都针对Cortex-M系列内核进行了很好的编译。那么,为什么不是第二个 M4?

事实是,与Arm Cortex-M4一样高效,它比运行BLE堆栈的专门任务所需的CPU更多。更小,更慢,更适度的CPU会做得很好。但是哪个 CPU?

RISC-V(发音为risk-five)核心问好!与Arm Cortex-M4一样,它是一个基于RISC架构的32位CPU。RISC,或简化指令集计算,是一种计算机体系结构哲学,它断言一小组简单的指令比一大组更复杂的指令更有效地执行。在大多数情况下,RISC在很大程度上赢得了CISC(复杂指令集计算)的争论。但是CISC计算仍然有一个巨大的堡垒:x86架构。大多数其他计算环境——以及几乎所有嵌入式处理器——都采用了RISC。

在评估新的CPU内核时,首先跳出的三件事是指令集架构,寄存器补码和程序员模型。下一节将探讨RISC-V和Arm Cortex-M4之间的这些因素有何不同。

比较指令集

在查看指令集之前,请记住:像C这样的高级语言不是计算机的母语。C 编译器将程序转换为一组由内核执行的机器指令。一个 C 语句可以转换为数十条机器指令。C编译器已经变得如此高效,以至于汇编语言编程,即一个语句完全转换为一个机器指令,已经成为一种失传的艺术。

然而,C语句——或Python,或JavaScript,或其他高级语言——最终用原生机器代码表达。因此,关注指令集的工作原理是有意义的。

Arm Cortex-M4基于ARMv7E-M指令集架构。虽然Arm Cortex-M4是32位CPU,但ARMv7E-M指令集使用Thumb-2指令编码,大多数情况下,这些是16位指令。这里有一个故事。

最初,Arm 指令集是 32 位的。尽管底层架构是RISC,但指令集很丰富,但在代码大小方面并不是特别有效。Arm在90年代中期提出了Thumb编码,以解决这些关于指令集效率的担忧。拇指指令的长度为 16 位,与以前使用的 32 位编码的子集非常接近。指令集效率更高,但留下了许多功能。

Thumb-2 于 2003 年推出,混合使用 16 位和 32 位编码,在恢复一些 32 位编码功能的同时保留了大部分代码密度优势。当然,这种方案有一个缺点:它会导致可变长度指令集。但是今天,Thumb-2编码已经成熟且易于理解,实际上是Arm Cortex-M4内核支持的唯一指令编码。

相比之下,大多数RISC-V方案(包括Maxim的MAX32655中使用的实现方案)都使用纯32位编码。RISC-V支持可选的压缩编码,其术语为16位指令支持。但与 Arm Cortex-M4 中的 Thumb 指令编码不同,它确实是可选的。

但是有什么指示呢?

ARMv7E-M和RISC-V指令集都支持负载存储架构。这意味着,算术和逻辑指令的操作数必须从内存显式加载到寄存器中,一旦执行操作,结果必须显式存储回内存。

负载存储架构是RISC内核的标志,但除此之外,ARMv7E-M指令集并没有太多的“减少”。ARM指令集包含数十条指令和指令变体,具有条件执行,作为指令操作数的移位,许多位和字节操作子指令以及多种内存寻址模式。把这一切加起来,它使ARM内核成为一个相当复杂的逻辑。

RISC-V并非如此。RV32I指令集中只有40条基本指令。由于其中许多可以分组到指令族中,因此指令集变得更加易于理解:有六个分支指令,五个加载指令,三个存储指令和两个用于函数调用的“跳转和链接”指令。把这些指令家庭放在一起,只有28个指令需要考虑。

为了使事情更简单,只有六种编码格式:注册到注册、立即、上层立即、存储、分支和跳转。就是这样!RISC-V编译器的代码生成部分很容易。

看看所有这些寄存器!

现在,寄存器补充:ARMv7E-M 架构指定了 16 个寄存器,其中 13 个是通用寄存器。RISC-V架构指定了32个寄存器,其中除一个寄存器外,其他所有寄存器都是通用的。以下是它们的工作原理。

臂寄存器命名为 R0 到 R15。但是前三个寄存器有特殊的用途:R15是程序计数器,对R15的任何写入实际上都是跳转到该位置。R14是链路寄存器。执行分支和链接(函数调用)时,返回地址存储在 R14 中。R13 是堆栈指针。PUSH指令递减R13并将指定寄存器中的值存储到降序存储器位置;POP 指令从升序内存位置加载值并递增 R13。

RISC-V寄存器被命名为x0到x31,只有一个用户可见的特殊用途寄存器:x0在读取时始终返回零值,写入x0的任何内容都会被丢弃。这对简化指令集编码来说是一个真正的福音。

所有其他寄存器都是真正的通用寄存器。按照惯例,x1 用作返回地址(Arm 称之为链接寄存器),x2 用作堆栈指针,但硬件中没有任何内容可以强制执行(除非在核心设计中实现了压缩扩展,但那是另一回事)。虽然 ARM BL(分支和链接)指令始终将返回地址存储在 R14 中,但 RISC-V JAL(跳转和链接)指令允许您指定获取返回地址的寄存器。

RISC-V指令集中似乎缺少一些指令,例如寄存器到寄存器的移动操作!相反,一个寄存器的内容使用 ADDI 指令移动到另一个寄存器:ADDI rd, rs, 0 将 rs 的内容添加到值零并将结果存储在 rd 中,从而有效地将 rs 中的任何内容移动到 rd。整洁!

您可能认为 ADDI 是 MOVE 的糟糕替代品,因为算术指令会修改标志寄存器,而 MOVE 不会。在RISC-V内核中,这不是一个问题,因为没有标志寄存器!相反,分支指令 - BEQ(如果相等则分支)、BNE(如果不等于则分支)、BLT(如果小于则为分支)、BGE(如果大于或等于则为分支)、BLTU(如果小于,则为分支,无符号)和 BGEU(如果大于或等于,则为分支,无符号)——都接受两个寄存器说明符,执行比较,然后有条件地获取分支。

但是,如果结果为零,如何分支?只需写 BEQ rs x0 .请记住,x0 始终包含值零。这使得编写测试零、非零、负或正值的分支指令变得容易。

因此,虽然RISC-V的指令集和程序员模型对于那些习惯于Arm指令集的人来说可能看起来有点陌生,但它确实功能强大且完整。

这些内核是如何堆叠的?

所以,现在我们来到一个大问题:为什么要使用RISC-V内核来运行BLE堆栈?

答案在于可定制性。所有商用CPU内核都允许一定程度的定制,这也适用于Arm Cortex-M系列。不过,一般来说,Arm 内核中提供的自定义选项是大粒度的。例如,它是否具有浮点运算或嵌入式跟踪?

相比之下,RISC-V内核具有芯片设计人员可以启用或禁用的一整套扩展:三种浮点单元(单精度,双精度和四精度),原子指令,整数乘除法,压缩指令以节省代码空间,以及其他规格尚未冻结。

在设计运行BLE控制器堆栈的内核时,RISC-V内核只需整数乘法和除法扩展即可构建。没有必要包含其他功能, 因为它们对运行 BLE 堆栈没有任何帮助.因此,没有理由占用硅空间并消耗支持这些功能的功率。我们可以比主 Arm Cortex-M4 更慢地为核心计时。更慢地对内核进行计时可以降低内核的功耗。

这就是为什么提前知道第二个内核的用途有助于芯片设计人员并有助于创造最佳的微控制器体验!

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 智能手机
    +关注

    关注

    66

    文章

    18487

    浏览量

    180176
  • 寄存器
    +关注

    关注

    31

    文章

    5342

    浏览量

    120306
  • 操作系统
    +关注

    关注

    37

    文章

    6818

    浏览量

    123320
收藏 人收藏

    评论

    相关推荐

    全志T113双异构处理器的使用基于Tina Linux5.0——异构双通信验证

    6、双通信验证 6.1、C906小创建通讯节点 在C906小串口终端建立两个通讯节点用于监听数据,输入eptdev_bind test 2 cpu0 >eptdev_bin
    发表于 11-20 09:47

    SEGGER为ADI超低功耗微控制器提供SystemView软件分析工具

    78000,MAX78002,MAX32561,MAX32570,MAX32655,MAX32672,M
    的头像 发表于 11-09 17:32 608次阅读

    Vivado中FFT IP的使用教程

    本文介绍了Vidado中FFT IP的使用,具体内容为:调用IP>>配置界面介绍>>IP端口介绍>>MATLAB生成测试数据>>测试verilogHDL>>TestBench仿真>>结果验证>>FFT运算。
    的头像 发表于 11-06 09:51 812次阅读
    Vivado中FFT IP<b class='flag-5'>核</b>的使用教程

    如何申请xilinx IP的license

    在使用FPGA的时候,有些IP是需要申请后才能使用的,本文介绍如何申请xilinx IP的license。
    的头像 发表于 10-25 16:48 336次阅读
    如何申请xilinx IP<b class='flag-5'>核</b>的license

    高斯滤波的卷积怎么确定

    N为奇数,如3、5、7等。奇数大小的卷积有助于确定一个中心像素点,便于计算。 大小选择 :卷积的大小决定了滤波器的范围。较大的卷积核
    的头像 发表于 09-29 09:29 522次阅读

    关于2K1000LA的间中断

    我试图阅读2K1000LA处理器用户手册(V1.0)以在我开发的操作系统中支持多核启动。实际上我对此有些疑惑,2K1000LA启动的时候,是两个核心都会起启动,还是只会启动
    发表于 08-27 22:04

    高压无线相器的近程相——每日了解电力知识

    连接自检测试线,发射器启动,蜂鸣器鸣叫,红绿指示灯交替闪烁。接收主机开机,在近程相模式下显示对应发射器信息,则发射器与主机工作均正常。 提示: 1)自检时发射器与接收主机的距离大于0.5米为宜。当距离小于0.2米时,可能只
    的头像 发表于 07-05 09:14 342次阅读
    高压无线<b class='flag-5'>核</b>相器的近程<b class='flag-5'>核</b>相——每日了解电力知识

    FPGA的IP软使用技巧

    仿真,需要经过综合以及布局布线才能使用。 IP软的优点在于其灵活性高、可移植性强,允许用户自配置。然而,其缺点在于对模块的预测性较低,在后续设计中存在发生错误的可能性,有定的设计风险。 选择合适
    发表于 05-27 16:13

    联发科天玑9400首发新代超大X5:继续全大

    联发科天玑9400将在今年晚些时候推出新代超大X5,并继续采用全大的设计思路。
    的头像 发表于 04-30 11:19 726次阅读

    关于FPGA IP

    对于深入学习使用FPGA的小伙伴们,特别是些复杂的、大规模的设计应用,适宜的IP核对开发能起到事半功倍的作用。IP的概念与我们sdk里库的概念相似。IP即电路功能模块,用户可以直接调用这些模块
    发表于 04-29 21:01

    STM32MP157两个A7核能跑两个系统吗?

    请问STM32MP157的两个A7,能像其它双CPU样运行AMP模式:
    发表于 03-21 06:50

    TC387配置Autosar OS后主跑飞了怎么解决?

    使用TC387芯片配置Autosar OS发现主跑飞了,其他正常运行OS任务切换,PC指针指向_IF_CONST区域,D[4]寄存器为1,D[15]寄存器为4,根据这两个寄存器用计算规则计算出的TCN和TIN好像有问题,在T
    发表于 03-06 08:24

    在tc275上怎么用触发另一个产生软中断?

    在tc275上怎么用触发另一个产生软中断?
    发表于 02-19 08:14

    PSoC双架构中双都可以访问全部外设吗?

    你好!如标题:PSoC 双架构中两个内核对芯片的全部外设都有直接访问能力嘛?如果都可以直接访问,那IPC模块的主要应用场景是哪些呢?
    发表于 02-02 11:44

    请问ADSP BF609的双运行同时跑两个系统,需要如何设置,要注意哪些问题?

    请问ADSP BF609的双运行同时跑两个系统,需要如何设置,要注意哪些问题?另外对另一个运行的实时性处理要求的高些,尤其是系统启动时
    发表于 01-12 08:08