查看: 1652|回复: 92
收起左侧

[国产单片机] 《酷能指令集》及相关专利技术

[复制链接]

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 19:43 | 显示全部楼层 |返回版面||阅读模式
本帖最后由 吾要单片机 于 2017-5-20 10:24 编辑

     本《酷能指令集》是一种全新的计算机指令集,它是基于本人的3项专利技术设计而成的,其具有新颖、高效、高代码密度的优点,目前基于本《酷能指令集》的CPU设计已经完成,仿真结果表明达到了专利所描述的效果,非常满意。在介绍本指令集之前,首先介绍与之相关的专利技术。(先介绍已经公开的2项)
第一项专利技术:专利号:201310153746.1,专利名:《一种在计算机数据处理指令中附加跳转功能的方法及CPU模块》
      这项专利的主要思想是:在计算机数据处理指令(包含数据转送指令,以下同)中增加设置执行的条件码、反条件码和跳转矢量,从而使得数据处理指令不再是单一的数据处理,而且具备跳转能力,其好处是提高程序的密度和执行效率。具体内容参见专利的说明书。
通过上述技术方法实施后数据处理指令具有跳转功能了,在此我称之为具有跳转功能的数据处理指令。这些具有跳转功能的数据处理指令的汇编格式如下所示:
操作码<条件码>   [操作数1] , [操作数2], [操作数3] ,[E][JMP  跳转标号]
其中E是反条件码,跳转矢量是相对PC的跳转矢量。
注意观察该汇编指令格式,我们发现比现在传统的数据处理指令指令多出了“[E][JMP  跳转标号]”字段,这个字段就是用于描述跳转功能。其中E是反条件码助记符,JMP是立即跳转助记符。如果E被隐去,则表示同条件跳转,即附加的跳转条件和操作码后缀的条件码相同;如果E被显现,则表示反条件跳转,即附加的跳转条件和操作码后缀的条件码相反。
    汇编指令格式:操作符<cond>  操作数1,操作数2,..,[E][JMP  #v]
其中:    cond------条件码,其意思是:如果满足条件码的要求,则执行操作符定义的操作;如果没有条件码,其意思是:无条件执行操作符定义的操作。
E—-------反条件码,意思是否则(Else)。
JMP  #v---意思是立即跳转#v条指令。
例如:           SUB<cond>  Rd,  Rn,  Rj,  [E][JMP  #v_6]
需要特别指出的是:有些数据处理指令是无条件执行,没有条件码、反条件码、跳转矢量。
实际应用举例如下:
SUBEQ  R3, R1, R2, EJMP  lab_1; //如果相等,则执行R3=R1-R2;否则立即跳到lab_1处。属于反条件跳转。这种情况下它顶得3条MIPS指令。
SUBEQ  R3, R1, R2, JMP  lab_1; //如果相等,则执行R3=R1-R2,并且立即跳到lab_1处。属于同条件跳转。这种情况下它顶得3条MIPS指令。
SUB    R3, R1, R2; //无条件执行R3=R1-R2。没有跳转功能,属于反条件跳转。这种情况下它只顶得1条MIPS指令。
SUB    R3, R1, R2, JMP  lab_1; // 无条件执行R3=R1-R2,并且立即跳到lab_1处。属于同条件跳转。这种情况下它顶得2条MIPS指令。
SUBRE  R3, R1, R2, JMP  lab_1; //无条件执行RC=RC-1的操作,如果Z==1&&RC>0,则执行R3=R1-R2,并且立即跳到lab_1处。属于同条件跳转。这种情况下有最高效率,它顶得5条MIPS指令!

从上面可以看出:在数据处理指令(含数据转送指令)中附加执行条件码、反条件码和跳转矢量后,可以使得数据处理指令不但有条件执行,而且具有跳转功能。这种指令的效率显然高于现在主流的RISC指令,不过由于附加的跳转矢量位数有限(32位指令集是6位,16位指令集是7位),所以跳转的范围都比较小,属于短跳转。

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 19:51 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-5-17 21:08 编辑

第二项专利:专利号:201512153746.1,专利名:《一种将计算机指令中立即数扩展的方法和装置》
    技术背景:RISC指令可以携带的立即数一般都不大,比如ARM的数据运算指令携带的立即数最大是12位,而MIPS指令系统的数据运算指令携带的立即数最大是16位,要这些RISC指令系统携带32位的立即数是不可能的,因为其指令长度只有32位,所以在RISC指令系统中要取得32位立即数就费不少周折了,目前常用的方法有两种:第一种是分段读取法,具体是先读取高16位的立即数,再读取低16位的立即数,从而组成32位立即数,为了支持这种分段读取法,几乎所有的RISC指令系统都是专门制定了相应的指令,比如ARM的MOVW和MOVT指令、MIPS的LUI和ADDIU指令;第二种是访存法,具体是把32位立即数当做常数放在离当前PC值不太远的地方,然后使用一条与PC相关的访存指令读取它。但是不管使用哪种读取方法,要获取一个32位的立即数都是费时,怎么都要花2个周期才能完成。
比如要处理表达式:R2=R3&0x87654321,当前ARM的做法是:
     使用分段读取法的是:
         MOVT   R1,#8765H;(取得高16位常数,要花1个周期时间)
         MOVW   R1,#4321H;(取得低16位常数,要花1个周期时间)
         AND    R2,R3,R1;
     使用访存法的是:
LDR   R1, [PC,  #offest];(这条指令要花2个周期时间)
         AND   R2,R3,R1;
由此可见,ARM处理R2=R3&0x87654321共需要花3个周期时间,其中获取32位常数0x87654321需要花2个周期时间。
发明内容:为了解决现有的RISC指令系统获取大立即数执行效率低下的不足,又要维持RISC指令系统精简、统一长度的优点,本人提出了一种将计算机指令中立即数扩展的专利方法,其方法是:在RISC指令系统中至少新增一条立即数扩展指令,该指令包含有操作码和立即数域,具体应用是将一个大的立即数分成两段,一段是高位立即数,另一段是低位立即数,将高位立即数经过有符号或无符号扩展后装入该立即数扩展指令的立即数域,而将低位立即数装满执行指令的立即数域,并且规定该立即数扩展指令要前缀于携带该低位立即数的执行指令,中间不能插入别的指令。在取指令时,取指令电路将该立即数扩展指令和紧随其后的执行指令同步送入它们各自的译码器进行译码,立即数扩展指令译码器输出高位立即数经过逻辑左移位后再和执行指令译码器输出的低位立即数进行合并,合并结果输出的立即数再经过有符号数或无符号数扩展后还原为原来的大的立即数。该立即数扩展指令是一条非执行指令,它到译码这一阶段就终结了,它不需要经历执行、回写的阶段。具体内容见本人的专利资料详细说明(专利号:201512153746.1,专利名:一种将计算机指令中立即数扩展的方法和装置)。
通过使用本发明的方法,同样要处理上述的表达式:R2=R3&0x87654321,其做法是:
        HIMM   #8765h;         (这是新增的立即数扩展指令,其携带高位立即数#8765h)
        AND    R2, R3,  #4321h;(执行指令携带低16位立即数#4321h)
如果取指令电路工作于单倍速取指令模式(即程序存贮器每次只能在其接口总线上输出1条指令),则处理R2=R3&0x87654321共需要花2个周期时间,其中立即数扩展指令(HIMM  #8765h)需要延迟 1条指令的时间,以等待紧随其后的执行指令(AND   R2, R3,  #4321h)的到来,才能同步译码。
如果取指令电路工作于双倍速取指令模式(即程序存贮器每次都能在其接口总线上输出2条指令),则处理R2=R3&0x87654321仅需要花1个周期时间,此时立即数扩展指令(HIMM    #8765h)不需要任何延迟就可以和紧随其后的执行指令(AND   R2, R3,  #4321h)同步译码,所以它不花任何时间!
对比ARM和本发明的做法可以看出,使用本发明的方法可以极大改善RISC指令集计算机执行程序的效率,既节省时间又节省空间。

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 19:54 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-5-18 00:33 编辑

第三项专利:(尚未公开,公开之后再来补充,先占位置)

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 19:56 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-7-11 19:14 编辑

现在可以介绍指令集和CPU了,先介绍CPU的寄存器组:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

16

主题

416

帖子

1373

积分

助理工程师

发表于 2017-5-17 20:05 | 显示全部楼层 |返回版面
顶一下吧,不过我没有看懂...
我去年买个表:---十位半万用表!犯贱装逼被雷劈,净化二姨论坛!

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:09 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-8-11 12:02 编辑

寄存器介绍:寄存器的宽度是32位,所以本CPU是32位CPU。
R0为零寄存器,读出总是0。
当CPU处于16位指令模式时,其通用寄存器为R0—R15,R16(HR0)--R31(HR15)用特别的指令访问。
当CPU处于32位指令模式时,其通用寄存器为R0—R31。
其中:R1-----UMAC指令的目的寄存器。
R26---LO寄存器,用于存贮乘法或乘加的64位结果的低32位,或者用于存贮32位除法运算的商。
R27---HI寄存器,用于存贮乘法或乘加的64位结果的高32位,或者用于存贮32位除法运算的余数。
R29---INT,即中断的信息。
R30---SP寄存器,即推栈指针。当CPU处于用户态时是PSP;而当CPU处于管理态时是PSP或MSP,由PSR.P选择。
R31---LR寄存器,即子程序返回链接寄存器。
另外,CPU设置2个系统控制寄存器,它们定义如下:
PC寄存器,即程序计数器。
PSR寄存器,即程序状态寄存器,里面有程序状态标志位以及系统状态和控制信息。






27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:11 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-7-11 16:23 编辑

16位指令集通用寄存器是R0---R15(比其他CPU的16位指令系统大一倍),R16--R31用特别的指令访问。
当中断响应时,系统进入特权模式,自动选择MSP作为SP,并且自动依次保存LR、R29、PSR、R0、R1、R2、R3到堆栈中,同时还将中断信息保存到R29。

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:14 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-7-10 23:47 编辑

条件码表
本指令集定义的反条件码:E=0表示相反条件跳转,E=1表示相同条件跳转。
从条件码表可以看出本指令集使用的条件码和ARM有所不同,主要是加入了与RC(重复计数器)相关的条件码(RE、RN、RP),本系统就是靠这3种条件码控制RC(重复计数器)进行减1操作的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:19 | 显示全部楼层 |返回版面
定义的操作数扩展指令,其中:RIMM指令用于扩展寄存器号,CIMM指令用于扩展条件码(cond)、反条件码(E)、跳转矢量(V),HIMM指令用于扩展高12位立即数,WIMM指令用于扩展高28位立即数。在16位指令集中,可以使用的前缀扩展指令是RIMM、CIMM、HIMM以及WIMM。
在32位指令集中,只能使用的前缀扩展指令是WIMM,用于扩展32位立即数。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:21 | 显示全部楼层 |返回版面
本16位指令集的技术特点:
1.支持的通用寄存器16个,即R0---R15(其中R0是零寄存器),这比其他的16位指令集大一倍,为用户提供更多的寄存器变量空间,有利于提高效能。
2.可以携带16位或32位的立即数,这一优势是其他16位指令集不能比拟的。
3.LOAD/STORE寻址方式灵活多样,支持EA=Rn、EA=Rn+#imm12、EA=Rn+#imm28、EA=Rn+Ra.比其他16位指令集强。
4.有布尔处理指令,有位与指令bit_and、位或指令bit_or、位异或指令bit_xor、位取反指令bit_not、位运算结果保存指令zmb.。这一特点比MCS-51或ARM的位操作指令更通用,位变量定义不再受限制。
5.本16位指令集自成一体,不用借助32位指令集就能实现所有功能,代码密度更高,与32位指令集相比,其性能损失非常小。

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:22 | 显示全部楼层 |返回版面
需要说明的是:1、16位指令集和32位指令集都是完整独立的,这和ARM不同。2、16位指令集前缀的立即数扩展指令为16位或32位,因此该16位指令的长度等效于16位、32和48位。3、32位指令集前缀的立即数扩展指令位32位,因此该32位指令的长度等效于32位或64位。

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:25 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-7-10 23:48 编辑

本人已经完成基于这3项专利的CPU设计,根据仿真结果表明,设计达到预期效果,使用verilog HDL编写,五级流水线,同时支持16位指令集(78条指令)和32位指令集(89条指令),与Thumb/microMIPS有所不同,本指令系统规定:一个子程序(即函数)只能使用一套指令集,也就是说,在一个子程序(即函数)中,要么全部使用16位的指令集,或要么全部使用32位指令集!这是因为译码器是根据该指令的地址的第0位的状态来区分该指令是16位指令集还是32位指令集,而只有CALL指令、int指令、硬件中断响应、中断返回指令iret和子程序返回指令ret才可以改变PC.0的状态值。本CPU设定:当PC.0为0时,指令为16位指令集;当PC.0为1时,指令为32位指令集。

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:27 | 显示全部楼层 |返回版面
特别说明:在发生分支跳转时,如果跳转的目标无法获得完整的指令(有前缀的立即数扩展指令)时,那么立即数扩展指令要延时一个周期,以等待紧随其后的执行指令的到来,除此以外立即数扩展指令不用延迟。仿真结果也证明了这一点。
     

26

主题

2218

帖子

8079

积分

VIP会员

发表于 2017-5-17 20:28 | 显示全部楼层 |返回版面
第二项专利如果执行完第一条指令遇到中断会怎么办
驳回重新译码
还是缓存状态

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:34 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-5-17 20:36 编辑

系统是把前缀的立即数扩展指令和紧随其后的执行指令当做一条指令来看待的。所以这条复合的指令的地址就是其前缀指令的地址。

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:46 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-5-20 10:16 编辑

关于中断系统:
      本CPU的硬件中断系统有:
上电/手动复位,不可屏蔽,优先级0(最高), 抢占型中断,入口地址:0x80000000
MEM错误,不可屏蔽,优先级1,             抢占型中断,入口地址:0x80000100
ROM错误,不可屏蔽,优先级2,             完整型中断,入口地址:0x80000200
EXT中断,    可屏蔽,优先级3(最低), 完整型中断,入口地址:0x80000300
   本CPU的软件中断的入口地址:0x80000400

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 20:51 | 显示全部楼层 |返回版面
本帖最后由 吾要单片机 于 2017-5-17 21:56 编辑

看看立即数扩展指令的使用(16位指令集):(例如计算R3=#76543210+#fedcba98)
f765        
4321
0100        ;mov        R1, #76543210
ffed
cba9
7318        ;add        R3, R1,#fedcba98
计算这个表达式只需要2个周期,比ARM和MIPS快了不少啊。

12

主题

544

帖子

1633

积分

助理工程师

发表于 2017-5-17 21:04 | 显示全部楼层 |返回版面
哇塞!流水线居然有5级!
前面的看不太懂,大概明白点意思。但是个人感觉有点怪怪的,32位就算了,16位的也是5级?这样的话是不是会导致对cache的要求比较高。那样的话成本........要知道16位的价格不能太高了,否则没法跟stm32之类拼性价比。
再说了,16位搞个5级,万一分支预测失败的话。对单片机来说清洗流水线的代价就比较高了。
单片机(特别是低阶arm)一般都是3级,3级以上的比较少。

点评

指令集是16位,不是等于说寄存器是16位!寄存器还是32位的。  发表于 2017-5-17 21:12

23

主题

673

帖子

2073

积分

初级工程师

发表于 2017-5-17 21:39 | 显示全部楼层 |返回版面
这个很厉害啊,我很佩服。国产搞这个的很少……

点评

我们国家很少有人研究指令集,他们认为指令集太成熟了,没搞头。  发表于 2017-5-17 21:41

朝闻夕道,岁月不等人。

27

主题

214

帖子

784

积分

高级技术员

 楼主| 发表于 2017-5-17 21:43 | 显示全部楼层 |返回版面
wgj_king 发表于 2017-5-17 21:39
这个很厉害啊,我很佩服。国产搞这个的很少……

我们国家很少有人研究指令集,他们认为指令集太成熟了,没搞头。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

热门推荐上一条 /4 下一条

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