一种8位RISC微控制器构架转让专利

申请号 : CN200710187213.X

文献号 : CN101221494B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 潘松陈光胜岳卫杰刘桂蓉

申请人 : 上海海尔集成电路有限公司

摘要 :

本发明公开了一种新型的8位RISC微控制器构架,其包括二级四段流水线结构,二级四段流水线结构包括:指令处理装置、数据读取装置、数据运算装置、数据写回装置、状态机和时钟发生器。通过上述结构使得各项时钟不交叉耦合,保证能够产生稳定的时钟,各装置间相互依靠、相互备份,而对数据的预处理和处理,又可使得该结构对于抗干扰能力有很大的提高,从而实现高生产率。

权利要求 :

1.一种8位RISC微控制器结构,其特征在于该微控制器结构包括:二级四段流水线结构,所述二级四段流水线结构包括时钟发生器,所述时钟发生器包括状态机,所述二级四段流水线结构还包括:指令处理装置,与状态机相连,用于完成指令的译码、PC备份、双周期指令预处理、中断向量处理、端口变化预处理操作;

数据读取装置,与状态机相连,用于接收指令处理装置输出的寻址操作数和数据内容,并完成多个功能寄存器或数据寄存器读取,同时完成中断请求标志预处理操作;

数据运算装置,与状态机相连,用于接收指令处理装置输出的运算类型操作码、接收数据读取装置输出的数据内容,并完成算术逻辑运算装置数据运算、端口变化终处理、空闲模式激活预处理操作,同时读取下一条指令;

数据写回装置,与状态机相连,用于将数据运算装置的运算结果按照指令处理装置的操作数寻址部分做写回操作,包括完成算术逻辑装置数据写回、内部中断和堆栈处理,同时完成PC处理,PC处理包括PC加1、PC出栈、PC跳转;

所述时钟发生器,用于通过所述状态机产生四相时钟信号,同时产生所述二级四段流水线结构所需的同步时钟信号。

2.根据权利要求1所述的8位RISC微控制器结构,其特征在于所述状态机为独热码状态机。

3.根据权利要求1所述的8位RISC微控制器结构,其特征在于微控制器结构还包括一套精简指令集,该指令集包含48条指令;所述指令处理装置的输出指令码分成3类:字节操作类、位操作类和立即数操作与控制类。

4.根据权利要求3所述的8位RISC微控制器结构,其特征在于所述字节操作类指令有28条,分别是对功能寄存器或者寄存器R的算术逻辑运算操作以及空操作;算术逻辑运算的结构按照标志位F写入目标寄存器,F如果为0,目标寄存器为数据写回装置内的功能寄存器A1;F如果为1,目标寄存器为寄存器R或数据写回装置内的功能寄存器B1。 

5.根据权利要求4所述的8位RISC微控制器结构,其特征在于所述指令集中包含1条程序执行功能寄存器数据传送指令,这条指令将功能寄存器A0的内容写入功能寄存器B1中,或将功能寄存器B0的内容写入功能寄存器A1中,并按照F做写回操作,当F为0,将功能寄存器B0的内容写入功能寄存器A1中,当F为1,将功能寄存器A0的内容写入功能寄存器B1中,这条指令操作码符号为MOVAB。

6.根据权利要求3所述的8位RISC微控制器结构,其特征在于所述指令集中包含2条程序执行调用子程序指令,这些指令将立即数赋值程序计数器,然后将程序计数器的值压入堆栈;这些指令包括调用子程序、长地址调用子程序,其操作码分别对应的指令符号为CALL、LCALL。 

说明书 :

技术领域

本发明属于半导体集成电路设计领域,尤其涉及一种微控制器(MCU)系统构架。 

背景技术

近年来,微控制器的精简指令集(RISC)结构获得了广泛的普及。虽然RISC处理器应该具有什么特征还有不同的看法,但是各种RISC结构都有以下这些特征:(1)多数指令是单周期指令,以便于实现结构流水线化;(2)独立而且简单的加载和存储指令都是双周期指令;(3)指令解码通常都是硬连线实现而不是微解码,以便加快执行速度;(4)多数指令具有固定格式,以简化指令编码和译码;(5)较小的指令集和少数几种寻址模式;(6)数据通道流水线化,使处理过程高度并行;(7)采用大容量高速寄存器堆(或称为寄存器文件),尽量避免与速度较低的系统RAM交换数据。 
RISC微控制器的这些特征也带来了一些本质的缺陷和不足:(1)指令集不可扩展;(2)流水线段及级数较多,带来了流水线段数据相关性判据的复杂性,有时甚至影响到流水线数据吞吐率;(3)数据存储器与程序存储器复用,没有专门的寄存器堆,或者是特殊寄存器堆与通用寄存器堆没有分开,影响了对这些寄存器的访问速度,限制了运行速度的提高;(4)没有采用可测性设计(DFT),在应用中无法保证产品的制造生产质量;(5)而目前尚未解决的最大问题在于:对于两级四段流水线结 构,各模块间无法相互备份、相互依靠,更不能对数据进行预处理和处理,严重影响了该结构的抗干扰能力。 

发明内容

本发明需要解决的技术问题在于提供一种新型的8位RISC微控制器构架,以使得指令不仅完备,而且能够相互备份,相互依靠,对数据进行预处理,从而提高整个结构的抗干扰能力。 
本发明的技术方案为:包括程序总线、数据总线、程序存储器、通过程序总线连接到程序存储器的指令译码器、数据随机存储器(RAM)、寄存器堆、通用算术逻辑单元(ALU)和地址总线,上述部件通过微码操作控制结构实现;还包括一个二级四段流水线结构,由四相时钟驱动工作,每一段流水线在对应时钟相内完成功能,其特征在于,所述二级四段流水线结构包括: 
指令处理装置,用于完成指令译码、PC备份、双周期指令预处理、中断向量处理、端口变化中断预处理操作; 
数据读取装置,接收指令读取装置输出的寻址操作数和数据内容,并完成多个功能寄存器或数据寄存器读取,同时完成中断请求标志预处理操作; 
数据运算装置,接收指令处理装置输出的运算类型操作码、接收数据读取装置输出的数据内容,并完成算术逻辑运算装置(ALU)数据运算、端口变化终端处理、空闲模式激活预处理操作,同时读取下一条指令; 
数据写回装置,将数据运算装置的运算结果按照指令处理装置的操作数寻址部分做写回操作,包括完成ALU数据写回、内部中断和堆栈处理,同时完成PC处理,PC处理包括PC加1、PC出栈、PC跳转; 
时钟发生器,用于为上述四个装置提供四相时钟信号,同时产生所述二级四段流水线结构所需的同步时钟信号。 
上述数据写回装置中所述的中断处理和内部堆栈处理装置可以自动进行PC压栈和出栈处理。 
上述指令处理装置包括寄存器、指令译码器、端口预处理器、中断处理器、多路器、立即数处理器。 
上述数据读取装置包括数据寄存器、两个功能寄存器,多路器。 
上述数据运算装置包括算术逻辑运算单元、多路器、指令读取器、端口终处理器。
上述数据写回装置包括数据寄存器、两个功能寄存器,中断处理器、堆栈处理器、PC处理器。 
本发明的微控制器构架还包括一套指令集,该指令集属于精简指令集,包含48条指令;所述指令处理装置的输出指令码分成3类:字节操作类、位操作类和立即数与控制类操作类。 
根据本发明的微控制器构架,其ALU完成所有指令都只需要一个时钟周期,在指令周期的第三时钟周期内完成。 
根据本发明的微控制器构架,其数据寄存器包括特殊寄存器和通用寄存器,利用地址映射电路把分布在不同的区和数据空间的特殊寄存器和通用寄存器的物理地址映射到连续的物理地址上。 
根据本发明的微控制器构架,所述中断处理和内部堆栈处理方式在调用子程序或中断处理时自动进行PC压栈和出栈操作,实现中断的高效处理。 
本发明的微控制器构架还包括一套指令集,属于精简指令集,包含48条指令,所述指令处理装置的输出指令码分为3类,即字节操作类、位操作类和立即数操作与控制类。 
其中字节操作类指令有28条,分别是对功能寄存器或者寄存器R的算术逻辑运算操作以及空操作;算术逻辑运算的结果按照标志位F写入目标寄存器,F如果为0,目标寄存器为数据写回装置内的功能寄存器A1(本文中的A0、A1、B0、B1只是功能寄存器的代号,可以替换;因为对于功能寄存器A0/A1在物理上的寻址为同一类功能寄存器A,在不同的装置内分别定义为A0/A1,即将功能寄存器A内容读至数据总线记为A0,从总线上将数据写入功能寄存器A记为A1;对于功能寄存器B0/B1在物理上的寻址为同一类功能寄存器B,在不同的装置中分别定义为B0/B1,即将功能寄存器B内容读至数据总线记为B0,从总线上将数据写入功能寄存器B记为B1。);F如果为1,目标寄存器为R或数据写回装置内的功能寄存器B1。 
其中位操作类指令有4条,是对寄存器R某位进行清0或者置1的操作以及对位是否为0或者1进行判断操作;清0和置1的结果按照F做写回操作,如果是判断操作,将不进行写回操作。 
其中立即数与控制类操作指令有18条,是对立即数操作和对微控制器控制的指令。 
作为对本发明的改进,所述微控制器构架的中断包括硬件中断和软件中断,可以选择1个或多个中断入口地址,更加容易的判别不同的中断类型,使用多个中断入口地址模式,软中断优先级最高。 
作为对本发明的改进,所述微控制器构架的内部堆栈处理,采用独热码(One-Hot)状态机,使得PC压栈和出栈的操作更加稳定可靠。 
作为对本发明的改进,其字节操作类指令集中可包含8条程序执行不带进/借位的算术逻辑运算指令,这些指令将寄存器R和数据读取装置内的功能寄存器A0内容输入到算术运算单元ALU进行运算,将运算的结果按照标志位F做写回操作;这些寄存器运算指令包括加法、减法、加1、减1、逻辑与、逻辑同或、逻辑异或、逻辑求补码,其操作码分别对应的指令符号为ADD、SUB、INC、DEC、AND、IOR、XOR、COMP。 
作为对本发明的改进,其字节操作类指令集中可包含2条程序执行寄存器清0指令,这些指令包括对R清零CLRR和对数据读取装置内的功能寄存器A0清零并将结果写回A1的指令CLRA。 
作为对本发明的改进,其字节操作类指令集中可包含2条程序执行加/减1并判断指令,这些指令将R内容输入到ALU进行运算,将进行加/减1操作,判断结果是否为0来决定是否执行下一条指令,并将结果按照F做写回操作;这些指令包括加1判断、减1判断,其操作码分别对应的指令符号为JINC、JDEC。 
作为对本发明的改进,其字节操作类指令集中可包含2条程序执行带进/借位C的循环移位操作指令,这些指令将R内容以及C输入到ALU进行移位操作,并将结果按照F做写回操作;这些指令包括左移、右移 指令,其操作码分别对应的指令符号为RL、RR。 
作为对本发明的改进,其字节操作类指令集中可包含3条程序执行空操作指令,执行这些指令不作任何操作,这些指令操作码分别对应的指令符号为NOP、NOP2、NOP3。 
作为对本发明的改进,其字节操作类指令集中可包含2条程序执行带进位的十进制BCD码加法调整指令,这些指令将加法之后的R或者A的内容以及C和DC输入到ALU进行BCD码运算,并将结果写回数据写回装置内的功能寄存器A1或R操作;这些指令包括对寄存器R和对功能寄存器A0进行BCD码(二进制码十进制)调整,这些指令操作码分别对应的指令符号为DAW、DAR。 
作为对本发明的改进,其字节操作类指令集中可包含2条程序执行带进/借位的算术逻辑运算指令,这些指令将R和数据读取装置内的功能寄存器A0内容以及C输入到ALU进行运算,将运算的结果按照F做写回操作;这些指令包括带进位加法、带借位减法,这些指令操作码分别对应的指令符号为ADDC、SUBC。 
作为对本发明的改进,其字节操作类指令集中可包含1条程序执行乘法运算指令,这条指令将R和功能寄存器A0内容输入到ALU进行运算,将运算的结果低8位按照F做写回操作,高8位写入数据写回装置内功能寄存器B1,寄存器乘法指令为单周期指令,这条指令操作码符号为MUL。 
作为对本发明的改进,其字节操作类指令集中可包含2条程序数据传送运算指令,这些指令将R或数据读取装置内的功能寄存器A0内容 存入到另一个寄存器,然后通过ALU,将数据按照F做写回操作;这些指令操作码分别对应的指令符号为MOV、MOVA。 
作为对本发明的改进,其字节操作类指令集中可包含1条程序执行功能寄存器数据传送指令,这条指令将功能寄存器A0的内容存入功能寄存器B1或将功能寄存器B0的内容存入功能寄存器A1,并按照F做写回操作;F为0,将功能寄存器B0的内容写入功能寄存器A1,F为1,将功能寄存器A0的内容写入功能寄存器B1,这条指令操作码符号为MOVAB。 
作为对本发明的改进,其字节操作类指令集中可包含1条程序字节内数据传送指令,这条指令将R内容输入ALU进行高4位和低4位交换,将数据按照F做写回操作,这条指令操作码符号SWAP。 
作为对本发明的改进,其位操作类指令集中可包含2条程序执行位清0或置1指令,这些指令将R内容输入到ALU,根据指定的位进行清0或置1运算,将运算的结果按照F做写回操作;这些指令包括位清0、置1,其操作码分别对应的指令符号为BC、BS。 
作为对本发明的改进,其位操作类指令集中可包含2条程序执行位判断决定执行指令,这些指令将R内容输入到ALU,根据指定的位进行是0或1的判断,决定是否执行下一条指令;这些指令包括判断位为0、判断位为1,其操作码分别对应的指令符号为JBC、JBS。 
作为对本发明的改进,其立即数与控制类指令集中可包含5条程序执行不带进/借位的立即数I和数据读取装置内的功能寄存器A0算术逻辑运算指令,这些指令将I和A0内容输入到ALU进行运算,将运算 的结果写入数据写回装置内功能寄存器A1操作;这些立即数运算指令包括加法、减法、逻辑与、逻辑同或、逻辑异或,其操作码分别对应的指令符号为ADDI、SUBI、ANDI、IORI、XORI。 
作为对本发明的改进,其立即数与控制类指令集中包含2条程序执行带进/借位的I和功能寄存器A0算术逻辑运算指令,这些指令将I和A0内容输入到ALU进行运算,将运算的结果写入功能寄存器A1操作;这些指令包括带进位加法、带借位减法,其操作码分别对应的指令符号为ADDCI、SUBCI。 
作为对本发明的改进,其立即数与控制类指令集中包含1条程序对数据读取装置内的功能寄存器A0赋值指令,将立即数赋值给功能寄存器A1的指令,这条指令操作码对应指令符号MOVI。 
作为对本发明的改进,其立即数与控制类指令集中包含1条程序执行立即数乘法运算指令,这条指令将立即数和功能寄存器A0内容输入到ALU进行运算,将运算的结果低8位写入功能寄存器A1,高8位写入功能寄存器B1,立即数乘法指令为单周期指令,这条指令操作码对应指令符号MULI。 
作为对本发明的改进,其立即数与控制类指令集中包含2条程序执行调用子程序指令,这些指令将立即数赋值程序计数器PC,然后将PC值压入堆栈;这些指令包括调用子程序、长地址调用子程序,其操作码分别对应的指令符号为CALL、LCALL。 
作为对本发明的改进,其立即数与控制类指令集中包含2条程序执行跳转指令,这些指令将立即数赋值给PC;这些指令包括跳转、短地址 跳转,其操作码分别对应的指令符号为GOTO、JUMP。 
作为对本发明的改进,其立即数与控制类指令集中包含1条程序执行子程序返回指令,这条指令将跳出子程序,其操作码对应的指令符号为RET。 
作为对本发明的改进,其立即数与控制类指令集中包含1条程序执行带立即数子程序返回指令,这条指令将跳出子程序,同时将立即数赋值给功能寄存器A1,其操作码对应的指令符号为RETI。 
作为对本发明的改进,其立即数与控制类指令集中包含1条程序执行中断程序返回指令,这条指令将跳出中断子程序,其操作码对应的指令符号为RETINT。 
作为对本发明的改进,其立即数与控制类指令集中包含1条程序对看门狗WDT清0指令,这条指令将WDT清0,其操作码分别对应的指令符号为CWDT。 
作为对本发明的改进,其立即数与控制类指令集中包含1条程序进入空闲模式指令,其操作码分别对应的指令符号为IDLE。 
作为对本发明的改进,其立即数与控制类指令集中包含1条程序执行长调用子程序指令LCALL,这条指令无需通过设置跨页操作,直接实现程序存储器8k范围内的子程序调用。 
作为对本发明的改进,其立即数与控制类指令集中包含1条程序执行短地址跳转指令JUMP,这条指令将实现程序存储器-255~+255范围内的跳转。 
本发明是一种新型RISC流水线微控制器构架及实现,该微控制器 构架的指令集为精简指令集(RISC),数据总线宽度为8位,采用两级流水线并行处理和执行指令,数据存储采用单端异步RAM方式实现,作为通用寄存器堆,内部还有D触发器组成的寄存器堆,共同组成了数据寄存器,其物理地址通过一个映射表映射到逻辑地址上。 
本发明的技术效果是:在流水线工作时,时钟发生器把外部时钟,分成四相时钟Q1/Q2/Q3/Q4,即控制4个流水线段的时钟。而四相时钟是通过两级触发器的状态机来控制实现的,可使其各项时钟不会交叉耦合,并且具备很强的抗干扰性,保证能够产生稳定的时钟,因此各装置间相互依靠、相互备份,而对数据的预处理和处理,又可使得该结构对于抗干扰能力有很大的提高;除此之外,由于采用合理的流水时钟和构架设置,适合采用Top-Down的全同步设计,从而缩短设计、验证周期,同时具备可测性设计DFT和可制造性设计DFM,实现较高的芯片生产良率。 

附图说明

图1是二级四段流水线结构的机构框图; 
图2是本发明微控制器构架的系统框图; 
图3是流水线基本电路; 
图4是本发明微控制器构架的应用环境及外围模块资源配置图; 
图5是本发明微控制器构架内核; 

具体实施方式

下面详细描述与微控制器构架功能特征相关的硬件细节。 
如图1是一个二级四段流水线结构,由四相时钟Q1/Q2/Q2/Q3驱动工作,每一段流水线在对应时钟相内完成功能,它包括:指令处理装置,程 序指针指向程序存储器,选取程序的内容,使其进入指令寄存器,指令寄存器的值经过译码器进行译码操作,该装置还包括对端口的变化进行采样的端口预处理器和对立即数操作的立即数处理器,此类功能在Q1相时钟完成;数据读取装置,由指令处理装置输出的译码信号,进入读数据寻址处理单元对数据寄存器进行寻址并且从被寻址到的数据寄存器读取数据,该装置还包含对中断请求标志位进行处理的中断标志位处理器和位操作处理器,此类功能在Q2相时钟完成;数据运算装置,包括进行数据运算的算术逻辑运算单元ALU,确定端口变化的端口终处理单元,检测微控制器是否处于空闲模式的空闲模式处理器,读取下一条指令的取指令处理器,此类功能在Q3相时钟完成;数据写回装置,包括对数据寄存器进行寻址的写数据寻址处理器,并将数据运算装置的结果写回被写数据寻址的数据寄存器或功能寄存器,同时还包括堆栈处理器、中断处理器和PC处理器(含PC加1、PC出栈、PC跳转),以备下一级流水线使用,此类功能在Q4相时钟完成;时钟发生器,由独热码(One-Hot)状态机产生的四相时钟信号分别输出至各个其他装置,同时产生所述二级四段流水线结构所需的同步时钟信号。 
参考图2,这是本发明微控制器构架的系统结构。首先,时钟发生器为各个装置提供时钟,16位程序指针指向程序存储器并取出指令,需要把指令送到指令寄存器中存储起来,然后进行相应的译码。译码器控制整个微控制器工作状态,译码器的输出的微码将指令分为三大类:字节操作类指令,位操作指令,立即数操作和控制操作类指令。如果是控制操作类指令,通过多路器的选择,将选择译码器输出的程序指针。和算术逻辑运 算相关的指令,将译码输出指向ALU,决定ALU的运算类型(包括算术运算和逻辑运算),具体操作参考核心构架的实现(图5)。中断处理器是处理中断的核心部件,当发生中断时,通过多路器将选择中断向量作为程序指针,同时PC处理器将当前PC输入堆栈处理器做压栈处理;当发生中断返回时,堆栈处理器做出栈处理,将栈中的数据输出至PC处理器,而PC处理器将通过多路器将出栈的数据作为程序指针。PC处理器除了上述功能以外,还包括微控制器正常工作的PC加1操作,执行跳转指令时,译码器将跳转地址赋值给PC做跳转操作,以及为抗干扰而设计的PC备份操作,每次PC的变化都将上一次PC值做备份,以备PC受干扰时可以做一些补救操作。所以译码时输出也会分成三大类,参考图5。译码器输出对于寄存器的操作就是读写操作,首先,读寄存器需要译码器输出读寻址信号,指定某个特定的数据寄存器以及相应的读信号;其次,当ALU运算完毕,写寄存器需要译码器输出写寻址信号,指定某个特定的数据寄存器以及相应的写信号,如果指定的寄存器为功能寄存器,那么直接写回功能寄存器。完成一个指令周期后,多路器将选取下一个临时程序指针输入到程序指针,取出下一条指令,如此不断循环,形成流水线作业。本发明中指令集的大部分为单周期指令,执行的效率较高,更加容易的实现流水线操作。 
由于芯片工作模式和端口处理是本发明的较为突出的特点,所以微控制器在流水操作中实时的检测微控制器是否需要进入低功耗的空闲模式,所以安排Q3来完成空闲模式处理;而端口预处理和端口后处理是检测芯片的部分端口是否有变化,通过Q1完成预处理和Q3完成终处理,以保证 微控制器对外部信号的变化做出准确的判断,避免芯片受到干扰后,无法正确判断的现象发生。 
如图3所示的程序流程原理图。复位以后,PC寄存器值为0000H,程序指针指向程序存储器的0000H处。时钟发生器开始工作,在Q1相时钟,PC值备份到PC_TEMP寄存器;由芯片的工作模式判断得知是否芯片是否工作在IDLE模式,如果工作在IDLE模式,PC值同样备份到PC_PLUS寄存器,否则PC加1备份到PC_PLUS寄存器。而PC_PLUS和PC_TEMP值在Q4相时钟,通过判断芯片工作模式,给PC寄存器赋值,如果工作在IDLE模式,PC_TEMP寄存器赋值给PC寄存器,否则PC_PLUS寄存器值赋给PC寄存器。执行调用子程序指令,在Q4相时钟,PC_TEMP值直接压栈到STACK堆栈寄存器,PC寄存器的值通过指令译码得到,实现PC跳转;该堆栈为多级堆栈,采用独热码(One-Hot)状态机实现堆栈状态的转移,使得堆栈的压栈出栈非常稳定;当中断返回或者子程序中断返回,堆栈将做出栈操作,堆栈的栈顶值赋给PC寄存器。PC寄存器值可以直接通过指令赋值,将功能寄存器A的值直接赋值给PC寄存器,实现PC跳转;PC寄存器还可以通过跳转类指令,将立即数值赋值给PC寄存器,实现PC跳转。 
可选择的多中断向量和中断向量表是本发明的一个重要特征,从图5发现,通过中断向量选通,可以选择一个中断向量模式,即中断向量0,或者多个中断向量,即中断向量1到中断向量N。根据实际应用,选择一个合适的中断向量表,将不同的中断进行分类,分别分配到不同的中断向量,即中断向量1到中断向量N。一次中断只能选择一个中断向量,中断向量通过多向量选通信号,选择本次中断的中断向量,进行中断子程序的 处理,使得中断的应用更加方便可靠。 
程序流程和程序指针相互依赖,在Q3相时钟,比较PC_TEMP寄存器值和程序指针是否一样,产生PC_DIFF标志信号,如果PC_DIFF为1表示程序指针已经发生改变,如果PC_DIFF为0表示PC指针没有发生变化。当PC_DIFF为1,表示程序工作在跳转或者中断或者调用子程序,程序指针通过PC指向程序存储器,如果PC_DIFF为0,表示程序顺序执行,即PC加1的模式执行。 
这种方法实现的PC处理、中断处理、堆栈处理,能够达到性能可靠、速度较快,比如在执行CALL、RET等指令时,中断处理器和堆栈处理电路可以自动进行PC压栈和出栈处理,把当前程序地址从程序计数器取出来,压入堆栈,或把堆栈顶部弹出,作为当前地址装载到程序计数器中。这种方式大大加快了中断处理速度。 
如图4所示,为本发明的算术逻辑运算单元原理图。2选1的多路选择器MUX1的输入为寄存器A0或B0和常数01H,输出为alub。同样,通过另一个多路选择器MUX3的输入K是从指令直接译码过来的立即数,fout表示从寄存器堆里输出的数据。对这些输入的选择需要根据当前执行的指令来判断,选择所需的输出数据。多路选择器MUX3的输出为alua,它一方面输入进算术逻辑运算部分,另一方面通过2选1多路选择器MUX2,输入进算术逻辑运算部分。多路选择器MUX2由信号alubf来控制,信号alubf主要由清零指令产生。如果有清零信号产生,就选通alua输入进算术逻辑运算部分ALU。算术逻辑运算部分ALU是算术逻辑运算单元最核心的部分,它包含有硬件加法器、硬件乘法器、硬件移 位器、逻辑运算器、位操作器等,可以实现移位运算、与非、或非、异或、非、加法、减法、乘法和比较等运算。 
根据opcode[3:0]来进行选择,3-8译码器主要用来进行位操作。通过3-8译码器选中所需操作的位,输入ALU的位操作器进行位的运算和操作(包括位置1和位清0)。另一个信号C是进位或借位,用于进行加法,减法,移位运算。算术逻辑运算部分输出有三种信号即:运算进位标志aluc,半字节进位标志aludc,运算零标志aluz,运算结果的数据1;如果进行乘法运算,产生高8位的运算结果为数据2和低8位的运算结果为数据2。由于加法器、乘法器、移位器、逻辑运算器、位操作器都是采用硬件实现,即采用逻辑的线与、线或等硬件电路实现,大大节省的运算单元的芯片面积,同时也大大提高了运算速度,比如通过硬件乘法器执行的乘法指令只需要一个指令周期就可以完成。 
本发明ALU完成所有的指令都只需要一个时钟周期,即在指令周期的Q3相时钟完成。而运算的结果在指令周期的Q4相时钟写入对应的寄存器,数据1通过选择器写入功能寄存器A1或数据寄存器,选择器通过指令的标志位F做选择写入功能寄存器A1或数据寄存器;如果执行乘法指令,那么乘法的高8位结果写入功能寄存器B1、低8位结果写入功能寄存器A1;如果执行运算类的指令过程中,产生的进位标志aluc,半字节进位标志aludc,零标志aluz,将写入状态寄存器STA,分别为STA第0位STA[0]保存进位/借位C,STA第1位STA[1]保存半字节进位DC,STA第2位STA[2]保存零标志位Z。对于功能寄存器A0/A1在物理上的寻址为同一类功能寄存器A,在不同的装置分别定义为A0/A1,即将功能寄存器A内容读至数 据总线记为A0,从总线上将数据写入功能寄存器A记为A1;对于功能寄存器B0/B1在物理上的寻址为同一类功能寄存器B,在不同的装置分别定义为B0/B1,即将功能寄存器B内容读至数据总线记为B0,从总线上将数据写入功能寄存器B记为B1。 
图5是本发明微控制器构架的应用环境及资源配置图。 
异步静态数据存储器是寄存器堆的一部分,用作通用数据寄存器,与特殊寄存器堆分离,特殊寄存器用D型边沿触发器实现。异步静态数据存储器与SRAM接口电路3一起组成了通用数据寄存器电路,在实现时异步静态数据存储器1是用标准RAM COMPILER生成的。程序存储器通过配置接口,采用异步方式与CPU核进行数据交换。从图5中可以看到,本发明的程序总线和数据总线分开,属于哈佛型结构,数据传输速率比共享总线增加1倍。 
时钟发生器电路为本发明芯片提供所有的时钟信号,包括四相时钟Q1/Q2/Q3/Q4等,四相时钟连接到各个功能模块,为各个模块工作的提供时钟。复位电路为本发明的其它部分提供所有必要的复位信号,如上电复位电路,启动延时定时器,WDT复位信号,外部复位信号等。 
本发明的其他外围模块包括通信接口,外围定时器,捕捉/比较/脉宽调制等。通信接口主要是串行通信接口,包括HSSP高速同步串行接口和HASRT高速同步异步发送接收通信接口。外围定时器包括T1定时器,T2定时器。捕捉/比较/脉宽调制主要包括CCP1第一路捕捉/比较/脉宽调制,CCP2第二路捕捉/比较/脉宽调制。这些外围电路使得微控制器的控制能力大大增强,实现了基本的通信接口功能,强大的定时功能,对外部信号 处理能力的等等。 
本发明微控制器构架支持常见微控制器的典型程序指令,包括算术和逻辑指令、分支指令、数据传输指令和位测试及位设置指令。这些指令能由前面叙述和附图中给出的微控制器构架电路支持实现。以下是本发明微控制器构架的指令集,最高位可以扩展,该位微码可以为0或1。 
(1)指令:ADD 
编码:7’b1101011 
操作:(A)+(R)->(目标) 
语法:[标号]ADD R,F 
描述:把寄存器R的内容加到寄存器A的内容上。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:C,DC,Z 
(2)指令:SUB 
编码:7’b1101110 
操作:(R)-(A)->(目标) 
语法:[标号]SUB R,F 
描述:把寄存器R的内容减去寄存器A的内容(余2法)。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:C,DC,Z 
(3)指令:INC 
编码:7’b1100110 
操作:(R)+1->(目标) 
语法:[标号]INC R,F 
描述:把寄存器R的内容加1。如果F=0,则结果保存 
在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:Z 
(4)指令:DEC 
编码:7’b1101111 
操作:(R)-1->(目标) 
语法:[标号]DEC R,F 
描述:把寄存器R的内容加1。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:Z 
(5)指令:AND 
编码:7’b1101001 
操作:(A).AND.(R)->(目标) 
语法:[标号]AND R,F 
描述:把寄存器R的内容跟寄存器A的内容逻辑与。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:Z 
(6)指令:IOR 
编码:7’b1101000 
操作:(A).OR.(R)->(目标) 
语法:[标号]IOR R,F 
描述:把寄存器R的内容跟寄存器A的内容逻辑或。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:Z 
(7)指令:XOR 
编码:7’b1101010 
操作:(A).XOR.(R)->(目标) 
语法:[标号]XOR R,F 
描述:把寄存器A的内容跟寄存器R的内容逻辑异或。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:Z 
(8)指令:COM 
编码:7’b1100101 
操作:-(R)->(目标) 
语法:[标号]COM R,F 
描述:把寄存器R的内容取反。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:Z 
(9)指令:CLR R 
编码:8’b11011011 
操作:00h->(R) 
1->Z 
语法:[标号]CLR R 
描述:清除寄存器R的内容,并把标志位Z置1。 
影响标志位:Z 
(10)指令:CLRA 
编码:15’b110110100000011 
操作:00h->(A) 
1->Z 
语法:[标号]CLRA 
描述:清除寄存器A的内容,并把标志位Z置1。 
影响标志位:Z 
(11)指令:JINC 
编码:7’b1100011 
操作:(R)+1->(目标) 
如果结果为0则跳过下一指令 
语法:[标号]JINC R,F 
描述:把寄存器R的内容加1。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
如果结果为1,则接着执行下一条指令。如果结果为0, 则执行一条NOP指令,占据2个时钟周期。 
(12)指令:JDEC 
编码:7’b1100111 
操作:(R)-1->(目标) 
如果结果为0则跳过下一指令 
语法:[标号]JDEC R,F 
描述:把寄存器R的内容减1。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
如果结果为1,则接着执行下一条指令。如果结果为0,则执行一条NOP指令,占据2个时钟周期。 
(13)指令:RL 
编码:7’b1100001 
操作:参见下列描述 
语法:[标号]RL R,F 
描述:把寄存器R的内容通过进位标志向左循环移动一位,具体操作参见附图1。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:C 
(14)指令:RR 
编码:7’b1100000 
操作:参见下列描述 
语法:[标号]RR R,F 
描述:把寄存器R的内容通过进位标志向右循环移动一位,具体操作参见附图2。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:C 
(15)指令:NOP 
编码:15’b110_1100_0xx0_0000 
操作:空操作 
语法:[标号]NOP 
描述:空操作。 
该指令执行时,不执行任何操作。x表示0和1都可以。 
(16)指令:NOP2 
编码:15’b111_1xxx_xxxx_xxxx 
操作:空操作 
语法:[标号]NOP2 
描述:空操作。 
该指令执行时,不执行任何操作。x表示0和1都可以。 
(17)指令:NOP3 
编码:15’b000_000x_xxxx_xxxx 
操作:空操作 
语法:[标号]NOP3 
描述:空操作。 
该指令执行时,不执行任何操作。x表示0和1都可以。 
(18)指令:DAW 
编码:15’b000_0100_xxxx_xxxx 
操作:参见下列描述 
语法:[标号]DAW 
描述:把寄存器A的内容进行BCD码调整,具体调整操作参见附图3。并将结果保存回寄存器A。 
影响标志位:C,DC,Z 
(19)指令:DAR 
编码:7’b0000101 
操作:参见下列描述 
语法:[标号]DAR R,F 
描述:把寄存器R的内容进行BCD码调整,具体调整操作参见附图3。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:C,DC,Z 
(20)指令:ADDC 
编码:7’b111010x 
操作:(A)+(R)+C->(目标) 
语法:[标号]ADDC R,F 
描述:把寄存器R的内容和C加到寄存器A的内容上。如果F=0,则结果保存在寄存器A上;如果F=1,则结果 保存回寄存器R。 
影响标志位:C,DC,Z 
(21)指令:SUBC 
编码:7’b111011x 
操作:(R)-(A)-C->(目标) 
语法:[标号]SUBC R,F 
描述:把寄存器R的内容减去寄存器A的内容,再减去C。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
影响标志位:C,DC,Z 
(22)指令:MUL 
编码:7’b1110001 
操作:(R)*(A)低8位->(目标),(R)*(A)高8位->(B) 
语法:[标号]MUL R,F 
描述:把寄存器R的内容乘以寄存器A的内容。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。高8位保存到B寄存器,所以一般配合MOVAB指令使用。乘法指令占用1个指令周期。该条指令的引入,使本发明的计算能力大大增强,克服了现有微控制器构架数据处理能力弱的缺陷,从而能适应于计算量密集型应用,如空调变频算法等。 
影响标志位:Z 
(23)指令:MOV 
编码:7’b1100100 
操作:(R)->(目标) 
语法:[标号]MOV R,F 
描述:移动寄存器R的内容。如果F=0,则目标是寄存器A;如果F=1,则目标是寄存器堆本身。“F=1”用于通过状态标志位“Z”来测试寄存器堆。 
影响标志位:Z 
(24)指令:MOVA 
编码:8’b11011001 
操作:(A)->(R) 
语法:[标号]MOVA R 
描述:移动寄存器A的内容到寄存器R。 
(25)指令:MOVAB 
编码:7’b111001x 
操作:(A)->(B)或者(B)->(A) 
语法:[标号]MOVAB F
描述:按照F=1,移动寄存器A的内容到寄存器B;按照F=0,移动寄存器B的内容到寄存器A。该条指令的引入,使得本发明,增加了一种寻址方式。 
(26)指令:SWAP 
编码:7’b1100010 
操作:(f<3:0>)->(目标<7:4>), 
(f<7:4>)->(目标<3:0>) 
语法:[标号]SWAP R,F 
描述:把寄存器R的内容的上、下半位元组交换。如果F=0,则结果保存在寄存器A上;如果F=1,则结果保存回寄存器R。 
该指令执行时,交换第一寄存器高位和低位的值,再把操作的输出存回寄存器A或R寄存器。 
(27)指令:BC 
编码:5’b10011 
操作:0->(R
语法:[标号]BC R,BI T 
描述:寄存器R的第BIT位被清零。BIT从7~0表示R第7~0位。 
(28)指令:BS 
编码:5’b10010 
操作:1->(R
语法:[标号]BC R,BIT 
描述:寄存器R的第BIT位被置1。 
(29)指令:JBC 
编码:5’b10001 
操作:如果(R)=0则跳过下一指令 
语法:[标号]JBC R,BIT 
描述:如果寄存器R的第BIT位是“1”,则执行下一条指令。如果寄存器R的第BIT位是“0”,则放弃下一条指令,执行一条NOP指令,一共占据2个时钟周期。 
(30)指令:JBC 
编码:5’b10000 
操作:如果(R)=1则跳过下一指令 
语法:[标号]JBC R,BIT 
描述:如果寄存器R的第BIT位是0,则执行下一条指令。如果寄存器R的第BIT位是1,则放弃下一条指令,执行一条NOP指令,一共占据2个时钟周期。 
(31)指令:ADDI 
编码:7’b101001x 
操作:(A)+I->(A)
语法:[标号]ADDI I 
描述:寄存器A的内容加一个8位数字I,结果保存回寄存器A。 
影响标志位:C,DC,Z 
(32)指令:SUBI 
编码:7’b101000x 
操作:I-(A)->(A) 
语法:[标号]SUBI I 
描述:8位数字减去寄存器A的内容,结果保存回寄存器A。 
影响标志位:C,DC,Z 
(33)指令:ANDI 
编码:7’b1010101 
操作:(A).AND.I->(A) 
语法:[标号]ANDI I 
描述:寄存器A的内容跟8位数字I逻辑与,结果保存回寄存器A。 
影响标志位:Z 
(34)指令:IORI 
编码:7’b1010100 
操作:(A).OR.I->(A) 
语法:[标号]IROI I 
描述:寄存器A的内容跟8位数字I逻辑或,结果保存回寄存器A。 
(35)指令:XORI 
编码:7’b1010110 
操作:(A).XOR.I->(A) 
语法:[标号]XORI I 
描述:寄存器A的内容跟8位数字I异或。结果保存回 寄存器A。 
影响标志位:Z 
(36)  指令:ADDCI 
编码:7’b0000010 
操作:(A)+I+C->(A) 
语法:[标号]ADDCI I
描述:寄存器A的内容加8位数字I,再加C以后,结果保存回寄存器A。 
影响标志位:C,DC,Z 
(37)指令:SUBCI 
编码:7’b0000011 
操作:I-(A)C->(A) 
语法:[标号]SUBCI I
描述:8位数字减去寄存器A的内容,再减C以后,结果保存回寄存器A。 
影响标志位:C,DC,Z 
(38)指令:MOVI 
编码:7’b10111xx 
操作:I->(A) 
语法:[标号]MOVI I 
描述:把8位立即数I装载进寄存器A,I的值为空,被当成0处理。 
(39)指令:CALL 
编码:4’b0001 
操作:(PC)+1->TOS, 
I->PC<10:0>, 
(PCH<7:3>)->PC<15:11> 
语法:[标号]CALL I 
描述:调用子程序。首先,返回地址(PC+1)压入堆栈。 
11位直接地址装载进PC的<10:0>位。PC的其余高位<15:11>从PCH<4:3>装载。CALL是双周期指令。 
(40)指令:LCALL 
编码:4’b01 
操作:(PC)+1->TOS, 
I->PC<12;0>, 
语法:[标号]LCALL I
描述:调用子程序。首先,返回地址(PC+1)压入堆栈。 
低13位直接地址装载进PC的<12:0>位。LCALL是双周期指令。TOS为堆栈的顶部。 
(41)指令:GOTO 
编码:4’b0010 
操作:I->PC<10:0>, 
(PCH<7:3>)->PC<15:11> 
语法:[标号]GOTO I(0<I<2048) 
描述:GOTO是无条件分支,可以在寄存器堆之间跳转。11位直接地址装载进PC的<10:0>位。PC的其余高位<15:11>从PCH<7:3>装载。GOTO是双周期指令。 
(42)指令:JUMP 
编码:7’b1110000 
操作:I->PC<7:0>, 
(PCH<7:0>)->PC<15:8> 
语法:[标号]GOTO I(0<I<256) 
描述:GOTO是无条件分支,可以在寄存器堆之间跳转。8位直接地址装载进PC的<7:0>位。PC的其余高位<15:8>从PCH<7:0>装载。JUMP是双周期指令。 
(43)指令:MULI 
编码:7’b000011x 
操作:I*(A)->(A)
语法:[标号]MULI I 
描述:立即数乘以寄存器A的内容。结果保存在寄存器A上,高8位保存到B寄存器。乘法指令占用1个指令周期。该条指令的引入,使本发明的计算能力大大增强,克服了现有微控制器构架数据处理能力弱的缺陷,从而能适应于计算量密集型应用,如空调变频算法等。 
影响标志位:C,DC,Z 
(44)指令:RET 
编码:15’b110110000000000 
操作:TOS->PC 
语法:[标号]RET 
描述:从子程序返回。堆栈上弹,堆栈的顶部(TOS)装载到程序计数器中。这是双周期指令。 
(45)指令:RETIA 
编码:5’b10110 
操作:I->(A), 
TOS->PC 
语法:[标号]RETIAI 
描述:把8位数字装载到寄存器A上。程序计数器从堆栈(返回的地址)的顶部装载。这是双周期指令。
(46)指令:RETIE 
编码:15’b110110000001001 
操作:TOS->PC, 
1->GIE 
语法:[标号]RETIE 
描述:从中断返回,并且使得全局中断使能有效。 
上述指令CALL、LCALL、GOTO、JUMP、RET、RETIE、RETIA执行时,指令执行单元产生相应的控制信号,能够自动地进行PC出栈操作,把当前程序计数器的值压入堆栈,或从堆栈顶部弹出当前地址,装载到程序计数器中。 
(47)指令:CWDT 
编码:15’b0000000_0110_0100 
操作:00h->WDT, 
0->WDT预定标, 
1->OT 
1->LP 
语法:[标号]CWDT 
描述:CWDT指令重置看门狗定时器,也重置看门狗定时器的预定标因子,同时置位超时状态位OT和低功耗状态位LP。 
(48)指令:IDLE 
编码:15’b110_1100_0000_0000 
操作:00h->WDT, 
0->WDT预定标, 
1->OT 
0->LP 
语法:[标号]IDLE 
描述:低功耗状态位LP被清除,超时状态位OT被置位,看门狗定时器和预分频被清除,处理器处于空闲状态,时钟振荡器停止工作。 
上述指令CWDT和IDLE执行时,指令执行单元产生相应的控制信号,能够重置看门狗的值。 
应用程序示例: 
ORG 00H;定义首地址00H 
JINC 21H,1;加1判断寄存器21H的内容,并写回21H 
AND 22H,0;22寄存器内容和功能寄存器A做逻辑与操作,写回功能寄存器A 
CALL 88H;调用88H处的子程序 
ORG 88H 
RET 
示例说明: 
上述汇编代码经过编译,得到程序存储器地址和程序存储器内存储的二进制代码如下: 
程序地址   二进制程序代码      16进制代码 
0000H      0110001110110001    63B1H 
0001H      0110100100100010    6922H 
0002H      0000100010001000    0888H 
0088H      0110110000001000    6C08H 
下面结合上述应用程序示例和示例说明书中所提供的程序地址、二进制程序代码和16进制代码作进一步详细说明,从中表现出CPU对于上述指令操作以及使用到的各个装置内的功能模块的工作原理。 
首先上电进行初始复位时,16位程序指针的数值为0000H,同时程序指针指向程序存储器16位地址的首地址0000H,其存储的内容为63B1H。 
第一步,在第一指令周期的第一时钟,通过译码63B1H得知该指令为JINC(操作码对应的指令符号,在发明内容中有述)加1判断指令,产生JINC的控制信号;本条指令的操作数为寄存器21,即对寄存器21的内容进行操作;将PC寄存器值0000H写入PC_TEMP临时寄存器做备份操作;经过双周期指令预处理,该指令可能为双周期指令;没有中断和端口变化,所以中断向量处理器和端口变化中断预处理器空闲。同时将程序指针0000H做PC寄存器值备份到PC_TEMP寄存器,PC_PLUS加1操作以及CPU其他相关处理。 
第二步,在第一指令周期的第二时钟,通过读数据寻址器完成寄存器寻址,即将寄存器21H内容读取至数据总线;没有中断和位操作,所以中断标志位处理器和位操作处理器空闲。 
第三步,在第一指令周期的第三时钟,指令译码的结果表明输入的运算数据:多路选择器的输出alua为从寄存器堆里输出的数据fout,即实施例指令集中所提及的寄存器30H的内容和另一多路选择器的输出alub为01H,即加法所需的数值1;数据选择完毕,ALU将根据译码信号对2个输入的数据进行加法运算,加法运算在ALU的硬件加法器内进行;如果加法以后输出零标志位Z为0,那么该指令为单周期指令,指令顺序执行,即PC_PLUS寄存器值作为程序指针来读取下一条指令6922H;如果加法以后输出零标志位Z为1,那么指令为双周期指令,流 水线段会插入一个空操作NOP(6C00H),以继续完成流水线,即PC_PLUS不做读取程序存储器操作;端口变化终端处理和空闲模式激活预处理此时为空闲状态。 
第四步,在第一指令周期的第四时钟,ALU运算完毕的数据写回寄存器21H(在实施例中已提及),零标志位Z写入状态寄存器的STA[2];判断是否有中断正在中断处理器内处理,内部堆栈是否为有操作等,此时没有中断和堆栈处理,那么程序计数器的内容将通过流水线的多路器传送给程序指针,此时程序指针变为0001H,进入下一个流水线循环。 
由于每条指令所需各个装置的功能模块不一样,比如上述CALL指令将由堆栈操作、PC跳转操作,AND指令需要功能寄存器A参与工作等等。每条指令代码从译码操作开始,都必须经过一个指令周期的四相时钟,而在指令周期的第三相时钟读取下一条指令,从而组成了两级四段流水线结构方法。 
虽然已公开了本发明的优选实施例,但本领域技术人员将会意识到,在不背离权利要求书中公开的本发明的范围和省去隔直电容精神的情况下,任何各种修改、添加和替换均属于本发明的保护范围。 
本申请是申请日为2005年8月31日,申请号为200510029281.4,发明名称为《一种新型的8位RISC微控制器构架》的发明专利申请的分案申请。