微控制器指令集的利记博彩app

文档序号:6502823阅读:1252来源:国知局
专利名称:微控制器指令集的利记博彩app
技术领域
本发明涉及微控制器,且更具体地说,本发明涉及被集合到一指令集中的操作码指令,所述指令集用于操纵微控制器的行为。

背景技术
微控制器单元(MCU)许多年来用于制造业和电气业中。图1展示用于中型MCU器件的典型的核心存储器总线配置。在许多情况下,微控制器利用精简指令集计算(RISC)微处理器。这些器件中的一些器件的高性能可归因于RISC微处理器所共有的许多架构特征。这些特征包括 哈佛架构(Harvard architecture) 长字指令 单字指令 单周期指令 指令流水线操作 精简指令集 寄存器文件架构 正交(对称)指令 哈佛架构 如图2所示,哈佛架构具有程序存储器26和数据存储器22,二者是作为独立存储器且可由CPU 24通过独立总线进行访问。与传统的冯·诺依曼架构(在图3中展示)相比,哈佛架构具有改良的带宽,其中冯·诺依曼架构的程序和数据是由CUP 34通过同一总线从同一存储器36取得。为了执行一条指令,冯·诺依曼机器必须在8位总线上进行一次或一次以上(通常是一次以上)的访问才能取得指令。然后必须取得数据、对数据进行操作,可能还要写入数据。由此描述可见,总线可能会非常繁忙。
与冯·诺依曼机器相反,在哈佛架构下,单个指令周期内即可取得全部14位的指令。因此在哈佛架构下,当访问程序存储器时,数据存储器位于独立总线上,且可被读取和写入。这些独立的总线允许在执行一条指令的同时获取下一条指令。
长字指令 长字指令的指令总线宽度比8位数据存储器总线宽(位数更多)。由于使用了相互独立的两条总线,所以这就成为了可能。这进一步允许指令大小不同于8位数据字宽度,这允许程序存储器更有效的使用,因为可针对架构需求对程序存储器宽度进行优化。
单字指令 单字指令操作码为14位宽,从而有可能具有所有单字指令。14位宽的程序存储器访问总线可在单周期中取得一条14位的指令。由于是单字指令,所以程序存储器位置的字数等于用于器件的指令数。这就意味着所有位置都是合法指令。一般在冯·诺依曼架构(在图3中展示)中,大多数指令是多字节指令。然而,具有4K字节的程序存储器的器件一般允许约2K的指令。这个2∶1的比率只是大概情况,且取决于应用代码。由于每一指令可用多个字节,所以不能保证每个位置都是合法指令。
指令流水线 指令流水线是两级流水线,其重叠进行取指操作和指令执行。取指花费一个机器周期(“TCY”),而执行花费另一TCY。然而,由于当前指令的取指和前一条指令的执行是重叠进行的,故在每一TCY内进行一条指令的取指和另一条指令的执行。
单周期指令 程序存储器总线是14位宽,因此能在单个TCY中完成整条指令的取指。指令中含有所需的所有信息,并能在单一周期中执行。如果指令的结果修改了程序计数器的内容,那么在执行中可存在一个周期的延迟。这需要流水线排空并获取新指令。
精简指令集 当指令集设计得很好且高度正交(对称)时,执行所有所需任务只需较少指令。指令越少,就能越迅速地掌握整个指令集。
寄存器文件架构 寄存器文件/数据存储器可被直接或间接寻址。所有特殊功能寄存器,包括程序计数器,都映射到数据存储器。
正交(对称)指令集 正交指令有可能使用任何寻址模式对任何寄存器进行任何操作。这个对称性和无“特殊指令”使编程简单且有效。此外,可显著缩短学习曲线。中型指令集只使用两条非面向寄存器的指令,它们用于核心特征中的两者。其中一条是SLEEP指令,可将器件设置成最低功耗使用模式。另一条是CLRWDT指令,所述指令通过防止片内监视定时器(WDT)溢出和使器件复位来检验芯片是否适当地工作。
时钟图/指令周期 时钟输入(来自OSC1)在内部经过4分频,以产生4个非重叠的正交时钟,即Q1、Q2、Q3和Q4。在每一Q1中,程序计数器(PC)递增;在Q4中,从程序存储器取指,并将指令锁存在指令寄存器中。指令的译码和执行是在下一个Q1到Q4之间完成。图4和图5说明时钟和指令执行流。
指令流/流水线操作 一个“指令周期”由4个Q周期(Q1、Q2、Q3和Q4)组成,其如4所示,且如图4和图5所示,所述4个Q周期包含TCY。注意在图5中,所有指令在单个周期中执行,除非有一些程序转移。程序转移花费两个周期,因为流水线中的取指指令“排空”,同时获取新指令且然后执行所述指令。
取指花费一个指令周期,而译码和执行花费另一指令周期。然而,由于是流水线操作,所以每一指令可有效地在一个周期中执行。如果一条指令导致程序计数器改变(例如,GOTO),那么需要额外的周期来完成所述指令(图5)。在Q1中开始取指,且程序计数器递增。在执行周期中,在周期Q1中将所取指令锁存“指令寄存器(IR)”中。然后,在Q2、Q3和Q4期间对这条指令进行译码并执行这条指令。在Q2期间对数据存储器进行读取(读取操作数),且在Q4期间进行写入(写入目的地)。图5展示用于所示的指令序列的两级流水线的操作。在TCY0时,从程序存储器取第一条指令。在TCY1期间,执行第一条指令,同时取第二条指令。在TCY2期间,执行第二条指令,同时取第三条指令。在TCY3期间,执行第三条指令(CALL SUB_1),同时取第四条指令。当执行完第三条指令时,CPU将指令4的地址压入栈,且将程序计数器(PC)改变成SUB_1地址。这就意味着需要从流水线中“排空”在TCY3期间所取的指令。在TCY4期间,指令4排空(执行为NOP),且取地址SUB_1处的指令。最后,在TCY5期间,执行指令5,且取地址SUB_1+1处的指令。
尽管现有技术的微控制器有用,但是不可仿真多种模块。此外,图1中所述的微控制器的类型不可使地址空间线性化。最后,现有技术的微控制器易受编译程序错误问题的影响。需要一种能够使地址空间线性化以便能够进行模块化仿真的微控制器的装置、方法和系统。这项技术中还需要减少编译程序错误。


发明内容
本发明通过提供排除现有技术中所经历的许多编译程序错误的微控制器指令集,克服了以上所识别的问题以及现有技术的其它缺点和不足。此外提供一种具有使模块化仿真成为可能的线性化地址空间的装置和系统。
本发明可直接或间接地寻址其寄存器文件或数据存储器。所有的特殊功能寄存器都映射到数据存储器中,其中包括程序计数器(PC)和工作寄存器(W)。本发明具有正交(对称)指令集,它使得使用任何寻址模式对任何寄存器进行任何操作成为可能。这种对称性和无“特殊最佳情况”使利用本发明的编程简单且有效。此外,可显著缩短写软件应用程序的学习曲线。本发明比现有技术的增强之一是允许两个文件寄存器用于一些两个操作数的指令中。这允许在两个寄存器之间直接移动数据,而不需要通过W寄存器,且因此增强了性能并减少了程序存储器的利用率。
本发明的优选实施例包括ALU/W寄存器、PLA、8位乘法器、带有栈的程序计数器(PC)、表锁存器/表指针、ROM锁存器/IR锁存器、FSR、中断引导电路和最常用的状态寄存器。与现有技术不同,本发明的设计回避了对以下组件的需要独立模块中的计时器、所有的复位产生电路(WDT、POR、BOR等)、中断标志、使能标志、INTCON寄存器、RCON寄存器、配置位、器件ID字、ID位置和时钟驱动器。
一旦参考了详细说明和附图,所属领域技术人员将很清楚额外的实施例。



图1是现有技术的中型微控制器单元的示意性方框图; 图2是现有技术的哈佛架构的示意性方框图; 图3是现有技术的冯·诺依曼架构的示意性方框图; 图4是现有技术时钟/指令周期的时序图; 图5是多个指令的执行的示意说明; 图6是本发明的微控制器核心的示意性方框图; 图7是本发明的Q周期活动的时序图; 图8是本发明的时钟/指令周期的时序图; 图9是本发明的指令流水线流程图; 图10是本发明的指令流水线流程图; 图11是本发明的指令流水线流程图; 图12是本发明的指令流水线流程图; 图13是本发明的指令流水线流程图; 图14是本发明的指令流水线流程图; 图15是本发明的状态寄存器的方框图; 图16是本发明的程序计数器的方框图; 图17是本发明的程序计数器使用CALL和GOTO指令的情况下的方框图; 图18是本发明的栈指针寄存器的方框图; 图19是本发明的栈顶更高寄存器的方框图; 图20是本发明的栈顶高寄存器的方框图; 图21是本发明的栈顶低寄存器的方框图; 图22说明本发明的栈复位操作; 图23说明本发明的已初始化栈上的第一CALL; 图24说明本发明的栈上的第二连续CALL; 图25说明本发明的栈上的第31和第32连续CALL; 图26说明本发明的栈上的返回POP操作; 图27本发明内的导致栈下溢状态的栈返回弹出; 图28说明本发明的栈上PUSH指令; 图29说明本发明的栈上POP指令; 图30是本发明的栈和程序存储器映射的方框图; 图31是本发明的存储器映射的方框图; 图32是本发明的存储器中的指令的方框图; 图33是说明在不同程序模式下的本发明的器件存储器映射的方框图; 图34是描述本发明的MEMCON寄存器的方框图; 图35是描述本发明的CONFIG7配置字节的方框图; 图36是本发明的16位外部存储器连接配置的示意性方框图; 图37是本发明的8位外部存储器连接配置的方框图; 图38是本发明的典型端口功能的列表; 图39是本发明的16位模式的外部程序存储器总线的时序图; 图40是本发明的8位模式的外部程序存储器总线的时序图; 图41是本发明的外部总线周期类型的列表; 图42是本发明的数据存储器映射和指令“a”位的示意性方框图; 图43是本发明的特殊功能寄存器的映射; 图44是本发明的核心特殊功能寄存器的示意图; 图45是图44的核心特殊功能寄存器的示意图的延续部分; 图46是本发明的直接短寻址模式的示意性方框图; 图47是本发明的BSR操作的示意性方框图; 图48是本发明的BSR操作在仿真/测试模式期间的示意性方框图; 图49是本发明的直接强制寻址模式的示意性方框图; 图50是本发明的直接强制寻址模式的示意性方框图; 图51是本发明的直接长寻址模式的示意性方框图; 图52是本发明的间接寻址模式的示意性方框图; 图53是本发明的间接寻址模式的示意性方框图; 图54是本发明的操作码字段的描述列表; 图55是本发明的间接寻址符号的列表; 图56说明本发明的指令的一般格式; 图57是本发明的指令集的部分列表; 图58是本发明的指令集的部分列表; 图59是本发明的指令集的部分列表; 图60是本发明的面向字节的文件寄存器操作的流程图; 图61是本发明的面向字节的文件寄存器操作(执行)的流程图; 图62是本发明的CLRF、NEGF、SETF(取)指令的流程图; 图63是本发明的CLRF、NEGF、SETF(执行)指令的流程图; 图64是本发明的DECFSZ、DCFSNZ、INCFSZ、ICFSNZ(取)指令的流程图; 图65是本发明的DECFSZ、DCFSNZ、INCFSZ、ICFSNZ(取)指令的流程图; 图66是本发明的CPFSEQ、CPFSQT、CPFSLT和TSTFSZ(取)指令的流程图; 图67是本发明的CPFSEQ、CPFSQT、CPFSLT和TSTFSZ(执行)指令的流程图; 图68是本发明的MULWF(取)指令的流程图; 图69是本发明的MULWF(执行)指令的流程图; 图70是本发明的MULFF(取)指令的流程图; 图71是本发明的MULFF(执行1)指令的流程图; 图72是本发明的MULFF(执行2)指令的流程图; 图73是本发明的BCF、BSF、BTG(取)指令的流程图; 图74是本发明的BCF、BSF、BTG(取)指令的流程图; 图75是本发明的BTFSC和BTFSS(取)指令的流程图; 图76是本发明的BTFSC和BTFSS(执行)指令的流程图; 图77是本发明的字面值操作(取)指令的流程图; 图78是本发明的字面值操作(执行)指令的流程图; 图79是本发明的LFSR(取)指令的流程图; 图80是本发明的LFSR(执行1)指令的流程图; 图81是本发明的LFSR(执行2)指令的流程图; 图82是本发明的DAW(取)指令的流程图; 图83是本发明的DAW(执行)指令的流程图; 图84是本发明的MULLW(取)指令的流程图; 图85是本发明的MULLW(执行)指令的流程图; 图86是本发明的CLRWDT、HALT、RESET和SLEEP(取)指令的流程图; 图87是本发明的CLRWDT、HALT、RESET和SLEEP(执行)指令的流程图; 图88是本发明的MOVELB(取)指令的流程图; 图89是本发明的MOVELB(执行)指令的流程图; 图90是本发明的转移操作(取)的流程图; 图91是本发明的转移操作(执行)的流程图; 图92是本发明的BRA和RCALL(取)指令的流程图; 图93是本发明的BRA和RCALL(执行)指令的流程图; 图94是本发明的PUSH(取)指令的流程图; 图95是本发明的PUSH(执行)指令的流程图; 图96是本发明的POP(取)指令的流程图; 图97是本发明的POP(执行)指令的流程图; 图98是本发明的RETURN和RETFIE(取)指令的流程图; 图99是本发明的RETURN和RETFIE(执行)指令的流程图; 图100是本发明的RETLW(取)指令的流程图; 图101是本发明的RETLW(执行)指令的流程图; 图102是本发明的GOTO(取)指令的流程图; 图103是本发明的GOTO(执行1)指令的流程图; 图104是本发明的GOTO(执行2)指令的流程图; 图105是本发明的CALL(取)指令的流程图; 图106是本发明的CALL(执行1)指令的流程图; 图107是本发明的CALL(执行2)指令的流程图; 图108是本发明的TBLRD*、TBLRD*+、TBLRD*-和TBLRD+*(取)指令的流程图; 图109是本发明的TBLRD*、TBLRD*+、TBLRD*-和TBLRD+*(执行1)指令的流程图; 图110是本发明的TBLRD*、TBLRD*+、TBLRD*-和TBLRD+*(执行2)指令的流程图; 图111是本发明的TBLWT*、TBLWT*+、TBLWT*-和TBLWT+*(取)指令的流程图; 图112是本发明的TBLWT*、TBLWT*+、TBLWT*-和TBLWT+*(执行)指令的流程图; 图113是本发明的TBLWT*、TBLWT*+、TBLWT*-和TBLWT+*(执行2)指令的流程图;和 图114是本发明的指令译码映射。
图115是说明根据本发明的教示的替代分页方案的方框图。
图116是说明根据本发明的教示的替代分页方案的方框图。

具体实施例方式 本发明是用于在若干实施例中提供微控制器指令集和微控制器架构的装置、方法和系统,所述微控制器架构包括使得能够进行模块化仿真的线性化地址空间。
本发明的优选实施例的装置的架构修改现有技术中的哈佛架构,其中数据路径是8位,且指令长度是16位,且具有四相内部时钟图。此外,优选实施例具有线性化存储器寻址方案,其排除了对分页和分区的需要。本发明的存储器寻址方案允许程序存储器的可寻址能力多达2M字节。本发明也支持模块仿真。
本发明通过提供排除现有技术中所经历的许多编译程序错误的微控制器指令集,克服上文所识别的问题以及现有技术的其它缺点和不足。此外提供起用使模块化仿真成为可能的线性化地址空间的装置和系统。
本发明可直接或间接地寻址其寄存器文件或数据存储器。所有的特殊功能寄存器都映射到数据存储器中,其中包括程序计数器(PC)和工作寄存器(W)。本发明具有正交(对称)指令集,它使得使用任何寻址模式对任何寄存器进行任何操作成为可能。这种对称性和无“特殊最佳情况”使利用本发明的编程简单且有效。此外,可显著缩短学习曲线。本发明系列比现有技术在架构上的增强之一允许两个文件寄存器用于一些两个操作数的指令中。这允许在两个寄存器之间直接移动数据,而不需要通过W寄存器,且因此增强了性能并减少了程序存储器的利用率。图6展示本发明的微控制器核心的方框图。
图6中说明本发明的微控制器核心100。根据惯例,图6中的连接信号线可含有一斜杠和一相邻数字,其指示信号线的带宽(位)。参考图6的右上角,我们可发现一数据存储器104,其用于存储数据且将数据转移到中央处理单元(下文所述)并从中央处理单元转移数据。数据存储器104包含复数个地址位置。在本发明的优选实施例中,数据存储器104是线性化的4K存储器,将其划分成复数个16页或存储区。一般地,每一存储区具有256个地址位置。在优选实施例中,复数个存储区中的一个存储区用于通用寄存器和专用寄存器,在这种情况下,最顶层的存储区是存储区0。
选择电路108通过地址锁存器102耦接到数据存储器104。选择电路108用于选择供应数据存储器104中的存储区地址值的复数个源中的一个源。
本发明的优选实施例包括带有工作(W)寄存器136的ALU 140、PLA、8位乘法器、带有栈170的程序计数器(PC)168、表锁存器124、表指针148、带有IR锁存器126的只读存储器(ROM)锁存器152、FSR(120、121、122)、中断引导电路(interruptvectoring circuitry)和最常用的状态寄存器。与现有技术不同,本发明的设计回避了对以下组件的需要独立模块中的计时器、所有的复位产生电路(WDT、POR、BOR等)、中断标志、使能标志、INTCON寄存器、RCON寄存器、配置位、器件ID字、ID位置和时钟驱动器。
I/O列表 可利用本发明使用输入/输出(I/O)命令的丰富列表,表1中展示I/O列表。
表1 I/O列表 时钟图/指令周期 时钟输入(来自OSC1)在内部经过4分频,以产生4个非重叠的正交时钟,即Q1、Q2、Q3和Q4,如图7所示。在内部,程序计数器(PC)逐Q1地增加,且使用Q4从程序存储器取指并将指令锁存在指令寄存器中。指令的译码和执行是在下一个Q1到Q4之间完成。PLA译码是在Q1期间完成。在Q2和Q3周期期间,从存储器或外围设备读操作数,且ALU执行计算。在Q4期间,将结果写入目标位置。图8中展示时钟和指令执行流。
Q周期活动 如图7所示,每一指令周期(TCY)包含4个Q周期(Q1-Q4)。Q周期与器件振荡器的周期(TOSC)相同。Q周期提供用于每一指令周期的译码、读、处理数据、写等的时序/指示。下图(图7)展示Q周期与指令周期的关系。组成一个执行指令周期(TCY)的4个Q周期可概括如下 Q1指令译码周期或强制NOP Q2指令读周期或NOP Q3处理数据 Q4指令写周期或NOP 每一指令将展示用于这条指令的详细的Q周期操作。
指令流/流水线操作 “指令周期”由4个Q周期(Q1、Q2、Q3和Q4)组成。取指和执行指令是流水线操作,从而使得取指花费一个指令周期,而译码和执行花费另一指令周期。然而,由于是流水线操作,所以每一指令可有效地在一个周期中执行。存在4种类型的指令流。第一种是正常的1个字1个周期的流水线指令。这些指令将花费一个有效周期来执行,如图9所示。第二种是1个字2个周期的流水线排空指令。这些指令包括相关的分支,相关的调用、跳跃和返回。当指令改变PC时,放弃流水线取指。这使得指令花费两个有效周期来执行,如图10所示。第三种是表操作指令。这些指令将暂停取指以将读或写周期插入到程序存储器。将执行表操作时所取的指令保存一个周期,且在紧跟在表操作后的周期中执行所述指令,如图11所示。第四种是新的两字指令。这些指令包括MOVFF和MOVLF。在这些指令中,指令之后的取指含有地址的剩余部分。对于MOVFF指令而言,在执行第一个字期间,机器将执行源寄存器的读操作。在执行第二个字期间获得源地址,且然后指令将完成移动,如图12所示。MOVLF类似,但是MOVLF在2个周期中将2个字面值值(literal value)移动到FSRnH和FSRnL中,如图13所示。第五种是用于CALL和GOTO的两字指令。在这些指令中,指令之后的取指含有跳转或调用目标地址的剩余部分。正常地,这些指令将需要3个周期来执行,2个周期用于取2个指令字,且1个周期用于随后的流水线排空。然而,通过对第二取指提供高速路径,可用指令执行的第一周期中的完全值来更新PC,从而产生一个2周期指令,如图14所示。第六种是中断辨识执行。下文在中断部分论述中断期间的指令周期。
ALU 本发明含有8位算术和逻辑单元(ALU)142和工作寄存器136,如图6所示。ALU142是一个通用算术单元。它执行工作寄存器中的数据与任何寄存器文件之间的算术和布尔函数。ALU 142有8位宽,且能够进行加、减、移位和逻辑运算。除非另外提及,算术运算事实上是二进制补码。工作(W)寄存器136是用于ALU 140运算的8位工作寄存器。W寄存器136是可寻址的,且可直接对它进行写操作或读操作。ALU 140能够对两个操作数或单个操作数进行算术或逻辑运算。所有的单操作数指令都在W寄存器136上操作或在给定的文件寄存器上操作。对于两个操作数的指令而言,一个操作数是W寄存器136,且另一个操作数是文件寄存器或8位立即数(immediate constant)或均等的存储媒体。
视所执行的指令而定,ALU 140可影响STATUS寄存器(下文所论述的)中的进位位(C)、辅助进位位(DC)、零位(Z)、溢出位(OV)和负数位(N)的值。在减法中,C和DC位分别用作借位位和辅助借位位。
如图6所示,本发明的优选实施例包括8×8硬件乘法器134,其包括在器件的ALU142中。通过使乘法成为硬件运算,可在单个指令周期中完成运算。这个硬件运算是得出16位结果的无符号乘法运算。所述结果存储到16位乘积寄存器中(PRODH:PRODL)。乘法器不影响STATUS寄存器中的任何旗标。
状态寄存器 STATUS寄存器含有ALU 140的状态位。图15中展示状态寄存器。在本发明的优选实施例中,位7-5不生效,且写为“0”。
位4是负数位“N”。这个位用于有符号的算术(二进制补码)。它指示结果是否是负数(ALU MSb=1),1=结果为负,0=结果为正。
位3是溢出位“OV”。这个位用于有符号的算术(二进制补码)。它指示7位数值溢出,所述溢出使符号位(位7)改变状态。对于这个位而言,1=符号算术发生溢出(在这个算术运算中),且0=无溢出发生。
位2是零位“Z”。对于这个位而言,1=算术运算或逻辑运算的结果是0,且0=算术运算或逻辑运算的结果是非0。
位1是辅助进位位/辅助借位位“DC”。对于这个位而言,1=结果的第四低位发生进位,且0=结果的第四低位未发生进位。请注意,借位时极性相反。
位0是进位/借位位“C”。对于这个位而言,1=结果的最高有效位发生进位,且0=结果的最高有效位未发生进位。与位1一样,借位时极性相反。
在减法中,C和DC位分别用作借位位和辅助借位位。进位是ALU位7的进位。辅助进位是ALU位3的进位。如果ALU结果位<7:0>为“0”,那么零位为真。N是ALU结果位7。如果二进制补码结果超过+127或小于-128,那么溢出位将被置位。溢出为ALU位6的进位与ALU位7的进位的异或的结果。与所有其它寄存器一样,STATUS寄存器可以是任何指令的目的地。如果STATUS寄存器是影响状态位中的任一位的指令的写目的地,那么禁止写入状态位。所述位根据ALU结果和指令规格而被置位或清零。因此,将STATUS寄存器用作目的地的指令的结果可不同于预期结果。
举例而言,CLRF REG指令通常对寄存器写入0,且将Z位置位。CLRF STATUS指令将禁止写入N、OV、DC和C位,且将Z位置位。这就使得STATUS寄存器为000uuluu。因此,建议仅使用BCF、BSF、SWAPF和MOVWF指令来改变STATUS寄存器,因为这些指令不影响任何状态位。欲知其它指令如何影响状态位,请参阅“指令集概要”。
程序计数器模块 程序计数器(PC)168(见图6)经修改以允许扩展到多达最大21位。这可通过增加5位宽的PCLATU寄存器来完成,所述PCLATU寄存器的操作类似于PCLATH寄存器。PC 168还经修改以在程序存储器中寻址字节而不是字。为了这样实施,在PC 168的LSb处存在一个字节寻址位,其始终是0。PCL的LSb可读但是不可写。如果用户试图写入“1”到LSb中,结果将是“0”。为了允许隐藏测试EPROM,存在PC 168的隐藏的第22位(位21)(见图16)。这个PC位通常为0。当进入测试模式或编程模式时,便置位这个位,且将从测试区域取指。一旦这个位被置位,便不可通过执行程序清零它,所以器件必须复位。
程序计数器(PC)168是多达21位寄存器,如图16所示。PCL 184(PC 168的低字节)映射到数据存储器104中(见图6)。PCL 184像任何其它寄存器一样是可读写的。PCH 182和PCU 180是PC的高字节,且不可直接寻址。因为PCH 182和PCU 184并未映射到数据或程序存储器160中,所以寄存器PCLATH 178(PC高锁存器)和PCLATU176(PC更高锁存器)用作用于PC 168的高字节的保持锁存器。
PCLATH 178和PCLATU 176映射到数据存储器104中。用户可通过PCLATH 178对PCH 182进行读写操作,且可通过PCLATU 176对PCU 180进行读写操作。在Q1期间,每次取指之后,PC 168的字加2,除非 由GOTO、CALL、RETURN、RETLW、RETFIE或转移指令修改。
由中断回应修改。
由于由指令引起的对PCL 168的目标写操作。
“跳跃”等同于在所跳跃的地址处的强制NOP周期。图16和图17展示多种情形下的程序计数器的操作。
参考图16,PC 168、PCLATH 178和PCLATU 176针对不同指令的操作如下 a.对PCL的读指令 对PCL 184进行读操作的任何指令。所有d=0的字节指令,MOVFF PCL,X,CPFSEQ,CPFSGT,CPFSLT,MULWF,TSTFSZ,然后PCL到数据总线,然后到ALU或到目标。最后,PCH到PCLATH且PCU到PCLATU。
b.对PCL的写指令 对PCL 184进行写操作的任何指令。举例而言,MOVWF,CLRF,SETF,然后,将8位数据写入到数据总线174,且然后到PCL 184。同样,PCLATH到PCH,且PCLATU到PCU。
c.对PCL的读-修改-写指令 对PCL进行读-修改-写操作的任何指令。所有d=1的字节指令,位指令,NEGF。读PCL到数据总线到ALU。写将8位结果写入到数据总线且到PCL;然后PCLATH到PCH,且最终PCLATU到PCU。
读-修改-写仅影响PCL 184的结果。PCH 182和PCU 180分别装载PCLATH 178和PCLATU 176中的值。举例而言,对于指令“ADDWF”,PCL 184将产生以下的跳转。如果执行所述指令之前PC=0003F0h、W=30h、PCLATH=05h且PCLATU=1h,那么执行所述指令之后PC=010520h。为了完成真实的经计算的20位跳转,用户需要计算20位目标地址,写入PCLATH 178和PCLATU 176,且然后将低值写入PCL 168。
d.RETURN指令 使用图17将<MRU>堆入PC<20:0>,用于GOTO和CALL指令的PC 168、PCLATH178和PCLATU 176的操作如下 e.CALL和GOTO指令 在2字指令(操作码)中提供目标地址。第一个字操作码<6:0>到PCL<7:1>。第一个字操作码<7>到PCLATH<0>且到PCH<0>。第二个字操作码<6:0>到PCLATH<7:1>且到PCH<7:1>。第二个字操作码<11:7>到PCLATU<4:0>且到PCU<4:0>。
请注意,下列关于PC 168的操作不改变PCLATH 178和PCLATU 176 a.RETLW、RETURN和RETFIE指令 b.在PC上实行的中断向量。
c.对PCL的读-修改-写指令(例如,BSF PCL,2)。
返回栈操作 本发明具有31级深度的返回(或硬件)栈。所述栈的深度与现有技术相比有增大,以允许执行更复杂的程序。所述栈不是程序或数据存储空间的一部分。
当执行CALL或RCALL指令或应答中断时,将PC 168压入栈。当执行RETURN、RETLW或RETFIE指令时将PC 168弹出栈。PCLATU 176和PCLATH 178不受任何返回指令的影响。
栈由21位RAM和5位栈指针操作为31字,其中在所有复位之后栈指针初始化为00000b。不存在与栈指针000h相关的RAM字。它只是一个复位值。在执行引起压入栈的CALL类型指令期间,栈指针首先递增,且由栈指针指向的RAM位置写入PC的内容。在执行引起弹出栈的RETURN类型指令期间,由STKPTR指向的RAM位置的内容转移到PC,且然后栈指针递减。
栈顶的访问 栈顶是可读写的。三个寄存器位置(TOSU、TOSH和TOSL)寻址由STKPTR指向的栈RAM位置。这允许用户实施软件栈(若必要的话)。在CALL或RCALL指令或中断之后,软件可通过读TOSU、TOSH和TOSL寄存器来读入栈值。可将这些值置入用户定义的软件栈上。返回时,软件可以替换TOSU、TOSH和TOSL的内容并执行返回操作。请注意,为防止意外的栈操作,在此期间用户必须禁止全局中断使能位。
PUSH和POP指令 因为栈顶(TOS)可以读写,所以能够将值压入栈或从栈弹出而不影响程序的正常执行是一种期望的选择。要将当前PC值压入栈,可以执行PUSH指令。这将使当前PC值压入栈,设置TOS=PC且PC=PC+2。使用POP指令可以从栈中弹出TOS的值,并用前一个入栈值来替换TOS值,而不会影响程序的正常执行。POP指令将TOS值从栈中弹出,但这个值不写入PC,然后前一个入栈值就成为TOS值。
返回栈指针(STKPTR) STKPTR寄存器含有返回栈指针值和溢出、下溢位。栈溢出位(STKOVF)和下溢位(STKUNF)允许软件检验栈状态。仅在POR复位后,STKOVF和STKUNF位才被清零。
在PC压入栈31次之后(没有任何值从栈弹出),第32次压栈会覆盖第31次压栈的值,并且将STK-OVF位置位,而STKPTR保持为11111b。第33次压栈会覆盖第32次压栈的值(如此反复),而STKPTR保持为11111b。
当栈弹出次数足够清空栈时,下一次出栈会向PC返回一个零值,并将STKUNF位置位,而STKPTR则保持为00000b。再下一次出栈会再次返回零值(如此反复),而STKPTR保持为00000b。注意,下溢时向PC返回一个零值具有以下效果将程序引导向可验证栈状态的复位向量,且可采取适当行动。
可通过STKPTR寄存器访问栈指针。用户可以读写栈指针的值。实时操作系统(RTOS)可以利用这一点来维护返回栈。图18展示STKPTR寄存器。栈指针的值将会是0到31。复位时,栈指针值为0。入栈时栈指针递增,出栈时栈指针递减。
栈溢出/下溢复位 根据用户的选择,溢出和下溢可引起器件复位,来中断程序代码的执行。复位由配置位STVRE使能。当禁止了STVRE位时,溢出或下溢会将适当的STKOVF或STKUNF位置位,但不会引起复位。当使能了STVRE位时,溢出或下溢会将适当的STKOVF或STKUNF位置位,然后使器件复位,这与WDT复位性质很相似。两种情况都只能通过用户软件或POR复位将STKOVF位和STKUNF位清零。图18-21说明栈寄存器。图22-29说栈操作。
程序存储器 本发明的优选实施例具有多达2兆字节(2M)×8的用户程序存储空间。程序存储空间主要含有用于执行的指令,然而,可使用表读和写指令存储和访问数据表。另一2M×8的测试程序存储空间可用于测试ROM、配置位和识别字。
器件具有能够寻址2M×8的程序存储空间的21位程序计数器。还存在在正常操作期间隐藏的第22个PC位,且当所述位被置位时,有可能访问配置位、器件ID和测试ROM。可在测试模式或编程模式中将这个位置位,且必须复位器件来清零所述位。不可在这个位被置位的情况下访问用户程序存储空间。由于PC必须在程序存储器的偶字节边界访问指令,PC的LSb被强制清零,并且每访问一条指令PC值加2。
复位向量地址为000000h,高优先级中断向量地址为000008h,而低优先级中断向量地址为000018h(见图30)。
程序存储器组织 程序存储器中的每一位置具有字节地址。另外,每2个相邻的字节具有一个字地址。图31展示在所展示的字节和字地址情况下程序存储器的映射。在程序存储器内,指令必须是字对齐的。图32展示在若干实例指令和那些指令的十六进制码(置入映射中)的情况下程序存储器的映射。表操作将与字节实体协作。不需要表块字对齐,因此,表块可在任何字节地址处开始和结束。例外情况是表块用于对内部程序存储器或外部字宽闪存编程。当编程时,写入数据需要与编程方法所使用的字宽对齐。
程序存储器模式 本发明可在5个可能的程序存储器配置中的任一者操作。由配置位选择配置。可能的模式是 MP-微处理器 EMC-扩展微控制器 PEMC-受保护扩展微控制器 MC-微控制器 PMC-受保护微控制器 微控制器和受保护微控制器模式仅允许内部执行。超出程序存储器外的任何访问读到全0。受保护的微控制器模式也使能码保护特征。微控制器是未编程器件的默认模式。
扩展微控制器模式访问内部程序存储器以及外部程序存储器。执行在内部和外部存储器之间自动切换。21位地址允许2M字节的程序存储器范围。受保护的扩展微控制器模式将通过防止对内部存储器的表读/写入操作同时仍允许对外部程序存储器的执行和表读/写入操作,来代码保护内部程序存储器。
微处理器模式仅访问内部程序存储器。忽略片内程序存储器。21位的地址允许2M字节的程序存储器范围。
通过使用TBLRD指令可在器件的正常操作期间读测试存储器位和配置位。如果RCON寄存器中的LWRT位被置位或器件处于测试和编程模式中,那么仅可使用TBLWT指令来修改这些区域。
仅可在测试和编程模式中执行这些区域。
扩展微控制器模式和微处理器模式仅可在具有定义为I/O引脚的一部分的外部存储器总线的器件上可用。表2列出了哪些模式可访问内部和外部存储器。图33说明不同编程模式中的器件存储器映射。
表2器件模式存储器访问 外部程序存储器接口 当选择微处理器或扩展微控制器模式时,可将多达4个端口配置为系统总线。两个端口和第三个端口中的一部分是多工地址/数据总线,且另一个端口的一部分用于控制信号。需要外部组件来解多工地址和数据。外部存储器接口可通过8位数据模式或16位数据模式运行。外部存储器接口上的地址总是字节地址。
图36和图37分别描述用于16位和8位数据的外部存储器连接。外部程序存储器总线共享引脚上的I/O端口功能。图38列出I/O引脚功能上的外部总线功能的典型映射。在扩展微控制器模式中,当器件在内部存储器外执行时,控制信号将不会激活。所述信号将达到这样的状态AD<15:0>和A<19:0>为三态,OE、WRH、WRL、UB和LB信号为“1”,UBA0和ALE为“0”。
16位外部接口 如果外部接口是16位,那么将按照16位字取指。OE输出使能信号将一次使能程序存储器的两个字节,以输出16位字。地址BA0的最低有效位不需要连接到存储器器件。
尽管存储器将在外部读16位字,但外部表读操作逻辑上一次执行一个字节。地址的最低有效位将在内部在高字节和低字节之间选择(LSb=0时选择低字节,LSb=1时选择高字节)。微处理器和扩展微控制器模式中的外部地址是21位宽,这允许多达2M字节的寻址。
16位总线上的外部表写操作逻辑上一次执行一个字节。实际的写操作将取决于所连接的外部器件的类型和MEMCON寄存器中的WM<1:0>位,如图34所示。表操作部分细化了实际的写周期。
8位外部接口 如果外部接口是8位,那么将按照2个8位字节取指。在一个指令周期内取两个字节。地址的最低有效位必须连接到存储器器件。OE输出使能信号和BA0=1将使能指令的最高有效字节,以在周期的Q3部分在程序存储器中进行读操作,然后BA0将改变成0,且将在周期的Q4部分读最低有效字节,以形成16位指令字。
外部表读操作也一次执行一个字节。外部表写操作一次执行一个字节。WRL在每一外部写操作中激活。
当选择8位接口时,不使用WRH、UB和UL线,且引脚回复I/O端口功能。配置位选择外部接口的8位模式。
外部等待周期 外部存储器接口支持“等待周期”。外部存储器等待周期仅应用于外部总线上的表读操作和表写操作。因为器件执行依赖于取指,所以执行比取指速率快毫无意义。因此,如果需要使程序取指变慢,那么必须利用不同的TCY时间使处理器速度变慢。
MEMCON寄存器中的WAIT<1:0>位将在每个存储器取指周期中选择0、1、2或3个额外的TCY周期。等待周期将对于16位接口上的表读操作和写操作有效。在8位接口上,对于表读操作和写操作而言,等待将只在Q4上发生。
上电时的等待的默认设置主张最多3个TCY周期的等待。这可确保慢速存储器复位之后立即在微处理器模式下工作。配置位(称为WAIT)将使能或禁止等待状态。在展示在无等待情况下的程序存储器取指和等待状态下的表读操作两种情况下,图39说明16位接口,且图40说明8位接口。
外部总线信号禁止 为了允许利用接合到外部总线的引脚的灵活性,在配置位中提供若干禁止。又,为了禁止整个外部总线,在扩展微控制器模式中允许DMA功能(MEM-CON寄存器中的EBDIS位(在图35中展示))的情况下,可完成在配置位中提供若干禁止。这个禁止将允许用户使整个外部总线接口具有三态特性。这将允许DMA操作以及程序控制通过I/O引脚功能对外部器件直接进行控制。
在仿真器系统中,-ME器件必须使输入表示总线禁止配置位允许I/O端口功能,以检测引脚作为外部接口的状态。-ME器件还具有特殊输入引脚,其指示仿真器系统是处于微处理器模式还是处于扩展微控制器模式中。
数据存储器 在本发明中,数据存储器和通用RAM的大小可扩展到4096个字节。数据存储器地址为12位宽。数据存储器分割成16个具有256个字节的存储区,其含有通用寄存器(GPR)和特殊功能寄存器(SFR)。
GPR被机械化成一字节宽的RAM阵列,其具有组合GPR寄存器的大小。SFR一般分布在外围设备中,SFR控制所述外围设备的功能。
存储区选择寄存器(BSR<3:0>)选择存储区。BSR存储器可访问16个以上的存储区,然而,直接长寻址模式限于12位地址或16个存储区。BSR相应地受限。
器件指令可在一个指令周期中对特定位置进行读、修改和写操作。每个周期仅存在一个地址产生,因此不可能在单个周期中在一个位置中进行读操作,而在另一位置中进行修改/写操作。图42展示实例数据存储器映射。
通用寄存器 在所有的PIC器件中,所有的数据RAM可用作所有指令的寄存器。数据存储器的大多数存储区仅含有GPR存储器。所有器件上必须存在包括在存储区0中的GPR存储器。
存储区0中的GPR数的绝对最小值为128。这个GPR区域(称为访问RAM)对于允许程序设计者可具有不管BSR的设置如何都可访问的数据结构而言至关重要。
特殊功能寄存器 SFR是特殊寄存器,一般用于器件和外围设备控制和状态功能。所有指令均可访问它们。可能的话,所有的SFR应包含在存储区15的较高的128个字节中。如果SFR不使用特定器件上的所有可用位置,那么未使用的位置将不生效,且作为“0”。某些器件(如LCD控制器)可在不同于存储区15的其它存储区中具有SFR区域。
不同器件的存储区15中的SFR的边界可变化。至少16个GPR必须包括在访问存储区中。图43显示可能的特殊功能寄存器映射。图44和45显示核心特殊功能寄存器一览表。
寻址模式 本发明支持7个数据寻址模式 固有寻址 字面值寻址 直接短寻址 直接强制寻址 直接长寻址 间接寻址 索引间接偏移寻址 这些模式中的三个模式,直接强制寻址、直接长寻址和间接索引寻址,是PIC架构中的新的寻址模式。
固有寻址 如DAW之类的一些指令除了明确定义在操作码中的寻址之外不需要寻址。
字面值寻址 字面值指令含有字面值常量字段,一般用于如ADDLW之类的数学运算中。字面值寻址也用于GOTO、CALL和转移操作码。
直接短寻址 大多数数学和移动指令用直接短寻址模式操作。在这个寻址模式中,指令含有数据的最低有效地址的8位。地址的剩余的4位来自存储区选择寄存器或BSR。BSR用于在数据存储器区域中的存储区之间切换(见图47)。
对大的通用存储空间的需要指示通用RAM分区方案。BSR的低4位字节选择当前激活的通用RAM存储区。为了辅助这个操作,已在指令集中提供了MOVLB存储区指令。
如果当前选择的存储区未生效(如存储区13),那么任何读操作将读到全“0”。对位桶完成任何写操作,且STATUS寄存器位将视需要被置位/清零。
直接强制寻址 所有的特殊功能寄存器(SFR)映射到数据存储空间。为了允许易于访问SFR,SFR一般全部映射到存储区15中。为了简化访问,指令中存在1位字段,其不管BSR的内容如何,都将地址指向用于共同RAM的存储区0的下半部分和用于SFR的存储区15的上半部分。在BSR设置成BSR=n时,有可能利用任何指令寻址3个存储区,直接强制寻址模式中的存储区0和存储区15以及直接短寻址模式中的存储区“n”。
直接长寻址 直接长寻址将数据地址的所有12位编码到指令中。只有MOVFF指令使用这个模式。
间接寻址 间接寻址是指令中的数据存储器地址由另一寄存器决定的寻址数据存储器的模式。
这个寻址模式可用于数据存储器中的数据表或栈。图53展示间接寻址的操作。FSR寄存器的值用作数据存储器地址。
间接寻址寄存器 本发明具有用于间接寻址的3个12位寄存器。这些寄存器是 FSR0H和FSR0L FSR1H和FSR1L FSR2H和FSR2L FSR是12位寄存器,且允许在4096字节的数据存储器地址范围中的任何地方寻址。
另外,存在不实体实施的寄存器INDF0、INDF1和INDF2。对这些寄存器的读或写操作启动寻址,其中对应FSR寄存器中的值是数据的地址。如果间接通过FSR对文件INDF0(或INDF1、2)本身进行读操作,那么读到全“0”(零位被置位)。同样,如果间接对INDF0(或INDF1、2)进行写操作,那么操作将等同于NOP,且不影响STATUS位。
间接寻址操作 每一INDF寄存器具有与之相关的4个地址。当对4个INDF位置中的一个位置进行数据访问时,所选的地址将把FSR寄存器配置成 ●间接访问后将FSR中的值(地址)自动递减(后递减) ●间接访问后将FSR中的值(地址)自动递增(后递增) ●间接访问前将FSR中的值(地址)自动递增(预递增) ●间接访问后不改变FSR中的值(地址)(不改变) 当使用自动递增或自动递减特征时,FSR上的效果并不在STATUS寄存器中反映出来。举例而言,如果间接地址导致FSR等于“0”,那么Z位将被置位。添加这些特征允许FSR除了用于数据表操作外,还用作栈指针。
索引间接寻址 每一INDF具有一个与其相关的执行索引间接访问的地址。当对这个INDF位置的数据访问发生时,FSR配置成 ●在间接访问前加上W寄存器中的有符号值和FSR中的值以形成地址。
●FSR值不改变。
间接寻址(INDF)寄存器的间接写操作 如果FSR寄存器含有指向间接寄存器中的一个寄存器的值(FEFh-FEBh、FE7h-FE3h、FDFh-FDBh),那么间接读操作将读到00h(零位被置位),而间接写操作将等同于NOP(STATUS位不受影响)。
指针(FSR)寄存器的间接写操作 如果间接寻址操作是在目标地址是FSRnH或FSRnL寄存器的情况下完成,那么写操作将支配预递增/递减功能或后递增/递减功能。举例而言 FSR0=FE8h(小于FSR0L的位置的一者) W=50h MOVWF*(++FSR0);(PREINC0) 将使FSR0递增成为FE9h,其指向FSR0L。然后,W到FSR0L中的写操作将把FSR0L改变成50h。然而, FSR0=FE9h(FSR0L的位置) W=50h MOVWF*FSR0++;(POSTINC0) 将在FSR0的递增将发生时尝试将W写到FSR0L中。W的写入将比后递增占优势,且FSR0L将为50h。
指令集概要 本发明的指令集由77条指令组成。由于在现有架构中存在过度的页和存储区的切换,所以程序和数据存储器映射需要线性化,且本指令集经修改以便利这个线性化。本发明的优选实施例的数据存储空间最大为4K字节,其由16个存储区组成,且每一存储区具有256个字节。在本发明的优选实施例中,所有特殊功能寄存器位于一个存储区中,优选指示执行文件处理的所有指令的操作码中的位,其可实行虚拟存储区。因此,不必切换存储区来访问特殊功能寄存器。
在优选实施例中,程序存储空间在现有系统上经修改以最大具有2M字节。PC从13位增加到多达21位,且将引起跳转(CALL、GOTO)的一些指令改变成两字指令,以装载用于PC的21位值。对现有技术的另一改良是模块化仿真器的包括。这需要在用于仿真的两个芯片之间通信,且为了达成所要的速度,不可能在同一指令周期内具有不同的源和目标寄存器。因此,消除了现有技术中的MOVPF和MOVFP指令。为了保持这个功能,添加了两字指令MOVFF。
本发明的指令集可分组成三种类型 ●面向字节的指令集 ●面向位的指令集 ●字面值和控制操作的指令集 这些格式在图56中展示。图54展示操作码的字段描述。这些描述用于理解图57-59中和附录A中的每一特殊指令描述中的操作码。图114展示指令译码映射。
对于面向字节的指令而言,“f”表示文件寄存器指示符,且“d”表示目标指示符。文件寄存器指示符指定哪一文件寄存器将由指令使用。目标指示器指定将操作结果放在哪里。如果“d”=“0”,那么将结果置于W寄存器中。如果“d”=“1”,那么将结果置于由指令指定的文件寄存器中。
又,对于面向字节的指令而言,“a”表示虚拟存储区选择位。如果“a”=“0”,那么覆盖BSR,且选择虚拟存储区。如果“a”=“1”,那么不覆盖存储区选择寄存器(BSR)。
位于面向位的指令,“b”表示位字段指示符,其选择由操作影响的位数,而“f”表示所述位所处的文件的地址。
对于字面值和控制操作而言,“k”表示8、12、16或20位常量或字面值值。此外,“s”表示快速调用/返回选择位。如果“s”=“0”,那么不使用影像寄存器(shadow register)。如果“s”=“1”,那么在RETURN或RETFIE指令时根据影像寄存器更新W、BSR和STATUS寄存器,或者在CALL指令时根据对应寄存器装载影像寄存器。最后,“n”是二进制补码数,其确定用于相对转移指令的跳转的方向和数值。
指令集高度正交,且分组成 ●面向字节的操作 ●面向位的操作 ●字面值和控制操作 所有的指令都在一个单个指令周期内执行,除非 ●状态测试为真 ●程序计数器改变成指令的结果 ●执行文件到文件的转移 ●执行表读指令或表写指令 在那种情况下,执行花费两个指令周期,且第二个周期执行为NOP。
特殊功能寄存器作为源/目的地 本发明的正交指令集允许所有文件寄存器(包括特殊功能寄存器)的读和写操作。用户应注意一些特殊情况 STATUS寄存器作为目的地 如果将指令写到STATUS寄存器中,可将Z、C、DC、OV和N位置位或清零以作为指令的结果,且重写已写的原始数据位。
PCL作为源或目的地 对PCL的读、写或读-修改-写操作可具有下列结果 ●对于对PCL的读操作而言,首先PCU到PCLATU,然后PCH到PCLATH,且然后PCL到dest。
●对于对PCL的写操作而言,首先PCLATU到PCU,然后PCLATH到PCH,且然后8位结果值到PCL。
●对于读-修改-写操作而言,首先PCL到ALU操作数,然后PCLATH到PCH,然后PCLATU到PCU,且然后8位结果值到PCL。
其中 PCL=程序计数器低字节 PCH=程序计数器高字节 PCLATH=程序计数器高保持锁存器 PCU=程序计数器更高字节 PCLATU=程序计数器更高保持锁存器 dest=目标、W或f。
位处理 通过首先读整个寄存器、对所选位进行操作且将结果写回(读-修改-写(R-M-W)),来完成所有的位处理指令。当在一些特殊功能寄存器(如端口)上操作时用户应紧记这点。请注意,由器件处理的状态位(包括中断旗标位)在Q1周期中被置位或清零。因此,在含有这些位的寄存器上执行R-M-W指令时不存在争端。
图60-113含有用于本发明的指令集内的每一指令的一般操作的流程图。各图展示用于本发明的指令集内的指令的取指和执行的通用步骤和特殊步骤。举例而言,图60展示面向字节的文件寄存器操作的取指步骤,所述操作包括指令ADDWF、ADDWFC、ANDWF、COMF、DECF、INCF、IORWF、MOVF、RLCF、RLNCF、RRCF、RRNCF、SUBFWB、SUBWF、SUBWFB、SWAPF、XORWF、MOVWF和NOP。类似地,图61展示用于面向字节的文件寄存器操作的执行步骤,所述操作包括指令ADDWF、ADDWFC、ANDWF、COMF、DECF、INCF、IORWF、MOVF、RLCF、RLNCF、RRCF、RRNCF、SUBFWB、SUBWF、SUBWFB、SWAPF和XORWF(但MOVWF仅执行假读,且NOP执行假读和假写)。
图77展示字面值操作的取指步骤,所述操作包括指令ADDLW、ANDLW、IORLW、MOVLW、SUBLW和XORLW。如前所述,图78展示字面值操作的执行步骤,所述操作包括指令ADDLW、ANDLW、IORLW、MOVLW、SUBLW和XORLW。
图90展示用于转移操作的取指的流程图,所述操作包括指令BC、BN、BNC、BNN、BNV、BNZ、BV和BZ。类似地,图90展示用于转移操作的执行的流程图,所述操作包括指令BC、BN、BNC、BNN、BNV、BNZ、BV和BZ。其余的图展示指令集内的其它指令的取指和执行步骤。
对于那些需要两次取指来获得完整指令的多字指令而言,三个流程图用于描述整个取指和执行过程。举例而言,图70-72描述MOVFF指令。图70展示相对标准的取指操作。然而,图71在操作框的左边展示MOVFF的第一部分的执行,而操作框的右边部分展示指令的第二个字的取指。因此,图72仅展示MOVFF指令的第二个字的执行步骤。为其它多字指令提供了类似的流程图LFSR(图79-81),GOTO(图102-104),CALL(图105-107),TBLRD*、TBLRD*+、TBLRD*-和TBLRD+*(图108-110),TBLWT*、TBLWT*+、TBLWT*-和TBLWT+*(图111-113)。
附录A含有本发明的指令集的操作码和指令的详细列表。附录A中的材料为了全部目的以引用的方式并入本文。
利用字面值偏移的索引寻址 图115说明另一寻址模式,具体地说是利用字面值偏移的索引寻址模式。在一个实施例中,通过将称为索引位(index bit)的上下文位编程为“1”来使能利用字面值偏移的索引寻址模式。索引位将可能实施为熔丝,但是也可利用软件或任何旗标/开关使能技术实施。当索引位经编程以使能索引位时,利用字面值偏移的索引寻址模式将取决于地址且将取决于指令字中的访问位的值。这个模式将仅应用于使用直接强制寻址的指令。
如果访问位被设置成“1”,那么不改变在现有架构中确定地址的方式,且寻址模式默认为直接短寻址。如果访问位的值为“0”,那么就对包含在指令字中的地址进行译码,且将其与值5Fh相比较。如果地址大于5Fh,那么将寻址模式译码成直接强制寻址。如果访问位是零,且指令字中的地址小于或等于05Fh,那么寻址模式是利用字面值偏移的索引寻址。当发生利用字面值偏移的索引寻址时,指令字中的地址默认为加入FSR2的内容的字面值值。然后,结果值用作在其上操作的地址。
图116展示当使能利用字面值偏移的索引寻址时如何分割访问存储区。位置00h到5Fh可映射到存储器中的任何位置。访问存储区的这部分的开始地址映射到包含在FSR2H:FSR2L寄存器中的地址。
对FSR2的修改 为了支持利用字面值偏移的索引模式,指令寄存器的较低7位包括为4个可能的值之一,以加入FSR2的内容。认为包含在IR中的数据是无符号整数,且结果不存储在FSR2中。存在4个寻址模式 ●间接寻址(INDF); ●利用递增/递减的间接寻址(FSR2+)、(+FSR2)和(FSR2-); ●利用偏移的间接寻址(FSR2+W,其中W的内容用于偏移);和 ●利用字面值偏移的间接寻址(FSR2+字面值)。
本发明包括一组指令,当调用所述组指令时,在微控制器上执行一个或一个以上的任务。所述指令中的一些在下文中描述。在特殊情况下可由(例如)开关或其它均等方法调用这些指令。
“PUSHL”指令将8位字面值值推入栈。PUSHL指令的精确语法是“PUSHL k”,其中0<=k<=225。这个命令的调用不影响微控制器的状态。PUSHL指令的编码是“11101010kkkk kkkk”。在这里,8位字面值复制到第二文件选择寄存器(“FSR2”)寻址的位置,然后将FSR2递减。
“SUBFSR”指令从文件选择寄存器(“FSR”)中减去5位字面值。这个命令的语法是“SUBFSR f,k”,其中0<=f<=2且0<=k<=63。这个命令的调用不影响微控制器的状态。这个命令的编码是“11101001 ffkk kkkk”,当调用这个命令时,从FSRf中减去6位(无符号)字面值,且将结果存储回FSRf中,其中指令的“ff”部分指示特定文件选择寄存器,且指令的“kk kkkk”部分指示字面值。
“SUBULNK”指令从第二文件选择寄存器(“FSR2”)中减去5位字面值,且返回结果值。这个命令的语法是“SUBULNK k”,其中0<=k<=63。这个命令的调用不影响微控制器的状态。这个命令的编码是“1110 1001 11kk kkkk”,当调用这个命令时,从FSR2中减去6位(无符号)字面值,将结果存储回FSR2中,且将结果和执行返回调用者。
“ADDFSR”指令将5位字面值加到FSR。这个指令的语法是“ADDFSR f,k”,其中0<=f<=2且0<=k<=63。这个指令不影响微控制器的状态。这个指令的编码是“11101000 ffkk kkkk”,一旦调用这个指令,便将6位(无符号)字面值加入FSRf中,且将结果值存储回FSRf中,其中指令的“ff”部分指示特定文件选择寄存器,且指令的“kk kkkk”部分指示字面值。
“ADDULNK”指令将5位字面值加到FSR2且将结果和执行返回调用程序。这个指令的语法是“ADDULNK k”,其中0<=k<=63。这个指令的调用不影响微控制器的状态。这个指令的编码是“1110 1000 11kk kkkk”,一旦调用这个指令,便将6位(无符号)字面值(由指令的“kk kkkk”部分指示)加入FSR2中,且将结果存储回FSR2中,且将执行返回调用者。
“MOVSF”指令将栈位置存储到通用寄存器(“GPR”)。这个指令的语法是“MOVSFs,d”,其中0<=.s<=127且0<=d<=4095。这个指令的调用不影响微控制器的状态。这个指令的编码是两个字,其中字1是“1110 1011 0sss ssss”,字2是“1111 dddd dddddddd”,其中指令的第一个字的“sss ssss”部分指示源,且第二个字的“dddd dddd dddd”部分指示目标。一旦调用这个指令,便将7位字面值值s加入FSR2中的值,从而产生8位值源地址,随后将这个值复制到由12位值d所指示的位置。FSR2值不受MOVSF指令的影响,且微控制器的状态也不受影响。
“MOVSS”指令将一个栈位置复制到另一栈位置。这个指令的语法是“MOVSS s,d”,其中0<=.s<=127且0<=d<=127。这个指令的调用不影响微控制器的状态。这个指令的编码是两个字,其中字1是“1110 1011 1sss ssss”,字2是“1111 xxxx xddd dddd”,其中指令的第一个字的“sss ssss”部分指示源,且第二个字的“ddd dddd”部分指示目标。一旦调用这个指令,将7位字面值值s加入FSR2中的值,从而产生8位值源地址,随后将这个值复制到由一地址所指示的位置,所述地址是通过将7位值d加入FSR2中的值来确定的。FSR2值不受MOVSS指令的影响,且微控制器的状态也不受影响。
“CALLW”指令是间接调用。这个指令的语法是“CALLW”。这个指令的调用不影响微控制器的状态。这个命令的编码是“0000 0000 0001 0100”,一旦调用这个指令,便将下一指令的地址压入硬件栈。具体地说,将第一寄存器(如PCLATU:PCLATH)的值复制到程序计数器(“PC”)的高16位,且将第二寄存器(如w寄存器(“WREG”))中的值复制到PC的低8位中。
因此,本发明非常适于实现这些目标并获得所提到的结果和优势,以及其中所固有的其它优势。尽管已参考本发明的特定优选实施例描绘、描述并定义了本发明,但是所述参考并不暗示对本发明的限制,且不可推断出所述限制。本发明能够有形式和功能上的大量修改、改变和均等物,其可由所属领域的普通技术人员想到。本发明的已描绘和描述的优选实施例仅为示范性的,且并不是本发明的详尽范畴。因此,希望仅由附加的权利要求书的精神和范畴限制本发明,从而可从各个方面全面认识均等物。
实例ADDLW 0x15 执行指令前 W=0x10 执行指令后 W=0x25 说明将W加入寄存器“f”。如果“d”为0,那么将结果存储在W中。如果“d”为1,那么将结果存储回寄存器“f”中(默认的)。如果“a”为0,那么将选择虚拟存储区。如果“a”为1,那么将不覆盖BSR(默认的)。
字1 周期1 Q周期活动 实例ADDWFC REG,0,1 执行指令前 进位=1 REG=0x02 W=0x4D 执行指令后 进位=0 REG=0x02 W=0x50 实例ANDLW0x5F 执行指令前 W=0xA3 执行指令后 W=0x03 实例ANDWF REG, 0,0 执行指令前 W=0x17 REG =0xC2 执行指令后 W=0x02 REG =0xC2 实例HEREBC 5 执行指令前 PC =(HERE)的地址 执行指令后 如果进位=1,那么 PC =(HERE+12)的地址 如果进位=0,那么 PC=(HERE+2)的地址 Q周期活动 实例BCF FLAG_REG,7,0 执行指令前 FLAG_REG=0xC7 执行指令后 FLAG_REG=0x47 Q周期活动 如果跳转,那么 如果不跳转,那么 实例HERE BN Jump 执行指令前 PC=(HERE)的地址 执行指令后 如果负数位=1,那么 PC=(Jump)的地址 如果负数位=0,那么 PC=(HEHE+2)的地址 Q周期活动 如果跳转,那么 如果不跳转,那么 实例HERE BNC JUMP 执行指令前 PC =(HERE)的地址 执行指令后 如果进位=0,那么 PC =(Jump)的地址 如果进位=1,那么 PC =(HERE+2)的地址 Q周期活动如 果跳转,那么 如果不跳转,那么 实例HERE BNNJump 执行指令前 PC=(HERE)的地址 执行指令后 如果负数位=0,那么 PC=(Jump)的地址 如果负数位=1,那么 PC=(HERE+2)的地址 如果不跳转,那么 实例HERE BNV JUMP 执行指令前 PC=(HERE)的地址 执行指令后 如果溢出位=0,那么 PC=(JUMP)的地址 如果溢出位=1,那么 PC=(HERE+2)的地址 如果不跳转,那么 实例HERE BNZ JUMP 执行指令前 PC=(HERE)的地址 执行指令后 如果零位=0,那么 PC=(JUMP)的地址 如果零位=1,那么 PC=(HERE+2)的地址 实例HERE BRA JumD 执行指令前 PC=(HERE)的地址 执行指令后 PC=(Jump)的地址 实例BSF FLAG_REG,7,1 执行指令前 FLAG_REG=0x0A 执行指令后 FLAG_REG=0x8A BTFSC位测试文件,如果被清零那么跳跃 字 1 周期1(2) 注意如果跳跃且其后跟随两字指令,那么为3个周期。
如果跳跃,那么 如果跳跃且其后跟随2字指令,那么 实例HERE BTFSC FLAG,1,0 FALSE TRUE 执行指令前 PC=(HERE)的地址 执行指令后 如果FLAG<1>=0,那么 PC =(TRUE)的地址 如果FLAG<1>=1,那么 PC =(FALSE)的地址 BTFSS位测试文件,如果被置位那么跳跃 注意如果跳跃且其后跟随两字指令,那么为3个周期。
Q周期活动 如果跳跃,那么 如果跳跃且其后跟随2字指令,那么 实例HERE BTFSS FLAG,1,0 FALSE TRUE 执行指令前 PC=(HERE)的地址 执行指令后 如果FLAG<1>=0,那么 PC =(FALSE)的地址 如果FLAG<1>=1,那么 PC =(TRUE)的地址 实例BTG PORTC,4,0 执行指令前 PORTC=0111 0101
执行指令后 PORTC=01100101
如果不跳转,那么 实例HERE BV JumD 执行指令前 PC=(HERE)的地址 执行指令后 如果溢出位=1,那么 PC=(Jump)的地址 如果溢出位=0,那么 如果不跳转,那么 实型HERE BZ Jump 执行指令前 PC =(HERE)的地址 执行指令后 如果零位=1,那么 PC =(Jump)的地址 如果零位=0,那么 PC =(HERE+2)的地址 实例HERE CALLTHERE,Fast 执行指令前 PC=HERE)的地址 执行指令后 PC=(THERE)的地址 TOS =(HERE+4)的地址 WS=W BSRS =BSR STATU SS =STATUS 实例CLRF FLAG_REG,1 执行指令前 FLAG_REG=0x5A 执行指令后 FLAG_REG=0x00 实例CLRWDT 执行指令前 WDT计数器 =? 执行指令后 WDT计数器 =0x00 WDT后分频器=0 TO =1 PD =1 实例COMF RFG,0,0 执行指令前 REG=0x13 执行指令后 REG=0x13 W =0xEC 如果跳跃,那么 如果跳跃且其后跟随两字指令,那么 实例HERECPFSEQ REG,0 NEQUAL EQUAL 执行指令前 PC地址 =HERE W=? REG =? 执行指令后 如果REG =W,那么 PC =(EQUAL)的地址; 如果REG ≠W,那么 PC =(NEQUAL)的地址。
如果跳跃,那么 如果跳跃且其后跟随两字指令,那么 实例HERE CPFSGT REG,0 NGREATER GREATER 执行指令前 PC=(HERE)的地址 W =? 执行指令后 如果REG >W,那么 PC =(GREATER)的地址; 如果REG ≤W,那么 PC =(NGREATER)的地址。
如果跳跃,那么 如果跳跃且其后跟随2字指令,那么 实例HERE CPFSLT REG,1 NLEESS LESS 执行指令前 PC=(HERE)的地址 W =? 执行指令后 如果REG <W,那么 PC =(LESS)的地址; 如果REG ≥W; PC =(NLESS)的地址 实例1DAW 执行指令前 W=0xA5 c=0 DC =0 执行指令后 W=0x05 c=1 DC =0 实例2 执行指令前 W=0xCE c=0 DC =0 执行指令后 W=0x34 c=1 DC =0 实例DECF CNT,1,0 执行指令前 CNT =0x01 Z=0 执行指令后 CNT =0x00 Z=1 如果跳跃,那么 如果跳跃且其后跟随2字指令,那么 实例HERE DECFSZ CNT,1,1 GOTO LOOP CONTINUE 执行指令前 PC=(HERE)的地址 执行指令后 CNT=CNT-1 如果CNT=0,那么 PC =(CONTINUE)的地址; 如果CNT≠0; PC =(HERE+2)的地址 如果跳跃,那么 如果跳跃且其后跟随2字指令,那么 实例HERE DCFSNZ TEMP,1,0 ZERO NZERO 执行指令前 TEMP =? 执行指令后 TEMP =TEMP-1, 如果TEMP=0; PC=(ZERO)的地址 如果TEMP≠0; PC=(NZERO)的地址 实例GOTO THERE 执行指令后 PC =(THERE)的地址 实例INCFCNT,1,0 执行指令前 CNT =0xFF Z=0 C=? DC =? 执行指令后 CNT =0x00 Z=1 C=1 DC =1 如果跳跃,那么 如果跳跃且其后跟随2字指令,那么 实例HERE INCFSZ CNT, 1,0 NZERO ZERO 执行指令前 PC =(HERE)的地址 执行指令后 CNT =CNT+1 如果CNT =0,那么 PC =(zero)的地址; 如果CNT ≠0,那么 PC =(NZERO)的地址。
如果跳跃,那么 如果跳跃且其后跟随2字指令,那么 实例HERE IHFSNZ REG,1,0 ZERO NZERO 执行指令前 PC=(HERE)的地址 执行指令后 REG =REG+1 如果REG ≠0,那么 PC =(NZERO)的地址; 如果REG =0,那么 PC =(ZERO)的地址。
实例 IORLW0x35 执行指令前 W=0x9A 执行指令后 W=0xBF 实例IORWF RESULT,0,1 执行指令前 RESULT=0x13 W =0x91 执行指令后 RESULT=0x13 W =0x93 实例MOVFREG,0,0 执行指令前 REG=0x22 W =0xFF 执行指令后 REG=0x22 W =0x22 实例MOVFF REG1,REG2 执行指令前 REG1=0x33 REG2=0x11 执行指令后 REG1=0x33 REG2=0x33 实例MOVLB 5 执行指令前 BSR寄存器=0x02 执行指令后 BSR寄存器=0x05 实例LFSR 2,0x3AB 执行指令后 FSR2H=0x03 FSR2L=0xAB 实例MOVLW 0x5A 执行指令后 W=0x5A 实例MOVWFREG,0 执行指令前 w =0x4F REG=0xFF 执行指令后 w =0x4F REG=0x4F 实例MULLW0xC 执行指令前 W=0xE2 PRODH=? PRODL=? 执行指令后 W=0xE2 PRODH=0xAD PRODL=0x08 实例MOLWFREG,1 执行指令前 W =0xC4 REG=0xB5 PRODH =? PRODL =? 执行指令后 W =0xC4 REG=0xB5 PRODH =0x8A PRODL =0x94 实例NEGF REG,1 执行指令前 REG=0011 1010
执行指令后 REG=1100 0110
实例 无. 实例POP GOTONEW 执行指令前 TOS=0031A2h Stack(向下的1级)=014332h 执行指令后 TOS=014332h PC=NEW 实例PUSH 执行指令前 TOS =00345Ah PC =000124h 执行指令后 PC =000126h TOS =000126h Stack(向下的1级)=00345Ah 实例HERERCALL Jump 执行指令前 PC =(HERE)的地址 执行指令后 PC =(Jump)的地址 TOS=(HERE+2)的地址 实例RESET 执行指令后 寄存器=复位值 旗标* =复位值 实例RETFIEFast 中断后 PC =TOS W =WS BSR=BSRS STATUS =STATUSS GIE/GIEH,PEIE/GIEL =1
实例RLCF REG ,0,0 执行指令前 REG=11100110 C =0 执行指令后 REG=1110 0110 W =1100 1100 C =1
实例RLNCFREG,1,0 执行指令前 REG=1010 1011 执行指令后 REG=0101 0111
实例RRCF REG,0,0 执行指令前 REG=1110 0110 C =0 执行指令后 REG=1110 0110 W =0111 0011 C =0
实例1RRNCFREG,1,0 执行指令前 REG=1101 0111 执行指令后 REG=1110 1011 实例2RRNCF REG,0,0 执行指令前 W =? REG=1101 0111 执行指令后 W =1110 1011 REG=1101 0111 实例SETFREG,1 执行指令前 REG=0x5A 执行指令后 REG=0xFF 实例SLEEP 执行指令前 TO= PD =? 执行指令后 TO =1 PD =0 如果WDT引起唤醒,那么将对这个位清零 SUBFWB 实例1SUBFWB REG,1,0 执行指令前 REG=3 W =2 C =1 执行指令后 REG=FF W =2 C =0 Z =0 N =1;结果为负数 实例2SUBFWB REG,0,0 执行指令前 REG=2 W =5 C =1 执行指令后 REG=2 W =3 C =1 Z =0 N =0;结果为正 实例3SDBFWBREG,1,0 执行指令前 REG=1 W =2 C =0 执行指令后 REG=0 W =2 C =1 Z =1;结果为0 N =0 实例1SUBLW 0x02 执行指令前 W=1 C=? 执行指令后 W=1 C=1;结果为正 Z=0 N=0 实例2SUBLW 0x02 执行指令前 W=2 C=? 执行指令后 W=0 C=1;结果为0 Z=1 N=0 实例3SUBLW 0x02 执行指令前 W=3 C=?执行指令后 W=FF;(二进制补码) C=0;结果为负 Z=0 N=1 实例1SUBWFREG,1,0 执行指令前 REG=3 W =2 C =? 执行指令后 REG=1 W =2 C =1;结果为正 Z =0 N =0 实例2SUBWFREG,0,0 执行指令前 REG=2 W =2 C =? 执行指令后 REG=2 W =0 C =1;结果为0 Z =1 N =0 实例3SUBWFREG,1,0 执行指令前 REG=1 W =2 C =? 执行指令后 REG=FF;(二进制补码) W =2 C =0;结果为负 Z =0 N =1 SUBWFB 实例1SUBWFBREG,1,0 执行指令前 REG =0x19 (0001 1001) W=0x0D (0000 1101) C=1 执行指令后 REG =0x0C (0000 1011) W=0x0D (0000 1101) C=1 Z=0 N=0;结果为正 实例2SUBWFB REG,0,0 执行指令前 REG =0x1B (0001 1011) W=0x1A (0001 1010) C=0 执行指令后 REG =0x1B (0001 1011) W=0x00 C=1 Z=1;结果为0 N=0 实例3SUBWFBREG,1,0 执行指令前 REG =0x03 (0000 0011) W=0x0E (0000 1101) C=1 执行指令后 REG =0xF5(1111 0100)(二进制补码) W=0x0E (0000 1101) C=0 Z=0 N=1;结果为负 实例SWAPFREG,1,0 执行指令前 REG=0x53 执行指令后 REG=0x35 TBLWT 表写操作 语法 [标号]TBLWT(*;*+;*-;+*) 操作数无 操作如果TBLWT*,那么 (TABLAT)→Prog Mem(TBLPTR); TBLPTR不改变; 如果TBLWT*+,那么 (TABLAT)→Prog Mem(TBLPTR); (TBLPTR)+1→TBLPTR; 如果TBLWT*-,那么 (TABLAT)→Prog Mem(TBLPTR); (TBLPTR)-1→TBLPTR; 如果TBLWT+*,那么 (TBLPTR)+1→TBLPTR; (TABLAT)→Prog Mem(TBLPTR); 受影响的状态无 说明 TBLWT指令有4个选项。这些选项确定表指针(TBLPTR)发生什么不改变、后递增、后递减和预递增。确定当前选项且适当地修改TBLPTR。将表锁存器(TABLAT)的内容写入由TBLPTR指向的程序存储器位置。如果TBLPTR指向外部程序存储器位置,那么在两个周期中执行指令。因为TABLAT只有一个字节宽,所以必须执行两个TBLWT指令的乘法以对内部程序存储器位置编程。举例而言,如果确定装置一次编程一个字,那么按以下方式编程内部存储器位置 1)将TBLPTR设置为偶字节 2)将低字节写入TABLAT 3)执行TBLWT*+(2个周期) 4)将高字节写入TABLAT 5)执行TBLWT*+(长写操作) 当接收到中断时终止对内部EPROM位置的长写操作。后递增TBLWT指令是推荐写入内部存储器的唯一的TBLWT指令。(写入内部EPROM仅可用于有64个或更多引脚的装置)。
字1 TBLWT 表写操作 周期2(如果对片内EPROM程序存储器进行长写操作那么有许多周期) Q周期活动 实例1TBLWT*+; 执行指令前 TABLAT =0x55 TBLPTR =0x00A356 MEMORY0x00A356) =OxFF 执行指令后(表写操作完成) TABLAT =0x55 TBLPTR =0x00A357 MEMORY(0x00A356)=0x55 实例2TBLWT+*; 执行指令前 TABLAT =0x34 TBLPTR =0x01389A MEMORY(0x01389A)=0xFF MEMORY(0x01389B)=0xFF 执行指令后(表写操作完成) TABLAT =0x34 TBLPTR =0x01389B MEMORY(0x01389A)=OxFF MEMORY(0x01389B)=0x34 实例HERE TRAP 执行指令前 PC=(HERE)的地址 执行指令后 PC=000028h TOS =(HERE+2)的地址 INBUG =1 实例TRET 中断后 PC=TOS INBUG =O 字 1 周期1(2) 注意如果跳跃且其后跟随两字指令,那么为3个周期 Q周期活动 如果跳跃,那么 如果跳跃且其后跟随2字指令,那么 实例HERETSTFSZ CNT,1 NZERO ZERO 执行指令前 PC =(HERE)的地址 执行指令后 如果CNT =0x00,那么 PC =(ZERO)的地址; 如果CNT ≠0x00,那么 PC =(NZERO)的地址。
XORLW将字面值与W进行异或运算 实例XORLW 0xAF 执行指令前 W=0xB5 执行指令后 W=0x1A 实例XORWFREG,1,0 执行指令前 REG=0xAF W =0xB5 执行指令后 REG=0x1A W =0xB权利要求
1.一种微控制器,其包含
一中央处理单元;
一数据存储器,其具有一线性化地址空间,且与所述中央处理单元耦接,其被分成n个存储区;
所述中央处理单元包含
一存储区选择单元,其或者访问所述存储区中的一者或者访问一虚拟存储区,由此所述虚拟存储区组合所述数据存储器的两个存储区的部分存储空间,且其中所选的存储区形成一寄存器文件;
一算术逻辑单元,其与所述寄存器文件耦接;
复数个特殊功能寄存器,其映射到所述数据存储器中的所述存储区中的一者,其中所述特殊功能寄存器中的一者是一与所述算术逻辑单元耦接的工作寄存器;
一程序计数器寄存器,其位于所述中央处理单元内,所述程序计数器映射到所述数据存储器中;和
一工作寄存器,其位于所述中央处理单元内,且与所述算术逻辑单元耦接,所述工作寄存器映射到所述数据存储器中;
其中所述微控制器具有一用于控制所述算术逻辑单元的指令集,且其中至少一个指令包含一指示所述存储区选择单元是访问所述存储区中的一者还是访问所述虚拟存储区的位。
2.根据权利要求1所述的微控制器,其中所述指令集包括一具有一编码1110 1010kkkk kkkk的指令,其中一旦调用所述指令,便将一8位字面值复制到由一文件选择寄存器所指向的位置,然后所述文件选择寄存器递减,所述字面值“k”由所述指令的kkkk kkkk部分指示。
3.根据权利要求1所述的微控制器,其中所述指令集包括一具有一编码1110 1001 ffkkkkkk的指令,其中一旦调用所述指令,便从一文件选择寄存器中减去一6位无符号字面值以形成一结果,所述结果被存储到所述文件选择寄存器中,所述字面值由所述指令的kk kkkk部分指示,所述文件选择寄存器由所述指令的ff部分指示。
4.根据权利要求1所述的微控制器,其中所述指令集包括一具有一编码1110 100111kk kkkk的指令,其中一旦调用所述指令,便从一文件选择寄存器中减去一无符号6位字面值以形成一结果,所述结果被存储回所述文件选择寄存器中且被返回,所述字面值由所述指令的kk kkkk部分指示。
5.根据权利要求1所述的微控制器,其中所述指令集包括一具有一编码1110 1000 ffkkkkkk的指令,其中一旦调用所述指令,便将一无符号6位字面值加入一文件选择寄存器,将结果存储到所述文件选择寄存器中,所述字面值由所述指令的kk kkkk部分指示,所述文件选择寄存器由所述指令的ff部分指示。
6.根据权利要求1所述的微控制器,其中所述指令集包括一具有一编码1110 100011kk kkkk的指令,其中一旦调用所述指令,便将一由所述指令的kk kkkk部分指示的6位字面值加入一文件选择寄存器,且将结果存储回所述文件选择寄存器。
7.根据权利要求1所述的微控制器,其中所述指令集包括一具有一编码1110 1011 0sssssss 1111 dddd dddd dddd的指令,其中一旦调用所述指令,便将一8位值复制到一由所述12位值dddd dddd dddd指示的目的地,复制到所述目的地的所述8位值的位置通过将所述7位字面值值sss ssss加入一文件选择寄存器中的值来指示。
8.根据权利要求1所述的微控制器,其中所述指令集包括一具有一编码1110 1011 lsssssss 1111 xxxx xddd dddd的指令,其中一旦调用所述指令,便将一8位值复制到一由所述指令的ddd dddd部分指示的位置,所述8位值的位置通过将所述7位字面值值sss ssss加入一文件选择寄存器中的值来确定。
9.根据权利要求1所述的微控制器,其中所述指令集包括一具有一编码0000 00000001 0100的指令,其中一旦调用所述指令,便将一下一条指令的一地址推入一硬件栈中。
10.根据权利要求1所述的微控制器,其中所述指令集包括一具有一编码0000 00000001 0100的指令,其中一旦调用所述指令,便将一第一寄存器中的值复制到一程序计数器的一高16位中,且将一第二寄存器中的一值复制到所述程序计数器的一低8位中。
11.一种微处理器,其包含
一中央处理单元;
一数据存储器,其与所述中央处理单元耦接且被分成n个存储区,所述中央处理单元包含
一存储区选择单元,其用于选择所述数据存储器中的所述存储区中的一者,其中所述所选择的存储区形成一寄存器文件;
一算术逻辑单元,其与所述寄存器文件耦接;和
复数个特殊功能寄存器,其映射到所述数据存储器中的所述存储区中的一者;
其中所述特殊功能寄存器中的一者是一与所述算术逻辑单元耦接的工作寄存器。
12.根据权利要求11所述的微控制器,其中所述指令集包括一具有一编码1110 1010kkkk kkkk的指令,其中一旦调用所述指令,便将一8位字面值复制到由一文件选择寄存器所指向的位置,然后所述文件选择寄存器递减,所述字面值“k”由所述指令的kkkk kkkk部分所指示。
13.根据权利要求11所述的微控制器,其中所述指令集包括一具有一编码1110 1001ffkk kkkk的指令,其中一旦调用所述指令,便从一文件选择寄存器中减去一6位无符号字面值以形成一结果,所述结果被存储到所述文件选择寄存器中,所述字面值由所述指令的kk kkkk部分所指示,所述文件选择寄存器由所述指令的ff部分所指示。
14.根据权利要求11所述的微控制器,其中所述指令集包括一具有一编码1110 100111kk kkkk的指令,其中一旦调用所述指令,便从一文件选择寄存器中减去一无符号6位字面值以形成一结果,所述结果被存储回所述文件选择寄存器中且被返回,所述字面值由所述指令的kk kkkk部分所指示。
15.根据权利要求11所述的微控制器,其中所述指令集包括一具有一编码1110 1000ffkk kkkk的指令,其中一旦调用所述指令,便将一无符号6位字面值加入一文件选择寄存器,将结果存储到所述文件选择寄存器中,所述字面值由所述指令的kkkkkk部分所指示,所述文件选择寄存器由所述指令的ff部分所指示。
16.根据权利要求11所述的微控制器,其中所述指令集包括一具有一编码1110 100011kk kkkk的指令,其中一旦调用所述指令,便将一由所述指令的kk kkkk部分所指示的6位字面值加入一文件选择寄存器,且将结果存储回所述文件选择寄存器。
17.根据权利要求11所述的微控制器,其中所述指令集包括一具有一编码1110 10110sss ssss 1111 dddd dddd dddd的指令,其中一旦调用所述指令,便将一8位值复制到一由所述12位值dddd dddd dddd指示的目的地,复制到所述目的地的所述8位值的位置通过将所述7位字面值值sss ssss加上一文件选择寄存器中的值来指示。
18.根据权利要求11所述的微控制器,其中所述指令集包括一具有一编码1110 1011lsss ssss 1111 xxxx xddd dddd的指令,其中一旦调用所述指令,便将一8位值复制到一由所述指令的ddd dddd部分指示的位置,所述8位值的位置通过将所述7位字面值值sss ssss加入一文件选择寄存器中的值来确定。
19.根据权利要求11所述的微控制器,其中所述指令集包括一具有一编码0000 00000001 0100的指令,其中一旦调用所述指令,便将一下一条指令的一地址推入一硬件栈中。
20.根据权利要求11所述的微控制器,其中所述指令集包括一具有一编码0000 00000001 0100的指令,其中一旦调用所述指令,便将一第一寄存器中的值复制到一程序计数器的一高16位中,且将一第二寄存器中的一值复制到所述程序计数器的一低8位中。
全文摘要
本发明提供一种微控制器装置,其具备一用于处理微控制器的行为的指令集。本发明提供具有使一模块化仿真成为可能的线性化地址空间的装置和系统。可能通过寄存器文件或数据存储器进行直接或间接寻址。特殊功能寄存器,包括程序计数器(PC)和工作寄存器(W),映射到数据存储器中。一正交(对称)指令集使得可能使用任何寻址模式对任何寄存器进行任何操作。因此,两个文件寄存器可用于一些两个操作数的指令。这允许在两个寄存器之间直接移动数据,而不需要通过所述W寄存器。因此,增强了性能并减少了程序存储器的利用率。
文档编号G06F9/30GK1898641SQ200480038058
公开日2007年1月17日 申请日期2004年10月18日 优先权日2003年10月23日
发明者爱德华·布赖恩·博尔斯, 罗德尼·杰伊·德雷克, 达雷尔·雷·约翰森, 苏密特·K·米特拉, 兰迪·亚奇, 詹姆斯·格罗斯巴赫, 乔舒亚·M·康纳, 约瑟夫·W·特里斯 申请人:密克罗奇普技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1