专利名称:增强的微处理器或微控制器的制作方法
技术领域:
本申请案的技术领域涉及微处理器或微控制器。
背景技术:
微控制器通常构成芯片上的系统且包括一微处理器及多个外围组件。存 在具有8位、16位及32位架构的各式各样的此类微控制器。例如由微芯科技公司 (MicrochipTechnology Inc.)制造的8位微控制器等现有微控制器实现了灵活架构。此类 微控制器包括其中程序存储器与数据存储器分离的哈佛架构。此类型的微控制器进一步包 括允许对数据存储器的存取的特定分库系统。通常,将数据存储器划分成多个库且库选择 寄存器界定当前选择且可存取所述库中的哪一库。为存取其它库,必须对所述库选择寄存 器进行重编程。因此,即使分库方案仅允许对所界定存储器库的存取,这些控制器也包含强 制切换到预界定库的指令。此实现了改进且强大的性能,尽管存在一般的存取限制性。然而,在存取存储器中仍存在瓶颈。因此,需要改进的微控制器架构。
发明内容
根据一实施例,一种η位微处理器装置可包括η位中央处理单元(CPU);多个特 殊功能寄存器及通用寄存器,其被存储器映射到多个库且具有至少两个16位间接存储器 地址寄存器,所述至少两个16位间接存储器地址寄存器可由所述CPU跨越所有库存取;库 存取单元,其用于将所述CPU与所述多个库中的一者耦合;数据存储器,其与所述CPU耦合; 及程序存储器,其与所述CPU耦合,其中所述间接地址寄存器可操作以存取所述数据存储 器或程序存储器且其中所述间接存储器地址寄存器中的每一者中的一位指示对所述数据 存储器或对所述程序存储器的存取。根据其它实施例,η = S0根据其它实施例,所述η位微处理器可进一步包括至少 一个虚拟寄存器,其中将数据写入到所述虚拟寄存器导致使用所述间接存储器地址寄存器 中的一者对所述数据存储器或对所述程序存储器的间接存取。根据其它实施例,所述至少 一个虚拟寄存器被映射到每一存储器库。根据其它实施例,所述η位进一步包括虚拟寄存 器,其中从所述虚拟寄存器读取数据导致使用所述间接存储器地址寄存器中的一者对所述 数据存储器或对所述程序存储器的间接存取。根据其它实施例,所述至少一个虚拟寄存器 可被映射到每一存储器库。根据其它实施例,所述虚拟寄存器可不以物理方式实施于所述 微处理器装置中。根据其它实施例,所述数据存储器可以是8位宽且所述程序存储器可以 是14位宽。根据其它实施例,数据存储器地址的一个额外位可界定在调试模式中使用的扩 展存储器地址范围。根据其它实施例,所述间接地址寄存器中的 所述位可以是最高有效位。根据另一实施例,一种用于操作η位微处理器装置的方法可包括以下步骤提供 η位中央处理单元(CPU);提供多个特殊功能寄存器及通用寄存器,所述多个特殊功能寄存 器及通用寄存器被存储器映射到多个库;提供至少两个16位间接存储器地址寄存器,所述 至少两个16位间接存储器地址寄存器可由所述CPU跨越所有库存取;提供库存取单元,所述库存取单元用于将所述CPU与所述多个库中的一者耦合;提供数据存储器,所述数据存储器与所述CPU耦合;提供程序存储器,所述程序存储器与所述CPU耦合;及使用间接地址 寄存器执行间接寻址以存取所述数据存储器或程序存储器,其中所述间接存储器地址寄存 器中的每一者中的一位分别指示对所述数据存储器或对所述程序存储器的存取。根据其它实施例,η = S0根据其它实施例,所述方法可进一步包括通过将数据写 入到至少一个虚拟寄存器来产生间接存储器写入存取的步骤,其中所述间接存储器存取使 用所述间接存储器地址寄存器中的一者。根据其它实施例,可将所述虚拟寄存器存储器映 射到所有存储器库。根据其它实施例,所述方法可进一步包括通过从至少一个虚拟寄存器 读取数据来产生间接存储器读取存取的步骤,其中所述间接存储器读取存取使用所述间接 存储器地址寄存器中的一者。根据其它实施例,可将所述虚拟寄存器存储器映射到所有存 储器库。根据其它实施例,可不将所述虚拟寄存器以物理方式实施于所述微处理器装置中。根据其它实施例,所述数据存储器可以是8位宽且所述程序存储器可以是14位 宽。根据其它实施例,数据存储器地址的一个额外位可界定在调试模式中使用的扩展存储 器地址范围。根据其它实施例,所述间接地址寄存器中的所述位可以是最高有效位。依据以下各图、描述及以上权利要求书,所属领域的技术人员将易于明了本发明 的其它技术优点。本申请案的各个实施例可仅获得所阐述优点的子集。没有一个优点对于 所述实施例来说是关键的。
可通过参照结合附图阅读的以下说明来获取对本发明及其优点的更完整理解,在 所述附图中相同参考编号指示相同特征,且其中图1显示根据一实施例的微控制器架构的框图。图2显示程序计数器及其到内部总线的耦合的实施例。图3到6显示根据所执行的指令对程序计数器的不同操作。图7显示堆栈及控制逻辑的实施例。图8显示程序存储器映射及堆栈的实施例。图9显示库选择寄存器的实施例。图10显示数据存储器中的存储器库的结构的实施例。图11显示用于间接存储器存取的存取方案。图12为显示根据一实施例的特殊功能寄存器概要的表。图13Α及13Β为显示根据一实施例的微处理器或微控制器的指令集的表。尽管已参照本发明的实例性实施例来描绘、描述及界定本发明的实施例,但此类 参照并不意味着对本发明的限制,且不应推断出存在此限制。所揭示的标的物能够在形式 及功能上具有大量修改、替代和等效形式,所属领域的技术人员将会联想到这些修改、替代 和等效形式并受益于本发明。所描绘及所描述的本发明实施例仅作为实例,而并非是对本 发明范围的穷尽性说明。
具体实施例方式图1尤其显示根据一实施例与存取哈佛型架构中的程序及数据存储器相关的微处理器或微控制器的中央处理单元的不同功能单元。指令寄存器110可存储可由控制逻辑 130解码的所提取指令。可提供各自存储一地址的多个间接寻址寄存器150。虽然独立地 显示于图1中,但这些及其它特殊功能寄存器为特殊功能寄存器块185的一部分。为执行 间接寻址存取,执行对特殊功能寄存器块185中的专用特殊功能寄存器的读取或写入。在 执行此间接寻址存取的情况下,控制逻辑130控制在输入侧上从间接地址寄存器150接收 地址的多路复用器140。根据一实施例,所述间接地址寄存器具有预界定位,例如最高有效 位,其由控制逻辑1 30解码以确定将执行对程序存储器120的间接存取还是对数据存储器 160的间接存取。在8位架构中,数据存储器为8位宽。根据哈佛架构,程序存储器与数据存储器分 离且可具有不同大小。举例来说,在一个实施例中,程序存储器可以是14、15或16个位宽。 因此,可解码包含(例如)8位间接地址的指令。某一指令可含有甚至更多的地址位,其可 与另一寄存器组合以执行(例如)相对寻址。可将数据存储器160划分成可通过7个或8个位解码的多个库。每一库可被视为 寄存器文件。根据一个实施例,数据存储器含有总共16个库,每一库具有256个可寻址存 储器位置,从而产生总共4096个字节的存储器。根据另一实施例,可提供具有128个可寻 址存储器位置的16个库。根据各个实施例可能有其它配置。所述中央处理单元可进一步 包含与工作寄存器180耦合的算术逻辑单元170 (ALU)。工作寄存器180为块185的多个特 殊功能寄存器中的一者。如上所述,可将数据存储器160划分成多个库1···η。除了某些寻 址模式外,指令通常仅可存取选定存储器库。因此,将来自特殊功能寄存器块185的某些重 要特殊功能寄存器存储器映射到所有存储器库1…η,如数据存储器160与特殊功能寄存器 块185之间的箭头所指示。根据各个实施例,可将未映射到所有存储器库的特殊功能寄存 器映射到相应的不同存储器位置处的单个存储器库。根据各个实施例,可根本不将一些特 殊功能寄存器映射到存储器。即使某些特殊功能寄存器到所有存储器库的映射限制每一存储器库中的可存取 自由RAM,也可避免许多原本为必需的库切换序列以存取重要的特殊功能寄存器。举例来 说,微控制器可具有12个特殊功能寄存器,例如映射到所有存储器库的工作寄存器180。因 此,根据一实施例,每一存储器库可具有244或116个自由存储器位置,此视每一存储器库 的大小而定。根据各个实施例可能有其它配置。根据一实施例,增强的微控制器可含有8位ALU 170及工作寄存器180 (WREG)。ALU 170可以是通用算术单元。其在工作寄存器180及任一寄存器文件中的数据之间执行算术 及布尔函数。ALU 170可以是8位宽且可能够进行加法、减法、移位及逻辑操作。除非另有 提及,否则算术操作实质上可以是二进制补码。WREG 180可以是用于ALU操作的8位工作 寄存器。WREG寄存器180为可寻址寄存器且可直接写入或读取。根据一实施例,WREG 180 为映射到所有16个库的12个共用SFR中的一者-其地址可以是(例如)09h。算术及逻辑 单元170可能够对两个操作数或单个操作数实施算术或逻辑操作。所有单操作数指令均对 WREG寄存器180或给定文件寄存器起作用。对于双操作数指令,操作数中的一者为WREG寄 存器180而另一者为文件寄存器或8位立即常数。根据所执行的指令,ALU 170可影响状态 寄存器190中的进位(C)、数字进位(DC)或零(Z)位的值。C及DC位在减法中分别起借位 及数字借出位的作用。影响这些状态位的实例为例如下文将更详细解释的SUBLW及SUBWF等指令。如图1中所示的状态寄存器190可含有所述ALU的算术状态,例如进位/借位、数字进位/借位及零旗标;RP<1:0>,其表示下部两个库选择;用于直接寻址的位;IRP,其表 示用于间接寻址的库选择寄存器位;超时位及断电位。根据一实施例,增强的微控制器包括库选择寄存器(BSR),为维持向后兼容性,还 可维持位RP<1:0>。RP<1:0>与BSR<1:0>之间可存在全双向镜像因此,改变一个寄存器即 自动改变另一寄存器。因此,RP<1:0>与BSR<1:0>指向相同物理存储器。即使增强的微控制器含有多个全间接地址寄存器150 (文件选择寄存器(FSR)), 也可针对向后兼容性维持位IRP-其为FSR0H<0>的直接双向镜像。因此,改变FSR0H<0>即 自动改变IRP,且反之亦然。IRP与FSRH0h<0>指向相同物理存储器。根据一实施例,状态寄存器190跨越所有库为共用的且可位于03h处。针对除TO 及PD外的所有状态位实施下文将更详细解释的中断时的快速上下文保存。类似任一其它 寄存器,所述状态寄存器可以是任一指令的目的地。如果所述状态寄存器是影响Z、DC或C 位的指令的目的地,那么根据装置逻辑设置或清除这些位。此外,TO及PD位是不可写的。 因此,以状态寄存器190作为目的地的指令的结果可不同于既定结果。举例来说,指令CLRF STATUS将清除除TO及PD外的所有位,且接着将通过装置逻辑自动设置Z位。此使得状态 寄存器190成为‘OOOu ulOO'(其中U=不变)。C及DC位在减法中分别起借位及数字借 出位的作用。因此,状态寄存器190可含有以下位IRP 间接寄存器库选择位(针对向后兼容性。镜像FSR0H<0>) 1 =库2、3 (IOOh到 IFFh) ;0 =库 OU (OOh 到 FFh)RP<1:0> 寄存器库选择位(针对向后兼容性。镜像BSR<1:0>)00 =库0(00h到 7Fh) ;01=库1_至丨肿11) ; 10 =库 2(100h 到 17Fh) ; 11 =库 3 (180h 到 IFFh)TO 超时位(在中断时不自动保存)1 =在通电之后,CLRffDT指令或SLEEP指令; 0=发生监视计时器超时;PD 断电位(在中断时不自动保存)1 =在通电之后或在执行CLRWDT指令时;0 = 在执行SLEEP指令时Z 零位1 =算术或逻辑操作的结果为零;0 =算术或逻辑操作的结果不为零。DC 数字进位/借位位(ADDWF、ADDLW、SUBLW、SUBffF指令)1 =来自所发生结果 的第4个低阶位的进位;0 =无来自结果的第4个低阶位的进位。C 进位/借位位(ADDWF、ADDLW、SUBLW、SUBWF指令):1 =来自所发生结果的最高 有效位的进位;0 =无来自所发生结果的最高有效位的进位。对于借位,可反转极性。通过相加第二操作数的二进制补码执行减法。对于旋转 (RRF, RLF)指令,给此位加载源寄存器的高阶或低阶位。增强的微控制器核心可直接或间接地寻址其寄存器文件(库)或数据存储器。根 据一实施例,将所有特殊功能寄存器(包含程序计数器(PC)及工作寄存器(WREG))映射于 所述数据存储器中。增强的微控制器核心具有正交(对称)指令集,其使得使用任一寻址 模式对任一寄存器实施任一操作成为可能。此对称性质及缺少‘特殊最优情形’使得针对 增强的微控制器核心的编程简单而高效。另外,显著降低用户的学习曲线。
根据一实施例,可在所述核心中实现以下块程序计数器;指令解码;ALU ;只读存 储器(ROM)锁存器/IR锁存器;FSR及地址产生逻辑;工作寄存器;WREG ;STATUS中的状态 位;中断向量化控制;具有快速上下文保存;库选择寄存器BSR。可不将以下块视为CPU的一部分堆栈;复位产生电路(监视计时器(WDT)、通电 复位(POR)、欠压复位(BOR)等);程序存储器;外围器件;RAM ;RAM地址控制;Q时钟产生器 及控制;中断启用及加旗标;中断控制寄存器;配置位;装置ID字;ID位置;时钟驱动器。如上所述,根据一实施例,以下寄存器可跨越所有16个库为共用的INDF0 (用于 间接寻址且可以不是物理寄存器);INDFl (用于间接寻址且可以不是物理寄存器);PCL(PC LSB) ;STATUS ;FSROL (间接存储器地址0,LSB) ;FSROH (间接存储器地址0,MSB) ;FSRlL (间 接存储器地址1,LSB) ;FSRlH (间接存储器地址1,MSB) ;WREG,工作寄存器;BSR (库选择寄 存器);PCLATH(用于程序计数器PC<14:8>的写入缓冲器);中断控制寄存器INTC0N。根据一实施例,微处理器或微控制器可进一步包括可与某些特殊功能寄存器115 耦合的中断控制单元105。在发生中断或任何其它所诱发的上下文切换(例如软件陷阱)之 后,自动保存选自映射到所有存储器库的特殊功能寄存器的以下寄存器的内容。STATUS (除 TO 及 PD 夕卜);BSR、PCLATH、WREG、FSRO (FSR0H 及 FSROL 两者)以及 FSRl (FSR1H 及 FSRlL 两 者)。在从中断恢复之后将所述寄存器自动恢复到其预中断值。为此目的,如图1中所示,微处理器或微控制器核心可具有至少一个额外组的寄 存器115,其将存储上述寄存器的内容。然而,根据其它实施例,可提供堆栈、额外数据存储 器等以在上下文切换之后存储这些寄存器的内容。如图2中所示,程序计数器PC由两个并置8位寄存器PCL 230及PCH 240组成。 其寻址程序存储器中的字,且根据一实施例,其为(例如)15个位宽。因此,其可用于寻址 高达32kW。将PCL 230 (PC的低字节)映射于数据存储器160中。因此,其跨越所有库为共 用的且位于(例如)地址02h处。PCL 240正如任一其它寄存器一样为可读及可写的。每 当PCL 230由指令修改时,无论是对PCL 230的写入还是读取-修改-写入,CPU均可需要 执行强制NOP以检索新地址处的指令。PCH 240为PC的高字节且不可直接寻址。由于可不 将PCH映射于数据或程序存储器中,因此寄存器PCLATH 220 (PC高锁存器)用作PC的高位 (PCH<6:0>)的保持锁存器。根据一实施例,将PCLATH 220映射到数据存储器中。因此,其 跨越所有库为共用的且可位于地址OAh处。通过寄存器的显式加载来仅更新PCLATH 220。 因此,根据一实施例,无其它指令对其进行更新。增强的微控制器可被设计成更新PCLATH 220不会自动更新PCH 240。根据GOTO、CALL及CALLW指令用PCLATH 220的内容仅更新 PCH240。在Ql的上升边缘上的每一指令提取之后使PC递增1,除非由GOTO、CALL、RETURN、 RETLW、RETFIE或Branch指令修改;由中断响应修改;因由指令对PCL的目的地写入。“跳过”等效于所跳过地址处的强制NOP循环。如图2中所示,PC 230、240及PCLATH 220针对不同指令的操作如下PCL 230上的读取指令PCL 230勺数据总线200 ALU 170或目的地。PCL 230上的写入指令8位数据■^数据总线200 PCL 230。PCL 230上的读取-修改-写入指令对PCL 230进行读取-修改-写入操作的任 一指令。读取PCL 230j数据总线200i ALU 170 ;写入8位结果二数据总线i PCL 230。RETURN 指令T0S 1 PC<14:0>230、240。
图3另外显示所提取指令210及其对程序计数器230、240的作用。图3应用于以 下指令GOTO指令在2字指令(操作码)210中提供目的地地址。操作码<7:0> PCL<7 0>230 ;操作码 <10 8> “? PCH<2 0>240 ;PCLATH<6 3>220 PCH<6 3>240。 CALL指令在指令210中提供11位目的地地址。将当前地址(PC+1)推进到堆栈。 操作码 <7 0> PCL<7 0>230 ;操作码 <10 8> PCH<2 0>240 ;PCLATH<63>220 PCH<63>240。图4显示以下指令的配置BRA指令在指令210中提供9位带+_符号的偏移。操作码<8:0>+PC (+1) — PC。图5显示以下指令的配置BRff指令在WREG 180中提供8位不带+-符号的偏移。PC (+1) +WREG PC。图6显示以下指令的配置CALLff指令在WREG 180中提供8位目的地地址。将当前地址(PC+1)推进到堆 栈。WREG<7 0> -* PCL<7 0> ;PCLATH<6 0> PCH<6 0>。为启用测试存储器区域,程序计数器230、240可具有隐藏的第16个位PC<15>。当 设置PC<15>时,将从测试区域提取所述指令。在用户模式中,PC<15>始终为0,且无法在软 件中加以修改。在测试模式中,PC<15>默认为0,但可由“加载配置”命令设置。其可由“复 位PC”命令清除。测试存储器存取可与电路中调试程序(ICD) —起工作如下ICD_vl :PC<15>被强制为高以提取I⑶向量,但在执行第一指令(G0T0ICD_ ROUTINE)之后返回到0。从那时起直到退出调试执行为止,PC<14:11>被强制为‘1111b’, 但PCLATH不受影响。ICD_v2 如果I⑶调试执行在用户存储器中,那么其遵循ICD_V1。如 果调试执行在测试存储器中,那么PC<15>被强制为高以提取I⑶向量,且根据iccLreturn 返回到零。根据各个实施例的增强的微控制器装置可支持如图7中所示15个位宽且16个位 深的堆栈存储器。在正常操作期间,假定堆栈310为16个字深。在正常模式中,不对堆栈 310提供直接用户存取。所述堆栈并非程序或数据存储器空间的一部分。当执行CALL或 CALLW指令或确认中断请求时,将全PC(程序计数器)推进到所述堆栈上。根据RETURN、 RETLff或RETFIE指令从所述堆栈下拉PC值。PCLATH不受CALL或RETURN型指令中的任一 者的影响。堆栈310通过15位RAM及4位堆栈指针而起16字的作用。使所述指针递增/递 减经过llllb/OOOOb将致使其环绕到OOOOb/llllb。在CALL型指令期间,使所述堆栈指针 递增且将PC的内容加载到堆栈310。在RETURN型指令期间,将所指向的内容转移到PC且 接着使所述堆栈指针递减。在所有复位之后将所述堆栈指针初始化到‘1111b’。第一调用 将致使所述指针绕到0000b。当使所述堆栈指针递增/递减经过llllb/0000b且在新地址处实施到/从所述堆 栈的数据转移时,发生堆栈上溢/下溢事件。在第一调用时必定不发生上溢事件。在第16 个连续调用时,所述堆栈指针将具有值1111b。第17个连续调用将致使所述堆栈指针环绕 到0000b且致使PC加载于此位置处。此构成上溢事件。当所述堆栈已足够次数地出栈以 达到0000b时,进一步的出栈将致使0000b处的内容转移到PC且致使所述堆栈指针递减。所述堆栈指针将绕到1111b,此不构成下溢事件。只有在下一连续出栈尝试从Illlb的数据转移时,将会发生下溢事件。在用户模式中,堆栈上溢或下溢将设置PCON寄存器中的适当 位(ST0F或STUF)且导致软件复位。当在ICD模式中时,所述堆栈可具有两个段。正常用户模式堆栈仍为16个字深, 但也可提供单独的ICD堆栈。在ICD模式中,将可存取所述堆栈的顶部及所述堆栈指针。 在I⑶模式中,所述堆栈的顶部(TOS)为可读及可写的。两个寄存器位置(T0SH及T0SL) 将寻址由堆栈指针(STKPTR)所指向的堆栈RAM位置。在CALL型指令之后,软件可通过读 取TOSH及TOSL寄存器来读取所推进的值。可将这些值放置于用户界定的软件堆栈上。向 TOS寄存器写入将致使用下一 RETURN型指令上的新值来更新PC。STKPTR寄存器含有堆栈指针值。如先前所述,STKPTR仅在I⑶模式中为可存取的。 在ICD模式中,可通过所述STKPTR寄存器存取所述堆栈指针。用户可读取及写入堆栈指针 值。在所有复位之后将所述堆栈指针初始化到‘1111b’。在I⑶模式中,将不对上溢/下溢 事件应用自动软件复位。然而,仍将设置PCON寄存器中的堆栈上溢(STOF)或下溢(STUF) 位,从而允许堆栈状况的软件检验。由于将不对下溢/上溢执行复位,因此将不复位堆栈指 针(STKPTR)。在上溢/下溢时,所述堆栈指针将环绕且接着重新开始正常操作。用户必须 明确地清除上溢(STOF)或下溢(STUF)位-且在后续上溢/下溢时将再次对其进行自动设 置。堆栈上溢/下溢事件可仅由使用堆栈指针硬件来修改堆栈指针的指令导致。此包含CALL、TRAP;RETURN ;RETFIE ;RETLff ;任何中断及 ICD 陷阱。通过 ALU 修改 堆栈指针的指令(仅ICD模式)将不导致堆栈下溢/上溢状况且因此将不设置(STOF)或 (STUF)位。实例为(仅 ICD 模式)JNCF STKPTR ;DECF STKPTR ;ADDffF STKPTRo当复位装置时,给PC加载复位向量(Oh)。将堆栈指针初始化到‘1111b’,且堆栈 寄存器的顶部(TOS)为‘OOOOh’。第二推进使所述堆栈指针递增且接着将当前PC加载到堆 栈级中。在第16个连续调用时,所述堆栈指针将具有值1111b。第17个连续调用将致使所 述堆栈指针环绕到OOOOb且致使PC加载于此位置处。此构成上溢事件。RETURN出栈将复 制指向PC的堆栈内容且接着使所述堆栈指针递减。当所述堆栈已足够次数地出栈以达到 0000b时,进一步的出栈将致使0000b处的内容转移到PC且致使所述堆栈指针递减。所述 堆栈指针将绕到1111b,此不构成下溢事件。只有在下一连续出栈尝试从Illlb的数据转移 时,将会发生下溢事件。在调试(ICD)模式中,特殊指令将致使STKPTR递增。不将PC加载 到T0S。由用户负责确保在执行INCF STKPTR指令(此指令因此等效于PUSH指令)之前给 TOS加载适当数据。DECFSTKPTR指令将使所述堆栈指针递减,不给PC加载TOS值。如图8中所示,15位程序计数器400能够寻址32k χ 14位程序存储器空间。程序 存储器空间430主要含有供执行的指令;然而,也可存储并存取数据表(使用遗留程序存储 器读取/写入基础结构以及与间接寻址相关联的新功能性,更多细节参见FSR部分)。在 正常操作期间也存在隐藏的第16个PC位,且当设置时,可寻址保留用于配置位、装置ID及 测试存储器440的另一 32k χ 14的存储器。仅在测试模式或编程模式中设置此位。如图 8中所示,复位向量在‘0000h’处且中断向量在‘0004h’处。根据一个实施例,增强的微控制器可寻址数据存储器160及高达2048个字节的通 用RAM。数据存储器地址线为11个位宽。将数据存储器分割成128个字节的16个库,每一 库含有通用寄存器(GPR)及特殊功能寄存器(SFR)。所述库由如图9中所示的库选择寄存器(BSR<3:0>)选择。所述BSR寄存器可存取多于16个库;然而,可仅在ICD模式中允许存 取多于16个库以考虑到ICD寄存器的较大数据空间。(在ICD模式中,可存取32个库)。 还将位BSRO及BSRl分别作为RPO及RPl映射到状态寄存器中。此考虑到与现有装置的向 后兼容性。对BSR0/1的读取或写入将影响RP0/1,且反之亦然。图10显示实例性数据存储 器映射。
当所述核心正与ICD模块一起操作时或在另一实施例中,总共的库数目可扩展到 32个以实现总共4096个地址。此允许将ICD寄存器映射到数据空间中且不使用用户存储 器映射中的任一者。此将仅在启用ICD模块时实现。用户将无法存取大于库15的任一库。 根据各个实施例可能有其它配置。图11显示间接寻址方案的实施例,所述间接寻址方案为寻址其中指令中的数据 存储器地址由另一寄存器确定的数据存储器的模式。此可适用于数据/程序存储器中的数 据表或堆栈。文件选择寄存器(FSR)寄存器960的值用作数据存储器地址。增强的微控制 器具有用于间接寻址的两个16位寄存器对960。这些所谓的文件选择寄存器对为=FSROH 与FSROL ;及FSRlH与FSR1L。FSR 960为16位寄存器且因此允许高达65,536个位置的寻 址。这些文件选择寄存器960中的单个位965可用于确定将执行对数据存储器160的存取 还是对程序存储器120的存取。为此目的,逻辑单元930将文件选择寄存器960的内容转 发到程序存储器地址910或RAM地址920以用于存取相应存储器。非间接寻址通过多路复用器940使用所提取指令950的相应内容“文件”。接着通 过RAM地址920执行库存取,其中库地址由相应库存取寄存器提供以形成全地址920。如图 11中所示,提供文件选择寄存器960以用于间接寻址。对于间接寻址,多路复用器940的 输出通过相应文件选择寄存器960的内容提供“文件”地址。如果选择间接寻址,那么使用 每一文件选择寄存器960的由数字965所指示的位15来确定将执行通过程序存储器地址 910对程序存储器120的存取还是通过数据地址920对数据存储器160的存取。通过控制 多路复用器940的相应选择信号(未显示)来起始间接寻址。当FSRn<15>等于0时,寻址数据存储器160。当FSRn<15>为1时,寻址程序存储器 120。将数据存储器160映射到此地址空间的前半部(OOOOh到7FFFh)中。如果FSRn<15> 为0,那么FSRn< 10 0>指向数据存储器位置OOOh到7FFh。在此情况下,忽略FSRn< 11 14>。 将程序存储器120映射到此地址空间的上半部(8000h到FFFFh)中。如果FSRn<15>为1, 那么FSRn<14:0>指向程序存储器地址OOOOh到7FFFh。总的来说地址8000h及更高指向 程序存储器。低于SOOOh的地址指向数据存储器,其中仅下部11个位用于地址解码。另外,存在不以物理方式实施的虚拟寄存器INDFO及INDFl (参见图10)。对这些 寄存器的读取或写入启动间接寻址,其中对应FSR寄存器中的值为数据的地址。如果文件 INDFO (或INDF1)本身是经由FSR间接读取的,那么读取所有‘0,(设置零位)。类似地,如 果INDFO (或INDF1)是间接写入的,那么操作将等效于NOP,且状态位不受影响。对程序存 储器空间(FSRn<15>= 1)的间接写入将不具有影响且将导致对正在执行NOP的等效。从 程序存储器空间(FSRn<15>= 1)的间接读取将致使将程序存储器位置的前8个位转移到 目的地寄存器,将用上部6个位更新EEDATH/PMDATH。根据各个实施例,可实施其它机制以 诱发间接寻址。图12显示根据一实施例用于数据存储器的任一库η中的所有特殊功能寄存器的概要。图13A及13B显示指令集,其中下文详细地解释使用上文所解释的架构的增强的 指令。DDFSR 将文字加到 FSRn 上语法ADDFSR n, k操作数-32彡k彡31η e
操作FSR(η) +k — FSR (η)受影响的状态无编码110001 Onkk kkkk描述将带+_符号的6位文字‘k’加到由‘η’规定的FSR的内容上。FSRn限制 于范围OOOOh到FFFFh。使其递增/递减超过这些界限将致使其环绕。应注意,地址SOOOh 及更大指向程序存储器。低于8000h的地址指向数据存储器,其中仅下部11个位用于地址解码。字1循环1Q循环活动 QlQ2 Q3 Q4解码 读取FSRn,处理数据写入到FSRn实例ADDFSRl,23h在指令之前FSRl = OFFh在指令之后FSRl = 0122hDDffFC将WREG及进位位加到f上语法ADDWFC f {, d}操作数0彡f彡127d e
操作(WREG)+ (f) + (C) — dest受影响的状态C、DC、Z编码110111 dfff ffff描述将WREG、进位旗标及数据存储器位置‘f’相加。如果‘d’为‘0’,那么将结 果放置于WREG中。如果‘d’为‘1’,那么将结果放置于数据存储器位置‘f’中。循环1Q循环活动QlQ2 Q3 Q4解码 读取寄存器‘f’处理数据 写入到目的地实例ADDWFCREG,0在指令之前进位位=1REG = 02hWREG = 4Dh在指令之后进位位=0REG = 02h
WREG = 50hSRF 算术右移语法ASRF f {, d}操作数0≤f≤127d e
操作(f<7>)— dest<7>(f<7:l>) — dest<6:0>,(f<0>)— C,受影响的状态C、Z编码110111 dfff ffff描述通过进位旗标将寄存器‘f’的内容向右移位一个位。MSb保持不变。如果 ‘d’为‘0’,那么将结果放置于WREG中。如果‘d’为‘1’,那么将结果存储回到寄存器‘f,中。字1循环1Q循环活动QlQ2 Q3Q4解码 读取寄存器‘f’处理数据 写入到目的地实例ASRFREG,0在指令之前REG =1110 0110C = 1在指令之后REG =1110 0110WREG = 1111 0011C = O相对分支语法BRA k操作数-256≤k≤255操作(PC)+k—PC受影响的状态无编码11OOlk kkkk kkkk描述将二进制补数‘k’加到PC上。由于PC将递增以提取下一指令,因此新地址 将为PC+1+k。此指令为双循环指令。字1循环2Q循环活动QlQ2 Q3Q4解码 读取文字‘k’处理数据 写入到PC无操作无操作无操作 无操作实例0023hBRA 005h在指令之前 PC =地址(0023h)在指令之后 PC =地址(0029h)
Rff借助WREG的相对分支语法:BRW操作数无操作(PC)+ (WREG) — PC受影响的状态无编码000000 0000 1011描述将WREG(不带+_符号)的内容加到PC上。由于PC将递增以提取下一指令, 因此新地址将为PC+1+(WREG)。此指令为双循环指令。将WREG的内容视为不带+_符号的数。字1循环2Q循环活动QlQ2Q3Q4解码 读取寄存器WREG 处理数据 写入到PC无操作 无操作无操作 无操作实例0024hBRff在指令之前PC=地址(0024h)WREG = 85h在指令之后PC=地址(OOAAh)ALLW借助WREG的子例稈调用语法:CALLW操作数无操作(PC)+1— T0S,(WREG) — PC<7:0>,(PCLATH<6:0>) — PC<14:8>受影响的状态无编码000000 0000 1010描述借助WREG的子例程调用。首先,将返回地址(PC+1)推进到返回堆栈上。接着,将WREG的内容加载到PC<7 0>中,且将PCLATH的内容加载到PC<14:8>中。CALLW为双 循环指令。字1循环2Q循环活动QlQ2Q3Q4解码 读取寄存器WREG 处理数据 写入到PC无操作无操作无操作 无操作实例0025hCALLW在指令之前 PC=地址(0025h)WREG=IAhPCLATH = IOh在指令之后 TOS =地址(0026h)
PC = IOlAhWREG=IAhPCLATH = IOhSLF 逻辑左移语法LSLF f {,d}操作数0彡f彡127
d e
操作(f<7>)—C(f<6:0>) — dest<7:l>0 —dest<0>受影响的状态C、Z编码110101 dfff ffff描述通过进位旗标将寄存器‘f’的内容向左移位一个位。将‘0’移位到LSb中。 如果‘d’为‘0’,那么将结果放置于WREG中。如果‘d’为‘1’,那么将结果存储回到寄存器中。字1循环1Q循环活动QlQ2Q3Q4解码 读取寄存器‘f’ 处理数据 写入到目的地实例LSLFREG,0在指令之前REG =1110 0110C = O在指令之后REG =1110 0110WREG = 1100 1100C = 1SRF 逻辑右移语法LSRF f{, d}操作数0彡f彡127d e
操作0 — dest<7>(f<7:l>) — dest<6:0>,(f<0>)— C,受影响的状态C、Z编码110110 dfff ffff描述通过进位旗标将寄存器‘f’的内容向右移位一个位。将‘0’移位到MSb中。 如果‘d’为‘0’,那么将结果放置于WREG中。如果‘d’为‘1’,那么将结果存储回到寄存器中。字1循环1Q循环活动
QlQ2 Q3 Q4解码 读取寄存器‘f’ 处理数据 写入到目的地实例LSRFREG,0在指令之前REG =1110 0110 C = 1在指令之后REG =1110 0110WREG = 0111 0011C = OOVIff在预/后递增/递减的情况下,将INDFn移动到WREG语法M0VIW++/—FSRn++/-η e
操作数操作INDFn— WREG对FSRn应用预/后递增/递减操作。受影响的状态Z (仅在目的地为WREG的情况下)编码00 0000 0001 OnmmMM操作00++FSRn01-FSRn10FSRn++11FSRn-描述此指令用于在间接寄存器(INDFn)中的一者与WREG之间移动数据。在此移 动之前/之后,通过使指针(FSRn)预/后递增/递减来对其进行更新。FSRn限制于范围 OOOOh到FFFFh。使其递增/递减超过这些界限将致使其环绕。应注意,大于7FFFh的地址 指向程序存储器。低于SOOOh的地址指向数据存储器,其中仅下部11个位用于地址解码。 对FSRn的递增/递减操作将不影响任何状态位。如果将OOh的值移动到WREG,那么此指令 可仅影响Z旗标。字1循环1Q循环活动QlQ2 Q3Q4解码如果读取源寄存器,那么处理数据写入到目的地寄存器。如果更新指针。需要,那么更新指针。实例M0VIWFSRO++在指令之前 FSRO = 22hWREG = FFh(22h) = 12h(23h) = 33h在指令之后 FSRO = 23h
WREG = 12h(22h) = 12h(23h) = 33h实例M0VIW++FSR0在指令之前 FSRO = 22hWREG = FFh(22h) = 12h(23h) = 33h在指令之后 FSRO = 23hWREG = 33h(22h) = 12h(23h) = 33hOVIff将INDFn移动到WREG、变址的间接寻址语法MOVIW[k] FSRn操作数-32彡k彡31η e
操作(FSRn+k)— WREG在由FSRn+k指向的位置与WREG之间移动数据。受影响的状态Z (仅在目的地为WREG的情况下)编码111111 Onkk kkkk描述此指令用于在由FSRn+k指向的位置与WREG之间移动数据。不用k来更新 FSRn。可寻址范围限制于OOOOh到FFFFh。变址超过这些界限将导致地址环绕。应注意,地 址SOOOh及更高指向程序存储器。低于SOOOh的地址指向数据存储器,其中仅下部11个位 用于地址解码。地址计算(将k加到FSRn上)将不影响任何状态位。如果将OOh的值移 动到WREG,那么此指令可仅影响Z旗标。字1循环1Q循环活动QlQ2 Q3Q4解码 地址计算。读取源寄存器。处理数据 写入到目的地寄存器。实例M0VIW[5]FSR0在指令之前 FSRO = 22hWREG = FFh(22h) = 12h(27h) = 39h在指令之后 FSRO = 22hWREG = 39h (22h) = 12h(27h) = 39h
实例M0VIW[-5]FSR0在指令之前 FSRO = 22hWREG = FFh(IDh) = 17h(22h) = 12h在指令之后 FSRO = 22hWREG = 17h(IDh) = 17h(22h) = 12hOVLB将文字移动到BSR 语法:M0VLB k操作数0彡k彡15操作k— BSR受影响的状态无编码000000 0010 kkkk描述将4位文字‘k’加载到库选择寄存器(BSR)中。字1循环1Q循环活动QlQ2Q3Q4解码 读取文字‘k, 处理数据 将文字‘k’写入到BSROVLP将文字移动到PCLATH 语法:M0VLP k操作数0彡k彡127操作k— PCLATH受影响的状态无编码110001 Ikkk kkkk描述将七位文字‘k’加载到PCLATH寄存器中。字1循环1Q循环活动QlQ2Q3Q4解码 读取文字‘k, 处理数据 将文字‘k’写入到PCLATHOVffI变址的间接移动语法:M0VWI [k] FSRn
操作数-32彡k彡31η e
操作WREG— (FSRn+k)在WREG与由FSRn+k指向的位置之间移动数据。受影响的状态Z (仅在目的地为WREG的情况下)编码111111 Inkk kkkk描述此指令用于在WREG与由FSRn+k指向的位置之间移动数据。不用k来更新FSRn。可寻址范围限制于OOOOh到FFFFh。变址超过这些界限将导致地址环绕。应注意,地 址SOOOh及更高指向程序存储器。低于SOOOh的地址指向数据存储器,其中仅下部11个位 用于地址解码。地址计算(将k加到FSRn上)将不影响任何状态位。字1循环1Q循环活动QlQ2 Q3Q4解码 地址计算。读取源寄存器。处理数据 写入到目的地寄存器。实例MOVWI[3] FSRO在指令之前 FSRO = 22hWREG = FFh(22h) = 12h(25h) = 56h在指令之后 FSRO = 22hWREG = FFh(22h) = 12h(25h) = FFh实例MOVWI[-1] FSRO在指令之前 FSRO = 22hWREG = FFh(21h) = 56h(22h) = 12h在指令之后 FSRO = 22hWREG = FFh(21h) = FFh(22h) = 12hQ循环活动QlQ2 Q3Q4解码 读取寄存器‘f, 处理数据 写入到目的地OVffI在预/后递增/递减的情况下,将WREG移动到INDFn语法M0VWI++/--FSRn++/—操作数η e
操作WREG— INDFn对所使用的FSR应用预/后递增/递减操作。受影响的状态Z (仅在目的地为WREG的情况下)编码00 0000 0001 InmmMM操作00++FSRn
01-FSRn10FSRn++11FSRn- 描述此指令用于在WREG与间接寄存器(INDFn)中的一者之间移动数据。在此移 动之前/之后,通过使指针(FSRn)预/后递增/递减来对其进行更新。FSRn限制于范围 OOOOh到FFFFh。使其递增/递减超过这些界限将致使其环绕。应注意,地址SOOOh及更高 指向程序存储器。低于SOOOh的地址指向数据存储器,其中仅下部11个位用于地址解码。 对FSRn的递增/递减操作将不影响任何状态位。字1循环1Q循环活动QlQ2 Q3Q4解码 如果需要,那么更新指针。处理数据 写入到INDFn。如果需要,那么更新指针。实例M0VWIFSR0—在指令之前 FSRO = 22hWREG = FFh(2lh) = 56h(22h) = 12h在指令之后 FSRO = 21hWREG = FFh(21h) = 56h(22h) = FFh实例M0VWI-FSR0在指令之前 FSRO = 22hWREG = FFh(21h) = 56h(22h) = 12h在指令之后 FSRO = 21hWREG = FFh(21h) = FFh(22h) = 12hESET软件复位语法:RESET操作数无操作执行nMCLR。复位受MCLR复位影响的所有寄存器及旗标。设置PCON. nSWRST 旗标。受影响的状态全部编码000000 0000 0001描述此指令提供用以通过软件执行MCLR复位的方式。
字1循环1 Q循环活动QlQ2Q3Q4解码 开始复位 无操作 无操作实例RESET在指令之后寄存器=复位值旗标复位值UBffFB在借位的情况下从f中减去WREG 语法SUBWFB f {, dl操作数0≤f≤127d e
操作(f)- (WREG) - (B) — dest受影响的状态C、DC、Z编码110111 dfff ffff描述从寄存器‘f’中减去WREG及借位旗标(进位)(二进制补码方法)。如果‘d’为‘0’,那么将结果存储于WREG中。如果‘d’为‘1’,那么将结果存储回 到寄存器‘f’中。字1循环1实例1 SUBWFB REG,1在指令之前REG = 19h (0001 1001)WREG = ODh (0000 1101)C=l(因此 B = 0)在指令之后REG = OCh (0000 1100)WREG = ODh (0000 1101)C=l(无借位)DC = 0(指示数字借位)实例2 =SUBffFB REG,0在指令之前REG = IBh (0001 1011)WREG = IAh (0001 1010)C = 0 (因此 B=I)在指令之后REG = IBh (0001 1011)WREG = OOhC=l(无借位)DC = 1 (无数字借位)Z = 1结果为零
权利要求
一种n位微处理器装置,其包括n位中央处理单元(CPU);多个特殊功能寄存器及通用寄存器,其被存储器映射到多个库且包括至少两个16位间接存储器地址寄存器,所述至少两个16位间接存储器地址寄存器可由所述CPU跨越所有库存取;库存取单元,其用于将所述CPU与所述多个库中的一者耦合;数据存储器,其与所述CPU耦合;及程序存储器,其与所述CPU耦合,其中所述间接地址寄存器可操作以存取所述数据存储器或程序存储器且其中所述间接存储器地址寄存器中的每一者中的一位指示对所述数据存储器或对所述程序存储器的存取。
2.根据权利要求1所述的n位微处理器,其中n= 8。
3.根据权利要求1所述的n位微处理器,其进一步包括至少一个虚拟寄存器,其中将数 据写入到所述虚拟寄存器导致使用所述间接存储器地址寄存器中的一者对所述数据存储 器或对所述程序存储器的间接存取。
4.根据权利要求3所述的n位微处理器,其中所述至少一个虚拟寄存器被映射到每一 存储器库。
5.根据权利要求1所述的n位微处理器,其进一步包括虚拟寄存器,其中从所述虚拟寄 存器读取数据导致使用所述间接存储器地址寄存器中的一者对所述数据存储器或对所述 程序存储器的间接存取。
6.根据权利要求5所述的n位微处理器,其中所述至少一个虚拟寄存器被映射到每一 存储器库。
7.根据权利要求5所述的n位微处理器,其中所述虚拟寄存器不以物理方式实施于所 述微处理器装置中。
8.根据权利要求1所述的n位微处理器,其中所述数据存储器是8位宽且所述程序存 储器是14位宽。
9.根据权利要求8所述的n位微处理器,其中数据存储器地址的一个额外位界定在调 试模式中使用的扩展存储器地址范围。
10.根据权利要求8所述的n位微处理器,其中所述间接地址寄存器中的所述位是最高 有效位。
11.一种用于操作n位微处理器装置的方法,其包括以下步骤 提供n位中央处理单元(CPU);提供多个特殊功能寄存器及通用寄存器,所述多个特殊功能寄存器及通用寄存器被存 储器映射到多个库,提供至少两个16位间接存储器地址寄存器,所述至少两个16位间接存储器地址寄存 器可由所述CPU跨越所有库存取;提供库存取单元,所述库存取单元用于将所述CPU与所述多个库中的一者耦合; 提供数据存储器,所述数据存储器与所述CPU耦合; 提供程序存储器,所述程序存储器与所述CPU耦合;及使用间接地址寄存器执行间接寻址以存取所述数据存储器或程序存储器,其中所述间 接存储器地址寄存器中的每一者中的一位分别指示对所述数据存储器或对所述程序存储 器的存取。
12.根据权利要求11所述的方法,其中n= 8。
13.根据权利要求11所述的方法,其进一步包括通过将数据写入到至少一个虚拟寄存 器来产生间接存储器写入存取的步骤,其中所述间接存储器存取使用所述间接存储器地址 寄存器中的一者。
14.根据权利要求13所述的方法,其中将所述虚拟寄存器存储器映射到所有存储器库。
15.根据权利要求11所述的方法,其进一步包括通过从至少一个虚拟寄存器读取数据 来产生间接存储器读取存取的步骤,其中所述间接存储器读取存取使用所述间接存储器地 址寄存器中的一者。
16.根据权利要求13所述的方法,其中将所述虚拟寄存器存储器映射到所有存储器库。
17.根据权利要求15所述的方法,其中不将所述虚拟寄存器以物理方式实施于所述微 处理器装置中。
18.根据权利要求11所述的方法,其中所述数据存储器是8位宽且所述程序存储器是 14位宽。
19.根据权利要求18所述的方法,其中数据存储器地址的一个额外位界定在调试模式 中使用的扩展存储器地址范围。
20.根据权利要求18所述的n位微处理器,其中所述间接地址寄存器中的所述位是最 高有效位。
全文摘要
本发明涉及一种n位微处理器装置,其具有n位中央处理单元(CPU);多个特殊功能寄存器及通用寄存器,其被存储器映射到多个库且具有至少两个16位间接存储器地址寄存器,所述至少两个16位间接存储器地址寄存器可由所述CPU跨越所有库存取;库存取单元,其用于将所述CPU与所述多个库中的一者耦合;数据存储器,其与所述CPU耦合;及程序存储器,其与所述CPU耦合,其中所述间接地址寄存器可操作以存取所述数据存储器或程序存储器且其中所述间接存储器地址寄存器中的每一者中的一位指示对所述数据存储器或对所述程序存储器的存取。
文档编号G06F9/35GK101868780SQ200880116717
公开日2010年10月20日 申请日期2008年11月26日 优先权日2007年11月30日
发明者埃里克·施罗德, 扎卡赖亚斯·马蒂纳斯·斯米特, 杰罗尔德·S·兹德内克, 瑞安·斯科特·埃利森, 约瑟夫·朱利谢尔, 维维安·德尔波特, 肖恩·斯蒂德曼 申请人:密克罗奇普技术公司