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

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

3天内不再提示

先楫HPM6000系列双核MCU怎么玩?

331062281 来源:先楫半导体HPMicro 2023-05-10 14:25 次阅读

多核的微控制器(MCU)向来是设计上的一大挑战,尤其是多核异构的设计。而MCU双核作为其中的精简版本,凭借其超强的处理性能和便捷开发的特性,很快受到业界的好评。先楫半导体先后推出了几款高性能MCU双核产品,集成 2 个 RISC-V 处理器,其中HPM6700系列两个核的最高主频都可以达到816MHz。本文通过对先楫HPM6000系列双核的使用方法、工程编译与调试、双核通信方式和资源分配等内容的介绍,全方位给大家介绍双核的使用和操作,让大家轻松玩转双核,完成更多的片上系统功能开发。

接下来,让我们看一看HPM6000系列双核MCU是如何玩转起来的吧~

双核简介

Introduction

HPM6000系列的双核配置,均集成 2 个 RISC-V 处理器,双核采用主从结构。CPU0 和 CPU1 采用相同配置,如下:

● 支持相同指令集

● 相同容量的 L1 指令和数据缓存

– 32KB L1 I-Cache,4-way,128x 64B cache line per way

– 32KB L1 D-cache,4-way,128x 64B cache line per way

● 相同容量的指令和数据本地存储器:256 KB ILM 和 256 KB DLM

CPU0 和 CPU1 采用相同的存储器映射,以下为例外:

● CPU 自身的指令/数据本地存储器 ILM / DLM 为私有;

● FGPIO 为私有

● 平台中断控制器 PLIC 为私有

● 软件中断控制器 PLICSW 为私有

● 机器定时器 MCHTMR 为私有

双核的三种使用方法推荐

Recommendation

不论是在RAM中运行,还是片上Flash运行,双核固件均是存储在Flash上。客户根据应用场景,选择在上电后将双核各自的镜像从Flash中装载到RAM中执行或者基于Flash片上执行。

根据应用场景,选择合适的运行方式,推荐以下几种:

方案一:Core0 加载到RAM运行,Core1加载到RAM运行

RAM区域可以是各自的ILM,也可以片上的SRAM,或者是SDRAM。当然,装载CODE的RAM区域各自都是独立的。此方案应用与双核固件均占用小,可完全装载到RAM中运行。

固件存储位置:Core0和Core1的固件均存放在Flash指定区域(Flash分区规划)。上电后,BootRom 从指定Flash区域装载Core0镜像到指定RAM运行(type:debug/release),Core0运行后从指定Flash 区域装载Core1镜像到指定RAM,然后运行Core1。

方案二:Core0基于flash xip(flash片上执行)运行,Core1加载到RAM运行

此方案应用与Core0核固件占用大, Core1核固件占用小。通常将Core0用来做应用复杂交互,Core1用来做高实时性,高性能的触发逻辑。

固件存储位置

1). Core0和Core1的固件各自存放在Flash的指定区域(Flash分区规划)。

优点:Core0和Core1可单独OTA。

缺点:需要维护两个固件BIN文件,并存放到各自的区域中。

2). Core1的固件以数组(只读区)镜像的方式存储在Core0的固件中,Core0固件存放在Flash指定区域;官方例程中使用此方案。

优点: 只维护一个固件。

缺点:Core0和Core1不可单独OTA。

方案三:Core0基于flash xip0(flash片上执行)运行,Core1基于flash xip1(flash 片上执行)运行

此方案应用与Core0核和Core1核固件均很大,双核均无法满足放到RAM中运行。

注意:由于双核均基于flash片上执行,如果使用同一个flash XPI,会出现并发访问Flash的情况导致未知异常发生;如果强制顺序访问,访问效率极低,严重拖垮CPU运行速率;故不建议两个核使用同一个flash XPI片上执行。建议使用XPI0和XPI1各自外挂一个FLASH,分别用于Core0 Flash xip0和Core1 Flash xip1。

固件存储位置:Core0和Core1的固件存储在各自外挂的Flash的指定区域中。

双核工程编译与调试

Compilation and Debugging

HPM双核是集成了两个RISC-V 处理器,是两个完全独立的CPU,故HPM双核工程是Core0工程和Core1工程两个独立的工程。因此HPM双核工程编译,其实是两个独立的单核工程的编译。用户只需要建立core0和core1的各自工程编译调试即可。

由于HPM-SDK例程中使用的是方案二,且Core1的固件以数组(只读区)镜像的方式存储在Core0的固件中,导致Core1工程为Core0工程的关联工程。因此在构建工程时,必须先构建生成Core0工程,作为关联工程Core1工程会自动生成。由于Core1的固件是Core0工程中的只读数组,故必须先编译Core1工程生成只读数组镜像后,再编译Core0工程。

如下构建编译调试双核hello world工程:

A. 构建工程

先构建生成Core0工程:

由于Core0是flash片上执行,故type选择:flash_sdram_xip或flash_xip

6c8b5e54-eee5-11ed-90ce-dac502259ad0.png

作为关联工程Core1工程会自动生成:

6c97e250-eee5-11ed-90ce-dac502259ad0.png

B. 编译工程

打开各自的工程(Core0通过GUI工具直接点击Open Project with IDE, Core1对应目录下双击打开工程)。

6ca861b6-eee5-11ed-90ce-dac502259ad0.png

6cb7df9c-eee5-11ed-90ce-dac502259ad0.png

用SES编译各自的工程即可。

6cc5a60e-eee5-11ed-90ce-dac502259ad0.png

6cd28874-eee5-11ed-90ce-dac502259ad0.png

C. 工程调试

一、双核同时调试

基于OpenOCD调试(FT2232/DAP-LINK等)。

为了达到Core0和Core1同时调试,基于OpenOCD调试在HPM-SDK例程中,对Core1的Debug做了如下限制:

1)Core1不启动GDB Server,连接Core0启动的GDB Server。当然使用不同的port来区分是Core0(Port:3333)还是Core1(Port:3334)。

2)Reset 和 Stop时,直接hart停止运行。

如下图:

6cdfb436-eee5-11ed-90ce-dac502259ad0.png

因此,调试HPM-SDK双核例程,步骤如下:

步骤1:Core0的工程调试,和正常的单核调试相同,正常SES启动debug即可。

6ced6694-eee5-11ed-90ce-dac502259ad0.png

步骤2:Core1的工程调试,由于上述限制(为了双核同时调试),必须先将Core0的工程Debug运行,然后在启动Core1的Debug仿真

6cfed33e-eee5-11ed-90ce-dac502259ad0.png

可在Core0 SES终端看到Core1 GDB connect信息

6d0ef660-eee5-11ed-90ce-dac502259ad0.png

基于Jlink 调试

基于Jlink调试,对Core0和Core1的Debug做如下修改:

1. Core0 修改Debug连接target为:J-Link

2. Core1修改Debug连接target为:J-Link

6d1ff10e-eee5-11ed-90ce-dac502259ad0.png

3. Core1修改Debug Device为:HPM6750xVMx_CPU1

6d2d1744-eee5-11ed-90ce-dac502259ad0.png

4. 由于SES修改Device为CPU1(上一步骤修改),联动修改ISA为:rv32i,导致编译等异常。故在Code Generation下改回ISA为:rv32imac

6d3a5dc8-eee5-11ed-90ce-dac502259ad0.png

5. 通常初始化时钟等外设在Core0中完成,故为了双核能同时调试,需先运行Core0 Debug至完成时钟等外设初始化后,方可Core1 Debug运行。

6d49f2ec-eee5-11ed-90ce-dac502259ad0.png

二、双核单独调试

基于 OpenOCD 调试

如果只用来单独调试Core1(Core0的单独调试不做任何修改即可),可修改Core1的Debug配置,如下:

Auto Start GDB Server: Yes

Reset and Stop Command: reset halt

6d57492e-eee5-11ed-90ce-dac502259ad0.png

修改后, 可直接启动Core1 Debug运行。

注意:由于CPU0,CPU1主从架构,通常外设等时钟初始化会在Core0中完成。如果是单独调试Core1,为了确保程序能正常运行,需在Core1工程中初始化时钟等外设。如下:

6d663d4e-eee5-11ed-90ce-dac502259ad0.png

基于 Jlink 调试

单独调试Core1 (Core0的单独调试不做任何修改即可),JLink修改同双核JLink修改一致(可参考上方介绍的内容)。

同样为了确保Core1能正常运行,需在Core1工程中初始化时钟等外设。

6d77e4cc-eee5-11ed-90ce-dac502259ad0.png

下一篇,我们将会给各位小伙伴们介绍双核的通信方式、资源分配和双核应用eRPC架构,敬请期待。

“先楫半导体”(HPMicro)是一家致力于高性能嵌入式解决方案的半导体公司,产品覆盖微控制器、微处理器和周边芯片,以及配套的开发工具和生态系统。公司成立于2020年6月,总部坐落于上海市张江高科技园区,并在天津、深圳、苏州和杭州均设立分公司。核心团队来自世界知名半导体公司管理团队,具有15年以上,超过20个SoC的丰富的研发及管理经验。

先楫半导体以产品质量为本,所有产品均通过严格的可靠性测试。目前已经量产的高性能通用MCU产品系列HPM6700/6400、HPM6300及HPM6200,性能领先国际同类产品,并完成AEC-Q100认证,全力服务中国工业,汽车和能源市场。

审核编辑:汤梓红

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

    关注

    48

    文章

    7482

    浏览量

    151010
  • 处理器
    +关注

    关注

    68

    文章

    19155

    浏览量

    229040
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16977

    浏览量

    350212
  • RISC-V
    +关注

    关注

    44

    文章

    2227

    浏览量

    46000
  • 先楫半导体
    +关注

    关注

    10

    文章

    214

    浏览量

    2066
收藏 人收藏

    评论

    相关推荐

    半导体HPM6750EVKMINI评估板免费试用

    国产高性能MCU来啦,本次给大家带来HPM6000系列旗舰产品HPM6750,它采用
    发表于 04-12 10:40

    半导体重磅推出HPM6300系列—— 高性能,低功耗,高性价比

    6700高性能的特点,在成本,功耗,DSP等各个方面做了进一步的优化,并推出了QFP封装,进一步扩大MCU产品在市场上的覆盖范围。”
    发表于 05-07 17:16

    半导体HPM6700系列正式合入OpenHarmony社区主干

    RISC-V MCU HPM6000系列的旗舰产品,该产品填补了我国在高端工业级MCU领域的空白,为矿业、工业控制、汽车电子、物联网、新能源和边缘计算等应用提供了可靠保障。其采用
    发表于 11-11 10:03

    实现创新升级替代,半导体助力中国MCU “快道超车”

    更加智能、复杂的运算。MCU的主频快速提升,从一两百兆提升到800MHz及以上,甚至跨入GHz领域。的半导体的HPM6000 系列在40
    发表于 04-10 18:39

    请问HPM6000系列MCU如何使用硬件DSP单元?

    HPM6000系列MCU如何使用硬件DSP单元?
    发表于 05-26 06:18

    请问HPM6000系列MCU如何使用硬件浮点数单元?

    HPM6000系列MCU如何使用硬件浮点数单元?
    发表于 05-26 06:49

    半导体HPM6750EVKMINI开发板评测

    “2021年12月17日,首届滴水湖中国RISC-V产业论坛在上海临港举行。会上,上海半导体科技有限公司CEO 曾劲涛介绍了公司HPM6000系列RISC-V通用
    的头像 发表于 06-20 09:14 4615次阅读
    <b class='flag-5'>先</b><b class='flag-5'>楫</b>半导体<b class='flag-5'>HPM</b>6750EVKMINI开发板评测

    如何玩转HPM6000系列MCU

    本文通过对HPM6000系列的使用方法、工程编译与调试、
    发表于 05-10 14:25 802次阅读
    如何玩转<b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b><b class='flag-5'>双</b><b class='flag-5'>核</b><b class='flag-5'>MCU</b>?

    HPM6000系列MCU的通信方式和资源分配

    在《玩转MCU(上)》文章里,我们给大家介绍了HPM6000
    的头像 发表于 05-14 09:58 3442次阅读
    <b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b><b class='flag-5'>双</b><b class='flag-5'>核</b>的通信方式和资源分配

    HPM6000系列微控制器 CMSIS DAP调试器使用指南

    在上海提供的HPM系列MCU评估套件上,多数集成了基于FTDI的FT2232芯片的板载调试器,方便了开发人员直接调试并评估
    的头像 发表于 06-19 17:02 3723次阅读
    <b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b>微控制器 CMSIS DAP调试器使用指南

    HPM6000系列 ADC 相关硬件设计教程

    本文将为大家展示国产芯片HPM6000系列ADC性能出色的测试结果并为您提供了与HPM6000系列微控制器的模数转换器ADC相关的外部电路设计建议。在
    的头像 发表于 07-22 11:18 1259次阅读
    <b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b> ADC 相关硬件设计教程

    HPM6000系列微控制器的BOOT 模式的说明以及相应的外部电路设计建议

    1.简介HPM6000系列MCU目前提供了不同的启动方式,方便客户在研发生产等不同阶段使用。本文提供了HPM6000系列微控制器的BOOT模
    的头像 发表于 07-21 15:15 1593次阅读
    <b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b>微控制器的BOOT 模式的说明以及相应的外部电路设计建议

    半导体 HPM6000 系列常见的两种二级Bootloader 方案介绍

    概述作为高性能、低功耗的嵌入式MCU产品,半导体的HPM6000系列产品广泛应用于多个领域。在嵌入式系统的开发中,Bootloader常
    的头像 发表于 04-02 16:15 1835次阅读
    <b class='flag-5'>先</b><b class='flag-5'>楫</b>半导体 <b class='flag-5'>HPM6000</b> <b class='flag-5'>系列</b>常见的两种二级Bootloader 方案介绍

    玩转MCU(上) HPM6000系列怎么?答案超乎你想象!

    产品,集成2个RISC-V处理器,其中HPM6700系列两个的最高主频都可以达到816MHz。本文通过对
    的头像 发表于 05-12 10:08 3116次阅读
    玩转<b class='flag-5'>MCU</b><b class='flag-5'>双</b><b class='flag-5'>核</b>(上) <b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b><b class='flag-5'>双</b><b class='flag-5'>核</b>怎么<b class='flag-5'>玩</b>?答案超乎你想象!

    玩转HPM6000系列(下)

    在《玩转MCU(上)》文章里,我们给大家介绍了HPM6000
    的头像 发表于 05-15 10:22 1313次阅读
    玩转<b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b><b class='flag-5'>双</b><b class='flag-5'>核</b>(下)