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

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

3天内不再提示

感芯科技MC3172多线程实时性测试

韩晓宇 来源:韩晓宇 作者:韩晓宇 2022-09-13 09:15 次阅读

之前在网上看到了感芯科技MC3172MCU,看介绍有硬件64位多线程处理,甚是感兴趣,最近有幸收到一块开发板,所以进行部分性能方面的测试。


MC3172简介

感芯科技第一款32 位 RISC 处理器 MC3172 ,业内首个64线程同步并行运行,线程资源可按需配置,

共享代码段空间与数据段空间,硬件级实时响应,无需中断服务程序,无需实时操作系统。

基于RISC-V RV32IMC 指令集,100%单周期指令,最高200MHz主频,3.37coremark/MHz。

数据段与代码段共享128K字节SRAM,可按需配置为96K代码空间加32K数据空间,或64K代码空间加

64K数据空间,或32K代码空间加96K数据空间,灵活应对各种应用场景。

拥有丰富片内外设:12个可配置通信接口,可按需配置为UASRT或SPI或USBCAN总线形式,满足多通

端口需求;6个双缓冲24位计数器,可提供高精度PWM与输入捕捉;64个GPIO,可提供丰富的自定义控制

接口

产品特性

内核 Core:

- 基于 RV32IMC 指令集,单周期乘法

- 64路线程同步并行运行,无需线程切换

- 线程资源可按需配置且无需操作系统

- 3.37coremark/MHz

- 100%单周期指令,时序确定

- 最高 200MHz 系统主频

存储器:

- 128KB SRAM可按需分配为:

96K代码空间+32K数据空间

64K代码空间+64K数据空间

32K代码空间+96K数据空间

电源管理和低功耗:

- 核心供电电压范围:1.8V~1.98V,

- GPIO供电电压:1.8V~3.3V

系统时钟、复位

- 内嵌 200MHz RC 振荡器

- 内嵌 8MHz RC 振荡器

- 外部支持 4MHz~40MHz 高速振荡器

- 外部支持 最高133MHz 输入时钟

- 上电复位(POR)


多线程实时性测试

由于这个芯片其他的测试例如引脚配置、定时器配置、串口配置等网友已经有诸多帖子,所以我只对目前我感觉好奇的多线程实时性进行测试。

1.多线程配置(使用线程0、1、2、3,分频¼主频)

这里我们4个线程组每个仅使用1个线程,分频每个均为¼主频。线程空间定位2048字节。

pYYBAGMcGpqAAFsUAAGNlJ2V_h0268.png

2.测试思路和主要程序代码

在仅配置4个线程的情况下,我们在不同的线程中通过切换GPIO0、1、2的引脚电平来判断具体线程的响应时序。具体配置如下:

线程0:用来初始化GPIOA引脚的0、1、2为输出引脚。初始化完成后,设定全局变量u8g_sysInitSuccessFlg为1;

初始化完成后,每等待150个延时周期,对u8g_gpioAllowToggleFlg取反,并反转GPIOA0。

线程1:等待线程0对GPIO初始化完成后,实时检测u8g_gpioAllowToggleFlg的状态,并对GPIOA1进行翻转。

线程2:等待线程0对GPIO初始化完成后,实时检测u8g_gpioAllowToggleFlg的状态,并对GPIOA2进行翻转。

通过对比上升沿的时间差,即可知道线程运行的时序差。

volatile u8 u8g_sysInitSuccessFlg=0;
volatile u8 u8g_gpioAllowToggleFlg=0;
void thread0_main(void)
{
    while(1){
        u32 u32gpioToggleDelayCnt;
        INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
        GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN0,GPIO_SET_ENABLE);
        GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN1,GPIO_SET_ENABLE);
        GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN2,GPIO_SET_ENABLE);
        GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN3,GPIO_SET_ENABLE);
        u8g_sysInitSuccessFlg = 1;
        while(1){
            u32gpioToggleDelayCnt = 150;
            while(u32gpioToggleDelayCnt--){NOP();}
            u8g_gpioAllowToggleFlg = !u8g_gpioAllowToggleFlg;
            GPIO_SET_OUTPUT_PIN_INV(GPIOA_BASE_ADDR,GPIO_PIN0);
        }
    }
    thread_end();
}
void thread1_main(void)
{
    while(1){
        while(!u8g_sysInitSuccessFlg){NOP();}
        while(1){
            if(u8g_gpioAllowToggleFlg){
                GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN1);
            }else{
                GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN1);
            }
        }
    }
    thread_end();
}
void thread2_main(void)
{
    while(1){
        while(!u8g_sysInitSuccessFlg){NOP();}
        while(1){
            if(u8g_gpioAllowToggleFlg){
                GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN2);
            }else{
                GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN2);
            }
        }
    }
    thread_end();
}

3.测试结果

信号说明:

黄色:GPIOA0电平 蓝色:GPIOA1电平

(1).整体波形

pYYBAGMcIHCAP8nPAAC5G7K6gk4795.png

整体波形看起来线程基本时同时切换,同步运行,下面放大看看。

(2).上升沿触发波形

pYYBAGMcIRuAKp3EAADJ8eLJusU710.png

注意:这里采用示波器的auto触发模式,可以抓到每次触发的时间会有不同,

  • 最快从线程1切换到线程2的时间为40ns左右。
  • 最慢从线程1切换到线程2的时间为120ns左右。

(3)结果分析

目前芯片配置为内部高速RC时钟200Mhz,配置每个线程的主频为¼主频,也就是50Mhz。

此时对应的线程切换时间范围应该在40ns~120ns之间。

我分析在当前配置下,硬件核心线程切换逻辑是:

poYBAGMcJ6uALowSAACDqBmLoFM350.png

审核编辑:汤梓红

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

    关注

    146

    文章

    16017

    浏览量

    343631
  • 多线程
    +关注

    关注

    0

    文章

    271

    浏览量

    19724
  • RISC-V
    +关注

    关注

    41

    文章

    1901

    浏览量

    45045
收藏 人收藏

    评论

    相关推荐

    什么是并行多线程实时处理器?MC3172开发环境开发实践

    板子上的MCU是个很有意思的东西——并行多线程处理器MC3172
    发表于 09-19 11:28 446次阅读
    什么是并行<b class='flag-5'>多线程</b><b class='flag-5'>实时</b>处理器?<b class='flag-5'>MC3172</b>开发环境开发实践

    科技MC3172开发板体验】点灯大师点个灯+UART通讯

    输入的内容原封不动的丢回去。 查看MC3172手册_V1.11得知: COM3_P2----------PA14 COM3_P3----------PA15 查看IO排序图得知开发板 PA14
    发表于 06-28 15:58

    科技MC3172开发板体验】多线程串口功能测试

    科技MC3172开发板体验】 硬件资源介绍 本次实验主要测试了UART功能。上位机串口助手通过GPCOM8(PC2,PC3)与主板进行通讯,在
    发表于 06-10 14:28

    科技MC3172开发板体验】WS2812音乐灯带

    板子上个月末就拿到手了,由于撞上几门考试耽误了一下。现在我要用这块MC3172开发板做一个我很久之前就想做的音乐流水灯,顾名思义就是灯带会随着音乐变化。 该项目所用的外设有SPI和串口、ADC
    发表于 06-09 00:49

    科技MC3172开发板体验】MC3172开箱初体验

    收到板子很久了才有时间看一下这块板子,延后的报告啊~ MC3172板子还是比较小巧的,就和一个232转USB大小差不多,黑色的PCB深得我心,看着还是挺酷的 这里就是主角,一个拥有64
    发表于 06-07 14:03

    科技MC3172开发板体验】开机测试

    实时与确定性。同时所有线程共享系统全部资源,相比多核MCU,没有核间通信瓶颈,编程更简,效率更高。 以上是MC3172 EVB 开发板正反面 测评流程 开箱
    发表于 06-05 00:08

    科技MC3172开发板体验】+游戏机器人创意设计(1)开源(芯片简介)

    小的这个单片机里头可以让它同时并行运行64个小程序,64个单片机程序,让它并行处理了。等于这个单片机就是把咱们的效率给提高了。它的型号大家可以上网查查:科技的MC3172。 如上方视频,这个
    发表于 06-03 07:38

    科技MC3172开发板体验】环境搭建及板载LED驱动

    本帖最后由 notgood 于 2023-5-29 21:37 编辑 1.开箱照首先感谢电子发烧友以及科技,有幸取得了MC3172开发板免费试用资格。开箱千篇一律,贴两张图: 全家福
    发表于 05-29 21:32

    科技MC3172开发板体验】MC3172初体验

    本帖最后由 james03 于 2023-5-29 10:37 编辑 1、简述MC3172科技推出的一款基于RISC-V指令集的64线程并行运行微控制器,使用裸机的编程,带
    发表于 05-29 10:31

    科技MC3172开发板体验】MC3172开发板一种便捷的多线程开发新途径

    经过一天的捣鼓,总算把MC3172并行多线程实时处理器的开发整明白了。 首先需要准备的开发环境如下: 线程配置工具_V1 开发板程序下载_v1.2 MounRiver Stu
    发表于 05-28 15:22

    科技MC3172开发板体验】测评科技MC3172开发板

    的主角科技MC3172开发板。 开发板背面主芯片 随感科技MC3172开发板发的说明书。 厦门
    发表于 05-25 11:34

    科技MC3172开发板体验】开箱与环境配置

    一、概述 首先,感谢感科技与发烧友给予的这次试用机会。 MC3172芯片,64线程同步并行运行,这种芯片架构是很新颖的,开发方式与逻辑也很是方便,尤其是线程之间的数据同步与通信,直接
    发表于 05-25 08:47

    科技MC3172开发板体验】初次使用多线程开发板

    _Template\\\\MC3172\\\\目录下,可找到\"线程配置器\",见图8所示。 在MC3172_Template\\\\Release\\\\目录下,则可找到\"下载软件\",见图9所示。 图8
    发表于 05-25 00:54

    科技MC3172开发板体验】科技MC3172开发板上手体验

    科技第一款32 位 RISC 处理器** MC3172** ,业内首个64线程同步并行运行,线程资源可按需配置,共享代码段空间与数据
    发表于 05-24 16:24

    【RISC-V开发板】并行多线程处理器MC3172开发资料集合

    厦门科技多线程处理器MC3172开发板 ,64线程同步并行运行,各个线程速度可按需配置,硬件
    发表于 05-23 11:44