找回密码
 立即注册
楼主: 神***

讨论稿,向【64位超算中心】前进 ! DSP/DPU351 + TFPU, DPU32@全新32位8051

[复制链接]

该用户从未签到

551

主题

9253

回帖

1万

积分

管理员

积分
13989
 楼主| 发表于 2024-4-1 21:41:53 | 显示全部楼层


内部已有部分建议:

既然有了无符号数的64位/32位除法和32位/16位除法,是否需要一次性做全
===增加 有符号数的 64位/32位除法 和 32位/16位除法

另外,把Status Register CY+OV寫給CPU PSW,这样设计会使DPU251更加好用

增加的BCD和BIN之间的转换,非常有用

【增加的16位和32位的加减法在80251原本的指令就有支持,
===是否需要增加?还是说是为8051内核准备的?】
===是为再转到 STC8H上,暂时保留已有的 STC32的指令

点评

有了无符号数的64位/32位除法和32位/16位除法,必须有有符号数的 64位/32位除法 和 32位/16位除法, 因为两种除法的结果是不一样的。  详情 回复 发表于 2024-4-2 02:21
数据处理中,大部分计算都是有符号的,简单计算才用无符号。 没有留意取32位绝对值C251是有专门指令还是像C51用函数实现?  详情 回复 发表于 2024-4-1 22:14
回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

2929

回帖

6591

积分

超级版主

积分
6591
发表于 2024-4-1 21:43:36 | 显示全部楼层
本帖最后由 梁工 于 2024-4-1 22:15 编辑

研究了一晚上,指令都比较齐全。
有点疑问:

加法运算没有说明是否有符号,没看到“32位有符号加法”这样的描述,
大部分加法计算都是要带符号的。
当然,能区分有符号、无符号是更好的。
               

乘加运算一定要是有符号的加法运算。



还有,用户编程一般都是C语言,具体怎么使用呢?
比如我要执行下面的8阶数字滤波算法,其实就是有符号整数乘加运算,每次循环(2阶)计算5次有符号整数乘加运算,8阶就是4*5=20次有符号乘加运算:

#define ORD       8           //滤波器阶数, 必须是偶数
long   edata Xin[ORD/2][3];
long   edata Yout[ORD/2][2];
long   edata Coef[(ORD*5)/2];        //A0 A1 A2 B0 B1
long edata out;
long code Coef[20]={             //low pass, fc=250/8192, 8阶巴特沃斯
   252, 505, 252, -54201, 22446,
   259, 518, 259, -55533, 23803,
   271, 543, 271, -58173, 26492,
   289, 579, 289, -62026, 30417
};

//========================================================================
// 函数: void        filters(u16 adc)
// 描述: 8阶滤波函数.          30MHz计算时间: 19.2us或20.8us @30MHz.
// 参数: adc: 当前采样值.
// 返回: none.
// 版本: V1.0, 2020-9-8
//========================================================================
void        filters(u16 adc)
{
     u8 p;
     out = (long)adc - 2048;        //输入ADC值为12位无符号整数, 转为32位有符号整数

     for(p=0; p<ORD/2; p++)
     {
           Xin[p][2] = Xin[p][1];
           Xin[p][1] = Xin[p][0];
           Xin[p][0] = out;
           out = (Coef[p*5+0] * Xin[p][0] + Coef[p*5+1] * Xin[p][1] + Coef[p*5+2] * Xin[p][2] - Coef[p*5+3] * Yout[p][0] - Coef[p*5+4] * Yout[p][1])/32768; //@30MHz, 整数计算1次乘加运算0.56us.
           Yout[p][1] = Yout[p][0];
           Yout[p][0] = out;
     }
}


这是STC32F12K54的程序,不知道C251编译后,是怎么调用上述的DPU指令的?

点评

“这是STC32F12K54的程序,不知道C251编译后,是怎么调用上述的DPU指令的?” 下面以MAC乘加指令为例来说明: (1)由于C251编译器是依据80251指令集来设计的,在80251指令集里没有“STC 80351”指令集中的乘加“M  详情 回复 发表于 2024-4-4 23:42
问题:加法运算没有说明是否有符号,没看到“32位有符号加法”这样的描述 解答: (1)无论有符号无符号的数,在计算机中均以补码形式存在,只是解读不同 (2)如果是两个32位(16位、8位)的整数相加(相乘)的  详情 回复 发表于 2024-4-2 01:39
回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

2929

回帖

6591

积分

超级版主

积分
6591
发表于 2024-4-1 22:14:00 | 显示全部楼层
神农鼎 发表于 2024-4-1 21:41
内部已有部分建议:

既然有了无符号数的64位/32位除法和32位/16位除法,是否需要一次性做全,

数据处理中,大部分计算都是有符号的,简单计算才用无符号。
没有留意取32位绝对值C251是有专门指令还是像C51用函数实现?
回复 支持 反对 送花

使用道具 举报

该用户从未签到

61

主题

623

回帖

1万

积分

荣誉版主

积分
10822
发表于 2024-4-2 01:39:57 | 显示全部楼层
梁工 发表于 2024-4-1 21:43
研究了一晚上,指令都比较齐全。
有点疑问:
加法运算没有说明是否有符号,没看到“32位有符号加法”这样的 ...

问题:加法运算没有说明是否有符号,没看到“32位有符号加法”这样的描述

解答:
(1)无论有符号无符号的数,在计算机中均以补码形式存在,只是解读不同


(2)如果是两个32位(16位、8位)的整数相加(相乘)的结果为64位(32位、16位)的整数
那么就需要区分32位(16位、8位)有符号加法(乘法)”和32位(16位、8位)无符号加法(乘法)”。



(3)如果是两个32位(16位、8位)的整数相加(相乘)的结果为32位(16位、8位)的整数
那么就不需要区分32位(16位、8位)有符号加法(乘法)”和32位(16位、8位)无符号加法(乘法)”。
原因是:无论是32位(16位、8位)有符号加法(乘法)”或者32位(16位、8位)无符号加法(乘法)”,
运算结果的低32位(16位、8位)的二进制都是一样的,并且按补码来解读,都是正确的



(4)因此在上面指令中,32位乘法的结果是64位的,所以分有符号和无符号的乘法。
而32位的加法结果是32位+CY的,所以不需要区分有符号和无符号的加法。16位运算同理





点评

谢谢解答!  详情 回复 发表于 2024-4-2 09:40
回复 支持 反对 送花

使用道具 举报

该用户从未签到

61

主题

623

回帖

1万

积分

荣誉版主

积分
10822
发表于 2024-4-2 02:21:24 | 显示全部楼层
神农鼎 发表于 2024-4-1 21:41
内部已有部分建议:

既然有了无符号数的64位/32位除法和32位/16位除法,是否需要一次性做全,

有了无符号数的64位/32位除法和32位/16位除法,必须有有符号数的 64位/32位除法 和 32位/16位除法,

因为两种除法的结果是不一样的。
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    0

    主题

    43

    回帖

    240

    积分

    中级会员

    积分
    240
    发表于 2024-4-2 08:22:53 | 显示全部楼层
    从未如此激动,8051进展神速
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2929

    回帖

    6591

    积分

    超级版主

    积分
    6591
    发表于 2024-4-2 09:40:45 | 显示全部楼层
    杨为民 发表于 2024-4-2 01:39
    问题:加法运算没有说明是否有符号,没看到“32位有符号加法”这样的描述

    解答:

    谢谢解答!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    8 小时前
  • 签到天数: 67 天

    [LV.6]常住居民II

    4

    主题

    414

    回帖

    1118

    积分

    金牌会员

    积分
    1118
    发表于 2024-4-2 10:01:12 | 显示全部楼层
    给一个大大的赞
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    13 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3956

    积分

    荣誉版主

    积分
    3956
    发表于 2024-4-2 21:48:05 | 显示全部楼层
    因明天一早要出差, 今晚初步看了3遍.
    有一点强调一下:
    1. 80251的 ECX,EDX, 坚决不能使用DR12, 可使用 DR16, DR20
    因为 DR12 被编译器C251占用, 如要使用, 需增加一堆保护恢复之类指令.

    截图202404022320402076.jpg

    下面是个人感想, 无关主题:
    2. 无符号数的四则运算 比 有符号四则运算重要, 只有单一运算, 选无符号,
    当然, 两者都选也行, 部分有/无符号运算通用(加减乘).
    3. 关于 新型 STC8, 计划是单核为主(纯51核)?  还是双核为主(51核+251核BIN模式)?
    如以双核为主, DPU32中的16位指令及部分32位指令, 个人认为没必要.
    因为通过子程序调用 DPU32指令的运算速度, 往往没有直接调用 251指令的速度快.
    注: 前提是新型 STC8(双核), 能在 51核模式下, 运行 251核 BIN模式指令.

    另外, 假如新型 STC8, 以单核(纯51核)为主, 增加 DPU32, 实际算力提升要打很大的折扣.
    只为, 51核的指针操作, 效率实在太低了, 拖慢了整体速度
    至于在 DPU32中, 增加几条提升现有STC51核, 指针操作速度的命令, 我也想过,
    写了几条, 综合评估, 意义不大, 提升不了多少速度.
    因为, DPU32中的指令, 要被 C51调用, 必须以子程序形式, 有些太简单的 16位/32位指令,
    C51直接生成内嵌代码(非子程序调用), 使得DPU32中的相应指令, 根本没法使用.

    个人对新型 STC8核的理想模型, 是在现有 STC8核的指令解释器基础上,

    仅需增加一个251核BIN模式指令解释器即可.

    总线也是用现有 51构架的总线(比STC32总线简单多了),

    只需合理分配好现在的几个RAM块,XFR,CODE,地址映像即可.

    在 C51编译器下, 她是 51, 并且可运行C251库(改写), 51的所有缺陷(短板), 都得到解决.
    整体性能 达到 C251编译器下 的 80% 以上, 称她为真正的 准 16位机也不过份.
    当然, 在 C251编译器下, 她是 251
      



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    13 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3956

    积分

    荣誉版主

    积分
    3956
    发表于 2024-4-2 21:58:54 | 显示全部楼层
    作为 高挡机 STC32G96K256-200MHz-LQFP100/64/48
    2进制浮点数 ,  10进制浮点数, 之间的相互转换, 是否有必要加 ?
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-1 15:01 , Processed in 0.070874 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表