包含寄存器堆栈的数据处理器的制作方法

文档序号:6460567阅读:166来源:国知局
专利名称:包含寄存器堆栈的数据处理器的制作方法
技术领域
本发明涉及通过与堆栈协作的算术逻辑单元进行数据处理。本发明例如可以应用于包含一个以处理器为形式的、向各种功能单元提供控制数据的控制器的多媒体产品。
算术逻辑单元(ALU)一般对两个输入数据(也称操作数)执行运算,以便获得输出数据。ALU执行的操作一般由以位串为形式的、也称作微代码的指令定义。指令能使ALU执行算术运算,例如加法Z=X+Y,其中X和Y代表输入数据,Z代表输出数据。指令也能使ALU执行逻辑运算,例如AND、OR、NAND或NOR函数。
ALU可以与堆栈协作。堆栈是存储单元的集合体,每个存储单元能容纳数据。将马上要被ALU处理的输入数据暂存在堆栈中。也可以将ALU的输出数据暂存在堆栈中。堆栈指针一般指示构成堆栈顶的存储单元。在堆栈上放置的数据一般被写入堆栈顶,从堆栈移出的数据一般也从堆栈顶读取。以下将向堆栈写入数据和从堆栈读出数据称为压进(pushing)和弹出(popping)。一般来说,ALU的输入数据是通过从堆栈弹出数据而获得的,输出数据是通过向堆栈压进数据而存储的。按这种方式运行的处理器,在公布号为WO95/30954的国际申请中被称作基于堆栈的处理器。
本发明的一个目的是便于降低成本。
按照本发明,数据处理器包含一个用于对第一和第二输入数据执行算术或逻辑运算的算术逻辑单元。它进一步包含一个用于存储数据的堆栈。将一个在堆栈中有某一位置的数据作为第一输入数据应用到算术逻辑单元。数据处理器能执行包含一个指示多个存储单元中的一个存储单元的地址的指令。该地址使在它指示的存储单元中含有的数据被作为第二输入数据施加到算术逻辑单元。
本发明考虑到以下各方面。基于堆栈的处理器执行算术或逻辑运算,一般需要一定数量的步骤。由ALU执行的算术或逻辑运算本身就构成一个步骤。可能需要一个或多个额外的步骤来使所需的输入数据被施加到ALU。这种额外的步骤一般涉及堆栈操作,如一个或多个压进操作或弹出操作或者这两种操作的组合。原则上,每个步骤需要至少一个时钟周期。因此,基于堆栈的处理器执行算术或逻辑运算,一般要占用几个时钟周期。就是说,数据处理将是缓慢的。因此,必须在相对较短的时间间隔内执行一系列算术和逻辑运算的基于堆栈的处理器,必须要用相对较快的元件来实现。这种实现是比较昂贵的。
对上述速度问题的一个解决方案是用基于寄存器的处理器取代基于堆栈的处理器来执行算术和逻辑运算。在基于寄存器的处理器中,将ALU的输入数据存储在一组寄存器中,而不是堆栈装置中。所需的ALU输入数据是从寄存器组检索的,方法是寻址(addressing)两个寄存器-每个寄存器为ALU提供一个输入数据。相应地,基于寄存器的处理器的指令包含两个地址域。每个地址域含有一个指示寄存器组中的一个特定寄存器的值。因此,基于寄存器的处理器向ALU施加所需的输入数据,一般比基于堆栈的处理器需要更少的时钟周期。因此,与基于堆栈的处理器相比,可以用相对较慢的元件来实现基于寄存器的处理器。就此方面而言,基于寄存器的处理器应当允许成本效率比更佳的实现。
然而,为存储一个定义一系列算术和逻辑运算的软件程序所需的存储量可能也在成本上起着重要的作用。当存储软件程序的存储器构成主要不是存储器电路的集成电路的一部分时,尤其如此。一例这样的应用是以包含用于存储所谓嵌入的软件的存储器的集成电路为形式的数字信号处理器。这样的存储器比较昂贵。
就存储器成本而言,基于堆栈的处理器或基于寄存器的处理器哪一种更优越,并不总是立即就清楚的。一方面,使基于堆栈的处理器执行一个算术或逻辑运算比使基于寄存器的处理器执行同一个运算需要更多的指令。所以,就指令数目而言,基于寄存器的处理器比基于堆栈的处理器效率更高。另一方面,基于寄存器的处理器的指令比基于堆栈的处理器的指令长。其原因是基于寄存器的处理器包含两个地址域-如前文所解释的那样,而基于堆栈的处理器不含任何地址域。所以,就指令长度而言,基于堆栈的处理器比基于寄存器的处理器效率更高。基于堆栈的处理器或基于寄存器的处理器哪一种能使实现一定功能的软件程序最紧凑,其中一个因素是取决于该功能本身。按照本发明,处理器包含一个堆栈和若干个功能上相当于寄存器的存储单元。处理器能按以下方式运行。将一个在堆栈中有某一位置的数据作为第一输入数据施加到ALU。将某存储单元(寄存器)中的一个数据作为第二输入数据施加到ALU。提供第二输入数据的存储单元是通过指令中的地址来寻址的。
于是,第二输入数据不必在堆栈上。它也不必在堆栈上有一定位置。因此,按照本发明的处理器比基于堆栈的处理器需要更少的堆栈操作。因此,按照本发明的处理器比基于堆栈的处理器需要更少的指令,就存储器成本而言,这是有益的。此外,按照本发明的处理器执行一个算术或逻辑运算比基于堆栈的处理器需要更少的时钟周期。这进一步有益于成本效率比。
此外,按照本发明的处理器允许只包含一个地址的指令。因此,按照本发明的处理器允许指令比基于寄存器的处理器的更短。从而,有助于减少存储器成本。此外,用于按照本发明的处理器的软件程序比用于基于寄存器的处理器的类似软件程序一般不需要更多的指令。其原因是,一般将一个算术或逻辑运算的结果放置在向ALU提供输入数据的堆栈位置上,并且,该结果构成后继运算的输入数据这样的情况确实经常出现。因此,将需要比较少的堆栈操作。
总之,按照本发明的处理器就指令数目而言是高效的,并且就指令长度而言也是高效的。因此,本发明提供能在较小的存储器中存储的紧凑的软件程序。因此,本发明提供有益的成本效率比。
本发明的这些和其它方面将在以下参照各附图进行的说明中得到明确的阐述。


图1是表示如权利要求1中所述的本发明基本特征以及如权利要求2中所述的附加特征的示意图;图2是表示按照本发明的多媒体设备的例子的框图;图3是表示图2中所示的多媒体设备中一个视频输出单元的程序设计方案的矩阵;图4是表示视频输出单元必须向显示设备提供的帧(frame)的示意图;图5是表示提供给视频输出单元中的主控处理器的一系列主要指令的流程图;图6是表示主控处理器的一个实现的框图;图7是表示主控处理器的各种指令类型与这些指令中含有的位之间的关系的图;图8是表示主控处理器执行指令的方式的图。
以下说明涉及标注符。在所有附图中,相同的实体由相同的标注字母标明。一个图中可能会出现几个相似的实体。在这种情况下,标注字母上增加数字或后缀,以便区分相似的实体。为了方便,可以省略这种数字或后缀,如果其值不重要(无关紧要值),可以用星号代替。这适用于说明书,也适用于权利要求。
图1用实线表示了本发明的基本特征。数据处理器包含一个算术逻辑单元[ALU],用于对第一和第二输入数据[OP1,OP2]执行算术运算或逻辑运算。数据处理器进一步包含一个用于存储数据的堆栈[STCK]。将一个在堆栈中有某位置[P(1)]的数据施加到算术逻辑单元[ALU],作为第一输入数据[OP1]。数据处理器能执行含有一个地址[ADDR]的指令[INSTR]-该地址指示多个存储单元[REG]的其中一个存储单元[REG(ⅰ)]。地址[ADDR]使在其指示的存储单元[REG(ⅰ)]中含有的数据被施加到算术逻辑单元[ALU],作为第二输入数据[OP2]。
图1用虚线进一步表示另外的特征。各种堆栈位置[P]构成多个存储单元的一部分-这多个存储单元的任何一个都能由指令[INSTR]中的地址[ADDR]来指示。就是说,堆栈[STCK]可以被包含在一个能通过指令[INSTR]中的地址[ADDR]寻址的寄存器存储空间中。于是,将有可能通过一条指令来定义一个以一个堆栈顶数据和堆栈中的任何其它数据为对象的算术或逻辑运算。
可以将图1中所示的特征应用于一个构成多处理器装置(例如多媒体设备)一部分的控制处理器。该控制处理器执行一个指令集,使控制处理器向多处理器装置中包含的各种处理器施加控制数据。该指令集可以全部或部分地包含在内部程序存储器中。
图2表示一例包括前文所述的图1中所示特征的多媒体设备。该多媒体设备处理包含编码视频数据的输入数据IN,其中一个目的是提供一个适合在显示设备上显示的视频数据流VDS。多媒体设备包含主接口MIF、主总线HWY、中央处理单元CPU、主指令寄存器REG和各种主处理器。图中显示了两个主处理器视频解码器VDEC和视频输出单元HDVO。视频输出单元HDVO包含主控制处理器MCP和下列数据处理部件接口IF、读纵横器(crossbar)XB/R、写纵横器XB/W、存储块MB、处理器P和流出(streaming-out)电路SO。流出电路SO包含缓冲器BUF、多路转换器MUX和控制器CON。每个数据处理部件有一个控制寄存器。控制寄存器在图2中未予示出,它们具有图3中所示的结构。就是说,控制寄存器包含一个前端寄存器和一个影子寄存器。
多媒体设备基本按如下方式操作。中央处理单元CPU通过主指令字控制多媒体设备的各种部件。主接口MIF例如从一个外部主存储器提取输入数据IN。该存储器在图2中未予示出。视频解码器VDEC解译输入数据1N中含有的编码的视频数据。相应地获得解码的视频数据,可以将解码的视频数据暂存在该外部主存储器中。视频输出单元HDVO可以将解码的视频数据变换,以在一个特定的显示设备上显示。另外,该视频输出单元HDVO可以将该解码的视频数据与其它视频数据组合起来,提供诸如画中画或混合(blending)等特征功能。
现在将更详细地解释视频输出单元HDVO的操作。视频输出单元HDVO交替地执行设置步骤和处理步骤。在设置步骤中,主控处理器MCP向数据处理部件的控制寄存器传送一条装载(load)命令。前文提到过,每个控制寄存器都包含如图3中所示的前端寄存器和影子寄存器。所以,影子寄存器根据该装载命令装载前端寄存器中含有的指令字。于是,该指令字将决定在紧接在设置步骤之后的处理步骤期间有关数据处理部件的操作。例如,装载在纵横器XB/W和纵横器XB/R的影子寄存器中的指令字决定作为一方的各存储块MB与作为另一方的接口IF、流出电路SO和各处理器P之间的连接。控制寄存器在其影子寄存器已经装载指令字时向主控处理器MCP传送一个设置完成信号。主控处理器MCP在接收到所有数据处理部件的控制寄存器的设置完成信号时向处理器P传送一个开始处理信号。该开始处理信号标志处理步骤的开始。
在处理步骤中,每个处理器处理在与该处理器P连接的存储块MB中存储的一定数量的象素。一个处理器P在处理步骤中处理的象素数不超过256。要处理的象素数,例如可以由指令字定义。在各处理器P处理象素的同时,主控处理器MCP可以通过向数据处理部件的前端寄存器写入新的指令字而构造(compose)新的VLIW。一旦一个处理器P完成了它的数量的象素,它将停止处理,并向主控处理器MCP传送一个操作结束信号。处理步骤在所有处理器都向主控处理器MCP传送过操作结束信号时结束。作为响应,主控处理器MCP将执行一个新的设置步骤。
相应地,视频输出单元HDVO以按块(block-wise)方式处理解码的视频数据。例如,在第1个处理步骤中,接口IF通过写纵横器XB/W将一个256个象素的块写入存储块MB1。在第2个处理步骤中,处理器P1从存储块MB1中读出该块的256个象素并处理之。处理器P1可以是-例如-一个对属于同一行的几个象素进行加权组合的水平视频过滤器。相应地,处理器P1提供一个水平过滤过的象素块,并将这块写入存储块MB2。在第3个处理步骤中,处理器P2从存储块MB2中读出经过处理的该块水平过滤过的象素并处理之。处理器P2可以是-例如-一个对属于相邻行的对应象素进行加权组合的垂直视频过滤器。如果垂直过滤过的象素块属于一行,处理器P2将读取属于相邻各行的其它各块垂直过滤过的象素。相应地,处理器P2提供一块水平和垂直过滤过的象素,并将这块写入存储块MB3。可以有进一步的各处理步骤,在这些处理步骤中,处理器P3和P4其中之一或者一起进一步处理在存储块MB3中含有的这块水平和垂直过滤过的象素。举例来说,假设这块水平和垂直过滤过的象素已经准备好构成视频数据流VDS的一部分。于是,在第4处理步骤中,将把有关的块从存储块MB3传输到流出电路SO的缓冲器BUF。
流出电路SO一般以每个处理步骤接收一块处理过的象素,并将该块象素存储在其缓冲器BUF中。流出电路SO从其缓冲器BUF读出用于提供视频数据流VDS的该处理过的象素。控制器CON知道所希望的视频数据流VDS的格式-例如行频、场频(field frequency)、每行象素数、每场行数。控制器CON使处理过的象素在适当的时刻并由此以所希望的速率被从缓冲器BUF读出。控制器CON进一步控制接收象素和若干控制信号(诸如水平同步信号HS和垂直同步信号VS)的多路转换器MUX。相应地,在适当时刻将适当的控制信号插入象素之间。
实际上,视频输出单元HDVO就是一个由数据处理部件-接口IF、读纵横器XB/R、写纵横器XB/W、存储块MB、处理器P和流出电路SO-组成的数据处理链。主控处理器MCP决定该数据处理链的构成。它也决定该链中每个部件的数据处理特性。主控处理器MCP是通过向数据处理部件的控制寄存器写入适当的指令字而进行这些决定的。从某种意义上讲,可以把主控处理器MCP看作是一个有各种机器的生产车间(production hall)的工长(foreman)。生产车间相当于视频输出单元HDVO,机器相当于视频输出单元HDVO中的数据处理部件。工长组织生产线并指令生产线中的机器做什么。生产线相当于数据处理链。
假设视频输出单元HDVO必须把一个视频信号针对每帧行数和每行象素数从一种格式转换成另一种格式。这可以通过一个包含适当的水平和垂直过滤的数据处理链来完成。在格式转换的开始,数据处理链先要充满象素,才能全程运转。格式转换结束时,数据处理链必须被清空,才能停止并分解如初。
例如,当要作转换的视频信号的第一块象素被传送到视频输出单元HDVO时,只有哪些位于数据处理链的开始的数据处理部件应当是有作用的。此时,存储块MB尚未充满该帧的象素。随着每个处理步骤将有越来越多的存储块被象素填充,越来越多的数据处理部件变得有作用。这一直继续到数据处理链中的每个存储块MB充满象素为止。于是,数据处理链全程运转,流出电路SO就能开始提供象素。
图3表示视频输出单元HDV()的程序设计方案。图3是个矩阵。该矩阵的列代表数据处理部件。更具体来说,一个列代表有关数据处理部件的一个影子寄存器。矩阵的行代表处理步骤PS。矩阵的元素代表指令字。一个VLIW是属于矩阵的某行的元素的合成,就是说,VLIW是某处理步骤PS的指令字的合成。VLIW定义有关数据处理部件应当并行执行的操作。
主控处理器MCP可以以各种方式构成VLIW。例如,主控处理器MCP可以通过向每个控制寄存器写入一个指令字而为特定的处理步骤构造一个VLIW。然而,主控处理器MCP也可以通过向一个或多个特定的控制寄存器写入指令字而构造一个VLIW,而它不向其它控制寄存器写入指令字。后一类控制寄存器保留它们在前面的处理步骤中含有的指令字。
图3所示的矩阵可对应于例如一个帧的显示。处理步骤[PS1]是为了显示一帧而要执行的第1个处理步骤,处理步骤[PSN]是最后一个处理步骤。例如,假设一帧有700行,每行1024个象素。进一步假设,在一个处理步骤中,通常向流出电路SO传送256个输出象素。这意味着视频信号中每行通常有4个处理步骤PS,因此,每帧有4×700个处理步骤,即每帧2800个处理步骤N=2800。
头几个处理步骤PS构成一帧的显示的初始化阶段,后几个处理步骤PS构成结束阶段。如前文所解释的那样,要逐步地对处理链填充和清空。这意味着,在初始化阶段和结束阶段中,至少有一个数据处理部件在一个处理步骤中的指令字被后继处理步骤中的不同指令字替换。这进而意味着,在初始化阶段和结束阶段中,每个处理步骤将有一个不同的VLIW。在初始化阶段与结束阶段之间的处理步骤可能也需要各种不同的VLIW。如果在整个帧中使用相同的处理链,在初始化阶段与结束阶段之间的全部处理步骤中就能使用一个VLIW。例如当视频输出单元HDVO只要把一个视频信号从一种格式转换成另一种格式时,情况可能就是这样。
图4表示视频输出单元HDVO必须向显示设备传送的帧。该帧由一个在其中插入一个子图象SPIC的主图象MPIC构成。图4进一步显示了帧中的不同帧区FZ1-FZ6。对于要由图2中所示的主控处理器MCP执行的控制操作每个帧区FZ涉及一个特定阶段。
在帧区FZ1中,主控处理器MCP为主图象MPIC的显示而建立一个处理链。在帧区FZ2中,主控处理器MCP保持后面的处理链。帧区FZ2含有X行-X是整数。在帧区FZ3中,主控处理器MCP分解用于显示主图象MPIC的处理链,建立一个用于显示主图象MPIC和其中插入的子图象的处理链。在帧区FZ4中,主控处理器MCP保持后面的处理链。帧区FZ4含有Y行-Y是整数。在帧区FZ5中,主控处理器MCP分解用于显示主图象MPIC和其中插入的子图象的处理链,再次建立一个用于显示主图象MPIC的处理链。在帧区FZ6中,主控处理器MCP保持后面的处理链。帧区FZ6含有Z行-Z是整数。
图5表示一系列向主控处理器MCP传送的主指令MI1-MI8,以便它执行前文所述的控制操作。主指令MI1使主控处理器MCP执行一个在内部存储器中存储的子例程STRT_MAIN。主指令MI1例如可以是子例程STRT_MAIN的起始地址。子例程STRT_MAIN的执行,生成一系列用于帧区FZ1中所包含的处理步骤的VLIW。对于每个处理步骤,生成一个不同的VLIW,将其传送到视频输出单元HDVO的数据处理部件。该VLIW系列使用于显示主图象的处理链按处理步骤逐步地被建立。
主指令MI2使主控处理器MCP连续X次执行子例程MAIN:X×MIAN。子例程MAIN的执行,生成一个用于在一行中所包含的处理步骤的VLIW。于是,该VLIW被应用于整个帧区FZ2中。它使数据处理部件执行显示主图象MPIC所需的处理。
主指令MI3使主控处理器MCP执行子例程END_MAIN。子例程END_MAIN的执行,生成一系列用于帧区FZ3的上部中所包含的处理步骤的VLIW。对于每个处理步骤,生成一个不同的VLIW,将其传送到视频输出单元HDVO的数据处理部件。该VLIW系列使用于显示主图象的处理链按处理步骤逐步地被分解。
主指令MI4使主控处理器MCP执行子例程STAR_PIP。子例程STAR_PIP的执行,生成一系列用于帧区FZ3的下部中所包含的处理步骤的VLIW。对于每个处理步骤,生成一个不同的VLIW,将其传送到视频输出单元HDVO的数据处理部件。该VLIW系列使用于显示主图象和其中插入的子图象SPIC的处理链按处理步骤逐步地被建立。
主指令MI5使主控处理器MCP连续Y次执行子例程PIP:Y×PIP。子例程PIP的执行,生成一个用于在一行中所包含的处理步骤的VLIW。于是,该VLIW被应用于整个帧区FZ4中。它使数据处理部件执行显示主图象MPIC和其中插入的子图象SPIC所需的处理。
主指令MI6使主控处理器MCP执行子例程END_PIP。子例程END_PIP的执行,生成一系列用于帧区FZ5的上部中所包含的处理步骤的VLIW。对于每个处理步骤,生成一个不同的VLIW,将其传送到视频输出单元HDVO的数据处理部件。该VLIW系列使用于显示主图象和其中插入的子图象SPIC的处理链按处理步骤逐步地被分解。
主指令MI7使主控处理器MCP执行子例程STRT_MAIN,该子例程已经在前文作过说明。主指令MI8使主控处理器MCP连续Z次执行子例程MAIN:Z×MIAN。子例程MAIN已经在前文作过说明。
前面提到过,从某种意义上讲,可以把主控处理器MCP看作是一个有各种机器的生产车间的工长。生产车间相当于视频输出单元HDVO,机器相当于视频输出单元HDVO中的数据处理部件。按照这种比喻,可以把主指令MI看作是工长从厂长接受的生产命令。工长把生产命令翻译成机器指令。同时执行的-因此就是并行执行的-一组指令,相当于一个VLIW。
可以把主指令MI1看作是一条启动产品A的生产线的命令。可以把主指令MI2看作是一个在该生产线上生产产品A的X个样品的命令。可以把主指令MI3和MI4看作是停止产品A的生产线并启动产品B的生产线的命令。可以把主指令MI5看作是一条在该生产线上生产产品B的Y个样品的命令,如此等等。
图6表示图2中所示主控处理器MCP的一个实现。主控处理器MCP通过也在图2中显示的主总线HWY与视频输出单元HDVO外部的部件通信。例如,主控处理器MCP可以通过主总线HWY接收主指令。主控处理器MCP通过控制总线CBUS与视频输出单元HDVO中的数据处理部件通信。例如,主控处理器MCP可以通过控制总线CBUS向数据处理部件发送指令字。主控处理器MCP进一步能通过连接XC从视频输出单元HDVO中的存储块MB接收数据或向视频输出单元HDVO中的存储块MB发送数据。
主控处理器MCP包含主总线接口HWYINT,控制总线接口CBUSINT,算术逻辑单元ALU,一组包含程序计数器PC在内的寄存器REG,一组中断单元IU,计算堆栈CSTCK,返回堆栈RSTCK,程序存储器PMEM,数据存储器DMEM和直接存储器存取电路DMAC。计算堆栈CSTCK和返回堆栈RSTCK各有一个堆栈指针。堆栈指针定义在有关堆栈中的各个存储单元的位置。下文将把计算堆栈中的堆栈顶位置和堆栈第二位置分别称作TOS和SOS,把返回堆栈RSTCK中的堆栈顶位置和堆栈第二位置分别称作TOR和SOR。
主控处理器MCP基本上按下述方式运行。程序计数器PC含有一个一般按每个时钟周期递增的程序计数值。通过向程序计数器写入新的程序计数值可以改变程序计数值。程序计数值构成其中存储着主控处理器MCP的指令的程序存储器PMEM的一个地址。以下将把这些指令称作MCP指令。MCP指令定义算术逻辑单元ALU执行的操作。它进一步定义如下文将作更详细解释的控制返回堆栈RSTCK和计算堆栈CSTCK的操作。前文所说明的用于生成VLIW的子例程,是由一组MCP指令组成的。
可以按以下方式在程序存储器PMEM中存储一组指令。首先通过主总线HWY把该组指令从多媒体设备外部的源装入存储块MB中。然后通过连接XC把该组指令或其一部分从存储块MB复制到程序存储器PMEM。程序存储器PMEM可以含有几个存储体(bank)。如果是那样,就有可能将指令从存储块MB复制到一个存储体,与此同时,主控处理器MCP执行在另一个存储体中含有的指令。
可以按以下方式在存储块MB中存储一条指令。第一个存储块MB1包含指令的最高有效部分,第二个存储块MB2包含指令的次高有效部分,第三个存储块MB3包含指令的最低有效部分,每个部分例如含有8位。在向程序存储器PMEM传输这些部分时,它们就象以前一样被连接到一起,构成一条含有24位的指令。应当注意到,可以在存储待处理数据的存储块以外另有存储指令的存储块MB。就是说,多媒体设备可以包含若干组存储块(例如,一组用于数据,另一组用于控制),每组存储块有其自己的纵横器。
以下是一例MCP指令的语义。一条MCP指令包含24位b23-b0。位b23定义MCP指令是无条件的还是有条件的。如果MCP指令的位b23有值0(零),指令是无条件的。无条件的MCP指令总是得到执行。如果MCP指令的位b23有值1(壹),指令是有条件的。有条件的MCP指令仅当某寄存器中的最低有效位有值0(零)时总才得到执行。位b22、b21和b12被用来区分不同类型的MCP指令。任何类型的MCP指令可以是无条件的,也可以是有条件的。如果MCP指令的位b22有值1(壹),该MCP指令是0类型的。0类型指令的作用是将数据写入内部存储单元-存储单元例如可以是寄存器。0类型指令的位b21-b12构成要被写的数据。位b11-b0定义该数据要被写入的存储单元的地址。如果该存储单元的长度大于10位,该数据就被符号扩展(sign-extended)。
如果MCP指令的位b22和b21都是零(0),则该MCP指令要么是1类型的,要么是1A类型的。1类型和1A类型的指令的作用是处理数据。如果位b12还有值零(O),则MCP指令是1类型的指令。1类型的指令的位b11-b0定义一个地址。在该地址下存储的数据构成算术逻辑单元ALU的输入数据。如果位b12有值壹(1),则该MCP指令是1A类型的指令。1A类型的指令的位b11-bO代表数据。该数据构成算术逻辑单元ALU的输入数据。可以将该数据进行符号扩展,形成一个16位二进制字后再传送到算术逻辑单元ALU。
1类型或1A类型的指令包括一个由位b20-b17构成的操作码部分。操作码部分决定算术逻辑单元对输入数据执行哪个处理操作以及在哪里存储这个处理操作的结果的运算。结果或者写入TOS,或者写入程序计数器PC。1类型的指令有16种不同的运算,1A类型的指令也有16种不同的运算。例如,一个运算是对输入数据和TOS的内容进行AND组合并将该AND组合的结果写入TOS。其它运算可以进行NOR、XOR、NAND、OR、XNOR组合。
如果MCP指令的位b22有值零(0),b21有值壹(1),则该MCP指令是2类型的。2类型的指令的作用是传输数据。2类型的指令包含由位b20-b17构成的传输-控制部分。传输-控制部分定义要被传输的数据的源和目的地。更具体来说,位b18-b17定义源,位b20-b19定义数据的目的地地址。有四个数据源TOS、SOS、TOR或程序计数器PC。有四个目的地地址TOS的内容、SOS的内容、MCP指令本身的位b11-b0附加下标值(index value)、MCP指令本身的位b11-b0不带下标值。
0类型、1类型和1A类型的指令主要的作用是为图2中所示的视频输出单元HDVO中的数据处理部件生成指令字。2类型的指令的作用主要是传输如此生成的指令字,以控制数据处理部件的寄存器。后一种MCP指令可以说是输出(export)MCP指令。
1类型、1A类型和2类型的MCP指令包含一个由位b16-b13构成的堆栈控制部分。计算堆栈CSTCK依据位b16-15而受控制。返回堆栈RSTCK依据位b14-13而受控制。有四个对应于计算堆栈CSTCK的控制操作和四个对应于返回堆栈RSTCK的控制操作。b16-15和b14-13的值各决定执行相应的四个控制操作中的哪一个。
图7表示上文所述各种类型的MCP指令与这些指令中含有的位b23-b21和b12之间的关系。图7中用标注字母来代表各种类型的MCP指令UNCOND代表无条件指令,COND代表条件指令,TPO、TP1、TP1A和TP2分别代表0类型、1类型、1A类型和2类型的指令。图7进一步包含指示后四种MCP指令的类型的标注字母。0类型指令的作用是写数据WRT。1类型指令的作用是从内部存储器读数据并处理该数据RD&PROC。1A类型指令的作用是处理指令中含有的数据,就是说,它的作用是直接地处理数据IPROC。2类型指令的作用是传输数据TRNSFR。图7进一步包含指示操作码部分的标注字母OPC,指示传输-控制部分的标注字母WOPC和指示堆栈-控制部分的标注字母STC。
如前文所述,位b16、b15为计算堆栈CSTCK定义四种控制操作。有Nop、Cpy、Psh和Pop控制操作。Nop控制操作不修改计算堆栈CSTCK。Cpy控制操作把TOS的内容复制到SOS。这种复制在算术逻辑单元执行该指令之前完成。Psh控制操作递增堆栈指针。其结果是,在指令之前是TOS的存储单元在该指令后变成SOS。在指令之前是TOS的存储单元的内容按缺省被复制到在该指令后是TOS的存储单元。所以,在该指令之前的TOS的内容就是在该指令之后的TOS的内容。然而,如果该指令导致算术逻辑单元向TOS写入数据,在该指令之后的TOS的内容就将是该数据。Pop控制操作递减堆栈指针。其结果是,在该指令之前是SOS的存储单元,在该指令后变成TOS。
如前文所述,位b14、b13为返回堆栈RSTCK定义四种控制操作。有Rnop、Rpc、Rpsh和Rpop控制操作。Rnop控制操作不修改返回堆栈RSTCK。Rpc控制操作递增堆栈指针。将一个常数值加到程序计数值,然后将相加的结果复制到TOR。常数值是视具体实现而定的。Rpsh控制操作递增堆栈指针。其结果是,在指令之前是TOR的存储单元在该指令后变成SOR。在该指令之前是TOS的存储单元中含有的数据,按约定被压进到返回堆栈RSTCK上。就是说,在该指令之后的TOR的内容就是在该指令之前的TOS的内容。然而,如果该指令导致算术逻辑单元ALU向TOR写入数据,在该指令之后的TOR的内容就将是该数据。Rpop控制操作递减堆栈指针。其结果是,堆栈中在该指令之前是SOR的存储单元,在该指令后变成TOR。就是说,在该指令之后的TOR的内容就是在该指令前的SOR的内容。
原则上,前文所述的任何与堆栈有关的控制操作,是独立于在1类型和1A类型指令的操作码部分中所定义的操作而执行的。任何与堆栈有关的控制操作,也是独立于在2类型指令的传送控制部分中所定义的数据传输而执行的。因此,多个组合是可能的。
计算堆栈CSTCK和返回堆栈RSTCK二者都按下列规则被控制,在算术逻辑单元ALU执行有关指令之前递增堆栈指针,而之后则递减堆栈指针。因此,如果一个弹出型指令后紧跟一个压进型指令,将使堆栈指针保持不变。如果堆栈控制涉及从一个堆栈位置向另一个复制数据,被复制的数据总是在该指令之前的该堆栈位置中所含有的数据。
当主控处理器MCP执行指令时,可能发生算术逻辑单元ALU想要写入一个堆栈位置而该指令的堆栈控制部分想要写入同一个堆栈位置的情况。在这种情况下就有冲突。该冲突因算术逻辑单元ALU有优先权而解决。算术逻辑单元ALU的输出数据被写入有关的堆栈位置。无论如何,堆栈指针要按指令的堆栈控制部分修改,即使在有冲突时也是如此。
有各种方式能实现计算堆栈CSTCK和返回堆栈RSTCK如上文所述地分别根据MCP指令的位b16、b15和位b14、b13而工作。例如,每个堆栈可以由安排成先进后出(FILO)存储器的存储单元构成。这种存储器通常响应一个时钟的正边沿或负边沿而将它含有的数据移动一个位置。数据被移动的方向通常由施加到FILO存储器的控制输入的控制数据定义。用比较简单的逻辑电路一般就足以能由指令中的有关位产生适当的控制数据。
图8表示主控处理器MCP执行指令的方式。图8中,水平方向代表时间,垂直方向代表指令INSTR。一条指令INSTR分8个不同步骤S1-S8执行。每个步骤对应一个时钟周期CC。因此,完全执行一条指令需要8个时钟周期。主控处理器MCP每个时钟周期开始执行一条新指令。所以,在给定的时钟周期,主控处理器MCP并行执行不同的步骤,每个步骤属于一条不同的指令。
在步骤S1,主控处理器MCP提取一条指令。程序计数器就是在该步骤中被读取的。在步骤S2中,指令被解译。在步骤S3中,从内部存储单元读取算术逻辑单元ALU的输入数据。步骤S4是一个内部数据延迟。在步骤S5中,执行一个如指令中所定义的算术或逻辑运算。在步骤S6中,该算术或逻辑运算的结果被写入一个内部存储单元。正是在该步骤中,TOS实际上被写回。此外,程序计数器被更新。步骤S7是一个延迟。在步骤S8中,能将任何数据有效地施加到把主控处理器MCP连接到多媒体设备中含有的各种数据处理器的控制总线CBUS。
主控处理器MCP包含堆栈写所必需的流水线阶段和旁路,使得不增加额外的等待周期就能一个接一个地执行堆栈指令。例如,主控处理器MCP包含一个在算术逻辑单元ALU的输出端和一个输入端之间的数据传输通路,使得能将一个算术或逻辑运算的结果作为一个用于后继的算术或逻辑运算的TOS数据。对返回堆栈采用一个类似的数据通路。
MCP指令可以使图6中所示的直接存储器存取电路DMAC执行一个直接存储器存取会话。在直接存储器存取会话中,直接存储器存取电路DMAC自动地把存储器中的一块指令字传输到图4中所示的视频输出单元HDVO中的各种数据处理部件的控制寄存器。MCP指令为直接存储器存取会话定义一个起始地址和一个方式。有三种不同的直接存储器存取方式。
在第一种直接存储器存取方式中,直接存储器存取电路DMAC把指令字写入地址连续的控制寄存器序列。该块中的第一个指令字被写入其地址是起始地址的控制寄存器,第二个指令字被写入其地址是起始地址加1的控制寄存器,依此类推。
在第二种直接存储器存取方式中,直接存储器存取电路DMAC首先读一个模板。该模板是一个二进制字,字中的每位对应于地址连续的控制寄存器序列中的一个不同的控制寄存器。该序列从起始地址开始。实际上,直接存储器存取电路DMAC逐位地读模板,把该块的第一个指令字写入对应于第一个被读的、其值为壹(1)的位的控制寄存器,把第二个指令字写入对应于第二个被读的、其值为壹(1)的位的控制寄存器,依此类推。
在第三种直接存储器存取方式中,直接存储器存取电路DMAC在把一个指令字写入一个控制寄存器之前先读出一个偏置值(offset)。指令字被写入其地址是上一个被写入的控制寄存器的地址加该偏置值的控制寄存器。该块中的第一个指令字被写入其地址是起始地址加第一个被读的偏置值的控制寄存器。
主控处理器MCP最好用直接存储器存取电路DMAC来构造一个与前一个VLIW非常不同的VLIW,或者在没有前一个VLIW时构造一个VLIW。例如,可以用一个直接存储器存取会话来初始化视频输出单元HDVO。直接存储器存取会话防止主控处理器MCP自身不得不把较多的指令字写入控制寄存器。主控处理器MCP可以说是把这个任务委托给直接存储器存取电路DMAC。直接存储器存取电路DMAC然后将利用控制总线CBUS来把指令字写入控制寄存器。所以,在直接存储器存取会话期间,主控处理器MCP中的其它部件不能访问控制总线CBUS。
主控处理器MCP不需要用直接存储器存取电路DMAC来构造一个与前一个VLIW相似的VLIW。这种相似的VLIW可以通过修改较少几个控制寄存器的内容来构造。主控处理器MCP然后可以把新的指令字直接地写入适当的控制寄存器。
所以,从程序设计的角度看来,有两种构造VLIW的技术。第一种技术是使用一个或多个使主控处理器MCP把新的指令字写入特定控制寄存器的MCP指令。该技术最好被用于构造相似的VLIW。第二种技术是使用一个使主控处理器MCP启动一个直接存储器存取会话的MCP指令。该技术最好被用于构造一个与前一个VLIW非常不同的VLIW,或者用于初始化视频输出单元HDVO。
图6中所示的主控处理器MCP能以各种方式实现。主控处理器MCP一般含有一个指令译码器。主控处理器MCP进一步可以含有在各种数据通路上设置的多路转换器,用于向算术逻辑单元ALU施加输入数据和用于把算术逻辑单元ALU的输出数据传输到诸如堆栈顶的存储单元。例如,可以在算术逻辑单元ALU的每个输入端有一个多路转换器,在输出端有一个多路转换器。将输入数据的各种可能的源连接到算术逻辑单元ALU的输入端的多路转换器。这些源有堆栈顶、堆栈的第二位置和多个寄存器中的每个寄存器。通过指令译码器控制多路转换器,以便根据指令的类型和指令中含有的数据将其中一个源连接到算术逻辑单元的输入端。所以,控制这个多路转换器的信号是根据施加到算术逻辑单元ALU的指令而生成的。前述的信号例如可以通过另外一个多路转换器而生成,该多路转换器接收指令的操作码位b3-b0和位12作为选择信号,并接收位b11-b0作为要被选择的其中一个信号。另一个要选择的信号可以通过变址(indexing)位b11-b0而形成。
至此以前的附图和说明是为了解释而不是限制本发明。在后附的权利要求的范围显然有许多可选择的方案。兹就此作下述结语。
图1所示的指令字构造软件IWCS,例如可以包含在存储器中。指令字可能在工厂中就已经被写入存储器。然而,也可能用户把指令字构造软件IWCS从某信息载体复制到存储器。相应地,用户能使图1中所示的数据处理设备PDA执行某功能。含有指令字构造软件IWCS的信息载体例如可以是个软盘。指令字构造软件也能通过诸如因特网的通信网络而提供。
在物理上将各功能或功能部件分布于各种单元的方式有多种多样。就此而言,各附图是非常概略的,每幅附图只代表本发明的一个可能的实施例。因此,各附图以不同的方框的形式表示不同的功能部件,但这决不排除有些功能部件或全部功能部件是作为一个物理单元而实现的。
权利要求中的标注符不应被解释为是对该权利要求的限定。
权利要求
1.一种数据处理器,包括一个用于对第一和第二输入数据[OP1,OP2]执行算术或逻辑运算的算术逻辑单元[ALU];和一个用于存储数据的堆栈[STCK],该堆栈还用于将在该堆栈中某位置[P(1)]的数据作为第一输入数据[OP1]施加到算术逻辑单元[ALU],特征在于-将数据处理器设置成能执行含有一个地址[ADDR]的指令[INSTR],该地址指示多个存储单元[REG]的其中一个存储单元[REG(ⅰ)],地址[ADDR]使在所述存储单元[REG(ⅰ)]中含有的数据被作为第二输入数据[OP2]施加到算术逻辑单元[ALU]。
2.如权利要求1所要求的数据处理器,特征在于,各种堆栈位置[P]构成任何一个都能被指令[INSTR]中的地址[ADDR]指示的多个存储单元的一部分。
3.一种通过数据处理器进行数据处理的方法,该数据处理器包括-一个用于对第一和第二输入数据[OP1,OP2]执行算术或逻辑运算的算术逻辑单元[ALU];和-一个用于存储数据的堆栈[STCK],该堆栈用于将在该堆栈中某位置[P]的数据作为第一输入数据[OP1]施加到算术逻辑单元[ALU];该方法包含下述步骤-执行含有一个指示多个存储单元[REG]的其中一个存储单元[REG(ⅰ)]的地址[ADDR]的指令[INSTR],地址[ADDR]使所述存储单元[REG]中含有的数据被作为第二输入数据[OP2]施加到算术逻辑单元[ALU]。
4.一种用于数据处理器的计算机程序产品,该数据处理器包含-用于对第一和第二输入数据[OP1,OP2]执行算术或逻辑运算的算术逻辑单元[ALU];和-一个用于存储数据的堆栈[STCK],该堆栈用于将在该堆栈中某位置[P]的数据作为第一输入数据[OP1]施加到算术逻辑单元[ALU];该计算机程序产品包括含有一个指示多个存储单元[REG]的其中一个存储单元[REG(ⅰ)]的地址[ADDR]的指令[INSTR],指令[INSTR]被执行时,使该数据存储器将所述存储单元[REG]中含有的数据被作为第二输入数据[OP2]施加到算术逻辑单元[ALU]。
5.一种包括用于向各种功能单元提供控制数据的控制器的多媒体设备,该控制器包括-一个用于对第一和第二输入数据[OP1,OP2]执行算术或逻辑运算的算术逻辑单元[ALU];和-一个用于存储数据的堆栈[STCK],该堆栈用于将在该堆栈中某位置[P(1)]的数据作为第一输入数据[OP1]施加到算术逻辑单元[ALU];特征在于,将控制器安排得能执行含有一个指示多个存储单元[REG]的其中一个存储单元[REG(ⅰ)]的地址[ADDR]的指令[INSTR],地址[ADDR]使所述存储单元[REG(ⅰ)]中含有的数据被作为第二输入数据[OP2]施加到算术逻辑单元[ALU]。
全文摘要
一种数据处理器,包含:一个用于对第一和第二输入数据[OP1,OP2]执行算术或逻辑运算的算术逻辑单元[ALU]。它进一步包含一个用于存储数据的堆栈[STCK],该堆栈用于将在堆栈中有某位置[P(1)]的数据作为第一输入数据[OP1]施加到算术逻辑单元[ALU]。数据处理器能执行含有一个指示多个存储单元[REG]的其中一个存储单元[REG(i)]的地址[ADDR]的指令[INSTR]。地址[ADDR]使在其指示的存储单元[REG(i)]中含有的数据被作为第二输入数据[OP2]施加到算术逻辑单元[ALU]。
文档编号G06F9/38GK1320235SQ00801714
公开日2001年10月31日 申请日期2000年6月13日 优先权日1999年6月15日
发明者M·杜兰顿 申请人:皇家菲利浦电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1