CN109213525A - 具有快捷起始指令的流式传输引擎 - Google Patents

具有快捷起始指令的流式传输引擎 Download PDF

Info

Publication number
CN109213525A
CN109213525A CN201810722330.XA CN201810722330A CN109213525A CN 109213525 A CN109213525 A CN 109213525A CN 201810722330 A CN201810722330 A CN 201810722330A CN 109213525 A CN109213525 A CN 109213525A
Authority
CN
China
Prior art keywords
stream
data
instruction
register
unit
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
CN201810722330.XA
Other languages
English (en)
Other versions
CN109213525B (zh
Inventor
T·安德森
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 CN109213525A publication Critical patent/CN109213525A/zh
Application granted granted Critical
Publication of CN109213525B publication Critical patent/CN109213525B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control 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/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • 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

Abstract

本申请案涉及一种具有快捷起始指令的流式传输引擎。在数字数据处理器中采用的流式传输引擎(2800)规定从存储器再调用的固定只读数据流。流(2810、2820)由两种类型的流起始指令中的一者起始。流起始普通指令规定存储流起始地址的寄存器(1305)及存储规定流参数的流定义模板的寄存器(1304)。流起始快捷指令规定存储流起始地址及隐式流定义模板的寄存器(1305)。功能单元响应于流操作数指令而从流标头寄存器(2818、2828)接收至少一个操作数。所述流模板在快捷起始指令限于单个回圈的情况下支持多个嵌套回圈。所述流模板支持数据元素借助正负号扩展或零扩展提升到较大数据元素大小。所允许流快捷起始指令集合包含各种数据大小及提升因子。

Description

具有快捷起始指令的流式传输引擎
相关申请案
本专利申请案为对2014年7月15日提出申请的标题为(现在为第9,606,803号美国专利)“高度集成可扩缩柔性DSP超级模块架构(HIGHLY INTEGRATED SCALABLE,FLEXIBLEDSP MEGAMODULE ARCHITECTURE)”的第14/331,986号美国专利申请案的改进,所述美国专利申请案主张2013年7月15日提出申请的第61/846,148号美国临时专利申请案的优先权。
技术领域
本发明的技术领域是数字数据处理且更具体来说是对用于操作数提取的流式传输引擎的控制。
背景技术
现代数字信号处理器(DSP)面对多个挑战。工作负荷继续增加,从而需要增加带宽。系统级芯片(SOC)的大小及复杂度继续增长。存储器系统延时严重地影响某些类别的算法。随着晶体管变小,存储器及寄存器变得不太可靠。随着软件堆叠变大,可能相互作用及误差数目变得更大。
存储器带宽及调度为对实时数据进行操作的数字信号处理器的问题。对实时数据进行操作的数字信号处理器通常接收输入数据流,对数据流执行滤波器函数(例如编码或解码)且输出经变换数据流。系统被称为实时的,因为如果经变换数据流在经调度时不可用于输出,那么应用程序失败。典型视频编码需要可预测但非顺序输入数据模式。通常,在可用地址产生及存储器存取资源内难以实现对应存储器存取。典型应用程序需要存储器存取以将数据寄存器加载于数据寄存器堆中且接着供应到执行数据处理的功能单元。
发明内容
本发明为一种具有流式传输引擎的数字数据处理器,所述流式传输引擎从存储器再调用供数据处理功能单元依序使用的预定数目个数据元素的指令规定序列的流。每一数据元素具有预定大小及数据类型。数据元素打包在向量流标头寄存器中的经定义数据宽度的通道中。
流由两种类型的流起始指令中的一者来起始。流起始普通指令规定存储流起始地址的寄存器及存储流定义模板的寄存器。流模板规定流参数。流起始快捷指令规定存储流起始地址及隐式流定义模板的寄存器。
所述数字数据处理器包含响应于流操作数指令而从所述流标头寄存器接收至少一个操作数的功能单元。指令优选地包含操作数字段,所述操作数字段具有与寄存器对应的第一译码子集、读取下一流数据向量的流只读操作数译码及读取下一流数据向量且推进到下一向量的流读取与推进操作数译码。
所述流定义模板包含规定多个嵌套回圈的若干个迭代的多个回圈计数数据字段。每一隐式流模板规定内回圈的预定数目个迭代及每一输出回圈的一个迭代。所述内回圈的所述预定数目个迭代由可由所述字段大小表达的最大数目个迭代组成。
所述流定义模板包含除所述内回圈以外的每一回圈的回圈维度。流式传输引擎地址产生器将这些回圈维度处理为带正负号整数。对于所述内回圈,维度固定在对连续数据元素进行定义的数据大小。
流定义模板具有规定数据大小的数据大小字段。所述隐式流模板规定选自一个字节、两个字节、四个字节及八个字节的预定数据大小。
所述流式传输引擎包含用于使数据元素提升到模板规定的较大数据元素大小的元素提升单元。额外位由模板确定的正负号扩展或零扩展中的一者填充。所允许流快捷起始指令集合包含各种数据大小及提升因子。
所允许流快捷指令集合包含具有跨越所述集合完全相同的一些位及因特定流快捷指令而不同的一些位的对应隐式模板。模板单元供应具有跨越所述集合完全相同的位及由当前流快捷起始指令所选择而不同的位的隐式模板。
附图说明
图式中图解说明本发明的这些及其它方面,其中:
图1图解说明根据本发明的一个实施例的双重标量/向量数据路径处理器;
图2图解说明图1中所图解说明的双重标量/向量数据路径处理器中的寄存器及功能单元;
图3图解说明全局标量寄存器堆;
图4图解说明由算术功能单元共享的局部标量寄存器堆;
图5图解说明由乘法功能单元共享的局部标量寄存器堆;
图6图解说明由加载/存储单元共享的局部标量寄存器堆;
图7图解说明全局向量寄存器堆;
图8图解说明断言寄存器堆;
图9图解说明由算术功能单元共享的局部向量寄存器堆;
图10图解说明由乘法与相关功能单元共享的局部向量寄存器堆;
图11图解说明根据本发明的优选实施例的中央处理单元的管线阶段;
图12图解说明单个提取数据包的十六个指令;
图13图解说明由本发明使用的指令的指令译码的实例;
图14图解说明条件代码扩展槽0的位译码;
图15图解说明条件代码扩展槽1的位译码;
图16图解说明常数扩展槽0的位译码;
图17是图解说明常数扩展的部分框图;
图18图解说明根据本发明的SIMD操作的进位控制;
图19图解说明本发明的流式传输引擎的概念视图;
图20图解说明本发明的格式化操作的序列;
图21图解说明向量中的通道分配的第一实例;
图22图解说明向量中的通道分配的第二实例;
图23图解说明基本二维流;
图24图解说明图23的实例性流内的元素次序;
图25图解说明从较大矩形提取较小矩形;
图26图解说明流式传输引擎将如何以4个字节的转置粒度提取此实例的流;
图27图解说明流式传输引擎将如何以8个字节的转置粒度提取此实例的流;
图28图解说明本发明的流式传输引擎的细节;
图29图解说明本发明的流模板寄存器;
图30图解说明本发明的流模板寄存器的旗标字段的子字段定义;
图31图解说明提升块的示范性实施例;
图32图解说明图31中所图解说明的控制多路复用器的替代方式的部分示意图;
图33示意性地图解说明根据本发明的优选实施例的流起始指令的示范性解码;
图34示意性地图解说明根据本发明的优选实施例的快捷流起始指令的示范性解码;
图35图解说明本发明的流式传输引擎的地址产生器的局部示意图;且
图36图解说明展示本发明的流式传输引擎数据供应的部分示意图。
具体实施方式
图1图解说明根据本发明的优选实施例的双重标量/向量数据路径处理器。处理器100包含单独层级1指令高速缓冲存储器(L1I)121及层级1数据高速缓冲存储器(L1D)123。处理器100包含保存指令及数据两者的层级2经组合指令/数据高速缓冲存储器(L2)130。图1图解说明层级1指令高速缓冲存储器121与层级2经组合指令/数据高速缓冲存储器130之间的连接(总线142)。图1图解说明层级1数据高速缓冲存储器123与层级2经组合指令/数据高速缓冲存储器130之间的连接(总线145)。在处理器100的优选实施例中,层级2经组合指令/数据高速缓冲存储器130存储后备层级1指令高速缓冲存储器121的指令及后备层级1数据高速缓冲存储器123的数据两者。在优选实施例中,层级2经组合指令/数据高速缓冲存储器130以此项技术中已知且图1未图解说明的方式进一步连接到更高层级高速缓冲存储器及/或主存储器。在优选实施例中,中央处理单元核心110、层级1指令高速缓冲存储器121、层级1数据高速缓冲存储器123及层级2经组合指令/数据高速缓冲存储器130形成于单个集成电路上。此信号集成电路任选地包含其它电路。
中央处理单元核心110从层级1指令高速缓冲存储器121提取指令,如由指令提取单元111所控制。指令提取单元111确定待执行的接下来指令且再调用此些指令的提取数据包大小的集合。下文进一步详述提取数据包的本质及大小。如此项技术中已知,在高速缓冲存储器命中后即刻从层级1指令高速缓冲存储器121直接提取指令(如果这些指令存储于层级1指令高速缓冲存储器121中)。在高速缓冲存储器未命中(规定指令提取数据包未存储于层级1指令高速缓冲存储器121中)后,即刻在层级2经组合高速缓冲存储器130中寻找这些指令。在优选实施例中,层级1指令高速缓冲存储器121中的高速缓冲存储器线路的大小等于提取数据包的大小。这些指令的存储器位置为层级2经组合高速缓冲存储器130中的命中或未命中。命中供自层级2经组合高速缓冲存储器130。未命中供自更高层级的高速缓冲存储器(未图解说明)或主存储器(未图解说明)。如此项技术中已知,所请求指令可同时供应到层级1指令高速缓冲存储器121及中央处理单元核心110两者以加速使用。
在本发明的优选实施例中,中央处理单元核心110包含执行指令规定数据处理任务的多个功能单元。指令调度单元112确定每一所提取指令的目标功能单元。在优选实施例中,中央处理单元110操作为能够同时对对应功能单元中的多个指令进行操作的非常长指令字(VLIW)处理器。优选地,编译器将指令组织在共同经执行的执行数据包中。指令调度单元112将每一指令引导到其目标功能单元。指派给指令的功能单元完全由编译器所产生的指令规定。中央处理单元核心110的硬件在此功能单元指派中不具有作用。在优选实施例中,指令调度单元112可并行地对多个指令进行操作。此些并行指令的数目由执行数据包的大小设定。下文将对此进行进一步详述。
指令调度单元112的调度任务的一个部分为确定将对标量数据路径A侧115还是向量数据路径B侧116中的功能单元执行指令。每一指令内的称作s位的指令位确定指令控制哪一数据路径。下文将对此进行进一步详述。
指令解码单元113对当前执行数据包中的每一指令进行解码。解码包含识别执行指令的功能单元、识别来自可能寄存器堆当中的用于供应数据以进行对应数据处理操作的寄存器及识别对应数据处理操作的结果的寄存器目的地。如下文进一步阐释,指令可包含替代一个寄存器编号操作数字段的常数字段。此解码的结果为用于控制目标功能单元对规定数据执行由对应指令规定的数据处理操作的信号。
中央处理单元核心110包含控制寄存器114。控制寄存器114存储用于以与本发明不相关的方式控制标量数据路径A侧115及向量数据路径B侧116中的功能单元的信息。此信息可为模式信息或类似者。
来自指令解码单元113的经解码指令及存储于控制寄存器114中的信息供应到标量数据路径A侧115及向量数据路径B侧116。因此,标量数据路径A侧115及向量数据路径B侧116内的功能单元对指令规定数据执行指令规定数据处理操作且将结果存储于一或若干指令规定数据寄存器中。标量数据路径A侧115及向量数据路径B侧116中的每一者包含优选地并行操作的多个功能单元。下文将连同图2进一步详述这些功能单元。标量数据路径A侧115与向量数据路径B侧116之间存在准许数据交换的数据路径117。
中央处理单元核心110进一步包含基于非指令模块。仿真单元118准许响应于指令而确定中央处理单元核心110的机器状态。通常将采用此能力来进行算法开发。中断/异常单元119使得中央处理单元核心110能够响应于外部异步事件(中断)且对执行不恰当操作(例外)的尝试做出响应。
中央处理单元核心110包含流式传输引擎125。流式传输引擎125将两个数据流从通常高速缓存于层级2经组合高速缓冲存储器130中的预定地址供应到向量数据路径侧B的寄存器堆。此提供从存储器(如高速缓存于层级2经组合高速缓冲存储器130中)直接到功能单元操作数输入的受控制数据移动。下文对此进行进一步详述。
图1图解说明各种部件之间的总线的示范性数据宽度。层级1指令高速缓冲存储器121经由总线141将指令供应到指令提取单元111。总线141优选地为512位总线。总线141从层级1指令高速缓冲存储器121到中央处理单元110为单向的。层级2经组合高速缓冲存储器130经由总线142将指令供应到层级1指令高速缓冲存储器121。总线142优选地为512位总线。总线142从层级2经组合高速缓冲存储器130到层级1指令高速缓冲存储器121为单向的。
层级1数据高速缓冲存储器123经由总线143与标量数据路径A侧115中的寄存器堆交换数据。总线143优选地为64位总线。层级1数据高速缓冲存储器123经由总线144与向量数据路径B侧116中的寄存器堆交换数据。总线144优选地为512位总线。总线143及144经图解说明为双向的,从而支持中央处理单元110数据读取及数据写入两者。层级1数据高速缓冲存储器123经由总线145与层级2经组合高速缓冲存储器130交换数据。总线145优选地为512位总线。总线145经图解说明为双向的,从而支持中央处理单元110数据读取及数据写入两者的高速缓冲存储器服务。
如此项技术中已知,在高速缓冲存储器命中后即刻从层级1数据高速缓冲存储器123直接提取CPU数据请求(如果所请求数据存储于层级1数据高速缓冲存储器123中)。在高速缓冲存储器未命中(规定数据未存储于层级1数据高速缓冲存储器123中)后,即刻在层级2经组合高速缓冲存储器130中寻找此数据。此所请求数据的存储器位置为层级2经组合高速缓冲存储器130中的命中或未命中。命中供自层级2经组合高速缓冲存储器130。未命中供自另一层级的高速缓冲存储器(未图解说明)或主存储器(未图解说明)。如此项技术中已知,所请求指令可同时供应到层级1数据高速缓冲存储器123及中央处理单元核心110两者以加速使用。
层级2经组合高速缓冲存储器130经由总线146将第一数据流的数据供应到流式传输引擎125。总线146优选地为512位总线。流式传输引擎125经由总线147将此第一数据流的数据供应到向量数据路径B侧116的功能单元。总线147优选地为512位总线。层级2经组合高速缓冲存储器130经由总线148将第二数据流的数据供应到流式传输引擎125。总线148优选地为512位总线。流式传输引擎125经由总线149将此第二数据流的数据供应到向量数据路径B侧116的功能单元。总线149优选地为512位总线。根据本发明的优选实施例,总线146、147、148及149经图解说明为从层级2经组合高速缓冲存储器130到流式传输引擎125且到向量数据路径B侧116为单向的。
在高速缓冲存储器命中后即刻从层级2经组合高速缓冲存储器130直接提取流式传输引擎数据请求(如果所请求数据存储于层级2经组合高速缓冲存储器130中)。在高速缓冲存储器未命中(规定数据未存储于层级2经组合高速缓冲存储器130中)后,即刻从另一层级的高速缓冲存储器(未图解说明)或从主存储器(未图解说明)寻找此数据。在一些实施例中使层级1数据高速缓冲存储器123高速缓存未存储于层级2经组合高速缓冲存储器130中的数据为技术上可行的。如果支持此操作,那么基于为层级2经组合高速缓冲存储器130中的未命中的流式传输引擎数据请求,层级2经组合高速缓冲存储器130应针对流引擎请求的数据探听层级1数据高速缓冲存储器123。如果层级1数据高速缓冲存储器123存储此数据,那么其探听响应将包含接着经供应以供给流式传输引擎请求的数据。如果层级1数据高速缓冲存储器123为存储此数据,那么其探听响应将指示此且层级2经组合高速缓冲存储器130必须从另一层级的高速缓冲存储器(未图解说明)或从主存储器(未图解说明)供给此流式传输引擎请求。
在本发明的优选实施例中,根据标题为“包含高速缓冲存储器及可直接寻址的静态随机存取存储器的统一存储器系统架构(UNIFIED MEMORY SYSTEM ARCHITECTUREINCLUDING CACHE AND DIRECTLY ADDRESSABLE STATIC RANDOM ACCESS MEMORY)”的第6,606,686号美国专利,层级1数据高速缓冲存储器123及层级2经组合高速缓冲存储器130两者均可配置为选定量的高速缓冲存储器或可直接寻址的存储器。
图2图解说明标量数据路径A侧115及向量数据路径B侧116内的功能单元及寄存器堆的进一步细节。标量数据路径A侧115包含全局标量寄存器堆211、L1/S1局部寄存器堆212、M1/N1局部寄存器堆213及D1/D2局部寄存器堆214。标量数据路径A侧115包含L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226。向量数据路径B侧116包含全局向量寄存器堆231、L2/S2局部寄存器堆232、M2/N2/C局部寄存器堆233及断言寄存器堆234。向量数据路径B侧116包含L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246。存在对可从哪些功能单元读取或写入到哪些寄存器堆的限制。下文将对这些进行详述。
标量数据路径A侧115包含L1单元221。L1单元221一般接受两个64位操作数且产生一个64位结果。所述两个操作数各自从全局标量寄存器堆211或L1/S1局部寄存器堆212中的指令规定寄存器再调用。L1单元221优选地执行以下指令选定操作:64位加法/减法操作;32位最小化/最大化操作;8位单指令多数据(SIMD)指令,例如绝对值、最小及最大确定的和;循环最小化/最大化操作;及寄存器堆之间的各种移动操作。可将结果写入到全局标量寄存器堆211、L1/S1局部寄存器堆212、M1/N1局部寄存器堆213或D1/D2局部寄存器堆214的指令规定寄存器中。
标量数据路径A侧115包含S1单元222。S1单元222一般接受两个64位操作数且产生一个64位结果。两个操作数各自从全局标量寄存器堆211或L1/S1局部寄存器堆212中的指令规定寄存器再调用。S1单元222优选地执行与L1单元221相同类型的操作。任选地可存在由L1单元221及S1单元222支持的数据处理操作之间的稍微变化。可将结果写入到全局标量寄存器堆211、L1/S1局部寄存器堆212、M1/N1局部寄存器堆213或D1/D2局部寄存器堆214的指令规定寄存器中。
标量数据路径A侧115包含M1单元223。M1单元223一般接受两个64位操作数且产生一个64位结果。两个操作数各自从全局标量寄存器堆211或M1/N1局部寄存器堆213中的指令规定寄存器再调用。M1单元223优选地执行以下指令选定操作:8位乘法操作;复数点积操作;32位计数操作;复数共轭乘法操作;及按位逻辑操作、移动、加法及减法。可将结果写入到全局标量寄存器堆211、L1/S1局部寄存器堆212、M1/N1局部寄存器堆213或D1/D2局部寄存器堆214的指令规定寄存器中。
标量数据路径A侧115包含N1单元224。N1单元224一般接受两个64位操作数且产生一个64位结果。两个操作数各自从全局标量寄存器堆211或M1/N1局部寄存器堆213中的指令规定寄存器再调用。N1单元224优选地执行与M1单元223相同类型的操作。可存在共同采用M1单元223及N1单元224两者的某些双重操作(称作双重所发布指令)。可将结果写入到全局标量寄存器堆211、L1/S1局部寄存器堆212、M1/N1局部寄存器堆213或D1/D2局部寄存器堆214的指令规定寄存器中。
标量数据路径A侧115包含D1单元225及D2单元226。D1单元225及D2单元226一般各自接受两个64位操作数且各自产生一个64位结果。D1单元225及D2单元226一般执行地址计算以及对应加载与存储操作。D1单元225用于64个位的标量加载及存储。D2单元226用于512个位的向量加载及存储。D1单元225及D2单元226优选地还执行:对加载与存储数据进行交换、打包及拆包;64位SIMD算术操作;及64位按位逻辑操作。D1/D2局部寄存器堆214将一般存储在地址计算中用于对应加载与存储的基准地址及位移地址。两个操作数各自从全局标量寄存器堆211或D1/D2局部寄存器堆214中的指令规定寄存器再调用。可将经计算结果写入到全局标量寄存器堆211、L1/S1局部寄存器堆212、M1/N1局部寄存器堆213或D1/D2局部寄存器堆214的指令规定寄存器中。
向量数据路径B侧116包含L2单元241。L2单元241一般接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器堆231、L2/S2局部寄存器堆232或断言寄存器堆234中的指令规定寄存器再调用。L2单元241优选地执行与L1单元221类似的指令,惟关于较宽512位数据除外。可将结果写入到全局向量寄存器堆231、L2/S2局部寄存器堆222、M2/N2/C局部寄存器堆233或断言寄存器堆234的指令规定寄存器中。
向量数据路径B侧116包含S2单元242。S2单元242一般接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器堆231、L2/S2局部寄存器堆232或断言寄存器堆234中的指令规定寄存器再调用。S2单元242优选地执行与S1单元222类似的指令。可将结果写入到全局向量寄存器堆231、L2/S2局部寄存器堆222、M2/N2/C局部寄存器堆233或断言寄存器堆234的指令规定寄存器中。
向量数据路径B侧116包含M2单元243。M2单元243一般接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器堆231或M2/N2/C局部寄存器堆233中的指令规定寄存器再调用。M2单元243优选地执行与M1单元222类似的指令,惟关于较宽512位数据除外。可将结果写入到全局向量寄存器堆231、L2/S2局部寄存器堆232或M2/N2/C局部寄存器堆233的指令规定寄存器中。
向量数据路径B侧116包含N2单元244。N2单元244一般接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器堆231或M2/N2/C局部寄存器堆233中的指令规定寄存器再调用。N2单元244优选地执行与M2单元243相同类型的操作。可存在共同采用M2单元243及N2单元244两者的某些双重操作(称作双重所发布指令)。可将结果写入到全局向量寄存器堆231、L2/S2局部寄存器堆232或M2/N2/C局部寄存器堆233的指令规定寄存器中。
向量数据路径B侧116包含C单元245。C单元245一般接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器堆231或M2/N2/C局部寄存器堆233中的指令规定寄存器再调用。C单元245优选地执行:“扫视”及“搜索”指令;每时钟循环高达512个2位PN*8位乘数I/Q复数乘法;8位及16位绝对差和(SAD)计算,每时钟循环高达512个SAD;水平加法及水平最小化/最大化指令;及向量置换指令。C单元245还含有用于控制C单元245指令的某些操作的4个向量控制寄存器(CUCR0到CUCR3)。控制寄存器CUCR0到CUCR3在某些C单元245操作中用作操作数。优选地使用控制寄存器CUCR0到CUCR3:控制一般排列指令(VPERM);且作为SIMD多个点积运算(DOTPM)及SIMD多个绝对差和(SAD)运算的掩码。优选地使用控制寄存器CUCR0来存储伽罗瓦域乘法多项式操作(GFMPY)。优选地使用控制寄存器CUCR1来存储伽罗瓦域多项式产生器函数。
向量数据路径B侧116包含P单元246。P单元246对局部断言寄存器堆234的寄存器执行基本逻辑操作。P单元246具有直接存取权以从断言寄存器堆234读取且对断言寄存器堆234进行写入。这些操作包含单个寄存器一元操作,例如:NEG(否定),其使单个寄存器的每一位反转;BITCNT(位计数),其传回单个寄存器中具有预定数字状态(1或0)的位的数目的计数;RMBD(最右位检测),其传回从最低有效位位置(最右)到具有预定数字状态(1或0)的第一位位置的位位置的数目;DECIMATE,其选择每一指令规定的第N(1、2、4等)个位来输出;及EXPAND,其复制每一位有指令规定的N次(2、4等)。这些操作包含两个寄存器二进制操作,例如:对两个寄存器的数据的按位“与”进行“与”操作;对两个寄存器的数据的按位“与”及否定进行“与非”操作;或对两个寄存器的数据的按位“或”进行“或”操作;对两个寄存器的数据的按位“或”及否定进行“非或”操作;及对两个寄存器的数据的互斥“或”进行“互斥或”操作。这些操作包含将数据从断言寄存器堆234的断言寄存器传送到另一规定断言寄存器或传送到全局向量寄存器堆231中的规定数据寄存器。P单元246的通常预期使用包含操纵SIMD向量比较结果以供在控制进一步SIMD向量操作中使用。BITCNT指令可用于对断言寄存器中的1的数目进行计数以确定来自断言寄存器的有效数据元素的数目。
图3图解说明全局标量寄存器堆211。存在指定为A0到A15的16个独立64位宽的标量寄存器。全局标量寄存器堆211的每一寄存器可经读取或写入为64个位的标量数据。所有标量数据路径A侧115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可对全局标量寄存器堆211进行读取或写入。全局标量寄存器堆211可经读取为32个位或64个位且可仅经写入为64个位。指令执行确定读取数据大小。向量数据路径B侧116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246)可在下文将详述的限定下经由交叉路径117从全局标量寄存器堆211读取。
图4图解说明D1/D2局部寄存器堆214。存在指定为D0到D16的16个独立64位宽的标量寄存器。D1/D2局部寄存器堆214的每一寄存器可经读取或写入为64个位的标量数据。所有标量数据路径A侧115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可对全局标量寄存器堆211进行写入。仅D1单元225及D2单元226可从D1/D1局部标量寄存器堆214读取。预期存储于D1/D2局部标量寄存器堆214中的数据将包含在地址计算中使用的基准地址及位移地址。
图5图解说明L1/S1局部寄存器堆212。图5中所图解说明的实施例具有指定为AL0到AL7的8个独立64位宽的标量寄存器。优选指令译码(参见图13)准许L1/S1局部寄存器堆212包含高达16个寄存器。图5的实施例仅实施8个寄存器以减小电路大小及复杂度。L1/S1局部寄存器堆212的每一寄存器可经读取或写入为64个位的标量数据。所有标量数据路径A侧115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可对L1/S1局部标量寄存器堆212进行写入。仅L1单元221及S1单元222可从L1/S1局部标量寄存器堆212读取。
图6图解说明M1/N1局部寄存器堆213。图6中所图解说明的实施例具有指定为AM0到AM7的8个独立64位宽的标量寄存器。优选指令译码(参见图13)准许M1/N1局部寄存器堆213包含高达16个寄存器。图6的实施例仅实施8个寄存器以减小电路大小及复杂度。M1/N1局部寄存器堆213的每一寄存器可经读取或写入为64个位的标量数据。所有标量数据路径A侧115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可对M1/N1局部标量寄存器堆213进行写入。仅M1单元223及N1单元224可从M1/N1局部标量寄存器堆213读取。
图7图解说明全局向量寄存器堆231。存在16个独立512位宽的向量寄存器。全局向量寄存器堆231的指定为B0到B15的每一寄存器可经读取或写入为64个位的标量数据。全局向量寄存器堆231的指定为VB0到VB15的每一寄存器可经读取或写入为512个位的向量数据。指令类型确定数据大小。所有向量数据路径B侧116功能单元(L2单元241、S2单元242、M3单元243、N2单元244、C单元245及P单元246)可对全局标量寄存器堆231进行读取或写入。标量数据路径A侧115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可在下文将详述的限定下经由交叉路径117从全局向量寄存器堆231读取。
图8图解说明P局部寄存器堆234。存在指定为P0到P15的8个独立64位宽的寄存器。P局部寄存器堆234的每一寄存器可经读取或写入为64个位的标量数据。向量数据路径B侧116功能单元L2单元241、S2单元242、C单元244及P单元246可对P局部寄存器堆234进行写入。仅L2单元241、S2单元242及P单元246可从P局部标量寄存器堆234读取。P局部寄存器堆234的通常预期使用包含:写入来自L2单元241、S2单元242或C单元244的单位SIMD向量比较结果;由P单元246操纵SIMD向量比较结果;且使用经操纵结果来控制进一步SIMD向量操作。
图9图解说明L2/S2局部寄存器堆232。图9中所图解说明的实施例具有8个独立512位宽的向量寄存器。优选指令译码(参见图13)准许L2/S2局部寄存器堆232包含高达16个寄存器。图9的实施例仅实施8个寄存器以减小电路大小及复杂度。L2/S2局部向量寄存器堆232的指定为BL0到BL7的每一寄存器可经读取或写入为64个位的标量数据。L2/S2局部向量寄存器堆232的指定为VBL0到VBL7的每一寄存器可经读取或写入为512个位的向量数据。指令类型确定数据大小。所有向量数据路径B侧116功能单元(L2单元241、S2单元242、M2单元233、N2单元24、C单元245及P单元246)可对L2/S2局部向量寄存器堆232进行写入。仅L2单元241及S2单元242可从L2/S2局部向量寄存器堆232读取。
图10图解说明M2/N2/C局部寄存器堆233。图10中所图解说明的实施例具有8个独立512位宽的向量寄存器。优选指令译码(参见图13)准许L1/S1局部寄存器堆212包含高达16个寄存器。图10的实施例仅实施8个寄存器以减小电路大小及复杂度。M2/N2/C局部向量寄存器堆233的指定为BM0到BM7的每一寄存器可经读取或写入为64个位的标量数据。M2/N2/C局部向量寄存器堆233的指定为VBM0到VBM7的每一寄存器可经读取或写入为512个位的向量数据。所有向量数据路径B侧116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246)可对M2/N2/C局部向量寄存器堆233进行写入。仅M2单元233、N2单元244及C单元245可从M2/N2/C局部向量寄存器堆233读取。
提供可由一侧的所有功能单元存取的全局寄存器堆及可由一侧的功能单元中的仅一些功能单元存取的局部寄存器堆为设计选择。可采用与所揭示全局寄存器堆对应的仅一种类型的寄存器堆来实践本发明。
交叉路径117准许标量数据路径A侧115与向量数据路径B侧116之间的有限数据交换。在每一操作循环期间,可从全局标量寄存器堆211再调用一个64位数据字以供向量数据路径B侧116的一或多个功能单元用作操作数且可从全局向量寄存器堆231再调用一个64位数据字以供标量数据路径A侧115的一或多个功能单元用作操作数。任何标量数据路径A侧115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可从全局向量寄存器堆231读取64位操作数。此64位操作数为全局向量寄存器堆232的经存取寄存器中的512位数据的最低有效位。多个标量数据路径A侧115功能单元可在同一操作循环期间采用与操作数相同的64位交叉路径数据。然而,在任何单个操作循环中将仅一个64位操作数从向量数据路径B侧116传送到标量数据路径A侧115。任何向量数据路径B侧116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246)可从全局标量寄存器堆211读取64位操作数。如果对应指令为标量指令,那么将交叉路径操作数数据视为任一其它64位操作数。如果对应指令为向量指令,那么对操作数的上部448个位进行填零。多个向量数据路径B侧116功能单元可在同一操作循环期间采用与操作数相同的64位交叉路径数据。在任一单个操作循环中将仅一个64位操作数从标量数据路径A侧115传送到向量数据路径B侧116。
流式传输引擎125在某些受限定情况中传送数据。流式传输引擎125控制两个数据流。流由特定类型的元素序列组成。对流进行操作的程序顺序地读取数据,从而又对每一元素进行操作。每一流具有以下基本性质。流数据具有定义良好的开始及结束时间。流数据贯穿流具有固定元素大小及类型。流数据具有固定元素序列。因此,程序无法在流内进行随机寻找。流数据在作用时为只读的。程序无法对流进行写入同时从流读取。一旦打开流,流式传输引擎125便:计算地址;从层级2统一高速缓冲存储器(其可需要来自更高层级存储器的高速缓冲存储器服务)提取所定义数据类型;执行数据类型操纵,例如零扩展、正负号扩展、数据元素排序/交换,例如矩阵转置;且将数据直接递送到CPU 110内的经编程数据寄存器堆。流式传输引擎125因此可用于对良性数据的实时数字滤波操作。流式传输引擎125从对应CPU释放这些存储器提取任务,从而达成其它处理功能。
流式传输引擎125提供以下益处。流式传输引擎125准许多维存储器存取。流式传输引擎125增加对于功能单元可用的带宽。流式传输引擎125最小化高速缓冲存储器未命中停顿的数目,因为流缓冲器绕过层级1数据高速缓冲存储器123。流式传输引擎125减小维持回圈所需要的标量操作的数目。流式传输引擎125管理地址指针。流式传输引擎125自动处置地址产生,从而释放地址产生指令槽以及D1单元224及D2单元226以用于其它计算。
CPU 110对指令管线进行操作。在下文进一步描述的固定长度的指令数据包中提取指令。所有指令需要相同数目个管线阶段来进行提取及解码,但需要变化数目个执行阶段。
图11图解说明以下管线阶段:程序提取阶段1110、调度与解码阶段1110及执行阶段1130。程序提取阶段1110包含所有指令的三个级。调度与解码阶段包含所有指令的三个级。执行阶段1130取决于指令而包含一到四个级。
提取阶段1110包含程序地址产生级1111(PG)、程序存取级1112(PA)及程序接收级1113(PR)。在程序地址产生级1111(PG)期间,在CPU中产生程序地址且将读取请求发送到层级1指令高速缓冲存储器L1I的存储器控制器。在程序存取级1112(PA)期间,层级1指令高速缓冲存储器L1I处理请求,存取其存储器中的数据且将提取数据包发送到CPU边界。在程序接收级1113(PR)期间,CPU寄存提取数据包。
指令始终为同时构成提取数据包的所提取十六个32位宽的槽。图12图解说明单个提取数据包的16个指令1201到1216。将提取数据包对准在512位(16字)边界上。优选实施例采用固定32位指令长度。固定长度指令出于数个原因而为有利的。固定长度指令达成容易解码器对准。经恰当对准指令提取可将多个指令加载到并行指令解码器中。此经恰当对准指令提取可在存储于存储器(经对准在512位边界上的提取数据包)中时由与固定指令数据包提取耦合的预定指令对准实现。经对准指令提取准许并行解码器对指令定大小的所提取位的操作。可变长度指令需要在其可经解码之前定位每一指令边界的初始步骤。固定长度指令集一般准许指令字段的更规则布局。此简化每一解码器的构造,这对于宽发布VLIW中央处理器来说为优点。
个别指令的执行部分地由每一指令中的p位控制。此p位优选地为32位宽槽的位0。p位确定指令是否与下一指令并行地执行。从较低地址到较高地址扫描指令。如果指令的p位为1,那么与所述指令并行地(在与所述指令相同的循环中)执行下一跟随指令(较高存储器地址)。如果指令的p位为0,那么在所述指令之后的循环中执行下一跟随指令。
CPU 110及层级1指令高速缓冲存储器L1I 121管线彼此解耦。取决于例如存在层级1指令高速缓冲存储器121中的击中还是层级2经组合高速缓冲存储器130中的击中的外部情况,来自层级1指令高速缓冲存储器L1I的提取数据包传回可采取不同数目个时钟循环。因此,程序存取级1112(PA)可采取数个时钟循环而非如在其它级中的1个时钟循环。
并行执行的指令构成执行数据包。在优选实施例中,执行数据包可含有高达十六个指令。执行数据包中的任何两个指令均不可使用同一功能单元。槽为五种类型中的一者:1)在CPU 110的功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225、D2单元226、L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246)中的一者上执行的独立指令;2)无单位指令,例如NOP(无操作)指令或多个NOP指令;3)分支指令;4)常数字段扩展;及5)条件代码扩展。下文将进一步阐释这些槽类型中的一些槽类型。
调度与解码阶段1120包含指令调度到适当执行单元级1121(DS)、指令预解码级1122(D1);及指令解码、操作数读取级1123(D2)。在指令调度到适当执行单元级1121(DS)期间,提取数据包分裂成执行数据包且指派给适当功能单元。在指令预解码级1122(D1)期间,源寄存器、目的地寄存器及相关联路径经解码以用于执行功能单元中的指令。在指令解码期间,完成操作数读取级1123(D2)更详细单元解码,而且从寄存器堆读取操作数。
执行阶段1130包含执行级1131到1135(E1到E5)。不同类型的指令需要不同数目个这些级来完成其执行。管线的这些级在理解CPU循环边界处的装置状态时起到重要作用。
在执行1级1131(E1)期间,评估指令的条件且对操作数进行操作。如图11中所图解说明,执行1级1131可从流缓冲器1141及示意性地展示为1142的寄存器堆中的一者接收操作数。对于加载与存储指令,执行地址产生且将地址修改写入到寄存器堆。对于分支指令,PG阶段中的分支提取数据包受影响。如图11中所图解说明,加载与存储指令存取在此处示意性地经展示为存储器1151的存储器。对于单循环指令,将结果写入到目的地寄存器堆。此假定指令的任何条件经评估为真。如果条件经评估为假,那么指令在执行1级1131之后不写入任何结果或具有任何管线操作。
在执行2级1132(E2)期间,加载指令将地址发送到存储器。存储指令将地址及数据发送到存储器。如果发生饱和,那么使结果饱和的单循环指令设定控制状态寄存器(CSR)中的SAT位。对于双循环指令,将结果写入到目的地寄存器堆。
在执行3级1133(E3)期间,执行数据存储器存取。如果发生饱和,那么使结果饱和的任何乘法指令设定控制状态寄存器(CSR)中的SAT位。对于3循环指令,将结果写入到目的地寄存器堆。
在执行4级1134(E4)期间,加载指令将数据带到CPU边界。对于4循环指令,将结果写入到目的地寄存器堆。
在执行5级1135(E5)期间,加载指令将数据写入到寄存器中。此在图11中经示意性地展示,其中输入从存储器1151到执行5级1135。
图13图解说明由本发明使用的功能单元指令的指令译码1300的实例。所属领域的技术人员将认识到,其它指令译码为可行的且在本发明的范围内。每一指令由32个位组成且控制可个别控制的功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225、D2单元226、L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246)中的一者的操作。如下对位字段进行定义。
creg字段1301(位29到31)及z位1302(位28)为在条件指令中使用的任选字段。这些位用于条件指令以识别断言寄存器及条件。z位1302(位28)指示断言是基于断言寄存器中的零还是非零。如果z=1,那么测试结果与零相等。如果z=0,那么测试结果为非零。将creg=0及z=0的情形视为始终为真以允许无条件指令执行。creg字段1301及z字段1302编码于指令中,如表1中所展示。
表1
条件指令的执行以存储于规定数据寄存器中的值为条件。此数据寄存器在所有功能单元的全局标量寄存器堆211中。注意,z位列中的“z”是指上文所述的零/非零比较选择且“x”为随意状态。此译码可仅将16个全局寄存器的子集规定为断言寄存器。做出此选择以预留指令译码中的位。注意,无条件指令不具有这些选用位。对于无条件指令,字段1301及1302(28到31)中的这些位优选地用作额外操作码位。
dst字段1303(位23到27)将对应寄存器堆中的寄存器规定为指令结果的目的地。
src2/cst字段1304(位18到22)取决于指令操作码字段(所有指令的位4到12及另外无条件指令的位28到31)而具有数个含义。第一含义将对应寄存器堆的寄存器规定为第二操作数。第二含义为即时常数。取决于指令类型,此被视为无正负号整数且零扩展到规定数据长度或被视为带正负号整数且正负号扩展到规定数据长度。
src1字段1305(位13到17)将对应寄存器堆中的寄存器规定为第一源操作数。
所有指令的操作码字段1306(位4到12)(及另外无条件指令的位28到31)规定指令类型且指定适当指令选项。此包含所使用功能单元及所执行操作的清楚指定。对操作码的详细阐释超出本发明的范围,惟下文所详述的指令选项除外。
e位1307(位2)仅用于即时常数指令,其中常数可经扩展。如果e=1,那么即时常数以下文详述的方式来扩展。如果e=0,那么即时常数未经扩展。在所述情形中,即时常数由src2/cst字段1304(位18到22)规定。注意,此e位1307仅用于一些指令。因此,借助恰当译码,此e位1307可从不需要其的指令省略且此位用作额外操作码位。
s位1307(位1)指定标量数据路径A侧115或向量数据路径B侧116。如果s=0,那么选择标量数据路径A侧115。此将功能单元限制于L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226以及图2中所图解说明的对应寄存器堆。类似地,s=1选择向量数据路径B侧116,从而将功能单元限制于L2单元241、S2单元242、M2单元243、N2单元244、P单元246及图2中所图解说明的对应寄存器堆。
p位1308(位0)标记执行数据包。p位确定指令是否与以下指令并行地执行。从较低地址到较高地址扫描p个位。如果对于当前指令,p=1,那么下一指令与当前指令并行地执行。如果对于当前指令,p=0,那么下一指令在当前指令之后的循环中执行。并行执行的所有指令构成执行数据包。执行数据包可含有高达十二个指令。执行数据包中的每一指令必须使用不同功能单元。
存在两个不同条件代码扩展槽。每一执行数据包可含有这些唯一32位条件代码扩展槽各一个,每一唯一32位条件代码扩展槽针对同一执行数据包中的指令含有4位creg/z字段。图14图解说明条件代码扩展槽0的译码且图15图解说明条件代码扩展槽1的译码。
图14图解说明具有32个位的条件代码扩展槽0的译码。字段1401(位28到31)规定指派给同一执行数据包中的L1单元221指令的4个creg/z位。字段1402(位27到24)规定指派给同一执行数据包中的L2单元241指令的4个creg/z位。字段1403(位19到23)规定指派给同一执行数据包中的S1单元222指令的4个creg/z位。字段1404(位16到19)规定指派给同一执行数据包中的S2单元242指令的4个creg/z位。字段1405(位12到15)规定指派给同一执行数据包中的D1单元225指令的4个creg/z位。字段1406(位8到11)规定指派给同一执行数据包中的D2单元245指令的4个creg/z位。字段1407(位6及7)为未使用的/保留的。字段1408(位0到5)经译码为唯一位集合(CCEX0)以识别条件代码扩展槽0。一旦检测到条件代码扩展槽0的此唯一ID,便采用对应creg/z位来控制同一执行数据包中的任何L1单元221、L2单元241、S1单元222、S2单元242、D1单元224及D2单元225指令的条件执行。如表1中所展示而解释这些creg/z位。如果对应指令为条件的(包含creg/z位),那么条件代码扩展槽0中的对应位越权控制指令中的条件代码位。注意,任何执行数据包均不可具有针对于特定执行单元的多于一个指令。任何指令执行数据包均不可含有多于一个条件代码扩展槽0。因此,creg/z位到功能单元指令的映射为清楚的。将creg/z位设定为等于“0000”使指令为无条件的。因此,经恰当地译码的条件代码扩展槽0可使一些对应指令为条件的且使一些对应指令为无条件的。
图15图解说明具有32个位的条件代码扩展槽1的译码。字段1501(位28到31)规定指派给同一执行数据包中的M1单元223指令的4个creg/z位。字段1502(位27到24)规定指派给同一执行数据包中的M2单元243指令的4个creg/z位。字段1503(位19到23)规定指派给同一执行数据包中的C单元245指令的4个creg/z位。字段1504(位16到19)规定指派给同一执行数据包中的N1单元224指令的4个creg/z位。字段1505(位12到15)规定指派给同一执行数据包中的N2单元244指令的4个creg/z位。字段1506(位5到11)为未使用的/保留的。字段1507(位0到5)经译码为唯一位集合(CCEX1)以识别条件代码扩展槽1。一旦检测到条件代码扩展槽1的此唯一ID,便采用对应creg/z位来控制同一执行数据包中的任何M1单元223、M2单元243、C单元245、N1单元224及N2单元244指令的条件执行。如表1中所展示而解释这些creg/z位。如果对应指令为条件的(包含creg/z位),那么条件代码扩展槽1中的对应位越权控制指令中的条件代码位。注意,任何执行数据包均不可具有针对于特定执行单元的多于一个指令。任何指令执行数据包均不可含有多于一个条件代码扩展槽1。因此,creg/z位到功能单元指令的映射为清楚的。将creg/z位设定为等于“0000”使指令为无条件的。因此,经恰当地译码的条件代码扩展槽1可使一些指令为条件的且使一些指令为无条件的。
包含p位以对如上文连同图13所描述的执行数据包进行定义对于条件代码扩展槽0及条件代码扩展槽1两者为可行的。在优选实施例中,如图14及15中所图解说明,条件代码扩展槽0及条件代码扩展槽1优选地具有始终经编码为1的位0(p位)。因此,条件代码扩展槽0或条件代码扩展槽1两者均不可在执行数据包的最后指令槽中。
存在两个不同常数扩展槽。每一执行数据包可含有这些唯一32位常数扩展槽各一个,每一唯一32位常数扩展槽含有将与5位常数字段1305一起并置为高阶位以形成32位常数的27个位。如上文在指令译码描述中所述,仅一些指令将src2/cst字段1304定义为常数而非源寄存器识别符。所述指令中的至少一些指令可采用常数扩展槽来将此常数扩展到32个位。
图16图解说明常数扩展槽0的字段。每一执行数据包可包含常数扩展槽0的一个实例及常数扩展槽1的一个实例。图16图解说明常数扩展槽0 1600包含两个字段。字段1601(位5到31)构成经扩展32位常数的27个最高有效位,所述经扩展32位常数包含目标指令scr2/cst字段1304作为5个最低有效位。字段1602(位0到4)经译码为唯一位集合(CSTX0)以识别常数扩展槽0。在优选实施例中,常数扩展槽0 1600可仅用于扩展同一执行数据包中的L1单元221指令、D1单元225指令中的数据、S2单元242指令、D2单元226指令中的位移、M2单元243指令、N2单元244指令、分支指令或C单元245指令中的一者的常数。常数扩展槽1类似于常数扩展槽0,惟位0到4经译码为唯一集合(CSTX1)以识别常数扩展槽1除外。在优选实施例中,常数扩展槽1可仅用于扩展同一执行数据包中的L2单元241指令、D2单元226指令中的数据、S1单元222指令、D1单元225指令中的位移、M1单元223指令或N1单元224指令中的一者的常数。
如下使用常数扩展槽0及常数扩展槽1。目标指令必须为准许常数规范的类型。如此项技术中已知,通过用如上文关于scr2/cst字段1304所描述的常数的最低有效位来替换一个输入操作数寄存器规范字段来实施此。指令解码器113依据指令操作码位确定此情形,称为即时字段。目标指令还包含专用于发信号的一个常数扩展位(e位1307),不管规定常数未经扩展(优选地,常数扩展位=0)还是所述常数经扩展(优选地,常数扩展位=1)。如果指令解码器113检测到常数扩展槽0或常数扩展槽1,那么其进一步针对与所检测到的常数扩展槽对应的指令检查所述执行数据包内的其它指令。仅在一个对应指令具有等于1的常数扩展位(e位1307)的情况下进行常数扩展。
图17是图解说明常数扩展的部分框图1700。图17假定指令解码器113检测同一执行数据包中的常数扩展槽及对应指令。指令解码器113将来自常数扩展槽的27个扩展位(位字段1601)及来自对应指令的5个常数位(位字段1305)供应到并置器1701。并置器1701形成来自这两个部分的单个32位字。在优选实施例中,来自常数扩展槽的27个扩展位(位字段1601)为最高有效位且5个常数位(位字段1305)为最低有效位。将此经组合32位字供应到多路复用器1702的一个输入。来自对应指令字段1305的5个常数位将第二输入供应到多路复用器1702。多路复用器1702的选择受常数扩展位的状态控制。如果常数扩展位(e位1307)为1(经扩展),那么多路复用器1702选择经并置32位输入。如果常数扩展位为0(未经扩展),那么多路复用器1702选择来自对应指令字段1305的5个常数位。多路复用器1702将此输出供应到正负号扩展单元1703的输入。
正负号扩展单元1703依据来自多路复用器1702的输入形成最终操作数值。正负号扩展单元1703接收控制输入Scalar/Vector及Data Size。Scalar/Vector输入指示对应指令是标量指令还是向量指令。数据路径A侧115的功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可仅执行标量指令。针对于这些功能单元中的一者的任何指令为标量指令。数据路径侧B功能单元L2单元241、S2单元242、M2单元243、N2单元244及C单元245可执行标量指令或向量指令。指令解码器113依据操作码位确定指令是标量指令还是向量指令。P单元246可仅执行标量指令。Data Size可为8个位(字节B)、16个位(半字H)、32个位(字W)、64个位(双字D)、四字(128位)数据或半向量(256位)数据。
表2针对各种选项而列出正负号扩展单元1703的操作。
表2
包含p位以对如上文连同图13所描述的执行数据包进行定义对于常数扩展槽0及常数扩展槽1两者为可行的。在优选实施例中,如在条件代码扩展槽的情形中,常数扩展槽0及常数扩展槽1优选地具有始终经编码为1的位0(p位)。因此,常数扩展槽0或常数扩展槽1两者均不可在执行数据包的最后指令槽中。
包含常数扩展槽0或1及经标记为常数扩展(e位=1)的多于一个对应指令对于执行数据包来说为技术上可行的。对于常数扩展槽0,此将意味执行数据包中的L1单元221指令、D1单元225指令中的数据、S2单元242指令、D2单元226指令中的位移、M2单元243指令或N2单元244指令中的多于一者具有1的e位。对于常数扩展槽1,此将意味执行数据包中的L2单元241指令、D2单元226指令中的数据、S1单元222指令、D1单元225指令中的位移、M1单元223指令或N1单元224指令中的多于一者具有1的e位。将相同常数扩展供应到多于一个指令不预期为有用功能。因此,在一个实施例中,指令解码器113可确定此情形为无效操作且不被支持。替代地,此组合可借助应用于经标记为常数扩展的每一对应功能单元指令的常数扩展槽的扩展位来支持。
L1单元221、S1单元222、L2单元241、S2单元242及C单元245通常以单指令多数据(SIMD)模式来操作。在此SIMD模式中,相同指令应用于来自两个操作数的经打包数据。每一操作数保存安置于预定槽中的多个数据元素。SIMD操作在数据边界处通过进位控制来达成。此进位控制达成对变化数据宽度的操作。
图18图解说明进位控制。“与”门1801接收在操作数宽的算术逻辑单元内的位N的进位输出(标量数据路径A侧115功能单元的64个位及向量数据路径B侧116功能单元的512个位)。“与”门1801还接收下文将进一步阐释的进位控制信号。将“与”门1801的输出供应到操作数宽的算术逻辑单元的位N+1的进位输入。例如“与”门1801的“与”门安置于可能数据边界处的每一对位之间。举例来说,对于8位数据,此“与”门将在位7与位8、位15与位16、位23与位24等之间。每一此“与”门接收对应进位控制信号。如果数据大小为最小值,那么每一进位控制信号为0,从而有效地阻挡邻近位之间的进位传输。如果选定数据大小需要两个算术逻辑单元区段,那么对应进位控制信号为1。表3在下文针对例如由向量数据路径B侧116功能单元使用的512位宽的操作数(其可划分成8个位、16个位、32个位、64个位、128个位或256个位的区段)的情形展示实例性进位控制信号。在表3中,上部32个位控制上部位(位128到511)进位且下部32个位控制下部位(位0到127)进位。不需要对最高有效位的进位输出的控制,因此仅需要63个进位控制信号。
表3
对为2的整数幂(2N)的数据大小进行操作在此项技术中为典型的。然而,此进位控制技术不限于2的整数幂。所属领域的技术人员将理解如何将此技术应用于其它数据大小及其它操作数宽度。
在优选实施例中,至少L单元241及S单元242使用断言寄存器堆234中的寄存器采用两种类型的SIMD指令。在优选实施例中,所有这些SIMD向量断言指令对指令规定数据大小进行操作。数据大小可包含字节(8位)数据、半字(16位)数据、字(32位)数据、双字(64位)数据、四字(128位)数据及半向量(256位)数据。在这些指令类型中的第一指令类型中,功能单元(L单元241或S单元242)对两个一般数据寄存器中的经打包数据执行SIMD比较且将结果供应到断言数据寄存器。指令规定数据大小、两个一般数据寄存器操作数及目的地断言寄存器。在优选实施例中,每一断言数据寄存器包含与一般数据寄存器的每一最小数据大小部分对应的一个位。在当前实施例中,一般数据寄存器为512个位(64个字节)且断言数据寄存器为64个位(8个字节)。断言数据寄存器的每一位与一般数据寄存器的8个位对应。对规定数据大小(8、16、32、64、128或256个位)执行比较。如果比较为真,那么功能单元将1供应到与所述数据大小部分对应的所有断言寄存器位。如果比较为假,那么功能单元将0供应到与所述数据大小部分对应的所有断言寄存器位。在优选实施例中,所达成比较操作包含:小于;大于;及等于。
在这些指令类型中的第二指令类型中,功能单元(L单元241或S单元242)基于断言数据寄存器中的数据状态而对一般数据寄存器中的经打包数据单独地执行第一SIMD操作或第二SIMD操作。指令规定数据大小、一个或两个一般数据寄存器操作数、控制断言寄存器及一般数据寄存器目的地。举例来说,功能单元可取决于断言数据寄存器中的将存储于目的地寄存器中的对应位的1/0状态而针对两个向量操作数的每一数据定大小的部分选择第一操作数的第一数据元素或第二操作数的第二数据元素。在第二实例中,单个向量操作数的数据元素可取决于断言寄存器的对应位的数据而保存到存储器或不保存。
P单元245的操作基于多于一个向量比较而准许各种复合向量SIMD操作。举例来说,可使用两个比较进行范围确定。在SIMD操作中,将候选向量与具有打包在第一数据寄存器内的范围的最小值的第一向量引用进行比较。“大于”结果为具有与取决于SIMD比较而设定到0或1的SIMD数据宽度对应的位的标量数据。此存储于第一断言数据寄存器中。进行候选向量与具有打包在第二数据寄存器内的范围的最大值的第二引用向量的第二SIMD比较会产生存储于第二断言寄存器中的具有“小于”结果的另一标量。P单元接着对第一及第二断言寄存器进行“与”操作。“与”结果指示候选向量的每一SIMD数据部分是在范围内还是超出范围。“与”结果的P单元BITCNT指令可产生在比较范围内的数据元素的计数。P单元NEG功能可用于:将“小于”比较结果转换为“大于”或“等于”比较结果;将“大于”比较结果转换为“小于”或“等于”比较结果;或将“等于”比较结果转换为“不等于”比较结果。
图19图解说明本发明的流式传输引擎的概念视图。图19图解说明单个流的过程。流式传输引擎1900包含流地址产生器1901。流地址产生器1901顺序地产生流的元素的地址且将这些元素地址供应到系统存储器1910。存储器1910再调用存储于元素地址处的数据(数据元素)且将这些数据元素供应到数据先进先出(FIFO)存储器1902。数据FIFO1902提供存储器1910与CPU 1920之间的缓冲。数据格式化器1903从数据FIFO存储器1902接收数据元素且根据流定义提供数据格式化。下文将描述此过程。流式传输引擎1900将经格式化数据元素从数据格式化器1903供应到CPU 1920。CPU 1920上的程序消耗数据且产生输出。
流元素通常驻存于正常存储器中。存储器自身不对流强加任何特定结构。程序对流进行定义且因此通过规定以下流属性而强加结构:流的第一元素的地址;流中的元素的大小及类型;流中的数据的格式化;及与流相关联的地址序列。
流式传输引擎就穿过存储器的指针来说对流的元素的地址序列进行定义。多层级嵌套回圈控制指针所采取的路径。回圈层级的迭代计数指示层级重复的次数。维度给出所述回圈层级的指针位置之间的距离。
在基本前向流中,最内回圈始终消耗来自存储器的物理上连续元素。此最内回圈的隐式维度为1个元素。指针自身以接连增加次序从元素移动到元素。在内回圈外部的每一层级中,所述回圈基于回圈层级的维度的大小而将指针移动到新位置。
此形式的寻址允许程序以小数目个参数规定穿过存储器的规则路径。表4列出基本流的寻址参数。
表4
根据本发明的优选实施例,ELEM_BYTES介于从1个字节到64个字节的范围内,如表5中所展示。
ELEM_BYTES 流元素长度
000 1个字节
001 2个字节
010 4个字节
011 8个字节
100 16个字节
101 32个字节
110 64个字节
111 保留的
表5
以上定义将流的接连元素映射到存储器中的增加地址。此对于大多数算法但并非全部算法有效。一些算法通过读取减小存储器地址中的元素而更好地供应,颠倒流寻址。举例来说,离散卷积计算向量点积,根据如下公式:
在大部分DSP代码中,f[]及g[]表示存储器中的阵列。对于每一输出,算法在正向方向上读取f[],但在反向方向上读取g[]。实际滤波器将[x]及[t-x]的索引的范围限制到有限数目个元素。为支持此模式,流式传输引擎支持以减小地址次序读取元素。
矩阵乘法将唯一问题呈现给流式传输引擎。矩阵积中的每一元素为来自第一矩阵的行与来自第二矩阵的列之间的向量点积。程序通常以行为主或列为主次序存储所有矩阵。行为主次序将单个行的所有元素连续地存储于存储器中。列为主次序将单个列的所有元素连续地存储于存储器中。矩阵通常以与语言的默认阵列次序相同的次序经存储。因此,矩阵乘法中的两个矩阵中的仅一者映射到流式传输引擎的二维流定义上。在典型实例中,除第二阵列上的行之外,第一索引还步进穿过第一阵列上的列。此问题并不唯一于流式传输引擎。矩阵乘法的存取模式与大多数一般用途存储器层次不良地配合。一些软件库转置两个矩阵中的一者,使得在乘法期间按行(或按列)存取两个矩阵。流式传输引擎关于经转置流支持隐式矩阵转置。经转置流避免明确地转化存储器中的数据的成本。替代以严格地接连的元素次序存取数据,流式传输引擎使两个内回圈维度以其遍历次序有效地互换,从而将沿着第二维度的元素提取到连续向量通道中。
此算法有效,但针对小元素大小进行实施为不实际的。一些算法对为多个列及行在一起的矩阵图块有效。因此,流式传输引擎定义单独转置粒度。硬件强加最小粒度。转置粒度还必须至少与元素大小一样大。转置粒度致使流式传输引擎在沿着维度1移动之前从维度0提取一或多个接连元素。当粒度等于元素大小时,此致使从行为主阵列提取单个列。否则,粒度规定从行为主阵列同时提取2个、4个或更多个列。在说明中,此还可通过交换行与列而适用于列为主布局。参数GRANULE指示字节中的转置粒度。
另一常见矩阵乘法技术交换矩阵乘法的两个最内回圈。所得内回圈不再沿着一个矩阵的列向下读取同时跨越另一矩阵的行读取。举例来说,算法可提高在内回圈外部的一个项,从而用标量值替换其。在向量机器上,最内回圈可借助单个标量×向量乘法后续接着向量加法非常高效地实施。本发明的中央处理单元核心110缺乏标量×向量乘法。程序必须替代地跨越向量的长度复制标量值且使用向量×向量乘法。本发明的流式传输引擎以元素复制模式直接支持此及相关使用模型。在此模式中,流式传输引擎读取小于全向量大小的区组且复制所述区组以填充下一向量输出。
流式传输引擎将每一复数视为具有两个子元素的单个元素,所述两个子元素给出复数的实数及虚数(矩形)或振幅及角度(极线)部分。并非所有程序或外围装置同意这些子元素应出现在存储器中的次序。因此,流式传输引擎提供在不具有成本的情况下交换复数的两个子元素的能力。此特征在不解释元素的内容的情况下交换元素的两个一半且可用于交换任一类型的子元素对,而非仅复数。
算法一般优选以高精确度起作用,但高精确度值需要比较低精确度值多的存储区及带宽。通常,程序将以低精确度将数据存储于存储器中,将所述值提升到更高准确度以用于计算且接着将值降低到更低准确度以用于存储。流式传输引擎通过允许算法规定一个层级的类型提升而直接支持此。在本发明的优选实施例中,可借助整数类型的正负号或零扩展将每一子元素提升到更大类型大小。流式传输引擎可支持浮动点提升从而分别将16位及32位浮动点值提升到32位及64位格式也是可行的。
流式传输引擎将流定义为离散数据元素序列,中央处理单元核心110消耗连续地打包于向量中的数据元素。向量类似于流,因为其含有具有一些隐式序列的多个齐次元素。由于流式传输引擎读取流,但中央处理单元核心110消耗向量,因此流式传输引擎必须以不一致方式将流映射到向量上。
向量由相等大小的通道组成,每一通道含有子元素。中央处理单元核心110将向量的最右边通道指定为通道0,而不管装置的当前端字节序(endian)模式。通道编号从右到左增加。向量内的实际通道数目取决于向量的长度及子元素的数据大小而变化。
图20图解说明格式化器1903的格式化操作的序列。格式化器1903包含三个区段:输入区段2010;格式化区段2020;及输出区段2030。输入区段2010接收如由流地址产生器1901存取的从系统存储器1910再调用的数据。此数据可经由线性提取流2011或经转置提取流2012。
格式化区段2020包含各种格式化区块。下文将进一步描述由格式化器1903通过这些块执行的格式化。复数交换块2021任选地交换形成复数元素的两个子元素。类型提升块2022任选地将每一数据元素提升成较大数据大小。提升包含无正负号整数的零扩展及带正负号整数的正负号扩展。抽取块2023任选地抽取数据元素。在优选实施例中,抽取可为保持每隔一个数据元素的2:1或保持每隔三个数据元素的4:1。元素复制块2024任选地复制个别数据元素。在优选实施例中,此数据元素复制为2的整数幂(2N,当N为整数时),包含2x、4x、8x、16x、32x及64x。在优选实施例中,数据复制可遍及多个目的地向量。向量长度掩蔽/群组复制块2025具有两个主要功能。独立规定的向量长度VECLEN控制供应到每一输出数据向量的数据元素。当群组复制关断时,输出数据向量中的过多通道经填零且这些通道经标记为无效的。当群组复制接通时,复制规定向量长度的输入数据元素以填充输出数据向量。
输出区段2030保存用于输出到对应功能单元的数据。用于CPU的寄存器与缓冲器2031存储经格式化数据向量以由中央处理单元核心110的功能单元用作操作数。
图21图解说明向量中的通道分配的第一实例。向量2100划分成8个64位通道(8×64个位=512个位的向量长度)。通道0包含位0到63;通道1包含位64到125;通道2包含位128到191;通道3包含位192到255,通道4包含位256到319,通道5包含位320到383,通道6包含位384到447且通道7包含位448到511。
图22图解说明向量中的通道分配的第二实例。向量2210划分成16个32位通道(16×32个位=512个位的向量长度)。通道0包含位0到31;通道1包含位32到63;通道2包含位64到95;通道3包含位96到127;通道4包含位128到159;通道5包含位160到191;通道6包含位192到223;通道7包含位224到255;通道8包含位256到287;通道9占据位288到319;通道10包含位320到351;通道11包含位352到387;通道12包含位388到415;通道13包含位416到447;通道14包含位448到479;且通道15包含位480到511。
流式传输引擎将最内流维度直接映射到向量通道。其将所述维度内的较早元素映射到较低通道编号且将较晚元素映射到较高通道编号。不管此特定流以增加还是减小地址次序推进,情况均如此。无论流定义的次序如何,流式传输引擎均以递增通道次序将元素存放在向量中。对于非复数数据,其将第一元素放置在中央处理单元核心110提取的第一向量的通道0中,将第二元素放置在通道1中,且依此类推。对于复数数据,流式传输引擎将第一元素放置在通道0及1中,将第二元素放置在通道2及3中,且依此类推。元素内的子元素保持相同相对排序,而不管流方向如何。对于未交换复数元素,此将每一对的具有较低地址的子元素放置于偶数编号的通道中,且将每一对的具有较高地址的子元素放置于奇数编号的通道中。经交换复数元素颠倒此映射。
流式传输引擎用与其可从最内流维度获得的一样多的元素填充中央处理单元核心110提取的每一向量。如果最内维度并非向量长度的倍数,那么流式传输引擎将所述维度填补到具有零的向量长度。如下文所述,流式传输引擎还将把这些通道标记为无效的。因此,为达成较高维度流,来自外维度的每一迭代的第一元素到达向量的通道0中。流式传输引擎始终将最内维度映射到向量中的接连通道。对于经转置流,最内维度由沿着维度1而非维度0的子元素群组组成,因为转置交换这两个维度。
二维流与一维流相比较展现较大多样性。基本二维流从较大矩形提取较小矩形。经转置2D流按列而非按行读取矩形。其中重叠有第二维度的回圈流首先执行重复地回圈的有限脉冲响应(FIR)滤波器抽头或提供输入样本的滑动窗的FIR滤波器样本。
图23图解说明基本二维流。由ELEM_BYTES、ICNT0、DIM1及ICNT1表示的两个内维度给出足以描述从具有维度2311及2312的较大矩形2310提取具有维度2321及2322的较小矩形2320的灵活性。在此实例中,矩形2320为64位值的9×13矩形且矩形2310为较大的11×19矩形。以下流参数定义此流:
ICNT0=9
ELEM_BYTES=8
ICNT1=13
DIM1=88(11乘以8)
因此,0维度2321中的迭代计数为9。1维度2322中的迭代计数为13。注意,ELEM_BYTES仅按比例缩放最内维度。第一维度具有大小ELEM_BYTES的ICNT0元素。流地址产生器不标定外维度。因此,DIM1=88,其为每元素由8个字节按比例缩放的11个元素。
图24图解说明此实例性流内的元素次序。流式传输引擎以次序2400中所图解说明的次序提取流的元素。前9个元素来自矩形2320的第一行,从左到右在跳转1到8中。第10个元素到第24个元素来自第二行,且依此类推。当流从第9个元素移动到第10个元素(图24中的跳转9)时,流式传输引擎基于指针在内回圈的起始处的位置而非指标在第一维度的端处结束的位置而计算新位置。此独立于ELEM_BYTES及ICNT0而形成DIM1。DIM1始终表示每一接连行的第一字节之间的距离。
经转置流在维度0之前沿着维度1存取。以下实例图解说明耦合经转置流,从而使转置粒度变化。图25图解说明从具有维度2511及2512的较大矩形2510(14×13)提取具有维度2521及2522的较小矩形2520(12×8)。在图25中,ELEM_BYTES等于2。
图26图解说明流式传输引擎将如何以4个字节的转置粒度提取此实例的流。提取模式2600从每一行提取元素对(因为4的粒度为2的ELEM_BYTES的两倍),但以其它方式沿着列向下移动。一旦其到达列对的底部,其便关于下一列对重复此模式。
图27图解说明流式传输引擎将如何以8个字节的转置粒度提取此实例的流。总体结构保持相同。流式传输引擎在移动到列中的下一行之前从每一行提取4个元素(因为8的粒度为2的ELEM_BYTES的四倍),如提取模式2700中所展示。
目前为止检查的流从存储器读取每一元素恰好一次。流可从存储器多次读取给定元素,从而在存储器件上有效地回圈。FIR滤波器展现两个常见回圈模式。FIR针对每一输出重新读取相同滤波器抽头。FIR还从滑动窗读取输入样本。两个接连输出将需要来自两个重叠窗的输入。
图28图解说明流式传输引擎2800的细节。流式传输引擎2800含有三个主要区段:流0 2810;流1 2820;及共享L2接口2830。流0 2810及流1 2820两者含有并行操作的完全相同硬件。流0 2810及流1 2820两者共享L2接口2830。每一流2810及2820向中央处理单元核心110提供高达512个位/循环(每循环)。流式传输引擎架构通过其专用流路径及共享双重L2接口达成此。
每一流式传输引擎2800包含可每循环各自产生一个新的非对准请求的专用6维流地址产生器2811/2821。地址产生器2811/2821输出使由流参数定义的序列中的元素重叠的512位经对准地址。此将在本文中进一步描述。
每一地址产生器2811/2811连接到专用微表旁视缓冲器(μTLB)2812/2822。μTLB2812/2822每循环将单个48位虚拟地址转换为44位物理地址。每一μTLB 2812/2822具有8个项目,从而涵盖具有4kB页的最小32kB或具有2MB页的最大16MB。每一地址产生器2811/2821每循环产生2个地址。μTLB 2812/2822每循环仅转换1个地址。为维持吞吐量,流式传输引擎2800利用如下事实:大多数流引用将在同一4kB页内。因此,地址转换不修改地址的位0到11。如果aout0及out1在同一4kB页中(aout0[47:12]与aout1[47:12]相同),那么μTLB2812/2822仅转换aout0且针对两个地址的上部位重新使用转换。
经转换地址在命令队列2813/2823中排队。这些地址与来自对应存储分配与追踪块2814/2824的信息对准。流式传输引擎2800不明确地管理μTLB 2812/2822。系统存储器管理单元(MMU)在上下文切换期间在必要时使μTLB无效。
存储分配与追踪2814/2824管理流的内部存储,从而发现数据重新使用且追踪每一数据片的寿命。此将在本文中进一步描述。
引用队列2815/2825存储由对应地址产生器2811/2821产生的引用序列。此信息驱动数据格式化网络使得其可以正确次序将数据呈现给中央处理单元核心110。引用队列2815/2825中的每一项目含有读取数据存储区当中的数据所必要的信息且针对中央处理单元核心110而将其对准。引用队列2815/2825将表6中所列出的以下信息维持在每一槽中:
数据槽低 与aout0相关联的数据的下半部的槽编号
数据槽高 与aout1相关联的数据的上半部的槽编号
旋转 使数据旋转以使下一元素与通道0对准的字节数目
长度 此引用中的有效字节数目
表6
存储分配与追踪2814/2824在地址产生器2811/2821产生新地址时将引用插入于引用队列2815/2825中。存储分配与追踪2814/2824在数据变得可用且流标头寄存器中存在空间的情况下从引用队列2815/2825移除引用。当存储分配与追踪2814/2824从引用队列2815/2825移除槽引用且将数据格式化时,其检查引用是否表示对对应槽的最后引用。存储分配与追踪2814/2824将引用队列2815/2825移除指针与槽的所记录最后引用进行比较。如果它们匹配,那么存储分配与追踪2814/2824一旦其用数据完成便将槽标记为非作用。
流式传输引擎2800具有任意数目个元素的数据存储区2816/2826。深度缓冲允许流式传输引擎在流中非常提前地提取,从而隐藏存储器系统延时。合适缓冲量可因产品产生不同而不同。在当前优选实施例中,流式传输引擎2800使32个槽专用于每一流。每一槽保存64个字节的数据。
蝶形网络2817/2827由7级蝶形网络组成。蝶形网络2817/2827接收128个字节的输入且产生64个字节的输出。蝶形网络的第1级物理上为半级。其从与未经对准提取匹配的两个槽收集字节且将所述字节合并到单个经旋转64字节阵列中。剩余6个级形成标准蝶形网络。蝶形网络2817/2827执行以下操作:使下一元素向下旋转到字节通道0;如果请求,那么使数据类型提升2的幂;如果请求,那么交换复数的实数及虚数分量;如果中央处理单元核心110目前在大端字节序模式中,那么将大端字节序转换为小端字节序。用户规定元素大小、类型提升及实数/虚数交换作为流的参数的部分。
流式传输引擎2800尝试在中央处理单元核心110对其的需求之前提取且格式化数据,使得其可维持完全吞吐量。流标头寄存器2818/2828提供小量缓冲,使得过程保持完全流水线式。流标头寄存器2818/2828并非架构上直接可见的,惟流式传输引擎2800提供完全吞吐量的事实除外。每一流还具有流有效寄存器2819/2829。有效寄存器2819/2829指示对应流标头寄存器2818/2828中的哪些元素为有效的。
两个流2810/2820共享一对独立L2接口2830:L2接口A(IFA)2833及L2接口B(IFB)2834。每一L2接口直接向L2控制器提供512个位/循环的吞吐量,集合带宽为1024个位/循环。L2接口使用基于信用的多核心总线架构(MBA)协议。L2控制器给每一接口指派其自身的命令信用池。池应具有充足信用使得每一接口可发送充足请求以在读取L2RAM、L2高速缓冲存储器及多核心共享存储器控制器(MSMC)存储器(下文所描述)时实现完全回读带宽。
为最大化性能,两个流可使用两个L2接口,从而允许单个流发送2个请求/循环的峰值命令速率。每一接口优选一个流(相比于另一流),但此优选因请求变化而动态地改变。IFA 2833及IFB 2834始终优选相对流,当IFA 2833优选流0时,IFB 2834优选流1,且反之亦然。
在每一接口2833/2834前面的仲裁器2831/2832对具有可用信用的每个循环应用以下基本协议。仲裁器2831/2832检查优选流是否具有准备发送的命令。如果如此,那么仲裁器2831/2832选择所述命令。仲裁器2831/2832接下来检查替代流是否具有准备发送的至少两个请求或一个命令且无信用。如果如此,那么仲裁器2831/2832从替代流拉取命令。如果任一接口发布命令,那么优选流及替代流的概念针对下一请求而交换。使用此简单算法,两个接口尽可能迅速地调度请求同时保持两个流之间的公平性。第一准则确保每一流可发送对具有可用信用的每个循环的请求。第二规则为一个流提供在第二接口闲置时借用另一流的接口的机制。第三规则跨越两个接口传播对每一流的带宽需求,从而确保任一接口自身均不成为瓶颈。
粗粒旋转器2835/2836使得流式传输引擎2800能够支持经转置矩阵寻址模式。在此模式中,流式传输引擎2800使其多维回圈的两个最内维度互换。此按列而非按行存取阵列。旋转器2835/2836为架构上不可见的,惟达成此经转置存取模式除外。
流定义模板提供含有数据的流的完全结构。迭代计数及维度提供结构的大部分,而各种旗标提供细节的剩余部分。对于所有含数据流,流式传输引擎定义单个流模板。其支持的所有流类型适配此模板。流式传输引擎定义六层级回圈嵌套以用于对流内的元素进行寻址。流模板中的字段中的大部分字段直接映射到所述算法中的参数。图29图解说明流模板寄存器2900。字段上面的数目为512位向量内的位数目。表7展示流模板的流字段定义。
表7
回圈0为最内回圈且回圈5为最外回圈。在当前实例中,DIM0始终等于对物理上连续数据进行定义的ELEM_BYTES。因此,流模板寄存器2900不对DIM0进行定义。流式传输引擎2800将所有迭代计数解释为无正负号整数且将所有维度解释为非定标带正负号整数。任一层级处的迭代计数(ICNT0、ICNT1、ICNT2、ICNT3、ICNT4或ICNT5)指示空流。每一迭代计数必须至少为1以对有效流进行定义。以上模板完全地规定元素的类型、流的长度及维度。流指令单独规定起始地址。此将通常通过对标量寄存器堆211中的存储此起始地址的标量寄存器进行规定来实现。此允许程序使用存储起始地址的同一模板但不同寄存器来打开多个流。
图30图解说明旗标字段2921的子字段定义。如图30中所展示,旗标字段2921为8个字节或64个位。图30展示字段的位数目。表8展示这些字段的定义。
表8
元素类型(ELTYPE)字段3001对流中的元素的数据类型进行定义。如表9中所展示而定义ELTYPE字段3001的四个位的译码。
表9
实数/复数类型确定流式传输引擎是否将每一元素视为复数的实数或两个部分(实数/虚数或振幅/角度)。此字段还规定是否交换复数的两个部分。复数类型具有为其子元素大小的两倍的总元素大小。以其它方式,子元素大小等于总元素大小。
子元素大小确定用于类型提升目的的类型及向量通道宽度。举例来说,16位子元素在流请求类型提升时提升到32位子元素或64位子元素。当中央处理单元核心110以大端字节序模式操作时向量通道宽度很重要,因为其始终以小端字节序模式布置向量。
总元素大小确定流的最小粒度。在流寻址模型中,总元素大小针对最内回圈的每一迭代确定流提取的字节数目。流始终以增加或减小次序读取全部元素。因此,流的最内维度横跨ICNT0×总元素大小个字节。
TRANSPOSE字段3002确定流式传输引擎是否以经转置次序存取流。经转置次序交换两个内寻址层级。TRANSPOSE字段3002还指示其转置流的粒度。如表10中所展示而对TRANSPOSE字段3002的三个位的译码进行定义以用于正常2D操作。
转置 含义
000 转置经停用
001 在8位边界上转置
010 在16位边界上转置
011 在32位边界上转置
100 在64位边界上转置
101 在128位边界上转置
110 在256位边界上转置
111 保留的
表10
流式传输引擎2800可以不同于元素大小的粒度转置数据元素。此允许程序从每一行提取多个元素列。转置粒度必须不小于元素大小。TRANSPOSE字段3002以下文进一步描述的方式与DIMFMT字段3009交互作用。
PROMOTE字段3003控制流式传输引擎是否提升流中的子元素以及提升类型。当经启用时,流式传输引擎2800使类型提升2的幂的大小。如表11中所展示而对PROMOTE字段3003的三个位的译码进行定义。
表11
当PROMOTE为与1x提升对应的000时,每一子元素为不变的且占据宽度等于由ELTYPE规定的大小的向量通道。当PROMOTE为与2x提升及零扩展对应的001时,每一子元素被视为无正负号整数且零扩展到为由ELTYPE规定的宽度的两倍的向量通道。2x提升对于64个位的初始子元素大小无效。当PROMOTE为与4x提升及零扩展对应的010时,每一子元素被视为无正负号整数且零扩展到为由ELTYPE规定的宽度的四倍的向量通道。4x提升对于32或64个位的初始子元素大小无效。当PROMOTE为与8x提升及零扩展对应的011时,每一子元素被视为无正负号整数且零扩展到为由ELTYPE规定的宽度的八倍的向量通道。8x提升对于16、32或64个位的初始子元素大小无效。当PROMOTE为与2x提升及正负号扩展对应的101时,每一子元素被视为带正负号整数且正负号扩展到为由ELTYPE规定的宽度的两倍的向量通道。2x提升对于64个位的初始子元素大小无效。当PROMOTE为与4x提升及正负号扩展对应的110时,每一子元素被视为带正负号整数且正负号扩展到为由ELTYPE规定的宽度的四倍的向量通道。4x提升对于32或64个位的初始子元素大小无效。当PROMOTE为与8x提升及零扩展对应的111时,每一子元素被视为带正负号整数且正负号扩展到为由ELTYPE规定的宽度的八倍的向量通道。8x提升对于16、32或64个位的初始子元素大小无效。
图31图解说明提升块2022的示范性实施例。输入寄存器3100从复数交换块2021接收向量输入。输入寄存器3100包含布置于64个1字节块中的64个字节byte0到byte63。注意,字节byte0到byte63的长度各自等于ELEM_BYTES的最小值。多个多路复用器3101到3163将输入字节从源寄存器3100耦合到输出寄存器3170。每一多路复用器3101到3163将输入供应到输出寄存器3170的对应byte1到byte63。并非输入寄存器3100的所有输入字节byte0到byte63耦合到每一多路复用器3101到3163。许多多路复用器3101到3163还接收0输入及来自先前输入字节的最高有效位的一或多个正负号输入。注意,不存在供应输出寄存器3170的byte0的多路复用器。输出寄存器3170的byte0始终由输入寄存器3100的byte0供应。
多路复用器3101到3163由多路复用器控制编码器3180控制。多路复用器控制编码器3180接收ELEM_BYTES及PROMOTE输入信号且产生用于多路复用器3101到3163的对应控制信号。表12A到12D、13A到13D、14A到14D及15A到15D(在下文)直接转换成多路复用器3101到3163的多路复用器控制以针对一个字节的ELEM_BYTES的情形实现所要元素提升及抽取。表12A到12D、13A到13D、14A到14D及15A到15D的检查展示并非所有输入字节可供应每一输出字节。因此,表12A到12D、13A到13D、14A到14D及15A到15D展示图31中的输入寄存器3100与多路复用器3101到3163之间的所需要连接。此外,表12A到12D、13A到13D、14A到14D及15A到15D展示多路复用器控制编码3180中所需要的编码。
表12A到12D针对1的ELEM_BYTES值及0的提升因子展示输入字节与输出字节之间的连接。表12A到12D的主体针对对应输出字节列出对应输入字节。
CPU向量 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
表12A
CPU向量 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
表12B
CPU向量 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
1 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
表12C
CPU向量 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
1 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
表12D
在这些条件下,每一输出字节等于对应输入字节。
表13A到13D针对1的ELEM_BYTES值及2x的提升因子展示输入字节与输出字节之间的连接。2x的提升因子意味针对每一输入向量产生两个输出向量。
CPU向量 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 7 6 5 4 3 2 1 0
2 39 38 37 36 35 34 33 32
表13A
CPU向量 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1 15 14 13 12 11 10 9 8
2 47 46 45 44 43 42 41 40
表13B
CPU向量 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
1 23 22 20 21 19 18 17 16
2 55 54 53 52 51 50 49 48
表13C
CPU向量 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
1 31 30 29 28 27 26 25 24
2 63 62 61 60 59 58 57 56
表13D
在表13A到13D中,使每一元素提升2x的因子。如果输出向量列包含数目,那么所述输出通道包含所述数目的输入字节的数据。如果输出向量列为“→”,那么所述输出通道为下一较低输入字节的扩展。对于等于010的PROMOTE字段3003,所述扩展为零(无正负号整数零扩展)。对于等于110的PROMOTE字段3003,所述扩展与先前输入字节的最高有效位相同(带正负号整数正负号扩展)。
表14A到14D针对1的ELEM_BYTES值及4x的提升因子展示输入字节与输出字节之间的连接。4x的提升因子意味针对每一输入向量产生四个输出向量。
CPU向量 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 3 2 1 0
2 19 18 17 16
3 35 34 33 32
4 51 50 49 48
表14A
CPU向量 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1 7 6 5 4
2 23 22 21 20
3 39 38 37 36
4 55 54 53 52
表14B
CPU向量 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
1 11 10 9 8
2 27 26 25 24
3 43 42 41 40
4 59 58 57 56
表14C
CPU向量 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
1 15 14 13 12
2 31 30 29 28
3 47 46 45 44
4 63 62 61 60
表14D
在表14A到14D中,使每一元素提升4x的因子。与如由经标记为“→”的表单元所展示的三个扩展通道一起扩展每一输入元素。取决于PROMOTE字段3003的无正负号整数/带正负号整数数据类型,此输出通道为零或正负号扩展。
表15A到15D针对1的ELEM_BYTES值及8x的提升因子展示输入字节与输出字节之间的连接。8x的提升因子意味针对每一输入向量产生八个输出向量。
表15A
CPU向量 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1 3 2
2 11 10
3 19 18
4 27 26
5 35 34
6 43 42
7 51 50
8 59 58
表15B
CPU向量 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
1 5 4
2 13 12
3 21 20
4 29 28
5 37 36
6 45 44
7 53 52
8 61 60
表15C
CPU向量 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
1 7 6
2 15 14
3 23 22
4 31 30
5 39 38
6 47 46
7 55 54
8 63 62
表15D
在表15A到15D中,使每一元素提升8x的因子。如由经标记为“→”的表单元所展示而与七个扩展通道一起扩展每一输入元素。取决于PROMOTE字段3003的无正负号整数/带正负号整数数据类型,此输出通道为零或正负号扩展。
表12A到12D、13A到13D、14A到14D及15A到15D共同针对一个字节的ELEM_BYTES及所支持PROMOTE因子展示与多路复用器3101到3163的所有连接。表16A到16D共同针对表12A到12D、13A到13D、14A到14D及15A到15D的一个字节实例的ELEM_BYTES的第一向量展示与多路复用器3101到3163的所需连接。
提升因子 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1x 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
2x 7 6 5 4 3 2 1 0
4x 3 2 1 0
8x 1 0
表16A
提升因子 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1x 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
2x 15 14 13 12 11 10 9 8
4x 7 6 5 4
8x 3 2
表16B
提升因子 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
1x 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
2x 23 22 20 21 19 18 17 16
4x 11 10 9 8
8x 5 4
表16C
提升因子 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
1x 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
2x 31 30 29 28 27 26 25 24
4x 15 14 13 12
8x 7 6
表16D
表17A到17D共同针对两个字节的ELEM_BYTES的第一向量展示与多路复用器3101到3163的所需连接。注意,关于两个字节的ELEM_BYTES不允许8的PROMOTE因子(参见表10)。
提升因子 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1x 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
2x 7 6 5 4 3 2 1 0
4x 3 2 1 0
表17A
提升因子 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1x 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
2x 15 14 13 12 11 10 9 8
4x 7 6 5 4
表17B
提升因子 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
1x 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
2x 23 22 21 20 19 18 17 16
4x 11 10 9 8
表17C
提升因子 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
1x 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
2x 31 30 29 28 27 26 25 24
4x 15 14 13 12
表17D
表18A到18D共同针对四个字节的ELEM_BYTES的第一向量展示与多路复用器3101到3163的所需连接。注意,关于四个字节的ELEM_BYTES不允许4或8的PROMOTE因子(参见表10)。
提升因子 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1x 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
2x 7 6 5 4 3 2 1 0
表18A
提升因子 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1x 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
2x 15 14 13 12 11 10 9 8
表18B
提升因子 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
1x 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
2x 23 22 21 20 19 18 17 16
表18C
提升因子 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
1x 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
2x 31 30 29 28 27 26 25 24
表18D
对于8个字节的ELEM_BYTES,不准许提升(参见表10)。因此,对于8个字节的ELEM_BYTES,每一输出字节与对应输入字节相同。
表19A到19D进一步图解说明多路复用器3101到3163实施本发明的优选实施例所需要的连接,其中ELEM_BYTES可为1、2、4或8且PROMOTE可为1x、2x、4x或8x。表19A到19D中未展示,但图31中图解说明,每一多路复用器3102到3163还接收在无正负号整数的提升中使用的数据“0”的输入。
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
s7 7 7 s7 7 6 6 4 s3 3 3 2 s1 1 s0
s3 s3 s7 6 s5 5 5 2 s1 s3 s3 1 s0 s0
s1 s1 s6 3 s3 s5 s4 1 s0 s1 s2 s3 s1
s3 s3 s2 s3 3 s0 s1 s1
s1 s3 s2 s2 s0 s0
s1 s1
表19A
表19B
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
s23 23 23 s23 23 22 21 21 s19 19 19 s19 19 18 17 16
s11 s23 s23 22 s21 s21 s21 20 s9 s19 s19 18 s17 17 s16 8
s5 s11 s22 11 s20 20 11 10 s4 s9 s18 9 s9 s17 9 4
s5 s11 s11 s11 s11 s10 5 s4 s9 s9 s8 s9 28
s5 s5 s10 s10 s5 s4 s4 s4 s8 s4
s5 s5 s4
表19C
63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
s31 31 31 s31 31 30 29 28 s27 27 27 s27 27 26 25 24
s15 s31 s31 30 s29 29 s28 14 s13 s27 s27 26 s25 s25 s24 12
s15 s30 15 s15 s29 15 7 s6 s13 s26 13 s13 s13 13 6
s15 s15 s14 s15 s14 s6 s13 s13 s12 s12 s12
s7 s7 s7 s14 s7 s6 s6 s6 s6 s6
s7
表19D
在表19A到19D中,每一列针对列字节数目对应于输出多路复用器。每一列中的表项目注释所述输出字节多路复用器的输入字节连接。如果表项目为数目,那么所述输出多路复用器接收对应数目输入字节的数据。如果表项目以“s”开始,那么所述输出多路复用器接收对应数目输入字节的正负号数据。如图31中所图解说明,此正负号数据为对应输入字节的最高有效位的状态。输出多路复用器通过复制此正负号位而将此单个位扩展到多路复用器输出的所有8个位。
图31图解说明多路复用器3101、3102、3162及3163的这些连接。多路复用器3101接收来自以下各项的信号且从来自以下各项的信号进行选择:输入字节1;输入字节0的正负号(s0);及常数0。多路复用器3102接收来自以下各项的信号且从来自以下各项的信号进行选择:输入字节2;输入字节1;输入字节1的正负号(s1);输入字节0的正负号(s0);及常数0。多路复用器3162接收来自以下各项的信号且从来自以下各项的信号进行选择:输入字节62;输入字节31的正负号(s31);输入字节31;输入字节15的正负号(s15);及常数0。多路复用器3163接收来自以下各项的信号且从来自以下各项的信号进行选择:输入字节63;输入字节31的正负号(s31);输入字节15的正负号(s15);及常数0。在表19A到19D中列出其它多路复用器3103到3161的连接。
如上文所述,存在元素大小与提升因子(PROMOTE)的组合,所述组合产生比输出寄存器3170的大小(优选地512个位)多的位。在此事件中,一旦目的地寄存器3170为满的,此数据便从类型提升块2022供应到抽取块2023且供应到元素复制块2024以最终供应到对应流标头寄存器2818/2828。格式化器1903中的数据移动速率由中央处理单元核心110经由下文所描述的流读取与推进指令消耗数据的速率设定。使输入寄存器3101内的数据向下旋转以将下一数据元素放置在byte0中。过程关于相同多路复用器设定而重复以填充下一向量。取决于提升因子,一个输入向量可规定一个、两个、四个或八个输出向量。
图32图解说明控制多路复用器3101到3163的替代方式的部分示意图。图32图解说明示范性输入字节N输入。输入字节N的正负号位供应对应扩展多路复用器3216的一个输入。常数0供应多路复用器3216的第二输入。多路复用器3216及与其它输入字节对应的其它类似多路复用器受带正负号/无正负号信号控制。在优选实施例中,此带正负号/无正负号信号由多路复用器控制编码器3180依据PROMOTE字段3003产生。如果PROMOTE字段3003为001、010或011,那么多路复用器控制编码器3180产生带正负号/无正负号信号,从而致使多路复用器3216(及针对其它输入字节的对应多路复用器)选择常数0输入。如果PROMOTE字段3003为101、110或111,那么多路复用器控制编码器3180产生带正负号/无正负号信号,从而致使多路复用器3216(及针对其它输入字节的对应多路复用器)选择正负号位输入。以与先前针对图31中所图解说明的正负号位所描述相同的方式将选定扩展供应到多路复用器3101到3163(由所图解说明示范性多路复用器3118表示)。
如图32中所图解说明,多路复用器3101到3163不再需要直接接收常数0输入。替代地,正负号位或常数0经由扩展选择以个别输入字节来供应。此由于PROMOTE字段3003的译码而为有利的。可在单独部分中对表10中所展示的PROMOTE字段3003编码进行解码。对PROMOTE字段3003的最高有效位进行解码以用于多路复用器3215的正负号位/常数0选择。PROMOTE字段3003的此位直接转换成带正负号/无正负号信号。针对无正负号整数及针对带正负号整数以完全相同方式对PROMOTE字段3003的两个最低有效位进行解码。在表12A到12D、13A到13D、14A到14D、15A到15D、16A到16D、17A到17D、18A到18D及19A到19D中展示此解码,其中“→”项目的含义从与多路复用器3216对应的多路复用器改变为对应扩展位的选择。000的PROMOTE字段3003无提升且决不使用多路复用器3216的选择。未定义100的PROMOTE字段3003且决不使用多路复用器3216的选择。
VECLEN字段3004定义字节中的流的流向量长度。流式传输引擎2800将流分解成为VECLEN字节长的元素群组。如表20中所展示而对VECLEN字段3004的三个位的译码进行定义。
表20
VECLEN必须大于或等于字节中的元素大小与复制因子的乘积。如表21中所展示,64个字节的最大VECLEN等于向量数据路径B侧116的优选向量大小。当VECLEN比中央处理单元核心110的本机向量宽度短时,流式传输引擎2800填补提供到中央处理单元核心110的向量中的额外通道。GRDUP字段3006确定填补类型。VECLEN字段3004以下文详述的方式与ELDUP字段3005及GRDUP字段3006相互作用。
ELDUP字段3005规定复制每一元素的次数。元素大小与元素复制量相乘必须不超过64个字节。如表21中所展示而对ELDUP字段3005的三个位的译码进行定义。
表21
ELDUP字段3005以下文详述的方式与VECLEN字段3004及GRDUP字段3006相互作用。所准许元素大小、元素复制因子及目的地向量长度之间的关系的本质需要使第一目的地寄存器溢出的所复制元素将在执行复制时填充整数数目个目的地寄存器。这些额外目的地寄存器的数据最终供应对应流标头寄存器2818/2828。在完成第一数据元素的复制后,即刻使下一数据元素向下旋转到最低有效位从而丢弃第一数据元素。过程接着针对此新数据元素而重复。
GRDUP位3006确定是否启用群组复制。如果GRDUP位3006为0,那么停用群组复制。如果GRDUP位3006为1,那么启用群组复制。当由GRDUP位3006启用时,流式传输引擎2800复制元素群组以填充向量宽度。VECLEN字段3004定义将复制的群组的长度。当VECLEN字段3004小于中央处理单元核心110的向量长度且GRDUP位3006达成群组复制时,流式传输引擎2800用流向量的额外副本填充额外通道(参见图21及22)。由于优选流向量长度及中央处理单元核心110的向量长度始终为2的整数幂,因此群组复制始终产生整数数目个复制副本。注意,GRDUP及VECLEN不规定复制数目。所执行的复制数目基于VECLEN与本机向量长度(在优选实施例中,其为64个字节/512位)的比率。
GRDUP字段3006规定流引擎2800如何将遵循VECLEN长度的位的流向量填补到中央处理单元核心110的向量长度。当GRDUP位3006为0时,流式传输引擎2800用零填充额外通道且将这些额外向量通道标记为无效的。当GRDUP位3006为1时,流式传输引擎2800用每一流向量中的元素群组的副本填充额外通道。当VECLEN设定到中央处理单元核心110的本机向量宽度时,将GRDUP位3006设定到1不具有效应。VECLEN必须至少和ELEM_BYTES与元素复制因子ELDUP的乘积一样大。也就是说,无法使用VECLEN分开元素或元素的复制因子数目。
群组复制仅按目的地向量大小来操作。当元素大小ELEM_BYTES与元素复制因子ELDUP的乘积等于或超过目的地向量宽度时,群组复制不改变所供应的数据。在这些条件下,GRDUP位3006及VECLEN字段3004的状态对所供应数据不具有效应。
元素复制(ELDUP)及群组复制(GRUDP)为独立的。注意,这些特征包含独立规范及参数设定。因此,可共同或单独使用元素复制及群组复制。由于规定这些的方式,因此元素复制准许溢出到下一向量而群组复制不准许。
DECIM字段3007控制对应流的数据元素抽取。流式传输引擎2800在存储于流标头寄存器2818/2828中以呈现给请求功能单元后即刻从流删除数据元素。抽取始终移除全部数据元素,而非子元素。如表22中所列出而定义DECIM字段3007。
DECIM 抽取因子
00 无抽取
01 2倍
10 4倍
11 保留的
表22
如果DECIM字段3007等于00,那么不发生抽取。数据元素在不具有改变的情况下传递到对应流标头寄存器2818/2828。如果DECIM字段3007等于01,那么发生2:1抽取。流式传输引擎2800在存储于流标头寄存器2818/2828中后即刻从数据流移除奇数数目元素。格式化网络的限制需要在数据提升至少2x(PROMOTE无法为000)的情况下采用2:1抽取,ICNT0必须为2的倍数且总向量长度(VECLEN)必须足够大以保存单个所提升经复制元素。对于经转置流(TRANSPOSE≠0),转置区组必须为在提升之前字节中的元素大小的至少两倍。如果DECIM字段3007等于10,那么发生4:1抽取。流式传输引擎2800保持每隔三个数据元素,从而在存储于流标头寄存器2818/2828中后即刻从数据流移除三个元素。格式化网络的限制需要在数据提升至少4x(PROMOTE无法为000、001或101)的情况下采用4:1抽取,ICNT0必须为4的倍数且总向量长度(VECLEN)必须足够大以保存单个所提升经复制元素。对于经转置流(TRANSPOSE≠0),抽取始终移除列,且决不移除行。因此,转置区组必须为:在针对2:1抽取的提升之前字节中的元素大小的至少两倍(GRANULE≥2×ELEM_BYTES);及在针对4:1抽取的提升之前字节中的元素大小的至少四倍(GRANULE≥4×ELEM_BYTES)。
THROTTLE字段3008控制流式传输引擎如何以积极方式对中央处理单元核心110进行预取。如表23中所展示而对此字段的两个位的译码进行定义。
THROTTLE 说明
00 最少节流,最大预取
01 较少节流,较多预取
10 较多节流,较少预取
11 最大节流,最少预取
表23
THROTTLE不改变流的含义,且仅用作暗示。流式传输引擎可忽视此字段。程序不应依赖于程序正确性的特定节流行为,因为架构不规定精确节流行为。THROTTLE允许程序设计人员将关于程序的自身行为的暗示提供给硬件。默认地,流式传输引擎尝试尽可能地比中央处理单元核心110提前,因为其可隐藏尽可能多的延时(等效THOTTLE=11),同时将全部流吞吐量提供到中央处理单元核心110。当数个关键应用需要此吞吐量水平时,其对于其它应用可导致不良系统层级行为。举例来说,流式传输引擎跨越上下文切换丢弃所有所提取数据。因此,积极预取可导致具有大数目个上下文切换的程序中的浪费带宽。积极预取仅在中央处理单元核心110非常迅速地消耗数据的情况下使所述系统有意义。
DIMFMT字段3009定义流模板寄存器2900的回圈计数字段ICNT0 2901、ICNT12902、ICNT2 2903、ICNT3 2804、ICNT4 2905及ICNT5 2906、回圈维度字段DIM1 2911、DIM22912、DIM3 2913、DIM4 2914及DIM5 2915及寻址模式字段AM0 3013、AM1 3014、AM2 3015、AM3 3016、AM4 3017及AM5 3018(FLAGS字段2921的一部分)中的哪些对于所述特定流为作用的。表24列出DIMFMT字段3009的各种值的作用回圈。
表24
每一作用回圈计数必须为至少1。外作用回圈计数必须大于1。(1的外作用回圈计数不同于具有一个较少回圈的对应流。)
DIR位3010确定内回圈(Loop0)的提取方向。如果DIR位3010为0,那么Loop0提取在朝向增加地址的正向方向上。如果DIR位3010为1,那么Loop0提取在朝向减小地址的反向方向上。其它回圈的提取方向由为带正负号整数的对应回圈维度DIM1、DIM2、DIM3、DIM4及DIM5的正负号确定。
CBK0字段3011及CBK1字段3012基于循环寻址的选择而控制循环块大小。下文将更充分地描述确定循环块大小的方式。
AM0字段3013、AM1字段3014、AM2字段3015、AM3字段3016、AM4字段3017及AM5字段3018控制对应回圈的寻址模式。此准许针对每一回圈独立地规定寻址模式。AM0字段3013、AM1字段3014、AM2字段3015、AM3字段3016、AM4字段3017及AM5字段3018中的每一者为三个位且如表25中所列出而经解码。
AMx字段 含义
00 线性寻址
01 由CBK0设定的循环寻址块大小
10 由CBK0+CBK1+1设定的循环寻址块大小
11 保留的
表25
在线性寻址中,地址根据地址运算为正向还是反向来推进。在循环寻址中,地址保持在经定义地址块内。在到达循环地址块的末尾后,地址即刻环绕到块的另一极限。循环寻址块通常限于2N个地址,其中N为整数。循环地址算术可通过切割位之间的进位链且不允许选定数目个最高有效位改变而操作。因此,超出循环块的末尾的算术仅改变最低有效位。
如在表26中所列出而设定块大小。
表26
在优选实施例中,循环块大小由CBK0(第一循环地址模式01)所编码的数目或由CBK0+CBK1+1(第二循环地址模式10)所编码的数目设定。对于第一循环地址模式,循环地址块大小可为从512个字节到16M个字节。对于第二循环地址模式,循环地址块大小可为从1K个字节到64G个字节。因此,经编码块大小为2(B+9)个字节,其中B为经编码块数目,所述经编码块数目对于第一块大小为CBK0(01的AMx)及对于第二块大小为CBK0+CBK1+1(10的AMx)。
中央处理单元110通过小数目个指令及专业化寄存器将流式传输引擎暴露于程序。STROPEN指令打开流。STROPEN命令规定指示打开流0或流1的流数目。STROPEN命令规定存储流的起始地址的数据寄存器。STROPEN规定如上文所描述的存储流模板的流模板寄存器。在表27中列出STROPEN指令的概要。
概要 说明
流起始地址寄存器 存储流起始地址的标量寄存器
流数目 流0或流1
流模板寄存器 存储流模板数据的向量寄存器
表27
流起始地址寄存器优选地为一般标量寄存器堆211中的寄存器。STROPEN指令可经由scr1字段1305规定此流起始地址寄存器。STROPEN指令通过其操作码规定流0或流1。流模板寄存器优选地为一般向量寄存器堆221中的向量寄存器。STROPEN指令可经由scr2/cst字段1304规定此流模板寄存器。如果规定流为作用的,那么STROPEN指令关闭先前流且用所述规定流替换所述先前流。
处理器100的指令集合支持小快捷流起始指令集合。每一快捷流起始指令呈如下形式:
STROPENxxx stream_number,address_reg
每一快捷流起始指令规定两个流中的一者:流0;或流1。每一快捷流起始指令还规定存储流起始地址的寄存器。此通常通过由操作数字段(例如src1字段1305或src2/cst字段1304)中的寄存器编号对标量寄存器堆211中的标量寄存器进行规定来实现。快捷流起始指令不规定存储流模板的寄存器。替代地,任一特定快捷流起始指令的操作码规定隐式模板。隐式模板规定内回圈的预定迭代数目。在优选实施例中,每一快捷流起始指令隐式模板规定ICNT0为hex FFFFFFFF。此规定可由模板译码表达的最大内回圈迭代数目。在优选实施例中,隐式模板将所有其它维度设定到1。此对应于一维流。
表28列出示范性快捷流起始指令集合的属性。
表28
表29展示表28的示范性快捷流起始指令中的每一者的隐式模板。
快捷指令 位(511:448) 位(447:32) 位(31:0)
STROPENB 00000000 00006000 全部为零 FFFFFFFF
STROPENBH 00000000 00005500 全部为零 FFFFFFFF
STROPENBUH 00000000 00005100 全部为零 FFFFFFFF
STROPENH 00000000 00005001 全部为零 FFFFFFFF
STROPENHW 00000000 00004501 全部为零 FFFFFFFF
STROPENHUW 00000000 00004101 全部为零 FFFFFFFF
STROPENW 00000000 00004002 全部为零 FFFFFFFF
STROPENWD 00000000 00003502 全部为零 FFFFFFFF
STROPENWUD 00000000 00003102 全部为零 FFFFFFFF
STROPEN 00000000 00003003 全部为零 FFFFFFFF
表29
注意,尽管列2及4列出模板位,但表29的主体为了简洁而以十六进制形式表达这些量。
所属领域的技术人员将认识到,快捷流起始指令的此实例性集合仅仅为一个可行指令集合。特定来说,通过对应隐式模板规定多维流对于隐式模板为可行的。
图33示意性地图解说明根据本发明的优选实施例的流起始指令的示范性解码。解码器113响应于指令的操作码字段1306。在此实例中,将指令辨识为如上文所描述的流起始指令。解码器113将指示由指令的译码规定的流(流0或流1)的Start Streamx命令传输到流式传输引擎2800。解码器113将src1字段1305辨识为全局标量寄存器堆211中的寄存器编号。寄存器编号规定全局标量寄存器堆211中的寄存器上的一者。将所指示寄存器中的数据作为流起始地址供应到流式传输引擎2800。解码器113将src2/cst字段1304辨识为全局向量寄存器堆231中的寄存器编号。将所指示寄存器中的数据作为流模板供应到流式传输引擎2800。
图34示意性地图解说明根据本发明的优选实施例的快捷流起始指令的示范性解码。解码器113响应于指令的操作码字段1306。在此实例中,指令经辨识为如上文所描述的快捷流起始指令。解码器113将指示由指令的译码规定的流(流0或流1)的Start Streamx命令发射到流式传输引擎2800。解码器113将src1字段1305辨识为全局标量寄存器堆211中的寄存器编号。寄存器编号规定全局标量寄存器堆211中的寄存器上的一者。将所指示寄存器中的数据作为流起始地址供应到流式传输引擎2800。
解码器113辨识对快捷流起始指令集合中的哪一指令进行解码。解码器113产生与所检测到的快捷指令类型对应的快捷起始指令类型信号。在表28中列出这些类型。
解码器113将快捷起始指令类型信号传输到隐式模板单元3410。实施隐式模板单元3410作为只读存储器(ROM)为技术上可行的。此ROM内的每一项目为与快捷起始指令类型对应的隐式流模板。将由快捷起始指令类型从此ROM选择的数据作为流模板传输到流式传输引擎2800。
本发明优选地采用另一技术来减少所需ROM空间。如表29中所图解说明,隐式模板的位中与优选快捷流起始指令集合对应的许多位对于整个集合为相同的。隐式流模板可划分成四个部分(参考图29及表29):位464到511,其全部为0;位448到463,其因快捷起始指令类型而不同;位32到447,其全部为0;及位0到31,其全部为1。隐式模板单元3410产生与所检测到的快捷流起始类型对应的隐式模板。区段3411针对模板位464到511所产生的全部为0。区段3412针对模板位449到463产生16个位(四个十六进制数字)。区段3412选择与从解码器113接收的快捷流起始指令类型信号对应的这些位。此在图34中示意性地图解说明且在表29中充分地详述。区段3413针对模板位32到447所产生的全部为0。区段3414针对模板位0到31所产生的全部为1。如图34中示意性地展示,隐式模板单元3410并置这些区段以产生供应到流式传输引擎2800的隐式流模板。
STRSAVE指令捕获规定流的充足状态信息以在未来重启所述流。STRRSTR指令重新存储先前保存的流。STRSAVE指令不保存流的数据中的任一者。STRSAVE指令仅保存元数据。流响应于STRRSTR指令而重新提取流数据。
如上文所述,存在当流标头寄存器2818或2828内的一些数据无效时的情况。如上文所描述,当流元素数目小于流标头寄存器2818/2828大小时此可发生在内回圈结束时。当剩余流元素数目小于由VECLEN定义的通道时此也可发生在内回圈结束时。对于不在内回圈结束时的时间,如果VECLEN小于流标头寄存器2818/2828的宽度且停用GRDUP,那么超过VECLEN的流标头寄存器2818/2828中的通道为无效的。
图35图解说明地址产生器2811的局部示意图。地址产生器2811形成用于提取对应流式传输引擎的所定义流中的下一元素的地址。起始地址寄存器3501存储数据流的起始地址。如先前所描述,起始地址寄存器3501优选地为全局标量寄存器堆211中由打开对应流的STROPEN指令指定的标量寄存器。如此项技术中已知,此起始地址可从规定标量寄存器拷贝且局部地存储于对应地址产生器2811/2821处。流的第一回圈采用Loop0计数寄存器3511、加法器3512、乘法器3513及比较器3514。Loop0计数寄存器3511存储第一回圈(Loop0)的迭代计数的工作副本。对于如由下一地址信号触发的Loop0加法器3512的每一迭代,将1与往回存储于Loop0计数寄存器3511中的回圈计数相加。乘法器3513使当前回圈计数与量ELEM_BYTES相乘。ELEM_BYTES为字节中的Loop0中的每一数据元素的大小。Loop0在具有ELEM_BYTES的迭代步长的情况下遍历在存储器中物理上连续的数据元素。
比较器3514将存储于Loop0计数寄存器3511中的计数(在通过加法器3513递增之后)与来自对应流模板寄存器2900的ICNT0 2901的值进行比较。当加法器3512的输出等于流模板寄存器2900的ICNT0 2910的值时,完成Loop0的迭代。比较器3514产生作用Loop0End信号。Loop0计数寄存器3511复位到0且触发下一较高回圈的迭代(在此情形中为Loop1)。
用于较高回圈(Loop1、Loop2、Loop3、Loop4及Loop5)的电路类似于图35中所图解说明的电路。每一回圈包含对应工作回圈计数寄存器、加法器、乘法器、比较器及“与”门。每一回圈的加法器由先前回圈的回圈结束信号触发。到每一乘法器的第二输入为来自对应流模板的对应维度DIM1、DIM2、DIM3、DIM4及DIM5。每一回圈的比较器将工作回圈寄存器计数与对应流模板寄存器2900的对应迭代值ICNT1、ICTN2、ICTN3、ICNT4及ICTN5进行比较。回圈结束信号产生下一较高回圈的迭代。来自loop5的回圈结束信号使流结束。
图36是图解说明上文所描述的流输入操作数译码的部分示意图3600。图36图解说明对功能单元3620的对应src1输入的一个指令的src1字段1305进行解码。可针对控制功能单元3620的指令的src2/cst字段1304复制这些相同电路。另外,针对能够采用流数据作为可同时被调度的执行数据包内的操作数的每一功能单元复制这些电路。
指令解码器113接收包括指令的src1字段1305的位13到17。操作码字段(所有指令的位4到12及另外无条件指令的位28到31)清楚地规定对应功能单元3620及将执行的功能。在此实施例中,功能单元3620可为L2单元241、S2单元242、M2单元243、N2单元244或C单元245。图36中所图解说明的指令解码器113的相关部分对src1位字段1305进行解码。子解码器3611确定src1位字段1305是否在从00000到01111的范围中。如果情形如此,那么子解码器3611将对应寄存器编号供应到全局向量寄存器堆231。在此实例中,此寄存器编号为src1位字段1305的四个最低有效位。全局向量寄存器堆231再调用存储于寄存器中的与此寄存器编号对应的数据且将此数据供应到功能单元3620的src1输入。此解码一般为此项技术中已知的。
子解码器3612确定src1位字段1305是否在从10000到10111的范围内。如果情形如此,那么子解码器3612将对应寄存器编号供应到对应局部向量寄存器堆。如果指令针对于L2单元241或S2单元242,那么对应局部向量寄存器堆为局部向量寄存器堆232。如果指令针对于M2单元243、N2单元244或C单元245,那么对应局部向量寄存器堆为局部向量寄存器堆233。在此实例中,此寄存器编号为src1位字段1305的三个最低有效位。对应局部向量寄存器堆232/233再调用存储于寄存器中的与此寄存器编号对应的数据且将此数据供应到功能单元3620的src1输入。此解码一般为此项技术中已知的。
子解码器3613确定src1位字段1305是否为11100。如果情形如此,那么子解码器3613将流0读取信号供应到流式传输引擎2800。流式传输引擎2800接着将存储于流标头寄存器2818中的流0数据供应到功能单元3620的src1输入。
子解码器3614确定src1位字段1305是否为11101。如果情形如此,那么子解码器3614将流0读取信号供应到流式传输引擎2800。流式传输引擎2800接着将存储于流标头寄存器2818中的流0数据供应到功能单元3620的src1输入。子解码器3614还将推进信号供应到流0。如先前所描述,流式传输引擎2800推进以将流0的数据元素的下一顺序向量存储于流标头寄存器2818中。
子解码器3615确定src1位字段1305是否为11110。如果情形如此,那么子解码器3615将流1读取信号供应到流式传输引擎2800。流式传输引擎2800接着将存储于流标头寄存器2828中的流1数据供应到功能单元3620的src1输入。
子解码器3616确定src1位字段1305是否为11111。如果情形如此,那么子解码器3616将流1读取信号供应到流式传输引擎2800。流式传输引擎2800接着将存储于流标头寄存器2828中的流1数据供应到功能单元3620的src1输入。子解码器3614还将推进信号供应到流1。如先前所描述,流式传输引擎2800推进以将流1的数据元素的下一顺序向量存储于流标头寄存器2828中。
专用于操作数规范的指令位的精确数目以及数据寄存器及流的数目为设计选择。所属领域的技术人员将认识到,除申请案中所描述以外的数目选择为可行的。特定来说,单个全局向量寄存器堆的规范及局部向量寄存器堆的省略为可行的。本发明采用输入操作数选择字段的位译码来指定流读取且采用另一位译码来指定流读取且推进流。

Claims (20)

1.一种数字数据处理器,其包括:
指令存储器,其存储各自规定数据处理操作及至少一个数据操作数字段的指令;
指令解码器,其连接到所述指令存储器以用于从所述指令存储器顺序地再调用指令且确定所述规定数据处理操作及所述规定的至少一个操作数;
至少一个功能单元,其连接到所述数据寄存器堆及所述指令解码器以用于对与由所述指令解码器解码的指令对应的至少一个操作数执行数据处理操作且存储结果;
流式传输引擎,其连接到所述指令解码器,可响应于流起始指令而操作以从存储器再调用多个数据元素的指令规定序列的流,所述流式传输引擎包含
地址产生器,其用于产生与多个数据元素的指令规定序列的所述流对应的流存储器地址,
流标头寄存器,其存储接下来将由所述至少一个功能单元使用的所述流的数据元素;
其中所述流起始指令包含
至少一个流起始普通指令,其规定存储流起始地址的所述数据寄存器堆的第一寄存器及存储包含流参数的流定义模板的所述数据寄存器堆的第二寄存器,及
至少一个流起始快捷指令,其规定存储流起始地址及隐式流定义模板的所述数据寄存器堆的第三寄存器;且
其中所述至少一个功能单元响应于流操作数指令而从所述流标头寄存器接收至少一个操作数。
2.根据权利要求1所述的数字数据处理器,其中:
所述至少一个流操作数指令包含流操作数只读指令及流操作数读取与递增指令;
所述指令解码器响应于流操作数只读指令及流操作数读取与递增指令而将数据作为操作数从所述流标头寄存器供应到所述至少一个功能单元;且
所述指令解码器响应于流操作数读取与递增指令而控制所述流引擎将下一所提取数据元素存储于所述流标头寄存器中。
3.根据权利要求2所述的数字数据处理器,其中:
所述指令解码器可操作以
对具有具第一位译码子集的数据操作数字段的指令进行解码以将存储于对应数据寄存器中的数据供应到对应功能单元,
对具有具预定读取位译码的数据操作数字段的指令进行解码以将存储于所述流标头寄存器中的所述数据供应到所述对应功能单元,及
对具有具预定读取/推进位译码的数据操作数字段的指令进行解码以将存储于所述流标头寄存器中的所述数据供应到所述对应功能单元且通过将所述流的下一顺序数据元素存储于所述流标头寄存器中而推进所述流式传输引擎。
4.根据权利要求1所述的数字数据处理器,其中:
所述流定义模板具有规定对应嵌套回圈的若干个迭代的多个回圈计数数据字段;
所述隐式流模板规定内回圈的预定数目个迭代及每一输出回圈的一个迭代。
5.根据权利要求4所述的数字数据处理器,其中:
由所述隐式流模板规定的内回圈的所述预定数目个迭代由可由专用于规定所述内回圈的若干个迭代的字段大小表达的最大数目个迭代组成。
6.根据权利要求4所述的数字数据处理器,其中:
所述流定义模板寄存器具有规定除所述内回圈以外的每一回圈的回圈维度的多个回圈维度数据字段。
7.根据权利要求6所述的数字数据处理器,其中:
所述地址产生器将每一回圈维度数据字段视为带正负号整数。
8.根据权利要求1所述的数字数据处理器,其中:
所述流定义模板具有规定所述数据元素的数据大小的数据大小字段;
所述隐式流模板规定预定数据大小。
9.根据权利要求8所述的数字数据处理器,其中:
由所述隐式流模板规定的所述预定数据大小由1个字节组成。
10.根据权利要求8所述的数字数据处理器,其中:
由所述隐式流模板规定的所述预定数据大小由2个字节组成。
11.根据权利要求8所述的数字数据处理器,其中:
由所述隐式流模板规定的所述预定数据大小由4个字节组成。
12.根据权利要求8所述的数字数据处理器,其中:
由所述隐式流模板规定的所述预定数据大小由8个字节组成。
13.根据权利要求8所述的数字数据处理器,其中:
所述至少一个流起始快捷指令包含各自具有规定多个数据大小中的一者的对应隐式流模板的多个流起始快捷指令。
14.根据权利要求1所述的数字数据处理器,其中:
所述流式传输引擎进一步包含
元素提升单元,其接收从存储器再调用的所述流的数据元素,所述元素提升单元可操作以使数据元素提升到指令规定的较大数据元素大小;
其中所述流模板包含规定提升量的提升因子字段。
15.根据权利要求14所述的数字数据处理器,其中:
所述元素提升单元在零扩展及正负号扩展中的流模板规定的一者中产生经提升数据元素的额外位。
16.根据权利要求14所述的数字数据处理器,其中:
所述元素大小字段定义多个数据元素大小中的一者,每一数据元素大小与下一较小数据元素大小相差2的因子;
所述元素提升因子字段规定从由所述流定义模板的所述元素大小字段规定的所述元素大小到所述多个数据元素大小中的较大者的元素提升因子。
17.根据权利要求14所述的数字数据处理器,其中:
所述至少一个流起始快捷指令包含各自具有规定多个提升因子中的一者的对应隐式流模板的多个流起始快捷指令。
18.根据权利要求17所述的数字数据处理器,其中:
所述流模板的所述元素大小字段规定以下数据元素大小中的一者:8个位、16个位、32个位及64个位;
所述流模板的所述提升因子字段规定无提升、2x提升、4x提升及8x提升中的一者的元素提升因子。
所述元素提升单元在零扩展及正负号扩展中的流模板规定的一者中产生经提升数据元素的额外位。
19.根据权利要求17所述的数字数据处理器,其中:
所述至少一个流起始快捷指令包含
第一流起始快捷指令,其具有规定一个字节的数据大小及无提升的对应隐式流模板,
第二流起始快捷指令,其具有规定一个字节的数据大小及借助正负号扩展的2x提升的对应隐式流模板,
第三流起始快捷指令,其具有规定一个字节的数据大小及借助零扩展的2x提升的对应隐式流模板,
第四流起始快捷指令,其具有规定两个字节的数据大小及无提升的对应隐式流模板,
第五流起始快捷指令,其具有规定两个字节的数据大小及借助正负号扩展的2x提升的对应隐式流模板,
第六流起始快捷指令,其具有规定两个字节的数据大小及借助零扩展的2x提升的对应隐式流模板,
第七流起始快捷指令,其具有规定四个字节的数据大小及无提升的对应隐式流模板,
第八流起始快捷指令,其具有规定四个字节的数据大小及借助正负号扩展的2x提升的对应隐式流模板,
第九流起始快捷指令,其具有规定四个字节的数据大小及借助零扩展的2x提升的对应隐式流模板,及
第十流起始快捷指令,其具有规定八个字节的数据大小及无提升的对应隐式流模板。
20.根据权利要求1所述的数字数据处理器,其中:
所述至少一个流起始快捷指令由各自具有对应隐式流模板的预定流起始快捷指令集合组成,所述预定流起始快捷指令集合经选择使得所述对应隐式模板的第一位集合在所述预定流起始快捷指令集合当中完全相同且第二位集合在所述预定流起始快捷指令集合的所述对应隐式模板的位当中不同;
其中所述数字数据处理器进一步包括连接到所述指令解码器的接收指示当前流快捷起始指令的信号的隐式模板单元,所述隐式模板单元可操作以将具有以下各项的隐式模板供应到所述流式传输引擎
在所述预定流起始快捷指令集合当中完全相同的与所述第一位集合对应的位,及
在由指示所述当前流快捷起始指令的所述信号选择的所述预定流起始快捷指令集合当中不同的与所述第二位集合对应的位。
CN201810722330.XA 2017-06-29 2018-06-29 具有快捷起始指令的流式传输引擎 Active CN109213525B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/636,686 US11182200B2 (en) 2017-06-29 2017-06-29 Streaming engine with short cut start instructions
US15/636,686 2017-06-29

Publications (2)

Publication Number Publication Date
CN109213525A true CN109213525A (zh) 2019-01-15
CN109213525B CN109213525B (zh) 2023-12-29

Family

ID=64738705

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810722330.XA Active CN109213525B (zh) 2017-06-29 2018-06-29 具有快捷起始指令的流式传输引擎

Country Status (2)

Country Link
US (1) US11182200B2 (zh)
CN (1) CN109213525B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116881984A (zh) * 2023-09-08 2023-10-13 云筑信息科技(成都)有限公司 一种数据监测方法

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US10761850B2 (en) * 2017-12-28 2020-09-01 Texas Instruments Incorporated Look up table with data element promotion
GB2590521B (en) 2020-06-18 2022-02-23 Imagination Tech Ltd Multiplexing between different processing channels

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
US20150019840A1 (en) * 2013-07-15 2015-01-15 Texas Instruments Incorporated Highly Integrated Scalable, Flexible DSP Megamodule Architecture
GB201513497D0 (en) * 2015-07-31 2015-09-16 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
CN106610817A (zh) * 2015-10-22 2017-05-03 德克萨斯仪器股份有限公司 用于采取vliw处理器中的相同执行数据包中的常数扩展槽指定或扩展常数位数的方法
US20170139710A1 (en) * 2013-07-15 2017-05-18 Texas Instruments Incorporated Streaming engine with cache-like stream data storage and lifetime tracking

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7689774B2 (en) * 2007-04-06 2010-03-30 International Business Machines Corporation System and method for improving the page crossing performance of a data prefetcher
US8688947B1 (en) * 2007-11-21 2014-04-01 Marvell International Ltd. Aligned data access
US8949103B2 (en) * 2009-05-01 2015-02-03 Microsoft Corporation Program code simulator
US9372695B2 (en) * 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9875214B2 (en) * 2015-07-31 2018-01-23 Arm Limited Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
US20150019840A1 (en) * 2013-07-15 2015-01-15 Texas Instruments Incorporated Highly Integrated Scalable, Flexible DSP Megamodule Architecture
US20170139710A1 (en) * 2013-07-15 2017-05-18 Texas Instruments Incorporated Streaming engine with cache-like stream data storage and lifetime tracking
GB201513497D0 (en) * 2015-07-31 2015-09-16 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
CN106610817A (zh) * 2015-10-22 2017-05-03 德克萨斯仪器股份有限公司 用于采取vliw处理器中的相同执行数据包中的常数扩展槽指定或扩展常数位数的方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116881984A (zh) * 2023-09-08 2023-10-13 云筑信息科技(成都)有限公司 一种数据监测方法
CN116881984B (zh) * 2023-09-08 2024-02-23 云筑信息科技(成都)有限公司 一种数据监测方法

Also Published As

Publication number Publication date
US11182200B2 (en) 2021-11-23
US20190004853A1 (en) 2019-01-03
US20220043670A1 (en) 2022-02-10
CN109213525B (zh) 2023-12-29

Similar Documents

Publication Publication Date Title
CN109643233B (zh) 具有带读取和读取/前进操作数编码的流引擎的数据处理设备
CN104781803B (zh) 用于架构不同核的线程迁移支持
CN108268278A (zh) 具有可配置空间加速器的处理器、方法和系统
US11099933B2 (en) Streaming engine with error detection, correction and restart
CN109597646A (zh) 具有可配置空间加速器的处理器、方法和系统
CN109144568A (zh) 将有效位通道作为矢量断言暴露于cpu
CN114600078A (zh) 用于矢量排序的方法和装置
CN110337635A (zh) 用于点积操作的系统、方法和装置
CN109952559A (zh) 具有单独可选元素及成组复制的流式传输引擎
CN109213523A (zh) 具有存储器系统性能、功率减小和原子支持特征的可配置空间加速器的处理器、方法和系统
CN109791488A (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN104838357B (zh) 向量化方法、系统及处理器
CN109213525A (zh) 具有快捷起始指令的流式传输引擎
CN109215728A (zh) 用于分布式存储器危险检测和错误恢复的存储器电路和方法
CN108268424A (zh) 用于处理具有偏斜非零分布的稀疏矩阵数据的异构硬件加速器架构
CN108205448B (zh) 具有在每个维度上可选择的多维循环寻址的流引擎
CN108268283A (zh) 用于利用约简操作来支持数据并行循环的计算引擎架构
CN104025067B (zh) 具有由向量冲突指令和置换指令共享的全连接互连的处理器
CN109313556A (zh) 可中断和可重启矩阵乘法指令、处理器、方法和系统
CN107250993A (zh) 向量缓存行写回处理器、方法、系统和指令
CN107077334A (zh) 从多维阵列预取多维元素块的硬件装置和方法
CN107589957A (zh) 具有双矢量和成双的单矢量操作模式的流参考寄存器
CN109992304A (zh) 用于加载片寄存器对的系统和方法
CN109997109A (zh) 具有提取提前滞后的流引擎
CN109791487A (zh) 用于将多个数据元素加载到除紧缩数据寄存器之外的目的地存储位置的处理器、方法、系统和指令

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant