[华山论剑]

吐槽一下,V2核的指令系统

[复制链接]
3049|25
手机看帖
扫描二维码
随时随地手机跟帖
laoxu|  楼主 | 2016-7-24 14:46 | 显示全部楼层 |阅读模式
本帖最后由 laoxu 于 2016-7-25 08:45 编辑


问 ChipON讨了几片样片,V1核的KF8F335 和 V2核的KF8F4156,V1核的已玩的差不多了,总体感觉V1核的结构及指令集还算精练。

接下去玩 V2核的KF8F4156,V2核比V1核多了几条指令,RAM容量扩大了好几倍,SFR扩大了一页(官网上声称,SFR寻址不分页,现早已打破~~~   

ROM扩大到 8K(需分页寻址,4K一页),记得 2013年, 在“侃单片机”版块,有过官方的 ChipON单片机介绍**,ROM是 8K一页(或许实际上由于制造成本问题,被缩减了,这就不过多讨论了)

增加了 硬件乘除法(16位*16位无符号乘法 和 16位/8位无符号除法)。


由于玩的不爽,吐槽一下 V2核指令系统 存在的问题(或许不算什么问题,只是俺水平太差劲,玩不转)。
1. ROM分页最不爽,不但用汇编编程极易出错,用C编程也容易被C编译器编译优化出错,如由于制造成本问题,一定要用到 ROM分页,但至少在指令中,保留不受分页限制的短跳转指令(即不受PAGE分页影响)。

比如下面常用的测试指令:
没分页时的书写格式:
     INCJZ  Rn
     JMP    AAA
BBB:

有分页时的书写必须改成如下格式:
     PAGESET  $
     INCJZ  Rn
     JMP    $+2     
     JMP    BBB
     PAGESET  AAA
     JMP    AAA  
BBB:  

原来很简单的组合指令,在有ROM分页的V2核中,需增加那么多条指令,才能应用,超级不爽!   
如有不受分页限制的短跳转指令,则好省掉一些指令,类似的测试跳步指令,程序中很多,有ROM分页的V2核,因此会增加好些代码长度,且无法优化。


2. SFR分页,受芯片制造成本影响,这分页避免不了,但是,能否增加针对 BANK 0页的寻址指令?
比如:B0MOV   Rn, 0xa0 ; 将 BANK 0页 RAM地址 为 0xa0 的数据 送到 Rn 中,
在 用到 硬件乘除法 时,这种不停的对 BANK 分页,对程序的执行效率,影响很大,特耗费时间。


3. 硬件乘除法, 16位*16位无符号乘法 挺有用的,赞一个!
   相比之下,16位/8位无符号除法,没啥大用处,如能做到 32位/16位无符号除法, 则一级棒了~~~  
   因为 32位/16位无符号除法,在 16位*16位无符号乘法 的配合下,计算 long 型除法、取模,以及 浮点数除法,有着 极大的好处,能精简优化这些运算,极大地提高ChipON单片机的除法运算速度。
   目前按照 V2核的 16位/8位无符号除法, 结合 硬件乘法,最多只能 做到 int 型除法,取模,我编写了一下,极不满意,程序超长不简洁(主要是乘除运算寄存器需SFR分页,再者16位*16位的硬件乘法器,只能当8位*8位的硬件乘法器使用,需要好多格外的对乘法运算SFR寄存器赋0值指令),再者 用加减法模拟 int除法、取模,本身执行时间并不长,相比之下,用 V2核硬件乘除法 模拟的 int 型除法、取模,就没有多大优势了。


xyz549040622| | 2016-7-24 16:54 | 显示全部楼层
laoxu汇编玩的转,纯属支持laoxu。表示还没达到laoxu的水平一半

使用特权

评论回复
laoxu|  楼主 | 2016-7-24 17:41 | 显示全部楼层
xyz549040622 发表于 2016-7-24 16:54
laoxu汇编玩的转,纯属支持laoxu。表示还没达到laoxu的水平一半

平时不怎么玩汇编,毕竟用C编程轻松简洁。

只是,每种单片机,在了解之前,总喜欢先分析一下其运算库,特别是浮点运算,只要 熟悉了浮点运算过程,那么对这种片子的指令集及内核资源,基本上也了解的八 九不离十了。

使用特权

评论回复
xyz549040622| | 2016-7-24 18:10 | 显示全部楼层
laoxu 发表于 2016-7-24 17:41
平时不怎么玩汇编,毕竟用C编程轻松简洁。

只是,每种单片机,在了解之前,总喜欢先分析一下其运算库,特 ...

看过laoxu的帖子,中颖单片机的浮点库,确实不错的。最近想要写个STM8下的浮点库,发现缺少汇编知识,还是放弃了。

使用特权

评论回复
laoxu|  楼主 | 2016-7-25 04:55 | 显示全部楼层
从 大陆引进 8位机开始, 大致是 英特尔 和 摩托罗拉 的 PK, 从 8080(Z80)  PK 6800(6502) , 还是 8051 PK 6803(68HC05,68HC08.....), 俺对其指令集的偏爱,都是倒向 摩托罗拉 系的,摩托罗拉系有着丰富的间接寻址方式,特别是堆栈间接寻址,如想动态使用一些临时变量,程序会编写的特别简洁高效。

后来引进的 PIC 和 AVR, 俺始终喜欢 AVR, 指令丰富编程高效,略为使用一些宏定义,能让汇编写出 准C 的样式来,运行速度和效率,或许是至今世界上最高效的 8位机。

再后来,引进了 意法半导体的STM8, 其丰富的向上兼容 6502的指令集,让俺折服 ,为此,曾写过一篇**,〈STM8 ! 8位单片机的终结者吗?! 〉

不过,STM8下的浮点库俺没研究,
原因1:  指令集 兼容于6800(6502)系,只是更丰富,将原 6800(6502)系 的浮点库,略为简化优化一下指令集,即可使用。
官方提供的 C编译器,肯定也有浮点库,你可参看一下其反汇编代码。            
原因2:  STM8的指令集实在太丰富了,比 AVR的还要强大,俺玩汇编,就是想从里面,找出点特殊的用法算法,思考指令集还有啥地方能改进提高。
STM8拥有一个非常完美的指令集,已经到了你想啥就能给你啥(汇编中的 共 产 主 义 镜界),完美的让俺除了折服 佩服,已无任何地方能让俺提改进意见了,因此,也失去了研究STM8指令集的动力。

使用特权

评论回复
laoxu|  楼主 | 2016-7-25 05:07 | 显示全部楼层
xyz549040622 发表于 2016-7-24 18:10
看过laoxu的帖子,中颖单片机的浮点库,确实不错的。最近想要写个STM8下的浮点库,发现缺少汇编知识,还 ...

如想在STM8下使用浮点库,很简单,除了在代码里加上了math.h之外,还需要使能STVD的浮点运算,在STVD的设置中有一个叫float的需要打勾,就OK了。

001572f2d999538650e8784979ea623b_885.jpg

使用特权

评论回复
laoxu|  楼主 | 2016-7-25 05:22 | 显示全部楼层
说实话,以前有这个想法,等俺有钱了,花个几十万,设计打样一片MPU(功能比 6502 强大,按俺的个性设计的扩展指令集)玩玩。

不过,自从意法半导体推出STM8, 俺的这个想法就彻底破灭了。

使用特权

评论回复
xyz549040622| | 2016-7-25 09:25 | 显示全部楼层
laoxu 发表于 2016-7-25 05:07
如想在STM8下使用浮点库,很简单,除了在代码里加上了math.h之外,还需要使能STVD的浮点运算,在STVD的设 ...

我用的是IAR for STM8,STVD的操作太不人性化了。IAR下怎么设置呢?

使用特权

评论回复
Jim12345| | 2016-7-25 10:20 | 显示全部楼层
1、受制于固定指令长度的思路,导致 ROM分页,估计只有变长指令长度或者全部指令宽度增加才能解决,4K/8K的差异应该是大家说的4K Word/8K Byte的差异;
2、4156由于寄存器数量增加了不少,寄存器也增加了区,使用乘除法时尽量把相应参与运算数据放到bank1,即 和乘除法寄存器相对应的bank,减少切区动作;
3、其实这个处理器结构当初是从功耗、可靠性方面考虑居多,没考虑到运算能力,对long 型除法、取模,以及 浮点数除法等等当初没有考虑在内。

使用特权

评论回复
Jim12345| | 2016-7-25 10:21 | 显示全部楼层
laoxu 发表于 2016-7-25 05:22
说实话,以前有这个想法,等俺有钱了,花个几十万,设计打样一片MPU(功能比 6502 强大,按俺的个性设计的 ...

这个事情确实没必要了,工艺的进步,后续32位会把8位的问题都克服掉,而且效率应该还要高一些。

使用特权

评论回复
Jim12345| | 2016-7-25 10:23 | 显示全部楼层
laoxu 发表于 2016-7-25 05:22
说实话,以前有这个想法,等俺有钱了,花个几十万,设计打样一片MPU(功能比 6502 强大,按俺的个性设计的 ...

不过可以开始研究后续32位结构怎么样才能满足新兴市场的要求。

使用特权

评论回复
laoxu|  楼主 | 2016-7-25 10:54 | 显示全部楼层
这小系统,编译器不好,还能凑合着玩玩,如系统一大,编译器再不好使,俺相信,这玩的人,连想上吊的心情都有~~~

使用特权

评论回复
laoxu|  楼主 | 2016-7-25 10:56 | 显示全部楼层
想上 32位,买个现成的 Cortex-Mx核 授权,是正道~~~

使用特权

评论回复
xyz549040622| | 2016-7-25 15:51 | 显示全部楼层
laoxu 发表于 2016-7-25 10:50
还是买个现成的 Cortex-Mx核吧~~~

赚钱容易,推广方便~~~~

同意,32位都是ARM的天下了,除了有钱的厂商,谁烧钱闹自己的内核呀。

使用特权

评论回复
西门看雪| | 2016-7-25 17:33 | 显示全部楼层
低成本,高性能,低能耗。

能将这三者结合起来,就是很了不起的CPU。

难道arm已经接近完美,没有多大的优化空间了?

使用特权

评论回复
Jim12345| | 2016-7-25 23:28 | 显示全部楼层
laoxu 发表于 2016-7-25 10:50
还是买个现成的 Cortex-Mx核吧~~~

赚钱容易,推广方便~~~~

其实跟应用走吧,现在的架构不会针对浮点等应用,实际中基本上没有碰到浮点的应用。

工具也应该这样吧,对大程序应用,工具也会对应的提升上去了。

使用特权

评论回复
laoxu|  楼主 | 2016-7-26 00:54 | 显示全部楼层
西门看雪 发表于 2016-7-25 17:33
低成本,高性能,低能耗。

能将这三者结合起来,就是很了不起的CPU。

arm指令集俺也玩的很熟,至少在俺眼里,已经非常完美,无可挑剔的了。

使用特权

评论回复
laoxu|  楼主 | 2016-7-26 01:12 | 显示全部楼层
Jim12345 发表于 2016-7-25 23:28
其实跟应用走吧,现在的架构不会针对浮点等应用,实际中基本上没有碰到浮点的应用。

工具也应该这样吧, ...

在控制中用的不多,但在数据变换运算时,比如一些公式的计算,考虑到精度,有时会用到一些浮点。

对我而言,用汇编写浮点运算,只是快速熟悉一种单片机架构的捷径。

因此,才有了对比,N家公司的单片机,指令编码不同编写方式不同,编写出的程序长度不同执行效率不同,不过作为一个优秀的单片机内核设计,应兼顾各种不同的应用,以取得最优性价比。

使用特权

评论回复
laoxu|  楼主 | 2016-7-26 01:25 | 显示全部楼层
当然,你想自已动手写个STM8的浮点库也很容易,可先在 STVD的操作下,编个简单的浮点数测试程序,编译后再将其反汇编代码拷贝下来,看懂后再修改一下格式,移植到 IAR 上使用,也是很方便的。

使用特权

评论回复
评分
参与人数 1威望 +5 收起 理由
xyz549040622 + 5 很给力!
laoxu|  楼主 | 2016-7-26 01:51 | 显示全部楼层
Jim12345 发表于 2016-7-25 10:20
1、受制于固定指令长度的思路,导致 ROM分页,估计只有变长指令长度或者全部指令宽度增加才能解决,4K/8K的 ...

这不是理由!

俺现在强调的是,在现有成本的限制下,怎样将芯片的性价比搞到最高!

俺总感觉,现在国人的思维,有很多地方脱节,号称创新的东东,十有八 九是个笑话。

1、受制于固定指令长度的思路,导致 ROM分页,。。。。。 这根本不是问题,有现成可照抄照搬的,请参照 PIC 18F系列的设计,人家怎样做到 指令宽度不增加的情况下,寻址范围增大 N倍。

2、4156由于寄存器数量增加了不少,寄存器也增加了区,使用乘除法时尽量把相应参与运算数据放到bank1,。。。。。软硬件是相结合使用的,如硬件考虑周全些,有强制bank0 区的寻址操作,则对C编译器的质量要求降低许多。

3、其实这个处理器结构当初是从功耗、可靠性方面考虑居多,没考虑到运算能力,对long 型除法、取模,以及 浮点数除法等等当初没有考虑在内。
。。。。。。 俺是感叹,要么硬件除法不要,16/8位的根本没啥用,加上了只是增加成本功耗, 劳命伤财。
要上硬件除法,就直接上32/16位的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:猜猜俺是谁的马夹?

146

主题

2274

帖子

221

粉丝