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

之前在网上看到了感芯科技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或usb或can总线形式,满足多通
信端口需求;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字节。
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).整体波形 整体波形看起来线程基本时同时切换,同步运行,下面放大看看。
(2).上升沿触发波形 注意:这里采用示波器的auto触发模式,可以抓到每次触发的时间会有不同,
最快从线程1切换到线程2的时间为40ns左右。 最慢从线程1切换到线程2的时间为120ns左右。 (3)结果分析 目前芯片配置为内部高速rc时钟200mhz,配置每个线程的主频为¼主频,也就是50mhz。
此时对应的线程切换时间范围应该在40ns~120ns之间。
我分析在当前配置下,硬件核心线程切换逻辑是:


电解液企业在2021年将面临多重机遇和挑战
赛灵思三大产品介绍
中国工业迷失了计算机时代,不能再迷失互联网时代
单总线结构
了解一下全球知名传感器企业有哪些?
感芯科技MC3172多线程实时性测试
单片机的GPIO如何实现触摸按键的功能呢?
详解天线如何接在射频电路?
网络音频模块可开发网络寻呼话筒
三星的oled屏将予小米供应,尺寸为六英寸?
同VLAN不同网段能否Ping通
地面气象观测系统的组成部分
魅族疯了?Pro5 3G+32G+2116万像素 京东仅需1499
中国三大芯片公司你知道嘛?
颜值担当千元机的首选:华为荣耀8青春版
2017年电信业值得关注的7大颠覆性技术
应用转基因检测试剂盒时需要注意的事项有哪些
小米智能硬件战略成效初显 2016年收入将超150亿
高德正式发布国内首个司机服务地图
从工业到医疗再到太空机器人 机械臂都有什么不同?