神农鼎 发表于 2024-9-15 11:24:22

AI8051U@40MHz
TFPU@120MHz-异步PLL高速时钟
的应用案例
异步时钟间的数据传输用的是CPU时钟,40MHz
CPU送数据到TFPU, 我印象要2个CPU时钟
TFPU送回数据到CPU,我印象要2个CPU时钟

虽然浪费了 4个 CPU时钟,但
TFPU@120MHz, Ai8051U的CPU@40MHz
===已量产
TFPU@250MHz, Ai8052U的CPU/DSP@80MHz
===2024年底送样

TFPU@500MHz, Ai32G400K1M的CPU/DSP@120MHz
===2025年底送样

TFPU数学加速器中的
正弦/余弦 计算尤其需要 高速异步时钟的支持


杨为民 发表于 2024-9-15 11:46:47

社区闲人 发表于 2024-9-15 11:09
回复杨老师:
(1)当你的程序运行起来后,你用什么方法测试证明这时TFPU工作在120MHz了?
是通过反推发 ...

非常好!专家与爱好者的重要差别就是专家会用正确的测量方法来支持自己的结论。
所以发帖不但要介绍结果,最好还要介绍测量的和证明的方法。
所谓授人以鱼不如授人以渔就是此道也





神农鼎 发表于 2024-9-15 12:07:30











社区闲人 发表于 2024-9-15 20:18:53

测量PLL时钟的代码:



#include "ai8051u.H"//包含此头文件后,不需要再包含"reg51.h"头文件
//#include "intrins.h"

#define FOSC 30000000UL



       
void delay()
{
        int i;
        for (i=0; i<100; i++);
}


void PLL_Init()
{
//CLKSEL &= ~0x80;      //选择PLL的96M(*8)作为PLL的输出时钟
    CLKSEL |= 0x80;         //选择PLL的144M(*12)作为PLL的输出时钟

    USBCLK &= ~0x60;
//USBCLK |= 0x00;         //PLL输入时钟为12M则选择1分频
//USBCLK |= 0x20;         //PLL输入时钟为24M则选择2分频
    USBCLK |= 0x40;         //PLL输入时钟为48M则选择4分频
//USBCLK |= 0x60;         //PLL输入时钟为96M则选择8分频

    USBCLK |= 0x80;         //启动PLL

    delay();                //等待PLL锁频,建议50us以上

    HSCLKDIV = 0;                  //高速外设时钟源不分频
//TFPU_CLKDIV = 0;      //TFPU时钟源不分频

//CLKSEL &= ~0x40;      //选择系统时钟作为高速外设时钟源
    CLKSEL |= 0x40;         //选择PLL时钟作为高速外设时钟源
}




char ReadPWMA(char addr)
{
        char dat;
        while (HSPWMA_ADR & 0x80); //等待前一个异步读写完成
        HSPWMA_ADR = addr | 0x80; //设置间接访问地址,只需要设置原 XFR 地址的低 7 位
        //HSPWMA_ADDR 寄存器的最高位写 1,表示读数据
        while (HSPWMA_ADR & 0x80); //等待当前异步读取完成
        dat = HSPWMA_DAT; //读取异步数据
        return dat;
}
void WritePWMA(char addr, char dat)
{
        while (HSPWMA_ADR & 0x80); //等待前一个异步读写完成
        HSPWMA_DAT = dat; //准备需要写入的数据
        HSPWMA_ADR = addr & 0x7f; //设置间接访问地址,只需要设置原 XFR 地址的低 7 位
        //HSPWMA_ADDR 寄存器的最高位写 0,表示写数据
}

int main()
{
    WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度
       
    P0M0 = 0; P0M1 = 0;
    P1M0 = 0; P1M1 = 0;
    P2M0 = 0; P2M1 = 0;
    P3M0 = 0; P3M1 = 0;
    P4M0 = 0; P4M1 = 0;
    P5M0 = 0; P5M1 = 0;
       
    PLL_Init();

    //DMAIR = 0x3e;   //选择 系统时钟 为TFPU时钟源
    //DMAIR = 0x3f;   //选择 PLL时钟 为TFPU时钟源
       
       
        HSCLKDIV = 0; //HSPWM/HSSPI 时钟源不分频
        HSPWMA_CFG = 0x03; //使能 PWMA 相关寄存器异步访问功能
        PWMA_PS = 0x00; //PWMA_CC1/CC1N 高速 PWM 输出到 CC1/CC1N 口
                      //注意:PWMA_PS 不能使用异步方式进行读写
       
        //通过异步方式设置 PWMA 的相关寄存器
        WritePWMA((char)&PWMA_CCER1, 0x00);
        WritePWMA((char)&PWMA_CCMR1, 0x00); //CC1 为输出模式
        WritePWMA((char)&PWMA_CCMR1, 0x60); //OC1REF 输出 PWM1(CNT<CCR 时输出有效电平 1)
        WritePWMA((char)&PWMA_CCER1, 0x05); //使能 CC1/CC1N 上的输出功能
        WritePWMA((char)&PWMA_ENO, 0x03); //使能 PWM 信号输出到端口 P1.0/P1.1
        WritePWMA((char)&PWMA_BKR, 0x80); //使能主输出
        WritePWMA((char)&PWMA_CCR1H, 500>>8); //设置 PWM 占空比为 500 个 PWM 时钟
        WritePWMA((char)&PWMA_CCR1L, 500);
        WritePWMA((char)&PWMA_ARRH, 999>>8); //设置输出 PWM 的周期为 1000 个 PWM 时钟
        WritePWMA((char)&PWMA_ARRL, 999);
        WritePWMA((char)&PWMA_DTR, 10); //设置互补对称输出 PWM 的死区
        WritePWMA((char)&PWMA_CR1, 0x01); //开始 PWM 计数

        while (1);
}



烧录时设置频率为30MHZ。

有: (30MHZ / 4 ) * 12----> PLL时钟--->90MHZ,

用逻辑分析仪抓取P10/P11端口,输出的PWM波形的周期值为11.08us。

计算值为:
(1 / 90MHZ) * 1000 === 11.1us

计算值 和 测量值 基本一致。

神农鼎 发表于 2024-9-18 16:34:12

AI8051U的空间代码效率, 在32位模式时是268条强大的指令,
空间代码效率比111条指令的51高,
相当于 8H8K64U的 1.15倍,64K * 1.15 = 73.6K 的51程序;

AI8052U是 256K Flash, 144K SRAM
===DSP, TFPU, LQFP100/64...

AI8058U如果做 1M字节的Flash ?
大家考虑下能干啥,字库 ? 图片 ?
===SRAM做多大 ? 300K/400K/500K ?

AI8051U, AI8052U 参考资料下载
深圳国芯人工智能有限公司-产品_AI8051U系列 (stcai.com)

大叶子 发表于 2024-9-25 12:10:07

好知识,善传播

凌伤 发表于 2024-9-29 18:45:09

学习了!!!!

王子商行 发表于 2024-10-3 23:15:56

stc81k08可以计算1/3=0.3333333吗;定义float不行,只能小数点后6位准的,定义double和float结果一样的,u32这样的大整数也不能计算,有老师知道的吗

cnos 发表于 2024-10-11 00:34:49

哇,那什么时候把乘加也做了,做卷积啊。要不出个硬件卷积单元啊,或者硬件FFT单元{:4_202:}

神农鼎 发表于 2024-10-13 13:10:22

Ai8052U 有 DSP 功能


USB 2.0,Full-Speed,16个双向端点,支持4种端点传输模式
2组 CAN-FD !!!3组 Lin
DSP, 32位8051,浮点,三角函数,DMA-P2P 支持外设直接到外设
144K SRAM, 256K Flash,支持 32位8051指令/8位8051指令
AI8052U-144K256-LQFP100, LQFP64, LQFP48/44
===管脚 兼容 32G12K128, 8H8K64U
TFPU@250MHz,硬件三角函数/浮点;PWM@250MHz; DSP@80MHz
6组高级16位PWM定时器, 24-通道:
    3 组 4 对互补PWM(PWMA/PWMC/PWME),方便控制 3组3相电机
    3 组 4 个单独PWM(PWMB/PWMD/PWMF)
2组独立 真12位ADC, 2组独立 12位DAC,
4组独立运放, 4组独立比较器
T0/T1/T2/T3/T4/T5/T6, T7/T8/T9/T10,
RTC-年月日星期时分秒时钟,T11系统定时器
串口1/串口2/串口3/串口4/串口5/串口6/串口7/串口8,
===都可以共享T2做波特率发生器
备战 2025年 全国大学生智能汽车竞赛, 全国大学生电子设计竞赛
大家先看下管脚图合不合理,12月流片,春节回来,新年送样
帮设计强大的 AI8052U-144K256-LQFP100 实验箱
=== 辛苦费,RMB2000
DSP, AI8052U-支持32位/8位8051指令,144K SRAM, LQFP100/64/48, PWM+TFPU@250MHz - 视频教学,《单片机原理及应用》教学改革及实战技术交流会,本版限制发帖 国芯技术交流网站 - AI32位8051交流社区 (stcaimcu.com)

页: 1 [2] 3 4
查看完整版本: uS级【硬件三角函数/浮点运算器,TFPU】@Ai8051U, @120MHz, 计算sin函数@1.2uS