CN100465874C - 根据指令对数据执行运算的方法、处理器和系统 - Google Patents

根据指令对数据执行运算的方法、处理器和系统 Download PDF

Info

Publication number
CN100465874C
CN100465874C CNB031202993A CN03120299A CN100465874C CN 100465874 C CN100465874 C CN 100465874C CN B031202993 A CNB031202993 A CN B031202993A CN 03120299 A CN03120299 A CN 03120299A CN 100465874 C CN100465874 C CN 100465874C
Authority
CN
China
Prior art keywords
data
instruction
data element
integrated
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
CNB031202993A
Other languages
English (en)
Other versions
CN1549106A (zh
Inventor
A·D·佩勒
M·米塔尔
L·M·曼内梅尔
B·艾坦
C·杜龙
小鹫英一
W·维特
D·C·林
A·宾达尔
S·A·费彻
T·H·贝
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US08/522,067 external-priority patent/US6385634B1/en
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN1549106A publication Critical patent/CN1549106A/zh
Application granted granted Critical
Publication of CN100465874C publication Critical patent/CN100465874C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5324Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • G06F15/7842Architectures of general purpose stored program computers comprising a single central processing unit with memory on one IC chip (single chip microcontrollers)
    • G06F15/7857Architectures of general purpose stored program computers comprising a single central processing unit with memory on one IC chip (single chip microcontrollers) using interleaved memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/4806Computations with complex numbers
    • G06F7/4812Complex multiplication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49921Saturation, i.e. clipping the result to a minimum or maximum value
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • G06F7/5334Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
    • G06F7/5336Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm
    • G06F7/5338Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm each bitgroup having two new bits, e.g. 2nd order MBA

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Discrete Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Holo Graphy (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Electrophonic Musical Instruments (AREA)
  • Hair Curling (AREA)

Abstract

一种处理器具有分别含有第一与第二分组数据的第一与第二存储器。各分组数据包含第一、第二、第三与第四数据元素。一个乘-加电路耦合在第一与第二存储区上。乘-加电路包含第一(810)、第二(811)、第三(812)及第四乘法器(813),其中各乘法器接收一组对应的所述数据元素。乘-加电路还包含耦合在第一与第二乘法器(810,811)上的第一加法器(850)及耦合在第三与第四乘法器(812,813)上的第二加法器(851)。第三存储区(871)耦合在加法器(850,851)上。第三存储区(871)包含第一与第二字段分别用于保存第一与第二加法器(850,851)的输出,作为第三分组数据的第一与第二数据元素。

Description

根据指令对数据执行运算的方法、处理器和系统
本申请是1996年8月7日提交的申请号为96197836.8、名为“在分组数据上执行乘-加运算的装置”的中国专利申请的分案申请。
技术领域
具体地,本发明涉及计算机系统领域。更具体地,本发明涉及分组数据操作领域。
背景技术
在典型的计算机系统中,处理器是实现为使用产生一个结果的指令在用大量的位(如64)表示的值上操作的。例如,加法指令的执行将第一个64位值与第二个64位值相加并作为第三个64位值存储其结果。然而,多媒体应用(诸如用于计算机支持的协作(CSC-电话会议与混合媒体数据处理的综合)的应用、2D/3D图形、图象处理、视频压缩/解压、识别算法及音频处理)要求处理大量可以用少数位表示的数据。例如,图形数据通常需要8或16位及声音数据通常需要8或16位。这些多媒体应用的每一个需要一种或多种算法,每种需要若干操作。例如,一种算法可能需要加法、比较及移位操作。
为了增进多媒体应用的效率(以及具有相同特征的其它应用的效率),处理器可提供分组数据格式。分组数据格式便是将通常用来表示一个值的位分解成若干固定长度的数据元素,每一个表示一个单独的值。例如,可将64位寄存器分成两个32位元素,各表示一个单独的32位值。此外,这些处理器提供用于响应单一的指令并行地分开处理这些分组数据类型中的各元素的指令。例如,分组加法指令将来自第一分组数据及第二分组数据的对应数据元素相加。从而,如果多媒体算法需要包含必须在大量数据元素上执行的五个操作的循环,组装这些数据并用分组数据指令并行执行这些操作是所希望的。以这一方式,这些处理器便能更高效地处理多媒体应用。
然而,如果操作循环中包含处理器不能在分组数据上执行的操作(即,处理器缺乏适当的指令),则必须分解该数据以便执行这一操作。例如,如果多媒体算法需要加法运算而不能使用上述分组加法指令,则程序员必须分解第一分组数据及第二分组数据(即分开第一分组数据及第二分组数据所包含的元素),单个地将分开的元素相加,然后将结果组装成分组结果供进一步分组处理。执行这种组装与分解所需的处理时间往往抵消提供分组数据格式的性能优点。因此,希望在计算机系统中加入提供典型多媒体算法所有所需要的操作的分组数据指令集。然而由于现今通用处理器上有限的芯片面积,可以增加的指令数目是有限的。因此,希望发明出既提供通用性(即可用在多种多样多媒体算法中的指令)又具有极大性能优点的指令。
提供在多媒体算法中使用的操作的一种技术为将一个独立的数字信号处理器(DSP)耦合在现有的通用处理器(如加州Santa Clara的Intel公司制造的
Figure C03120299D0007182130QIETU
486)上。通用处理器将能用分组数据执行的任务(如视频处理)分配给DSP。
一种DSP包含将两个值相乘的结果加到累加值上的乘累加指令(见Kawakami、Yuichi等人的“用于话音频带应用的单片数字信号处理器”,IEEE国际固态电路会议,1980,pp.40-41)。下面表1中示出这一DSP的乘累加运算的一个示例,其中指令是在分别作为Source1与Source2存取的数据值A1与B1上执行的。
表1
Figure C03120299D00071
这一指令的一个限制是其有限的效率--即它只在两个值及一个累计值上运算。例如,为了相乘与累计两组两个值需要串行执行下述两条指令:1)乘累加来自第一组的第一值、来自第二组的第一值及为0的一个累计值以生成中间累计值;2)乘累加来自第一组的第二值、来自第二组的第二值及中间累计值以生成结果。
另一DSP包含在两组两个值及一个累计值上运算的乘累加指令(见“带并行乘法器的数字信号处理器”,专利号4,771,470,这里称作“Ando等人”对比文件)。表2中示出用于这一DSP的乘累加指令的一个示例,其中该指令在分别作为Source1-4存取的数据值A1、A2、B1及B2上执行。
                 表2
Figure C03120299D00081
采用这一技术,在一条指令中相乘两组两个值然后加到一个累计值上。
这一乘累加指令具有有限的通用性,因为它总是加在累加值上。结果,难于将该指令用在乘累加以外的运算上。例如,复数乘法是在多媒体应用中经常使用的。两个复数(诸如,r1 i1与r2 i2)的乘法是按照下述等式执行的:
实部=r1·r2-i1·i2
虚部=r1·i2+r2·i1
这一DSP不能用一条乘累加指令执行将两个复数相乘的功能。
当这一计算的结果在随后的乘法运算而不是在累加中需要时,这一乘累加指令的局限性可以更清楚地看出。例如,如果实部是用该DSP计算的,则为了正确地计算结果必须将累加值初始化成零。此后为了计算虚部还必须将累加值重新初始化成零。为了在得出的复数与第三复数(诸如r3,i3)上执行另一次复数乘法,必须将得出的复数再定标及存储在可接受的存储格式中并且必须再次将累加值初始化成零。然后才能执行上述复数乘法.在这些运算的各个中,专用于累加值的ALU是多余的硬件并需要额外的指令来重新初始化这一累加值。否则这些额外指令是不需要的。
这一技术的进一步限制是数据必须通过昂贵的多端口存储器存取。这是因为乘法器是直接与数据存储器相连的。因此可利用的并行性量被互连的成本及这一互连不从指令上断开这一事实限制在很小的数量上。
Ando等人的对比文件还描述了对这一昂贵的互连的一种替代是为各个要相乘的随后的数据对引入延时。这一解决方案消除了前面表1中所示的解决方案所提供的任何性能优点。
此外,多端口存储器或对存储器的流水线存取的想法要求使用多个地址。每一数据一个地址的明确使用清楚地显示在这一技术中不采用分组数据这一关键性概念。
发明内容
按照本发明的一个方面,提供一种根据指令对操作数执行运算的方法,包括以下步骤:接收第一指令,所述第一指令的指令格式包括第一操作码、第一字段和第二字段,所述第一字段表示具有第一分组数据的第一存储器区,第一分组数据具有至少包括A1、A2、A3和A4作为数据元素的第一多个数据元素,所述第二字段表示具有第二分组数据的第二存储器区,第二分组数据具有至少包括B1、B2、B3和B4作为数据元素的第二多个数据元素,所述第一和第二多个数据元素中的每个所述数据元素长度都为以比特数表示的第一长度;及通过执行(A1×B1)+(A2×B2)运算以产生第三分组数据的第一数据元素,并执行(A3×B3)+(A4×B4)运算以产生所述第三分组数据的第二数据元素,从而对所述第一指令作出响应,把比特数长度至少为第一长度4倍的所述第三分组数据存储在目标存储器区中,其中每个所述第一和第二数据元素的比特数长度至少为第一长度的2倍。
按照本发明的另一方面,提供一种制造产品,包括:机器可存取媒体,该媒体含有数据,该数据在由机器存取时使所述机器执行本发明的一种或多种方法。
按照本发明的又一方面,提供一种制造产品,包括:机器可存取媒体,该媒体含有适合至少一种处理技术的设计数据,所述设计数据实施一种设备来执行本发明的一种或多种方法。
按照本发明的再一个方面,提供一种执行本发明一种或多种方法的处理器,所述处理器包括:第一存储单元,它存储所述第一多个数据元素;第二存储单元,它存储所述第二多个数据元素;解码器,它存取所述第一和第二存储单元;第三存储单元,它存储表示至少一个指令的数据并提供所述至少一个指令给所述解码器;功能单元,用来与所述解码器连接,所述解码器和所述功能单元至少部分地对包含所述第一指令的所述至少一个指令作出响应,执行任何一项根据本发明所述的根据第一指令对数据执行运算的方法。
按照本发明的另一方面,提供一种处理器,包括:第一和第二存储单元,它们分别存储第一和第二分组数据,其中每一个都包括四个初始数据元素,所述第一分组数据中的每个所述初始数据元素对应于所述第二分组数据中的不同初始数据元素以产生四对初始数据元素;解码器,它对第一指令进行解码,所述第一指令将所述第一和第二存储单元分别指定为第一和第二地址;及与所述第一和第二存储单元和所述解码器连接的电路,所述电路对所述第一指令作出响应,将所述第一和第二分组数据中的对应初始数据元素一起相乘,以产生对应的中间数据元素,所述中间数据元素配对成两组;将所述两组的每一组中的中间数据元素相加,以产生两个结果数据元素,所述两个结果数据元素中的每一个都比所述初始数据元素具有更多比特,并把包括所述两个结果数据元素的第三分组数据作为执行所述第一指令的结果而存储在单个寄存器中。
按照本发明的另一方面,提供一种用于处理指令的系统,所述系统包括:存储包括第一多个分组数据元素的第一分组数据和包括第二多个分组数据元素的第二分组数据的存储器,其中,所述第一多个等于所述第二多个,并且所述第一和第二分组数据的每个数据元素具有多个位;处理器,它与所述存储器连接,以存取所述第一和第二分组数据,并响应指令而产生包括第三多个分组数据元素的第三分组数据,第一格式的所述指令用于识别与所述第一分组数据对应的第一源和与所述第二分组数据对应的第二源,所述第三多个分组数据元素中的每一个分组数据元素表示由所述第一和第二多个分组数据元素中对应数据元素的成对乘积之和,其中,所述第三多个为所述第一多个的一半;总线,它连接到所述处理器,以向所述处理器或从所述处理器传送数据,并向所述存储器或从所述存储器传送数据;接口,它将所述总线与至少用于语音记录和语音播放之一的设备连接。
附图说明
图1示出具有本发明的一个实施例的计算机系统。
图2示出按照本发明的一个实施例的处理器的寄存器文件。
图3为展示按照本发明的一个实施例的处理器处理数据所使用的总步骤的流程图。
图4示出按照本发明的一个实施例的分组数据类型。
图5a示出按照本发明的一个实施例的寄存器分组数据表示。
图5b示出按照本发明的一个实施例的寄存器分组数据表示。
图5c示出按照本发明的一个实施例的寄存器分组数据表示。
图6a示出按照本发明的一个实施例的用于指示分组数据的使用的控制信号格式。
图6b示出按照本发明的一个实施例的用于指示分组数据的使用的第二控制信号格式。
图7为展示按照本发明的一个实施例在分组数据上执行乘-加运算的步骤的流程图。
图8示出按照本发明的一个实施例在分组数据上执行乘-加运算的电路。
图9a-9e示出按照本发明一个实施例执行部分乘积求和与归约的Wallace树。
图10a-10f示出本发明的一个实施例的实现图9a-9e的Wallace树的电路的一个实施例。
图11示出按照本发明的一个实施例在分组数据上执行乘-加运算的电路。
具体实施方式
在以下描述中,为了提供对本发明的彻底理解,陈述了许多特定细节。然而,应理解本发明可不用这些特定细节实现。在其它实例中,为了不冲淡本发明,公知的电路、结构与技术未曾详细示出。
定义
为了提供理解本发明的实施例的描述的基础,提供了以下定义。
位X至位Y:
定义二进制数的子字段。例如,字节001110102(以基2示出)的位5至位0表示子字段1110102。二进制数后面的“2”表示基2。因此,10002等于810,而F16等于1510
Rx:为一寄存器。寄存器是能够存储与提供数据的任何器件。寄存器的进一步功能描述如下。寄存器不一定非包含在与处理器同一芯片上或同一封装中不可。
SRC1、SRC2与DEST:
标识存储器区(诸如存储区地址、寄存器等)。
Source1-i及Result1-i:
表示数据。
概述
本申请描述在分组数据上执行乘-加运算的处理器中的装置。在一个实施例中,使用一个乘-加指令执行两个乘-加运算,如下面表3a与3b中所示--表3a示出所公开的乘-加运算的简化表示,而表3b示出所公开的乘-加运算的位级示例。
表3a
Figure C03120299D00121
表3b
从而,所描述的乘-加运算的实施例将Source1与Source2的对应16位数据元素相乘生成四个32位中间结果。将这些32位中间结果成对求和产生装进一个分组结果的它们各自的元素中的两个32位结果。如稍后进一步描述的,替代实施例可改变数据元素、中间结果及结果中的位数。此外,替代实施例可改变所使用的数据元素的数目、生成的中间结果的数目及得出的分组数据中的数据元素的数目。
计算机系统
图1示出按照本发明的一个实施例的示范性计算机系统100。计算机系统100包含用于传递信息的总线101或其它通信硬件与软件,以及用于处理信息的与总线101耦合的处理器109。处理器109表示包含CISC或RISC类型体系结构在内的任何类型体系结构的中央处理单元。计算机系统100还包括耦合在总线101上的随机存取存储器(RAM)或其它动态存储设备(称作主存储器104),用于存储信息及要由处理器109执行的指令.在处理器109的指令执行期间,主存储器104也可用于存储临时变量或其它中间信息。计算机系统100还包含耦合在总线101上的只读存储器(ROM)106与/或其它静态存储设备,用于存储静态信息及处理器109的指令。数据存储设备107耦合在总线101上用于存储信息及指令。
图1还示出处理器109包含执行单元130、乘-加单元145、寄存器文件150、高速缓冲存储器160、解码器165及内部总线170。当然,处理器109包含对理解本发明不必要的附加电路。
执行单元130用于执行处理器109接收的指令。除了识别通常实现在通用处理器中的指令以外,执行单元130还识别在分组数据格式上执行操作的分组指令集140中的指令142。分组指令集140中包含支持乘-加运算的指令。此外,分组指令集140也可包含支持组装操作、分解操作、分组加法运算、分组减法运算、分组乘法运算、分组移位操作、分组比较操作、个数计数操作及一组分组逻辑运算(包含分组“与”、分组“与非”(ANDNOT)、分组“或”、及分组“异或”)的指令,如在名称为“在分组数据上操作的指令集”的申请中所描述的。执行单元130还包含执行乘-加运算的乘-加单元145。
执行单元130用内部总线170耦合在寄存器文件150上。寄存器文件150表示用于存储包含数据在内的信息的处理器109上的存储区。执行单元130还耦合在高速缓冲存储器160及解码器165上。高速缓冲存储器160用来高速缓冲存储来自诸如主存储器104的数据与/或控制信号。解码器165用来将处理器109接收的指令解码成控制信号与/或微代码入口点。执行单元130响应这些控制信号与/或微代码入口点,执行适当的操作。例如,如果接收到加法指令,解码器165令执行单元130执行所要求的加法。可采用任何数目的不同机制(诸如查找表、硬件实现、PLA等)实现解码器165。从而,虽然解码器与执行单元的各种指令的执行是用一系列if/then语句表示的,应理解指令的执行并不需要一系列这些if/then语句的处理。而是将逻辑地执行这一if/then处理的任何机制认为是在本发明的范围之内。
图1附加示出诸如磁盘或光盘及其对应的盘驱动器的数据存储设备107可耦合在计算机系统100上。计算机系统100也能通过总线101耦合在用于向计算机用户显示信息的显示设备121上。显示设备121能包含帧缓冲器、专用图形描绘设备、阴极射线管(CRT)与/或平板显示器。字母数字输入设备122(包含字母数字及其它键)通常耦合在总线101上,用于传递信息与命令选择给处理器109。另一种用户输入设备为诸如鼠标器、轨迹球、笔、触摸屏或光标方向键等用于传递方向信息与命令选择给处理器109及用于控制光标在显示设备121上的运动的光标控制设备123。这一输入设备通常具有两个轴上的两个自由度(第一轴(如x)及第二轴(如y)),它允许设备指定平面上的一个位置。然而本发明不限于只有两个自由度的输入设备。
另一个可耦合在总线101上的设备为硬拷贝设备124,它可在诸如纸、胶片等介质或类似种类的介质上打印指令、数据或其它信息。此外,计算机系统100可耦合在用于声音录制与/或播放的设备125上,诸如耦合在用于录制信息的麦克风上的音频数字化器。此外,该设备可包含耦合在数模(D/A)转换器上用于播放数字化声音的扬声器。
此外,计算机系统100也可以是计算机网(如LAN)中的终端。这时计算机系统100便是计算机网的一个计算机子系统。计算机系统100可选地包含视频数字化设备126。视频数字化设备126可用来捕捉能传输给计算机网上其它计算机的视频图象。
在一个实施例中,处理器109附加支持与加州Santa Clara的Intel公司制造的现有处理器(诸如
Figure C03120299D0015182408QIETU
处理器)所用的X86指令集兼容的指令集。从而,在一个实施例中,处理器109支持所有IATM-Intel体系结构支持的操作,其由Intel公司定义(见可从加州Santa Clara的Intel购得的“微处理器”,Intel资料卷1与卷2,1992与1993)。结果,除了本发明的操作外,处理器109也能支持现有的X86操作。虽然本发明描述为加入到基于X86的指令集中的,但替代实施例可将本发明包含进其它指令集中。例如,可将本发明包含进使用新指令集的64位处理器中。
图2示出按照本发明的一个实施例的处理器的寄存器文件。寄存器文件150用来存储包含控制/状态信息、整数数据、浮点数据及分组数据在内的信息。在图2中所示的实施例中,寄存器文件150包含整数寄存器201、寄存器209、状态寄存器208及指令指针寄存器211。状态寄存器208指示处理器109的状态。指令指针寄存器211存储下一条要执行的指令的地址。整数寄存器201、寄存器209、状态寄存器209及指令指针寄存器211全都耦合在内部总线170上。任何附加寄存器也可耦合在内部总线170上。
在一个实施例中,寄存器209既用于分组数据也用于浮点数据。在一个这种实施例中,处理器109在任何给定时刻必须将寄存器209作为栈定位的浮点寄存器或非栈定位的分组数据寄存器之一对待。在这一实施例中,包含一个机制来允许处理器109在作为栈定位的浮点寄存器及非栈定位的分组数据寄存器的寄存器209上的操作之间切换。在另一个这种实施例中,处理器109可同时在作为非栈定位的浮点及分组数据寄存器的寄存器209上操作。作为另一示例,在另一实施例中,相同的这些寄存器可用来存储整数数据。
当然,可实现替代实施例来包含或多或少的寄存器组。例如,替代实施例可包含用来存储浮点数据的单独浮点寄存器组。作为另一示例,替代实施例可包含第一组寄存器,其分别用于存储控制/状态信息,及第二组寄存器,其分别能存储整数、浮点及分组数据。为了清楚起见,一个实施例的寄存器不应在意义上限制在特定类型的电路上。而是一个实施例的寄存器只须能存储及提供数据及执行这里描述的功能。
可将各种寄存器组(诸如整数寄存器201、寄存器209)实现成包含不同数目的寄存器与/或不同大小的寄存器。例如,在一个实施例中,整数寄存器201实现成存储32位,而寄存器209实现成存储80位(全部80位用来存储浮点数据,而只将64位用于分组数据)。此外,寄存器209包含8个寄存器,R0 212a至R7 212h。R1 212a、R2 212b及R3 212c为寄存器209中的各个寄存器的例子。可将寄存器209中的一个寄存器的32位传送到整数寄存器201中的一个整数寄存器中。类似地,可将整数寄存器中的值传送到寄存器209中的一个寄存器的32位中。在另一实施例中,整数寄存器201各包含64位,并且64位数据可在整数寄存器201与寄存器209之间传送。
图3为展示按照本发明的一个实施例的处理器处理数据的概括性步骤的流程图。即图3示出处理器109在分组数据上执行操作、在非分组数据上执行操作或执行某些其它操作时遵循的步骤。例如,这些操作中包含加载操作,用来自高速缓冲存储器160、主存储器104、只读存储器(ROM)106或数据存储设备107的数据加载寄存器文件150中的寄存器。
在步骤301,解码器165接收来自高速缓冲存储器160或总线101之一的控制信号。解码器165解码该控制信号来确定要执行的操作。
在步骤302,解码器165存取寄存器文件150或存储器中的单元。寄存器文件150中的寄存器或存储器中的存储单元是根据控制信号中指定的寄存器地址存取的.例如,对于分组数据上的操作,控制信号能包含SRC1、SRC2及DEST寄存器地址,SRC1是第一源寄存器的地址,SRC2是第二源寄存器的地址。在一些情况中,由于不是所有操作都需要两个源地址,SRC2地址是选用的。如果一种操作不需要SRC2地址,则只使用SRC1地址。DEST是存储结果数据的目的地寄存器的地址。在一个实施例中,SRC1或SRC2也用作DEST。相对于图6a与6b更全面地描述SRC1、SRC2及DEST。存储在对应寄存器中的数据分别称作Source1、Source2及Result。这些数据的各个的长度为64位。
在本发明的另一实施例中,SRC1、SRC2与DEST中任何一个或全部可定义处理器109可寻址的存储空间中的一个存储单元。例如,SRC1可标识主存储器104中的一个存储单元,而SRC2标识整数寄存器201中第一寄存器及DEST则标识寄存器209中第二寄存器。这里为了简化描述,将相对于存取寄存器文件150描述本发明。然而,这些存取也可对存储器进行。
在步骤303,启动执行单元130在存取的数据上执行操作。在步骤304,根据控制信号的要求,将结果存储回寄存器文件150中。
数据与存储格式
图4示出按照本发明的一个实施例的分组数据类型。示出了三种分组数据格式:分组字节401、分组字402及分组双字403。在本发明的一个实施例中,分组字节为包含8个数据元素的64位长。各数据元素为一个字节长。通常,数据元素为与相同长度的其它数据元素一起存储在单个寄存器(或存储单元)中的一个数据段。在本发明的一个实施例中,存储在一个寄存器中的数据元素数目为64位除以一个数据元素的位长度。
分组字402为64位长并包含4个字402数据元素。各字402数据元素包含16位信息。
分组双字403为64位长并包含两个双字403数据元素。各双字403数据元素包含32位信息。
图5a至5c示出按照本发明的一个实施例的寄存器分组数据存储表示。无符号分组字节寄存器表示510示出一个无符号分组字节401在寄存器R0 212a至R7 212h之一中的存储。各字节数据元素的信息存储在字节0的位7至位0中、字节1的位15至位8中、字节2的位23至位16中、字节3的位31至位24中、字节4的位39至位32中、字节5的位47至位40中、字节6的位55至位48中及字节7的位63至位56中。因此可以使用该寄存器中的所有可用位。这一存储布置提高了处理器的存储效率。同样,使用所存取的8个数据元素,可以同时在8个数据元素上执行一种操作。带符号分组字节寄存器表示511示出带符号分组字节401的存储。注意每一个字节数据元素的第8位为符号指示位。
无符号分组字寄存器表示512示出字3至字0是如何存储在寄存器209的一个寄存器中的。位15至位0包含字0的数据元素信息,位31至位16包含数据元素字1的信息,位47至位32包含数据元素字2的信息及位63至位48包含数据元素字3的信息。带符号分组字寄存器表示513类似于无符号分组字寄存器表示512。注意各字数据元素的第16位为符号指示位。
无符号分组双字寄存器表示514示出寄存器209如何存储两个双字数据元素。双字0存储在寄存器的位31至位0中。双字1存储在寄存器的位63至位32中。带符号分组双字寄存器表示515类似于无符号分组双字寄存器表示514。注意必要的符号位为双字数据元素的第32位。
如上所述,寄存器209既可用于分组数据也可用于浮点数据。在本发明的这一实施例中,可能需要单个编程处理器109来跟踪诸如R0 212a等被寻址的寄存器正存储分组数据还是浮点数据。在一个替代实施例中,处理器109可跟踪存储在寄存器209的各个寄存器中的数据的类型。如果例如试图在浮点数据上进行分组加法运算时,这一替代实施例便能产生出错。
控制信号格式
下面描述处理器109用来处理分组数据的控制信号格式的一个实施例。在本发明的一个实施例中,控制信号表示为32位。解码器165可从总线101接收控制信号。在另一实施例中,解码器165也能从高速缓冲存储器160接收这些控制信号。
图6a示出用于指示使用按照本发明的一个实施例的分组数据的控制信号格式。操作字段OP 601,位31至位26,提供关于处理器109要执行的操作的信息,例如,分组加法等。SRC1 602,位25至20,提供寄存器209中的寄存器的源寄存器地址。这一源寄存器包含要用在控制信号的执行中的第一分组数据Source1。类似地,SRC2 603,位19至位14,包含寄存器209中的寄存器地址。这一第二源寄存器包括要在操作的执行期间使用的分组数据Source2。DEST 605,位5至位0,包含寄存器209中的寄存器的地址。这一目的地寄存器将存储分组数据操作的结果分组数据Result。
控制位SZ 601,位12与位13,指示第一与第二分组数据源寄存器中的数据元素的长度。如果SZ 610等于012,则分组数据格式化成分组字节401。如果SZ 601等于102,则分组数据格式化成分组字402。SZ 610等于002或112是保留的,然而,在另一实施例中,可用这些值之一来指示分组双字403。
控制位T 611,位11,指示操作是否要以饱和模式进行。如果T 611等于1,则执行饱和操作。如果T 611等于0,则执行非饱和操作。稍后将描述饱和操作。
控制位S 612,位10,指示带符号操作的使用。如果S 612等于1,则执行带符号操作。如果S 612等于0,则执行无符号操作。
图6b示出按照本发明的一个实施例用于指示使用分组数据的第二控制信号格式。这一格式对应于可从Intel公司文献销售处(邮政信箱7641,Mt.prospect IL.60056-7641)购得的“Pentium处理器系列用户手册”中描述的通用整数操作码格式。注意,OP 601、SZ610、T611及S 612全部组合进一个大字段中。对于一些控制信号,位3至5为SRC1 602。在一个实施例中,其中存在SRC1 602地址,则位3至5也对应于DEST 605。在一个替代实施例中,其中存在SRC2 603地址,则位0至2也对应于DEST605。对于其它控制信号,象分组移位立即操作,位3至5表示操作码字段的扩展。在一个实施例中,这一扩展允许程序员用控制信号包含一个立即值,诸如移位计数值。在一个实施例中,立即值在控制信号后面。这在“Pentium处理器系列用户手册”附录F,F-1至F-3页中更详细地描述。位0至2表示SRC2 603。这一通用格式允许寄存器对寄存器、存储器对寄存器、寄存器被存储器、寄存器被寄存器、寄存器被立即数、寄存器对存储器的寻址。在一个实施例中,这一通用格式也能支持整数寄存器对寄存器及寄存器对整数寄存器的寻址。
饱和/非饱和的描述
如上所述,T 611指示操作是否可选择饱和。如果允许了饱和的操作结果上溢或下溢出数据的范围时,其结果将被箝位。箝位意味着如果结果超出范围的最大或最小值时,便将结果设定在最大或最小值上。在下溢的情况中,饱和将结果箝位到范围的最低值上,而在上溢的情况中,则到最高值上。表4中示出各数据格式的允许范围。
 表4
 
数据格式 最小值 最大值
无符号字节 0 255
带符号字节 -128 127
无符号字 0 65535
带符号字 -32768 32767
无符号双字 0 264-1
带符号双字 -263 263-1
如上所述,T 611指示正在执行饱和操作。因此,使用无符号字节数据格式,如果操作结果=258且允许饱和,则将结果存储到操作的目的地寄存器中之前将其箝位到255。类似地,如果操作结果=-32999且处理器109使用带符号字数据格式且允许饱和,则在将结果存储到操作的目的地寄存器中之前将其箝位到-32768上。
乘-加运算
在本发明的一个实施例中,SRC1寄存器包含分组数据(Source1),SRC2寄存器包含分组数据(Source2),而DEST寄存器将包含在Source1与Souce2上执行乘-加运算的结果(Result)。在乘-加运算的第一步中,将Source1的各数据元素独立地乘以Source2的对应数据元素以生成一组对应的中间结果。成对相加这些中间结果以生成乘-加运算的Result。
在本发明的一个实施例中,乘-加运算在带符号分组数据上操作并截位结果以防止任何上溢。此外,该运算在分组字数据上操作而Result为分组双字。然而,替代实施例能支持其它分组数据类型的运算。
图7为展示按照本发明的一个实施例在分组数据上执行乘-加运算的步骤的流程图。
在步骤701,解码器165解码处理器109接收的控制信号。从而,解码器165解码出:乘-加运算的操作码。
在步骤702,解码器165通过内部总线170存取寄存器文件150中给出SRC1 602与SRC2 603地址的寄存器209。寄存器209向执行单元130提供存储在SRC1寄存器中的分组数据(Source1)及存储在SRC2 603寄存器中的分组数据(Source2)。即,寄存器209通过内部总线170将分组数据传递给执行单元130。
在步骤703,解码器165启动执行单元130的乘-加单元145去执行指令。在步骤714中,执行下述操作。将Source1位15至0乘以Source2位15至0生成第一个32位中间结果(中间Result1)。将Source1位31至16乘以Source2位31至16生成第二个32位中间结果(中间Result2)。将Source1位47至32乘以Source2位47至32生成第三个32位中间结果(中间Result3)。将Source1位63至48乘以Source2位63至48生成第四个32位中间结果(中间Result4)。将中间Result1与中间Result2相加生成Result位31至0,并将中间Result3与中间Result4相加生成Result位63至32。
不同的实施例可串行、并行或以串行与并行运算的一定组合执行乘与加。
在步骤720,将Result存储在DEST寄存器中。
分组数据乘-加电路
在一个实施例中,能在与非组装数据上的单一乘法相同的时钟周期中在多个数据元素上执行乘-加运算。为了达到在相同的时钟周期数中的执行,采用了并行性。即,同时指示寄存器在数据元素上执行乘-加运算。
简言之,图8示出按照本发明的一个实施例在分组数据上执行乘-加运算的电路。运算控制800处理乘-加指令的控制信号。运算控制在使能880上输出信号来控制分组乘-加法器801。
分组乘-加法器801具有下述输出:Source1[63:0]831、Source2[63:0]833及使能880。分组乘-加法器801包含4个16×16乘法器电路:16×16乘法器A 810、16×16乘法器B811、16×16乘法器C 812及16×16乘法器D 813。16×16乘法器A810具有输入Source1[15:0]及Source2[15:0]。16×16乘法器B 811具有输入Source1[31:16]及Source2[31:16]。16×16乘法器C 812具有输入Source1[47:32]及Source2[47:32]。16×16乘法器D 813具有输入Source1[63:48]及Source2[63:48]。加法器1350接收16×16乘法器A810及16×16乘法器B 811生成的32位中间结果,同时加法器851接收16×16乘法器C 812及16×16乘法器D813生成的32位中间结果。
加法器850与851将它们各自的32位输入相加。加法器850的输出(即Result的Result位31至0)及加法器851的输出(即Result的位63至32)组合成64位Result并传递给结果寄存器871。
在一个实施例中,各加法器851与加法器850由带适当传播延时的32位加法器构成。然而替代实施例可用任何一种方式实现加法器851与加法器850。
使用参照表1所描述的先有技术DSP处理器执行这一乘-加指令的等效操作需要一条指令来清零累加值及四条乘累加指令。使用参照表2描述的先有技术DSP处理器执行这一乘-加指令的等效操作需要一条指令来清零累加值及2条累加指令。
在本发明的乘-加单元145的一个实施例中,在本发明中用于分组乘法运算的各16位乘法器是用2位Booth算法实现的,乘法器中的Booth算法的主要目的是减少要相加的部分乘积的数目。较少的部分乘积最终减少乘法器的硬件与面积需求。下面表5描述在其中生成16个部分乘积的普通16位乘法过程。取决于乘数的相应位是“1”还是“0”,将各部分乘积向左移位一位并包含全“0”项或被乘数的完全复制。通过逐片相加全体16个部分乘积生成32位结果。
                         表5
Figure C03120299D00231
另一方面,下面表6中所示的2位Booth乘法器的操作不同。在这一情况中总共有8个部分乘积及每个部分乘积为17位长。每一部分乘积具有其本身的控制各自的部分乘积内容的Booth编码器。在替代实施例中,也能使用其它Booth编码器方案来选择部分乘积。
典型的2位Booth编码器具有五个输出,它们用于0、加1、加2、减1及减2运算。其真值表在下面的表6中给出。
                表6
Figure C03120299D00241
如表6中所述,yk+1、yk及yk-1是递降的位次序的相邻乘数位。下面的表7进一步描述按照Booth编码器输出的部分乘积的形式。
                            表7
Figure C03120299D00251
不是采用符号延伸部分乘积,而是采用符号生成法来减少部分乘积缩短所需的进位同一地址(Carry Same Address(CSA))的数目。表8示出了符号生成方法。将部分乘积的符号位的补码预挂在部分乘积上。然后将两个1位预挂在符号位的补码上。
                        表8
符号延伸法                       符号生成法
                                      1
S1 S1 S1部分乘积1                   1 S1部分乘积
1
S2 S2部分乘积2                 1 S2部分乘积2
部分乘积3                  1 S3部分乘积3
下面的表9示出用在使用2位Booth编码器及符号生成法来生成8个部分乘积的本发明的一个实施例中的16位乘法过程。
                           表9
Figure C03120299D00261
在一个实施例中,各Booth编码器包含3个相邻的乘数位(y0为乘数位的最低位而y15为最高位)。部分乘积的形式是用连接在特定Booth编码器上的17个选择器及一个求反电路定义的。选择器的数据位中包含两个相邻的乘数位、它们的补码及Vcc(对于0运算)。然后选中的输出通过通常称作Wallace树的部分乘积归约树的迷宫。
一旦全部选择了部分乘积,便开始部分乘积的求和。Wallace树是用全加法器及半加法器构成的。图9a-9e示出本发明的一个实施例的执行部分乘积求和与归约的Wallace树,如用乘-加单元145中的4个16位乘法器的每一个所实现的。如上所示,将8个部分乘积归约成6个部分乘积,然后成4个部分乘积,然后成3个部分乘积,然后最终归约成两个部分乘积。
更具体地,如图9a-9e中所示,各行中的下标数字表示部分乘积的位(ase15,as15,a14-a0)。各行表示一个独立的部分乘积。negn-nega表示各部分乘积的2的补码的+1部分。结果,如果乘数的某一Booth编码的位是负的,显示在下一行中的该对应部分乘积的“neg”位为1。
此外,如图9a-9e中进一步示出的,S<位置><加法器号>表示进位保留加法器的和部分。<加法器号>指示和属于哪一行加法器。加法器是从图9a-9e的顶到底编号的。<位置>指示这一加法器运算的位位置(0...31)。例如,S42为对应于位位置4的进位保留加法器2的和。
C<位置><级>表示保留进位加法器的进位部分。<级>指示该进位的各加法器行。<位置>指示这一加法器运算的位位置(0...31)。保留进位加法器可以是全加法器或半加法器。全加法器将3位相加。半加法器相加两位。
图9a-9e进一步示出上述符号生成方法的实现。如所示,符号生成法在第一部分乘积行上方的行中的位位置16上产生一个1。在最后部分乘积行中,如果最高Booth编码数是负的,便在下面行中产生一个1,因为该部分乘积是2的补码。这一过程通常需要10行而不是8行。乘法需要的行越多,越需要更多的硬件来将部分乘积减少到一个进位传播加法器能相加的两个数。
然而,二进制乘法是通过加法执行的。将两个数字相加时,数字的次序是无关的。不管哪一个数字作为第一数字结果都一样。这一原理贯穿整个Wallace树以减少所需的进位保留数目。具体地,在一个实施例中,将图9a中第一行的位位置16中的1向下移动到图9的最后一行中的位位置16上,它也包含negh.结果,由于使用了较少的行而进行归约所需的硬件也较少。
图9b示出第一级归约的结果。框指示哪些位在保留进位加法器中运算。来回移动若干位来符合6行中的所有位。例如,将位dse15移至第一行。将cse15移至第五行。然而,一位只能在同一位位置中上下移动。从图9b至图9c行数减少到4。从图9c到图9e行数减少到3。最后,又一行保留进位加法器将行数减少到2,如图9e中所示。
图10a-10f示出电路的一个实施例,该电路由全加法器与半加法器构成,实现图9a-9e中所示的Wallace树图。
图11示出该单元的方框图的一个实施例。其中示出了两个完全相同的16位乘法器。这些乘法器能在0-31位或32-63位上执行乘-加运算。还提供了另外两个16位乘法器,它们在结构上与所示的乘法器十分相似,用来完成乘-加单元145。如所示,各乘法器在1.5个时钟周期中完成一次16位乘法得出2个部分乘积。在后半个时钟周期中,即第34时钟的低相位,由4:2CSA1130将乘法器1110与1120生成的4个部分乘积再度相加。控制信号1150选择乘法器1110的部分乘积或在4:2CSA1130的输出上生成的部分乘积(Sumres与coutres)。将选中的数据与乘法器1120的部分乘积一起锁存。在第35个时钟的高相位上,CPA1140通过相加得出的部分乘积生成一个32位结果。32位和的最后分割是由fub外部的多路锁存器完成的并将所选择的数据在第35时钟周期的低相位写回。
在一个实施例中,乘-加单元145以3个等待时间-1个吞托量规则操作。除非另有说明,单元145每当将一个非流水线的数据流引导到输入上时需要3个时钟周期来完成其任务。单元145的所有输入都是缓冲存储的,这对外部世界提供非常小的容量。
即使在32L开始时在单元145的输入上能得到数据,在33H开始前数据可能是无效的。因此,假定乘法是在33H开始时启动的。在33H期间被乘数输入上的有效与稳定数据流经延时元件并分别被锁存器1160与1170锁存。与此同时,乘数输入上的数据传播通过输入缓冲器及Booth编码器1165与1175并被锁存器1180与1182锁存。此时,乘数与被乘数路径上的数据是完全互相同步的。在331中,数据通过位选择器阵列及一组全加法器,它构成Wallace树的第一部分并在锁存器1180与1182的建立时间之前成为有效的。在这一点上的部分乘积数从8减少到4。在34H中,数据通过构成Wallace树的其余部分的另一组全加法器,并在被锁存器1184与1186锁存以前在34H结束时成为有效与稳定的。
如上所述,在34L中数据通过4:2压缩器1130(两个串联的全加法器)及一个2:1多路复用器1135用于最后的部分乘积选择。数据在被锁存器1190锁存之前在34L结束时成为有效的。在35H期间,在锁存器1190输出上的两个部分乘积最终被归约成一个和矢量。这一和矢量被单元145外部的多路锁存边界-锁存器1195分成数部份与锁存。在35L中,数据能用于写回操作。
如上所述,前面的乘累加指令总是将它们的乘法结果加在累加值上。这一累加值成为执行乘与累加以外的操作的瓶颈(例如,在每次需要并不要求前面的累加值的一组新的操作时,必须清除该累加值)。如果在累加之前需要执行诸如四舍五入等操作时,这一累加值也成为瓶颈。
相反,所公开的乘-加操作并不将累加值向前带。结果,在更广的各种算法中更容易使用这些指令。此外,可利用软件流水作业来达到相当的吞吐量。为了展示乘-加指令的通用性,下面描述多媒体算法的一些示例。这些多媒体算法中的一些采用另外的分组数据指令。这些另外的分组数据指令的操作是相对于所描述的算法示出的。对于这些分组数据指令的进一步描述,见名称为“在分组数据上操作的指令集”的申请。当然,也能使用其它分组数据指令。此外,在下面的示例中已省略了需要使用通用处理器指令来管理数据传送、循环及条件转移的若干步骤。
1)复数乘法
所公开的乘-加指令能用来在单一的指令中将两个复数相乘,如表10a中所示。如上所述两个复数(诸如r1i1与r2i2)的乘法是按照下述公式执行的:
实部=r1·r2-i1·i2
虚部=r1·i2+r2·i1
如将这一指令实现为在每一时钟周期中完成,本发明便能在每一时钟周期中乘两个复数。
                    表10a
Figure C03120299D00301
作为另一示例,表10b示出用来将三个复数相乘的指令。
                     表10b
Figure C03120299D00311
2)乘累加运算
所公开的乘-加指令也能用来乘与累加值。例如,可将两组四个元素(A1-4及B1-4)相乘及累加,如下面表11中所示。在一个实施例中,将表6中所示各指令实现成在每一时钟周期中完成。
                     表11
Figure C03120299D00312
Figure C03120299D00321
如果各组中的数据元素数目超过8且为4的倍数,如果如下面表12中所示那样执行的话,这些组的乘法与累加需要较少的指令。
                 表12
Figure C03120299D00322
Figure C03120299D00331
作为另一示例,表13示出组A与B以及组C与D的单独的乘法与累加,其中这些组中每一个包含2个数据元素。
                     表13
Figure C03120299D00341
作为另一示例,表14示出组A与B以及组C与D的单独的乘法与累加,其中这些组中每一个包含4个数据元素。
                       表14
Figure C03120299D00342
3)点积算法
点积(也称内积)用在信号处理及短阵运算中。例如,在计算矩阵的积、数字滤波运算(诸如FIR与IIR滤波)及计算相关序列时使用点积。由于许多话音压缩算法(如GSM、G.728、CELP及VSELP)及高保真压缩算法(诸如MPEG及子带编码)广泛地利用数字滤波及相关计算,提高点积的性能便提高这些算法的性能。
两个长度为N的序列A与B的点积定义为:
Figure C03120299D0035184509QIETU
执行点积计算广泛地利用乘累加运算,在其中将各序列的对应元素相乘,并累加这些结果以形成点积结果。
点积计算能用乘-加指令执行。例如,如果使用包含4个16位元素的分组数据类型,便可按下列步骤在各包含4个值的两个序列上执行点积计算:
1)使用传送指令从A序列中取4个16位值以生成Source1;
2)使用传送指令从B序列中取4个16位值以生成Source2;以及
3)使用乘-加、分组加法及移位指令如上所述执行乘与累加。
对于只有数个元素的矢量,使用表9中所示的方法,并在最后,将最终结果相加。其它支持指令包含用于初始化累加器寄存器的分组“或”与“异或”指令,用于在计算的最终阶段移出不需要的值的分组移位指令。循环控制操作使用处理器109的现成指令集中的指令完成。
4)离散余弦变换算法
离散余弦变换(DCT)为用在许多信号处理算法中的著名函数。尤其是视频与图象压缩算法广泛地利用这一变换。
在图象与视频压缩算法中,利用DCT将一块象素从空间表示变换到频率表示。在频率表示中,将画面信息分成频率分量,一些分量比其它分量更重要。压缩算法有选择地量化或丢弃对重构的画面内容并无不利影响的频率分量。以这一方式,达到压缩的目的。
DCT有许多实现方法,最流行的是基于快速傅里叶变换(FFT)计算流程建模的某种快速变换法.在该快速变换中,将N阶变换分解成N/2阶变换的组合,并重新组合其结果。这一分解一直可进行到到达最小的2阶变换为止。这一基本2阶变换核通常称作蝶式运算。蝶式运算表示如下:
X=a*x+b*y
Y=c*x-d*y
其中a、b、c与d称作系数,x与y为输入数据,而X与Y为变换输出。
乘-加允许以下述方式利用分组数据执行DCT计算:
1)使用传送与分解指令取两个表示x与y的16位值以生成Source1(见下面表15);
2)生成下面表15中所示的Source2--注意在数次蝶式运算上可以重复使用Source2;以及
3)利用Source1与Source2执行乘-加指令以生成结果(见下面表15)。
            表15
Figure C03120299D00361
在某些情况中,蝶式运算的系数为1。对于这些情况,蝶式运算退化成只是加与减,它们可用分组加法与分组减法指令执行。
一份IEEE文件规定为电视会议执行的逆DCT应有的精度。(见IEEE电路与系统协会,“实现8×8逆离散余弦变换的IEEE标准规范”,IEEE std.1180-1990,IEEE Inc.,345 East 47th St.NY,NY10017,USA,1991年3月18日)。所公开的乘-加指令满足所要求的精度,因为它使用16位输入生成32位输出。
以这一方式,所述乘-加指令能用来增进若干不同算法的性能,其中包含需要复数乘法的算法、需要变换的算法及需要乘累加运算的算法。结果,这一乘-加指令能用在通用处理器中来增进比上述指令更多数量的算法的性能。
虽然已对若干实施例描述了本发明,熟悉本技术的人员将认识到本发明不限于所述实施例.本发明的方法与装置能用所附权利要求书的精神与范围内的修改与改变来实现.从而,应认为本说明书是示例性的而不是对本发明的限制。

Claims (23)

1.一种根据第一指令对数据执行运算的方法,包括以下步骤:
接收所述第一指令,所述第一指令的指令格式包括第一操作码、第一字段和第二字段,所述第一字段表示具有第一分组数据的第一存储器区,第一分组数据具有至少包括A1、A2、A3和A4作为数据元素的第一多个数据元素,所述第二字段表示具有第二分组数据的第二存储器区,第二分组数据具有至少包括B1、B2、B3和B4作为数据元素的第二多个数据元素,所述第一和第二多个数据元素中的每个所述数据元素长度都为以位数表示的第一长度;及
通过执行(A1×B1)+(A2×B2)运算以产生第三分组数据的第一数据元素,并执行(A3×B3)+(A4×B4)运算以产生所述第三分组数据的第二数据元素,从而对所述第一指令作出响应,把位数长度至少为所述第一长度4倍的所述第三分组数据存储在目标存储器区中,其中每个所述第一和第二数据元素的位数长度至少为所述第一长度的2倍。
2.如权利要求1所述的方法,其特征在于,所述第一指令是乘-加指令。
3.如权利要求1或2所述的方法,其特征在于,所述存储包括在目标存储器区中的存储,该目标存储器区也用作第一多个数据元素的存储器区。
4.如权利要求1所述的方法,其特征在于,所述目标存储器区由所述第一字段来表示。
5.如权利要求4所述的方法,其特征在于,所述第一字段为所述第一指令的位3-5。
6.如权利要求5所述的方法,其特征在于,所述第二字段为所述第一指令的位0-2。
7.如权利要求1-2中任何一项权利要求所述的方法,其特征在于,所述第一和第二数据元素的每一个的长度为32位。
8.如权利要求1-2中任何一项权利要求所述的方法,所述第一多个数据元素还包括A5、A6、A7和A8作为数据元素,所述第二多个数据元素还包括B5、B6、B7和B8作为数据元素,所述方法还包括以下步骤:
执行(A5×B5)+(A6×B6)运算以产生所述第三分组数据的第三数据元素,执行(A7×B7)+(A8×B8)运算以产生所述第三分组数据的第四数据元素。
9.如权利要求1-2中任何一项权利要求所述的方法,其特征在于还包括以下步骤:
从作为第一字段所表示的第一存储器区的第一寄存器中取所述第一多个数据元素;及
在所述第一寄存器中将所述第三分组数据覆盖所述第一多个数据元素而存储所述第三分组数据。
10.如权利要求9所述的方法,其特征在于还包括以下步骤:
从作为第二字段所表示的第二存储器区的第二寄存器中取所述第二多个数据元素。
11.如权利要求9所述的方法,其特征在于还包括以下步骤:
从作为第二字段所表示的第二存储器区的存储器存储单元中取所述第二多个数据元素。
12.一种执行如权利要求1、2、4、5和6中任何一项权利要求所述的根据第一指令对数据执行运算的方法的处理器,所述处理器包括:
第一存储单元,它存储所述第一多个数据元素;
第二存储单元,它存储所述第二多个数据元素;
解码器,它存取所述第一和第二存储单元;
第三存储单元,它存储表示至少一个指令的数据并提供所述至少一个指令给所述解码器;
功能单元,用来与所述解码器连接,所述解码器和所述功能单元至少部分地对包含所述第一指令的所述至少一个指令作出响应,执行如权利要求1、2、4、5和6中任何一项权利要求所述的根据第一指令对数据执行运算的方法。
13.一种处理器,包括:
第一和第二存储单元,它们分别存储第一分组数据和第二分组数据,其中每一个分组数据都包括四个初始数据元素,所述第一分组数据中的每个所述初始数据元素对应于所述第二分组数据中的不同初始数据元素,以产生四对初始数据元素,
解码器,它对第一指令进行解码,所述第一指令将所述第一和第二存储单元分别指定为第一和第二地址,及
与所述第一和第二存储单元以及所述解码器连接的电路,所述电路对所述第一指令作出响应,将所述第一和第二分组数据中的对应初始数据元素一起相乘,以产生对应的中间数据元素,所述中间数据元素配对成两组,
将所述两组的每一组中的中间数据元素相加,以产生两个结果数据元素,所述两个结果数据元素中的每一个都比所述初始数据元素具有更多位,并把包括所述两个结果数据元素的第三分组数据作为执行所述第一指令的结果而存储在单个寄存器中。
14.如权利要求13所述的处理器,其特征在于,所述第一指令的格式为位3至5是第一地址,而位0至2是第二地址。
15.如权利要求14所述的处理器,其特征在于,所述第一地址也用作第三分组数据的目标地址。
16.如权利要求13-15中任何一项权利要求所述的处理器,其特征在于,所述第二地址对应于存储器中可寻址存储单元。
17.如权利要求16所述的处理器,其特征在于,所述第二地址也用作第三分组数据的目标地址。
18.如权利要求14-15中任何一项权利要求所述的处理器,其特征在于,所述电路把所述第三分组数据存储到对应于所述第一地址的单个寄存器中。
19.如权利要求13所述的处理器,其特征在于,所述第一指令的格式包括表示所述第一地址的第一字段、表示所述第二地址的第二字段、和表示存储所述第三分组数据的目标地址的第三字段。
20.如权利要求13、14、15和19中任何一项权利要求所述的处理器,其特征在于还包括:
保存所述第一指令的存储器;和
与所述存储器和所述处理器连接的总线;
其中,每个结果数据元素包括的位数为每个初始数据元素的两倍。
21.如权利要求13、14、15和19中任何一项权利要求所述的处理器,其特征在于所述电路包括:
与第一和第二乘法器连接的第一保留进位加法器,所述第一和第二乘法器将第一和第二对应初始数据元素一起相乘,所述第一保留进位加法器接收所述第一乘法器产生的两个部分乘积和所述第二乘法器产生的两个部分乘积,所述第一保留进位加法器为所述两个结果数据元素中的第一结果数据元素产生第一组两个部分乘积;及
与第三和第四乘法器连接的第二保留进位加法器,所述第三和第四乘法器将第三和第四对应初始数据元素一起相乘,所述第二保留进位加法器接收所述第三乘法器产生的两个部分乘积和所述第四乘法器产生的两个部分乘积,所述第二保留进位加法器为所述两个结果数据元素中的第二结果数据元素产生第二组两个部分乘积。
22.一种用于处理指令的系统,所述系统包括:
存储包括第一多个分组数据元素的第一分组数据和包括第二多个分组数据元素的第二分组数据的存储器,其中,所述第一多个等于所述第二多个,并且所述第一和第二分组数据的每个数据元素具有多个位;
处理器,它与所述存储器连接,以存取所述第一和第二分组数据,并响应指令而产生包括第三多个分组数据元素的第三分组数据,第一格式的所述指令用于识别与所述第一分组数据对应的第一源和与所述第二分组数据对应的第二源,所述第三多个分组数据元素中的每一个分组数据元素表示由所述第一和第二多个分组数据元素中对应数据元素相乘的成对乘积之和,其中,所述第三多个为所述第一多个的一半;以及
总线,它连接到所述处理器,以向所述处理器或从所述处理器传送数据,并向所述存储器或从所述存储器传送数据;以及
接口,它将所述总线与用于语音记录和语音播放至少之一的设备连接。
23.如权利要求22所述的系统,其特征在于,所述第一多个分组数据元素包括第一个、第二个、第三个和第四个数据元素。
CNB031202993A 1995-08-31 1996-08-07 根据指令对数据执行运算的方法、处理器和系统 Expired - Lifetime CN100465874C (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US522067 1983-08-10
US08/522,067 US6385634B1 (en) 1995-08-31 1995-08-31 Method for performing multiply-add operations on packed data
US08/606,212 US6035316A (en) 1995-08-31 1996-02-23 Apparatus for performing multiply-add operations on packed data
US606212 1996-02-23

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN96197836A Division CN1107905C (zh) 1995-08-31 1996-08-07 在分组数据上执行乘-加运算的装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CNB2006100025714A Division CN100461093C (zh) 1995-08-31 1996-08-07 在分组数据上执行乘-加运算的方法、处理器、设备和系统

Publications (2)

Publication Number Publication Date
CN1549106A CN1549106A (zh) 2004-11-24
CN100465874C true CN100465874C (zh) 2009-03-04

Family

ID=27060694

Family Applications (2)

Application Number Title Priority Date Filing Date
CNB031202993A Expired - Lifetime CN100465874C (zh) 1995-08-31 1996-08-07 根据指令对数据执行运算的方法、处理器和系统
CN96197836A Expired - Lifetime CN1107905C (zh) 1995-08-31 1996-08-07 在分组数据上执行乘-加运算的装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN96197836A Expired - Lifetime CN1107905C (zh) 1995-08-31 1996-08-07 在分组数据上执行乘-加运算的装置

Country Status (15)

Country Link
EP (1) EP0847552B1 (zh)
JP (2) JP3750820B2 (zh)
CN (2) CN100465874C (zh)
AU (1) AU717246B2 (zh)
BR (1) BR9610285A (zh)
CA (1) CA2230108C (zh)
DE (1) DE69624578T2 (zh)
HK (1) HK1012513A1 (zh)
HU (1) HUP9900030A3 (zh)
IL (1) IL123241A (zh)
MX (1) MX9801571A (zh)
NO (1) NO317739B1 (zh)
PL (1) PL325231A1 (zh)
RU (1) RU2139564C1 (zh)
WO (1) WO1997008610A1 (zh)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6609143B1 (en) 1998-01-21 2003-08-19 Matsushita Electric Industrial Co., Ltd Method and apparatus for arithmetic operation
US7395302B2 (en) 1998-03-31 2008-07-01 Intel Corporation Method and apparatus for performing horizontal addition and subtraction
US7392275B2 (en) 1998-03-31 2008-06-24 Intel Corporation Method and apparatus for performing efficient transformations with horizontal addition and subtraction
WO2000068783A2 (en) * 1999-05-12 2000-11-16 Analog Devices, Inc. Digital signal processor computation core
JP4136432B2 (ja) * 2002-04-15 2008-08-20 松下電器産業株式会社 図形描画装置
CN1310130C (zh) * 2003-03-12 2007-04-11 中国科学院声学研究所 一种乘法器的重构运算方法及可重构乘法器
US7424501B2 (en) 2003-06-30 2008-09-09 Intel Corporation Nonlinear filtering and deblocking applications utilizing SIMD sign and absolute value operations
US8386553B1 (en) 2006-12-05 2013-02-26 Altera Corporation Large multiplier for programmable logic device
US7930336B2 (en) * 2006-12-05 2011-04-19 Altera Corporation Large multiplier for programmable logic device
US7995845B2 (en) * 2008-01-30 2011-08-09 Qualcomm Incorporated Digital signal pattern detection and classification using kernel fusion
US8959137B1 (en) 2008-02-20 2015-02-17 Altera Corporation Implementing large multipliers in a programmable integrated circuit device
US8103858B2 (en) * 2008-06-30 2012-01-24 Intel Corporation Efficient parallel floating point exception handling in a processor
US8239442B2 (en) * 2008-08-08 2012-08-07 Analog Devices, Inc. Computing module for efficient FFT and FIR hardware accelerator
CN101706712B (zh) * 2009-11-27 2011-08-31 北京龙芯中科技术服务中心有限公司 浮点向量乘加运算装置和方法
CN102541814B (zh) * 2010-12-27 2015-10-14 北京国睿中数科技股份有限公司 用于数据通信处理器的矩阵计算装置和方法
US8909687B2 (en) * 2012-01-19 2014-12-09 Mediatek Singapore Pte. Ltd. Efficient FIR filters
DE102013209657A1 (de) * 2013-05-24 2014-11-27 Robert Bosch Gmbh FMA-Einheit, insbesondere zur Verwendung in einer Modellberechnungseinheit zur rein hardwarebasierten Berechnung von Funktionsmodellen
CN103677739B (zh) * 2013-11-28 2016-08-17 中国航天科技集团公司第九研究院第七七一研究所 一种可配置的乘累加运算单元及其构成的乘累加运算阵列
DE112014006508T5 (de) * 2014-03-26 2017-01-05 Intel Corporation Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
RU2562411C1 (ru) * 2014-12-10 2015-09-10 Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Кубанский государственный технологический университет" (ФГБОУ ВПО "КубГТУ") Устройство для вычисления модуля комплексного числа
RU2653310C1 (ru) * 2017-05-24 2018-05-07 федеральное государственное бюджетное образовательное учреждение высшего образования "Воронежский государственный университет" (ФГБОУ ВО "ВГУ") Устройство для умножения числа по модулю на константу
CN109117114B (zh) * 2018-08-16 2023-06-02 电子科技大学 一种基于查找表的低复杂度近似乘法器
US20220019407A1 (en) * 2020-07-14 2022-01-20 Taiwan Semiconductor Manufacturing Company, Ltd. In-memory computation circuit and method
CN113010146B (zh) * 2021-03-05 2022-02-11 唐山恒鼎科技有限公司 一种混合信号乘法器
CN113076083B (zh) * 2021-06-04 2021-08-31 南京后摩智能科技有限公司 数据乘加运算电路

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN85107063A (zh) * 1985-09-27 1987-01-31 耿树贵 整数多功能叠接单元的阵列乘法器
US4771379A (en) * 1985-10-23 1988-09-13 Mitsubishi Denki Kabushiki Kaisha Digital signal processor with parallel multipliers
EP0308124A2 (en) * 1987-09-14 1989-03-22 Visual Information Technologies, Inc. High speed image processing computer
CN1047152A (zh) * 1989-04-26 1990-11-21 德克萨斯仪器股份有限公司 高速数字处理器
JPH0612236A (ja) * 1992-06-25 1994-01-21 Canon Inc 整数上の乗算回路及び乗算方法
US5442799A (en) * 1988-12-16 1995-08-15 Mitsubishi Denki Kabushiki Kaisha Digital signal processor with high speed multiplier means for double data input

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN85107063A (zh) * 1985-09-27 1987-01-31 耿树贵 整数多功能叠接单元的阵列乘法器
US4771379A (en) * 1985-10-23 1988-09-13 Mitsubishi Denki Kabushiki Kaisha Digital signal processor with parallel multipliers
EP0308124A2 (en) * 1987-09-14 1989-03-22 Visual Information Technologies, Inc. High speed image processing computer
US5442799A (en) * 1988-12-16 1995-08-15 Mitsubishi Denki Kabushiki Kaisha Digital signal processor with high speed multiplier means for double data input
CN1047152A (zh) * 1989-04-26 1990-11-21 德克萨斯仪器股份有限公司 高速数字处理器
JPH0612236A (ja) * 1992-06-25 1994-01-21 Canon Inc 整数上の乗算回路及び乗算方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Graphics Processing with the 88110 RISC Microprocessor. Juile Shipnes.Compcon Spring '92.Thirty-Seventh IEEE Computer Society International Conference,Digest of Papers.. 1992 *

Also Published As

Publication number Publication date
JP3750820B2 (ja) 2006-03-01
DE69624578T2 (de) 2003-09-04
HUP9900030A3 (en) 1999-11-29
NO317739B1 (no) 2004-12-13
DE69624578D1 (de) 2002-12-05
NO980873L (no) 1998-04-28
CN1200821A (zh) 1998-12-02
CA2230108A1 (en) 1997-03-06
IL123241A (en) 2001-10-31
EP0847552A1 (en) 1998-06-17
HK1012513A1 (en) 1999-08-06
JP4064989B2 (ja) 2008-03-19
IL123241A0 (en) 1998-09-24
CN1107905C (zh) 2003-05-07
NO980873D0 (no) 1998-02-27
BR9610285A (pt) 1999-03-16
RU2139564C1 (ru) 1999-10-10
AU717246B2 (en) 2000-03-23
EP0847552B1 (en) 2002-10-30
JPH11511577A (ja) 1999-10-05
MX9801571A (es) 1998-05-31
JP2006107463A (ja) 2006-04-20
HUP9900030A2 (hu) 1999-04-28
WO1997008610A1 (en) 1997-03-06
CA2230108C (en) 2000-12-12
CN1549106A (zh) 2004-11-24
AU6951196A (en) 1997-03-19
EP0847552A4 (en) 2000-01-12
PL325231A1 (en) 1998-07-06

Similar Documents

Publication Publication Date Title
CN100461093C (zh) 在分组数据上执行乘-加运算的方法、处理器、设备和系统
CN100465874C (zh) 根据指令对数据执行运算的方法、处理器和系统
CN100380312C (zh) 在分组数据上操作的指令集
US5859997A (en) Method for performing multiply-substrate operations on packed data
US5835392A (en) Method for performing complex fast fourier transforms (FFT&#39;s)

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1072989

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1072989

Country of ref document: HK

CX01 Expiry of patent term

Granted publication date: 20090304

EXPY Termination of patent right or utility model