专利名称:具有risc结构的八位微控制器的制作方法
技术领域:
本发明总体上涉及微控制器,尤其是涉及与执行缩减(reduced)指令集的微控制器。
背景技术:
目前的亚微米CMOS技术已能使复杂的微控制器集成在芯片上,同时留有足够的硅面积用于实现复杂的存储器和外围逻辑。可以有效地利用高端32位和64位RISC机器中最常用的设计结构和方法,且它适用于低成本的8位微控制器系统。有了这种高功能而低成本的微控制器,系统的总体集成水平得以继续增加。可以以硬件结构方式执行更有效的程序,且可集成更多的硬件功能。
近年来,RISC结构已获得普及。最有名的就是由Apple Computer、IBM和Motorola联合开发的Power PC。虽然没有有关定义RISC处理器性能的协议,但各种不同的RISC结构间所具有的共同特性为(1)大多数指令以一个周期执行;(2)单独且简单的加载/存储指令常以二个周期执行;(3)指令译码典型地由硬件而不是用微代码完成,使得执行时间更快;(4)大多数指令具有固定格式,因而简化了指令译码;(5)指令集较小且地址模式较少;(6)数据通道高度流水线,提供了高度的处理进发性;以及(7)大的高速寄存器组(也就是所谓寄存器堆(file))避免了往返于低速系统RAM的过度的数据传送。
有若干半导体制造商生产微控制器。例如,Texas Instruments提供了TMS370Cxlx系列的8位微控制器系统。虽然这些微控制器未使用RISC结构,但它们提供的RAM(128或256字节)既可用作RAM也可用作通用寄存器。Motorola提供的MC6805系列的8位微控制器使用与Texas Instruments器件类似的两用RAM。Microchip Technology提供有PIC16C5X系列的微控制器。这些微控制器使用Harvard双总线结构,其中数据和程序指令具有分开的存储器和总线。PIC16C5X利用与系统RAM共享的寄存器堆。PIC16C5X使用了一层指令流水线;当执行一条指令时,预先从程序存储器中取出下一条指令。由于RAM还起到寄存器的双重作用,故不存在实际的内部寄存器组。因所有的存储器均为静态RAM,所以涉及寄存器操作的性能有所下降。
如上所述,快速的设计周期是微控制器设计中的重要考虑因素。无疑,软件在微控制器设计中起着重要作用。因而,微控制器设计的应用与程序员和硬件设计者之间的规范接口直接有关,即与微控制器的指令集有关。任何可计算的功能应当可以合理的程序空间来实现,指令集在这个意义上应当是完整的。指令集应当是有效的,即应可以相对少的指令来实现经常使用的功能。
因而希望提供一种微控制器设计,它能为应用软件开发人员提供一组完整和有效的指令集。
发明概述本发明是一种具有8位RISC结构的微控制器。8位数据总线在RAM存储库、寄存器堆、通用8位算术逻辑单元(ALU)和状态寄存器之间提供数据通道。微控制器实行Harvard结构,提供了与RAM库分开的程序存储库以及与数据总线分开的程序数据总线。
寄存器堆包括多个8位寄存器。可以组合寄存器堆中的某些寄存器来提供16位逻辑寄存器。16位逻辑寄存器提供了有效地址的计算并用作数据存储器和程序存储器内的间接地址指针。无论对于数据存储器还是程序存储器而言,通过增加程序地址空间和数据地址空间使得16位地址空间大大增加了微控制器的灵活性和实用性。在本发明的一个较佳实施例中,寄存器堆提供了可作为三个独立的16位逻辑寄存器而访问(即读/写)的三对8位寄存器。
为了进一步增强16位寻址的优点,使用了一个专用于寄存器堆的特殊的第二算术逻辑单元。第二ALU含有16位加法器,为16位逻辑寄存器提供了16位算术运算。第二ALU可以存储返回到16位逻辑寄存器的16位结果。另外,16位结果可用作地址。因此,第二ALU的存在提供了有效的16位地址计算而不增加通用8位ALU的负担从而不会降低器件的操作速度。
在寄存器堆中提供的16位逻辑寄存器的进一步扩展包括使用8位RAM页面(paging)寄存器。RAM页面寄存器的8位在逻辑上与16位逻辑寄存器的16位串接以提供24位逻辑地址。这一特性为基础结构基本上是8位设计的微控制器提供了前所未有的寻址范围。尤其是,页面寄存器把存储器组织为256页,每页64K(64*1024)字节的RAM,每个64K的页面由面页寄存器引用。在本发明的较佳实施例中,共有三个页面寄存器,每一个用于寄存器堆提供的三个16位逻辑寄存器中的每一个。
本发明的寄存器堆的特征是,以与包括寄存器堆的逻辑的传播延迟相等的延迟来进行寄存器访问。由于这种组合延迟比时钟周期短得多,所以寄存器访问完全在一个时钟循环中发生。本发明的特征还在于通用算术和逻辑单元(ALU)能在单个时钟周期内进行每一个运算。因此,本发明实际上能在单个时钟周期内进行所有的ALU运算。
此外,依据本发明,寄存器堆中的寄存器占据RAM的一部分地址空间。此特征允许通常与RAM访问有关的常规寻址模式,从而可对寄存器进行访问,就象它们是普通存储器位置一样。此外,这种存储器位置对微控制器来说就象高速存储器。
位存储允许来往于寄存器堆的寄存器中的任意一位位置进行一位数据的传送。在较佳实施例中,位存储(store)位于状态寄存器中。这种位传送特性允许直接操纵寄存器的位位置而不用进行许多费时的寄存器移位操作。在许多微控制器应用中典型的是,包括一字节数据的各个位明显地独立于其它位。现有技术的微控制器的指令集一般包括了提供寄存器左移和右移的移位指令。因而,对寄存器给定位位置上的位访问依靠移动该位(右移或左移)而完成。这是一种破坏性操作,如果要保留原始数据则要求保存寄存器的内容。此外,这是一种费时的操作且需要用多条程序指令来实现。本发明的位传送操作提供了较省时且消耗空间较小的访问任意位位置的手段。
带进位比较指令对包含寄存器堆的8位寄存器提供了16位增强功能。该指令集的特性提供了有效的方法在8位环境下实行16位量的比较,因而进一步增强了本发明8位微控制器的计算功能。
附图简述
图1示出本发明微控制器的布局示意图。
图2示出图1所示微控制器的寄存器堆的内部表示。
图3示出图2所示寄存器堆中寄存器的结构。
图4详述了图3所示的寄存器写使能电路。
图5A和5B示出图4中所使用的OR门结构。
图6示出图1所示状态寄存器的内部结构。
图7图1所示通用ALU的内部结构。
图8A和8B示出包含在图7的通用ALU中的两个ALU子单元。
图9示出程序计数器。
图10示出依据本发明使用页面寄存器的24位逻辑地址的形成。
图11示出监视定时器电路。
图12是结合了图10所示页面寄存器的图1的微控制器的图。
图13示出N-输入使能AND门。
实行本发明的最佳方式参考图1,本发明的微控制器10的设计是围绕8位数据总线12的结构。数据总线为组成微控制器的各组成部分提供了数据通道。自带RAM用作通用数据库。与RAM分开的8位寄存器堆20为微控制器提供了一组高速8位存储器库。
通用算术和逻辑单元ALU-122与寄存器堆耦合,为寄存器中存储的数据提供算术计算。ALU-1的输出耦合到8位数据总线12和状态寄存器24。根据ALU-1的结果来设定组成状态寄存器的各状态位。
如下所述,状态寄存器包含的位包括中断使能标志;位转移标志;半进位标志;2的补码溢出标志;负标志;等于负标志与2的补码溢出标志之间的“异或”的符号位;零标志以及进位标志。状态寄存器耦合到数据总线12以允许对状态位进行读/写访问。耦合到数据总线12的其它组成部分包括用于子程序调用/返回和用于中断处理的堆栈指针、定时器、中断电路、定时和控制电路、EEPROM和UART。由端口驱动器驱动的I/O数据寄存器为微控制器提供了I/O通道19。
直接地址总线16提供了在程序执行期间对RAM位置和寄存器堆的直接访问。间接地址总线14提供间接寻址。间接地址总线14包括用于接收来自寄存器堆即总线接口14′的地址,总线接口14′将寄存器堆耦合到间接地址总线14以把地址发送到RAM或程序计数器28。
微控制器10的指令执行组成部分包括与程序存储器耦合的程序计数器28。在一较佳实施例中,程序存储器是可编程高速缓冲存储器,从程序存储器提取由程序计数器指定的指令并送入指令寄存器。指令译码器对来自指令寄存器的程序指令进行译码,产生各种控制信号。控制信号经控制线送到微控制器10的其它组成部分以按照经译码的程序指令进行操作。与指令执行部分耦合的总线总称为程序总线。将与数据库分开的程序存储器库的配置以及与数据总线12分开的程序总线的使用通常称为Harvard结构。
如上所述,寄存器堆是由多个8位寄存器构成。在本发明的较佳实施例中,有32个8位寄存器。然而要指出,无论寄存器堆中的寄存器或多或少,微控制器将工作得一样好。通用算术和逻辑单元ALU-1是8位运算器,在寄存器堆中选中的寄存器之间提供算术运算。ALU-1的输出可以通过数据总线12反馈到寄存器堆中的寄存器。正如下面将要更详细讨论的那样,某些8位寄存器可以成对组合以提供16位逻辑寄存器。在本较佳实施例中,三对8位寄存器提供了三个16位逻辑寄存器X、Y、Z,如图1所示。
回到图2,本发明的寄存器堆包括寄存器电路100,寄存器电路100提供了32个8位寄存器R0-R31。寄存器堆包括三个输出A、B、C和三个输入D BUS、D ALU2H、D ALU2L。如下所述,寄存器电路100可以把最后六个寄存器R26-R31规定为三对16位逻辑寄存器R27/R26(X)、R29/R28(Y)、R31/R30(Z)。由两个16线数据总线102、104组成的公共总线接口对16位寄存器分别提供数据入和数据出总线。
从B和A输出构成数据出总线104,B输出提供16位值的高字节,A输出提供16位值的低字节。数据入总线102分割成寄存器堆输入的D_ALU2L(低字节)和D_ALU2H(高字节)。
把由寄存器堆提供的16位寄存器作为用于RAM和程序空间寻址的间接地址寄存器指针。为了便于存储器访问,为地址计算提供了诸如后递增(post-increment)和预递减(pre-decrement)等某些16位算术运算。虽然可以使用ALU-1为16位寄存器提供16位算术运算,但由于ALU-1的八位设计使这种运算效率极低。
因而,图2所示的寄存器堆包括专用于该寄存器堆第二算术和逻辑单元ALU-2,以便于与16位逻辑寄存器有关的16位计算。算术和逻辑单元ALU-2是16位设计,如此定制以提供间接地址指针一般所需的特定操作。ALU-2的第一输入由寄存器堆的数据出总线104馈送。ALU-2的第二输入由选择器110馈送。选择器110从以下三个选择中选取一个数值数值-1、数值+1及常数K_IN。ALU-2的输出在数据入总线102上反馈到X、Y、Z寄存器,使寄存器的内容得以更新。多路复用器(mux)114耦合到寄存器堆的总线接口14′。多路复用器114的一个输入耦合到ALU-2的输出,而多路复用器的第二输出则耦合到数据出总线104。这种安排使多路复用器114能选择性地输出来自ALU-2或来自寄存器电路100的数据。
下述控制信号与所讨论的寄存器堆的特性的操作有关。它们包括V SEL、ALU2 OP和ADDR SEL。这些信号由源自指令译码器的各条控制线传送。参考本发明的微控制器的程序指令,下面将根据这些控制信号讨论寄存器堆的操作。
图2中所示的寄存器电路100的内部结构如图3的逻辑图所示。在本发明的一个实施例中提供了32个寄存器R0-R31,每一个均有一组8位输出线121和一组8位输入线123。提供的寄存器的实际数目对于本发明并不重要。
每个寄存器由一组八个D型触发器构成,如图3中每个触发器内的“x8”标号所示。寄存器的输出线121由组成寄存器的八个触发器中每一个的输出Q构成。同样,寄存器的输入线123由组成寄存器的八个触发器中每一个的输入D构成。
如图3所示,编号为偶数的寄存器R0,R2,...R30具有耦合到8位4∶1多路复用器130的输出的公共输入。同样,编号为奇数的寄存器R1,R3,...R31具有与编号为偶数的寄存器分开而耦合到8位4∶1多路复用器132的输出的公共输入。4∶1多路复用器130选择其四个8位输入D_BUS、K_IN、D_BUS[n]和D_ALU2L中的一个作为编号为偶数的寄存器的输入。4∶1多路复用器132选择其四个8位输入中的一个作为编号为奇数的寄存器的输入。选择器D_SEL耦合到这两个多路复用器,并选择每个多路复用器130、132的第一、第二第三或第四输入。从8位数据总线取得多路复用器130的第一输入D_BUS。多路复用器130的第二输入K_IN是从某些指令的操作数得到的8位常数,将在以下结合本发明微控制器的指令集的讨论来描述这些指令。多路复用器130的第四输入D_ALU2L(图2)为ALU-2(图2)的16位输出的低字节。多路复用器130的D_BUS[n]输入指来自数据总线12的位线中的一条。此位线n重复(replicate)八次作为多路复用器130的第三8位输入。以下所述的BLD指令使用此D_BUS[n]输入。
重复多路复用器130的输出作为多路复用器132的第一、第二和第三输入。多路复用器132的第四输入D_ALU2H为ALU-2的16位输出的高字节。于是,当D_SEL选中第一、第二或第三多路复用器输入时,给编号为偶数和奇数的寄存器提供相同的输入,即D_BUS、K_IN或D_BUS[n]。当D_SEL选中第四多路复用器输入时,给编号为偶数的寄存器提供的输入为D_ALU2L,给编号为奇数的寄存器提供D_ALU2H输入。在对应于X、Y和Z寄存器的讨论中,D_ALU2L和D_ALU2H输入的重要性将变得很清楚。
对相应于每个寄存器R0-R31的这组八个触发器进行写,以给D引线提供输入,并确定触发器的时钟线CK。本发明的寄存器结构的优点是,寄存器的写操作很灵活。依据操作模式,可把十六位的数据作为一字数据写入一寄存器对中,可把八位数据作为一字节数据写入一寄存器中,或者可把寄存器的特定位作为一位数据来写。由确定适当的CK信号从而进行正确的寄存器和位的写操作,因而提供了这样的灵活性。R_SEL和WE_R控制线配合依据选中的寄存器来写八位触发器。WE_XH、WE_XL、WE_YH、WE_YL、WE_ZH和WE_ZL控制线使能对十六位X、Y和Z寄存器进行写。R_SEL、BIT_SEL和WE_BIT控制线配合把一位写入选中寄存器的选中位。
通过多路复用器120、122、124来提供寄存器的内容,这些多路复用器的输出分别是图2所示的输出A、B和C。这些输出多路复用器中的每一个都是选择32个八位输入中的一个输入的八位32∶1多路复用器。这32个寄存器中每一个的输出都耦合到多路复用器120、122、124中每一个的相应输入。控制器R_OUTA、R_OUTB、R_OUTC操作多路复用器来输出所需寄存器的内容。
多路复用器120的八位输出馈送入8∶1多路复用器136,在这里,BIT_SEL控制线用于选择八位中的一位。多路复用器136的输出耦合到位测试电路138,由BTST_CLR和BTST_SET控制线来操作位测试电路138来测试是清除还是设定选中的位。位测试电路的输出驱动BR_SKP控制线。
依据本发明,除了所需的八位寄存器以外,微控制器还提供了十六位逻辑寄存器。这是通过把寄存器文件堆中的寄存器配对并把他们作为单个寄存器来实现的。以此方式提供了三个十六位寄存器X、Y、Z。X寄存器由寄存器对R27/R26构成;Y寄存器由寄存器对R29/R28构成;Z寄存器由R/31/R30寄存器对构成。
现在转到图4,该图更详细地示出图3的选择器控制电路。解码器单元140是1∶32解码器,它响应于解码R_SEL来确定32个输出中的任一个输出。解码器的每一条输出线都相应于一寄存器。这些输出馈送到两个使能AND门142、144。图13详述了一使能AND门50的结构,它具有一个一位使能输入A、一个N位输入B以及一个N位输出。图13的详述的细节示出这样的门由N个二输入AND门构成。这N个AND门中每一个门的第一输入接收使能输入A,而AND门的第二输入接收N位B输入的每一位。因而,假设使能输入A被赋值,则门50使得B输入传送到该输出。相反,使能AND门50的所有的N个输出为LOW。回到图4,使能门142由WE_R来使能,而使能门144由WE_BIT来使能。
接着,使能门142的32个输出中的每一个输出耦合到合成OR门150-181的一个输入。使能门144的32个输出中的每一个输出耦合到1∶8多路复用器M0-M31。每个多路复用器M0-M31的八个输出耦合到合成OR门150-181的另一个输入。每个合成OR门与寄存器R0-R31相连。图5A示出合成OR门150的结构。合成OR门150由八个独立的二输入OR门150A-150H构成。一位输入线190源自于使能门142的一个输出并耦合到每个OR门150A-150H的第一输入。八位输入线191源自于多路复用器M0的输出。每条输入线191耦合到OR门的第二输入。可看出,每个OR门耦合到寄存器R0的一个触发器的CK线(CK0-CK7)。此结构适用于合成OR门150-175。
回到图4,注意一些合成OR门即门176-181具有一第三输入。此第三输入来自对应于X、Y、Z寄存器的写的WE_XL、WE_XH、WE_YL、WE_YH、WE_ZL和WE_ZH控制线之一。从示出合成OR门176的细节的图5B可看出,有附加的一位控制线194耦合到每个OR门176A-176H的第三输入。此结构适用于合成OR门176-181。
如上所述,R_SEL和WE_R控制线配合把八位数据写入选中的寄存器。这是通过把数据定时输入与该寄存器对应的触发器来实现的。例如,考虑把数据写入寄存器R0。把五位控制线R_SEL设定为选中寄存器R0。解码器140对该线进行解码,从而使与寄存器R0相应的输出线赋值,寄存器R0通过使能门142耦合到OR门150的输入线190。如图5A所示,输入线190同时对寄存器R0的所有触发器进行定时,从而输入出现在触发器的D输入(图3)处的数据。
在讨论R_SEL、WE_BIT和BIT_SEL控制线以前,回到示出状态寄存器24的图6。状态寄存器24由八个触发器构成,每个触发器用于本发明中所使用的每个状态位中断使能标志I;位转移标志T;半进位标志H;2的补码溢出标志V;负标志N;符号位S,等于负标志与2的补码标志之间的异或;零标志Z;以及进位标志C。对I触发器的输入直接连到F_SET控制线。对T触发器的输入经由OR门耦合到F_SET控制线以及AND门228的输出。对其余触发器的输入经由其各自的OR门耦合到F_SET控制线以及使能AND门230(图13)的八个输出。
8∶1多路复用器202接收所有这些状态寄存器标志的输出,并输出依据F_OUT控制线的设定而选中的一个标志。多路复用器202的输出馈送入位测试装置208以产生BR_SKP控制信号。多路复用器202的输出还馈送入AND门218,AND门218的输出直接连到数据总线D_BUS[n]的位N。此外,如下所述,H、S、V、N、Z和C标志馈送入通用ALU 22。
每个触发器包括简单地通过使特定标志的相应触发器复位而有效地清除该特定标志的复位R。每个复位连到使能AND门224的八个输出。使能AND门224由T_SEL控制线来使能。
I触发器的时钟输入连到使能AND门226的输出。T触发器的时钟输入经由一OR门连到使能门226以及T_SEL控制线。其余的触发器经由其各自的OR门连到使能门226以及F_SETALU控制线。
多路复用器210接收来自8位总线的输入D_BUS。BIT_SEL控制线把八位中的一位输出给AND门228,AND门228的输出馈送入T触发器。T_SEL控制线用作AND门228的使能输入。
使能AND门230接收来自通用ALU 22的输入,并由F_SETALU控制线来使能。此元件用于在ALU运算期间更新从ALU接收到的状态标志。将结合ALU 22的讨论对其进行进一步的讨论。
每个解码器204、206对F_SEL控制线进行解码来赋值其八个输出中的一个输出,把该输出分别馈送入使能AND门224、226。F_CLR控制线使门224使能。F_SET控制线使门226使能。
位测试装置208由馈送到一OR门216的一对AND门212、214构成。门214具有耦合到多路复用器202的倒相的输入。门214的另一个输入耦合到FTST_CLR控制线。门212的输入是多路复用器202的输出以及FTST_SET控制线。
多路复用器的输入还连到由T_OUT控制线使能的AND门218。所示AND门218的输出耦合到八位数据总线的位线n。
现在的讨论将转到本发明的八位微控制器的另一个特征。如上所述,用于加载或存储寄存器的任意位位置的已有技术需要寄存器移位和/或寄存器掩蔽(masking)操作,从而导致代码不太有效且代码大小增加。此外,这是一种破坏性的操作,要保护原始数据则需要保存寄存器的内容。
考虑图3-6所示的R_SEL、WE_BIT和BIT_SEL控制线。这些控制线操作寄存器电路100(图3)完成把单个位写到选中寄存器的特定位位置。待写入的位从状态寄存器24获得并经由D_BUS[n]来提供。这是通过设定F_OUT(图6)而选中多路复用器202处T触发器的输出并发出T_OUT使AND门218使能而把输出推到数据总线上来实现的。接着,利用选中多路复用器130的D_BUS[n]输入的D_SEL,该位变得可在多路复用器130和多路复用器132的八条输出线中的每一条输出线处获得。这样提供了待写到所有的寄存器(图4)的所有的触发器的输入的位。例如,考虑把该位要写到寄存器R26的位位置2。由解码器140(图4)对设定为选择寄存器R26的R_SEL控制线进行解码,以赋值相应的输出线。赋值WE_BIT控制线使经解码的输出能通过相应于寄存器R26的1∶8多路复用器(即多路复用器M26)的输入。被设定为选择位位置2的BIT_SEL控制线操作每个多路复用器(包括多路复用器M26),以把其一位输入选通到其八个输出中的第二个输出。从多路复用器M26继续,其八条输出线用作图5B所示合成OR门176的输入193。输入193的每条线
经过一OR门176A-176H到达特定触发器。然而,由于只赋值一条线(在此情况下为线[1]),所以只对选中寄存器的有关触发器之一加时钟脉冲来接收该位。
现在讨论转到图7所示的本发明的通用ALU 22。ALU 22由多个运算子单元OP1-OPn构成,每个子单元能进行特定的运算。通用ALU所进行的典型运算包括加、逻辑运算和移位运算,每个运算都由独立的子单元来进行。ALU的输入即A、B、K_IN,而来自状态寄存器24的标志被馈送入每个子单元。这些子单元同时进行其相应的运算并产生八位结果22C和六位状态结果22D。这种并行结构提供比串行实例更快的执行时间,使得任何ALU运算可在单个时钟循环内发生。
接着,这些子单元的结果22C馈送入选择器22A。选择器由ALU1_OP来控制,以把一个运算子单元的结果输出到数据总线12上。以类似的方式处理状态结果22D,每个结果被馈送到选择器22B中,此选择器22B也由ALU1_OP来控制,从而状态寄存器24接收相应于选中操作的状态结果。
ALU 22还包括XOR门23和九输入AND门24。XOR在A和B的八位的每一位之间进行位方式(bitwise)XOR操作。XOR操作的八个结果被馈送入AND门的八个倒相输入。当A=B时,XOR操作的全部八个结果将为逻辑“0”。这使得AND门在CPSE控制线被赋值时输出逻辑“1”,因而使BR_SKP控制线赋值。
如上所述,每个子单元OPn提供了特定的算术或逻辑运算,对A、B和/或K_IN输入进行运算来提供结果22C并更新适当的状态标志。图8A和8B示出两个典型的运算子单元图8A在A输入和经由K_IN提供的即时常数之间实行逻辑AND;图8B实行A输入的逻辑左移。
现在转到图9来讨论程序序列。从程序存储器25中取得指令并加载入指令寄存器21。指令解码器23包含用于对取得的指令进行解码并产生控制信号的逻辑,这些控制信号被控制线传送到微控制器的其它部分来执行指令。指令解码器发出SP_INC和SP_DEC信号,以响应于子程序指令和中断来递增和递减堆栈指针。
同时,指令解码器23还产生“递增”程序计数器28来取得下一指令的信号。这些信号包括=q、-q、+q、+3、+2和+1。“=q”信号用于把分支转移(branch)指向绝对地址q的那些指令。“+q”和“-q”信号用于指定向前和向后转移相对数量q的那些指令。在每种情况下,量q都包含在该指令中。“+3”和“+2”向后用于跳跃(skip)指令,待跳跃存储器位置的数目依据跳跃指令的大小。“+1”向后简单地使程序计数器递增到下一条指令。此外,对于把X、Y或Z寄存器之一用作下一指令的源地址的那些指令,程序计数器接收来自寄存器堆20的输入。程序计数器还接收来自RAM 27的输入作为下一指令的另一个源地址,即RAM中由X、Y和Z寄存器之一或堆栈指针26所指定的位置。
通常,指令解码器发出“+1”信号,在执行当前指令的同时使得程序计数器28和程序快擦写存储器预先取得正好下一个指令。然而,当向BR_SKP控制线赋值时,使程序计数器28和指令寄存器21丢弃预先取得的指令、计算新地址并取得新指令;新地址依据该指令而定。将结合特定的分支转移指令的讨论来提供进一步的细节。
本发明的八位微控制器的另一个特征是图10所示的增强的寻址功能。示出REGISTER FILE外部的三个附加的寄存器,即RAM页面(paging)寄存器RAMPX、RAMPY、RAMPZ。RAM页面寄存器结合与其相应的16位逻辑寄存器X、Y、Z一起操作来提供比已有技术的8位微控制器要大大增加的寻址范围。在所揭示的实施例中,RAM页面寄存器是8位寄存器。然而,这并不重要,很清楚本发明可方便地以具有不同位长度的寄存器来工作。
参考图10,示出了如何构成地址的示意表示。每个RAM页面寄存器与它相应的16位寄存器串接。例如,RAM页面寄存器RAMPX的8位与X寄存器的16位串接而形成24位地址。在较佳实施例中,RAMPX的8位用作24位逻辑地址的高阶位X[23...16],而X寄存器的16位提供了24位逻辑地址的低阶位X[15...0]。这一结构创建的存储器模型是一组64个字节(64×1024)的页面,每个64K页面被一个8位RAM页面寄存器访问,总共256个页面。
现在回到图12描述与本发明所揭示的实施例有关的RAM页面寄存器的实施例。每个RAM页面寄存器RAMPX、RAMPY、RAMPZ耦合到8位数据总线12,以在程序执行期间接收对8位页面的引用。选择器11(例如3∶1多路复用器)从每个RAM页面寄存器接收8位并将所选的RAM页面寄存器之一的8位传送到选择器的输出。REGISTER FILE 20的总线接口14′的16位与来自选择器11的8位串接以形成由间接地址总线14来传送的24位地址。
由于24位地址能寻址16M(16×1024×1024)的RAM,所以本发明的扩展的24位寻址允许使用外接RAM(未示出)。所包括的24位外部地址总线17和8位数据总线15用于微控制器和外部RAM(未示出)间的数据访问。根据本发明,REGISTER FILE 20、I/O数据寄存器(I/O空间)、机内RAM和外部RAM占用同一数据地址空间。REGISTER FILE占用前32个地址位置,接着是分配给I/O空间和机内RAM的地址,机内RAM占用N个地址位置,N为RAM的大小。其余的地址空间由外部RAM提供。因而,地址范围00到(N-1)映射为机内存储器(REGISTER FILE、I/O空间和RAM),而其余地址范围N到(16M-1)映射为外部RAM的存储器位置。例如,机内存储器总共为64K字节,则机内地址范围为$00到$FFFF(“$”表示十六进制记号),而外部RAM地址范围为$10000到$FFFFFF。注意,可以改变机内存储器的数量而不影响本发明的实用性或可操作性,实际存储器数量取决于诸如可用硅面积、器件几何尺寸及设计规则等设计准则。
为了保证正确地按给定的地址访问机内存储器和外部RAM,使用第二选择器13来把地址或者传送到内部地址总线14或者传送到外部总线地址17。在较佳实施例中,选择器13是1∶2多路复用器,其中单个MUX输入被传送到其两个输出之一。这里,单个输入是来自选择器11的24位地址线。选择器13的一个输出耦合到地址总线14,而另一个输出耦合到外部地址总线17。一旦检测到机内存储器地址范围内的一个地址,则使选择器13将它的输入传送到地址总线14。注意,仅把24位地址的低阶16位[15...0]传送到地址总线14。相反,一旦检测到外部存储器地址范围内的一个地址,则选择器13将把它的输入传送到外部地址总线17。多种检测方案的任何一种都是可行的,它们都在普通技术人员的能力内。例如,一种方案可把24位地址([23...0])的高阶8位地址“或”在一起,用其结果来控制选择器13。如OR运算导致FALSE,意味着该地址落入机内存储器地址范围,则选择器13应将其输入传送到内部地址总线14。如果OR运算导致TRUE,意味着地址是全24位地址,则选择器13应将其输入传送到外部地址总线17。
在已对本发明的8位微控制器的特性有关的硬件作了详细描述后,现在转到对微控制器指令集的讨论。
表I归纳了控制微控制器而实行指令集的控制线表I控制线ADDR_SEL从寄存器堆或者从ALU-2中选择一16位地址ALU1_OP选择将在ALU-1中进行的一个运算(见表III)ALU2_OP选择将在ALU-2中进行的一个运算BIT_SEL选择一位(0到7)来接收一位
BR_SKP 使程序计数器进行分支转移或跳跃CPSE 发出A和B相等时的BR_SKP控制D_SEL选择待加载到寄存器的数据源F_CLR清除指定的状态标志F_OUT输出状态标志F_SET设定指定的状态标志F_SETALU 响应于在ALU-1中进行运算而设定状态标志F_SEL选择待设定或清除的状态标志R_OUTA 选择一寄存器输出寄存器堆100的A处的数据R_OUTB 选择一寄存器输出寄存器堆100的B处的数据R_OUTC 选择一寄存器输出寄存器堆100的C处的数据R_SEL选择一寄存器来接收数据T_SEL把一位存入T标志T_OUT把T标志装入数据总线的位n(对于BLD指令)TST_CLR 测试是否清除选中的状态标志TST_SET 测试是否设定选中的状态标志V_SEL选中ALU-2的输入的值WD_E 监视定时器使能WD_RST 监视定时器延迟复位WD_SEL 监视定时器延迟选择WE_BIT 选中位的写使能WE_R 选中寄存器的写使能WE_XHX寄存器的写使能WE_XLX寄存器的写使能WE_YHY寄存器的写使能WE_YLY寄存器的写使能WE_ZHZ寄存器的写使能WE_ZLZ寄存器的写使能表II归纳了数据线表II数据线
D_BUS来自八位数据总线12的数据D_ALU2H 来自专用ALU-2的数据(高字节)D_ALU2L 来自专用ALU-2的数据(低字节)K_IN 从指令操作数获得的恒定数据值表III归纳了算术和逻辑运算,由控制线ALU1_OP来选择特定的运算。一些指令在两个寄存器A和B上操作。其它指令在寄存器和恒定值k(即,“即时”值)上操作。
表IIIALU-1运算(ALU OPn)n运算 描述1O←A+B ADD,无进位加2O←A+B+Cy ADC,带进位加3O←A-B SUB,无进位减4O←A-k SUBI,减去即时值5O←A-B-Cy SBC,带进位减6O←A-B-Cy SBCI,带进位地减去即时值7O←A&B AND,逻辑AND8O←A&k ANDI,与即时值的逻辑AND9O←AvB OR,逻辑OR10 O←AvB ORI,与即时值的逻辑OR11 O←A XOR B EOR,异或12 O←$FF-A COM,1的补码13 O←$00-A NEG,2的补码14 O←Avk SBR,设定寄存器中的位15 O←A&($FF-k) CBR,清除寄存器中的位16 O←A+1 INC,递增17 O←A-1 DEC,递减18 O←A&A TST,测试零或负号19 O←A XOR A CLR,清除寄存器20 O←$FF SER,设定寄存器21 R1,R0←AxBMUL,乘法(元符号)
22On+1←AnLSL,逻辑左移O0←0Cy←A723On←An+1LSR,逻辑右移O7←0Cy←A024O0←Cy ROL,通过进位的左循环移位On+1←AnCy←A725O7←Cy ROR,通过进位的右循环移位On←An+1Cy←A026On←An+1ASR,算术右移对于n=0…627O←ASWAP,交换半字节这里O0...3←A4...7以及O4...7←A0...328A-B CP,比较-仅组标志29A-B-Cy CPC,带进位比较-仅组标志29A-k CPI,与即时值比较-仅组标志30 不运算表IV归纳了专用ALU-2的算术运算表IVALU-2操作(ALU2 OP)n 操作1 加ALU-2输入2 减ALU-2输入3 不操作本发明的大多数这里指令在单个时钟周期内进行。每个寄存器的内容总是可以在其相应触发器(图3)的输出处获得。因而,选中寄存器的内容几乎可立即在多路复用器120、122、124的输出处获得,只需要等于包括这些多路复用器的组合电路的传播延迟的延迟。此时间周期一般叫做“组合延迟”。
在一个时钟周期内执行以下算术和逻辑指令ADD、ADC、SUB、SUBI、SBC、SBCI、AND、ANDI、OR、ORI、EOR、COM、NEG、SBR、CBR、INC、DEC、TST、CLR、SER、LSL、LSR、ROL、ROR、ASR、SWAP、CP、CPC、CPI.如图2所示,几乎在确定指令并解码后,A和B输入立即可用于通用ALU 22。R_OUTA控制线选择寄存器的内容并把它输出到ALU 22的两个输入之一。如果指令规定第二寄存器操作数,则类似地对R_OUTB赋值。或者,对于使用即时数据的那些指令,K_IN控制线用作ALU的二进制输入。同时,ALU的子单元OPn(图7)进行其各自的操作,一旦设定ALU的输入,结果就变得可在另一个短的组合延迟后获得。通过ALU1_OP控制线选中相应于该指令的子单元的结果22C,并把该结果置于数据总线12上。同时,D_SEL控制线(图3)操作多路复用器130、132,以选中数据总线输入D_BUS。R_SEL(以及WE_R)控制线选择待存储该结果的寄存器;在一“组合延迟”后,对该结果按时钟节拍输入寄存器。同时,还通过发出F_SETALU信号对ALU所设定的状态标志按定时节拍输入状态寄存器(图6)。
乘法指令MUL把两个八位寄存器相乘,把十六位的结果存入R0/R1寄存器对。与其它ALU指令不同的是,MUL指令需要两个时钟周期每个周期用于把十六位结果的一半存入寄存器对中的一个寄存器。
MOV指令在一个时钟周期中提供了寄存器之间的数据传送。MOV指令指定了源寄存器和目的地寄存器。参考图2、3和4,R_OUTC控制线操作多路复用器124来把所指定的源寄存器的内容推到数据总线12上。同时,D_SEL控制线操作多路复用器130、132输出D_BUS,使之出现在寄存器的输入D处;R_SEL和WE_R控制线操作选择器控制电路134对目的地寄存器加以定时脉冲,继而存储D_BUS所提供的内容。
LDI指令允许把指定的数据装入寄存器。该数据是以LDI指令的机器操作码来指定的,并且作为多路复用器130的K_IN输入。D_SEL控制线操作多路复用器130、132来输出K_IN,而R_SEL和WE_R控制线操作选择器控制电路134对所指定的寄存器加以定时脉冲。
十六位X、Y、Z寄存器的操作包括LD指令,用于把数据从由一X、Y、Z寄存器寻址的存储器位置传送到所指定的寄存器;以及ST指令,用于把数据从所指定的寄存器传送到由一X、Y、Z寄存器寻址的存储器位置。LD和ST指令的执行需要两个时钟周期。参考图2和3,在第一时钟周期期间,R_OUTA和R_OUTB控制线选择所需十六位寄存器中的寄存器对(XR27/R26,YR29/R28,ZR/31/R30)。ADDR_SEL控制线操作选择器114把BA输出置于间接地址总线14上。此外,在ST指令的情况下,R_OUTC控制线选择从中读取数据的寄存器,把该数据置于总线12上。在第二时钟循环期间,选通存储器把来自存储器的数据装到总线12上(LD)或者把数据写入存储器(ST)。此外,在LD指令的情况下,选择R_SEL和WE_R控制线把来自D_BUS的数据写入指定的寄存器。
LD和ST指令中的每一个指令具有适用于支持某些C预言特征的两个变形,即后递增(LD+,ST+)以及预递减(LD-,ST-)运算。如上所述,图2所示的专用ALU-2提供了这种运算所需的十六位算术。
后递增在第一时钟周期中,除了以上对LD和ST指令所述的动作以外,在把十六位地址置于总线14上后,V_SEL控制线选择+1输入,ALU2_OP操作专用ALU-2来进行加法运算。加法102的结果耦合到寄存器电路100的D_ALU2H和D_ALLU2L输入。图3的D_SEL控制线选择D_ALU2H和D_ALLU2L多路复用器输入,把D_ALU2H发送到R27、R29和R231,并把D_ALLU2L发送到R26、R28和R30。然后赋值适当的WE_[XYZ]L和WE_[XYZ]H控制线把该数据写入正确的寄存器对。
预递减在第一时钟周期中,除了以上对LD和ST指令所述的动作以外,V_SEL选择-1输入,ALU2_OP使ALU-2进行加法。该结果(i)如上所述反馈到寄存器电路,且(ii)由ADDR_SEL选中而用作预递减地址。
为了简化查表操作,LD和ST指令中的每一个指令具有第三变形(LDD,STD)。LDD和STD指令指定了在存储器访问前加到十六位地址寄存器的位移值。在第一时钟周期中,除了以上对LD和ST指令所述的动作以外,V_SEL还选择K_IN输入,ALU2_OP使ALU-2进行加法。由ADDR_SEL选中此结果用作位移地址。
除了对LD指令所提供的计算以外,专用ALU-2还用于方便进行十六位加减指令,即ADIW和SBIW指令。专用ALU-2可在一个时钟周期中以X、Y、Z寄存器进行计算,而使用通用ALU 22是不可能实现的。ADIW和SBIW指令指定X、Y、Z寄存器中的一个寄存器以及待加到其上的恒定值。在操作中,R_OUTA和R_OUTB控制线把指定的寄存器对选为专用ALU-2的第一输入。V_OUT把K_IN(恒定值)选为ALU-2的第二输入。ALU2_OP选择加法或减法运算。把结果102反馈到寄存器电路100的D_ALU2H和D_ALLU2L输入。图3的D_SEL控制线选择D_ALU2H和D_ALLU2L多路复用器输入,把D_ALU2H发送到R27、R29和R231,并把D_ALLU2L发送到R26、R28和R30。然后赋值适当的WE_[XYZ]L和WE_[XYZ]H控制线把该数据写入正确的寄存器对。
微控制器提供了设定和清除状态寄存器24的各种标志的指令,每个指令都在一个时钟周期中执行。他们包括BSET和BCLR;以及SEx和CLx,这里x为I、T、H、S、V、N、Z或C。在汇编语言层,SEx和CLx指令不需要额外的操作,而BSET和BCLR指令包括状态标志操作数s,以识别待受影响的标志。
参考图6,控制信号F_SEL操作解码器204、206选择待受影响的标志。在清除标志指令的情况下,F_CLR控制线用作使能信号,从而在相应于被影响标志的使能AND门224处提供输出。此输出耦合到触发器的复位R输入,继而清除该触发器。在设定标志指令的情况下,F_SET控制线起到双重作用首先,它作为每个触发器的输入以便设定状态标志之一(由F_SEL来选择)。其次,F_SET控制线是使能AND门226的使能信号,其输出耦合到触发器时钟线以便作为输入端的时钟脉冲。
如上所述,本发明的微处理器的特征是位访问能力,该能力是由单时钟周期的BST和BLD指令来提供的。BST指令指定寄存器和该寄存器中待拷贝到状态寄存器的T标志内的位位置。R_OUTC控制线选择该寄存器,由多路复用器124把该寄存器的内容推到数据总线12上。同时,BIT_SEL控制线操作多路复用器210(图6)选择来自数据总线的所需位,然后通过赋值T_SEL控制线把该位装入T触发器。
BLD指令把存储在T标志中的位装入指定寄存器的指定位位置。F_OUT控制线操作多路复用器202选择T标志,而T_OUT控制线把输出推到数据总线的位n。同时,转到图3,D_SEL控制线选择多路复用器130、132的第三输入,因而提供了作为所有寄存器输入的D_BUSN。R_SEL、BIT_SEL和WE_BIT控制线(图4、5A和5B)对所需寄存器/位位置的触发器提供时钟节拍信号。
提供了以下的条件转移指令,每个指令指定一个位移量BRBS[C] -在设定[清除]所指定的状态标志时转移BREQ[NE] -在设定[清除]Z标志时转移BRCS[CC] -在设定[清除]C标志时转移BRLO[SH] -在设定[清除]C标志时转移BRMI[PL] -在设定[清除]N标志时转移BRLT[GE] -在设定[清除]S标志时转移BRHS[HC] -在设定[清除]H标志时转移BRTS[TC] -在设定[清除]T标志时转移BRVS[VC] -在设定[清除]V标志时转移BRIE[ID] -在设定[清除]I标志时转移除了以上转移指令以外,还提供了根据对指定寄存器的指定位的测试结果跳过下一指令的SBRC和SBRS指令。类似地,CPSE指令把两个寄存器的内容相比较并根据比较结果跳过下一指令,即在相等时跳跃。这些指令依据是否采取转移而在一个或两个时钟周期中进行。
参考图6和9,在取得BRxx指令时,F_OUT控制线传送控制信号以输出来自多路复用器202的所需状态标志,发出FTST_SET或FTST_CLR信号,从而位测试装置208进行适当的位测试。同时,程序计数器28已被递增,且预先取得下一指令。如果位测试失败,则把预先取得的指令作为待执行的下一指令。如果位测试通过,则BR_SKP控制线被赋值,使得程序计数器形成转移地址,且使指令寄存器25加载新指令。新指令的装入需要第二个时钟周期。
参考图3,示出依据SBRC和SBRS指令产生BR_SKP控制信号。所需的寄存器由多路复用器120通过R_OUTA控制线选中并耦合到多路复用器136的输入。BIT_SEL控制线操作多路复用器136输出所需的位,然后通过赋值BTST_CLR或BTST_SET控制线而在位产生装置138中测试该位。依据测试结果对BR_SKP控制线赋值。
参考图3和7,将描述依据CPSE指令产生BR_SKP控制信号。由多路复用器120、122通过R_OUTA和R_OUTB控制线的操作,使有关的两个寄存器的内容可在通用ALU 22的A和B输入处获得。通过XOR门23和AND门24在ALU中进行“比较”操作。赋值控制线CPSDE以使AND门的输出使能,从而当A=B时使BR_SKP赋值。
提供了以下的无条件转移指令RJMP指令指定加到程序计数器的位移值以产生相对跳跃地址;IJMP指令把ZJ寄存器的内容用作跳跃地址;JMP指令指定要装入程序计数器的跳跃地址。IJMP指令对R_OUTA和R_OUTB控制线产生控制信号,以选择包括Z寄存器的寄存器对R31/R30。如图2所示,ADDR_SEL操作多路复用器114,以把Z寄存器的内容推到间接地址总线14,然后把此内容装入程序计数器28。
提供了以下与子程序有关的指令CALL指令指定子程序起始地址的地址;RCALL指令指定要加到程序计数器的位移值,以产生子程序的起始地址;ICALL指令把Z寄存器的内容用作子程序的起始地址。在执行ICALL指令期间,以与如上对IJMP指令相同的方式操作寄存器堆20。子程序调用指令还操作堆栈指针和堆栈即RAM中被堆栈指针寻址的区域,以保存返回的地址。
子程序返回指令包括标准RET指令,以简单地给程序计数器装入堆栈顶部的内容并相应地更新堆栈指针。此外,还为从中断处理器(handler)返回提供了RETI指令。RETI指令以与RET相同的方式操作,附加的动作是设定状态寄存器中的I标志。
PUSH和POP指令通过相应地赋值SP_INC和SP_DEC控制线并对堆栈(RAM中)进行读写来操作堆栈指针。
使用IN和OUT指令经由数据总线12在寄存器和I/O端口数据寄存器之间传送数据,这就象由一系列触发器构成的寄存器堆中的寄存器。IN指令把来自I/O端口的数据装入寄存器。把指定端口的数据寄存器的内容推到数据总线12上。D_SEL控制线操作多路复用器130、132输出D_BUS。R_SEL和WE_R控制线操作选择器控制电路134,从而对所需的寄存器定时输入数据。结果,OUT指令把来自寄存器的数据加载到I/O端口。通过发出R_OUTC信号把数据从指定的寄存器加载到数据总线上。然后,操作选中端口的数据寄存器的触发器,以对出现在数据总线12上的数据按时钟节拍输入。
LPM指令把来自程序存储器的一字节数据装入寄存器R0。程序存储器中的地址包含在Z寄存器中。通过发出R_OUTA和R_OUTB信号以在多路复用器120、122处输出寄存器R31/R30并经由多路复用器114把获得的十六位值(图2)推到地址总线14上来访问Z寄存器。访问程序存储器并把数据加载到数据总线上。D_SEL控制线(图3)选择D_BUS输入,而R_SEL和WE_R控制线操作选择器控制电路,以对相应于寄存器R0的触发器进行定时输入,因而把D_BUS装入寄存器R0。
SLEEP指令把微控制器设定在休眠模式。在由中断唤醒时,操作程序计数器和指令寄存器在执行中断处理程序前,装入SLEEP指令后的指令并执行该指令。
微控制器包括监视定时器300(图1),它将使微控制器复位,除非定时器在某个用户可选择的时段内被复位。图11示出,定时器300由计数器302构成,计数器302具有耦合到选择器304的多个输出。由在1MHz下运行的内部振荡器提供计数器的定时时钟。在某些计数后发出计数器的每个输出。因此,计数器302用作具有多个延迟时间的延迟装置。如图11所示,计数器输出可提供从16mS到2048mS的增量为16mS延迟时间。由控制线WD_SEL通过选择器304来选择延迟时间,该选择器的输出耦合到由WD_E控制线使能的使能AND门306。当已经过等于选中的延迟时间的一段时间时,相应的计数器输出变高,继而使MCU RESET线赋值。WD_SEL和WD_E控制线是包括监视寄存器308的触发器的输出。经由数据总线12把数据读入寄存器308。
使用WDR指令来使监视定时器300复位。指令解码器23产生使计数器302复位的WD_RST信号。因而,当计数器被使能时(WE_D为HIGH),必须以相应于选中延迟时间的频率来执行WDR指令;否则,微控制器将被复位。
权利要求
1.一种微控制器,其特征在于包括指令集;程序存储器,用于存储从指令集中选中的指令;具有多条控制线的指令执行单元,用于响应于指令的执行而提供控制信号;获取装置,用于从程序存储器中获得指令并把获得的指令装入指令执行单元;把获取装置耦合到指令执行单元的程序总线;与程序存储器分开的数据存储器,所述数据存储器具有地址空间;与所述程序总线分开的八位数据总线,所述数据总线耦合到数据存储器;耦合到所述数据总线的寄存器堆,所述寄存器堆具有多个八位寄存器,所述寄存器堆还具有用于把两个八位寄存器作为单个十六位逻辑寄存器进行访问的组合装置,所述寄存器堆还具有耦合到组合装置的专用ALU,所述专用ALU对经由组合装置访问的十六位逻辑寄存器执行算术功能;通用ALU,具有耦合到寄存器堆来接收两个八位寄存器的内容的第一和第二输入,所述通用ALU具有接收恒定值数据的第三输入,所述通用ALU具有对第一、第二和第三输入进行选择性地操作以在一个时钟周期内产生输出的装置,所述通用ALU具有耦合到数据总线的输出;耦合到数据总线和通用ALU的状态寄存器,状态寄存器具有这些标志,包括中断使能标志、位转移标志、半进位标志、2的补码溢出标志、负标志、符号标志、零标志和进位,状态寄存器还具有用于访问和测试这些标志之一的位测试装置;直接地址总线,耦合所述程序执行单元以在程序执行期间直接访问所述数据存储器或所述寄存器堆;以及间接地址总线,为所述寄存器堆提供在程序执行期间对所述数据存储器的间接数据访问,间接地址总线具有用于接收来自组合装置的十六位值用作十六位地址的地址接收装置;所述寄存器堆的八位寄存器具有限定于数据存储器的地址空间内的地址,从而可作为寄存器和作为存储器位置寻址。
2.如权利要求1所述的微控制器,其特征在于还包括页面寄存器,以及用于从所述页面寄存器的内容和从所述组合装置所提供的十六位数据中形成地址的地址形成装置。
3.如权利要求2所述的微控制器,其特征在于所述页面寄存器是八位寄存器,所述页面寄存器被耦合到所述八位数据总线,从而把一值装入所述页面寄存器中,该值指定每页为64K字节的256页中的一页。
4.如权利要求1所述的微控制器,其特征在于还包括BST和BLD指令,每个指令具有指定一寄存器和一位标识符的机器操作码,指令执行单元响应于BST和BLD指令的执行产生位处理控制信号,位处理控制信号用于(i)操作寄存器堆来访问该寄存器和由位标识符所识别的位位置,以及(ii)把被访问的位位置的内容传送到状态寄存器中的位转移标志或者把位转移标志的内容传送到被访问的位位置。
5.如权利要求4所述的微控制器,其特征在于还包括第一多个指令,每个指令具有指定一目的地寄存器和一源寄存器对的机器操作码,指令执行单元响应于第一指令之一的执行产生第一控制信号,第一控制信号用于(i)操作寄存器堆的组合装置提供源寄存器对的内容作为间接地址,(ii)操作数据存储器来访问由间接地址所指定的存储器位置的内容,以及(iii)操作寄存器堆把该存储器位置的内容存入目的地寄存器中,第一指令包括LD、LD+、LD-和LDD。
6.如权利要求5所述的微控制器,其特征在于还包括第二多个指令,每个指令具有指定一目的地寄存器对和一源寄存器的机器操作码,指令执行单元响应于第二指令之一的执行产生第二控制信号,第二控制信号用于(i)操作寄存器堆来访问源寄存器的内容,(ii)操作寄存器堆的组合装置提供目的地寄存器对的内容作为间接地址,(iii)操作数据存储器把源寄存器的内容存到由该间接地址所指定的存储器位置,第二指令包括ST、ST+、ST-和STD。
7.如权利要求6所述的微控制器,其特征在于指令执行单元还响应于LD+和ST+指令的执行产生控制信号,这些控制信号操作寄存器堆的专用ALU来使寄存器对的内容递增。
8.如权利要求6所述的微控制器,其特征在于指令执行单元还响应于LD-和ST-指令的执行产生控制信号,这些控制信号操作寄存器堆的专用ALU来使寄存器对的内容递减。
9.如权利要求6所述的微控制器,其特征在于LDD和STD指令的机器操作码还包括位移值,指令执行单元还响应于LDD和STD指令的执行产生控制信号,这些控制信号操作寄存器堆的专用ALU来把所述位移值加到组合装置所提供的间接地址。
10.如权利要求6所述的微控制器,其特征在于还包括乘法指令,所述乘法指令具有指定一乘数寄存器和一被乘数寄存器的机器操作码,乘法指令具有相关的高字节和低字节目的地寄存器,指令执行单元响应于乘法指令的执行产生乘法控制信号,乘法控制信号用于(i)操作寄存器堆来提供由乘数和被乘数寄存器所识别的寄存器的内容作为通用ALU的输入,(ii)操作通用ALU来进行乘法运算,以及(iii)操作寄存器堆把乘法运算的输出存入由高字节和低字节目的地寄存器所识别的寄存器中。
11.如权利要求10所述的微控制器,其特征在于还包括第三多个指令,每个指令具有指定第一寄存器和第二寄存器的机器操作码,指令执行单元响应于第三指令之一的执行产生第三控制信号,第三控制信号用于(i)操作寄存器堆来提供第一和第二寄存器的内容作为通用ALU的输入,(ii)操作通用ALU来进行操作码中指定的ALU运算,以及(iii)操作寄存器堆把ALU运算的输出存入第一寄存器中,第三指令包括ADD、ADC、SUB、SBC、AND、OR和EOR。
12.如权利要求11所述的微控制器,其特征在于还包括第四多个指令,每个指令具有指定一寄存器和一恒定值的机器操作码,指令执行单元响应于第四指令之一的执行产生第四控制信号,第四控制信号用于(i)操作寄存器堆来提供该寄存器的内容作为通用ALU的第一输入,(ii)提供恒定值作为通用ALU的第四输入,(iii)操作通用ALU来进行操作码中指定的ALU运算,以及(iv)操作寄存器堆把ALU运算的输出存入该寄存器中,第四指令包括SUBI、SBCI、ANDI、ORI、SBR和CBR。
13.如权利要求12所述的微控制器,其特征在于还包括第五多个指令,每个指令具有指定一寄存器的机器操作码,指令执行单元响应于第五指令之一的执行产生第五控制信号,第五控制信号用于(i)操作寄存器堆来提供该寄存器的内容作为通用ALU的输入,(ii)操作通用ALU来进行操作码中指定的ALU运算,以及(iii)操作寄存器堆把ALU运算的输出存入该寄存器中,第五指令包括COM、NEG、INC、DEC、TST、CLR和SER。
14.如权利要求13所述的微控制器,其特征在于还包括第六多个指令,每个指令具有指定一状态位和一位移值的机器操作码,指令执行单元响应于第六指令之一的执行产生第六控制信号,第六控制信号用于(i)操作位测试装置来测试该状态位,以及(ii)根据被测试状态位的结果,可选地操作获取装置,从而从程序存储器中与当前指令的位置偏移等于该位移值的数量的位置上获得待加载执行的下一指令,第六指令包括BREQ、BRNE、BRCS、BRCC、BRSH、BRLO、BRMI、BRPL、BRHS、BRHC、BRTS、BRTC、BRVS、BRVC、BRID、BRIE、BRBC、BRBS、BRGE和BRLT。
15.如权利要求14所述的微控制器,其特征在于还包括第七多个指令,每个指令具有指定一寄存器对和一恒定值的机器操作码,指令执行单元响应于第七指令之一的执行产生第七控制信号,第七控制信号用于(i)操作寄存器堆的组合装置来提供寄存器对的内容作为专用ALU的输入,(ii)提供此恒定值作为专用ALU的另一个输入,(iii)操作该ALU来进行加法或减法,以及(iv)操作寄存器堆把运算结果存入该寄存器对中,第七指令包括ADIW和SBIW。
16.如权利要求15所述的微控制器,其特征在于还包括第八多个指令,每个指令具有指定一寄存器和一位标识符的机器操作码,指令执行单元响应于第八指令之一的执行产生第八控制信号,第八控制信号用于(i)操作寄存器堆来访问该寄存器并测试由该位标识符所指定的位,(ii)根据被测试位的结果,可选地操作获取装置,以跳过下一指令,第八指令包括SBRC和SBRS。
17.如权利要求16所述的微控制器,其特征在于还包括CPI指令,所述CPI指令具有指定一寄存器和一恒定值的机器操作码,指令执行单元响应于CPI指令的执行产生CPI控制信号,CPI控制信号用于(i)操作寄存器堆来提供该寄存器的内容作为专用ALU的第一输入,(ii)提供该恒定值作为专用ALU的第二输入,以及(iii)操作专用ALU,以从第一输入中减去第二输入。
18.如权利要求17所述的微控制器,其特征在于还包括CPC指令,所述CPC指令具有指定第一和第二寄存器的机器操作码,指令执行单元响应于CPC指令的执行产生CPC控制信号,CPC控制信号用于(i)操作寄存器堆来提供第一和第二寄存器的内容作为专用ALU的输入,(ii)操作专用ALU来计算Rf-Rs-C,这里Rf为第一寄存器,Rs为第二寄存器,以及C为进位位。
19.如权利要求18所述的微控制器,其特征在于还包括还包括CP指令,所述CP指令具有指定第一和第二寄存器的机器操作码,指令执行单元响应于CP指令的执行产生CP控制信号,CP控制信号用于(i)操作寄存器堆来提供第一和第二寄存器的内容分别作为专用ALU的第一和第二输入,(ii)操作专用ALU从第一输入中减去第二输入。
20.如权利要求19所述的微控制器,其特征在于还包括CPSE指令,所述CPSE指令具有指定第一和第二寄存器的机器操作码,指令执行单元响应于CPSE指令的执行产生CPSE控制信号,CPSE控制信号用于(i)操作寄存器堆来提供由第一和第二寄存器所识别的寄存器的内容分别作为通用ALU的第一和第二输入,(ii)操作通用ALU来比较第一和第二输入,以及(iii)根据比较结果,可选地操作获取装置来跳过下一指令。
21.如权利要求20所述的微控制器,其特征在于还包括第九多个指令,每个指令具有指定一位移值的机器操作码,指令执行单元响应于第九指令之一的执行产生第九控制信号,第九控制信号用于操作获取装置,从而从程序存储器中与当前指令的位置偏移等于该位移值的数量的位置上获得待加载执行的下一指令,第九指令包括RJMP和JMP。
22.如权利要求21所述的微控制器,其特征在于还包括IJMP指令,指令执行单元响应于IJMP指令的执行产生IJMP控制信号,IJMP控制信号用于(i)操作寄存器堆的组合装置来提供两个寄存器的内容作为单个位移值,以及(ii)操作获取装置,从而从程序存储器中与当前指令的位置偏移等于该单个位移值的数量的位置上获得待加载执行的下一指令。
23.如权利要求22所述的微控制器,其特征在于还包括第十多个指令,每个指令具有指定一位移值的机器操作码,指令执行单元响应于第十指令之一的执行产生第十控制信号,第十控制信号用于(i)把待执行的下一指令在程序存储器中的位置压入堆栈中,以及(ii)操作获取装置,从而从程序存储器中与当前指令的位置偏移等于该位移值的数量的位置上获得待加载执行的下一指令,第十指令包括RCALL和CALL。
24.如权利要求23所述的微控制器,其特征在于还包括ICALL指令,指令执行单元响应于ICALL指令的执行产生ICALL控制信号,ICALL控制信号用于(i)操作寄存器堆的组合装置来提供两个寄存器的内容作为单个位移值,以及(ii)把待执行的下一指令在程序存储器中的位置压入堆栈中,以及(iii)操作获取装置,从而从程序存储器中与当前指令的位置偏移等于该位移值的数量的位置上获得待加载执行的下一指令。
25.如权利要求24所述的微控制器,其特征在于还包括第十一多个指令,每个指令具有指定一位移值的机器操作码,指令执行单元响应于第十一指令之一的执行产生第十一控制信号,第十一控制信号用于(i)弹出堆栈以获得程序存储器中的一个位置,以及(ii)操作获取装置,从而根据从堆栈获得的程序存储器中的位置获得待加载执行的下一指令,第十一指令包括RET和RETI。
26.如权利要求25所述的微控制器,其特征在于指令执行单元还响应于RETI指令的执行产生控制信号,这些控制信号操作状态寄存器来设定全局中断标志。
27.如权利要求26所述的微控制器,其特征在于还包括第十二多个指令,每个指令具有指定一目的地寄存器和一数据源的机器操作码,指令执行单元响应于第十二指令之一的执行产生第十二控制信号,第十二控制信号用于(i)操作寄存器堆在数据源为一寄存器时访问寄存器的内容,以及(ii)操作寄存器堆,以在数据源为寄存器时把被访问的寄存器的内容存入目的地寄存器,或者在数据源为恒定值时把数据源本身存入目的地寄存器,第十二指令包括MOV和LDI。
28.如权利要求27所述的微控制器,其特征在于还包括PUSH指令,PUSH指令指定一寄存器,指令执行单元响应于PUSH指令的执行产生PUSH控制信号,PUSH控制信号用于(i)更新堆栈指针而指向堆栈中的下一位置,以及(ii)操作堆栈来接收寄存器的内容。
29.如权利要求28所述的微控制器,其特征在于还包括POP指令,POP指令指定一寄存器,指令执行单元响应于POP指令的执行产生POP控制信号,POP控制信号用于(i)操作堆栈把其内容存储到该寄存器,以及(ii)更新堆栈指针而指向堆栈中的前一位置。
30.如权利要求29所述的微控制器,其特征在于还包括IN和OUT指令,每个指令具有指定一端口和一寄存器的机器操作码,指令执行单元响应于IN和OUT指令之一的执行产生端口控制信号,端口控制信号用于(i)操作寄存器堆来访问该寄存器,以及(ii)把来自被访问寄存器的内容传送到该端口,或者把该端口的内容传送到被访问的寄存器。
31.如权利要求30所述的微控制器,其特征在于还包括LPM指令,指令执行单元响应于LPM指令的执行产生LPM控制信号,LPM控制信号用于(i)操作寄存器堆的组合装置来提供两个寄存器的内容作为一程序地址,(ii)访问程序存储器中由该程序地址指定的存储器位置,以及(iii)操作寄存器对把被访问的数据存入一寄存器。
32.如权利要求31所述的微控制器,其特征在于还包括第十三多个指令,指令执行单元响应于第十三指令之一的执行产生第十三控制信号,第十三控制信号用于(i)操作状态寄存器来访问其中的一位,以及(ii)设定或清除被访问的位,第十三指令包括SEC、CLC、SEN、CLN、SEZ、CLZ、SEI、CLI、SES、CLS、SEV、CLV、SET、CLT、SEH、CLH、BSET和BSLR。
33.如权利要求32所述的微控制器,其特征在于还包括LSL指令,LSL指令指定一寄存器,指令执行单元响应于LSL指令的执行产生第一移位控制信号,第一移位控制信号用于(i)操作寄存器堆来访问该寄存器,(ii)把被访问寄存器的最高位移入进位位,(iii)把这些位向左移一个位置,(iv)清除最低位。
34.如权利要求33所述的微控制器,其特征在于还包括LSR指令,LSR指令指定一寄存器,指令执行单元响应于LSR指令的执行产生第二移位控制信号,第二移位控制信号用于(i)操作寄存器堆来访问该寄存器,(ii)把被访问寄存器的最低位移入进位位,(iii)把这些位向右移一个位置,(iv)清除最高位。
35.如权利要求34所述的微控制器,其特征在于还包括ROL指令,ROL指令指定一寄存器,指令执行单元响应于ROL指令的执行产生第三移位控制信号,第三移位控制信号用于(i)操作寄存器堆来访问该寄存器,(ii)把这些位向左移一个位置,(iii)把进位位移入最低位,以及(iv)把最高位移入进位位。
36.如权利要求35所述的微控制器,其特征在于还包括ROR指令,ROR指令指定一寄存器,指令执行单元响应于ROR指令的执行产生第四移位控制信号,第四移位控制信号用于(i)操作寄存器堆来访问该寄存器,(ii)把这些位向右移一个位置,(iii)把进位位移入最高位,以及(iv)把最低位移入进位位。
37.如权利要求36所述的微控制器,其特征在于还包括ASR指令,所述ASR指令指定一寄存器,指令执行单元响应于ASR指令的执行产生第五移位控制信号,第五移位控制信号用于(i)操作寄存器堆来访问该寄存器,(ii)把这些位向右移一个位置,(iii)把最低位移入进位位。
38.如权利要求37所述的微控制器,其特征在于还包括SWAP指令,所述SWAP指令指定一寄存器,指令执行单元响应于SWAP指令的执行产生交换控制信号,该交换控制信号用于(i)操作寄存器堆来访问该寄存器,(ii)交换被访问寄存器的高和低半字节。
39.如权利要求38所述的微控制器,其特征在于还包括SLEEP指令,指令执行单元响应于SLEEP指令的执行产生休眠控制信号,休眠控制信号用于把微控制器置于休眠模式。
40.如权利要求39所述的微控制器,其特征在于还包括具有监视复位线的监视定时器、MCU复位线和用于在延迟了一段时间后发出MCU复位线上的一个信号的延迟装置;MCU复位线被耦合使得在延迟装置发出信号时使微控制器复位;监视复位线耦合到延迟装置来开始延迟周期;微控制器还包括WDR指令,指令执行单元响应于WDR指令的执行发出监视复位线上的一个信号,从而开始延迟周期。
全文摘要
基于RISC的八位微控制器(图1)包括八位寄存器堆(20),它除了有通用八位ALU(22)外还具有一专用算术逻辑单元ALU(ALU2)。寄存器堆还包括组合装置(16),用于组合一对寄存器以提供间接寻址用的十六位逻辑寄存器。专用ALU是十六位ALU,为寄存器对提供一定的算术功能,由此减轻了加在通用八位ALU上的计算负担。本发明的另一个特征是包括页面寄存器(RAMPx,y,z),他们与十六位逻辑寄存器的内容(14’)组合来提供更大的寻址范围。本发明的八位微控制器的另一个特点是用一条指令直接读/写寄存器堆内任何一位的位置。这就避免了现有技术的微控制器需要进行的各种加载、移位和/或掩蔽操作。
文档编号G06F9/30GK1251185SQ98803701
公开日2000年4月19日 申请日期1998年3月13日 优先权日1997年3月27日
发明者V·沃伦, 阿尔夫-埃杰尔·博根, G·米克勒沃尔, J·D·布赖恩特 申请人:爱特梅尔股份有限公司