CN1309347A - 具有改良的指令集体系结构的微处理器 - Google Patents

具有改良的指令集体系结构的微处理器 Download PDF

Info

Publication number
CN1309347A
CN1309347A CN00133915.XA CN00133915A CN1309347A CN 1309347 A CN1309347 A CN 1309347A CN 00133915 A CN00133915 A CN 00133915A CN 1309347 A CN1309347 A CN 1309347A
Authority
CN
China
Prior art keywords
instruction
circuit
src2
register
group
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.)
Granted
Application number
CN00133915.XA
Other languages
English (en)
Other versions
CN1194292C (zh
Inventor
大卫·侯利
贾瑞米E·构司顿
乔塞夫R·兹比克
维沙·马坎迪
劳伦斯R·西马二世
艾瑞克J·史脱责
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.)
Texas Instruments Inc
Original Assignee
Texas Instruments Inc
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
Application filed by Texas Instruments Inc filed Critical Texas Instruments Inc
Publication of CN1309347A publication Critical patent/CN1309347A/zh
Application granted granted Critical
Publication of CN1194292C publication Critical patent/CN1194292C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • 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
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3555Indexed addressing using scaling, e.g. multiplication of index
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Debugging And Monitoring (AREA)

Abstract

位于含微处理器和外围装置的集成电路之上的数据处理系统具有仿真单元,在连接至外部测试系统时,该仿真单元允许调试及仿真集成电路。微处理器具有含若干执行阶段的指令执行流水线,它未受到保护以致对于数据存储器和临时文件的存储器存取延迟均可由存储于指令存储器内的系统程序代码加以利用;多字段算术/逻辑单元电路用于操作一组源操作数;多字段乘法电路用于操作一组源操作数;指令集体系结构针对密集数字算法处理予以最佳化。

Description

具有改良的指令集体系结构的微处理器
(C)2000年著作权德州仪器公司。本专利文件所揭示的内容受到著作权的保护。该著作权所有人不反对任何人于专利及商标局专利文件或记录中对本专利说明书进行复制再造,除此之外,均保留所有权利。
本申请案主张依据35 USC§119(e)(1)对于2000年2月18日所申请的临时申请案60/183,527(TI-30302PS)以及于1999年11月5日所申请的临时申请案60/165,512(TI-29909PS)之优先权。
本发明涉及数种数据处理装置、电子处理及控制系统,以及其制造和运作方法,具体地说,系涉及用于数字信号最佳化处理的微处理器。
一般而言,微处理器是结合计算机指令处理、算术、和逻辑运算于单一半导体集成电路之上的一种电路。微处理器可分为两大类,主要分为一般用途微处理器和特殊用途微处理器。一般用途微处理器系设计成可由使用者程序化,以执行范围广泛的工作,因此通常用来作为譬如像个人计算机等设备的中央处理单元(CPU)。相对地,特殊用途微处理器,系用来改良使用者所希望使用之微处理器的特定算术和逻辑功能之执行效能了解微处理器的主要功能之后,设计者可建构出一种微处理器体系结构,是使特殊用途微处理器特定功能的执行效能,大幅超越一般用途微处理器的同等功能,而不管程序是否由使用者所建置。
可由特殊用途微处理器以极高的改良速度执行的这类功能之一,为数字信号处理功能。数字信号处理功能通常涉及信号的呈现、传输和操控,利用数字技术和一种称为数字信号处理器(DSP)的特殊用途微处理器。典型的数字元信号处理通常需要处理大量的数据,且数字信号处理器是为有效执行密集运算以及执行与这类数据处理有关的存储器存取最佳化所设计的。例如,计算快速傅利叶变换(Fast Fourier Transforms,FFT),以及建置需要不断重复运算(例如像乘法、加法以及多位移位)的数字过滤器。DSP特别适合用于重复性的功能,并较一般用途微处理器的执行效能明显改善很多,例如应用到像影像和语音处理等实时应用装置时。
DSP是目前许多电子产品的重要零件,例如高速调制解调器、高密度盘片驱动器、数字元行动电话、复杂的自动推进系统、以及电视会议(video-conferencing)设备。在未来,DSP还将应用到更广泛的数字系统上,像影像电话、网络处理、自然语言接口、和超高速调制解调器等。因为消费者要求效能更好的数字产品,且由于通讯、计算机、和消费性产业的结合,创造出更新的数字产品,使得将DSP应用到各式装置的需求与日剧增。
微处理器设计师更不断探究并行处理化的作法,以求进一步改善执行效能。有一种用于调制解调器微处理器的并行处理(parelle1)体系结构,就是利用具有多功能单元的多指令取数据组和多指令执行数据组来达成。
在单一集成电路上的数字系统被称为应用特殊集成电路(ASIC)。并利用MegaModules来设计ASIC,以创造更多复杂的数字系统,也就是单芯片。(MegaModule为德州仪器公司的注册商标。)MegaModule系列包括SRAM、FIFO、寄存器文件、RAM、ROM、通用型异步接收传送器(UART)、可程序逻辑数组和其它逻辑电路。MegaModules通常定义为在复杂度上至少有500闸的集成电路,并具有复杂的ASIC宏功能。这些MegaModule都预先设计好,存放在ASIC设计数据库中。这样一来,设计师可以随时选择适合的MegaModule,置于新IC芯片中。
设计师成功地利用下列方法提升DSP(一般称为微处理器)的执行效能:增加时钟速度、除去电路体系结构中数据处理时的瓶颈、将多个执行单元整合在单一处理器电路上、并开发最佳化编译器,以便以有效的方式安排处理器执行运算的时间。而对于技术和市场的需求增加,更让人希望处理装置、应用系统以及运算和制造方法在结构与流程方面能有更大的改良。
本发明的具体实施例提供一种微处理器以及一种运作微处理器的方法,以期能够改良数字信号的执行效能。本发明的观点如申请专利范围所述。
本发明的具体实施例是一种数字信号处理器,较先前技艺的装置有下列改良处:寄存器文件增强功能、数据路径延伸功能、附加的功能单元硬件、增加指令集的正交(orthogonality)、数据流增强功能/SIMD运算、以及其它可减少代码大小和增加寄存器弹性的指令。
本发明的具体实施例中,数据流增强功能包括:PACK和位组移位指令的延伸组合,可简化分组式数据类型的操控;能直接运作数据组数据的单一指令、多数据(SIMD)指令,使数据流更精简并增加指令集的效率,包括:
·可自乘的(Quad)8×8乘法运算
·成对的(Paired)16×16乘法运算
·可自乘的8×8含加法的乘法运算
·成对的16×16含加/减法的乘法运算
·可自乘的8位术运算
·成对的16位算术运算
·可自乘的8位最小/最大值运算
·成对的16位最小/最大值运算
·可自乘的8位比较运算
·成对的16位比较运算
·成对的16位移位运算
本发明的其它功能及特点将通过下列详细描述与附图加以说明,以期更加明显,其中:
图1为数字信号处理器的方块图,显示本发明具体实施例的相关组件;
图2A-2E为图1功能单元、数据路径和寄存器文件的方块图;
图3A显示图1 DSP的寻址模式寄存器;
图3B显示包含图1 DSP控制和状态位的控制状态寄存器(CSR);
图3C显示DSP的E1阶段程序计数器(PCEI)寄存器;
图4显示Galois字段多项式发生器功能寄存器;
图5说明可支持图1 DSP 32种一般用途输入信号的一般用途输入寄存器(IN);
图6说明可支持图1 DSP 32种一般用途输出信号的一般用途输出寄存器(OUT);
图7说明用于图1 DSP 40位数据的寄存器存储体系结构;
图8A-8J显示图1 DSP的运算码对应;
图9A显示图1 DSP取数据组的基本格式;
图9B说明含全串行p位的图9A取数据组;
图9C说明含全并行p位的图9A取数据组;
图9D说明含部份串行p位的图9A取数据组;
图10A和10B说明循环缓冲区的非校直地址结构与非校直数据粹取功能;
图11显示图1 DSP的流水线阶段;
图12显示分支指令阶段;
图13显示根据时钟循环和取数据组的图1 DSP的流水线运作;
图14说明包含三个执行数据组的取数据组n,如图所示其后跟着六个取数据组(n+1到n+6),每一数据组均有一个执行数据组(包含8个并行处理指令);
图15为处理器的MTAP与「测试端口接口」;
图16A说明现有技术处理器的取数据组和执行数据组;
图16B为图1处理器中,执行数据组伸展取数据组的图解;以及
图17为图1处理器的另一具体实施例之方块图。
图1为本发明具体实施例微处理器1的方块图。微处理器1为VLIW数字信号处理器("DSP")。为说明起见,图1仅显示与本发明具体实施例相关的部份微处理器1。DSP一般体系结构的详细说明众所皆知,在别处即可找到。例如,美国专利5,072,418,由Frederick Boutaud等人提出,即详细说明了DSP,随本文附上作为参考。另外美国专利5,329,471,由Gary Swoboda等人提出,详细说明如何测试及仿真DSP,一并随本文附上作为参考。以下将详细说明与本发明具体实施例有关的部份微处理器1,以期微处理器业界中的一般技术人员都能够利用本发明。
在微处理器1中,显示中央处理单元(CPU)10、数据存储器22、程序存储器23、外围60、以及含直接存储器存取(DMA)61的外部存储器接口(EMIF)。CPU 10另包含一指令取/译码单元10a-c、多个执行单元,包括一算术和加载/存储单元D1、一乘法器、一ALU/移位器单元S1、一算术逻辑单元("ALU")L1、一共享多端口寄存器文件20a,数据从该文件中读出并写入该档。指令由取单元10a透过一组总线41,自指令存储器23中取出来。已译码指令透过不同组控制线,从指令取/译码单元10a-c送至功能单元D1、M1、S1、和L1,该控制线未显示。数据透过第一组总线32a,从寄存器文件20a送至加载/存储单元D1,或由加载/存储单元送至寄存器文件;另透过第二组总线34a,使数据来回于寄存器文件和乘法器M1之间;另透过第三组总线36a,来回于寄存器文件和ALU/移位器单元S1之间;并透过第四组总线38a,来回于寄存器文件和ALU L1之间。数据透过第五组总线40a,从存储器22送至加载/存储单元D1,或由加载/存储单元送至存储器。请注意,上述整个数据路径与寄存器文件20b和执行单元D2、M2、S2、L2的传送方式都相同。本发明的具体实施例中,两个不相关的已校直双字(64位)加载/存储传输,可在每一时钟周期时,利用总线集40a和总线集40b,在CPU 10与数据存储器22之间发生。
单一非校直双字加载/存储传输系通过安排存储器22上的第一.D单元资源和两个加载/存储端口所达成。最好粹取电路系连接至该存储器子系统,以提供一非校直数据项,该项目粹取自.D单元所要求的两个已校直数据项。最好是,当利用第二.D单元的地址端口来传送第一.D单元所提供的两个连续地址之一时,除了.S和.L单元之外,第二.D单元也可以执行32位逻辑或算术指令。甚至,目标存储器上接近循环缓冲区末端的非校直存取,提供一环绕循环缓冲区另一端的非校直数据项。
仿真电路50提供存取可由外部测试/开发系统(XDS)51所控制的集成电路1之内部运作。外部测试系统51代表各种用于调试和仿真集成电路的已知测试系统。美国专利案号5,535,331曾介绍这类系统,在此一并附上作为参考。测试电路52包含控制寄存器和并行处理签名分析电路(parallelsignature analysis circuitry),用以测试集成电路1。
请注意,如图1所示的存储器22和存储器23为微处理器1集成电路的一部份,其延伸部份由方块42代表,存储器22-23可以位于微处理器1集成电路42之外,或部份位于集成电路42之内,而部份位于集成电路42之外。这只是设计上的问题。另外,选择特定执行单元以及决定执行单元数量等问题,这也只是设计上的问题,对本发明而言并不重要。
微处理器1整合至数据处理系统中时,还可以有些附加存储器或外围连接至微处理器1,如图1所示。例如,如图所示,有随机存取存储器(RAM)70、只读存储器(ROM)71、以及盘片72,均透过外部总线73连接至微处理器。总线73则连接至外部存储器外围(EMIF),该装置为微处理器1内功能方块61的一部份。方块61之内还包含直接存储器存取(DMA)控制器。直接存储器存取(DMA)控制器通常在微处理器1内,负责数据在存储器与外围之间的移动,而存储器和外围则位于微处理器1之外。
在本具体实施例中,CPU核心10压缩为MegaModule,但是,本发明的其它具体实施例也可以是根据客户需求量身定作的CPU,或是大量生产的微处理器都适用。
有关图1微处理器不同体系结构特色的详细说明,由联合分配申请案序号09/012,813(T1-25311)提出,在此一并附上作为参考。有关图1微处理器此处未说明的指令集部份,联合分配申请案号09/012,813(T1-25311)也有提出,在此一并附上作为参考。
图2A为图1微处理器的执行单元和寄存器文件之方块图,其中更详细显示总线连接各种功能方块的方式。除非有特别注明,本图中所有数据总线均为32位。在处理器的数据路径中,有两个一般用途寄存器文件(A和B)。每个文件都包含32个32位寄存器(A0-A31用于文件A,B0-B31用于文件B)。一般用途寄存器可用于数据、数据地址指针、或条件寄存器(conditionregister)。某一周期内,可读取某一寄存器的次数,不受限制。
一般用途寄存器文件所支持的数据大小,范围从分组式8位数据到64位的固定点数据。大于32位的值,像40位长和64位双字,均存储在寄存器对组中,其中32个数据LSB置于双数寄存器中,其余8或32个MSB则置于次高一层的寄存器中(后者通常都是奇数寄存器)。分组式数据类型将四个8位或两个16位存储在单一32位的寄存器中。
40位和64位数据均有32个有效的寄存器对组,如表1所示。在组合器语法中,寄存器名称之间的冒号代表寄存器对组,而奇数寄存器则在指令运算码中进行编码。
             表1.40位/64位寄存器对组
    寄存器文件
    A     B
    A1:A0     B1:B0
    A3:A2     B3:B2
    A5:A4     B5:B4
    A7:A6     67:B6
    A9:A8     B9:B8
    A11:A10     B11:B10
    A13:A12     B13:B12
    A15A14     B15:B14
    A17:A16     B17:B16
    A19:A18     B19:B18
    A21:A20     B21:B20
    A23:A22     B23:B22
    A25:A24     B25:B24
    A27:A26     B27:B26
    A29:A28     B29:B28
    A31:A30     B31:B30
图7说明40位数据的寄存器存储体系结构。需要长时间输入的运算,会忽略24个奇数寄存器的24个MSB。产生长结果的运算,会在奇数寄存器中填入零。偶数寄存器在运算码中进行编码。
处理器10数据路径中的八个功能单元被分为两组,各包含四个单元;某一数据路径中的功能单元,几乎等于另一数据路径中对应的单元,该功能单元如表2所示。
处理器10除了能够操控32位数据之外,还在指令集中包含许多8位和16位的数据指令。例如MPYU4指令能够在.M单元上,执行含单指令的4个8×8无记号乘法。ADD4指令则可以在.L单元上,执行含单一指令的四个8位加法。
                表2.功能单元和负责执行的运算
    功能单元    固定点运算
.L单元(.L1、.L2)32/40位算术和比较运算
              32位逻辑运算
              用于32位计算的最左侧1或0
              用于32或40位的标准化计算
              字节移位
              数据压缩/解除压缩
              5位常数产生
              成对的16位算术运算可自乘的8位算术运算
              成对的16位最小值/最大值运算可自乘的8位最小值/最大值运算
.S单元(.S1、.S2)32位算术运算
         32/40位移位和32位位字段运算
         32位逻辑运算
         分支(branch)
         常数产生
         寄存器传输来回于控制寄存器文件(仅.S2)
         字节移位
         数据压缩/解除压缩
         成对的16位比较运算可自乘的8位比较运算
         成对的16位移位运算成对的16位饱和(saturated)算术运算可自乘的8位饱和算术运算
.M单元(M1、M2)  16×16乘法运算
           16×32乘法运算
           位扩充
           位交错/解交错(interleaving/de-interleaving)
           可自乘的8×8乘法运算
           成对的16×16乘法运算
           含加/减法、成对的16×16乘法运算含加法、可自乘的8×8乘法运算
           变量移位运算旋转Galois字段乘法(Galois Field Multiply)
.D单元(.D1、.D2)32位、减、线性和循环地址计算
                加载并以5位常数抵销(offset)存储
                加载并以15位常数抵销存储(仅.D2)
                加载并以5位常数存储双字
                加载并存储非校直字和双字
                5位常数产生
                32位逻辑运算s
CPU中大部份的数据线均支持32位操作数(operand),某些则支持长(40位)和双字(64位)操作数。每个功能单元都有自己的32位写入端口,以便写入一般用途寄存器文件(参见图2A)。所有以1结尾的单元(例如.L1)均写入寄存器文件A 20a,所有以2结尾的单元均写入寄存器文件B 20b。每个功能单元都有两个32位读取端口,以用于源操作数src1和src2。其中四个单元(.LI、.L2、.S1、和.S2)有额外的8位端口,以用于40位长写入,以及有8位输入,以用于长读入。由于每个单元都有自己的32位写入端口,在执行32位运算时,可在每一周期同时使用这八个单元。因为每个乘法器都可传回64位的结果,因此从乘法器到寄存器文件都提供两个写入端口。
寄存器文件交叉路径(Register File Cross Paths)
每一功能单元都在其自己的数据路径内,直接读取及写入寄存器文件。也就是说,.L1、.S1、.D1、和.M1单元写入寄存器文件A,.L2、.S2、.D2、和.M2单元写入寄存器文件B。寄存器文件系透过1X和2X交叉路径,连接至对面的寄存器文件的功能单元。这些交叉路径允许某一侧数据路径的功能单元,存取对面寄存器文件的32位操作数。1X交叉路径允许数据路径A的功能单元,从寄存器文件B读取其来源。同样地,2X交叉路径也允许数据路径B的功能单元,从寄存器文件A读取其来源。
八个功能单元均能透过交叉路径存取对面的寄存器文件。.M1、.M2、.S1、.S2、.D1、和.D2单元的src2输入,可从交叉路径和同侧的寄存器文件中选取。而.L1和.L2的src1和src2输入,则都可以从交叉路径和同侧的寄存器文件中选取。
本具体实施例中的体系结构,只有两种交叉路径,1X和2X。因此限制每周期只能自每一数据路径对面的寄存器文件中作一次来源读取,或是每周期只能自交叉路径中作两次的来源读取。最好是某一侧的乘法单元可以同步读取相同的交叉路径来源。因此,某一侧的交叉路径操作数,可在一执行数据组时,供其同侧的任何乘法或功能单元使用。在C62x/C67x中,每个数据路径、每个执行数据组都只有一个功能单元可自对面的寄存器文件取得操作数。
每当指令试图自前一周期被更新过的交叉路径中读取寄存器,就会引进一个延迟时钟周期。这称为交叉路径停转(stall)。这是由硬件自动插入的停转;并不需要NOP指令。应注意,如果正被读取的寄存器,正好是LDx指令加载数据的目的地,则不会引进停转。
存储器、加载和存储路径
处理器10支持双字加载和存储。共有四条32位路径可供从存储器加载数据至寄存器文件。在A侧这一边,LD1a是32个LSB的加载路径;LD1b是32个MSB的加载路径。在B侧这一边,LD2a是32个LSB的加载路径;LD2b是32个MSB的加载路径。而将寄存器值从每个寄存器文件存入存储器也有四条32位的路径。ST1a是32 LSB在A侧的写入路径;ST1b是32 MSB在A侧的写入路径。在B侧这一边,ST2a是32 LSB的写入路径;ST2b是32 MSB的写入路径。
某些用于长字和双字操作数的端口,可供若干个功能单元共享。这限制了长字或双字操作数只能在某一数据路径上的相同执行数据组中进行排程。
数据地址路径
总线40a具有由多路复用器(mux)200a驱动的地址总线DA1。这让由加载/存储单元D1或D2产生的地址能够提供存储器地址,以用于寄存器文件20a的加载或存储。数据总线LD1将数据从由地址总线DA1所指定的存储器22中之地址,加载到加载单元D1中的寄存器。单元D1可操控在提供之前、先存入寄存器文件20a的数据。同样地,数据总线ST1将数据从寄存器文件20a,存入存储器22中。加载/存储单元D1执行下列操作数:32位加法、减法、线性和循环地址计算。加载/存储单元D2同样针对单元D1运作,并通过多路复用器200b的协助来选择地址。
DA1和DA2资源和其相关数据路径分别被指定为T1和T2。T1由DA1地址路径和LD1a、LD1b、ST1a和ST1b数据路径所组成。同样地,T2由DA2地址路径和LD2a、LD2b、ST2a和ST2b数据路径所组成。T1和T2指定名称(designation)会在功能单元字段中出现,以用于加载和存储指令。
例如,下列加载指令利用.D1单元产生地址,但却利用DA2的LD2a路径资源将该数据置入B寄存器文件。所使用的DA2资源并显示出T2指定名称。
LDW.D1T2*A0[3],B1
图2B是.L单元18a或18b最顶层的方块图,系处理逻辑运算的最佳化设计,但硬件应可用于一组加减法的运算,并可用于本发明的多字段元混合指令。逻辑方块700执行各种布尔逻辑功能。通过闸(Pass gate)700a和守卫闸(Keeper gate)700b形成锁存器以保留第一源操作数src1的内容,该操作数系透过多路复用器211,自寄存器文件20a或20b中选出。同样地,通过闸700ca与守卫闸700d形成锁存器以保留第二源操作数src2的内容,该操作数系透过多路复用器212,自寄存器文件20a或20b中选出(参见图2)。
多路复用器方块702提供字节混合功能。通过闸和守卫闸保留住第一和第二源操作数src1和src2。
最左位侦测(LMBD)方块704负责侦测src2或long_src的最左位,而src2由scr1所指定。第一加法器方块706利用long_src和src2和符号延伸(sign-entend)src1,执行40位算术。第二加法器方块708针对src1和src2中的数据组数据域位执行多字段算术。
长多路复用器710系选自long_src LNG或来自40位加法器706至奇数目的地多路复用器720的八个msb ADD1(39∶32)输出。其它多路复用器712系选自逻辑方块700、多路复用器方块702、LMBD方块704、第一加法器方块706、第二加法器方块708和src1的输出。其它多路复用器712被分为四个8位的子方块,可控制各个方块以分别选取六组输入。
奇数目的地多路复用器(Odd destination mux)720系选自扫瞄寄存器SCAN31∶0(未显示)、第一加法器706位ADD1(31∶0)、长多路复用器710、其它多路复用器712以及零或一的输出。奇数多路复用器720被分为三个分别控制的部份,位31∶16、15∶8和7∶0。偶数目的地寄存器722系选自扫瞄寄存器SCAN31∶0(未显示)、第一加法器706位ADD1(31∶0)、其它多路复用器712以及零或一的输出。偶数多路复用器722被分为三个分别控制的部份,位31∶16和15∶0。
图2C为.S单元16a最顶层的方块图,系针对处理算术、逻辑、和移位以及本发明的多字段元饱和指令的最佳化所设计。.S单元在输入700接收源操作数一,以及在输入702接收源操作数二。并在输入704处接收额外的8位来源输入,以用于长源操作数。在输出710处提供目的地操作数输出,而在输出712提供长目的地操作数。.S单元主要包含五个功能单元:分支电路720、逻辑功能电路722、加法功能电路724、压缩/解除压缩功能电路726、以及移位器电路728。
结果中较低层的32位(位31∶0)系由结果多路复用器730加以选择,且透过输出710存储在寄存器对组的偶数寄存器。长结果的较高层8位(位39∶33)系由多路复用器730加以选择,并透过输出712存储在寄存器对组的奇数寄存器中。
多字段压缩/解除压缩电路(Multi-field pack/unpack circuitry)728,执行多字段数据组和解除压缩运算以及多字段饱和(saturation)。多字段电路228也执行有记号和无记号数据组数据的移位。.L功能单元18a和18b也执行多字段的压缩和解除压缩,其内容在共同分配的美国专利申请案号____(TI-30561)「具有位组混合指令集的微处理器」(Microprocessor Having a Set of Byte InterminglingInstructions)一文中有详细描述,在此随本文一并附上作为参考。
图2D为.M单元14a最顶层的方块图,系针对处理乘法的最佳化所设计,但硬件应可用于受限的非乘法集运算。在此具体实施例中,乘法器单元M1、M2相当类似,稍后将参考图7B-7D作更详尽的描述。循环乘法指令MPY(H/L)IR可于指令执行流水线的执行周期期间,在任一乘法单元M1或M2上执行,除非数据冲突限制已知执行数据组所包含的循环乘法指令。
.M单元有三个主要功能单元:Galois乘法单元700a-c、乘法单元710以及方块720中其它非乘法功能电路。Galois乘法器700a-c和乘法器710需要三个额外的周期以完成乘法运算,因此乘法指令分类为具有三个延迟槽。流水线寄存器730-733在每一流水线执行阶段均保有(hold)部份结果。一般而言,乘法单元710可在乘法器711a、b对组上执行下列运算:具有所有有记号(signed)或无记号(unsigned)数字组合的两个16×16乘法器或四个8×8乘法器、乘法结果的Q-移位和P-移位、乘法指令的循环、通过在16位方块边界分割/连结携带炼以控制携带炼、以及饱和乘法,其最后结果以1左移,或是若溢出发生则传回0×7FFFFFFF。结果中较低层的32位(位31∶0)系由多路复用器734加以选择,并存储在寄存器对组的偶数寄存器中。结果中较高层的32位(位63∶33)系由多路复用器735加以选择,并存储在寄存器对组的奇数寄存器中。有关可设定的乘法电路之内容,在共同分配的美国专利申请案号____(TI-26010)「具有弹性乘法单元的数据处理器」(DataProcessor With Flexible Multiply Unit)一文中有详细描述,在此随本文一并附上作为参考。有关Galois乘法单元之内容,在由大卫荷耶所着的共同分配之美国专利申请案号____(TI-26013)「Galois字段乘法」(Galois Field Multiply)一文中有详细描述,在此随本文一并附上作为参考。
图2e为D群组单元12a、b的顶层方块图,负责执行加载/存储指令,并执行位址计算。D单元群组12a、b与数据存储器控制器22相邻。加载和存储指令所运作的数据大小从8位到64位均可。D单元群组所支持的不同寻址模式,包括:基本寻址、抵销(offset)寻址、索引寻址、自动增量/自动减量、长直接(long immediate)寻址、和循环寻址。在基本寻址模式中,寄存器内容被当作存储器地址。在缓冲寻址模式中,存储器地址由两个值决定,基本值,和与基本值相加或相减所得之抵销值。基本值通常来自地址寄存器,而缓冲值可来自地址寄存器或包含在指令内的5位无记号常数。索引寻址模式功能与缓冲寻址模式相同,除了缓冲寻址在字节、半字、字、或双字表格中被解释为索引,如加载或存储运算的数据大小所示。在自动增量/减量寻址模式中,基本寄存器在执行加载/存储指令之后被增/减量。另外还有两种子模式,预增量/预减量和后增量/后减量,前者以基本寄存器中的新值当作加载/存储地址,后者则以寄存器中的初始值作为加载/存储地址。在长直接寻址模式中,14位的无符号常数被加入基本寄存器,以决定存储器地址。在循环寻址模式中,基本寄存器与方块大小共同定义存储器区域。若存取该区域内的存储器位置,就会从初始索引模块(方块大小)中产生新的索引值。
如图2A所示,单元(.S2)可利用总线220和221读取及写入控制寄存器文件102。表3列出控制寄存器文件内所含之控制寄存器,并一一予以简述。控制寄存器稍后将有完整的说明。每一控制寄存器都由MVC指令加以存取;稍后也有对于MVC指令的完整说明。
此外,某些控制寄存器位需要以特殊方式存取。例如当外部中断针脚INTm出现可屏蔽(maskable)中断时,即会触发标记位IFRm的设定。接着在处理该中断时,将触发清除掉IFRm和通用中断启用位GIE的动作。最后中断处理完成时,中断服务例程中的BIRP指令复原GIE的预中断值。同样地,类似像SADD的饱和指令,会设定CSR(控制状态寄存器)中的SAT(饱和)位。
                表3.控制寄存器
缩写     名称     描述
AMR 寻址模式寄存器 指定任一寄存器(共八个)是要使用线性或循环寻址;也包含循环寻址的大小。
CSR 控制状态寄存器 包含通用中断启用位、高速缓存控制位、以及其它各种控制和状态位。
IFR 中断标记寄存器 显示中断状态
ISR 中断设定寄存器 允许手动设定未决(pending)中断
ICR 中断清除寄存器 允许手动清除未决(pending)中断
IER 中断启用寄存器 允许启用/停用个别中断
ISTP 中断服务表指针 指向中断服务表的开头
IRP 中断回传指针 包含自可屏蔽中断传回时所使用的地址
NRP 不可屏蔽的中断传回指针 包含自不可屏蔽中断传回时所使用的地址
IN 一般用途输入寄存器 包含32个输入信号
OUT 一般用途输出寄存器 包含32个输出信号
PCE1 程序计数器 包含取数据组的地址,该数据组包含E1流水线阶段的执行数据组
P数据_0 程序数据输出 包含32个输出信号;STP指令用来写入程序空间
控制寄存器存取的流水线/时序
如表4所示,所有MVC均为单周期指令,均在E1流水线阶段,完成其存取清楚命名的寄存器。不论是从一般寄存器移动到控制寄存器或反向移动都成立。在任何情况下,来源寄存器的内容都在E1流水线阶段受到读取、透过.S2单元移动、并写入目的地寄存器。
                表4:控制寄存器流水线安排
    流水线阶段     E1
    读取     src2
    写入     Dst
    使用单元     .S2
即使MVC修改单一周期内特定的目标控制寄存器,以便完成修改非清楚命名的寄存器。例如,由于MVC无法直接修改IFR内的位,而是只能将1写入ISR或ICR,以个别指定设定或清除IFR位。MVC在单一(E1)周期内(如上所述)完成此ISR/ICR写入,但修改IFR位本身的动作,会在一个时钟之后发生。
类似SADD的饱和指令(saturating instructions),间接设定在控制状态寄存器(CSR)内的SAT位。因此,若干这类指令,在其主要结果写入寄存器文件后的一个完整的时钟周期内,更新该SAT位。例如,SMPY在流水线阶段E2结束时写入其结果,其主要结果在一延迟时隙后出现。相对地,CSR内的SAT位在结果被写入后的一周期内被更新;此更新动作在两个延迟时隙后发生(有关特定的指令特性,请参见指令的个别说明)。
B IRP和B NRP指令直接个别更新GIE和NMIE。由于这些分支直接个别修改CSR和IER(中断启用寄存器),因此当发出该分支且该控制寄存器更新生效时,并没有延迟时隙。
图3A显示寻址模式寄存器,(AMR)。八个寄存器(A4-A7,B4-B7)都可以执行循环寻址。针对这些寄存器,AMR都为每一寄存器指定寻址模式。每一寄存器的2位字段,都用来选择位址的修改模式:线性(预设设定)或循环模式。通过循环寻址,该字段也指定要选择哪一个BK(方块大小)字段以用于循环缓冲区。此外,该缓冲区必须校直等于方块大小的字节边界。模式选择字段元编码方式如表5所示。
                表5.寻址模式字段元编码方式
    模式     说明
    00 线性修改(复位时的默认值)
    01 使用BK0字段的循环寻址
    10 使用BK1字段的循环寻址
    11 保留
方块大小字段,BK0和BK1,指定用于循环定的方块大小。BK0和BK1内的五个位指定宽度。计算方块大小宽度的公式如下所示:
方块大小(单位为字节s)=2(N+1)
其中N为BK0或BK1内的值
表6显示所有32个可能的方块大小计算结果。
                表6.方块大小计算结果
    N 方块大小     N     方块大小
    00000     2  10000     131,072
    00001     4  10001     262,144
    00010     8  10010     524,288
    00011     16  10011     1,048,576
    00100     32  10100     2,097,152
    00101     64  10101     4,194,304
    00110     128  10110     8,388,608
    00111     256  10111     16,777,216
    01000     512  11000     33,554,432
    01001     1,024  11001     67,108,864
    01010     2,048  11010     134,217,728
    01011     4,096  11011     268,435,456
    01100     8,192  11100     536,870,912
    01101     16,384  11101     1,073,741,824
    01110     32,768  11110     2,147,483,648
    01111     65,536  11111     4,294,967,296
注意:当N为11111时,其特性与线性寻址相同
如图3B所示的控制状态寄存器(CSR),包括控制和状态位。CSR中位字段的功能如表7所示。
          表7.控制状态寄存器:位字段、读/写状态和功能
位位置 宽度 位字段名     功能
    31-24     8     CPU ID CPU识别码。定义CPU种类
    23-16     8     Rev ID 版本识别码。定义CPU硅芯片的版本。
    15-10     6     PWRD 控制电源关闭模式。其读取值必为零
    9     1     SAT 饱和位,当任一单元执行饱和时必须设定本位,本位只能由MVC指令清除,并可由功能单元设定。当功能单元和MVC指令同时在相同周期内出现时,功能单元进行设定的优先权超过清除(由MVC指令执行)。饱和位会在饱和出现后的一个完整周期(1延迟时隙)设定好。条件指令不会修改此位,该指令的条件为假(false)。
    8     1     EN Endian位:1=小endian,0=大endian。
    7-5     3     PCC 程序高速缓存控制模式
    4-2     3     DCC 数据高速缓存控制模式
    1     1     PGIE 之前的GIE(通用中断启用)。中断发生时存储GIE。
    0     1     GIE 通用中断启用。启用(1)或停用(0)所有中断,但不包括复位中断和NMI非掩码中断)。
图3C显示E1阶段程序计数器(PCEI)寄存器,该寄存器在E1流水线阶段包含取数据组的32位地址。
图4显示Galois字段多项式发生器功能寄存器(GFPGFR)。GFPGFR包含Galois字段多项式发生器和字段元位控制位。
这些位控制GMPY4指令的运算。此寄存器只能通过MVC指令加以设定。
表8定义GFPGFR字段。复位后的预设功能中,GMPY4指令的字段元大小=7,而多项式=0×1D。
                表8.GFPGFR字段
位位置 宽度 字段名     功能
    31-27     5     RESERVED   保留。读取值为零。写入时忽略。
    26-24     3     SIZE   字段大小
    23-8     16     RESERVED   保留。读取值为零。写入时忽略。
    7-0     8     POLY   多项式发生器。
假使GMPY4指令包含在改变GFPGFR值的MVC指令之后的下一执行数据组中,则GMPY4将由新加载的GFPGFR值所控制。
如图5所示的一般用途输入寄存器(IN),支持32个一般用途输入信号,而如图6所示的一般用途输出寄存器(OUT),则支持32个一般用途输出信号。稍后将说明这些信号的功能。
表9将解释本文所使用的各种符号。
                表9.指令运算和执行的表示法
符号     意义
long  40位的寄存器值
+a 利用AMR所定义的寻址模式,执行二余弦加法
-a 利用AMR所定义的寻址模式,执行二余弦减法
xor 位专属的OR
not 位的逻辑余弦
by..z 选择位字符串b的y至z位
>>s 具有符号延伸的右移
>>z 以零填入的右移
x clear b,e 清除x中的字段,该字段由b(开始位)和e(结束位)指定
x exts l,r 粹取并以符号延伸x中的字段,该字段由1(左移值)和r(右移值)指定
x extu l,r 粹取x中未记号的字段,该字段由1(左移值)和r(右移值)指定
+s 执行二余弦加法,并饱和该结果至结果大小(result size),若发生溢出或下溢时
-s 执行二余弦减法,并饱和该结果至结果大小,若发生溢出或下溢时
x set b,e 设定x中的字段,成为b(开始位)和e(结束位)指定的所有1
1mb0(x) 搜寻x最左侧的0位
1mb1(x) 搜寻x最左侧的1位
norm(x) x最左侧的非多余符号位
abs x x的绝对值
and 位的AND
bi 选择来源/目的地b的位I
bit_unt 计算指定字节中位为1的数量
bit_reverse 反转32位寄存器中的位顺序
byte0  32位寄存器中,最不明显的字节位置内的8位值(位0-7)
byte1  32位寄存器中,次不明显的字节位置内的8位值(位8-15)
byte2  32位寄存器中,次明显的字节位置内的8位值(位16-23)
byte3 32位寄存器中,最明显的字节位置内的8位值(位24-31)
bv2 s2或u2数据类型的两个标记的位向量
bv4 s4或u4数据类型的两个标记的位向量
cond 检查creg等于0或不等于0
cre 指定条件寄存器的3位字段
cstn n位的常数字段(例如,cst5)
dst_h or dst_o  dst的msb32(置于64位寄存器对组的奇数寄存器中)
dst_I or dst_e  dst的lsb32(置于64位寄存器对组的偶数寄存器中)
dws4  64位寄存器对组中,四个已压缩、有记号的16位整数
dwu4  64位寄存器对组中,四个已压缩、未记号的16位整数
gmpy Galois字段乘法
i2 单一32位寄存器中,两个已压缩的16位整数
i4 单一32位寄存器中,四个已压缩的8位整数
iht 32位整数值
lsbn or LSBn n个最不明显位(例如,I sb 16)
msbn orMSBn n个最明显位(例如,msb 16)
nop 无运算
or 位OR
R 任意的一般用途寄存器
rotl 向左旋转
sat 饱和
sbyte0  32位寄存器中,最不明显字节位置内的有记号8位值(位0-7)
sbyte1  32位寄存器中,次不明显字节位置内的有记号8位值(位8-15)
sbyte2  32位寄存器中,次明显字节位置内的有记号8位值(位16-23)
sbyte3  32位寄存器中,最明显字节位置内的有记号8位值(位24-31)
scstn 有记号的n位常数字段(例如,scst7)
se 记号-延伸
sint 有记号的32位整数值
slsb16  32位寄存器下半部的有记号16位整数值
smsb16  32位寄存器上半部的有记号16位整数值
s2 单一32位寄存器中,两个已压缩、有记号的16位整数
s4 单一32位寄存器中,四个已压缩、有记号的8位整数
sllong 有记号的64位整数值
ubyte0  32位寄存器中,最不明显字节位置内的未记号8位值(位0-7)
ubyte1  32位寄存器中,次不明显字节位置内的未记号8位值(位8-15)
ubyte2  32位寄存器中,次明显字节位置内的未记号8位值(位16-23)
ubyte3  32位寄存器中,最明显字节位置内的未记号8位值(位24-31)
ucstn  n位未记号常数字段(例如,ucst5)
uint 未记号32位整数值
ullon 未记号64位整数值
ulsb16 32位寄存器下半部的未记号16位整数值
umsb16 32位寄存器上半部的未记号16位整数值
u2 单一32位寄存器中,两个已压缩、未记号的16位整数
u4 单一32位寄存器中,四个已压缩、未记号的8位整数
xi2 单一32位寄存器中,可选择性使用交叉路径(cross path)的两个已压缩16位整数
xi4 单一32位寄存器中,可选择性使用交叉路径(cross path)的四个已压缩8位整数
xsint 可选择性使用交叉路径的有记号32位整数值
xs2 单一32位寄存器中,可选择性使用交叉路径(crosspath)的两个已压缩、有记号的16位整数
xs4 单一32位寄存器中,可选择性使用交叉路径(cross path)的四个已压缩、有记号的8位整数
xuint 可选择性使用交叉路径的未记号32位整数值
xu2 单一32位寄存器中,可选择性使用交叉路径(crosspath)的两个已压缩、未记号的16位整数
xu4 单一32位寄存器中,可选择性使用交叉路径(cross path)的四个已压缩、未记号的8位整数
4 分配(Assignment)
+ 加法
++ 每次加1
X 乘法
- 减法
大于
小于
<< 左移
>> 右移
>= 大于或等于
<= 小于或等于
= = 等于
逻辑反转
& 逻辑And
表10针对美国专利案号09/012,813(TI-25311,随文附上作为参考)中所描述包含于DSP中的基本指令集,定义指令与功能单元间的对应。表11则针对本发明具体实施例中的延伸指令,定义指令与功能单元间的对应。本发明的其它具体实施例可能有不同的指令集与功能单元对应。表10和11仅作为说明之用,并未完整列出所有对应,也不是用来限制本发明的具体实施例。
            表10.基本指令的指令与功能单元对应表
 .L单元  .M单元  .S单元     .D单元
    ABS     MPY     ADD     ADD
    ADD     SMPY     ADDK     ADDA
    AND     ADD2     LD mem
    CMPEQ     AND     LD mem(15位抵销)(仅D2)
    CMPGT     B disp     MV
    CMPGTU     B IRP     NEG
    CMPLT     B NRP     ST mem
    CMPLTU     B reg     ST mem(15位抵销)(仅D2)
    LMBD     CLR     SUB
    MV     EXT     SUBA
    NEG     EXTU     ZERO
    NORM     MVC
    NOT     MV
    OR     MVK
    SADD     MVKH
    SAT     NEG
    SSUB     NOT
    SUB     OR
    SUBC     SET
    XOR     SHL
    ZERO     SHR
    SHRU
    SSHL
  STP(仅S2)
    SUB
    SUB2
    XOR
    ZERO
            表11.延伸指令的指令与功能单元对应表
    .L单元     .M单元     .S单元 .D单元
    ABS2     AVG2     ADD2     ADD2
    ADD2     AVGU4     ADDKPC     AND
    ADD4     BITC4     AND     ANDN
    AND     BITR     ANDN     LDDW
    ANDN     DEAL     BDEC     LDNDW
    MAX2     DOTP2     BNOP     LDNW
    MAXU4     DOTPN2     BPOS     MVK
    MIN2     DOTPNRSU2     CMPE2     OR
    MINU4     DOTPNRUS2DOTPRSU2DOTPRUS2     CMPEQ4CMPGT2CMPGTU4     STDW
    MVK     DOTPSU4DOTPUS4     CMPLT2     STNDW
    OR     DOTPU4     CMPLTU4     STNW
    PACK2     GMPY4     MVK     SUB2
    PACKH2     MPY2     OR     XOR
    PACKH4     MPYHI     PACK2
    PACKHL2     MPYHIRMPYIHMPYIHR     PACKH2
    PACKL4     MPYILMPYILRMPYLI     PACKHL2
    PACKLH2     MPYLIR     PACKLH2
    SHLMB     MPYSU4MPYUS4     SADD2
    SHRMB     MPYU4     SADDU4
    SUB2     MVD     SADDSU2
    SADDUS2
    SUB4     ROTL     SHLMB
    SUBABS4     SHFL     SHR2
    SWAP2     SMPY2     SHRMB
    .L单元     .M单元     .S单元 .D单元
    SWAN     SSHVL     SHRU2
    UNPKHU4     SSHVR     SPACK2
    UNPKLU4     XPND2     SPACKU4
    XOR     XPND4     SUB2
    SWAP2
    UNPKHU4
    UNPKLU4
    XOR
DSP的运算码对应表如图8A-8J所示。请参见表9和稍后的指令说明,两者将解释字段语法和值。指令语法是用来说明每一个指令。运算码对应表分析组成每一指令的若干位字段。某些指令可在一个以上的功能单元上执行,如表11所示。语法可指定功能单元以及指令所使用的不同资源,通常如下所示:
EXAMPLE(.单元)src,dst
下列为ADD指令的语法范例:
1)ADD(.单元)src1,src2,dst
2)ADDU(.单元)src1,src2,dst
3)ADD(.单元)src2,src1,dst
单元=.L1,.L2,.S1,.S2,.D1,.D2
src和dst分别代表来源和目的地。(.单元)是要指定指令所对应的功能单元(.L1、.L2、.S1,、S2、.M1、.M2、.D1、或.D2)。此指令有三个运算码对应字段:src1、src2、和dst。该条件由一个3位(creg)字段元加以控制,该字段元指定将要测试的寄存器,并受到一个1位字段元(z)的控制,该字段元指定测试是零或非零,如图3A-3J。每一运算码的四个MSB为creg和z。被指定寄存器会针对所有指令,在E1流水线阶段开始时进行测试。稍后将说明该流水线。如果z=1,将对含零的等式进行测试。如果z=0,将对非零进行测试。条件寄存器字段(creg)=0且z=0的情况将视为恒真,以允许无条件执行指令。creg寄存器字段元的编码方式如表12所示。
            表12.可由条件运算加以测试的寄存器
    Creg     z     受测寄存器
    31     30     29     28
    0     0     0     0     无条件
    0     0     0     -1     保留:若选择,则代表SWBP指令
    0     0     1     z     B0
    0     1     0     z     B1
    0     1     1     z     B2
    1     0     0     z
    1     0     0     z     A1
    1     0     1     z     A2
    1     1     x     x     保留
备注:x表示忽略,用于保留的情况。
条件指令中以"[]"符号将条件寄存器括起来。下列执行数据组包含两个并行处理的ADD指令。第一个ADD的条件是B0为非零。第二个ADD的条件为B0为零。「!」表示「不是」该条件。
       [B0]     ADD    .L1    A1,A2,A3
||     [!B0]    ADD    .L2    B1,B2,B3
上述指令具有相互排他性。这表示只能执行其中之一。
如果他们排定为同时执行,相互排他性指令也必须遵照稍后所述有关所有资源的限制之规定。
如果相互排他性指令如稍后所述共享某些资源,他们也不能排定为同时执行(置入相同执行数据组),仅有一个会完成执行。
指令的执行可利用延迟时隙加以定义。表13显示指令的类型、每种类型的指令有多少个延迟时隙、以及其所使用的执行阶段。延迟时隙数等于源操作数被读取后所需之周期数,以便结果备妥,以供读取。对于单周期型指令(譬如像CMPGT2)而言,源操作数在周期i被读取,将产生一个可在周期i+1被读取的结果。对两周期指令(譬如像AVGU4)而言,源操作数在周期i被读取,将产生一个可在周期i+2被读取的结果。就四周期指令(譬如像DOTP2)而言,源操作数在周期i被读取,将产生一个可在周期i+4被读取的结果。表13显示与各类型指令有关的延迟时隙数。
延迟时隙相当于一个执行或结果延迟。所有额外指令都有功能单元延迟1。这表示新指令可从每个周期的功能单元开始执行。单周期生产量也是表示单周期功能单元延迟。
                表13.延迟时隙和功能单元延迟摘要
指令类型 延迟时隙 功能单元延迟 读取周期ψ 写入周期ψ 取得的分支ψ
NOP(无运算)     0     1
存储 0 1 i i
单一周期 0 1 i i
两周期 1 1 i i+1
乘法(16×16) 1 1 i i+1
四周期 3 1 i i+3
加载 4 1 i i,i+4β
分支     5     1     iφ     i+5
ψ周期i处于E1流水线阶段。β就加载而言,所有地址修改的动作都发生在周期i。加载的数据在周期i+4时写入寄存器文件。φ卷标分支、IRP分支、以及NRP分支指令,不读取任何一般用途的寄存器。
通常一次取八个指令,这样即形成取数据组。取数据组的基本格式如图9A所示。取数据组的执行群组由各指令的p位、位零指定。取数据组为8字校直。
p位控制指令的并行处理执行。p位被自左至右(下层到上层地址)扫描。如果指令i的p位为1,则指令i+1会与指令i同时执行(与指令i相同的周期)。如果指令i的p位为0,则指令i+1会在指令i之后的周期执行。所有同时执行的指令形成执行数据组,一个执行数据组可包含八个指令。执行数据组内所有的指令都必须利用唯一的功能单元。
图16A为先前技艺处理器中的取数据组和执行数据组。假使执行数据组无法恰好装入取数据组内,将会有NOP指令插入指令流,以拉长取数据组。例如,在图16A中,执行数据组E3无法紧接在执行数据组E2之后,装入四字空间内,因此在指令顺序中插入四个NOP指令,以拉长取数据组。
图16B为针对图1处理器,说明执行数据组扩及(span)取数据组的方式。最好是如本发明具体实施例处理器10所示,执行数据组可跨越八字取数据组的边界,藉此消除插入NOP指令以拉长取数据组的需求。例如,八字执行数据组EP1完全占据取数据组1600。四字执行数据组EP2部分填入取数据组1602。六字执行数据组EP3无法恰好装入取数据组1602内,但是,前面的四字1621,1622,1623和1624被置入取数据组1602,而后面的两字1625、1626则置入取数据组1604。因此,取数据组内的后面p位不一定都设为0。如果取数据组后面的p位不是0,则在阶段10a(图1)中的指令取控制电路取第二取数据组,并粹取指令字,直到遇到设为0的p位。这个指令字顺序会被叫入单一执行数据组内,例如像执行数据组EP3的单一执行数据组。
下列范例说明p位顺序移位为周期不断的指令执行流之方式。取数据组有三种不同的p位型态,这三种p位型态导致下列八个指令的执行顺序:全串行、完全并行处理、或部份串行。以下将更详细地说明这三种执行顺序。
如图9B所示的全串行p位型态,会导致如表14所示之执行顺序。
表14.全串行p位型态执行顺序
    周期     指令
    1     A
    2     B
    3     C
    4     D
    5     E
    6     F
    7     G
    8     H
该八个指令会循序执行。如图9C所示的完全并行处理p位型态,会导致如表15所示之执行顺序。
        表15.完全并行处理的p位型态执行顺序
周期     指令
    1     A    B    C    D    E    F    G    H
八个指令并行处理(同时)执行。如图9D所示的部分串行p位型态,会导致如表16所示之执行顺序。
          表16.部分串行p位型态执行顺序
    周期     指令
    1     A
    2     B
    3     C     D     E
    4     F     G     H
请注意指令C,D,和E不使用任何相同的功能单元、交叉路径、或其它数据路径资源。此规则也适用指令F、G、和H。
||字符表示某一指令与前一指令并行处理执行。在前一部分串行范例中,代码可以下列方式表示:
      指令    A
      指令    B
      指令    C
||    指令    D
||    指令    E
      指令    F
||    指令    G
||    指令    H
如果发生分支进入执行数据组中间的情况,则会忽略下层(lower)位址中所有指令。在部分串行范例中,如果发生分支进入包含指令D的情况,则仅执行D和E。即便相同执行数据组中还有指令C也会被忽略。指令A和B也会被忽略,因为他们均位于稍早的执行数据组中。
寻址模式
使用BK0时,寻址模式为线性和循环,使用BK1时,寻址模式为循环。本模式由寻址模式寄存器(AMR)所指定。
八个寄存器都可执行循环寻址功能。A4-A7供.D1单元使用,B4-B7供.D2单元使用。其它单元都不能执行循环寻址模式。而这些寄存器均由AMR指定寻址模式。
下列指令都利用AMR来决定这些寄存器将采用何种地址计算类型:LDB V/LDH U/LDW STB/STH/STW,LDNDW,LDNW,STNDW,STNW,LDDW,STDW,ADDAB/ADDAH/ADDAW/ADDAD、和SUBAB/SUBAH/SUBAW。其中并没有SUBAD指令。所有寄存器都可执行线性模式的寻址。
使用LD/ST指令的线性模式寻址运作方式如下所示:线性模式只将offsetR/cst操作数在存取双字时左移3,若是字则左移2,若为半字则左移1,若是字节则左移0,接着对baseR执行加法或减法(根据所指定的运作)。对于预增量、预减量、正抵销、负抵销(offset)选项而言,计算结果是要存取存储器的地址。对于后增量或后减量寻址而言,执行加或减法之前的baseR值是从存储器存取的地址。寻址模式由模式字段元所指定(参见图8E),并行于表17中。增量/减量模式控制更新后的位址是否会写回寄存器文件。否则该模式将十分类似抵销模式。预增量和抵销模式的差异在于其结果是否写回「基底」(base)。后增量模式类似预增量(例如,新地址写回「基底」),但差异在于「基底」的旧值会用来作为存取的地址。而负抵销和减量模式也有同样状况。
使用ADDA/SUBA指令进行线性模式寻址的运作方式,如下所示:线性模式只将src1/cst操作数在存取双字时左移3,若是字则左移2,若为半字则左移1,若是字节则左移0,接着执行加法或减法(根据所指定的运作)。
                表17-地址发生器选项
模式字段元     语法     所执行的修改
    0101 *+R[offsetR] 正抵销;addr=base+offset*scale
    0100 *-R[offsetR] 负抵销;addr=base-offset*scale
    1101 *++R[offsetR] 预增量;addr=base+offset*scale;base=addr
    1100 *-R[offsetR] 预减量;addr=base-offset*scale;base=addr
    1111 *R++[offsetR] 后增量;addr=base;base=base+offset*scale
    1110 *R-[offsetR] 后减量;addr=base;base=base-offset*scale
    0001 *+R[ucst5] 正抵销;addr=base+offset*scale
    0000 *-R[ucst5] 负抵销;addr=base-offset*scale
    1001 *++R[ucst5] 预增量;addr=base+offset*scale;base=addr
    1000 *--R[ucst5] 预减量;addr=base-offset*scale;base=addr
    1011 *R++[ucst5] 后增量;addr=base;base=base+offset*scale
    1010 *R--[ucst5] 后减量;addr=base;base=base-offset*stale
循环模式寻址利用AMR中的BK0和BK1字段来指定循环寻址的方块大小。利用LD/ST指令进行循环模式寻址的方式如下所示:针对LDDW将offsetR/cst左移3、针对LDW左移2、针对LDH左移1、或针对LDB左移0之后,接着对baseR执行加或减法,以产生最终地址。这项加或减法的执行仅允许更新结果的位N至0,而使位31至N+1在执行地址演算之后维持不变。最后的地址必须落在2^(N+1)范围之内,不管offsetR/cst的大小是多少。
如之前所述,AMR中的循环缓冲区并不会校直;例如8的大小是8字节,而不是8×(某类型的)大小。所以若要执行8字数组的循环寻址,应该要指定32的大小,或指定N=4。表18显示在循环模式下利用寄存器A4所执行的LDW,由于BK0=4,所以缓冲区大小为32字节、16半字、或8字。本范例中放入AMR的值为00040001h。
                表18.循环模式下的LDW
    LDW.D1*++A4[9],A1
    LDW之前 LDW之后1周期 LDW之后5周期
    A4  0000 010h     A4  0000 0104h     A4  00000104h
    A1  XXXX XXXXh     A1  XXXX XXXXh     A1  12345678h
 Mem 104h  1234 5678h mem 104h  1234 5678h mem 104h  12345678h
备注:9h字为24h字节。24h字节是超过32字节(20h)边界100h-11Fh的4字节:因此围绕(124h-20h=104h)。
利用ADDA/SUBA指令进行循环模式寻址的方式如下所示:针对ADDAD将src1/cst左移3、针对ADDAW左移2、针对ADDAH左移1、或针对ADDAB左移0之后,接着对baseR执行加或减法,以产生最终地址。这项加或减法的执行仅允许更新结果的位N至0,而使位31至N+1在执行地址演算之后维持不变。最后的地址必须落在2^(N+1)范围之内,不管offsetR/cst的大小是多少。
如之前所述,AMR中的循环缓冲区并不会校直;例如4的大小是4字节,而不是4×(某类型的)大小。所以若要执行8字数组的循环寻址,应该要指定32的大小,或指定N=4。表19显示在循环模式下利用寄存器A4所执行的ADDAH,由于BK0=4,所以缓冲区大小为32字节、16半字、或8字。本范例中放入AMR的值为0004 0001h。
                表19.循环模式下的ADDAH
    ADDAH.D1 A4,A1,A4
    ADDAH之前     ADDAH之后1周期
    A4  0000 0100h     A4  0000 0106h
    A1  0000 0013h     A1  0000 0013h
13h半字为26h字节。26h字节是超过32字节(20h)边界100h-11Fh的6字节;因此围绕(126h-20h=106h)。
非校直存储器存取的考量
循环寻址可与非校直存取合用。循环寻址启用时,地址更新与存储器存取的动作会按照存取字节的相同顺序进行。唯一的限制是循环缓冲区的大小必须至少和被存取的数据大小一样大。若非校直存取的循环缓冲区大小,小于被读取数据的大小,将导致未定义的结果出现。
对循环缓冲区的非校直存取,对逻辑上相邻的存储器地址进行循环寻址计算。结果是接近循环缓冲区边界的非校直存取,会正确地从该循环缓冲区的两端读取数据,因此完美地导致该循环缓冲区「环绕」(wrap aroung)着边缘。
图10A和10B系根据本发明,说明非校直地址的形成,以及从循环缓冲区粹取非校直数据的观点。以具有如图10A所示的16字节大小之循环缓冲区500为例。通过设定BK0或BK1,此大小的循环缓冲区被指定为「00011」。以循环模式下的寄存器A4为例,且BK0=3,该缓冲区的大小即为16字节、8个半字或4个字。此范例中,放入AMR的值为00030001h。该缓冲区从地址0×0020(502)开始,结束于0×002F(504)。寄存器A4初始于,例如,地址0×0028,但是,通过设定寄存器A4中的次明显地址位,缓冲区可能位于存储器内的其它位置。地址0×1F(506)以下的缓冲区以及地址0×30(508)以上的缓冲区数据仍可加以存储,这与本缓冲区无关。循环缓冲的意义是要让0×20-0×2F范围内的存储器存取和地址更新,完全保持在此范围之内。实际上存储器应表运作的方式如图55B所示。例如,在后增量模式下利用1的抵销执行LDW指令,将提供位址0×0028(511),并存取字510。第二次执行指令将在循环缓冲区的末端提供地址0×002C(513),并存取字512。第三次执行指令将提供位址0×0020(502a),并存取字514。请注意514实际上对应到循环缓冲区的另一端,但通过增加LDW指令所提供的位址,即可加以存取。
表20显示在循环模式下利用寄存器A4所执行的LDNW,且BK0=3,所以缓冲区大小为16字节、8个半字、或4个字。本范例中放入AMR的值为00030001h。该缓冲区开始于地址0×0020,结束于0×002F。寄存器A4起始于地址0×002A。
                表20.循环模式下的LDNW
    LDW.D1*++A4[9],A1
    LDW之前     LDW之后1周期 LDW之后5周期
    A4  0000 002Ah     A4  0000 0022h     A4   000000022h
    A1  XXXX XXXXh     A1  XXXX XXXXh     A1  5678 9ABCh
 Mem 0022h  5678 9ABCh mem 0022 h  5678 9ABCh mem 0022h  5678 9ABCh
2h字为8h字节。8h字节是超过开始于地址002Ah的16字节(10h)边界的3字节;因此围绕着0022h(002Ah+8h=0022h)。
流水线运作
DSP流水线有若干重要功能,可改良执行效能、降低成本、并简化程序。这些重要功能包括:增加流水线,流水线增多可减少传统上在程序取、数据存取、和乘法运算时所遇到体系结构上的瓶颈;通过减少流水线联动锁(interlock),以简化流水线控制;每一周期,流水线可发送八个并行处理指令;并行处理指令透过相同流水线阶段,同步处理;连续指令以相同的相对流水线阶度差距加以处理;在相同流水线阶段期间内,加载和存储地址会在CPU边界出现,可消除「写后读」所造成的存储器冲突。
多阶段存储器流水线可用于数据存取和程序取。这使得高速同步存储器可用于芯片内或芯片外,也允许具有分支的无限制可巢叠零过头循环与其它指令并行处理。
流水线执行周期内没有内部联动锁,所以每CPU周期会有新执行数据组进入执行。因此,含特定输入数据、用于特定逻辑的CPU周期数为固定的。若在程序执行期间,没有存储器的拖延(stall),CPU周期数等于用于执行程序的时钟周期数。
执行效能可能因为存储器系统的拖延、交叉路径依存性的拖延、或中断而变差。存储器是否拖延系由存储器体系结构所决定。有关交叉路径拖延之内容,美国专利案号__(TI-30563)中有详细说明,在此一并附上作为参考。要充分了解如何使程序速度最佳化,就应了解程序是如何决定程序取顺序、数据存储、和数据加载要求,以及他们是如何拖延CPU的速度。
从功能观点来看,流水线运作是以CPU周期为基础。CPU周期是一段期间,在该段期间内特定执行数据组系位于特定流水线阶段。CPU周期边界通常都发生在时钟周期边界上;但拖延可导致CPU周期延伸超过若干个时钟周期。要了解CPU周期边界的机器状态,必须只专注在流水线的执行阶段(E1-E5)上。流水线阶段如图11所示,在表21中也有说明。
                表21.流水线阶段说明
流水线 流水线阶段 符号     在此阶段时 完成的指令类型
程序取 程序地址产生 PG 决定所取数据组的地址。
程序地址传送 PS 将取数据组地址传送至存储器。
程序等待 PW 执行程序存储器存取。
程序数据接收 PR 预期将在CPU边界收到取数据组。
程序译码 分派 DP 决定取数据组中的下一个执行数据组,并传送至将进行译码的适当功能单元。
译码 DC 指令在功能单元被译码。
执行 执行1 E1 用于所有指令类型,评估指令的条件和读取到的操作数。加载和存储指令:计算地址的产生,以及将地址修改写入寄存器文件+分支指令:影响PG阶段内的分支取数据组+单一周期指令:结果将写入寄存器文件+ 单一周期
执行2 E2 加载指令:地址传送至存储器+存储指令和STP:地址和数据均传送至存储器+如果饱和发生,饱和结果的单一周期指令会设定控制状态寄存器(CSR)内的SAT位。+乘法指令:结果写入寄存器文件+ 存储STP乘法
执行3 E3 执行数据存储器存取。如果饱和发生,饱和结果的乘法指令会设定控制状态寄存器(CSR)内的SAT位。+
执行4 E4 加载指令:数据被带至CPU边界+
执行5 ES 加载指令:数据被加载至寄存器中+ 加载
+这假设指令的条件已被评估为真。若条件被评估为假,该指令将不写下任何结果,E1之后也没有任何流水线运作。
请再次参见图11和图1,处理器10的指令执行流水线牵涉到若干个别阶段,通常由暂时锁存器或寄存器分开,以便将某一阶段的结果传送至下一阶段。
指令流水线阶段PG、PS、PW、和PR牵涉到指令取动作,通过与程序存储器子系统23有关的程序取电路10具体呈现。流水线阶段DP和DC牵涉到指令译码动作;阶段DP具体呈现为分派电路10b,而流水线阶段DC具体呈现为译码电路10c。执行阶段E1-E5在各功能单元L、S、M和D之内具体呈现的阶段时,有了具体呈现。例如,D单元具体呈现五个与存储器子系统22有关的执行阶段。其它功能单元并未具体呈现该五个执行阶段,仅针对执行特定功能单元时,该指令类型所需之阶段加以具体呈现。
如之前曾讨论过,执行指令的动作可利用延迟时隙加以定义,如表22所示。延迟时隙为在指令的第一执行阶段(E1)之后所发生的CPU周期,当时该指令的结果还尚未出现。例如,乘法指令有1个延迟时隙,这表示在另一指令可使用乘法指令的结果之前,有1个CPU周期。
                表22.延迟时隙摘要
    指令类型 延迟时隙 所使用的执行阶段
    分支(目标进入E1的周期)     5     E1-分支目标E1
    加载(LD)(进来的数据)     4     E1-E5
    加载(LD)(地址修改)     0     E1
    乘法     1     E1-E2
    单一周期     0     E1
    存储     0     E1
    NOP(无执行流水线运作)     -     -
STP(无写入的CPU内部结果)     -     -
单一周期指令于流水线的E1阶段执行。读取操作数、执行运算、并将结果写入寄存器等动作均在E1期间进行。这些指令都没有延迟时隙。
乘法指令于流水线的E2阶段进行。E1阶段时,已读取操作数且相乘的动作开始。到了E2阶段,乘法计算动作完成,结果被写入目的地(dst)寄存器中。乘法指令有1个延迟时隙。
加载指令有两种结果:数据从存储器加载,以及从地址指针修改加载。
数据加载于流水线的E5阶段完成其运算。在E1阶段中,先计算数据地址。到了E2阶段,该数据地址被送至数据存储器。到E3阶段,则执行存储器读取动作。E4阶段时,数据在CPU核心边界处被接收。最后的E5阶段,数据被加载到寄存器内。由于数据一直要到E5阶段才会写入寄存器,因此这些指令有4个延迟时隙。而由于指针结果是在E1时写入寄存器,因此没有与地址修改有关的延迟时隙。
存储指令于流水线的E3阶段完成其运作。在E1阶段中,先计算数据地址。到了E2阶段,该数据地址被送至数据存储器。在E3阶段中,执行存储器写入动作。地址修改于流水线的E1阶段执行。虽然存储动作在流水线的E3阶段完成执行,该动作并没有延迟时隙,而是遵照下列规则(i=周期):
1)当加载在存储之前执行时,会先加载旧值,然后存储新值。
2)当存储在加载之前执行时,会先存储新值,然后加载新值。
3)当指令并行处理(in parallel)时,会先加载旧值,然后存储新值。
分支指令于流水线的E1阶段执行,分支指令之后有五个延迟时隙/CPU周期进入流水线的初始E1阶段。图12显示分支指令阶段。图13显示以时钟周期和取数据组为基础的流水线运算。在图13中,如果分支位于取数据组n之内,则分支的E1阶段为n+6的PG阶段。在周期7中,n位于E1阶段,n+6位于PG阶段。由于分支目标位于周期7的PG内,因此要到周期13时才到达E1。所以,看起来好象是执行分支需要花六个周期,或有五个延迟时隙。
在图14中,包含三个执行数据组的取数据组n,如图所示,其后还跟着六个取数据组(n+1至n+6),每个数据组都含有一个执行数据组(包含8个并行处理指令)。第一个取数据组(n)于周期1-4期间,经历程序取阶段。在这些周期期间,以下各取数据组均从程序取阶段开始。
在周期5的程序分派(DP)阶段,CPU扫瞄到p个位,并侦测到取数据组n之中有三个执行数据组(k至k+2)。这会强迫流水线拖延,以允许DP阶段开始执行周期6和7之内的数据组k+1和k+2。一旦执行数据组k+2准备好进入DC阶段(周期8),就会释出流水线拖延。
取数据组n+1至n+4都被拖延,所以CPU有时间针对取数据组n的三个执行数据组(k至k+2)执行DP阶段。取数据组n+5也在周期6和7期间被拖延;一直要等到流水线拖延在周期8被释出之后,才允许该数据组进入PG阶段。接下来,如图所示,流水线将继续执行取数据组n+5和n+6,直到包含多个执行数据组的另一取数据组进入DP阶段,或出现中断为止。
通常流水线的不连续系导因于存储器拖延、多周期的NOP、以及STP指令。在存储器拖延期间,CPU周期(通常在一个时钟周期内发生)会在两个或两个以上的周期内发生。在额外的时钟周期内,所有流水线阶段都会拖延。程序执行的结果有时与拖延一致,有时不一致。由于存储器拖延,执行动作要花较多时钟周期才能完成。
NOP计数指令提供NOP的计数周期。如果计数≥2,该NOP就是多周期NOP。以NOP 2为例,其针对执行数据组内的指示器以及先前所有执行数据组,填入额外的延迟时隙。因此,如果NOP 2与MPY指令并行处理,MPY的结果将可供下一执行数据组内的指令使用。如果分支的延迟时隙完成而多周期NOP仍在分派NOP进入流水线,分支会覆盖掉多周期NOP,且分支目标会在5个延迟时隙后开始执行。
STP是一种加强型指令,只有在符合下列两条件的情况下才可以使用:1)不能包含会强制程序取的并行处理分支指示器,以及2)没有程序取发生,因为要不就是其第二延迟时隙包含一个多周期NOP,要不就是其第三和第四延迟时隙执行数据组在相同取数据组内。
存储器系统
DSP程序存储器系统23包含64K字节的存储器和存储器/高速缓存控制器。该程序存储器可作为64K字节的内部程序存储器使用,或作为直接对应程序高速缓存使用。程序存储器系统的运作模式分为四种:程序存储器模式;高速缓存启用模式;高速缓存冻结模式;以及高速缓存旁路模式。程序存储器的运作模式由CSR中的程序高速缓存控制(PCC)字段元(位5-7)(图4)所决定。表23显示设定程序存储器系统23的组态时,可使用的PCC值。
表23.程序和数据高速缓存字段
位字段计数器 程序高速缓存(PCC) 数据高速缓存控制(DCC) 模式名称     说明
    000  PCM  DCM 高速缓存对应 高速缓存对应到存储器的。高速缓存未更新。高速缓存未存取(除非是对应到存储器),卷标可自动无效或由于之前或之后的满溢而无效(取决于高速缓存建置)。
    001  PCFL  DCFL 高速缓存满溢(flush) 整个高速缓存无效。高速缓存忽视存取。存取后高速缓存未更新。
    010  PCE  DCE 高速缓存启用 高速缓存存取。高速缓存更新。
    011  PCFR  DCFR 高速缓存冻结 高速缓存存取读取。读取后高速缓存未更新。根据指定的装置来决定高速缓存是被更新或写入无效。
    100  PCB  DCB 高速缓存旁路 高速缓存未存取。读取后高速缓存未更新。写入动作与高速缓存冻结相同。
    101  保留  保留
    110  保留  保留
    111  保留  保留
当CSR的PCC字段包含值000b时,程序存储器会对应到有效的程序存储器空间。组成程序存储器对应表的地址,将依照该装置的MAP_BOOT针脚(pin)而定。
仿真功能
本发明的观点牵涉到创新及改良的技术,用于仿真DSP1的运作,以便改良软件程序或测试DSP1的运作是否正确。以下将详细说明DSP1与仿真有关的部分。
再次参见图1,CPU 10有仿真电路50和中断电路90来支持下列仿真功能,稍后将详细说明这些功能:透过测试端口执行及扫瞄控制;分析支持;以及实时仿真支持。
透过测试端口执行及扫瞄控制的功能牵涉到要停止CPU 10。「CPU停止支持」以下列方式提供:根据软件极限点(SWBP)或分析事件来停止以RDY为基础的CPU。
分析支持包括以下各项:单一、完全相符的硬件程序地址极限(PABP);可由来自Megamodul测试存取端口(MTAP)的EMU0IN或EMU1IN输入、或是程序地址极限点所触发的分析事件;以及可触发分析事件的特殊仿真事件输入(SEE)。
实时仿真支持包括信息传送和以软件中断、分析事件、或下一周期边界的CPU分析中断(AINT)。
现在参见图15,其中更详细说明仿真电路50。Megamodule测试存取端口(MTAP)305连接到CPU测试端口(CPUTP)310、分析测试端口(ATP)320、和Megamodule测试端口(ATP)330。该电路还包括三个区域(domain):CPU区10、分析区321、和Megamodule区331,三个区域与测试端口相连。MTAP 305对megamodule内的不同区域提供扫瞄和执行控制。该测试端口为各区域与MTAP间提供接口。测试端口也为megamodule上的功能和扫瞄时钟产生、分送、以及执行时钟交换功能。MTAP 305为XDS 51和CPU实时分析功能以及信息传送功能之间提供接口。MTAP 305也为高速存储器下载/上传提供数据流。MTAP 305也透过事件计数器支持执行效能,以及同时用于仿真和测试的执行测试端口控制和时钟。
有关包含MTAP305和测试端口310、320、和330的仿真电路50的运作和设计,在由D.Deao等人提出申请的美国专利案号08/974,630(TI-24948)「含有扫瞄炼和数据流的处理器测试端口」(Processor Test Portwith Scan Chains and Data Streaming)一文中有更详尽的说明,在此一并附上作为参考。
图17为含图1处理器核心10的数字系统1700之另一具体实施例的方块图。该系统具有16kb容量的直接对应程序高速缓存1710,该高速缓存由L1程序(L1P)控制器1711所控制,并从该处连接到指令取阶段10a。以及具有16kb容量的双向组式联合数据高速缓存,该高速缓存由L1数据(L1D)控制器1721控制,并从该处连接到数据单元D1和D2。还有一个具有四排存储器,总共128KB,系连接至L1P 1711和L1D 1721,以存储数据和程序。外部存储器接口(EMIF)1750提供64位数据路径至外部存储器,图中未显示,该存储器透过延伸直接存储器存取(DMA)控制器1740提供存储器数据给L2存储器1730。
EMIF 1752为存取外部外围的装置,提供16位接口。扩充总线1770提供类似图1主机端口(host port)60/80的主机和I/O支持。
三个多信道缓冲串行端口(McBSP)1760、1762、1764均连接至DMA控制器1740。有关McBSP的内容,在美国专利案号09/055,011(TI-26204,Seshan等人提出)中有更详尽的说明,在此一并附上作为参考。
延伸指令的详细说明
如稍早曾讨论过,本发明具体实施例所包含的延伸指令集,增加指令集的正交,提供具有8位和16位的数据流增强功能,并提供减少代码大小、增加寄存器弹性的指令。
例如,有提供一组PACK和位组移位的指令集,用以简化数据组数据类型的操控性。并有一指令集直接用于数据组数据,以精简数据流,增加指令集的效率。这些指令集如下表24所示:
              表24.直接操控数据组数据的指令
    运算 可自乘的8-位 成对的16-位
    乘法     X     X
    含饱和的乘法     X
    加法/减法     X     X*
    含饱和的加法     X     X
    绝对值     X
    绝对值减法     X
    比较     X     X
    移位(Shift)     X
数据数据组/解除数据组     X     X
含饱和的数据数据组     X     X
含选择性负号的点乘积     X     X1
最小/最大/平均值     X     X
位扩充(光罩产生)     X     X
表25包含改良指令集体系结构(ISA)之延伸指令的详细说明。
              表25-延伸指令集说明
ABS2含饱和的绝对值,有符号的压缩16-位:src2操作数上半层和下半层的绝对值被置入dst的上半层和下半层之内。
ADD4针对四个8-位结果加入四个8-位对组:ADD4指令在压缩的8-位之间执行2的互补。src1和src2内的值被视为压缩的8-位数据,而结果则以压缩的8-位格式写入。针对src1和src2之内所找到的各对组压缩8-位值,src1的8-位值和src2的8-位值两者的和会产生8-位的结果。该结果将置入dst中对应的位置。而不执行饱和。传送一个8-位的地址不会影响另一个8-位地址的加法。
ADDKPC将有符号7-位常数加入程序计数器:在ADDKPC指令中,一个7-位有符号常数被向左移动2位,然后加入包含ADDKPC指令(PCEI)的取数据组的第一个指令位址中。该结果被置入目的地寄存器中。.The 3-位无符号常数定义若干个并行处理nop。此指令可协助减少设定功能呼叫传回位所需之指令数。
ANDN关于位的逻辑AND倒数(Invert):在ANDN指令中,关于位的逻辑AND系用于src1和src2的关于位逻辑倒数。而结果将置入ds中。
AVG2平均值,有符号压缩的16-位:AVG2指令针对压缩的16位数据执行平均数运算。对于src1和src2中的各组有符号的16-位值,AVG2计算出两个值的平均值,并传回在dst对应位置中一个有符号的16-位量。
AVGU4平均值,无符号压缩的8-位:AVGU4指令针对压缩8-位数据执行平均数运算。src1和src2中的的值被视为无符号压缩的8-位
数据,并且该结果以无符号压缩的8-位格式写入。对于对于src1和src2中每一无符号压缩的8-位值,AVGU4计算出两个值的平均值,并传回在dst对应位置中一个无符号的8-位量。
BDEC分支和减少量:如果述语(predication)和减少量寄存器(dst)为正数(大于or等于0),则BDEC指令执行一次相对分支和减少量dst。本指令利用scst10所指定的10-位有符号常数来执行相对分支。该常数被向左移动2位,然后加入包含BDEC指令(PCE1)的取数据组的第一指令位址。该结果会被置入程序取计数器(PFC)中。本指令有条件的根据寄存器的值,协助降低减少寄存器和分支时所需的指令数。也请注意,可用来释放述语(predicate)的任何寄存器,也可供其它用途使用。
BITC4位计数,压缩的8-位:BITC4针对8-位执行位计数运算。src2中的值被视为压缩的8-位数据,且该结果以压缩的8-位格式写入。对于src2中的每一8-位,该值中"1"位的数量会被写入dst中相对应的位置。
BITR位反转:BITR指令执行位反转的动作。位反转功能反转32-位字中的位顺序。换言之,即是来源的位0变成结果的位31。来源的位变成结果的位30。位2变成位29,依此类推。
BNOP利用NOP使用取代(Displacement)的分支:BNOP指令的常数取代形式,利用NOP执行相对分支。该指令通过src2所指定的12-位有符号常数,执行相对分支。该常数向左移动2位,然后加入包含BNOP指令(PCE1)的取数据组的第一指令位址。该结果被置入程序取计数器(PFC)中。src1所指定的3-位无符号常数,提供要插入延迟时隙NOP的数量,从0到5。若src1=0,则不插入任何NOP周期。当必须以NOP填入分支的延迟时隙时,本指令协助减少执行分支的
指令数。BNOP指令的寄存器形式,利用NOP执行绝对分支。src2中所指定的寄存器会被置入程序取计数器(PFC)中。
BPOS分支正数:如果述语(predication)寄存器(dst)为正数(大于or等于0),BPOS指令会执行相对分支。如果dst为负数,BPOS指令不会执行其它动作。该指令利用scstl0所指定的10-位有符号常数,执行相对分支。该常数向左移动2位,然后加入包含BPOS指令(PCE1)的取数据组的第一指令位址。该结果被置入程序取计数器(PFC)中。请注意,可释放述语寄存器(A0-A2和B0-B2)的任何寄存器,也可用于其它用途。
CMPEQ2比较是否相等,压缩的16-位:CMPEQ2指令针对压缩的16-位数据,执行相等比较。每个src1中的16-位值与src2中相对应的16-位值比较,如果相等就传回1,如果不相等就传回0。相等结果被压缩至dst的两个最不明显的位中。结果值的下层对组(lower pair)将置入位0中,结果值的上层对组将置入位1中。剩余的dst位则设为0。
CMPEQ4比较是否相等,压缩的8-位:CMPEQ4指令针对压缩的8-位数据,执行相等比较。每个src1中的8-位值与src2中相对应的8-位值比较,如果相等就传回1,如果不相等就传回0。相等结果被压缩至dst的四个最不明显的位中。每次输入的8-位值,从最不明显字节开始,向最明显字节编号,依次编为0至3。字节0的比较结果被写入结果的位0中。同样地,字节1至3的结果,分别被写入结果的位1至3,如下图所示。剩余的dst位则设为0。
CMPGT2比较是否大于,压缩的16-位:CMPGTZ指令针对有符号压缩的16-位数据执行大于比较。每src1中的有符号16-位值与src2中相对
应的有符号16-位值比较,如果src1大于src2,则传回1,如果未大于,则传回0。比较结果会被压缩至dst的两个最不明显的位中。结果值的下层对组(lower pair)将置入位0中,结果值的上层对组将置入位1中。剩余的dst位则设为0。
CMPGTU4比较是否大于,无符号压缩的8-位:CMPGTU4指令针对压缩的8-位数据,执行大于比较。每个src1中的无符号8-位值与src2中相对应的8-位无符号值比较,如果src1中的字节大于src2中相对应的字节,则传回1,如果未大于,则传回0。比较结果会被压缩至dst的四个不明显的位中。每次输入的8-位值,从最不明显字节开始,向最明显字节编号,依次编为0至3。字节0的比较结果被写入结果的位0中。同样地,字节1至3的结果,分别被写入结果的位1至3,如下图所示。剩余的dst位则设为0。
CMPLT2比较是否小于,压缩的16-位(伪运算):CMPLT2为用来针对有符号压缩的16-位数据,执行小于比较的伪运算。每一src2中的有符号16-位值与src1中相对应的有符号16-位值比较,如果src2小于src1,就传回1,如果不是小于,就传回0。该比较结果被压缩至dst的两个最不明显位中。组合器使用运算CMPGT2(.单元)src1,src2,dst来执行此工作。
CMPLTU4比较是否小于,无符号压缩的8-位(伪运算):CMPLTU4为针对压缩的8-位数据执行小于比较的伪运算。每一src2中的无符号8-位值与src1中相对应的8-位无符号值比较,如果src2小于src1,就传回1,如果不是小于,就传回0。该比较结果被压缩至dst的四个最不明显位中。每次输入的8-位值,从最不明显字节开始,向最明显字节编号,依次编为0至3。字节0的比较结果被写入结果的位0中。同样地,字节1至3的结果,分别被写入结果的位1至3,如下图所示。剩余的dst位则设为0。
组合器使用指令CMPGTU4(.单元)src1,src2,dst来执行此工作。
DEAL解交错(De-interleave)和数据组:DEAL指令针对src2中的位,执行解交错和数据组运算。src2的奇数和偶位被粹取至两个个别的16-位量中。接着该16-位量被压缩,以致偶数位被置入下半字中,奇数位被置入上半字中。结果,src2的位0,2,4,...,28,30被置入dst的位0,1,2,...,14,15 of dst。同样地,src2的位1,3,5,...,29,31被置入dst的位16,17,18,...,30,31。DEAL指令正好是SHFL指令的相反。
DOTP2点乘积,有符号压缩的16-位:DOTP2指令传回两组有符号压缩的16-位值的点乘积。src1和src2中的值被视为有符号压缩的16-位量。有符号结果被写入单一32-位寄存器,符号延伸至64-位寄存器对组中。src1和src2的下半字乘积加入src1和src2的上半字乘积中。接着,结果被写入dst中。在64-位结果版本中,寄存器对组的上层字,分别根据结果是正数或负数,决定全部为0或全部为1。32-位结果版本传回的结果,与64-位结果版本的下层32位相同。上层32-位则被丢弃。
DOTPN2含负号的点乘积,有符号压缩的16-位:DOTPN2指令传回两组有符号压缩的16-位值之点乘积,其中第二个乘积带负号。src1和src2中的值被视为有符号压缩的16-位。有符号结果被写入单一32-位寄存器。src1和src2上半字的乘积减去src1和src2下半字的乘积。该结果被写入dst中。
DOTPNRSU2含负号的点乘积,移位和循环,有符号乘以无符号的压缩16-位:DOTPNRSU2指令传回两对组的压缩16-位值,其中第二乘积带负号。此指令取得点乘积的结果,并执行额外的循环及移位步骤。src1中
的值被视为有符号压缩的16-位量,而src2中的值被视为无符号压缩的16-位量。该结果被写入dst中。将src1和src2上半字的乘积减去src1和src2下半字的乘积。然后将值215加入此差中,产生暂时的32-位结果。该暂时的结果向符号右方移动16位,产生一个循环、移位的符号延伸的结果,并置入dst中。
DOTPNRUS2含负号的点乘积,移位和循环,无符号乘以有符号的压缩16-位:DOTPNRUS2伪运算,执行两组压缩的16-位值的点乘积,其中第二乘积带负号。此指令取得点乘积的结果,并执行额外的循环及移位步骤。src1中的值被视为有符号压缩的16-位量,而src2中的值被视为无符号压缩的16-位量。该结果被写入dst中。组合器利用DOTPNRSU2 src1,src2,dst指令来执行此工作。将src1和src2上半字的乘积减去src1和src2下半字的乘积。然后将值215加入此差中,产生暂时的32-位结果。该暂时的结果向符号右方移动16位,产生一个循环、移位的符号延伸的结果,并置入dst中。
DOTPRSU2含移位和循环的点乘积,有符号乘以无符号的压缩16-位:DOTPRSU2指令传回两组压缩的16-位值的点乘积。此指令取得点乘积的结果,并执行额外的循环及移位步骤。src1中的值被视为有符号压缩的16-位量,而src2中的值被视为无符号压缩的16-位量。该结果被写入dst中。将src1和src2上半字的乘积加上src1和src2下半字的乘积。然后将值215加入此和中,产生暂时的32-位结果。该暂时的结果向符号右方移动16位,产生一个循环、移位的符号延伸的结果,并置入dst中。
DOTPRUS2含移位和循环的点乘积,无符号乘以有符号的封的16-位(伪运算):DOTPRUS2伪运算传回两组压缩的16-位值的点乘积。此指令取得点乘积的结果,并执行额外的循环及移位步骤。src1中的值被视为有
符号压缩的16-位量,而src2中的值被视为无符号压缩的16-位量。该结果被写入dst中。组合器利用DOTPRSU2 src1,src2,dst指令来执行此工作。将src1和src2上半字的乘积加上src1和src2下半字的乘积。然后将值215加入此和中,产生暂时的32-位结果。该暂时的结果向符号右方移动16位,产生一个循环、移位的符号延伸的结果,并置入dst中。
DOTPSU4点乘积,有符号乘以无符号的压缩8-位:DOTPSU4指令传回四组压缩的8-位值的点乘积。between four sets of压缩的8-位值:src1中的值被视为有符号压缩的8-位量,而src2中的值被视为无符号8-位的压缩数据。该结果被写入dst中。针对src1和src2中各组8-位量,将src2的无符号8-位值乘以src1的有符号8-位值,并将四组乘积加总,将最后的点乘积以32-位结果写入dst。
DOTPUS4点乘积,有符号乘以有符号的压缩8-位(伪运算:DOTPSU4伪运算传回四组压缩的8-位值的点乘积。src1中的值被视为有符号压缩的8-位量,而src2中的值被视为无符号8-位数据组数据。该结果被写入dst中。组合器利用DOTPSU4 src1,src2,dst指令来执行此工作。针对src1和src2中各组8-位量,将src2的无符号8-位值乘以src1的有符号8-位值,并将四组乘积加总,将最后的点乘积以32-位结果写入dst。
DOTPU4点乘积,无符号压缩的8-位:DOTPU4指令传回四组压缩的8-位值的点乘积。src1和src2中的值被视为无符号8-位压缩数据。该无符号结果被写入dst中。针对src1和src2中各组8-位量,将src2的无符号8-位值乘以src1的无符号8-位值,并将四组乘积加总,将最后的点乘积以32-位结果写入dst。
GMPY4Galois字段乘法,压缩的8-位:GMPY4指令对src1中的四个值和src2中的四个并行处理值,执行Galois字段乘法。四个乘积被压缩到dst中。src1和src2中的值被视为无符号8-位压缩数据。针对src1和src2中各组8-位量,将src1的无符号8-位值以Galois字段乘法与src2的无符号8-位值相乘。src1字节0和src2字节0的乘积被写入dst的字节0。src1字节1和src2字节1的乘积被写入dst的字节1。src1.字节2和src2字节2的乘积被写入dst的字节2。src1字节3和src2字节3的乘积被写入dst中最明显字节之内。
LDNDW加载非校直双字:LDNDW指令将64-位的量从存储器加载到寄存器对组,dst_o:dst_e。LDNDW指令可从任何位组边界读取一个64-位值,因此不需要校直64-位边界。存储器的有效地址可由基本地址寄存器(baseR)和选择性的抵销所形成,而后者可以是寄存器(offsetR)或5-位无符号常数(ucst5)。
LDNW加载非校直字:LDNW指令将32-位量从存储器加载到寄存器dst中。LDNW指令可从任何位组边界读取一个32-位值。因此不需要校直32-位边界。存储器的有效地址可由基本地址寄存器(baseR)和选择性的抵销(offset)所形成,而后者可以是寄存器(offsetR)或5-位无符号常数(ucst5)。如果未提供抵销(offset),组合器将抵销指定为零。
MAX2最大值,有符号压缩的16-位:MAX2针对压缩的有符号16-位值,执行最大值运算。对于src1和src2中各组有符号16-位值,MAX2将对应位置中较大的值置入dst中。
MAXU4最大值,无符号压缩的8-位:MAXU4针对压缩的无符号8-位值,执行最大值运算。对于src1和src2中各组无符号8-位值,MAXU4将对应位置中较大的值置入dst中。
MIN2最小值,有符号压缩的16-位:MIN2针对压缩的有符号16-位值,执行最小值运算。对于src1和src2中各组有符号16-位值,MIN2将对应位置中较小的值置入dst中。
MINU4最小值,无符号压缩的8-位:MINU4针对压缩的无符号8位值,执行最小值运算。对于src1和src2中各组无符号8-位值,MINU4将对应位置中较小的值置入dst中。
MPY2乘法,有符号乘以有符号的压缩16-位:MPY2指令针对两组有符号压缩的16-位值,执行两次16-位乘16-位乘法。src1和src2中的值被视为有符号压缩的16-位量。32-位结果被写入64-位寄存器对组中。src1和src2下半字的乘积被写入偶数目的地寄存器,dst_e。src1和src2上半字的乘积被写入奇数目的地寄存器,dst_o。
MPYHI将16 MSB×(乘以)32-位得出64-位结果:MPYHI指令执行16-位乘以32-位的乘法。src1上半部被用来作为16位有符号的输入。src2中的值被视为32-位有符号值。该结果被写入64-位寄存器对组,dst_o:dst_e,的下层48位中,并符号延伸为64位。
MPYHIR16 MSB×(乘以)32-位,移动15位以产生四舍五入的32-位结果:MPYHIR指令执行16-位乘以32-位的乘法。src1上半部被用来作为16位有符号的输入。src2中的值被视为32-位有符号值。然后,通过加入值214,将乘积四舍五入为32-位结果,并将此和右移15位。结果的下层32-位被写入dst中。
MPYIH将32-位×(乘以)16 MSB得出64-位结果(伪运算):MPYIH伪运算执行16-位乘以32-位的乘法。src1上半部被用来作为16位有符号的输入。src2中的值被视为32-位有符号值。该结果被写入64-位寄存器对组dst_o:dst_e的下层48位中,并符号延伸为64位。组合
器利用MPYHI src1,src2,dst指令来执行此工作。
MPYIHR32-位×(乘以)16 MSB,移动15位以产生四舍五入的32-位结果(伪运算):MPYIHR伪运算执行16-位乘以32-位的乘法。src1上半部被用来作为16位有符号的输入。src2中的值被视为32-位有符号值。然后,通过加入值214,将乘积四舍五入为32-位结果,并将此和右移15位。结果的下层32-位被写入dst中。组合器利用MPYHIR src1,src2,dst来执行此运算。
MPYIL32-位×(乘以)16 LSB得出64-位结果(伪运算):MPYIL伪运算执行6-位乘以32-位乘法。src1下半部被用来作为16位有符号的输入。src2中的值被视为32-位有符号值。该结果被写入64-位寄存器对组dst_o:dst_e的下层48位中,并符号延伸为64位。组合器利用MPYLI src1,src2,dst指令来执行此运算。
MPYILR32-位×(乘以)16 LSB,移动15位以产生四舍五入的32-位结果(伪运算):MPYLIR伪运算执行16-位乘以32-位的乘法。src1下半部被用来作为16位有符号的输入。src2中的值被视为32-位有符号值。然后,通过加入值214,将乘积四舍五入为32-位结果,并将此和右移15位。结果的下层32-位被写入dst中。组合器利用MPYLIR src1,src2,dst指令来执行此运算。
MPYLI将16 LSB×(乘以)32-位得出64-位结果:MPYLI指令执行16-位乘以32-位的乘法。src1下半部被用来作为16位有符号的输入。src2中的值被视为32-位有符号值。该结果被写入64-位寄存器对组dst_o:dst_e的下层48位中,并符号延伸为64位。
MPYLIR16 LSB×(乘以)32-位,移动15位以产生四舍五入的32-位结果:MPYLIR指令执行16-位乘以32-位的乘法。src1下半部被用来作为16位有符号的输入。src2中的值被视为32-位有符号值。然后,通过加入值214,将乘积四舍五入为32-位结果,并将此和右移15位。
结果的下层32-位被写入dst中。
MPYSU4有符号乘以无符号的压缩8-位:MPYSU4指令传回产生四个有符号16-位结果的四组压缩的8-位值之乘积。四个有符号16-位结果被压缩至64-位寄存器对组,dst_o:dst_e。src1中的值被视为有符号压缩的8-位量,而src2中的值被视为无符号8-位压缩数据。对于src1和src2中各8-位对组的量,来自src1的有符号8-位值乘来自src2的无符号8-位值。src1字节0和src2字节0的乘积被写入dst_e的下半部。src1字节1和src2字节1的乘积被写入dst_e的上半部。src1字节2和src2字节2的乘积被写入dst_o的下半部。src1字节3和src2字节3的乘积被写入dst_o的上半部。
MPYUS4无符号乘以有符号的压缩8-位(伪运算):MPYUS4伪运算传回产生四个有符号16-位结果的四组压缩的8-位值之乘积。四个有符号16-位结果被压缩至64-位寄存器对组,dst_o:dst_e。src1中的值被视为有符号压缩的8-位量,而src2中的值被视为无符号8-位压缩数据。该组合器利用MPYSU4 src1,src2,dst指令来执行此运算。对于src1和src2中各8-位对组的量,来自src1的有符号8-位值乘来自src2的无符号8-位值。src1字节0和src2字节0的乘积被写入dst_e的下半部。src1字节1和src2字节1的乘积被写入dst_e的上半部。src1字节2和src2字节2的乘积被写入dst_o的下半部。src1字节3和src2字节3的乘积被写入dst_o的上半部。
MPYU4无符号乘以无符号的压缩8-位:MPYU4指令传回产生四个无符号16-立结果的四组压缩的8-位值之乘积,其中该16-位结果被压缩至64-位寄存器对组dst_o:dst_e中。src1和src2中的值均被视为无符号8-位压缩数据。对于src1和src2中各8-位对组的量,来自src1的无符号8-位值乘来自src2的无符号8-位值。src1字节0和src2字节0的乘积被写入dst_e的下半部。src1字节1和src2字节1的乘积被写入dst_e的上半部。src1字节2和src2字节2的乘积被写入dst_o的下半
部。src1字节3和src2字节3的乘积被写入dst_o的上半部。
MVD从寄存器移动至寄存器,已延迟:MVD指令在4周期期间,将数据从src2寄存器移动至dst寄存器。此指令利用乘法器路径完成。
PACK2压缩161sb,161sb至压缩的16-位中:PACK2指令取得src1和src2的下半字,并将其压缩至dst中。src1的下半字被置入dst的上半字中。src2的下半字被置入dst的下半字中。本指令对于要操控及准备压缩算术运算(譬如像ADD2)所使用的16-位值对组是很有用的。
PACKH2压缩16msb,16msb至压缩的16-位中:PACKH2指令取得src1和src2的上半字,并将其压缩至dst中。src1的上半字被置入dst的上半字中。src2的上半字被置入dst的下半字中。本指令对于操控及准备压缩算术运算(譬如像ADD2)所使用的16-位值对组是很有用的。
PACKH4压缩四个半字的高字节至压缩的8-位中:PACKH4指令将src1和src2中的两个半字高字节,压缩至dst中。src1的字节将压缩至dst的最明显字节中,src2的字节将压缩至dst的最不明显字节。特别是,src1的上半字的高字节,被移动到dst的上半字的上层字节。src1的下半字的高字节,被移动到dst的上半字的下层字节。src2的上半字的高字节,被移动到dst的下半字的上层字节。src2的下半字的高字节,被移动到dst的下半字的下层字节。
PACKHL2压缩16msb,161sb至压缩的16-位:PACKHL2指令取得src1的上半字和src2的下半字,并将其压缩至dst中。src1的上半字被置入dst的上半字中。src的下半字被置入dst的下半字。本指令对于操控及准备压缩算术运算(譬如像ADD2)所使用的16-位值对组是很有用的。
PACKL4
压缩四个半字的下层字节至压缩的8-位:PACKL4指令移动src1和src2中的两个半字的下层字节,并压缩至dst中。src1的字节将压缩至dst的最明显字节中,src2的字节将压缩至dst的最不明显字节。特别是,src1的上半字的低字节,被移动到dst的上半字的上层字节。src1的下半字的低字节,被移动到dst的上半字的下层字节。src2的上半字的低字节,被移动到dst的下半字的上层字节。src2的下半字的低字节,被移动到dst的下半字的下层字节。
PACKLH2压缩161sb,16msb至压缩的16-位:PACKLH2指令取得src1的下半字以及src2的上半字,并压缩至dst。src1的下半字被置入dst的上半字。src2的上半字被置入dst的下半字。本指令对于操控及准备压缩算术运算(譬如像ADD2)所使用的16-位值对组是很有用的。
ROTL向左旋转:ROTL指令将src2的32-位值向左旋转,并将结果置入dst。要旋转的位数由src1的五个最不明显位提供。src1的位5至31可忽略且可以为非零。
SADD2加上饱和,有符号压缩的16-位:SADD2指令针对src1和src2中有符号压缩的16-位量,执行2-余弦(complement)加法。该结果以有符号压缩的16-位格式置入dst中。对于src1和src2中16-位对组的量,计算src1的有符号16-位值以及src2的有符号16-位值两者之和,并使之饱和,以产生有符号16-位结果。该结果被置入dst中相对应的位置。
SADDSU2加上饱和,有符号与无符号压缩的16-位(伪运算):SADDSUZ伪运算针对无符号与有符号压缩的16-位量,执行2余弦加法。src1中的值被视为无符号压缩的16-位量,而src2中的值被视为有符号压缩的16-位量。该结果以无符号压缩的16-位格式,被置入dst中。组合器利用SADDUS2 src1,src2,dst指令来执行此运算。
对于src1和src2中的16-位对组量,计算src1的无符号16-位值以及src2的有符号16-位值两者之和,并使之饱和,以产生有符号16-位结果。该结果被置入dst中相对应的位置。
SADDU4加上饱和,无符号压缩的8-位:SADDU4指令针对无符号压缩的8-位量,执行2余弦加法。src1和src2中的值被视为无符号压缩的8-位量。该结果以无符号压缩的8-位格式写入dst中。对于src1和src2中的8-位对组量,计算src1的无符号8-位值和src2的无符号8-位值两者之和,并使之饱和,以产生无符号8-位结果。该结果被置入dst中相对应的位置。此运算会分别对每一8-位执行。本指令不影响CSR中的SAT位。
SADDUS2加上饱和,无符号与有符号压缩的16-位:SADDUS2指令针对无符号和有符号压缩的16-位,执行2余弦加法。src1中的值被视为无符号压缩的16-位量,而src2中的值被视为有符号压缩的16-位量。该结果以无符号压缩的16-位格式,被置入dst中。对于src1和src2中的16-位对组量,计算src1的无符号16-位值以及src2的有符号16-位值两者之和,并使之饱和,以产生有符号16-位结果。该结果被置入dst中相对应的位置。
SHFL混合:SHFL指令执行src2中两半字的交错运算。src2下半字中的位被置于dst的偶数位位置中,而src2上半字中的位被置于dst的奇数位位置中。因此,src2的位0,1,2,…,14,15置入dst的位0,2,4,...,28,30中。同样地,src2的位16,17,18,..30,31被置入dst的位1,3,5,..29,31中。SHFL指令正好是DEAL指令的相反。
SHLMB左移和合并字节:SHLMB指令将src2的内容左移一字节,然后src1最明显的字节被并入最不明显字节位置。接着该结果被置入dst中。
SHR2右移,有符号压缩的16-位:SHR2指令针对有符号压缩的16-位量,
执行算术右移。src2的值被视为有符号压缩的16-位量。src1的第五位或ucst5被视为移位量。该结果以有记号压缩的16-位格式置入dst中。对于src2中各有符号的16-位量,右移量为src1或ucs5下层五位所指定的位数。src1的位5至31被忽略,且可为非零。移位量为符号延伸,并置入dst中相对应的位置。被移出有符号16-位量的最不明显位之位则被丢弃。
SHRMB右移和合并字节:The SHRMB指令将src2的内容右移一字节,然后src1最不明显的字节被并入最明显字节位置。接着该结果被置入dst中。
SHRU2右移,无符号压缩的16-位:SHRU2指令针对无符号压缩的16-位量,执行算术右移。src2中的值被视为无符号压缩的16-位量。src1的下层五位或ucst5被视为移位量。该结果以无符号压缩的16-位格式置入dst中。对于src2的无符号16-位量,右移量为src1或ucs5下层五位指定的位数。src1的位5至31被忽略,且可为非零。移位量为零延伸,并置入dst中相对应的位置。被移出有符号16-位量的最不明显位之位则被丢弃。
SMPY2有符号乘以有符号,具有左移及饱和,压缩的16-位:SMPY2指令针对两组有符号压缩的16-位值,执行两次16-位乘16-位的乘法,并具有额外的左移和饱和。src1和src2中的值被视为有符号压缩的16-位量。两个32-位结果被写入一个64-位寄存器对组中。SMPY2指令产生两个16×16乘积。每一乘积左移一位,且如果左移结果等于0×80000000,则输出值被饱和为0×7FFFFFFF。src1和src2下半字的饱和乘积,被写入偶数目的地寄存器,dst_e。src1和src2的上半字饱和乘积,被写入奇数目的地寄存器,dst_o。注意:如果任一乘积饱和,SAT位会在结果被写入的周期时设定到CSR中。如果没有乘积饱和,CSR中的SAT位不受影响。
本指令协助减少针对两个寄存器下半和上半部执行两次16-位乘16-位的饱和乘法所需之指令数。
SPACK2饱和并压缩至有符号压缩的16-位:SPACK2指令取得src1和src2中两个有符号32-位量,饱和至有符号16-位量。接着有符号16-位结果被压缩至有符号压缩的16-位格式,并写入dst中。特别是,src1的饱和16-位有符号值被写入dst的上半字,而src2的饱和16-位有符号值被写入dst的下半字。饱和动作会个别针对各输入值执行。输入值以有符号32-位量开始,并根据下列规则饱和至16-位量中:如果该值落在范围-215至215-1之内,则不执行饱和,且该值被截断为16位。如果该值大于215-1,则结果被设定为215-1。如果该值小于-215,则结果被设定为-215。本指令在操控具有32-位精确度的16-位数据程序,作为其暂时步骤,是相当的有用,但最后结果必须以16-位表示。饱和步骤确保有符号16-位范围之外的任意值,在被截断为16位之前,均固定在该范围的高或低端。注意:本运算分别针对各16-位值加以执行。本指令不影响CSR中的SAT位。
SPACKU4饱和并压缩至无符号压缩的8-位:SPACKU4指令取得四个有符号的16-位值,并将其饱和至无符号的8-位量。src1和src2中的值被视为有符号压缩的16-位量。该结果以无符号压缩的8-位格式写入dst中。src1和src2中各有符号的16-位量被饱和至无符号8-位,如下所述。该最后的量被压缩至无符号压缩的8-位格式中。特别是,src1的上半字被用来产生dst的最明显字节。scr1的下半字被用来产生dst的第二个最明显字节(位16至23)。src2的上半字被用来产生dst的第三最明显字节(位8至15)。src2的下半字被用来产生dst的最不明显字节。
饱和动作被个别在各有符号16-位的输入上执行,产生个别的无符号8-位结果。针对各值,施加下列测试:如果该值落在范围0至28-1之内,则不执行饱和,且该值被截断为8位。如果该值大于28-1,则结果被设定为28-1。如果该值小于0,则结果被设定为0。本指令在操控具有16-位精确度的8-位数据程序,作为其暂时步骤,是相当的有用,但最后结果必须以8-位表示。饱和步骤确保有符号8-位范围之外的任意值,在被截断为86位之前,均固定在该范围的高或低端。注意:本运算分别针对各8-位值加以执行。本指令不影响CSR中的SAT位。
SSHVL变量左移,有记号的:SSHVL指令将src2中有符号的32-位值向左或右移动,移动距离由src1所指定的位数而定,并将结果置于dst内。src1自变量被视为2余弦的移位值。移位数若大于31则固定为31的移位数,若小于-31,则固定为-31的移位数。如果src1为正数,src2向左移动。如果src1为负数,src2向右移动移位数的绝对值,并以符号延伸移位值置入dst中。也应注意,若src1为负数,向右移动超过位0的位将遗失。注意:如果移位值为饱和,则SAT位在结果被写入的相同周期时,设定至CSR之中。如果移位值未饱和,则SAT位不受影响。
SSHVR变量右移,带符号:SSHVR指令移动带符号src2的32-位值至以src1标示的位数左或右并将结果放在dst.....src1自变量经处理成为2s-补码移位值。大于31的移位量夹到31移位量。小于-31的移位量夹到-31移位量。如果src1为正值,src2移到以位于dst符号扩充移位值标示值的右边。有必要说明,如果src1为正值,右移位过元位0后即告遗失。如果src1为负值移到移位量值的绝对值的左边及结果放在dst。
STDW双文字存储:STDW指令存储一64-位量从一奇数:偶数寄存器对至存储器,srcd.需要对准64-位边界。有效存储器地址从一基址寄存器(baseR)及一选择性偏移形成,即为一寄存器(offsetR)或一5位无符号常数(ucst5)二者之一。
STNDW存储非对准双文字:STNDW指令一64-位量从一奇数:偶数寄存器对至存储器,srcd.STNDW指令可书写一64位值至任何字节边界。所以不需要对准一64位边界。有效存储器地址从一基址寄存器(baseR)及一选择性偏移形成,即为一寄存器(offsetR)或一5位无符号常数(ucst5)二者之一。
STNW存储非对准双文字:STNDW指令一32-位量从一32-寄存器对至存储器,srcd.STNW指令可书写一32位值至任何字节边界。所以不需要对准一32位边界。有效存储器地址从一基址寄存器(baseR)及一选择性偏移形成,即为一寄存器(offsetR)或一5位无符号常数(ucst5)二者之一。如果偏移未知,组合程序指定零偏移。
SUB4不饱和减法,带符号压缩8位:SUB4执行压缩8位量间2s补码减法。src1及src2值经处理成为压缩8位量,及结果写入dst成为压缩8位格式。src1及src2的各对压缩8位量,src1的8位值及src2的8位值之差经计算产生一8位结果。结果效在dst的相对位置。特别,src1字节0及src2字节0之差放在dst的字节0内。src1字节1及src2字节1之差放在dst的字节1内。src1字节2及src2字节2 is placed in字节2 of dst.src1字节3及src2字节3之差放在dst的字节3内。不饱和计算。
SUBABS4绝对值减法,无符号压缩8位:SUBABS4:The SUBABS4指令计算源寄存器所含压缩8位数据间之差的绝对值。The values in src1及
src2值处理成为无符号压缩8位量。结果写入dst成为无符号压缩8位格式。For each pair of unsigned 8-bit values in src1及src2的各无符号压缩8位对计算绝对值差。结果放在dst的相对位置内。特别,src1字节0及src2字节0之差的绝对值放在dst的字节0内。src1字节1及src2字节1之差的绝对值放在dst的字节1内。src1字节2及src2字节2之差的绝对值放在dst的字节2内。src1字节3及src2字节3之差绝对值放在dst的字节3内。
SWAP2各文字内交换半字(假操作):SWAP2为假操作即将src2的下半字放在dst的上半字而src的上半字放在dst的下半字。组合成PACKLH2src,src,dst。这种指令对于用来压缩计算操作的16位值对的准备及处理有用,如ADD2。SWAP2指令可连接SWAN指令以更改32位数据的字节次序。
SWAP4各半字内交换字节:SWAP4指令交换src2各半字内字节对,结果放在dst内。src2值经处理成为压缩8位值。特别,上半字的上字节放在上半字的下字节而上半字的下字节放在上半字的上字节。另外下半字的上字节放在下半字的下字节而下半字的下字节放在下半字的上字节。本指令本身改变半字内的位次序。有效改变紧缩在32位中的16位endianness。全32位量的endianness可通过使用SWAP4连接SWAP2指令邢改变。
UNPKHU4无压缩高无符号压缩8位至无符号压缩16位:UNPKHU4指令移动两最重要src字节进入dst两半字的两低字节。特别,上半字的上字节放在上半字的下字节而上半字的下字节放在下半字的下字节。src2字节为无压缩零扩充,以零充填dst两半字的两高字节。
UNPKLU4
无压缩低无符号压缩8位至无符号压缩16位:UNPKHU4指令移动两最不重要src字节进入dst两半字的两低字节。特别,下半字的上字节放在上半字的下字节而下半字的下字节放在下半字的下字节。src2字节为无压缩零扩充,以零充填dst两半字的两高字节。
XPND2扩充位至16位掩码:XPND2指令读取两最不重要src字节及扩充进入写在dst两半字掩码。src2的位1系复制及放在dst的上半字。src2位0系复制及放在dst的下半字位。src2的位2至31忽略。本指令结合CMPGT2或CMPEQ2的输出对产生相当于比较各半字位置的掩码有用。该掩码可结合ANDN,AND或OR指令使用以执行其它操作如组合。
XPND4扩充位至压缩8位掩码:XPND4指令读取四最不重要src字节及扩充进入写在dst四位掩码。src2的位0系复制及放在dst的最不重要字节。src2位1系复制及放在dst的第二最不重要字节.src2的位2系复制及放在dst的第二最重要字节。src2的位系复制及放在dst的最重要字节。src2的位4至31忽略。本指令结合CMPGT4或CMPEQ4的输出对产生相当于经比较各字节位置的掩码有用。该掩码可结合ANDN,AND或OR指令使用以执行其它操作如组合。
就本发明具体实施例的改良式指令集体系结构之功用范例来说,在此将说明用于统一下列概念的点产品:
-VLIW
-软件流水线化
-高位准向量最佳化以传输数码
-未校准的存储器存取
-分离式ALU运算
表格26为在已只的程序语言码C中的点产品公式撰写窗体,其中牵涉到两个数组,由两个指针bvPtr和vecPtr所指示。每个组件对都彼此相乘并且加入执行总合中。表格26-点产品,C原始码
int dot vselp cn(const short*RESTRICT bvPtr,const short* RESTRICTvecPtr){int i,psi=0;WORD_ALIGNED(bvPtr);WORD_ALIGNED(vecPtr);for(i=0,psi=0;i<40;I++)psi+=bvPtr[i]*vecPtr[i];return psi;}
请注意,其中包含"WORD_ALIGNED"指令以「告知」最佳化组译程序,指针bvPTR和vecPTR会依序对准以激活本发明的分离式ALU运算。
为了获得本发明分离式ALU运算的好处,最佳化器不会重新执行循环,而且会将两个16位值加载32位寄存器中,如表格27内所示。表格27-建立两个指针给已压缩数据
int dot vselp c(const int*RESTRICT bvPtr,const int* RESTRICTvecPtr){int i,psi1=0,psi2=0;WORD_ALIGNED(bvPtr);WORD_ALIGNED(vecPtr);
请注意图27,此时的bvPTR和vecPTR为整数*,如此就可假设其指向在32位界限内已校准/已压缩的16位数组。若无此表格26内原始码明确提供的知识,则无法达成表格28内显示的向量转换最佳化,以便在每个指令执行期间允许执行两个乘法累积(mac)运算。
表格28-向量转换
for(i=0;i<20;i++){psi1+=mpy(bvPtr[i],vecPtr[i]);psi2+=mpyh(bvPtr[i],vecPtr[i]);return psi1+psi2;
对于本发明具体实施例的未校准负载双字符(Iddw)指令而言,并未发出校准,如表格29内所示。表格29-具有未校准能力的改良版点产品
int dot_vselp_c(const short* RESTRICT bvPtr,const short*RESTRICTvecPtr){int i,psi1=0,psi2=0;for(i=0;i<20;i++){
本发明具体实施例上的未校准负载/存储运算都使用到D单元,如此即使同时读取64位,则仍旧要花两个周期来执行。在此情况下,两个mac/周期净容量的两个周期内会执行四个mac运算,如表格30内所示。有利的是,组译器/最佳化器并不需要知道任何相关校准。表格30-最佳化点产品原始码
int64 t1=_mem64(bvPtr[i]);/* read nonaligned 64bits*/int64 t2=-mem64(vecPtr[i]);/* read nonaligned 64bits*/int64 psi1+=mpy2(hi(t1),hi(t2));int64 psi2+=mpy2(lo(t1),lo(t2));}return hi(psi1)+_lo(psi1)+hi(psi2)+_lo(psi2);}
有利的是,分离式ALU指令与本发明具体实施例的未校准负载/存储指令结合可让更多循环有两个mac/周期容量。更进一步,若最佳化器可决定bvPtr和vecPtr是否校准,则可将原始码进一步最佳化已提供四个mac/周期容量。有利的是,本发明具体实施例的指令集体系结构会利用上述概念的结合,通过较高效能的原始C原始码简化程序化模型。
其它系统范例
美国第5,072,418号专利(在此并入当成参考)内说明许多可从本发明领域中获致好处的范例系统,尤其请参考美国第5,072,418号专利的图式2-18。其中使用并入本发明领域中,用以改善效能或降低成本的微处理器,以便进一步改善美国第5,072,418号专利内说明的系统。这类系统包含(但不受限于)工业处理控制、汽车系统、马达控制、机器人控制系统、卫星通信系统、回音消除系统、调制解调器、影像成形系统、语音辨识系统、具有加密功能的语音编码器调制解调器系统等等。
例如,数字系统1可包含于行动通信装置内,像是具有综合式键盘与显示屏的无线电话。具有处理器10的数字系统1透过适当的键盘转接器连接到键盘,然后透过适当的显示屏转接器连接到显示屏,最后连接到射频(RF)电路,而RF电路连接到天线。有利的是,未校准负载/存储运算搭配的SIMD指令集允许在已知时间内执行更复杂的算法,如此无线电话就能提供改良的通讯服务。
数字系统10的制造牵涉到多个将许多杂质植入半岛体基材,并且将杂质扩散到基材内预定深度已行程晶体管装置之步骤。在此并且使用屏蔽以控制杂质的位置。其上沉积许多导电材料以及绝缘材料层,并且进行蚀刻将许多装置连接在一起。这些步骤要在无尘室中执行。
该生产数据处理装置成本中最重要的部分牵涉到测试,在晶圆形式中,个别装置会偏转成运作状态,并且测试基本操作功能性。然后晶圆会切割成块状,然后以裸芯片或压缩后的芯片出售。在压缩之后,完成的部分会偏转成运作状态并且测试操作功能性。
因此,该数字系统提供一具有改良指令集体系结构的处理器,该处理器的原始码兼容于德州仪器公司的C62xx DSP处理器。其提供C62xx体系结构的超指令集,进而提供完整兼容于现有C62x原始码的原始码。该处理器在许多方面提供现有C62x体系结构的延伸:寄存器文件增强、数据路径延伸、额外功能单元硬件、增加的指令集正交、数据流增强、8位和16位延伸以及可减少原始码大小并且增压寄存器弹性的额外指令。
有利的是,每个.M单元在每个区块周期中都可执行两个16×16位乘法或四个8×8位乘法。.D单元可利用未校准负载与存储指令存取任何位组界线上的字符和双字符。.L单元可执行
字节转移,并且.M单元可执行除了.S单元执行之转换以外的双向可变转移。双向转移对于语音压缩编码(语音编码器)有直接的助益。.M单元内增加了像是SHFL、DEAL和GMPY4这类特殊通讯指定指令,以便在错误修正码内定位共通的运算。.M单元上的位计算、位反向以及旋转硬件延伸对于像是二进制元构词、影像十进制元计算以及加密算法这类位位准算法之支持。
有利的是,在本发明的具体实施例内,增加的指令集体系结构正交提供:.D单元可执行除了.S和.L之外的32位逻辑指令、可使用.L和.D单元加载除了.S单元有能力加载的16位常数以外之5位常数、.L单元可执行字节转移并且.M单元可执行除了.S单元有能力执行的转移以外之双向可变转移,双向转移对于语音压缩编码(语音编码器)有直接的助益。
有利的是,PACK捍卫元组转移指令的延伸集合可简化已压缩数据类型的操控。在此加入直接于已压缩数据上运算的单一指令、多任务数据(SIMD)指令,让数据流更合理并增加指令集的效率。该处理器具有8位和16位指令集延伸的各式各样集合。
有利的是,在此提供可降低原始码大小并且增加寄存器弹性的额外指令。BDEC和BPOS将测试指令分别与目的寄存器的递减/测试指令结合,这些指令有助于减少递减一个循环计数器所需的指令数量,并且有条件的根据该计数器进行测试。任何寄存器都可用来当成循环计数器,只要可释放标准况寄存器(A0-A2 and B0-B2)供其它使用即可。ADDKPC指令有助于减少设定函数呼叫传回位址所需的指令数量,BNOP指令则有助于减少当需要NOP填入测试的延迟槽时,执行测试所需的指令数量。
有利的是,在本发明的其它具体实施例内,并未执行数据组界限限制,因此可通过增加不需要的NOP指令消除要为取得的数据组垫底之需求。
在本发明的具体实施例内,共有64个一般寄存器。而一般寄存器A0、A1、A2、B0、B1和B2每个都可用来当成条件寄存器。
在本发明的其它具体实施例内,每个.D单元都可加载与存储双字符(64bit s),.D单元止渴在字节界限存储器取字符与双字符,.D单元支持跨路径的数据以及地址。在一个执行数据组内可使用相同的寄存器当成一个以上功能单元的数据路径横越运操作数。当指令试图透过之前周期已经更新的横越路径读取寄存器时,会导入延迟时钟周期。在每个周期的每个数据路径上最多能存取两个长来源与两个长结果。
依照在此所使用,「套用」、「联机」和「连接」代表电路连接,包含在电路连接中有其它组件。「随附」表示一种控制关系,像是存储器资源由随附的连接端口所控制。断言、断定、未断言、未断定、否定、否认等词用于避免再处理主动高以及主动低讯号时混淆,断言与断定用于指示讯号已经激活或是逻辑上为真,未断言、未断定、否定、否认则用于指示讯号已经取消或式逻辑上为伪。
本发明已经参考具体实施例来做说明,但不可将此说明解释成有限制之意,精通此技艺的人士知道还有许多其它本发明的具体实施例可参考,因此可考虑所有位于本发明领域与精神内的具体实施例之修正都涵盖于申请专利范围内。

Claims (8)

1.一种数字系统,所述数字系统包括一具有一含有多个指令流水线阶段的指令执行流水线的微处理器,其特征在于,所述微处理器包括:
程序提取电路,用以提取指令;
指令译码电路,被连接以从所述程序提取电路接收提取到的指令,所述指令译码电路用来译码一组单指令多数据(SIMD)指令;以及
至少一第一功能单元,被连接以从所述指令译码电路接收控制信号,其中所述第一功能单元包括:
多域算术逻辑单元(ALU)电路,被连接以接收多个源操作数,所述多域算术逻辑单元(ALU)电路的输出可提供作为目标操作数的多域结果,以响应来自于所述指令译码电路的控制信号,其中所述多域算术逻辑单元(ALU)电路可操作为将所述多个源操作数视为一组N1域,使得所述多域结果包括对应于所述组N1域的N1结果;以及
其中所述第一功能单元系可操作为提供所述多域结果,以便响应一第一类型的单一SIMD指令。
2.如权利要求1所述的数字系统,其特征在于,所述微处理器进一步包括一第二功能单元,被连接以与所述第一功能单元并行运作,其中所述第二功能单元包括多域乘法运算电路,被连接以接收多个源操作数,所述多域乘法运算电路的输出可提供作为目标操作数的多域结果,以便响应来自于所述指令译码电路的控制信号,其中所述多域乘法运算电路可操作为将所述多个源操作数视为一组N2域,使得所述多域结果包括对应于所述组N2域的N2结果;以及
其中所述第二功能单元可操作为提供多域结果,以响应一第二类型的单一SIMD指令。
3.如权利要求2所述的数字系统,其特征在于,所述微处理器进一步包括:
至少一第一加载/存储单元,连接到所述微处理器的至少一第一存储寄存器;
一存储器子系统,具有至少一第一存储器端口连接到所述第一加载/存储单元;
位于所述第一加载/存储单元中的地址产生电路,其具有一第一地址输出连接到所述第一存储器端口,所述地址产生电路可操作为在所述第一地址输出提供一第一字节地址;
一取电路,连接到所述第一存储器端口,其中所述取电路可操作为将一第一非校直的多字节数据项提供给所述第一加载/存储单元,以响应所述第一字节地址;以及,其中所述加载/存储单元可操作为提供所述多字节数据项,以响应一第三类型的单一SIMD指令。
4.如权利要求3所述的数字系统,其特征在于,所述第一存储寄存器是一连接到所述第一功能单元以及所述第二功能单元的寄存器文件的一部份,用以提供所述多个源操作数;并且,被连接到所述第一功能单元以及所述第二功能单元,以便接收所述目标操作数。
5.如权利要求1所述的数字系统,其特征在于,所述第一类型、第二类型及第三类型的指令都具有一用来识别谓词寄存器的域。
6.如权利要求1所述的数字系统,所述系统是一行动电话且进一步包括:
一综合式键盘,其经由键盘适配卡连接到CPU;
一显示器,其经由显示适配卡连接到CPU;
一连接到CPU的射频(RF)电路;以及
一连接到所述射频(RF)电路的天线。
7.一种供操作一具有一微处理器的数字系统的方法,其特征在于,所述方法包括下列步骤:
提供多域算术逻辑单元(ALU)电路,用以运算一组源操作数,以构成一多域目标操作数,其方式是将所述多个源操作数视为一组N1域,使得所述多域结果包括对应于所述组N1域的N1结果;
提供多域乘法运算电路,用以运算一组源操作数,以构成一多域目标操作数,其方式是将所述多个源操作数视为一组N2域,使得所述多域结果包括对应于所述组N2域的N2结果;
提供一组单指令多数据(SIMD)指令,以便指示所述多域算术逻辑单元(ALU)电路及所述多域乘法运算电路的操作。
8.如权利要求7所述的方法,其特征在于,进一步包括提供加载/存储电路,用以将多字节数据项转送到位于一非字对齐之字节地址上的存储器电路。
CN00133915.XA 1999-11-15 2000-11-15 具有改良的指令集体系结构的微处理器 Expired - Fee Related CN1194292C (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US16551299P 1999-11-15 1999-11-15
US60/165,512 1999-11-15
US18352700P 2000-02-18 2000-02-18
US60/183,527 2000-02-18

Publications (2)

Publication Number Publication Date
CN1309347A true CN1309347A (zh) 2001-08-22
CN1194292C CN1194292C (zh) 2005-03-23

Family

ID=26861452

Family Applications (1)

Application Number Title Priority Date Filing Date
CN00133915.XA Expired - Fee Related CN1194292C (zh) 1999-11-15 2000-11-15 具有改良的指令集体系结构的微处理器

Country Status (4)

Country Link
EP (1) EP1102163A3 (zh)
JP (2) JP2001202245A (zh)
CN (1) CN1194292C (zh)
TW (1) TW543000B (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1329838C (zh) * 2004-05-13 2007-08-01 国际商业机器公司 消除分区间转换存储通道和分区分析的方法和设备
CN100440812C (zh) * 2004-04-23 2008-12-03 华为技术有限公司 激励报文实现装置及方法和数字电路逻辑仿真的测试方法
CN102884505A (zh) * 2011-04-08 2013-01-16 松下电器产业株式会社 数据处理装置、和数据处理方法
CN103221938A (zh) * 2010-11-18 2013-07-24 德克萨斯仪器股份有限公司 移动数据的方法和装置
CN105099843A (zh) * 2014-05-16 2015-11-25 罗伯特·博世有限公司 针对车辆通信总线的运行时间压缩方法
CN105229599A (zh) * 2013-03-15 2016-01-06 甲骨文国际公司 用于单指令多数据处理器的高效硬件指令
CN106886680A (zh) * 2017-02-09 2017-06-23 无锡科美达医疗科技有限公司 一种超声远程实时会诊系统
CN107797953A (zh) * 2003-04-11 2018-03-13 富意科技 集成电路存储器组件的自动运行
WO2018104830A1 (en) * 2016-12-08 2018-06-14 International Business Machines Corporation Overflow detection for sign-magnitude adders
CN109189475A (zh) * 2018-08-16 2019-01-11 算丰科技(北京)有限公司 可编程人工智能加速器指令集的构建方法
CN109961134A (zh) * 2017-12-14 2019-07-02 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
CN111124496A (zh) * 2019-12-25 2020-05-08 合肥中感微电子有限公司 一种多周期指令处理方法、处理器和电子设备

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2367659A (en) * 2000-10-04 2002-04-10 Advanced Risc Mach Ltd SIMD saturation instruction with variable bit length
EP1512100A2 (en) 2002-05-24 2005-03-09 Koninklijke Philips Electronics N.V. A scalar/vector processor
JP4545777B2 (ja) * 2002-06-28 2010-09-15 ルネサスエレクトロニクス株式会社 データ処理装置
US7949856B2 (en) 2004-03-31 2011-05-24 Icera Inc. Method and apparatus for separate control processing and data path processing in a dual path processor with a shared load/store unit
US9047094B2 (en) 2004-03-31 2015-06-02 Icera Inc. Apparatus and method for separate asymmetric control processing and data path processing in a dual path processor
US8484441B2 (en) 2004-03-31 2013-07-09 Icera Inc. Apparatus and method for separate asymmetric control processing and data path processing in a configurable dual path processor that supports instructions having different bit widths
JP2007048019A (ja) * 2005-08-10 2007-02-22 Sony Computer Entertainment Inc エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム
JP2009048532A (ja) * 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
JP2009075676A (ja) * 2007-09-18 2009-04-09 Nec Electronics Corp マイクロプロセッサ
CN101667114B (zh) * 2009-09-30 2012-07-04 西安电子科技大学 适于矩阵求逆的超长指令集微处理系统
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
US9952865B2 (en) * 2015-04-04 2018-04-24 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word and non-orthogonal register data file
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
GB2548908B (en) * 2016-04-01 2019-01-30 Advanced Risc Mach Ltd Complex multiply instruction
US11270196B2 (en) 2019-10-15 2022-03-08 International Business Machines Corporation Multi-mode low-precision inner-product computation circuits for massively parallel neural inference engine

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5327579A (en) * 1990-11-06 1994-07-05 Nippon Telegraph And Telephone Corporation Scanning systems using tree structures
WO1996008778A1 (en) * 1994-09-13 1996-03-21 Lockheed Martin Corporation Parallel data processor
JPH11308574A (ja) * 1998-04-22 1999-11-05 Sony Corp 走査線数変換装置及び方法

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107885679A (zh) * 2003-04-11 2018-04-06 富意科技 集成电路存储器组件的自动运行
CN107797953A (zh) * 2003-04-11 2018-03-13 富意科技 集成电路存储器组件的自动运行
CN100440812C (zh) * 2004-04-23 2008-12-03 华为技术有限公司 激励报文实现装置及方法和数字电路逻辑仿真的测试方法
CN1329838C (zh) * 2004-05-13 2007-08-01 国际商业机器公司 消除分区间转换存储通道和分区分析的方法和设备
CN103221938B (zh) * 2010-11-18 2016-01-13 德克萨斯仪器股份有限公司 移动数据的方法和装置
CN103221938A (zh) * 2010-11-18 2013-07-24 德克萨斯仪器股份有限公司 移动数据的方法和装置
CN102884505B (zh) * 2011-04-08 2016-01-20 松下电器产业株式会社 数据处理装置和数据处理方法
CN102884505A (zh) * 2011-04-08 2013-01-16 松下电器产业株式会社 数据处理装置、和数据处理方法
CN105653499B (zh) * 2013-03-15 2019-01-01 甲骨文国际公司 用于单指令多数据处理器的高效硬件指令
CN105573962A (zh) * 2013-03-15 2016-05-11 甲骨文国际公司 用于单指令多数据处理器的高效硬件指令
CN105653499A (zh) * 2013-03-15 2016-06-08 甲骨文国际公司 用于单指令多数据处理器的高效硬件指令
CN105229599B (zh) * 2013-03-15 2017-12-12 甲骨文国际公司 用于单指令多数据处理器的高效硬件指令
CN105229599A (zh) * 2013-03-15 2016-01-06 甲骨文国际公司 用于单指令多数据处理器的高效硬件指令
CN105573962B (zh) * 2013-03-15 2018-10-16 甲骨文国际公司 单指令多数据处理器与相关方法
CN105099843A (zh) * 2014-05-16 2015-11-25 罗伯特·博世有限公司 针对车辆通信总线的运行时间压缩方法
CN105099843B (zh) * 2014-05-16 2020-05-05 罗伯特·博世有限公司 针对车辆通信总线的运行时间压缩方法
GB2572719A (en) * 2016-12-08 2019-10-09 Ibm Overflow detection for sign-magnitude adders
US10228910B2 (en) 2016-12-08 2019-03-12 International Business Machines Corporation Overflow detection for sign-magnitude adders
WO2018104830A1 (en) * 2016-12-08 2018-06-14 International Business Machines Corporation Overflow detection for sign-magnitude adders
GB2572719B (en) * 2016-12-08 2020-05-20 Ibm Overflow detection for sign-magnitude adders
CN106886680A (zh) * 2017-02-09 2017-06-23 无锡科美达医疗科技有限公司 一种超声远程实时会诊系统
CN109961134A (zh) * 2017-12-14 2019-07-02 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
CN109189475A (zh) * 2018-08-16 2019-01-11 算丰科技(北京)有限公司 可编程人工智能加速器指令集的构建方法
CN109189475B (zh) * 2018-08-16 2022-06-10 北京算能科技有限公司 可编程人工智能加速器指令集的构建方法
CN111124496A (zh) * 2019-12-25 2020-05-08 合肥中感微电子有限公司 一种多周期指令处理方法、处理器和电子设备
CN111124496B (zh) * 2019-12-25 2022-06-21 合肥中感微电子有限公司 一种多周期指令处理方法、处理器和电子设备

Also Published As

Publication number Publication date
JP2001256038A (ja) 2001-09-21
JP2001202245A (ja) 2001-07-27
CN1194292C (zh) 2005-03-23
TW543000B (en) 2003-07-21
EP1102163A3 (en) 2005-06-29
EP1102163A2 (en) 2001-05-23

Similar Documents

Publication Publication Date Title
CN1194292C (zh) 具有改良的指令集体系结构的微处理器
CN1174313C (zh) 多指令集的数据处理
CN1204490C (zh) 高数据密度risc处理器
US7473293B2 (en) Processor for executing instructions containing either single operation or packed plurality of operations dependent upon instruction status indicator
CN1302380C (zh) 处理器和编译器
US7346881B2 (en) Method and apparatus for adding advanced instructions in an extensible processor architecture
US7487338B2 (en) Data processor for modifying and executing operation of instruction code according to the indication of other instruction code
CN1570870A (zh) 终极管道和最优重排技术
CN1656495A (zh) 标量/矢量处理器
CN1147306A (zh) 多指令集映射
WO2010004245A1 (en) Processor with push instruction
US20100011191A1 (en) Data processing device with instruction translator and memory interface device to translate non-native instructions into native instructions for processor
JP2007533006A (ja) 複合命令形式および複合オペレーション形式を有するプロセッサ
US7552313B2 (en) VLIW digital signal processor for achieving improved binary translation
CN1254740C (zh) 使用协处理器的数据处理
CN100351782C (zh) 用于设计数字处理器的方法以及装置
US6757819B1 (en) Microprocessor with instructions for shifting data responsive to a signed count value
Basoglu et al. The MAP1000A VLIM mediaprocessor
US6834338B1 (en) Microprocessor with branch-decrement instruction that provides a target and conditionally modifies a test register if the register meets a condition
CN111813447B (zh) 一种数据拼接指令的处理方法和处理装置
Togawa et al. Instruction set and functional unit synthesis for SIMD processor cores
Jeroen van Straten ρ-VEX user manual
Mulder et al. An architecture framework for application-specific and scalable architectures
Naused et al. A 32-Bit, 200-MHz GaAs RISC for High-Throughput Signal Processing Environments
Turley Hitachi adds FP, DSP units to SuperH chips

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20050323

Termination date: 20161115