元素上操作。每个流具有以下基本特 性。流数据具有良好定义的开始时间和结束时间。流数据在整个流内具有固定元素尺寸和 类型。流数据具有固定的元素序列。因此,程序不能在流内随机地探寻。当有效时,流数据为 只读的。程序不能写入流同时从所述流读取。一旦流打开,流引擎:计算地址;从二级统一高 速缓存获取定义的数据类型;执行诸如零扩展、符号扩展的数据类型操作、诸如矩阵转置的 数据元素分类/交换;以及将数据直接递送到CPU内的编程执行单元。流引擎因此可用于针 对良好性能数据执行实时数字过滤操作。流引擎使这些存储器获取任务从实现其他处理功 能的相应CPU中释放出来。
[0032] 流引擎提供以下益处。它们允许多维存储器访问。它们增大功能单元可用的带宽。 由于流缓冲器能够绕过L1D高速缓存和L2高速缓存,因此它们最小化高速缓存未命中暂停 的数目。它们减少回路中所需用于维持的标量操作的数目。它们管理地址指针。它们自动处 理地址生成,从而空出地址生成指令槽和.D单元,以用于其他计算。
[0033] 图5示出该发明的CPU的一个实施例的结构。除非另外指出,否则该描述覆盖标量 CPU和矢量CPU。该发明的CPU包括多个执行单元乘法单元511 (.M)、相关单元512(.〇、算术 单元513( .L)、算术单元514(. S)、加载/存储单元515( .D)、分支单元516( .B)和断言单元517 (.P)。下面详述这些执行单元的操作和关系。
[0034] 乘法单元511主要执行乘法。乘法单元511接受多达两个双矢量操作数并产生多达 一个双矢量结果。乘法单元511为可经配置执行以下操作的指令:各种整数乘法操作,其中 精度在从8位到64位乘法操作的范围中;各种正则和复数点乘积操作;以及各种浮点乘法操 作;逐位逻辑操作,移位以及加法和减法。如图5中所示,乘法单元511包括用于四个同时的 16位乘以16位乘法的硬件。乘法单元511可以以下面描述的方式访问全局标量寄存器文件 521、全局矢量寄存器文件522以及共享的.M和C.局部寄存器523文件。转发多路复用器530 协调全局标量寄存器文件521、全局矢量寄存器文件522、相应流引擎和乘法单元511之间的 数据传输。
[0035]相关单元512(.C)接受多达两个双矢量操作数并产生多达一个双矢量结果。相关 单元512支持这些主要操作。为了支持WCDMA "搜寻(rake)"和"搜索(search)"指令,相关单 元512每个时钟周期执行多达512次2位PN*8位I/Q复数乘法。相关单元512执行8位和16位绝 对差和(SAD)计算,其每个时钟周期执行多达512次SAD。相关单元512执行水平加法和水平 最小/最大指令。相关单元512执行矢量置换指令。相关单元512包括8个256位宽控制寄存 器。这些控制寄存器用于控制某些相关单元指令的操作。相关单元512可以以下面描述的方 式访问全局标量寄存器文件521、全局矢量寄存器文件522以及共享的.M和C.局部寄存器文 件523。转发多路复用器530协调全局标量寄存器文件521、全局矢量寄存器文件522、相应流 引擎和相关单元512之间的数据传输。
[0036] CPU 500包括两个算术单元:算术单元513(.L)和算术单元514(.S)。每个算术单元 513和算术单元514接受多达两个矢量操作数并产生一个矢量结果。计算单元支持这些主要 操作。算术单元513和算术单元514在从8位到64位的精度范围下执行各种单指令多数据 (SIMD)定点算术操作。算术单元513和算术单元514执行各种矢量比较和最小/最大指令,其 将结果直接写入到断言寄存器文件526(下面进一步描述)。这些比较包括A = B、A>B、A 2 B、A 〈B和AS B。如果比较为正确的,则在断言寄存器内的相应位位置中存储1位。如果比较失败, 则在断言寄存器内的相应位位置中存储0。矢量比较指令假设字节(8位)数据并因此生成32 个单个位结果。算术单元513和算术单元514使用如下面说明的指定的断言寄存器执行各种 矢量操作。算术单元513和算术单元514执行各种SIMD浮点算术操作,其中精度在从半精度 (16位)、单倍精度(32位)到双倍精度(64位)范围中。算术单元513和算术单元514执行专用 指令,以加速各种算法和功能。算术单元513和算术单元514可访问全局标量寄存器文件 521、全局矢量寄存器文件522、共享的.L和.S局部寄存器文件524和断言寄存器文件526。转 发多路复用器530协调全局标量寄存器文件521、全局矢量寄存器文件522、相应流引擎及算 术单元513和514之间的数据传输。
[0037]加载/存储单元515(.D)主要用于地址计算。加载/存储单元515扩展用于接受多达 64位的标量操作数并产生多达64位的标量结果。加载/存储单元515包括附加硬件,以执行 数据操纵,诸如交换、加载和存储数据上的打包和解包,以减小其他单元上的工作负荷。加 载/存储单元515能够在每个时钟周期将一个加载或存储请求以及44位物理地址一起发送 到一级数据高速缓存(L1D)。加载或存储数据宽度能够为32位、64位、256位或512位。加载/ 存储单元515支持这些主要操作:64位SIMD算术操作;64位逐位逻辑操作;以及标量和矢量 加载和存储数据操纵。加载/存储单元515优选地包括微TLB(表后备缓冲器)块,以执行从48 位虚拟地址到44位物理地址的地址转换。加载/存储单元515可以以下面描述的方式访问全 局标量寄存器文件521、全局矢量寄存器文件522和.D局部寄存器文件525。转发多路复用器 530协调全局标量寄存器文件521、全局矢量寄存器文件522、相应流引擎及加载/存储单元 515之间的数据传输。
[0038]分支单元516(.B)计算分支地址、执行分支预测并根据预测的结果改变控制流。 [0039]断言单元517(.P)为小的控制单元,其在矢量断言寄存器上执行基本操作。断言单 元517具有到矢量断言寄存器526的直接访问。断言单元517在断言寄存器上执行不同的位 操作,诸如4勵、4勵101?、乂01?、勵1?、8111?、陬6、3£1'、811^犯'(位计数)、冊80(最右位检测)、81丁 抽取和扩展等等。
[0040]图6不出全局标量寄存器文件521。存在16个独立的64位宽标量寄存器。全局标量 寄存器文件521的每个寄存器能够被读取作为32位标量数据(指定的寄存器A0到A15601)或 64位标量数据(指定的寄存器EA0到EA15611)。然而,如果需要,写入总为64位零扩展的,以 填补到64位。所有功能单元的所有标量指令能够被读取或写入到全局标量寄存器文件521。 指令类型确定数据尺寸。全局标量寄存器文件521支持尺寸在8位到64位范围中的数据类 型。还能将矢量指令写入64位全局标量寄存器521中,其中丢弃矢量的高192位数据。矢量指 令还能从全局标量寄存器文件511读取64位数据。在该情况下,操作数在高192位中为零扩 展的,以形成输入矢量。
[0041]图7示出全局矢量寄存器文件522。存在16个独立的256位宽矢量寄存器。全局矢量 寄存器文件522的每个寄存器能够被读取作为32位标量数据(指定的寄存器X0到X15701)、 64位标量数据(指定的寄存器EX0到EX15711)、256位矢量数据(指定的寄存器VX0到 VX15721)或512位双矢量数据(指定的DVX0到DVX12,未示出)。在当前实施例中,仅乘法单元 511和相关单元512可执行双矢量指令。所有功能单元的所有矢量指令能读取或写入到全局 矢量寄存器文件522。任何功能单元的任何标量指令还能访问全局矢量寄存器文件522寄存 器的低32位或64位,以用于读取或写入。指令类型确定数据尺寸。
[0042]图8示出局部矢量寄存器文件523。存在16个独立的256位宽矢量寄存器。局部矢量 寄存器文件523的每个寄存器能够被读取作为32位标量数据(指定的寄存器M0到M15701)、 64位标量数据(指定的寄存器EM0到EM15711)、256位矢量数据(指定的寄存器VM0到 VM15721)或512位双矢量数据(指定的DVM0到DVM7,未示出)。在当前实施例中,仅乘法单元 511和相关单元512可执行双矢量指令。所有功能单元的所有矢量指令能写入到局部矢量寄 存器文件523。仅乘法单元511和相关单元512的指令可从局部矢量寄存器文件523读取。指 令类型确定数据尺寸。
[0043] 乘法单元511可针对双矢量(5