一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

直方图运算的制作方法

2022-02-20 05:17:35 来源:中国专利 TAG:

直方图运算


背景技术:

1.现代数字信号处理器(dsp)面临多个挑战。工作负载持续增加,从而需要增加带宽。片上系统(soc)的大小和复杂性持续增长。存储器系统时延严重影响某些类别的算法。随着晶体管变得更小,存储器和寄存器变得更不可靠。随着软件堆栈变得更大,可能的交互和误差的数目变得更大。甚至电线也越来越成为挑战。宽总线难以路由。电线速度持续落后于晶体管速度。路由拥塞为持续挑战。
2.可用于过滤函数的一种技术为表查找。将数据表加载到存储器中,所述存储器在对应于输入参数的存储器位置处存储结果集合。为了进行函数,输入参数用于调用预计算的结果。这一技术对于很少使用且难以计算的数学函数可为尤其有价值的。


技术实现要素:

3.在一些实例中,一种数字数据处理器包含:指令存储器,其存储指令,所述指令各自指定数据处理运算和至少一个数据操作数字段;指令解码器,其耦合到所述指令存储器以用于从所述指令存储器顺序地调用指令且确定所述数据处理运算和所述至少一个数据操作数;和至少一个运算单元,其耦合到数据寄存器堆且耦合到指令解码器以对对应于由所述指令解码器解码的指令的至少一个操作数进行数据处理运算且存储所述数据处理运算的结果。所述运算单元配置成通过在指定数目的至少一个直方图中的指定位置处递增仓条目响应于直方图指令而递增直方图值。
4.在一些实例中,一种方法包含由耦合到数据寄存器堆且耦合到指令解码器的运算单元通过在指定数目的至少一个直方图中的指定位置处递增仓条目响应于直方图指令而递增直方图值。
附图说明
5.为了详细描述各种实例,现将参考附图,在附图中:
6.图1说明根据一个实施例的双重标量/向量数据路径处理器;
7.图2说明图1中所说明的双重标量/向量数据路径处理器中的寄存器和功能单元;
8.图3说明全局标量寄存器堆;
9.图4说明由算术功能单元共享的局部标量寄存器堆;
10.图5说明由乘法功能单元共享的局部标量寄存器堆;
11.图6说明由加载/存储单元共享的局部标量寄存器堆;
12.图7说明全局向量寄存器堆;
13.图8说明断言寄存器堆;
14.图9说明由算术功能单元共享的局部向量寄存器堆;
15.图10说明由乘法和相关功能单元共享的局部向量寄存器堆;
16.图11说明根据实例实施例的中央处理单元的管线阶段;
17.图12说明单个提取包的十六个指令;
18.图13说明在一个实施例中的指令译码实例;
19.图14说明条件码扩展时隙0的位译码;
20.图15说明条件码扩展时隙1的位译码;
21.图16说明常量扩展时隙0的位译码;
22.图17为说明常量扩展的部分框图;
23.图18说明根据实例实施例的用于simd运算的进位控制;
24.图19说明实例查找表配置寄存器的数据字段;
25.图20说明指定针对特定表集合所准许的运算的类型的实例查找表启用寄存器中的数据字段;
26.图21说明用于所述表集合的一个表的查找表组织;
27.图22说明用于所述表集合的两个表的查找表组织;
28.图23说明用于所述表集合的四个表的查找表组织;
29.图24说明用于所述表集合的八个表的查找表组织;
30.图25说明用于所述表集合的十六个表的查找表组织;
31.图26说明实例实施例中的用于四个并行表的查找表读取指令的运算、字节的数据元素大小和无提升的实例;
32.图27说明实例实施例中的用于四个并行表的查找表读取指令的运算、字节的数据元素大小和2x提升的实例;
33.图28说明实例实施例中的用于四个并行表的查找表读取指令的运算、字节的数据元素大小和4x提升的实例;
34.图29a和29b共同说明提升的实施方案的实例实施例;
35.图30说明图29a中所说明的扩展元素的实例;
36.图31说明控制在图29a和29b中所说明的多路复用器的多路复用控制编码器;
37.图32说明实例实施例中的用于四个并行表的查找表读取指令的运算、字的数据元素大小和2元素内插的实例;
38.图33说明实例实施例中的用于四个并行表的查找表读取指令的运算、字的数据元素大小和4元素内插的实例;
39.图34说明在实例实施例中响应于查找表读取指令的执行而在将重新排序的来自查找表的数据写入到目的地寄存器之前对所述数据进行重新排序的多级蝶形单元的运算的实例;
40.图35说明实例实施例中的用于具有字的数据元素大小的四个并行表的查找表写入指令的运算的实例;
41.图36a和36b说明实例实施例中的查找表初始化指令的运算的实例;
42.图37说明实例实施例中的用于四个并行直方图的直方图指令的运算的实例;且
43.图38说明实例实施例中的用于四个并行直方图的加权直方图指令的运算的实例。
具体实施方式
44.图1说明根据一些实例的双重标量/向量数据路径处理器100。处理器100包含单独一级指令高速缓存(l1i)121和一级数据高速缓存(l1d)123。处理器100包含保存指令和数
据两者的二级组合式指令/数据高速缓存(l2)130。图1说明一级指令高速缓存121与二级组合式指令/数据高速缓存130之间的连接(总线142)。图1说明一级数据高速缓存123与二级组合式指令/数据高速缓存130之间的连接(总线145)。二级组合式指令/数据高速缓存130存储指令以备份一级指令高速缓存121且存储数据以备份一级数据高速缓存123。二级组合式指令/数据高速缓存130以所属领域中已知且图1中未说明的方式进一步连接到更高级高速缓存和/或主存储器。在一个实施例中,中央处理单元核心110、一级指令高速缓存121、一级数据高速缓存123和二级组合式指令/数据高速缓存130形成于单个集成电路上。这一单个集成电路任选地包含其它电路。
45.中央处理单元核心110如由指令提取单元111控制而从一级指令高速缓存121提取指令。指令提取单元111确定待执行的下一些指令且调用这种指令的提取包大小的集合。下文进一步详述提取包的本质和大小。如所属领域中已知,在高速缓存命中后即刻从一级指令高速缓存121直接提取指令(如果这些指令存储在一级指令高速缓存121中)。在高速缓存未命中(指定指令提取包并未存储在一级指令高速缓存121中)后,在二级组合式高速缓存130中搜寻这些指令。在一个实施例中,一级指令高速缓存121中的高速缓存行的大小等于提取包的大小。这些指令的存储器位置为二级组合式高速缓存130中的命中或未命中。命中由二级组合式高速缓存130服务。未命中由更高级高速缓存(未说明)或由主存储器(未说明)服务。如所属领域中已知,所请求指令可同时供应到一级指令高速缓存121和中央处理单元核心110两者以加速使用。
46.中央处理单元核心110包含用以进行指令指定的数据处理任务的多个功能单元(也称为“执行单元”)。指令分派单元112确定每一所提取指令的目标功能单元。在一个实施例中,中央处理单元110作为超长指令字(vliw)处理器操作,其能够同时对对应功能单元中的多个指令进行运算。编译器可组织执行包中的一起执行的指令。指令分派单元112将每一指令引导到其目标功能单元。在一个实施例中,分配给指令的功能单元完全由编译器产生的指令指定,因为中央处理单元核心110的硬件在这一功能单元分配中不具有部分。指令分派单元112可并行地对多个指令进行运算。这种并行指令的数目由执行包的大小设定。这将在下文进一步详述。
47.指令分派单元112的分派任务的一个部分是确定指令是在标量数据路径侧a 115还是向量数据路径侧b 116中的功能单元上执行。每一指令内称为s位的指令位确定指令控制哪一数据路径。这将在下文进一步详述。
48.指令解码单元113对当前执行包中的每一指令进行解码。解码包含进行指令的功能单元的识别、用于从可能的寄存器堆当中供应用于对应数据处理运算的数据的寄存器的识别,和对应数据处理运算的结果的寄存器目的地的识别。如下文所描述,指令可包含常量字段而非一个寄存器编号操作数字段。这一解码的结果为用于控制目标功能单元对指定数据进行由对应指令指定的数据处理运算的信号。
49.中央处理单元核心110包含控制寄存器114。控制寄存器114存储用于控制标量数据路径侧a 115和向量数据路径侧b 116中的功能单元的信息。这一信息可包含模式信息或其类似物。
50.将来自指令解码单元113的所解码指令和存储在控制寄存器114中的信息供应到标量数据路径侧a 115和向量数据路径侧b 116。因此,标量数据路径侧a 115和向量数据路
径侧b 116内的功能单元对指令指定的数据进行指令指定的数据处理运算且将结果存储在一或多个指令指定的数据寄存器中。标量数据路径侧a 115和向量数据路径侧b 116中的每一个包含可并行操作的多个功能单元。这些将结合图2在下文进一步详述。标量数据路径侧a 115与向量数据路径侧b 116之间存在准许数据交换的数据路径117。
51.中央处理单元核心110包含另外非基于指令的模块。仿真单元118准许响应于指令而确定中央处理单元核心110的机器状态。这一能力可用于算法开发。中断/异常单元119使得中央处理单元核心110能够对外部异步事件(中断)作出响应且对进行不当操作的尝试(异常)作出响应。
52.中央处理单元核心110包含流式传输引擎125。流式传输引擎125将两个数据流从可高速缓存于二级组合式高速缓存130中的预定地址供应到向量数据路径侧b的寄存器堆。这将受控数据移动从存储器(如高速缓存于二级组合式高速缓存130中)直接提供到功能单元操作数输入。这在下文进一步详述。
53.图1说明用于实例实施例的各种部分之间的总线的数据宽度。一级指令高速缓存121经由总线141将指令供应到指令提取单元111。在这一实例实施例中,总线141为512位总线。总线141从一级指令高速缓存121到中央处理单元110是单向的。二级组合式高速缓存130经由总线142将指令供应到一级指令高速缓存121。在这一实例实施例中,总线142为512位总线。总线142从二级组合式高速缓存130到一级指令高速缓存121是单向的。
54.一级数据高速缓存123经由总线143与标量数据路径侧a 115中的寄存器堆交换数据。在这一实例实施例中,总线143为64位总线。一级数据高速缓存123经由总线144与向量数据路径侧b 116中的寄存器堆交换数据。在这一实例实施例中,总线144为512位总线。总线143和144说明为双向的,从而支持中央处理单元110数据读取和数据写入两者。一级数据高速缓存123经由总线145与二级组合式高速缓存130交换数据。在这一实例实施例中,总线145为512位总线。总线145说明为双向的,从而支持针对中央处理单元110数据读取和数据写入两者的高速缓存服务。
55.如所属领域中已知,在高速缓存命中后即刻从一级数据高速缓存123直接提取cpu数据请求(如果所请求的数据存储在一级数据高速缓存123中)。在高速缓存未命中(指定数据并未存储在一级数据高速缓存123中)后,在二级组合式高速缓存130中搜寻这一数据。这一所请求的数据的存储器位置是二级组合式高速缓存130中的命中或未命中。命中由二级组合式高速缓存130服务。未命中由另一级高速缓存(未说明)或由主存储器(未说明)服务。如所属领域中已知,所请求指令可同时供应到一级数据高速缓存123和中央处理单元核心110两者以加速使用。
56.二级组合式高速缓存130经由总线146将第一数据流的数据供应到流式传输引擎125。在这一实例实施例中,总线146为512位总线。流式传输引擎125经由总线147将这一第一数据流的数据供应到向量数据路径侧b 116的功能单元。在这一实例实施例中,总线147为512位总线。二级组合式高速缓存130经由总线148将第二数据流的数据供应到流式传输引擎125。在这一实例实施例中,总线148为512位总线。流式传输引擎125经由总线149将这一第二数据流的数据供应到向量数据路径侧b 116的功能单元。在这一实例实施例中,总线149为512位总线。在这一实例实施例中,总线146、147、148和149说明为从二级组合式高速缓存130到流式传输引擎125且到向量数据路径侧b 116是单向的。
57.在高速缓存命中后即刻从二级组合式高速缓存130直接提取流式传输引擎数据请求(如果所请求的数据存储在二级组合式高速缓存130中)。在高速缓存未命中(指定数据并未存储在二级组合式高速缓存130中)后,从另一级高速缓存(未说明)或从主存储器(未说明)搜寻这一数据。在一些实施例中,一级数据高速缓存123可高速缓存未存储在二级组合式高速缓存130中的数据。如果支持这种操作,那么在作为二级组合式高速缓存130中的未命中的流式传输引擎数据请求后,二级组合式高速缓存130可即刻探听用于流式传输引擎所请求的数据的一级数据高速缓存123。如果一级数据高速缓存123存储这一数据,那么其探听响应将包含数据,接着供应所述数据以服务流式传输引擎请求。如果一级数据高速缓存123不存储这一数据,那么其探听响应将指示此,且二级组合式高速缓存130将接着服务来自另一级高速缓存(未说明)或来自主存储器(未说明)的这一流式传输引擎请求。
58.在一个实施例中,一级数据高速缓存123和二级组合式高速缓存130两者均可配置为选定量的在标题为“包含高速缓存和可直接寻址静态随机存取存储器的统一存储器系统架构(unified memory system architecture including cache and directly addressable static random access memory)”的美国专利第6,606,686号中的高速缓存或可直接寻址存储器。
59.图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。这些功能单元可配置成从某些寄存器堆读取或写入到某些寄存器堆,如下文将详述。
60.l1单元221可接受两个64位操作数且产生一个64位结果。两个操作数各自从全局标量寄存器堆211或l1/s1局部寄存器堆212中的指令指定寄存器调用。l1单元221可进行以下指令选定运算:64位加法/减法运算;32位最小/最大运算;8位单指令多数据(simd)指令,例如绝对值、最小和最大确定的总和;循环最小/最大运算;和寄存器堆之间的各种移动运算。由l1单元221产生的结果可写入到全局标量寄存器堆211、l1/s1局部寄存器堆212、m1/n1局部寄存器堆213或d1/d2局部寄存器堆214的指令指定寄存器中。
61.s1单元222可接受两个64位操作数且产生一个64位结果。两个操作数各自从全局标量寄存器堆211或l1/s1局部寄存器堆212中的指令指定寄存器调用。在一个实施例中,s1单元222可进行与l1单元221相同类型的运算。在其它实施例中,由l1单元221和s1单元222支持的数据处理运算之间可能存在微小变化。由s1单元222产生的结果可写入到全局标量寄存器堆211、l1/s1局部寄存器堆212、m1/n1局部寄存器堆213或d1/d2局部寄存器堆214的指令指定寄存器中。
62.m1单元223可接受两个64位操作数且产生一个64位结果。两个操作数各自从全局标量寄存器堆211或m1/n1局部寄存器堆213中的指令指定寄存器调用。m1单元223可进行以下指令选定运算:8位乘法运算;复数内积运算;32位位计数运算;复共轭乘法运算;和逐位逻辑运算、移动、加法和减法。由m1单元223产生的结果可写入到全局标量寄存器堆211、l1/
s1局部寄存器堆212、m1/n1局部寄存器堆213或d1/d2局部寄存器堆214的指令指定寄存器中。
63.n1单元224可接受两个64位操作数且产生一个64位结果。两个操作数各自从全局标量寄存器堆211或m1/n1局部寄存器堆213中的指令指定寄存器调用。n1单元224可进行与m1单元223相同类型的运算。可存在一起采用m1单元223和n1单元224两者的某些双重运算(称为双重发布指令)。由n1单元224产生的结果可写入到全局标量寄存器堆211、l1/s1局部寄存器堆212、m1/n1局部寄存器堆213或d1/d2局部寄存器堆214的指令指定寄存器中。
64.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中的指令指定寄存器调用。由d1单元225和/或d2单元226计算出的结果可写入到全局标量寄存器堆211、l1/s1局部寄存器堆212、m1/n1局部寄存器堆213或d1/d2局部寄存器堆214的指令指定寄存器中。
65.l2单元241可接受两个512位操作数且产生一个512位结果。至多两个操作数中的每一个各自从全局向量寄存器堆231、l2/s2局部寄存器堆232或断言寄存器堆234中的指令指定寄存器调用。除较宽512位数据外,l2单元241还可进行类似于l1单元221的指令。由l2单元241产生的结果可写入到全局向量寄存器堆231、l2/s2局部寄存器堆232、m2/n2/c局部寄存器堆233或断言寄存器堆234的指令指定寄存器中。
66.s2单元242可接受两个512位操作数且产生一个512位结果。至多两个操作数中的每一个各自从全局向量寄存器堆231、l2/s2局部寄存器堆232或断言寄存器堆234中的指令指定寄存器调用。除较宽512位数据外,s2单元242还可进行类似于s1单元222的指令。由s2单元242产生的结果可写入到全局向量寄存器堆231、l2/s2局部寄存器堆232、m2/n2/c局部寄存器堆233或断言寄存器堆234的指令指定寄存器中。
67.m2单元243可接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器堆231或m2/n2/c局部寄存器堆233中的指令指定寄存器调用。除较宽512位数据外,m2单元243还可进行类似于m1单元223的指令。由m2单元243产生的结果可写入到全局向量寄存器堆231、l2/s2局部寄存器堆232、m2/n2/c局部寄存器堆233的指令指定寄存器中。
68.n2单元244可接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器堆231或m2/n2/c局部寄存器堆233中的指令指定寄存器调用。n2单元244可进行与m2单元243相同类型的运算。可存在一起采用m2单元243和n2单元244两者的某些双重运算(称为双重发布指令)。由n2单元244产生的结果可写入到全局向量寄存器堆231、l2/s2局部寄存器堆232或m2/n2/c局部寄存器堆233的指令指定寄存器中。
69.c单元245可接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器堆231或m2/n2/c局部寄存器堆233中的指令指定寄存器调用。c单元245可进行:“搜寻(rake)”和“搜索(search)”指令;至多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多重dot积运算(dotpm)和simd多重绝对差和(sad)运算的掩码。控制寄存器cucr0可用于存储用于伽罗瓦域(galois field)乘法运算(gfmpy)的多项式。控制寄存器cucr1可用于存储伽罗瓦域多项式产生器函数。
70.p单元246可对局部断言寄存器堆234的寄存器进行基本逻辑运算。p单元246具有对从断言寄存器堆234读取和写入到断言寄存器堆234的直接存取。由p单元246进行的运算可包含and、andn、or、xor、nor、bitr、neg、set、bitcnt、rmbd、bit抽取(bit decimate)和扩展(expand)。p单元246的一个用途可包含操纵用于控制另外simd向量运算的simd向量比较结果。
71.图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读取。
72.图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)可写入到d1/d2局部寄存器堆214。仅d1单元225和d2单元226可从dl/d2局部寄存器堆214读取。存储在d1/d2局部寄存器堆214中的数据可包含在地址计算中使用的基址和偏移地址。
73.图5说明ll/s1局部寄存器堆212的实例实施例。图5中所说明的实施例具有标示al0到al7的8个独立64位宽标量寄存器。在某些指令译码格式下(参见图13),l1/s1局部寄存器堆212可包含至多16个寄存器。图5的实施例仅实施8个寄存器以减小电路大小和复杂性。ll/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读取。
74.图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读取。
75.图7说明全局向量寄存器堆231的实例实施例。在所说明的实施例中,存在16个独
立512位宽向量寄存器。全局向量寄存器堆231的每一寄存器可读取或写入为标示b0到b15的64位标量数据。全局向量寄存器堆231的每一寄存器可读取或写入为标示vb0到vb15的512位向量数据。指令类型确定数据大小。所有向量数据路径侧b 116功能单元(l2单元241、s2单元242、m2单元243、n2单元244、c单元245和p单元246)可读取或写入到全局向量寄存器堆231。在将在下文详述的限制下,标量数据路径侧a 115功能单元(l1单元221、s1单元222、m1单元223、n1单元224、d1单元225和d2单元226)可经由交叉路径117从全局向量寄存器堆231读取。
76.图8说明p局部寄存器堆234的实例实施例。在所说明的实施例中,存在标示p0到p7的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单元245的一个位simd向量比较结果;通过p单元246操纵simd向量比较结果;和将操纵的结果用于控制另外simd向量运算。
77.图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单元243、n2单元244、c单元245和p单元246)可写入到l2/s2局部寄存器堆232。可从l2/s2局部向量寄存器堆232读取仅l2单元241和s2单元242。
78.图10说明m2/n2/c局部寄存器堆233的实例实施例。图10中所说明的实施例具有8个独立512位宽向量寄存器。在某些指令译码格式下(参见图13),m2/n2/c局部寄存器堆233可包含至多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/n2/c局部向量寄存器堆233读取仅m2单元233、n2单元244和c单元245。
79.因此,在某些实施例中,全局寄存器堆可为可由一侧的所有功能单元(例如,标量和向量)存取的,且局部寄存器堆可为可由一侧的功能单元中的仅一些存取的。可采用仅一种类型的对应于所描述全局寄存器堆的寄存器堆来实践一些额外实施例。
80.交叉路径117准许标量数据路径侧a 115与向量数据路径侧b 116之间的有限数据交换。在每一操作循环期间,一个64位数据字可从全局标量寄存器堆211调用,以由向量数据路径侧b 116的一或多个功能单元用作操作数,且一个64位数据字可从全局向量寄存器堆231调用,以由标量数据路径侧a 115的一或多个功能单元用作操作数。任何标量数据路径侧a 115功能单元(l1单元221、s1单元222、m1单元223、n1单元224、d1单元225和d2单元226)可从全局向量寄存器堆231读取64位操作数。这一64位操作数为全局向量寄存器堆231的所存取寄存器中的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。
81.在某些情形下,流式传输引擎125传送数据。在图1的实施例中,流式传输引擎125控制两个数据流。流包含特定类型的一系列元素。对流进行操作的程序顺序地读取数据,继而对每一元素进行操作。流数据可具有以下基本特性:良好定义的开始和结束时间;遍及整个流的固定元素大小和类型;和元素的固定序列。因此,程序无法在所述流内随机地搜寻。另外,流数据仅在活动时为只读的。因此,程序无法在从流读取的同时写入到所述流中。一旦流打开,流式传输引擎125便:计算地址;从二级统一高速缓存130提取所定义数据类型(其可能需要来自较高级存储器的高速缓存服务,即,在二级统一高速缓存130中的高速缓存未命中的情况下);进行数据类型操纵(例如,例如零扩展、符号扩展和/或例如矩阵变位的数据元素排序/调换);和将数据直接递送到cpu 110内的已编程数据寄存器堆。流式传输引擎125因此适用于对良性数据的实时数字滤波操作。流式传输引擎125从对应cpu 110释放这些存储器提取任务,由此使得cpu 110能够进行其它处理功能。
82.流式传输引擎125提供若干益处。举例来说,流式传输引擎125准许多维存储器存取、增加cpu 110的功能单元的可用带宽、减少由于流缓冲器略过一级数据高速缓存123而致的高速缓存未命中暂停的数目、减少维持回路所需的标量操作的数目,和管理地址指针。流式传输引擎125还可处置地址产生,其释放地址产生指令时隙和d1单元225和d2单元226以用于其它计算。
83.cpu 110对指令管线进行操作。如下文进一步描述,在固定长度的指令包中提取指令。所有指令具有用于提取和解码的相同数目个管线阶段,但可具有不同数目个执行阶段。
84.图11说明具有以下管线阶段的指令管线的实例实施例:程序提取阶段1110、分派和解码阶段1120和执行阶段1130。程序提取阶段1110包含用于所有指令的三个阶段。分派和解码阶段1120包含用于所有指令的三个阶段。执行阶段1130包含取决于指令的一个到四个阶段。
85.提取阶段1110包含程序地址产生阶段1111(pg)、程序存取阶段1112(pa)和程序接收阶段1113(pr)。在程序地址产生阶段1111(pg)期间,程序地址产生于cpu中,且将读取请求发送到一级指令高速缓存l1i的存储器控制器。在程序存取阶段1112(pa)期间,一级指令高速缓存l1i处理请求,存取其存储器中的数据,且将提取包发送到cpu边界。在程序接收阶段1113(pr)期间,cpu寄存器提取包。
86.在实例实施例中,将指令一次提取为十六个32位宽时隙,从而构成提取包。图12说明一个这种实施例,其中单个提取包包含十六个指令1201到1216。提取包在512位(16字)边界上对准。在一个实施例中,提取包采用固定32位指令长度。固定长度指令由于一些原因是有利的。固定长度指令实现简单的解码器对准。恰当对准的指令提取可将多个指令加载到
并行指令解码器中。这种恰当对准的指令提取可在存储于与固定指令包提取耦合的存储器(在512位边界上对准的提取包)中时通过预定指令对准实现。对准指令提取还准许并行解码器对设定指令大小的所提取位的操作。可变长度指令可在其可经过解码之前要求定位每一指令边界的初始步骤。固定长度指令集通常准许指令字段的更规则布局。这简化每一解码器的构造,其对于宽发布vliw中央处理器为一优点。
87.个别指令的执行部分地受每一指令中的p位控制。这一p位可配置为32位宽时隙的位0。指令的p位确定指令是否与下一指令并行地执行。从较低地址到较高地址扫描指令。如果指令的p位为1,那么下一之后指令(较高存储器地址)与所述指令并行地执行(与所述指令在同一循环中)。如果指令的p位为0,那么下一之后指令在所述指令之后的循环中执行。
88.cpu 110和一级指令高速缓存l1i 121管线彼此解耦合。取决于外部环境,例如是一级指令高速缓存121中存在命中还是二级组合式高速缓存130中存在命中,从一级指令高速缓存l1i返回的提取包可耗费不同时钟循环数。因此,程序存取阶段1112(pa)可耗费若干时钟循环而非如在其它阶段中的1个时钟循环。
89.并行执行的指令构成执行包。在一个实施例中,执行包可含有至多十六个指令(时隙)。执行包中无两个指令可使用相同功能单元。时隙可为五种类型中的一种: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)条件性码扩展。这些时隙类型中的一些将在下文描述。
90.分派和解码阶段1120包含指令分派到适当执行单元阶段1121(ds)、指令预解码阶段1122(dc1);和指令解码、操作数读取阶段1123(dc2)。在指令分派到适当执行单元阶段1121(ds)期间,将提取包拆分成执行包且分配给适当功能单元。在指令预解码阶段1122(dc1)期间,源寄存器、目的地寄存器和相关联路径经过解码用于执行功能单元中的指令。在指令解码、操作数读取阶段1123(dc2)期间,进行更详细的单元解码,以及从寄存器堆读取操作数。
91.执行阶段1130包含执行阶段1131到1135(e1到e5)。不同类型的指令可需要不同数目的这些阶段以完成其执行。管线的这些阶段在理解cpu循环边界处的装置状态中起重要作用。
92.在执行1阶段1131(e1)期间,评估指令的条件且对操作数进行操作。如图11中所说明,执行1阶段1131可从流缓冲器1141和示意性地展示为1142的寄存器堆中的一个接收操作数。对于加载和存储指令,进行地址产生且将地址修改写入到寄存器堆。对于分支指令,pg阶段中的分支提取包受影响。
93.如图11中所说明,加载和存储指令存取存储器,此处示意性地展示为存储器1151。对于单循环指令,将结果写入到目的地寄存器堆。这假设指令的任何条件评估为真。如果条件评估为假,那么指令在执行1阶段1131之后并不写入任何结果或具有任何管线操作。
94.在执行2阶段1132(e2)期间,加载指令将地址发送到存储器。存储指令将地址和数据发送到存储器。使结果饱和的单循环指令在饱和发生时设定控制状态寄存器(csr)中的位(sat)。对于2循环指令,将结果写入到目的地寄存器堆。
95.在执行3阶段1133(e3)期间,进行数据存储器存取。使结果饱和的任何乘法指令在
饱和发生时设定控制状态寄存器(csr)中的sat位。对于3循环指令,将结果写入到目的地寄存器堆。
96.在执行4阶段1134(e4)期间,加载指令将数据带到cpu边界。对于4循环指令,将结果写入到目的地寄存器堆。
97.在执行5阶段1135(e5)期间,加载指令将数据写入到寄存器中。这在图11中通过从存储器1151到执行5阶段1135的输入示意性地说明。
98.图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)中的一个的操作。指令译码1300的位字段定义如下。
99.creg字段1301(位29到31)和z位1302(位28)是在条件性指令中使用的字段。这些位用于条件性指令以识别断言(也称为“条件性”)寄存器和条件。z位1302(位28)指示条件是基于断言寄存器中的零还是非零。如果z=1,那么测试针对具有零的等式。如果z=0,那么测试针对非零。对于非条件性指令,将creg字段1301和z位1302都设定为0以允许非条件性指令执行。creg字段1301和z字段1302如表1中所示在指令中编码。
100.表1
[0101][0102][0103]
条件性指令的执行对存储在指定的条件性数据寄存器中的值为条件性的。在这一所说明实例中,条件性寄存器为全局标量寄存器堆211中的数据寄存器。z位列中的“z”指代上文所提到的零/非零比较选择,且“x”为无关状态。在这一实例中,在这一译码中使用creg字段1301的三个位允许仅指定全局标量寄存器堆211的16个全局寄存器的子集(a0到a5)作为断言寄存器。进行这一选择以在指令译码中保留位,且减少操作码空间。
[0104]
dst字段1303(位23到27)指定对应寄存器堆中的寄存器作为指令结果的目的地(例如,将写入结果之处)。
[0105]
src2/cst字段1304(位18到22)可取决于指令操作码字段(用于所有指令的位4到12以及用于非条件性指令的位28到31)以不同方式解译。src2/cst字段1304取决于指令操作码字段而指示来自对应寄存器堆的寄存器或作为常量的第二源操作数。取决于指令类
型,当第二源操作数为常量时,这可视为扩展到指定数据长度的无符号整数和零,或可视为扩展到指定数据长度的有符号整数和符号。
[0106]
src1字段1305(位13到17)将对应寄存器堆中的寄存器指定为第一源操作数。
[0107]
用于所有指令的操作码字段1306(位4到12)(以及用于非条件性指令的位28到31)指定指令的类型且标示适当指令选项。这包含所使用的功能单元和所进行的操作的标示。下文详述关于这种指令选项的额外细节。
[0108]
e位1307(位2)用于其中常量可扩展的立即常量指令。如果e=1,那么立即常量以下文详述的方式扩展。如果e=0,那么立即常量不扩展。在后一种情况下,立即常量由src2/cst字段1304(位18到22)指定。e位1307可仅用于一些类型的指令。因此,通过恰当译码,可从不需要其的指令省略e位1307,且这一位可改为用作额外操作码位。
[0109]
s位1308(位1)标示标量数据路径侧a 115或向量数据路径侧b 116。如果s=0,那么选择标量数据路径侧a 115,且可用功能单元(l1单元221、s1单元222、m1单元223、n1单元224、d1单元225和d2单元226)和寄存器堆(全局标量寄存器堆211、ll/s1局部寄存器堆212、m1/n1局部寄存器堆213和d1/d2局部寄存器堆214)将为对应于如图2中所说明的标量数据路径侧a 115的功能单元和寄存器堆。类似地,s=1选择向量数据路径侧b 116,且可用功能单元(l2单元241、s2单元242、m2单元243、n2单元244、c单元245和p单元246)和寄存器堆(全局向量寄存器堆231、l2/s2局部寄存器堆232、m2/n2/c局部寄存器堆233和断言局部寄存器堆234)将为对应于如图2中所说明的向量数据路径侧b 116的功能单元和寄存器堆。
[0110]
p位1308(位0)用于确定指令是否与以下指令并行地执行。从较低地址到较高地址扫描p位。如果对于当前指令p=1,那么下一指令与当前指令并行地执行。如果对于当前指令p=0,那么下一指令在当前指令之后的循环中执行。并行地执行的所有指令构成执行包。在一个实例实施例中,执行包可含有用于并行执行的至多十二个指令,其中执行包中的每一指令分配到不同功能单元。
[0111]
在处理器100的一个实例实施例中,存在两个不同条件码扩展时隙(时隙0和时隙1)。在这一实例实施例中,条件码扩展时隙可为32位,如同图13中所描述的译码格式1300。每一执行包可含有这些32位条件码扩展时隙中的每一个,所述每一个时隙含有用于相同执行包中的指令的4位creg/z字段(例如,类似于译码1300的位28到31)。图14说明条件码扩展时隙0的实例译码,且图15说明条件码扩展时隙1的实例译码。
[0112]
图14说明条件码扩展时隙0的实例译码1400。字段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单元226指令的4个creg/z位。字段1407(位6和7)未使用/保留。用独特位集合(ccex0)对字段1408(位0到5)进行译码以识别条件码扩展时隙0。一旦检测到条件码扩展时隙0的这一独特id,对应creg/z位就用于控制相同执行包中的任何l1单元221、l2单元241、s1单元222、s2单元242、d1单元225和d2单元226指令的条件性执行。这些creg/z位如表1中所示而解译。如果对应指令为条件性的(例如,creg/z位并非全部为0),那么条件码扩展时隙0中的对应位超驰(例如,使用译码格式
1300译码的)指令中的条件码位(creg字段1301的位28到31和z位1302)。在所说明的实例中,无执行包可具有引导到特定执行单元的多于一个指令,且无指令执行包可含有多于一个条件码扩展时隙0。因此,creg/z位到功能单元指令的映射为明确的。如上文所描述,设定creg/z位等于“0000”使指令为非条件性的。因此,经过恰当译码的条件码扩展时隙0可使一些对应指令为条件性的且使一些对应指令为非条件性的。
[0113]
图15说明条件码扩展时隙1的实例译码1500。字段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(位6到11)未使用/保留。用独特位集合(ccex1)对字段1507(位0到5)进行译码以识别条件码扩展时隙1。一旦检测到条件码扩展时隙1的这一独特id,对应creg/z位就用于控制相同执行包中的任何m1单元223、m2单元243、c单元245、n1单元224和n2单元244指令的条件性执行。这些creg/z位如表1中所示而解译。如果对应指令为条件性的(例如,creg/z位并非全部为0),那么条件码扩展时隙1中的对应位超驰(例如,使用译码格式1300译码的)指令中的条件码位(creg字段1301的位28到31和z位1302)。在所说明的实例中,无执行包可具有引导到特定执行单元的多于一个指令,且无指令执行包可含有多于一个条件码扩展时隙1。因此,creg/z位到功能单元指令的映射为明确的。如上文所描述,设定creg/z位等于“0000”使指令为非条件性的。因此,经过恰当译码的条件码扩展时隙1可使一些对应指令为条件性的且使一些对应指令为非条件性的。
[0114]
如上文结合图13所描述,条件码扩展时隙0 1400和条件码扩展时隙1两者可包含用以定义执行包的p位。在一个实例实施例中,如图14和15中所说明,码扩展时隙0 1400和条件码扩展时隙1 1500的位0可提供p位。假设用于码扩展时隙1400、1500的p位始终编码为1(并行执行),那么码扩展时隙1400、1500都不应为执行包的最后一个指令时隙。
[0115]
在处理器100的一个实例实施例中,存在两个不同的常量扩展时隙。每一执行包可含有这些独特32位常量扩展时隙中的每一个,所述每一个时隙含有待与指令译码1300中的5位常量字段串接为高阶位以形成32位常量的27个位。如上文的指令译码1300描述中所提及,仅一些指令将5位src2/cst字段1304限定为常量而非源寄存器识别符。那些指令中的至少一些可采用常量扩展时隙将这一常量扩展到32个位。
[0116]
图16说明常量扩展时隙0的实例译码1600。每一执行包可包含常量扩展时隙0的一个个例及常量扩展时隙1的一个个例。图16说明包含两个字段的常量扩展时隙0 1600。字段1601(位5到31)构成具有目标指令scr2/cst字段1304从而提供五个最低有效位的经扩展32位常量的最高有效27个位。字段1602(位0到4)经译码一组独特位(cstx0)以识别常量扩展时隙0。在实例实施例中,常量扩展时隙0 1600用于扩展同一执行包中的l1单元221指令、d1单元225指令中的数据、s2单元242指令、d2单元226指令中的偏移、m2单元243指令、n2单元244指令、分支指令或c单元245指令中的一个的常量。除了位0到4经译码一组独特位(cstx1)以识别常量扩展时隙1之外,常量扩展时隙1类似于常量扩展时隙0。在实例实施例中,常量扩展时隙1用于扩展同一执行包中的l2单元241指令、d2单元226指令中的数据、s1单元222指令、d1单元225指令中的偏移、m1单元223指令或n1单元224指令中的一个的常量。
[0117]
如下使用常量扩展时隙0和常量扩展时隙1。目标指令必须属于准许常量规格的类型。如所属领域中已知的,这通过用如上文相对于scr2/cst字段1304所描述的常量的最低有效位替代一个输入操作数寄存器规格字段来实施。指令解码器113从指令操作码位确定这一情况,其称为立即字段。目标指令还包含一个常量扩展位(e位1307),所述常量扩展位专用于用信号表示指定常量未扩展(例如,常量扩展位=0)或所述常量扩展(例如,常量扩展位=1)。如果指令解码器113检测到常量扩展时隙0或常量扩展时隙1,那么其针对对应于检测到的常量扩展时隙的指令进一步检查所述执行包内的其它指令。当对应指令具有等于1的常量扩展位(e位1307)时,进行常量扩展。
[0118]
图17为说明可在处理器100中实施的常量扩展逻辑的框图1700。图17假设指令解码器113检测到同一执行包中的常量扩展时隙和对应指令。指令解码器113将来自常量扩展时隙的27个扩展位(位字段1601)和来自对应指令的5个常量位(位字段1304)供应到串接器1701。串接器1701由这两个部分形成单个32位字。在所说明的实施例中,来自常量扩展时隙的27个扩展位(位字段1601)为最高有效位,且5个常量位(位字段1305)为最低有效位。将这一组合式32位字供应到多路复用器1702的一个输入。来自对应指令字段1305的5个常量位将第二输入供应到多路复用器1702。多路复用器1702的选择受常量扩展位的状态控制。如果常量扩展位(e位1307)为1(经扩展),那么多路复用器1702选择串接的32位输入。如果常量扩展位为0(未扩展),那么多路复用器1702从对应指令字段1305选择5个常量位。多路复用器1702将这一输出供应到符号扩展单元1703的输入。
[0119]
符号扩展单元1703从来自多路复用器1703的输入形成最终操作数值。符号扩展单元1703接收控制输入标量/向量和数据大小。标量/向量输入指示对应指令是标量指令还是向量指令。在这一实施例中,数据路径侧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可仅进行标量指令。数据大小可为8位(字节b)、16位(半字h)、32位(字w)、64位(双字d)、四字(128位)数据或半向量(256位)数据。
[0120]
表2列出针对各种选项的符号扩展单元1703的操作。
[0121]
表2
[0122][0123]
如上文结合图13所描述,常量扩展时隙0和常量扩展时隙1两者可包含用以限定执行包的p位。在一个实例实施例中,如在条件码扩展时隙的情况下,常量扩展时隙0和常量扩
展时隙1的位0可提供p位。假设常量扩展时隙0和常量扩展时隙1的p位始终编码为1(并行执行),那么常量扩展时隙0和常量扩展时隙1都不应在执行包的最后一个指令时隙中。
[0124]
在一些实施例中,执行包可包含常量扩展时隙0或1和多于一个对应指令标记常量扩展(e位=1)。对于常量扩展时隙0,这将意味着执行包中的l1单元221指令、d1单元225指令中的数据、s2单元242指令、d2单元226指令中的偏移、m2单元243指令或n2单元244指令中的多于一个的e位为1。对于常量扩展时隙1,这将意味着执行包中的l2单元241指令、d2单元226指令中的数据、s1单元222指令、d1单元225指令中的偏移、m1单元223指令或n1单元224指令中的多于一个的e位为1。在这种情况下,在一个实施例中,指令解码器113可确定这一情况为无效和不支持的操作。在另一实施例中,可用应用于每一对应功能单元指令标记的常量扩展的常量扩展时隙的扩展位支持这一组合。
[0125]
特殊向量断言指令使用断言寄存器堆234中的寄存器来控制向量运算。在当前实施例中,所有simd向量断言指令对选定数据大小进行操作。数据大小可包含字节(8位)数据、半字(16位)数据、字(32位)数据、双字(64位)数据、四字(128位)数据和半向量(256位)数据。断言寄存器的每一位控制是否对数据的对应字节进行simd操作。p单元246的操作准许基于多于一个向量比较的各种复合向量simd操作。举例来说,可使用两个比较进行范围确定。候选向量与具有打包在第一数据寄存器内的范围的最小值的第一向量参考相比较。候选向量与具有打包在第二数据寄存器内的范围的最大值的第二参考向量进行第二比较。两个所得断言寄存器的逻辑组合将准许向量条件性操作以确定候选向量的每一数据部分在范围内还是超出范围。
[0126]
l1单元221、s1单元222、l2单元241、s2单元242和c单元245通常在单指令多数据(simd)模式中操作。在这一simd模式中,将相同指令应用于来自两个操作数的打包数据。每一操作数保存安置于预定时隙中的多个数据元素。通过数据边界处的进位控制来启用simd操作。这种进位控制使得能够对不同数据宽度进行操作。
[0127]
图18说明进位控制。and门1801接收操作数宽算术逻辑单元内的位n的进位输出(对于标量数据路径侧a 115功能单元64个位且对于向量数据路径侧b 116功能单元512个位)。and门1801还接收下文将进一步描述的进位控制信号。将and门1801的输出供应到操作数宽算术逻辑单元的位n 1的进位输入。例如and门1801的and门安置在可能的数据边界处的每一对位之间。举例来说,对于8位数据,这种and门将处于位7与8、位15与16、位23与24等之间。每一这种and门接收对应进位控制信号。如果数据大小为最小值,那么每一进位控制信号为0,从而有效地阻挡邻近位之间的进位传输。如果选定数据大小需要两个算术逻辑单元区段,那么对应进位控制信号为1。下表3展示在例如由向量数据路径侧b 116功能单元使用的512位宽操作数的情况下的实例进位控制信号,所述操作数可划分成8个位、16个位、32个位、64个位、128个位或256个位的区段。在表3中,上部32个位控制上部位(位128到511)进位,且下部32个位控制下部位(位0到127)进位。不需要控制最高有效位的进位输出,因此仅要求63个进位控制信号。
[0128]
表3
[0129][0130]
通常对为2的整数幂(2n)的数据大小进行操作。然而,这一进位控制技术不限于2的整数幂。所属领域的技术人员将理解如何将这一技术应用于其它数据大小和其它操作数宽度。
[0131]
处理器100包含用以进行经由d1单元225或d2单元226中的一个实施的表查找操作的专用指令。用于这些表查找操作的表映射到一级数据高速缓存123可直接寻址存储器中。这种表/高速缓存配置的实例描述于标题为“包含高速缓存和可直接寻址静态随机存取存储器的统一存储器系统架构”的美国专利第6,606,686号中。这些表可通过正常存储器操作通过专用lutinit指令(下文描述)或仅普通存储指令例如经由直接存储器存取(dma)端口加载到含有所述表的存储器空间。在一个实例实施例中,处理器100支持至多4个单独的并行查找表集合,且在集合内,至多16个表可与字节、半字或字元素大小并行地查找。在这一实施例中,专用于直接寻址的存储器的一级数据高速缓存123的至少部分具有16个组。这准许对16个存储器位置的并行存取且支持每表集合至多16个表。
[0132]
这些查找表用独立指定的基址和索引地址来存取。查找表基址寄存器(ltbr)指定用于每一并行表集合的基址。每一查找表指令含有识别将针对所述指令使用哪个基址寄存器的集合编号。基于一级数据高速缓存123的可直接寻址部分的使用,每一基址应与一级数据高速缓存123的高速缓存行大小对准。在一个实施例中,高速缓存行大小可为128个字节。
[0133]
用于每一并行表集合的集合的查找表配置寄存器控制去往对应表集合的信息。图19说明实例查找表配置寄存器1900的数据字段。提升字段1901(位24和25)在将元素存储到向量寄存器中后即刻设定提升的类型。如表4中所示对提升字段1901进行解码。
[0134]
表4
[0135]
提升描述00无提升012x提升104x提升118x提升
[0136]
为00的字段1901译码标示无提升。为01的字段1901译码标示2x提升。为10的字段1901译码标示4x提升。为11的字段1901译码标示8x提升。在一个实例实施例中,所提升的数据限于至多双字大小(64个位)的数据大小。因此,在这种实施例中:2x提升对字节(从字节
(8位)提升到半字(16位))、半字(从半字(16位)提升到字(32位))和字(从字(32位)提升到双字(64位))的数据元素大小有效;4x提升对字节(从字节(8位)提升到字(32位))和半字(从半字(16位)提升到双字(64位))的数据元素大小有效;且8x提升仅对字节(从字节(8位)提升到双字(64位))的数据元素大小有效。将在下文描述提升。
[0137]
表大小字段1902(位16到23)设定表大小。如表5中所示对表大小字段1902进行解码。
[0138]
表5
[0139][0140]
存储在对应查找表基址寄存器中的表基址必须与查找表配置寄存器中指定的表大小对准。
[0141]
权重大小(wsize)字段1903(位11到13)指示用于加权直方图操作的源寄存器中的权重值的大小,其在下文中进一步详细描述。如表6中所示对权重大小字段1903进行解码。
[0142]
表6
[0143][0144]
内插字段1904(位8到10)指示响应于查找表读取指令而写入到目的地寄存器的连续元素的数目,其在下文进一步详细描述。如表7中所示对内插字段1904进行解码。
[0145]
表7
[0146]
内插描述000无内插,仅写入每表的带索引的元素001每表返回2个元素010每表返回4个元素011每表返回8个元素100-111保留
[0147]
为000的内插字段1904译码标示无内插,其中仅将每表的带索引的元素从查找表写入到目的地寄存器。为001的内插字段1904译码标示内插2个元素,其中将每表的带索引的元素和额外邻近元素从查找表写入到目的地寄存器中。为010的内插字段1904译码标示内插4个元素,其中将每表的带索引的元素和额外邻近的3个元素从查找表写入到目的地寄存器中。为011的内插字段1904译码标示内插8个元素,其中将每表的带索引的元素和额外邻近的7个元素从查找表写入到目的地寄存器中。在一个实例实施例中,内插字段1904(与表数目字段1908的数目结合,下文描述)无法超出可由l1d 123返回的元素的最大数目,其在一个实例中为16个元素。因此,在这种实施例中,当表数目字段1908指示16个表时,无内插是可能的;当表数目字段1908指示8个表时,2元素内插的最大值是可能的;当表数目字段1908指示4个表时,4元素内插的最大值是可能的;且当表数目字段1908指示2个表或1个表时,8元素内插的最大值是可能的。
[0148]
饱和(sat)字段1905(位7)指示是否响应于直方图操作而将直方图仓条目饱和到最小/最大值,其在下文进一步详细描述。如果饱和字段1905为1,那么将直方图仓条目饱和到元素数据类型的最小/最大值。举例来说,无符号字节饱和到[0,0xff];有符号字节饱和到[0x80,0x7f];无符号半字饱和到[0,0xffff];有符号半字饱和到[0x8000,0x7fff];无符号字饱和到[0,0xffff ffff];且有符号字饱和到[0x8000 0000,0x7fff ffff]。如果饱和字段1905为0,那么直方图仓条目并不饱和到元素数据类型的最小/最大值,且替代地将在分别递增或递减超出最小值或最大值时回绕。
[0149]
有符号字段1906(位6)指示处理器100是将所调用查找表元素视为有符号整数还是无符号整数。如果有符号字段1906为1,那么处理器100将查找表元素视为有符号整数。如果有符号字段1906为0,那么处理器100将查找表元素视为无符号整数。
[0150]
元素大小(esize)字段1907(位3到5)指示查找表元素大小。如表8中所示对元素大小字段1907进行解码。
[0151]
表8
[0152][0153]
表数目(ntbl)字段1908(位0到2)指示待并行查找的表的数目。如表9中所示对表数目字段1908进行解码。
[0154]
表9
[0155][0156]
查找表启用寄存器2000指定针对特定表集合准许的操作的类型。这在图20中说明。如图20中所示,这一实例采用单个寄存器中的字段来控制四个表集合中的对应一个。字段2001控制表集合3。字段2002控制表集合2。字段2003控制表集合1。字段2004控制表集合0。如表10中所示分别对表启用字段2001、2002、2003和2004进行解码。
[0157]
表10
[0158]
表启用描述00无查找表操作01允许读取操作10保留11允许读取和写入操作
[0159]
如果表集合字段为01,那么准许来自对应查找表基址寄存器和对应查找表配置寄存器的读取操作。如果表集合字段为11,那么准许来自对应查找表基址寄存器和对应查找表配置寄存器的读取操作且准许对对应查找表基址寄存器和对应查找表配置寄存器的写入操作。如果表集合字段为00,那么不准许查找表操作。
[0160]
每一查找表指令指定向量寄存器作为操作数。将这一向量寄存器视为对应于指令的查找表操作的32位查找表索引集合。表11展示基于由对应查找表配置寄存器的表数目字段1908控制的表集合的表数目对向量操作数寄存器中的向量索引的译码。
[0161]
表11
[0162]
向量寄存器位索引1个表2个表4个表8个表16个表vx[31:0]索引0有效有效有效有效有效vx[63:32]索引1-有效有效有效有效vx[95:64]索引2
‑‑
有效有效有效vx[127:96]索引3
‑‑
有效有效有效vx[159:128]索引4
‑‑‑
有效有效vx[191:160]索引5
‑‑‑
有效有效vx[223:192]索引6
‑‑‑
有效有效vx[255:224]索引7
‑‑‑
有效有效vx[287:256]索引8
‑‑‑‑
有效vx[319:288]索引9
‑‑‑‑
有效
vx[351:320]索引10
‑‑‑‑
有效vx[383:352]索引11
‑‑‑‑
有效vx[415:384]索引12
‑‑‑‑
有效vx[447:416]索引13
‑‑‑‑
有效vx[479:448]索引14
‑‑‑‑
有效vx[511:480]索引15
‑‑‑‑
有效
[0163]
取决于对应查找表配置寄存器1900的表数目字段1908中指定的表数目,向量寄存器位指定各种索引。用于查找表操作的第一表内的表元素的地址为存储在基址寄存器中的基址加上由向量寄存器值的位0到位31指定的索引。用于查找表操作的第二表(假设至少两个表由表数目字段1908指定)内的表元素的地址为存储在基址寄存器中的基址加上由向量寄存器的位32到63指定的索引。类似地,向量寄存器指定所指定的每一表的偏移。
[0164]
图21说明当对应查找表配置寄存器1900指定所述表集合的一个表时的查找表组织。一级数据高速缓存123包含可直接寻址存储器的一部分,包含查找表下方的部分2111、查找表和查找表上方的部分2112。对应查找表集合基址寄存器2101指定表集合的开始。在图21的实例中,表数目字段1908指定单个表。分配给表集合的存储器的结束由表大小字段1902指定。索引源寄存器2102指定用于对表进行寻址的单个偏移(索引ia)。如图21中所示,单个表采用存储器的所有16个组。
[0165]
图22说明当对应查找表配置寄存器1900指定用于所述表集合的两个表时的查找表组织。查找表集合基址寄存器2101指定表集合的开始。表数目字段1908指定两个表。分配给表集合的存储器的结束由表大小字段1902指定。索引源寄存器2102指定用于对表进行寻址的两个偏移。第一索引ia对表1进行寻址且第二索引ib对表2进行寻址。表1数据存储在存储器组1到8中。表2数据存储在存储器组9到16中。
[0166]
图23说明当对应查找表配置寄存器1900指定所述表集合的四个表时的查找表组织。查找表集合基址寄存器2101指定表集合的开始。表数目字段1908指定四个表。分配给表集合的存储器的结束由表大小字段1902指定。索引源寄存器2102指定用于对表进行寻址的四个偏移。第一索引ia对表1进行寻址,第二索引ib对表2进行寻址,第三索引ic对表3进行寻址,且第四索引id对表4进行寻址。表1数据存储在存储器组1到4中。表2数据存储在存储器组5到8中。表3数据存储在存储器组9到12中。表4数据存储在存储器组13到16中。
[0167]
图24说明当对应查找表配置寄存器1900指定用于所述表集合的八个表时的查找表组织。查找表集合基址寄存器2101指定表集合的开始。表数目字段1908指定八个表。分配给表集合的存储器的结束由表大小字段1902指定。索引源寄存器2102指定用于对表进行寻址的八个偏移。第一索引ia对表1进行寻址,第二索引ib对表2进行寻址,第三索引ic对表3进行寻址,第四索引id对表4进行寻址,第五索引ie对表5进行寻址,第六索引if对表6进行寻址,第七索引ig对表7进行寻址,且第八索引ih对表8进行寻址。表1数据存储在存储器组1和2中。表2数据存储在存储器组3和4中。表3数据存储在存储器组5和6中。表4数据存储在存储器组7和8中。表5数据存储在存储器组9和10中。表6数据存储在存储器组11和12中。表7数据存储在存储器组13和14中。表8数据存储在存储器组15和16中。
[0168]
图25说明当对应查找表配置寄存器1900指定用于所述表集合的十六个表时的查找表组织。查找表集合基址寄存器2101指定表集合的开始。表数目字段1908指定十六个表。
分配给表集合的存储器的结束由表大小字段1902指定。索引源寄存器2102指定用于对表进行寻址的十六个偏移。第一索引ia对表1进行寻址,第二索引ib对表2进行寻址,第三索引ic对表3进行寻址,第四索引id对表4进行寻址,第五索引ie对表5进行寻址,第六索引if对表6进行寻址,第七索引ig对表7进行寻址,第八索引ih对表8进行寻址,第九索引ii对表9进行寻址,第十索引ij对表10进行寻址,第十一索引ik对表11进行寻址,第十二索引il对表12进行寻址,第十三索引im对表13进行寻址,第十四索引in对表14进行寻址,第十五索引io对表15进行寻址,且第十六索引ip对表16进行寻址。表1数据存储在存储器组1中。表2数据存储在存储器组2中。表3数据存储在存储器组3中。表4数据存储在存储器组4中。表5数据存储在存储器组5中。表6数据存储在存储器组6中。表7数据存储在存储器组7中。表8数据存储在存储器组8中。表9数据存储在存储器组9中。表10数据存储在存储器组10中。表11数据存储在存储器组11中。表12数据存储在存储器组12中。表13数据存储在存储器组13中。表14数据存储在存储器组14中。表15数据存储在存储器组15中。表16数据存储在存储器组16中。
[0169]
下文为一个实例实施例中的查找表读取(lutrd)指令的形式。
[0170]
lutrd tbl_index,tbl_set,dst
[0171]
tbl_index为通过寄存器编号指定(例如一般向量寄存器堆231内的)向量寄存器的指令操作数。这解译为如表11中所示的索引编号。tbl_set为指定在指令中采用的表集合的编号[0:3]。这一所命名的表集合编号指定:存储表基址的对应查找表基址寄存器,其可为标量寄存器或向量寄存器;对应查找表配置寄存器(图19),其可为标量寄存器或向量寄存器;和查找表启用寄存器(图20)的对应操作部分,其可为标量寄存器或向量寄存器。对应于所命名的表集合的查找表基址寄存器确定表集合的基址。由tbl_index命名的向量寄存器的索引为从这一表集合基址的偏移。对应于所命名表集合的查找表配置寄存器确定:提升模式(表4);分配给表大小的存储器的量(表5);直方图操作的权重大小(表6);查找表读取操作的n元素内插(表7);将值视为有符号还是无符号;直方图仓条目是否饱和到最小/最大值;数据元素大小(表8);和表集合中的表数目(表9)。dst为由寄存器编号将(例如一般向量寄存器堆231内的)向量寄存器指定为表查找操作的目的地的指令操作数。从如由这些其它参数所指定的表调用的数据打包和存储在这一目的地寄存器中。提升过程并不添加任何性能代偿。
[0172]
图26说明本发明的查找表读取指令的操作的实例。在图26中说明的实例中,对应查找表配置寄存器(1900)指定四个并行表、字节(8个位)的数据元素大小,且无提升。为了进行查找表操作,对应于选定表集合的查找表启用寄存器字段(寄存器2000中)必须启用读取操作(01)或读取和写入操作(11)两者。
[0173]
对应于指定表集合的查找表基址寄存器2101存储查找表集合的基址,如图26中示意性地说明。表数据存储在配置为可直接存取存储器的一级数据高速缓存123的一部分中,例如在标题为“包含高速缓存和可直接寻址静态随机存取存储器的统一存储器系统架构”的美国专利第6,606,686号中所描述。
[0174]
图26中所说明的实例具有四个表:表1 2611;表2 2612;表3 2613;和表4 2614。如表11中所示,具有这些选定选项的这一指令将存储在向量源索引寄存器2102中的数据视为指定表偏移的4个32位字段的集合。第一字段(位vx[31:0])将索引ia存储到第一表2611中。在这一实例中,这索引到元素a5。第二字段(位vx[63:32])将索引ib存储到第二表2612中。
在这一实例中,这索引到元素b1。第三字段(位vx[95:64])将索引ic存储到第三表2613中。在这一实例中,这索引到元素c8。第四字段(位vx[127:96])将索引id存储到第四表2614中。在这一实例中,这索引到元素d10。各种索引为从用于表集合的基址到指定的数据元素的存储器地址偏移。在这一查找表读取指令的操作中,表1 2611(a5)中的带索引的数据元素存储在目的地寄存器2120中的第一数据时隙中。表2 2612(b1)中的带索引的数据元素存储在目的地寄存器2120中的第二数据时隙中。表3 2613(c8)中的带索引的数据元素存储在目的地寄存器2120中的第三数据时隙中。表4 2614(d10)中的带索引的数据元素存储在目的地寄存器2120中的第四数据时隙中。在这一实例实施方案中,目的地寄存器2120的其它数据时隙以零填充。
[0175]
查找表读取指令将从表调用的数据直接映射到目的地寄存器2120的向量通路。指令将较早元素映射到较低通路编号,且将较晚元素映射到较高通路编号。查找表读取指令以增大的通路次序在向量中沉积元素。查找表读取指令用从表调用的元素填充目的地寄存器2120的每一向量通路。如果调用的数据不等于向量长度,那么查找表读取指令用零填补目的地寄存器2120的过量通路。
[0176]
当启用提升模式(对应查找表配置寄存器1900的提升字段1901≠00)时,查找表读取指令将每一调用的数据元素提升到较大大小。图27说明实例实施例中的查找表读取指令的操作的实例。除启用2x提升(提升字段1901为01)外,图27说明类似于图26的操作。如在图26中,向量源索引寄存器2102的四个索引中的每一个从对应表调用数据元素。图27说明这些以与图26中不同的方式置于目的地寄存器2120中。每一调用的数据元素连同相等地设定大小的扩展一起存储在目的地寄存器2120中的时隙中。这一扩展对应于对应查找表配置寄存器的有符号字段1906的有符号/无符号指示而形成。如果有符号字段1906指示无符号(0),那么扩展以零填充。如果有符号字段1906指示有符号(1),那么扩展时隙填充有与对应的数据元素的最高有效位(符号位)相同的值。这将数据元素视为有符号整数。
[0177]
图28说明实例实施例中的查找表读取指令的操作的实例。除启用4x提升(提升字段1901为10)外,图28说明类似于图26的操作。向量源索引寄存器2102的四个索引中的每一个调用来自每一表的数据元素。图28说明这些以与图26中不同的方式置于目的地寄存器2120中。每一调用的数据元素连同三个相等地设定大小的扩展一起存储在目的地寄存器2120中的时隙中。这些扩展对应于对应查找表配置寄存器的签名字段1906的有符号/无符号指示而形成。
[0178]
所属领域的技术人员将理解,将类似地实施其它数据元素大小(例如,半字、字)。另外,将类似地实现其它提升因数,例如8x的提升因数。所属领域的技术人员将理解如何将本说明书中所描述的原理应用于选定表集合内的其它数目的查找表。
[0179]
图29a和29b共同说明提升的实施方案的实例实施例。临时寄存器2950接收从一级数据高速缓存123调用的表数据。临时寄存器2950包含布置在16个1字节块通路1到通路16中的16个字节。应注意,这些通路的长度各自等于可在元素大小字段1907中指定的数据大小的最小值。在这一实例中所述最小值为1个字节/8个位。扩展元素2901到2908形成到相应通路1到8的扩展。多个多路复用器2932到2946将来自临时寄存器2950的输入通路耦合到目的地寄存器2120的对应通路。并非临时寄存器2950的所有输入通路都耦合到每一多路复用器2932到2946。许多多路复用器2932到2946还接收扩展输入和一或多个扩展元素2901到
2908。应注意,不存在供应输出寄存器2120的通路1的多路复用器。在这一所说明的实施例中,目的地寄存器2120的通路1始终由临时寄存器2950的通路1供应。
[0180]
图30说明图29a的示范性扩展元素n。临时寄存器2950的数据元素n的符号位(s)供应对应扩展多路复用器3001的一个输入。有符号整数的符号位为如图30中所示的值的最高有效位。常量0供应多路复用器3001的第二输入。多路复用器3001和对应于其它输入数据元素的其它类似多路复用器由有符号/无符号信号控制。这一有符号/无符号信号基于对应查找表配置寄存器1900的有符号字段1906。如果有符号字段1906为0,那么多路复用器3001(和用于其它输入通路的对应多路复用器)选择常量0输入。如果有符号字段1906为1,那么多路复用器3001(和用于其它输入通路的对应多路复用器)选择符号位输入。将选定扩展供应到扩张元素3002。扩张元素3002将由多路复用器3001选择的位扩张到通路大小。在这一实例中,选择等于1字节的最小表数据元素大小的通路大小。对于等于通路大小且其中有符号字段1906为0的指定的表数据大小,下一数据时隙填充有0从而实现零扩展。如果有符号字段1906为1,那么下一数据时隙填充有数据元素的符号位从而实现符号扩展。多路复用器2932到2946选择对应于指定的表数据元素大小的恰当扩展。如果选定表数据元素大小为半字,那么控制多路复用器2932到2946以从交替的扩展元素选择扩展。如果选定表数据元素大小为字,那么控制多路复用器2932到2946以从每一第四扩展元素选择扩展。
[0181]
多路复用器2932到2946由图31中所说明的多路复用器控制编码器3110控制。多路复用器控制编码器3110接收元素数据大小输入(元素大小字段1907)、提升指示(提升字段1901)且产生用于多路复用器2932到2946的对应控制信号。并非所有输入字节都可供应每一输出字节。表12说明这一控制。表12展示用于实例实施例中的各种数据大小和提升模式的目的地寄存器2120的16个通路中的每一个的源数据。
[0182]
表12
[0183] 16151413121110987654321
‑‑
1x16151413121110987654321b-2xe88e77e66e55e44e33e22e11b-4xe4e4e44e3e3e33e2e2e22e1e1e11b-8xe2e2e2e2e2e2e22e1e1e1e1e1e1e11hw-2xe8e887e6e665e4e443e2e221hw-4xe4e4e4e4e4e443e2e2e2e2e2e221w-2xe8e8e8e88765e4e4e4e44321
[0184]
应注意,在不考虑选定数据大小或提升因数的情况下,目的地寄存器2120的通路1始终与临时寄存器2950的通路1相同。专用于通路1的列包含所有1且图29a说明临时寄存器2950的通路1与目的地寄存器2120之间的直线连接。表12的第一行展示对于无提升(1x),在不考虑选定表数据元素数据大小的情况下,目的地寄存器2120的每一通路与临时寄存器2950相同。对于字节的数据大小和提升因数2(b-2x),多路复用器2932选择通路1的扩展(e1),多路复用器2933选择输入通路2的数据,多路复用器2934选择通路2的扩展(e2),多路复用器2935选择输入通路3的数据,多路复用器2936选择通路3的扩展(e3)等。对于字节的数据大小和提升因数4(b-4x),多路复用器2932到2934选择通路1的扩展(e1),多路复用器2935选择输入通路2的数据且多路复用器2936到2938选择通路2的扩展(e2),多路复用器
2939选择输入通路3的数据,多路复用器2940到2942选择通路3的扩展(e3)等。对于字节的数据大小和提升因数8(b-8x),多路复用器2932到2938选择通路1的扩展(e1),多路复用器2939选择输入通路2的数据,且多路复用器2940到2446选择通路2的扩展(e2)。对于半字的数据大小和提升因数2(hw-2x),多路复用器2932选择通路2的数据,多路复用器2933和2934选择通路2的扩展(e2),多路复用器2935选择通路3的数据,多路复用器2936选择通路4的数据,多路复用器2937和2938选择通路4的扩展(e4)等。对于半字的数据大小和提升因数4(hw-4x),多路复用器2932选择通路2的数据,多路复用器2933到2938选择通路2的扩展(e2),多路复用器2939选择通路3的数据,多路复用器2940选择通路4的数据,且多路复用器2941和2946选择通路4的扩展(e4)。对于字的数据大小和提升因数2(w-2x),多路复用器2932选择通路2的数据,多路复用器2933选择通路3的数据,多路复用器2934选择通路4的数据,多路复用器2935到2938选择通路4的扩展(e4),多路复用器2939选择通路5的数据,多路复用器2940选择通路6的数据,多路复用器2941选择通路7的数据,多路复用器2942选择通路8的数据且多路复用器2943到2946选择通路8的扩展。如先前所描述,这些都是本实例中所支持的数据大小和提升因数的组合。
[0185]
图32说明本说明书的查找表读取指令的操作的另一实例。在图32中所说明的实例中,对应查找表配置寄存器(1900)指定四个并行表、字(32个位)的数据元素大小和2元素内插。为了进行查找表操作,对应于选定表集合的查找表启用寄存器字段(寄存器2000中)必须启用读取操作(01)或读取和写入操作(11)两者。
[0186]
如上,对应于指定表集合的查找表基址寄存器2101存储查找表集合的基址,如图32中示意性地说明。表数据存储在一级数据高速缓存123的一部分中,所述一级数据高速缓存123配置为可直接存取的存储器。
[0187]
图32中所说明的实例具有四个表:表1 2611;表2 2612;表3 2613;和表4 2614。如表11中所示,具有这些选定选项的这一指令将存储在向量源索引寄存器2102中的数据视为指定表偏移的4个32位字段的集合。第一字段(位vx[31:0])将索引ia存储到第一表2611中。在这一实例中,这索引到元素a5。第二字段(位vx[63:32])将索引ib存储到第二表2612中。在这一实例中,这索引到元素b1。第三字段(位vx[95:64])将索引ic存储到第三表2613中。在这一实例中,这索引到元素c8。第四字段(位vx[127:96])将索引id存储到第四表2614中。在这一实例中,这索引到元素d10。各种索引为从用于表集合的基址到指定的数据元素的存储器地址偏移。
[0188]
当启用内插模式(对应查找表配置寄存器1900的内插字段1904≠00)时,查找表读取指令返回与每表的带索引的元素相比的一或多个额外数据元素。图32说明实例实施例中的查找表读取指令的操作的实例。除启用2元素内插(内插字段1904为001)外,图32说明类似于上文所描述的图26的操作。如在图26中,向量源索引寄存器2102的四个索引中的每一个从对应表调用数据元素。图32说明这些以与图26中不同的方式置于目的地寄存器2120中。特定来说,针对四个索引中的每一个返回2个数据元素:由特定索引和下一邻近数据元素调用的数据元素(在不考虑行边界的情况下)。举例来说,如果由特定索引调用的数据元素为a0,那么下一邻近数据元素为a1;如果由特定索引调用的数据元素为a7,那么下一邻近数据元素为a8,但a8在不同行上。
[0189]
每一调用的数据元素存储在目的地寄存器2120中的时隙中。在启用2元素内插的
这一查找表读取指令的操作中,表1 2611(a5)中的带索引的数据元素和其下一邻近数据元素(a6)存储在目的地寄存器2120中的第一和第二数据时隙中。表2 2612(b1)中的带索引的数据元素和其下一邻近数据元素(b2)存储在目的地寄存器2120中的第三和第四数据时隙中。表3 2613(c8)中的带索引的数据元素和其下一邻近的数据元素(c9)存储在目的地寄存器2120中的第五和第六数据时隙中。表4 2614(d10)中的带索引的数据元素和其下一邻近数据元素(d11)存储在目的地寄存器2120中的第七和第八数据时隙中。在这一实例实施方案中,目的地寄存器2120的其它数据时隙以零填充。
[0190]
图33说明实例实施例中的查找表读取指令的操作的实例。除启用4元素内插(内插字段1904为010)外,图33说明类似于图32的操作。如在图32中,向量源索引寄存器2102的四个索引中的每一个调用来自每一表的数据元素。图33说明这些以与图32中不同的方式置于目的地寄存器2120中。特定来说,针对四个索引中的每一个返回4个数据元素:由特定索引和下3个邻近数据元素调用的数据元素(在不考虑行边界的情况下)。举例来说,如果由特定索引调用的数据元素为a0,那么下3个邻近数据元素为a1到a3;如果由特定索引调用的数据元素为a7,那么下3个邻近数据元素为a8到a10,但a8到a10在不同行上。
[0191]
每一调用的数据元素存储在目的地寄存器2120中的时隙中。在启用4元素内插的这一查找表读取指令的操作中,表1 2611(a5)中的带索引的数据元素和其下3个邻近数据元素(a6到a8)存储在目的地寄存器2120中的前4个数据时隙中。表2 2612(b1)中的带索引的数据元素和其下3个邻近数据元素(b2到b4)存储在目的地寄存器2120中的第二4个数据时隙中。表3 2613(c8)中的带索引的数据元素和其下3个邻近数据元素(c9到c11)存储在目的地寄存器2120中的第三4个数据时隙中。表4 2614(d10)中的带索引的数据元素和其下3个邻近数据元素(d11到d13)存储在目的地寄存器2120中的第四4个数据时隙中。在这一实例中,在数据元素大小为字的情况下,16个调用的数据元素完全填充目的地寄存器2120;然而,在数据元素大小实际上为半字或字节的其它类似实例中,16个调用的数据元素将不完全填充目的地寄存器2120,且目的地寄存器2120的数据时隙的剩余部分以零填充。
[0192]
所属领域的技术人员将理解如何将本说明书中所描述的原理应用于选定表集合内的其它数目的查找表。举例来说,当表的数目为4且以图33中所示的方式将所述表布置在一级数据高速缓存123中时,8元素内插是不可能的,这是由于每次仅可存取每存储器组的一个元素。然而,当表的数目为2或1时,8元素内插是可能的。
[0193]
图34说明上文所描述的内插的实施方案的实例实施例。在图34的实例中,中间寄存器3402接收从一级数据高速缓存123调用的表数据。在这一实例中,含有表2611、2612、2613、2614的一级数据高速缓存123配置成在不考虑由查找读取指令所请求的数据的情况下提供来自其16个组(上文所描述)中的每一个的数据字。在不考虑由查找表配置寄存器1900指定的内插或其它变量的情况下,提供到中间寄存器3402的数据在其出现于一级数据高速缓存123的16个组中时经过排序。
[0194]
继续图33的实例,其中查找表读取指令包含4元素内插,中间寄存器3402含有四个带索引的数据元素(例如,a5、b1、c8、d10)中的每一个和来自所述带索引的数据元素中的每一个的下3个邻近数据元素。然而,如上文所描述,中间寄存器3402含有在其出现于一级数据高速缓存123的16个组中时经过排序的这些数据元素,且因此不一定按数据元素的数字次序,如以上图33中的目的地寄存器2120中所示。
[0195]
举例来说,来自表1 2611(a5到a8)的四个元素以次序a8、a5、a6、a7出现,因为这是那些元素在一级数据高速缓存123的前四个组中出现的次序。另一方面,来自表3 2613(c8到c11)的四个元素依次出现于中间寄存器3402中,这是由于元素c8已经在一级数据高速缓存123中的对应于表3 2613的最低组中。
[0196]
为了便于写入到目的地寄存器2120的数据元素的恰当排序(上文相对于图33所描述),本说明书的实例包含多级蝶形单元3404,其接收中间寄存器3402作为输入且产生写入到目的地寄存器2120的输出。蝶形单元3404配置成根据各种控制信号将中间寄存器3402的位重新排序。这些控制信号包含(但不一定限于)对应于表2611、2612、2613、2614中的每一个中的带索引的数据元素的地址的所有或一部分。举例来说,对索引3401(或带索引的数据元素的地址的部分)进行解码指示表内的带索引的数据元素的位置,且因此是否可能需要重新排序。在本实例中,带索引的数据元素a5的地址指示a5不与一级数据高速缓存123的对应于表1 2611的最低组对准,且因此应重新排序中间寄存器3402的对应于表1 2611的位。另一方面,带索引的数据元素c8的地址指示c8与一级数据高速缓存123的对应于表3 2613的最低组对准,且因此不需要重新排序中间寄存器3402的对应于表3 2613的位。
[0197]
为了进一步便于写入到目的地寄存器2120的数据元素的恰当排序,多级蝶形单元3404还接收查找表配置寄存器1900的所有或部分作为控制信号。特定来说,内插字段1904、元素大小字段1907和表数目字段1908可影响多级蝶形单元3404的功能。虽然图34意在说明在图34中所示的实例中,蝶形单元3404如何处理来自查找表2611、2612、2613、2614的数据元素集合,但蝶形单元3404可在查找表配置寄存器1900中的数个不同可能设定中处理数据元素。下文提供蝶形单元3404功能性的额外实例。
[0198]
在第一实例中,提供到多级蝶形网络3404的来自查找表配置寄存器1900的控制信号包含指示字的大小的元素大小字段1907、指示无内插的内插字段1904和指示两个表的表数目字段1908。在这一实例中,例如根据图22中所示的两表实施例,多级蝶形网络3404从一级数据高速缓存123的组1到8和组9到16的每一群组接收一个带索引的元素。因此,响应于来自查找表配置寄存器1900的这些控制信号,多级蝶形网络3404将来自组1到8和组9到16的每一群组的带索引的元素分别置于目的地寄存器2120的前两个字大小通路中。在一个实例中,目的地寄存器2120的其余通路以零填充,而在其它实例中,目的地寄存器的其余通路可以不同方式填充。
[0199]
在第二实例中,提供到多级蝶形网络3404的来自查找表配置寄存器1900的控制信号包含指示字的大小的元素大小字段1907、指示2元素内插的内插字段1904和指示两个表的表数目字段1908。在这一实例中,多级蝶形网络3404从一级数据高速缓存123的组1到8和组9到16的每一群组接收一个带索引的元素和下一邻近元素(例如,根据上文所描述的2元素内插)。因此,响应于来自查找表配置寄存器1900的这些控制信号,多级蝶形网络3404将来自组1到8的群组的带索引的元素和下一邻近元素按次序置于目的地寄存器2120的前两个字大小通路中。类似地,多级蝶形网络3404将来自组9到16的群组的带索引的元素和下一邻近元素按次序置于目的地寄存器2120的第二两个字大小通路中。在一个实例中,目的地寄存器2120的其余通路以零填充,而在其它实例中,目的地寄存器的其余通路可以不同方式填充。
[0200]
在第三实例中,提供到多级蝶形网络3404的来自查找表配置寄存器1900的控制信
号包含指示字的大小的元素大小字段1907、指示8元素内插的内插字段1904和指示两个表的表数目字段1908。在这一实例中,多级蝶形网络3404从一级数据高速缓存123的组1到8和组9到16的每一群组接收一个带索引的元素和下7个邻近元素(例如,根据8元素内插)。如上文所描述,下7个邻近元素可回绕到后续行中。因此,响应于来自查找表配置寄存器1900的这些控制信号,多级蝶形网络3404将来自组1到8的群组的带索引的元素和下7个邻近元素按次序置于目的地寄存器2120的前八个字大小通路中。类似地,多级蝶形网络3404将来自组9到16的群组的带索引的元素和下7个邻近元素按次序置于目的地寄存器2120的第二八个字大小通路中。在这一实例中,假设512位目的地寄存器2120,那么所有通路由读取操作填充且因此不需要额外填充。
[0201]
响应于来自查找表配置寄存器1900的控制信号的不同组合的多级蝶形网络3404的上述功能性的扩展应对所属领域的一般技术人员显而易见。举例来说,表数目字段1908的改变影响元素可在写入到目的地寄存器2120之前在其上重新排序的“边界”(例如,指示四个表的表数目字段1908产生组1到4、5到8、9到12和13到16的群组之间的“边界”,而指示八个表的表数目字段1908产生组1到2、3到4、5到6、7到8、9到10、11到12、13到14和15到16的群组之间的“边界”)。作为另一实例,元素大小字段1907的改变影响来自中间寄存器3402的位如何打包到目的地寄存器2120中。
[0202]
下文为一个实例实施例中的查找表写入(lutwr)指令的形式。
[0203]
lutwr tbl_index,tbl_set,write_data
[0204]
tbl_index为通过寄存器编号指定(例如一般向量寄存器堆231内的)向量寄存器的指令操作数。这解译为如以上表11中所示的索引编号。tbl_set为指定在指令中采用的表集合的编号[0:3]。这一所命名的表集合编号指定:存储表基址的对应查找表基址寄存器,其可为标量寄存器或向量寄存器;对应查找表配置寄存器(图19),其可为标量寄存器或向量寄存器;和查找表启用寄存器(图20)的对应操作部分,其可为标量寄存器或向量寄存器。对应于所命名的表集合的查找表基址寄存器确定表集合的基址。由tbl_index命名的向量寄存器的索引为从这一表集合基址的偏移。对应于所命名表集合的查找表配置寄存器确定:提升模式(表4);分配给表大小的存储器的量(表5);直方图操作的权重大小(表6);查找表读取操作的n元素内插(表7);将值视为有符号还是无符号;直方图仓条目是否饱和到最小/最大值;数据元素大小(表8);和表集合中的表数目(表9)。write_data为通过寄存器编号指定(例如一般向量寄存器堆231内的)向量寄存器以提供待写入到查找表的源数据的指令操作数,特定来说,源操作数。如上,在查找表配置寄存器1900中指定表数目、元素的大小和其它参数。
[0205]
图35说明本说明书的查找表写入指令的操作的实例。在图35中所说明的实例中,对应查找表配置寄存器(1900)指定四个并行表和字(32个位)的数据元素大小。为了进行查找表操作,对应于选定表集合的查找表启用寄存器字段(寄存器2000中)必须启用读取和写入操作(11)两者。
[0206]
如上,对应于指定表集合的查找表基址寄存器2101存储查找表集合的基址,如图35中示意性地说明。表数据存储在一级数据高速缓存123的一部分中,所述一级数据高速缓存123配置为可直接存取的存储器。
[0207]
图35中所说明的实例具有四个表:表1 2611;表2 2612;表3 2613;和表4 2614。如
表11中所示,具有这些选定选项的这一指令将存储在向量源索引寄存器2102中的数据视为指定表偏移的4个32位字段的集合。第一字段(位vx[31:0])将索引ia存储到第一表2611中。在这一实例中,这索引到元素a5(例如,a4与a6之间)。第二字段(位vx[63:32])将索引ib存储到第二表2612中。在这一实例中,这索引到元素b1(例如,b0与b2之间)。第三字段(位vx[95:64])将索引ic存储到第三表2613中。在这一实例中,这索引到元素c8(例如,c7与c9之间)。第四字段(位vx[127:96])将索引id存储到第四表2614中。在这一实例中,这索引到元素d10(例如,d9与d11之间)。各种索引为从用于表集合的基址到待写入的指定的数据元素的存储器地址偏移。
[0208]
向量源数据寄存器3502含有待写入到查找表2611、2612、2613、2614的带索引的数据元素的数据。在这一实例中,因为查找表配置寄存器指定为四的表数目和字的元素大小,所以由查找表写入指令利用向量源数据寄存器3502的前四个字,而并未由查找表写入指令利用向量源数据寄存器3502的其余部分。特定来说,将第一字(w1)写入到由索引ia指定的元素或a5;将第二字(w2)写入到由索引ib指定的元素或b1;将第三字(w3)写入到由索引ic指定的元素或c8;且将第四字(w4)写入到由索引id指定的元素或d10。
[0209]
响应于由查找表配置寄存器1900指定的不同参数,上述查找表写入指令的扩展应对所属领域的一般技术人员显而易见。举例来说,表数目字段1908的改变影响由向量源索引寄存器2102指定的索引的数目(例如,如图21至25中所示)。类似地,对元素大小字段1907的改变影响向量源数据寄存器3502的提供待写入到查找表的带索引的数据元素的源数据的部分。
[0210]
下文为一个实例实施例中的查找表初始化(lutinit)指令的形式。
[0211]
lutinit tbl_index,tbl_set,write_data
[0212]
tbl_index、tbl_set和write_data总体上类似于上文相对于查找表写入指令所描述的tbl_index、tbl_set和write_data。如上,在查找表配置寄存器1900中指定表数目、元素的大小和其它参数。不同于仅将源数据写入到每一表(图35的实例中的表2611、2612、2613、2614)中的带索引的元素的查找表写入指令,查找表初始化指令复制源数据以更有效地写入到查找表的较大部分。如由指令名称所表明,当将查找表的元素初始化到特定值时,源数据的这种复制尤其有用。
[0213]
查找表初始化指令指定单个表的源数据(例如,向量源索引寄存器2102仅含有单个索引,例如,在第一字段(位vx[31:0])中)。由向量源数据寄存器3502指定的源数据的大小取决于由查找表配置寄存器1900指定的表数目而变化。响应于查找表初始化指令的执行,一级数据高速缓存123基于由查找表配置寄存器1900指定的表数目在内部复制源数据,且将所得复制数据写入到由向量源索引寄存器2102和查找表基址寄存器2101中的索引值所指定的位置。将复制的数据写入到由向量源索引寄存器2102中的索引值指定的位置以及表集合中的其它表中的每一个中的对应位置。
[0214]
图36a和36b展示由执行示范性查找表初始化指令产生的一级数据高速缓存123的初始化的实例。在图36a的实例中,表数目为16且元素大小为字。以下为示范性查找表初始化指令,其的执行产生一级数据高速缓存123的实例群3604:
[0215]
lutinit d0,0,b0;其中d0=0x00(例如,行0中的元素的索引,一级数据高速缓存123组0),0为指定的表集合,b0=d[63:0]
[0216]
lutinit d1,0,b1;其中d1=0x02(例如,行1中的元素的索引,一级数据高速缓存123组0),0为指定的表集合,b1=d[127:64]
[0217]
lutinit d2,0,b2;其中d2=0x04(例如,行2中的元素的索引,一级数据高速缓存123组0),0为指定的表集合,b2=d[191:128]
[0218]
lutinit d3,0,b3;其中d3=0x06(例如,行3中的元素的索引,一级数据高速缓存123组0),0为指定的表集合,b3=d[255:192]
[0219]
如上文所描述,由向量源数据寄存器3502指定的源数据的大小取决于由查找表配置寄存器1900指定的表数目而变化。在这一实例中,一级数据高速缓存具有1024个位的宽度且存在16个表,且因此每一表为64个位宽。寄存器b0到b3为标量寄存器,还具有64个位的大小,且因此查找表初始化指令利用寄存器b0到b3的全部内容。在另一实例中,源数据寄存器为向量源数据寄存器3502,且因此查找表初始化指令仅利用寄存器的内容的一部分(例如,前64个位)。
[0220]
第一查找表初始化指令使得来自寄存器b0的64个位的源数据写入到表集合0中的16个表中的每一个,开始于由索引0x00指定的位置处(加上来自查找表配置寄存器1900的基址),所述索引0x00为行0中的第一元素。第二查找表初始化指令使得来自寄存器b1的64个位的源数据写入到表集合0中的16个表中的每一个,开始于由索引0x02指定的位置处(加上来自查找表配置寄存器1900的基址),所述索引0x02为行1中的第一元素。第三查找表初始化指令使得来自寄存器b2的64个位的源数据写入到表集合0中的16个表中的每一个,开始于由索引0x04指定的位置处(加上来自查找表配置寄存器1900的基址),所述索引0x04为行2中的第一元素。第四查找表初始化指令使得来自寄存器b3的64个位的源数据写入到表集合0中的16个表中的每一个,开始于由索引0x06指定的位置处(加上来自查找表配置寄存器1900的基址),所述索引0x06为行3中的第一元素。
[0221]
如下文将进一步描述,在图36a的实例中,由于存在16个表且元素大小为字,因此每表每行存在两个字。所准许的索引值(例如,寄存器d0到d3中)对应于每一行的第一元素,且因此还增大二(例如,0x00、0x02、0x04、0x06等)。如果元素大小改为半字,那么每表每行将存在四个半字,且所准许的索引值将增大四(例如,0x00、0x04、0x08、0x0c以此类推)。类似地,如果元素大小改为字节,那么每表每行将存在八个字节,且所准许的索引值将增大八(例如,0x00、0x08、0x10、0x18以此类推)。这一定则在下表13中反映,所述表13提供针对表的每一所支持表数目(表13中的“路(way)”)和元素大小配置的行寻址的实例。可通过连续查找表初始化指令来采用这种行寻址以填入整个查找表,其中后续初始化指令指定正填入的行中的第一元素的索引。
[0222]
表13
[0223][0224]
在图36b的实例中,表数目为1且元素大小为字节。以下为示范性查找表初始化指令,其的执行产生一级数据高速缓存123的实例群3608:
[0225]
lutinit d0,0,vb0;其中d0=0x00(例如,行0中的元素的索引,一级数据高速缓存123组0),0为指定的表集合,vb3=data0[511:0]
[0226]
lutinit d1,0,vb1;其中d1=0x40(例如,行0中的元素的索引,一级数据高速缓存123组8),0为指定的表集合,vb1=data1[511:0]
[0227]
lutinit d2,0,vb2;其中d2=0x80(例如,行1中的元素的索引,一级数据高速缓存123组0),0为指定的表集合,vb2=data2[511:0]
[0228]
lutinit d3,0,vb3;其中d3=0xc0(例如,行1中的元素的索引,一级数据高速缓存123组8),0为指定的表集合,vb3=data3[511:0]
[0229]
如上文所描述,由向量源数据寄存器3502指定的源数据的大小取决于由查找表配置寄存器1900指定的表数目而变化。在这一实例中,一级数据高速缓存123具有1024个位的宽度,且存在具有一个向量的最大宽度或512个位的一个表,且因此一级数据高速缓存123的每一行含有所述表的两个行。由于仅存在一个表,因此不发生复制。寄存器vb0到vb3为向量寄存器,还具有512个位的大小,且因此查找表初始化指令利用寄存器vb0到vb3的全部内容。
[0230]
第一查找表初始化指令使得来自寄存器vb0的512个位的源数据写入到表集合0中的表,开始于由索引0x00指定的位置处(加上来自查找表配置寄存器1900的基址),所述索引0x00为行0中的第一元素。第二查找表初始化指令使得来自寄存器vb1的512个位的源数据写入到表集合0中的表,开始于由索引0x40指定的位置处(加上来自查找表配置寄存器1900的基址),所述索引0x40为行0中的第65元素(例如,组8中的第一元素)。第三查找表初始化指令使得来自寄存器vb2的512个位的源数据写入到表集合0中的表,开始于由索引0x80指定的位置处(加上来自查找表配置寄存器1900的基址),所述索引0x80为行1中的第一元素。第四查找表初始化指令使得来自寄存器vb3的512个位的源数据写入到表集合0中的表,开始于由索引0xc0指定的位置处(加上来自查找表配置寄存器1900的基址),所述索引0xc0为行1中的第65元素(例如,组8中的第一元素)。
[0231]
如所描述,一级数据高速缓存123具有1024个位的带宽,但在图1中所示的实例实施例中,中央处理单元核心110与一级数据高速缓存123之间的数据总线(例如,144)仅为512个位。因此,512个位为能够(例如,从向量源数据寄存器3502)提供到一级数据高速缓存123的write_data的最大大小。在表数目为1的实例中不支持复制,因为不存在将复制的源数据写入到其中的另一表。在实例中,当表数目为1时查找表初始化指令提供与上文所描述的查找表写入指令(或向量存储)相同的带宽。然而,对于等于2、4、8或16的表数目,根据下表14复制来自向量源数据寄存器3502的write_data。
[0232]
表14
[0233][0234][0235]
如所展现,取决于由查找表配置寄存器1900指定的表数目,发送到一级数据高速缓存123以待复制的向量源数据寄存器3502的部分例如从表数目为16时的64个位改变为表数目为2(允许复制)或1(不允许复制)时的512个位。另外,如相对于图36a所描述,在存在16个表的实例中,产生64个位的表宽度,标量寄存器还可含有待写入到表的源数据。然而,在其它实例中,标量寄存器无法用作源寄存器,因为需要多于64个位(例如,对于8表、4表、2表和1表实例)。
[0236]
下文为一个实例实施例中的直方图(hist)指令和加权直方图(whist)指令的形式。
[0237]
hist hist_index,hist_set
[0238]
whist hist_index,hist_set,hist_weights
[0239]
hist_index为通过寄存器编号指定(例如一般向量寄存器堆231内的)向量寄存器的指令操作数。这解译为如以上表11中所示的索引编号。hist_index类似于上文所描述的tbl_index,但特定地用于直方图上下文而非查找表上下文。类似地,hist_set为指定在指令中采用的直方图集合的编号[0:3]。这一所命名的直方图集合编号指定:存储直方图集合的基址的对应查找表(或直方图)基址寄存器,其可为标量寄存器或向量寄存器;对应查找表(或直方图)配置寄存器(图19),其可为标量寄存器或向量寄存器;和查找表(或直方图)启用寄存器(图20)的对应操作部分,其可为标量寄存器或向量寄存器。对应于所命名的直方图集合的基址寄存器确定直方图集合的基址。由hist_index命名的向量寄存器的索引为
从这一表集合基址的偏移。对应于所命名表集合的查找表配置寄存器确定:提升模式(表4);分配给表大小的存储器的量(表5);直方图操作的权重大小(表6);查找表读取操作的n元素内插(表7);将值视为有符号还是无符号;直方图仓条目是否饱和到最小/最大值;数据元素大小(表8);和直方图集合中的直方图数目(表9)。对于加权直方图(whist)指令,hist_weights为通过寄存器编号指定(例如一般向量寄存器堆231内的)向量寄存器以提供权重以递增直方图中的所寻址仓条目的指令操作数。类似于上文,在配置寄存器1900中指定直方图的数目、仓条目的大小、权重的大小、是否采用饱和和其它参数。
[0240]
图37说明本说明书的直方图指令的操作的实例。在图37中所说明的实例中,对应配置寄存器(1900)指定四个并行直方图3711、3712、3713、3714和字(32个位)的数据元素大小。为了进行直方图操作,对应于选定直方图集合的启用寄存器字段(寄存器2000中)应启用读取和写入操作(11)两者。
[0241]
如上,对应于指定直方图集合的基址寄存器2101存储直方图集合的基址,如图37中示意性地说明。直方图数据存储在一级数据高速缓存123的一部分中,所述一级数据高速缓存123配置为可直接存取的存储器。
[0242]
图37中所说明的实例具有四个直方图:hist 1 3711;hist 2 3712;hist 3 3713;和hist 4 3714。如表11中所示,具有这些选定选项的这一指令将存储在向量源索引寄存器2102中的数据视为指定表偏移的4个32位字段的集合。第一字段(位vx[31:0])将索引ia存储到第一直方图3711中。在这一实例中,这索引到元素a5(例如,a4与a6之间)。第二字段(位vx[63:32])将索引ib存储到第二直方图3712中。在这一实例中,这索引到元素b1(例如,b0与b2之间)。第三字段(位vx[95:64])将索引ic存储到第三直方图3713中。在这一实例中,这索引到元素c8(例如,c7与c9之间)。第四字段(位vx[127:96])将索引id存储到第四直方图3714中。在这一实例中,这索引到元素d10(例如,d9与d11之间)。各种索引为从用于直方图集合的基址到待修改的指定的仓元素的存储器地址偏移。
[0243]
响应于根据图37的实例的直方图指令的执行,由基址寄存器2101和向量源索引寄存器2102指定的带索引的仓条目递增值1。由ia(例如,a5)指定的仓条目递增1;由ib(例如,b1)指定的仓条目递增1;由ic(例如,c8)指定的仓条目递增1;且由id(例如,d10)指定的仓条目递增1。
[0244]
如果设定配置寄存器1900的饱和字段1905,那么响应于直方图操作,将仓条目饱和(例如,限制)到元素数据类型的最小/最大值。举例来说,无符号字节饱和到[0,0xff];有符号字节饱和到[0x80,0x7f];无符号半字饱和到[0,0xffff];有符号半字饱和到[0x8000,0x7fff];无符号字饱和到[0,0xffff ffff];且有符号字饱和到[0x8000 0000,0x7fff ffff]。如果饱和字段1905为0,那么直方图仓条目并不饱和到元素数据类型的最小/最大值,而是将在递增超出最大值或递减超出最小值时回绕。
[0245]
图38说明本说明书的加权直方图指令的操作的实例。图38类似于图37,但包含上文所描述的向量源数据寄存器3502。向量源数据寄存器3502由hist_weights指定且包含用以递增直方图3711、3712、3713、3714中的所寻址仓条目的权重。
[0246]
不同于上文相对于查找表写入指令,对于加权直方图指令,向量源数据寄存器3502含有待添加到直方图3711、3712、3713、3714中的带索引的仓条目的数据。在一些实例中,直方图权重为有符号值且权重大小限于字节和半字。另外,在一些实例中,权重大小不
能大于指定的仓条目大小。因此,对于字节大小的仓,仅准许字节大小的权重;对于半字或字大小的仓,准许字节或半字大小的权重。在某些实例中,对于字大小的仓,还准许字大小的权重。在这一实例中,因为查找表配置寄存器指定为四的直方图数目和半字的权重大小(其归因于将仓条目大小指定为字大小而准许),所以向量源数据寄存器3502的前四个半字由加权直方图指令利用,而向量源数据寄存器3502的其余部分不由加权直方图指令利用。特定来说,将第一半字(值 5)添加到由索引ia指定的仓条目(例如,a5递增5);将第二半字(值 2)添加到由索引ib指定的仓条目(例如,b1递增2);将第三半字(值-3)添加到由索引ic指定的仓条目(例如,c8递减3);且将第四半字(值 7)添加到由索引id指定的仓条目(例如,d10递增7)。
[0247]
类似于以上直方图指令,如果设定配置寄存器1900的饱和字段1905,那么响应于直方图操作,将仓条目饱和(例如,限制)到元素数据类型的最小/最大值。举例来说,无符号字节饱和到[0,0xff];有符号字节饱和到[0x80,0x7f];无符号半字饱和到[0,0xffff];有符号半字饱和到[0x8000,0x7fff];无符号字饱和到[0,0xffff ffff];且有符号字饱和到[0x8000 0000,0x7fff ffff]。如果饱和字段1905为0,那么直方图仓条目并不饱和到元素数据类型的最小/最大值,而是将在递增超出最大值或递减超出最小值时回绕。
[0248]
响应于由配置寄存器1900指定的不同参数的上述直方图和加权直方图指令的扩展应对所属领域的一般技术人员显而易见。举例来说,表(或直方图)数目字段1908的改变影响由向量源索引寄存器2102指定的索引的数目(例如,如图21至25中所示)。类似地,权重大小字段1903的改变影响向量源数据寄存器3502的提供待写入到直方图的带索引的仓条目的源数据的部分。
[0249]
在前述描述中和权利要求书中,术语“包含”和“包括”是以开放式方式使用,且因此意味着“包含但不限于
……”
。此外,术语“耦合(couple/couples)”意味着间接或直接连接。因此,如果第一装置耦合到第二装置,那么所述连接可能是通过直接连接,或通过经由其它装置和连接的间接连接。类似地,耦合在第一组件或位置与第二组件或位置之间的装置可为通过直接连接或通过经由其它装置和连接的间接连接。“配置成”进行任务或功能的元件或特征可在由制造商制造时配置成(例如,编程或结构上设计)进行所述功能,和/或可在制造之后由用户配置(或可重新配置)成进行所述功能和/或其它额外或替代功能。配置可为通过装置的固件和/或软件编程、通过装置的硬件组件和互连的构造和/或布局,或其组合。此外,词组“接地”或类似内容在前述描述中的使用包含底座接地、地线接地、浮动接地、虚拟接地、数字接地、通用接地,和/或适用于或适于本说明书的教示的任何其它接地连接形式。除非另外陈述,否则值前面的“约”、“大约”或“大体上”意味着所陈述值的 /-百分之10。
[0250]
以上描述说明本说明书的原理和各种实施例。一旦完全了解以上描述,许多变化和修改对于所属领域的技术人员就将变得显而易见。所附权利要求书涵盖所有这种变化和修改。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献