本帖最后由 吾要单片机 于 2018-11-5 15:19 编辑
本酷能指令集属于RISC架构,它包含有16位指令集(66条指令)和32位指令集(78条指令),这16位指令集和32位指令集是相互独立的,自成一体,16位指令集不用借助32位指令集就能实现所有功能,这和ARM16或MIPS16有所不同。为了简化译码器电路,本指令系统设定:一个CPU只支持一套指令集,16位指令集是用于嵌入式(即MCU)领域,而32位指令集是用于通用CPU领域,这是因为在现实应用中,用于MCU的程序不太可能直接用于通用CPU,反之亦然,这两个领域的软件生态是相互独立,所以没有必要搞一个CPU同时支持两套指令集。
本16位指令集的技术特点: 1.支持的通用寄存器16个,即R0---R15,这比其它16位指令集(比如ARM16和MIPS16)大一倍,为用户提供更多的寄存器变量空间,有利于提高效能。 2.可以携带16位或32位的立即数,这一优势是其他16位指令集不能比拟的。 3、访存指令LOAD/STORE寻址方式灵活多样,支持的偏移量offset = #0、#imm12、#imm28或通用寄存器,比其他16位指令集强。4、访存指令(load/store)具有变指针功能,以直接支持C语言*p++,*p--,*++p,*--p. 5、许多数据处理指令可以附加无条件跳转功能。6、有PUSH/POP指令,可以连续将1~4个寄存器出入栈。7、没有延时槽指令。 本32位指令集的技术特点: 1.支持的通用寄存器32个,即R0---R31。2.可以携带32位的立即数,这一优势是其他32位指令集不能比拟的。 3、访存指令LOAD/STORE寻址方式灵活多样,支持的偏移量offset = #imm14、#imm32或通用寄存器,比其他32位指令集强。4、访存指令(load/store)具有变指针功能,以直接支持C语言*p++,*p--,*++p,*--p. 5、许多数据处理指令可以附加无条件跳转功能。6、有PUSH/POP指令,可以连续将1~4个寄存器出入栈。7、没有延时槽指令。 本指令集特有的计算多维数组指针的指令UMAC,UMAC指令能够显著提高计算多维数组指针的效率。 举个例子:有个二维数组int a[30][20],如果想要访问a[x][y]单元,先转化为一维数组a[k],其中k=x*20 + y。而计算表达式(k=x*20 + y)就是由1条UMAC指令完成(UMAC Ry, Rx, #20),即执行操作R1=Ry+Rx*20,耗时为1个周期,这时R1就是k,因为R1是通用寄存器,所以可以直接使用LD/STR Rd, [Ra,R1]访问了,一步到位,有利于提高程序的代码密度。如果使用ARM或MIPS指令,光计算表达式(k=x*20 + y)就要用3条指令才能完成(耗时为3个周期):首先取得立即数#20,第二步相乘,第三步再相加。 本指令集支持的数据类型有3种: 1、8位(字节byte)有符号数或无符号数; 2、16位(半字half)有符号数或无符号数,双字节对齐; 3、32位(字word)有符号数或无符号数,四字节对齐; 本指令集架构不支持非对齐访存,而且只支持小端模式。 本指令集架构在应用专利一《一种在计算机数据处理指令中附加跳转功能的方法及CPU模块》时有所裁剪,即:取消执行条件码和反条件码,默认数据处理指令和附加的跳转功能都是无条件执行。 本指令集特有高效的CALL和RET指令(里面包含有对LR和FP的出入栈操作),可以大幅度简化调用子程序的操作,再配上独特的双向栈段结构,可以显著提高调用子程序的处理速度。
11月5日更新后文件:
《酷能指令集V1.5》.pdf
(824.55 KB)
|