数字递推选择常数的制作方法

文档序号:32784329发布日期:2023-01-03 17:07阅读:35来源:国知局
数字递推选择常数的制作方法
数字递推选择常数
1.本技术涉及数据处理领域。
2.数字递推算法可以用于执行例如除法或平方根等处理运算。数字递推使用迭代算法来执行计算。在每次迭代中,产生结果值的下一个数字。每个数字使用位数来表示。对于数字递推算法的基数r实现方式,每个数字具有log2(r)位。例如,使用基数4的实现方式将用2位表示每个数字,并且因此在每次迭代时将生成结果的另外2位,因此产生具有特定位数的结果值可能需要数次迭代。在使用较高基数的实现方式中,可以在较少迭代中产生给定大小的结果以提高性能,但用于执行单次迭代的电路系统变得更为复杂。在设计用于执行此类数字递推方法的电路系统时,在满足性能、电路面积和功耗的竞争需求方面可能存在挑战。
3.至少一些示例提供了一种用于对输入值执行数字递推运算的数据处理装置,该数据处理装置包括:接收器电路系统,该接收器电路系统被配置为接收数字递推运算的先前迭代的余数值;以及比较电路系统,该比较电路系统被配置为将数字递推运算的先前迭代的余数值的最高有效位同与数字递推运算结果的下一个数字的可用数字相关联的多个选择常数中的每一个选择常数进行比较,并且基于这些比较输出数字递推运算结果的下一个数字,其中每个选择常数与可用数字和输入参数中的一者相关联;以及存储电路系统,该存储电路系统被配置为存储选择常数的子集,选择常数的子集从选择常数中排除与来自可用数字的排除数字相关联的排除的选择常数。
4.至少一些示例提供了一种用于对输入值执行数字递推运算的数据处理方法,该数据处理方法包括:接收数字递推运算的先前迭代的余数值;以及将数字递推运算的先前迭代的余数值的最高有效位同与数字递推运算的结果的下一个数字的可用数字相关联的多个选择常数中的每一个选择常数进行比较,并且基于这些比较输出数字递推运算的结果的下一个数字,其中选择常数中的每一个选择常数与可用数字和输入参数中的一者相关联;以及存储选择常数的子集,选择常数的子集从选择常数中排除与来自可用数字的排除数字相关联的排除的选择常数。
5.至少一些示例提供了一种用于存储计算机可读代码的计算机可读介质,该计算机可读代码用于制造用于对输入值执行数字递推运算的数据处理装置,该数据处理装置包括:接收器电路系统,该接收器电路系统被配置为接收数字递推运算的先前迭代的余数值;以及比较电路系统,该比较电路系统被配置为将数字递推运算的先前迭代的余数值的最高有效位同与数字递推运算结果的下一个数字的可用数字相关联的多个选择常数中的每一个选择常数进行比较,并且基于这些比较输出数字递推运算结果的下一个数字,其中每个选择常数与可用数字和输入参数中的一者相关联;以及存储电路系统,该存储电路系统被配置为存储选择常数的子集,选择常数的子集从选择常数中排除与来自可用数字的排除数字相关联的排除的选择常数。
6.本技术的另外的方面、特征和优点将从结合附图阅读的示例的以下描述中显而易见,在这些附图中:
7.图1示意性地示出了具有除法/平方根处理电路系统的数据处理运算的示例;
8.图2示意性地示出了将较高基数数字递推平方根或除法运算分成在同一处理循环中执行的多个较低基数子迭代的示例;
9.图3示出了用于执行平方根运算的给定基数r迭代的电路系统;
10.图4示出了余数更新电路系统;
11.图5示出了余数估计电路系统;
12.图6示出了数字选择电路系统;
13.图7更详细地示出了用于通过在同一处理循环中执行两次基数8子迭代来执行平方根运算的给定基数64迭代的平方根处理电路系统;
14.图8示出了可以执行除法和平方根运算的组合除法/平方根处理电路系统,其中共享电路系统在用于除法和平方根运算的同一数据路径上生成至少一个输出值;
15.图9示出了除法/平方根流水线的示例;
16.图10示出了连续除法或平方根运算的流水线,其中当第二运算使用的精度浮点表示低于第一运算时,禁止第二运算在第一运算之后开始预定数量的循环;
17.图11示出了即时转换;
18.图12示出了即时转换的工作示例;
19.图13示出了3x数字的即时转换;
20.图14示出了3x即时转换的工作示例;
21.图15示出了用于执行3x倍数的即时转换的电路系统;
22.图16示出了重建部分根值的选择;
23.图17示出了除法运算的基数8子迭代的比较常数;
24.图18示出了平方根运算的基数8子迭代的比较常数;
25.图19示出了表示平方根比较常数相对于除法比较常数的偏移的偏移;
26.图20示出了用于确定除法和平方根运算的比较常数的除法和偏移查找表;
27.图21示出了用于获得除法和平方根运算的比较常数集的电路系统。
28.平方根处理
29.平方根处理电路系统可以通过在同一处理循环中执行两次或更多次基数n子迭代来执行基数r平方根运算的给定基数r迭代,其中n《r。与不将基数r迭代再分成较低基数的子迭代的实现方式相比,这可以在性能与电路开销之间提供更好的折衷。由于在一个循环中执行的整体运算是利用基数r的较高基数运算,因此这意味着每个处理循环可以生成结果的log2(r)位,这可提供比使用较小基数时更高的性能,但通过在同一处理循环中将基数r迭代分解成数个基数n子迭代,其中对于每次子迭代,n小于r,电路系统的总体大小可低于将基数r迭代作为单个运算执行的情况,因为可供选择为利用基数n的每次子迭代中的下一个数字的替代选项数小于在平方根运算的基数r迭代作为一元运算执行时需要的基数r数字的替代选项数。然而,将基数r迭代分成数个较小基数子迭代可能会在能够将这些基数n子迭代拟合到单个处理循环中时产生定时挑战。
30.对于给定基数n子迭代,平方根处理电路系统可以包括:数字选择电路系统,该数字选择电路系统用于基于先前余数估计选择平方根结果的下一个基数n结果数字;余数更新电路系统,该余数更新电路系统用于基于余数调整值调整先前余数值,以生成更新后余数值,该余数调整值取决于由该数字选择电路系统选择的该下一个基数n结果数字;余数估
计电路系统,该余数估计电路系统用于生成指示该更新后余数值的一部分的估计的更新后余数估计;以及输出信号路径,这些输出信号路径用于提供该更新后余数值和该更新后余数估计,以在该基数r平方根运算的该给定基数r迭代的后续基数n子迭代或另一基数r迭代的第一基数n子迭代中用作该先前余数值和该先前余数估计。因为每个循环执行多个子迭代,所以可以为平方根运算的相同基数r迭代内的相应基数n子迭代提供数字选择电路系统、余数更新电路系统、余数估计电路系统和输出信号路径的多个实例。
31.在给定基数r迭代的最终基数n子迭代中,余数估计电路系统可以与余数更新电路系统生成更新后余数值并行地生成更新后余数估计。这违反直觉,因为当更新后余数估计表示更新后余数值的一部分时,人们可能会认为需要先获得余数值,然后按顺序计算余数估计。然而,本发明人认识到,在将较高基数迭代分成多个较小基数子迭代的实现方式中,可以与余数更新电路系统生成给定基数r迭代的最终子迭代的更新后余数值并行地生成该最终子迭代的更新后余数估计。这意味着,与最终基数n子迭代的余数估计的计算相关联的延迟可以通过平方根处理电路系统从关键定时路径中至少部分去除,以减少执行平方根运算的给定基数r迭代所花费的总时间,从而提高整体性能。
32.余数更新电路系统可以按冗余表示生成更新后余数值。例如,余数值可以表示为两个项,这两个项一起表示更新后余数值的数值,但可以存在第一项和第二项的值的多于一个组合,这些组合可以表示相同的数值。按冗余表示生成更新后余数值可能很有用,因为它可以避免计算需要将进位从一位传递到另一位的更新后余数值。因此,余数更新电路系统可以包括进位保留加法电路系统。
33.然而,为了为平方根结果选择下一个基数n结果数字,数字选择电路系统可以使用呈非冗余表示的余数表示来执行数字选择,并且因此余数估计电路系统可以按非冗余表示生成更新后余数估计,该更新后余数估计指示更新后余数值的至少一部分的估计(其中非冗余表示意味着可以用单个项表示估计,并且对于更新后余数估计的任何给定数值,存在与该数值相对应的非冗余表示的单位模式(而非其他)。更新后余数估计的位可能比更新后余数值少(更具体地,更新后余数估计的位可能比可包括两个冗余项的冗余表示余数值的单个项中的位数少),因为数字选择可能不需要更新后余数值的全精度,并且限制估计中的位数会减少计算非冗余余数估计的延迟。例如,更新后余数估计可以表示更新后余数值的最高有效部分的估计,因为较低位可能不会显著影响数字选择准确度。
34.因此,呈非冗余表示的余数估计的计算可以使用进位传递加法电路,其可以将进位从一个位位置传递到另一个位位置,并且这可能慢于进位保留加法器。因此,在典型的方法中,用于余数估计的进位传递加法电路系统可能会大大减慢平方根运算的特定迭代的整体处理。
35.然而,本发明人认识到,在将基数r平方根迭代分成在同一处理循环内执行的基数n的多个较小子迭代的方法中,可以与计算更新后余数值并行地计算最终基数n子迭代的更新后余数估计,因为最终基数n子迭代中作为余数更新电路系统的输入而提供的信息和/或来自给定基数r迭代内的较早子迭代的其他信息可用于计算最终基数n子迭代的更新后余数估计,从而不需要在开始计算最终基数n子迭代的更新后余数估计之前等待最终基数n子迭代中的更新后余数值变得可用。由于从关键定时路径中去除了用于计算给定基数r迭代的最终基数n子迭代中的更新后余数估计的相对缓慢的进位传递加法,这提供了相对显著
的性能增益。
36.在余数更新中,基于余数调整值更新先前余数值,该余数调整值采用取决于由数字选择电路系统选择的下一个结果数字的值。在最终基数n子迭代中,余数估计电路系统可以使用此余数调整值和先前余数估计来生成最终基数n子迭代的更新后余数估计。由于余数调整值在最终基数n子迭代中用作余数估计电路系统的输入,因此不需要等待更新后余数值,使得更新后余数估计可以更快地获得。
37.余数估计电路系统可以利用这样一个事实,即最终基数n子迭代遵循在同一循环内执行的至少一个较早子迭代,使得最终子迭代中的余数估计电路系统可以使用在该较早子迭代中计算的一些信息来计算更新后余数估计,其速度比在获得更新后余数值之后按顺序计算余数估计时更快。
38.例如,在给定基数r迭代的除最终基数n子迭代以外的前一基数n子迭代中,余数估计电路系统可以计算更新后余数估计的至少一个额外位,该位对于在给定基数r迭代的最终基数n子迭代中选择下一个基数n结果数字是不必要的,并且在给定基数r迭代的最终基数n子迭代中,余数估计电路系统可以使用在该前一基数n子迭代中确定的至少一个额外位来确定更新后余数估计。通过计算比前一基数n子迭代中的更新后余数估计所需的位更多的位,额外位可以用于在最终基数n子迭代中更早地计算更新后余数估计,因为在前一子迭代中计算的额外位允许在不等待更新后余数值可用的情况下计算最终子迭代中的更新后余数估计。
39.在给定基数r迭代的第一基数n子迭代中,余数估计电路系统可以基于余数更新电路系统在第一基数n子迭代中生成的更新后余数值来确定更新后余数估计。因此,不必在所有子迭代中与更新后余数值并行计算更新后余数估计。对于给定基数r迭代的第一子迭代,在更新后余数值以冗余形式可用之前,可能没有足够的信息来计算余数估计。然而,由于多次基数n子迭代在同一处理循环内重叠,因此电路设计者可以自由地改变后续子迭代的部分相对于较早子迭代的部分开始的相对定时,并且来自较早子迭代的信息可以用于计算后续子迭代中的参数,使得可以至少针对最终子迭代并行计算更新后余数值和更新后余数估计。
40.在同一循环内执行至少三个子迭代以实现平方根运算的给定基数r迭代的实现方式中,也可以针对第一子迭代与最终子迭代之间的一个或多个中间子迭代并行计算更新后余数估计与更新后余数值。
41.对于给定基数n子迭代,平方根处理电路系统包括复制电路系统的一个或多个实例,复制电路系统的每个实例包括:两个或更多个复制电路单元,该两个或更多个复制电路单元用于与数字选择电路系统选择下一个基数n结果数字并行地确定对应于不同结果数字的两个或更多个候选输出值,这些结果数字能够被数字选择电路系统选择为下一个基数n结果数字;以及选择电路系统,该选择电路系统用于响应于数字选择电路系统指示不同结果数字中的哪一个结果数字被选择为下一个基数n结果数字而选择多个候选输出值中的一个候选输出值,该多个候选输出值至少包括由两个或更多个复制电路单元生成的两个或更多个候选输出值。使用这种方法,性能可以更快,因为在开始计算以生成候选输出值之前,无需等待数字选择电路系统实际选择下一个基数n结果数字。
42.注意,可供选择电路系统选择的候选输出值的数量可以大于由两个或更多个复制
电路单元生成的候选输出值的数量。举例来说,可供选择的可能结果数字之一可以等于零,并且在一些情况下,可能不需要显式计算结果数字为零的候选输出值,因为在下一个结果数字为零时选择的候选输出值可能与提供给子迭代的输入值相同。因此,选择电路系统可以将并非由复制电路单元之一显式生成的候选输出值以及由两个或更多个复制电路单元生成的候选输出值当作输入。
43.提供复制电路单元以在已知下一个结果数字之前推测性地计算多个候选输出值可能有利于性能,但所需的复制电路单元数量随着基数增大而增加,因此为了支持更高基数运算,这可能会增加电路面积成本和功耗。
44.一种用于限制电路面积和功率成本的技术可以是提供两个或更多个复制电路单元中的至少一个复制电路单元作为共享电路单元,该共享电路单元在具有给定量值的正结果数字与具有相同给定量值的负结果数字之间共享。共享电路单元可以在共享信号路径上将共享候选输出值输出到选择电路系统,并且当下一个基数n结果数字是具有该给定量值的正结果数字和负结果数字中的任一个时,选择电路系统可以从共享信号路径中选择共享候选输出值。因此,这避免了分别为共享相同量值的正结果数字和负结果数字提供两个单独的复制电路单元的需要。这可以减少所需的复制电路单元的总数,并因此节省电路面积并降低功耗。
45.对于复制电路系统的至少一个实例,提供在具有相同量值的正结果数字与负结果数字之间共享的输出的共享电路单元可以基于先前余数估计的符号来选择要输出的值作为共享信号路径上的共享候选输出值。因此,虽然共同信号路径在具有相同量值但不同符号的两个结果数字值之间共享,但是该共享信号路径上的实际数值输出可取决于先前余数估计的符号而变化。
46.对于复制电路系统的至少一个实例,共享电路单元可以包括共享加法电路系统,该共享加法电路系统用于确定具有给定量值的正结果数字和负结果数字的共享候选输出值。提供用于生成具有相同量值的正数字和负数字的共享候选输出值的共享电路单元的技术在该电路单元包括加法电路系统的情况下可能特别有用,因为加法电路系统在电路面积方面可能相对昂贵。
47.对于基数n子迭代,通常预期可供选择电路系统选择的候选输出值的数量应为n+1。然而,通过在具有相同量值的正结果数字与负结果数字之间共享共享电路单元,可以将可供选择电路系统选择的候选输出值的总数减少到n/2+1,这可以大大减少电路面积,这意味着所提供的复制电路单元的数量可以减少。
48.平方根处理电路系统内可存在复制电路系统的数个实例。平方根处理电路系统的各种部分可以各自使用这种方法,其中复制电路单元推测性地确定多个可能结果数字的候选输出值,然后一旦选择了下一个结果数字,选择电路系统就可以选择正确的候选输出值。
49.例如,余数更新电路系统可以包括复制电路系统的此类实例中的一个实例。如果余数更新电路系统使用推测性复制和选择方法,则由选择电路系统选择的候选输出值可以是候选更新后余数值。
50.类似地,余数估计电路系统还可以使用这种推测性复制,并且包括上述复制电路系统的实例之一。在余数估计电路系统包括复制电路系统的情况下,候选输出值可以是候选更新后余数估计。
51.数字递推方法的另一部分可以是执行即时转换。对于平方根运算,调整先前余数值以生成更新后余数值不仅可以取决于(基于下一个结果数字选择的)余数调整值,而且还可以取决于部分根值,该部分根值是对应于先前选择的结果数字序列的数值。由于数字选择电路系统可以选择结果数字作为带符号数字,然后以余数更新电路系统可用于调整先前余数值以生成更新后余数值的非冗余表示提供部分根值,因此可以提供即时转换电路系统以将部分根值转换成非冗余表示。如下所述,可以按以下方式执行即时转换:不需要加法,而是可以简单地将先前部分根值和基于最新的基数n结果数字选择的一些额外位串联来完成。
52.因此,即时转换电路系统(用于以非冗余表示生成指示与先前选择的基数n结果数字序列相对应的数值的部分根值)还可以包括上文所论述的复制电路系统的实例,使得复制电路单元生成数个候选部分根值,并且可供选择电路系统选择的候选输出值包括部分根值的数个候选值。
53.因此,无论平方根处理电路系统的哪一部分实现复制,复制都可有助于提高性能,并且如果实现了复制电路单元对具有相同量值的正结果数字和负结果数字的共享,则可有助于减少整个电路规模。
54.虽然一些实现方式可以仅在平方根处理电路系统的上述部件中的一个部件或一个子集上实现复制电路系统,而其他部件不使用复制方法,但如果余数更新电路系统、余数估计电路系统和即时转换电路系统中的每一者提供复制电路系统的实例,则性能可以最大。
55.通常,在给定基数r迭代在同一处理循环中分成数个背对背或重叠的基数n子迭代的情况下,r的值可以对应于在一个循环中使用的每个子迭代的n的相应值的乘积。
56.在下文论述的具体示例中,对于每次子迭代,r=64并且n=8,使得每次基数64迭代中存在两次基数8子迭代。这种方法可以在性能(基数64意味着每个处理循环可以生成6位)与电路面积和定时复杂性(将基数8用于子迭代意味着只需要两个子迭代,与使用三个或更多个子迭代的实现方式相比,这施加的定时压力更少,而将基数增大到64以上可能会降低在满足定时的同时管理电路规模的可行性)之间提供良好的平衡。因此,r=64和n=8可以是特别有用的组合。
57.然而,其他选项也是可能的。例如,可以将平方根运算的基数64迭代作为各自利用基数4的三个子迭代执行(因为64=4
×4×
4)。
58.利用相同的基数n实现每个子迭代可能很有用,因为在每个子迭代中使用相同的基数可能在整体电路面积方面更有效并且在设计复杂性方面更简单。
59.然而,相同的基数r迭代内的不同子迭代也可以使用不同的基数。例如,数字递推平方根运算的基数64迭代可以分成一次基数4子迭代、一次基数8子迭代和一次基数2子迭代。因此,对于每个子迭代,n不必相等。
60.上文所论述的技术可以在不同设计的平方根处理电路系统中实现。在一个示例中,平方根处理电路系统可以是迭代平方根处理电路系统,其中输出信号路径可以将在最终基数n子迭代中生成的更新后余数值和更新后余数估计从迭代平方根处理电路系统的输出提供到相同的迭代平方根处理电路系统的输入,以在平方根运算的另一基数r迭代的第一基数n子迭代中用作先前余数值和先前余数估计。因此,为了整体执行平方根运算,将在
多个处理循环中多次通过迭代平方根处理电路系统,其中迭代平方根处理电路系统在一个循环中的输出在后续循环中作为输入反馈给同一单元。
61.然而,如下文更详细地论述的,平方根处理电路系统还可以是流水线平方根处理单元的一部分,该平方根处理单元包括数个平方根迭代流水线阶段,每个阶段包括上文所论述的平方根处理电路系统的相应实例。在这种情况下,给定流水线阶段的输出信号路径可以将在给定基数r迭代的最终基数n子迭代中生成的更新后余数值和更新后余数估计从平方根处理电路系统在一个平方根迭代流水线阶段中的输出提供到平方根处理电路系统(平方根处理电路系统的不同实例)在后续平方根迭代流水线阶段中的输入,以在下一个处理循环中处理后续基数r迭代。这种方法可有助于提高平方根运算的总体吞吐量,因为可以将多个平方根运算相对于彼此进行流水线操作,使得当在流水线平方根处理单元的后续阶段处理较早平方根运算时,后续平方根运算可能处于执行较早基数r迭代的较早流水线阶段。
62.组合除法/平方根处理电路系统
63.商业处理器微型架构通常具备分别用于除法运算和平方根运算的单独电路逻辑,使得这些运算在完全分开的电路逻辑单元中执行,并且与用于计算平方根结果的数据路径相比,不共享用于计算除法结果的数据路径。这可能更容易构建,因为平方根运算中不需要额外的复杂性以影响除法运算中的定时。然而,可能期望增大用于除法和平方根运算的基数,以通过允许每个循环计算更多的除法或平方根结果位数来提高性能。例如,对于商业处理器上目前不可用的基数64除法或平方根运算,每个循环可以计算6位的结果。然而,增大的基数意味着与需要较低基数的实现方式相比,需要更复杂的电路系统。因此,当在较高基数下进行运算时,具有单独的除法和平方根处理电路系统可能会增加电路规模并因此增加处理器的功耗。
64.在下文描述的示例中,提供组合除法/平方根处理电路系统以响应于除法指令执行基数64除法运算的给定基数64迭代,并且响应于平方根指令执行基数64平方根运算的给定基数64迭代。组合除法/平方根处理电路系统具有共享电路系统,用于在用于基数64除法运算和基数64平方根运算的相同数据路径上生成给定基数64迭代的至少一个输出值。例如,至少一个输出值可以包括以下中的任何一个或多个:更新后余数值、选定结果数字、更新后余数估计和/或即时转换的部分结果值。通过使用具有用于除法和平方根运算的输出的相同数据路径的共享电路,与利用分开的除法和平方根单元的实现方式相比,可以减少电路系统的总量。这对于基数64运算特别有用,因为与商业处理器微型架构支持的较低基数运算相比,基数64所需的电路规模增加。
65.对于基数64除法运算和基数64平方根运算,组合除法/平方根处理电路系统可以在每个处理循环执行相同数量的基数64迭代。这可有助于增加电路系统可以在平方根运算与除法运算之间共享的程度,以限制组合除法/平方根处理电路系统的总电路面积。
66.对于基数64除法运算和基数64平方根运算,组合除法/平方根处理电路系统可以通过在同一处理循环中执行一次或多次基数m子迭代来执行给定基数64迭代,其中m≤64。
67.在一些示例中,m=64,并且在这种情况下,可以执行基数64迭代作为单个一元运算,该一元运算一次生成6位的下一个结果数字,而无需将基数64迭代分成单独的子迭代。这种方法可能更快,但可能需要额外的电路逻辑来适应更大数量的候选结果数字,因为在
作为单个运算执行的基数64迭代中,可能的结果数字可能从-32扩展到+32。
68.然而,在一些示例中,m《64,使得组合除法/平方根处理电路系统可以通过在同一处理循环中执行多次基数m子迭代来执行给定基数64迭代。例如,下文所示的具体示例中的m等于8,使得每次基数64迭代中存在两次基数8子迭代。另一个选项可以是m=4,使得每个处理循环的一次基数64迭代中存在三次基数4子迭代。子迭代基数m可以在不同的子迭代中取不同的值,如上文针对平方根处理电路系统示例所提及的,但如果m在每个子迭代中相同,则在电路实现方面可能更有效。
69.因此,术语“基数m子迭代”用于在没有再分成较小基数的多次子迭代的情况下指代整个基数64迭代,或在实现了这种再分的情况下指代较小基数的个别子迭代。
70.组合除法/平方根处理电路系统可能存在不同部分,这些部分可以用作上述共享电路系统。
71.在一个示例中,共享电路系统包括共享数字选择电路系统,该共享数字选择电路系统用于基于先前余数估计与一组比较常数的比较在给定基数m子迭代中选择除法结果或平方根结果的下一个基数m数字。在m=64并且因此没有将基数64迭代分成多个子迭代的实现方式中,用于数字选择的先前余数估计可以来自先前的基数64迭代。另一方面,如果m《64,使得基数64迭代被分成多个基数m子迭代,则对于给定基数64迭代的第一基数m子迭代,先前余数估计可以来自先前基数64迭代的最终基数m子迭代,而对于给定基数64迭代的除第一基数m子迭代以外的后续基数m子迭代,共享数字选择电路系统可以基于在给定基数64迭代的较早基数m子迭代中计算的先前余数估计来选择下一个基数m数字。
72.因此,可以提供共享数字选择电路系统,以与用于分别为除法和平方根运算选择结果数字的单独电路系统相比,节省电路面积。例如,共享数字选择电路系统可以包括一组相同的比较器电路,用于执行先前余数估计与除法和平方根运算的比较常数之间的比较。
73.虽然在执行除法和平方根运算时使用的比较器电路可以是相同的,但是共享数字选择电路系统仍然可以分别对基数64除法运算和基数64平方根运算使用数组不同的比较常数。可以基于运算类型选择一组比较常数。
74.然而,一个问题是除法运算的比较常数可能与平方根运算的比较常数大小不同。通过误差分析发现,除法运算可能不需要比较常数中与平方根运算所用的比较常数一样多的位来提供足够的数字选择准确度。因此,可以预期除法比较常数具有比平方根比较常数少的位。然而,为了便于共享电路系统,与基数64除法运算的先前余数估计相比的比较常数可以具有设置为0的至少一个最低有效位,以将它们填充到与基数64平方根运算的先前余数估计相比的比较常数相同宽度。通过在最低有效位位置放置至少一个零以将除法的比较常数扩展到与平方根运算相同的位宽,这允许数字选择电路系统中相同的比较器和余数估计的相同数据路径用于平方根和除法运算,从而减少电路面积。
75.共享电路系统的另一示例可以是共享余数更新电路系统,其在给定基数m子迭代中基于余数调整值调整先前余数值,以按冗余表示生成更新后余数值。通过使用冗余表示,可以使用进位保留加法来执行余数更新,以避免进位传递加法的延迟增加。因此,共享电路系统可以包括共享进位保留加法电路系统,该共享进位保留加法电路系统用于执行进位保留加法以生成更新后余数值。由于余数值的数据路径在除法与平方根运算之间共享,因此无需分别为除法和平方根运算提供两个单独的进位保留加法器。
76.然而,与平方根运算相比,除法运算的余数调整值可能不同。因此,共享余数更新电路系统可以包括选择电路系统,该选择电路系统用于选择以下各项作为余数调整值:当作为基数64除法运算的一部分执行给定基数m子迭代时,从除数值导出的值;和当作为基数64平方根运算的一部分执行给定基数m子迭代时,从取决于先前选择的基数m根数字序列的部分根值导出的值。因此,利用选择电路系统中的少量额外逻辑,当生成余数更新时,共享数据路径可以用于平方根和除法运算两者。
77.共享电路系统的另一示例可以是共享余数估计电路系统,该共享余数估计电路系统用于在给定基数m子迭代中生成更新后余数估计,该更新后余数估计指示在基数64除法运算或基数64平方根运算的给定基数m子迭代中以冗余表示生成的更新后余数值的一部分的非冗余估计。例如,共享余数估计电路系统可以包括进位传递加法电路系统,该进位传递加法电路系统用于执行进位传递加法以生成非冗余估计,因此通过在除法与平方根运算之间共享此非冗余估计,不必提供两个单独的进位传递加法器。
78.在m小于64的实现方式中,在给定基数64迭代的最终基数m子迭代中,共享余数估计电路系统可以与共享余数更新电路系统生成更新后余数值并行地生成更新后余数估计。这通过减少关键定时路径的时延来提高性能,原因与上文针对平方根处理电路系统所论述的相同。
79.共享电路系统的另一示例可以是共享即时转换电路系统,该共享即时转换电路系统用于在给定基数m子迭代中执行即时转换以按非冗余表示生成部分结果值。同样,即时转换电路系统可能需要相对复杂的硬件电路逻辑,并且因此通过避免针对除法和平方根运算复制此硬件电路逻辑,可以节省更多的电路面积。
80.然而,一个问题是,在典型方案中,对于除法运算,与平方根运算相比,即时转换电路系统的执行方式不同。即时转换电路系统可以将基于下一个结果数字选择的值插入部分结果值中,以生成表示与在该循环和任何较早循环中选择的结果数字序列相对应的部分结果的即时转换值。然而,在典型方案中,在即时转换期间将下一个数字插入部分结果值中的位置对于除法和平方根运算是不同的,其中除法运算将从下一个数字导出的值插入最低有效位位置,其中执行左移位以将所有先前插入的位上移到更多有效位位置。相比之下,由于部分结果值影响平方根运算中的数字选择和余数更新操作(因此,如果在每个处理循环中,部分根结果值的最高有效位保持在部分结果的存储表示内的一致位位置,则更方便),对于平方根运算,利用掩码将从下一个结果数字导出的值插入部分结果内的可变位位置,该掩码用于表示部分结果值内插入下一个平方根结果数字的位置。可以在迭代或子迭代之间调整此掩码,以逐渐将下一个结果数字要插入的位置移向部分结果值的更低有效位。
81.考虑到保持部分结果值的这些对比方法,人们可能会认为即时转换电路系统很难具有共享电路逻辑。
82.然而,本发明人认识到,可以提供共享即时转换电路系统。在给定基数n子迭代中,对于基数64除法运算和基数64平方根运算,共享即时转换电路系统基于掩码值选择用于将下一个数字插入部分结果值中的位置。因此,对于除法运算,共享即时转换电路系统的行为与传统不同,因为现在对于基数64除法运算,使用掩码来选择将下一个数字插入除法运算的部分结果值中的位置,而不是将所有数字上移并将下一个数字插入最低有效位位置。这允许除法运算的即时转换以反映平方根运算的即时转换,使得可以使用共享电路逻辑和共
享数据路径。这有助于提高整体电路面积效率。
83.与上述平方根处理电路系统的各种电路单元一样,共享除法/平方根电路系统中的共享电路系统可以包括复制电路系统的一个或多个实例,其中复制电路系统的每个实例包括:两个或更多个复制电路单元,该两个或更多个复制电路单元用于与选择除法结果或平方根结果的下一个基数m数字并行地确定对应于不同数字的两个或更多个候选输出值,这些数字能够被选择为下一个基数m数字;以及选择电路系统,该选择电路系统用于响应于不同数字中的哪一个数字被选择为下一个基数m数字的指示而选择多个候选输出值中的一个候选输出值,该多个候选输出值至少包括由两个或更多个复制电路单元生成的两个或更多个候选输出值。这有助于提高性能,原因与上文所论述的平方根示例相同。同样,复制电路单元中的至少一个复制电路单元可以是共享电路单元,该共享电路单元在具有相等量值的正数字与负数字之间共享,以减少处理基数m子迭代所需的复制电路单元的总数。组合除法/平方根电路系统的各种部件可以使用此类复制电路系统,例如余数更新电路系统、余数估计电路系统和即时转换电路系统中的任何一个或多个电路系统。
84.与前面提到的平方根处理电路系统一样,对于组合除法/平方根处理电路系统,这可以实现为迭代除法/平方根处理电路系统,其中一次基数64迭代的输出被输入到相同的迭代除法/平方根处理电路系统,以在除法或平方根运算的另一基数64迭代中使用,或者作为具有数个流水线阶段的流水线除法/平方根处理单元,这些流水线阶段各自具有组合除法/平方根处理电路系统的相应实例,其中信号路径提供在一个阶段生成的输出作为流水线中的下一个阶段的输入。
85.除法/平方根流水线
86.许多程序通常要求对以浮点格式表示的操作数执行算术运算。ieee-754技术标准定义浮点表示的各种格式,例如半精度(hp)、单精度(sp)和双精度(dp)(其他格式也是可用的)。用于除法或平方根运算的操作数和结果的特定浮点精度可以控制需要为结果生成多少位,这可能会影响数字递推除法或平方根运算所需的迭代数。
87.传统上,用于执行能够生成精度为浮点级的结果的数字递推除法或平方根运算的电路单元已实现为迭代电路单元,使得在硬件中提供的电路逻辑对应于数字递推除法或平方根运算的单次迭代,并且一次迭代的输出作为输入反馈给刚刚执行先前迭代的同一电路逻辑单元,为同一电路单元执行下一次迭代做好准备。
88.相比之下,在下文论述的示例中,提供了除法/平方根流水线,其包括数个除法/平方根迭代流水线阶段,每个阶段都可以执行数字递推除法或平方根运算的相应迭代。提供信号路径以将一个流水线阶段在一次迭代中生成的输出作为输入提供给除法/平方根流水线的后续流水线阶段,以执行数字递推除法或平方根运算的后续迭代。除法/平方根流水线能够对浮点操作数执行数字递推除法或平方根运算,以生成浮点结果。
89.因此,在支持浮点格式所需的精度级别时,以流水线方式实现除法或平方根运算,而不是作为迭代单元来实现。这意味着,对于单个除法或平方根运算的处理,相应迭代由不同的流水线阶段执行,其中来自一个流水线阶段的输出被输入到下一个流水线阶段,使得运算沿流水线向下移动,直到其到达终点,并且结果可以输出。
90.这种方法可能会被视为违反直觉,因为尽管一般都知道指令的流水线操作,但与其他形式的算术相比,除法/平方根运算的绝对复杂性意味着用于执行数字递推除法或平
方根运算的单次迭代的单个电路单元的整体电路面积相对较高,因此人们会认为将迭代单元扩展成包括足够数量的阶段的流水线以生成浮点处理所需的结果精度会大大增加除法/平方根单元所需的整体电路面积,增加的因子与除法或平方根运算所需的最大迭代次数相对应。
91.然而,本发明人认识到,在实践中,具有迭代除法/平方根处理电路系统的处理器微型架构实际上可以提供数个并行的除法/平方根单元以增加可用的整体带宽,使得可以例如存在多个除法功能单元和/或多个平方根功能单元,使得可以同时处理两个或更多个除法或平方根运算。利用流水线方法,消除了重复整个除法/平方根单元的需要,因为可以按流水线方式处理多个运算,其中除法/平方根流水线可以执行第一数字递推除法或平方根运算和第二数字递推除法或平方根运算,其中除法/平方根流水线的后续除法/平方根迭代流水线阶段与较早除法/平方根迭代流水线阶段执行第二数字递推除法/平方根运算的较早迭代并行地执行第一数字递推除法或平方根运算的后续迭代。
92.因此,尽管流水线似乎会大大增加电路逻辑,但实际上与具有多个并行除法/平方根单元的商业处理器相比,额外的电路系统可能不那么重要,尤其是当可以应用本技术中论述的用于减小电路面积的各种技术时,这些技术例如将共享数据路径用于除法和平方根运算,以及通过为前面论述的具有相同量值的正数字和负数字共享相同的复制电路单元来减少复制电路单元的数量。
93.因此,总的来说,流水线在电路面积方面可能具有竞争力,并且可有助于提高性能,因为使用流水线处理运算可能会产生更大的吞吐量,因为背对背除法或平方根运算可以在其之间调度更少的循环,因为流水线可以避免迭代电路单元在执行数字递推除法或平方根运算所花费的总循环数内被阻塞。
94.流水线可以仅实现除法或平方根运算之一,使得除法/平方根流水线能够执行除法或平方根运算之一,但无法同时执行这两种运算。
95.然而,对于组合除法/平方根处理电路系统具有用于两种运算的共享数据路径的情况,流水线可能特别有用。因此,每个除法/平方根迭代流水线阶段包括组合除法/平方根处理电路系统,该组合除法/平方根处理电路系统用于响应于除法指令执行数字递推除法运算的给定迭代,并且响应于平方根指令执行数字递推平方根运算的给定迭代。组合除法/平方根处理电路系统包括共享电路系统,该共享电路系统用于在用于数字递推除法运算的给定迭代和数字递推平方根运算的给定迭代的同一数据路径上生成至少一个输出值。提供组合除法/平方根处理电路系统有助于限制将单个迭代单元扩展成流水线的整体面积成本(因为先前为单独的除法和平方根单元提供的面积预算可用于实现流水线),并且有助于在电路面积方面使流水线可与当前微型架构竞争。如前所述,在使用组合除法/平方根电路系统的情况下,对于数字递推除法运算和数字递推平方根运算,除法/平方根流水线可以利用相同的基数在每个处理循环执行相同次数的迭代,因为这有助于共享电路单元的更大程度共享。
96.对于给定结果精度,除法/平方根流水线可以在与数字递推平方根运算的处理循环数相同的处理循环中处理数字递推除法运算。这有助于简化流水线中的电路定时的控制,并且有助于在除法运算与平方根运算之间共享共同电路逻辑。
97.对于输入到除法或平方根运算的操作数以及在除法或平方根运算中生成的浮点
结果,可以支持各种浮点格式。例如,操作数和结果可以是半精度(hp)、单精度(sp)或双精度(dp)浮点值。除法/平方根流水线可以支持这些格式中的至少一个格式,或者还可以支持其他类型的浮点格式。然而,如果除法/平方根流水线支持sp和dp浮点值中的至少一个,则特别有用。以dp浮点精度编写的程序可能特别常见,因此在一些情况下,除法/平方根流水线可以支持结果呈dp浮点表示的运算。除法/平方根流水线的流水线阶段可以用于处理浮点操作数的有效数,以生成浮点结果的有效数。可以存在单独的电路逻辑以处理浮点值的指数。指数处理逻辑可以比用于生成有效数的逻辑更简单,并且可以使用任何已知的技术来生成除法/平方根结果的指数。
98.在一些示例中,除法/平方根流水线可以支持数字递推除法或平方根运算的至少两种不同的结果精度。例如,除法/平方根流水线可以支持hp、sp和dp浮点值中的任何两个或更多个浮点值。
99.对于精度较低的浮点结果精度,除法/平方根流水线可以在比生成精度较高的结果时更少的处理循环中执行除法或平方根运算(因为需要为结果生成的位较少,因此需要的数字递推方法迭代较少)。该装置可以具有控制电路系统,该控制电路系统用于控制除法/平方根流水线以使得至少一个除法/平方根迭代流水线阶段在执行数字递推除法或平方根运算时被绕过以生成精度较低的结果,该至少一个除法/平方根迭代流水线阶段用于在生成精度较高的结果时执行数字递推除法或平方根运算的至少一次迭代。这通过允许在需要计算较少位时更早地获得运算结果来提高性能。
100.然而,允许以这种方式绕过流水线的一些阶段可能会产生这样的可能性,即如果在以流水线方式进行高精度运算之后执行低精度运算,则当到达可以对数字递推除法或平方根运算的最终迭代的输出执行后处理运算的后处理阶段时,这两种运算可能会发生冲突。举例来说,后处理阶段可以对除法或平方根运算的结果执行舍入以提供舍入的浮点结果,和/或通过右移来进行非正规(次正规)结果处理以产生符合ieee标准的结果(当除法或平方根运算的结果小于能够表示为正规浮点数的最小数时)。为了确保后处理运算仅接收每个循环的单个运算的最终迭代的输出,控制电路系统可以防止为生成精度较低的结果而执行的较低精度数字递推除法/平方根运算在为生成精度较高的结果而执行的较高精度数字递推除法/平方根运算之后开始预定数量的循环,预定循环数对应于达到较高精度数字递推除法/平方根运算的至少一个后处理阶段所花费的循环数与达到较低精度数字递推除法/平方根运算的至少一个后处理阶段所花费的循环数之间的差。因此,取决于较早的较高精度运算与后续较低精度运算之间的精度差异,可能存在一定数量的循环,在这些循环中,禁止在较高精度运算之后开始较低精度运算以避免冲突。对于不同的精度格式对,预定循环数可能不同。
101.每个除法/平方根迭代流水线阶段可以包括:数字选择电路系统,该数字选择电路系统用于基于先前余数值与一组比较常数之间的比较选择数字递推除法或平方根运算的部分结果值的下一个结果数字;以及余数更新电路系统,该余数更新电路系统用于基于余数调整值和由数字选择电路系统选择的下一个结果数字更新先前余数值。每个流水线阶段还可以具有其他元件,例如用于生成余数更新电路系统以冗余表示生成的更新后余数值的一部分的非冗余估计的余数估计电路系统。此外,每个流水线阶段可以具有即时转换电路系统,该即时转换电路系统用于即时保持部分结果值的非冗余版本,该部分结果值对应于
来自数字递推方法的所有前面的迭代的先前选择的结果数字序列。
102.流水线的除法/平方根迭代流水线阶段均可以对在同一数字递推除法或平方根运算内执行的每个相应迭代使用一组相同的比较常数。比较常数可能因运算而异,但在同一运算的相应迭代中,可以使用一组相同的比较常数。因此,除法/平方根流水线可以在除法/平方根流水线的第一除法/平方根迭代流水线阶段之前在除法/平方根流水线的预处理阶段执行表查找以获得一组比较常数,其中该一组比较常数在阶段间传递以避免在同一数字递推除法或平方根运算内的每个除法/平方根迭代流水线阶段重复表查找。利用这种方法,每个单独流水线阶段的定时可以较短,因为不必在每个阶段执行表查找,并且可以减少每个阶段所需的电路逻辑的总量。可以在每个流水线阶段提供一组触发器,它只捕获从先前流水线阶段接收到的比较常数,而无需更新这些比较常数。这大大简化了流水线并减少了整体电路面积。
103.这种方法可能令人惊讶,因为人们可能会认为数字递推除法或平方根运算的比较常数在每次迭代中不应相同,尤其是在典型除法/平方根运算的第一迭代中,与在后续阶段使用的常数相比,可能需要一组不同的比较常数。然而,在下文论述的示例中,除法/平方根流水线包括用于在除法/平方根流水线的第一除法/平方根迭代流水线阶段之前执行操作数预处理的至少一个预处理阶段,操作数预处理包括选择数字递推除法或平方根运算的结果的至少一个初始结果数字。通过在预处理阶段选择除法或平方根运算的结果的至少一个初始结果数字,使得在流水线的主体内不选择该初始结果数字,这意味着可以将一组不同的选择标准用于该结果数字以避免在流水线的主迭代部分的不同阶段需要不同的比较常数。这意味着其余的除法/平方根迭代流水线阶段可以在同一除法或平方根运算内各自使用一组相同的比较常数,以改善电路定时并减少电路面积,如上所述。
104.然而,除法/平方根流水线支持数字递推除法运算和数字递推平方根运算(提供了组合除法/平方根电路系统,如上所述)的实现方式中的一个问题是,与后续迭代相比,需要一组不同的比较常数的初始数字的数量对于除法和平方根运算可能不同。例如,通过误差分析发现,为了获得足够的数字选择准确度,对于平方根运算,当基数8用于给定迭代或子迭代中的数字选择时,前两个平方根数字的选择可以使用不同的比较常数来选择其余的平方根数字。如果使用的基数是除8以外的基数,则使用不同于其余迭代的比较常数选择的初始根数字的数量可以是除二以外的数字。然而,无论基数是多少,平方根运算通常都可以使用不同的比较常数来选择一定数量的初始根数字,然后在已经选择那些初始根数字之后使用一组相同的比较常数来进行后续迭代或子迭代。相反,对于除法运算,可以使用相同的比较常数来选择所有结果数字(不考虑使用的基数)。然而,出于性能原因,可能期望在预处理阶段期间选择至少一个结果数字,以减少除法运算所需的后续流水线阶段的数量并因此减少时延。例如,在下文描述的基数8示例中,可以在预处理阶段选择第一除数。
105.因此,对于平方根和除法运算,在预处理阶段选择的初始数字的数量可能不同。例如,至少一个预处理阶段为数字递推平方根运算生成的初始结果数字的数量可能大于为数字递推除法运算生成的初始结果数字的数量。虽然这显然会在两种运算之间引入一定的不对称性,但实际上这大大有助于减少整体电路面积并提高流水线的性能,因为这意味着对于平方根运算,可以简单地将其余阶段中的比较常数从一个阶段锁存到下一个阶段,而无需在每个流水线阶段进行单独的表查找。
106.然而,由于在至少一个预处理阶段为平方根运算生成的初始结果数字多于为除法运算生成的初始结果数字,这意味着与除法运算相比,平方根运算在预处理阶段之后需要更少的其余迭代,即使在生成精度相同的结果时也是如此,因此,与除法运算相比,平方根运算的结果在平方根运算的较早除法/平方根迭代流水线阶段可用。为了允许使用共享流水线,控制电路系统可以控制除法/平方根流水线以使得至少一个除法/平方根迭代流水线阶段在执行数字递推平方根运算时完全或部分地被跳过或丢弃其结果输出的一些位,该至少一个除法/平方根迭代流水线阶段用于在执行数字递推除法运算时执行至少一次迭代。在一些情况下,平方根运算可以跳过流水线的整个流水线阶段,而在其他情况下,平方根运算可能只是在给定流水线阶段生成的需要丢弃的位的一部分,这取决于所使用的浮点精度和用于数字递推运算的基数。例如,在数字递推方法的给定迭代被分成较小基数的多次子迭代的一些情况下,如在上文论述的一些示例中,对于平方根运算的一些结果精度,可能只跳过给定除法/平方根迭代流水线阶段内的个别子迭代,而不是跳过整个阶段。此外,在一些情况下,如果平方根运算的给定结果精度所需的总位数不是每次迭代或子迭代生成的位数的精确倍数,则可以通过完全执行给定迭代或子迭代来获得结果的截断,但是当仍然需要在最后执行的迭代或子迭代中生成的结果数字的其他位时,丢弃结果的一些位。
107.尽管这意味着当考虑流水线的主体时,平方根运算的结果有时可能早于除法运算的结果获得,但对于平方根和除法运算,运算所需的总循环数可能仍然相同。例如,即使平方根运算的结果可以更早获得,在一个值不变地传递到下一个循环时也可能存在至少一个循环,以允许整体运算定时反映除法运算的定时。这可以使得后处理运算的调度更容易实现,例如,因为无论执行哪种运算,后处理都可以处于相同的定时。
108.在流水线中使用组合除法/平方根数据路径时的另一复杂性在于保持部分结果值,该部分结果值提供与先前选择的结果数字序列相对应的数值表示。如果要使用共享数据路径,则当在流水线的给定流水线阶段执行数字递推方法的给定迭代时,可能期望能够在除法和平方根运算的相同位位置将下一个结果数字插入部分结果值中。然而,如果预处理阶段为除法和平方根运算生成不同数量的初始结果数字,则这可能会使在其余流水线阶段使用共享电路逻辑变得更加复杂,因为人们可能会认为,在给定迭代中插入下一个结果数字的位置可能会因迭代而异。
109.因此,当执行数字递推除法运算时,至少一个预处理阶段可以向第一除法/平方根迭代流水线阶段提供部分结果值,其中选定位位置被设置为虚拟位值,其中那些选定位位置对应于至少一个预处理阶段在执行数字递推平方根运算时将插入不针对数字递推除法运算生成的至少一个额外结果数字的位位置。这使得除法/平方根流水线的给定除法/平方根迭代流水线阶段能够在数字递推除法运算和数字递推平方根运算的相同位位置将下一个结果数字插入部分结果值中。除法/平方根流水线可以包括后处理阶段,以在执行数字递推除法运算时从最终结果值中消除虚拟位值。
110.这表明将额外虚拟位值插入除法运算的部分结果中不会影响除法运算的整体结果,因为部分结果值不用于除法运算中的余数更新或数字选择操作。仅对于平方根运算,部分结果值用于控制余数更新和数字选择操作。对于除法运算,仅“即时”保持部分结果值,以通过不需要在流水线终点将结果的冗余表示转换为非冗余格式来提高性能,因此部分结果值暂时包括在后处理阶段消除的一些虚拟位值不存在问题。通过在用于除法运算的部分结
果值中包括虚拟位值,这允许在两种运算的相同位置插入下一个结果数字,从而改善两种运算的电路逻辑的共享。
111.如上所述的除法/平方根流水线可以用于利用任何基数的数字递推除法或平方根运算。
112.然而,使用除法/平方根流水线可能特别适用于基数64数字递推除法或平方根运算,因为与较低基数相比,基数64运算中每个循环生成的结果的额外位数有助于减少流水线中所需的流水线阶段的总数,使得与迭代实现方式相比,流水线可以在电路面积方面变得具有竞争力。
113.在一个示例中,每个除法/平方根迭代流水线阶段被配置为通过在同一处理循环中执行多次基数n子迭代来执行基数r数字递推除法或平方根运算的相应基数r迭代,其中n《r。通过将较高基数迭代分成较低基数的多次子迭代,这减少了每个流水线阶段中的电路系统数量,使得整个流水线的总电路面积可以与当前迭代实现方式竞争,同时提高性能。在一个特定示例中,r=64并且n=8,尽管更一般地,基数r迭代可分成较低基数子迭代的不同组合,如前面针对平方根处理电路系统示例所论述。
114.即时转换
115.一种用于转换以冗余表示来表示输入值的多个带符号数字的数据处理装置,该数据处理装置包括:接收器电路系统,该接收器电路系统用于在多次迭代中的每次迭代接收来自多个带符号数字的带符号数字,以及来自先前迭代的先前中间数据;串联电路系统,该串联电路系统用于执行对应于带符号数字的位与先前中间数据的位的串联以产生更新后中间数据;以及输出电路系统,该输出电路系统用于提供更新后中间数据作为下一次迭代的先前中间数据,其中先前中间数据包括呈非冗余表示的s3[i],其为呈非冗余表示的输入值的至少一部分乘以3。
[0116]
在这些示例中,各个数字带符号。因此,输入值(其可以是正或负)由各个数字构成,每个数字分别带符号。以此方式,例如,输入值的第一数字可以为正,并且输入值的第二数字可以为负。这可以用于提供被称为冗余表示的表示形式,其中一对字用于表示输入值。这与使用单字表示数字的非冗余表示相反。非冗余表示和冗余表示各自最适合于特定类型的运算,因此不同形式的表示之间的转换可能是有用的。当接收到输入值的每个数字时,会即时执行转换,从而避免了在接收到所有数字后立即转换这些数字的情况下可能出现的较大时延。转换过程使用可以快速执行的位串联来实现。串联的位是从带符号数字导出的。一组中间数据保持在迭代之间并在每次迭代时更新。执行的串联取决于新接收到的当前数字。特别地,中间数据包含包括s3[i],其是s[i](部分结果)乘以三。简单地将s[i]乘以三并不能获得s3[i]的值,这将非常耗时,无法跟上新的带符号数字的到达,更不用说能耗了。注意,尽管此处使用术语

迭代’,但所指的迭代可以是先前提到的

子迭代’。
[0117]
在一些示例中,先前中间数据包括s3[i-1]。在这些示例中,作为来自先前迭代的s3的值的s3[i-1]也保持在中间数据中。此值不需要计算并且可以从先前迭代中继续下去。提供此类数据使得可以对转换过程期间执行进位的时间进行调整。
[0118]
在一些示例中,先前中间数据包括s3m[i],其是呈非冗余表示的输入值的至少一部分乘以三并减去一。换句话说,s3m[i]=(s[i]
×
3)

1。sm3[i]的值等于s3[i]的值减去一。
[0119]
在一些示例中,先前中间数据包括s3m[i-1]。在这些示例中,来自先前迭代的s3m的值也保持在中间数据中。此值不需要计算并且可以从先前迭代中继续下去。提供此类数据使得可以对转换过程期间执行进位的时间进行调整。
[0120]
在一些示例中,由串联电路系统执行的串联包括对s3[i]和s3m[i]中的每一者的串联,以产生包括s3[i+1]和s3m[i+1]的更新后中间数据。因此,在每次迭代(或子迭代)中,四个值中的每一个值都执行串联。对于四个值中的每一个值,串联可能不同。
[0121]
在一些示例中,与无符号数字相对应的位串联到s3[i]和s3m[i]中的一者以产生s3[i+1],并且串联到s3[i]和s3m[i]中的另一者以产生s3m[i];并且基于无符号数字是大于0还是小于0来确定s3[i]和s3m[i]中的一者。在这些示例中,无符号数字是大于零、为零还是小于零会影响是否使用s3[i]或s3m[i]来产生s3[i+1]并且使用s3[i]和s3m[i]中的另一者来产生s3m[i+1]。
[0122]
在一些示例中,数据处理装置包括调整电路系统,该调整电路系统被配置为基于带符号数字的量值以及带符号数字为正还是为负,在串联之前对s3[i]和s3m[i]中的至少一个执行选择性调整。例如,选择性调整可以用于实现输出值的列之间的进位。
[0123]
在一些示例中,当带符号数字的量值乘以三超过表示带符号数字的基数时,执行选择性调整。选择性调整可以用于处理要串联的数字乘以三的情况大于用于转换的基数的情况,并且因此,有必要递增或递减其他位置中的数字。例如,通过与基数10类比,如果部分结果s[i]=512,并且希望在此数上添加数字(千位数)6,则可以这样做以实现数字s[i+1]=6512。然而,如果保持s3[i]=1536,并且希望在此数上添加数字(千位数)6,那么需要添加3*6=18。然而,这无法通过修改单个位置来完成,因为基数是10,并且18大于10。相反,在千位数上加上8以得到9536,并进位
‘1’
作为万位数以得到19536。
[0124]
在一些示例中,数据处理装置被配置为转换以冗余表示来表示输入值的多个带符号数字,而不使用加法电路系统。特别地,s3m[i]的值不是简单地通过取s3[i]并减去一(例如,使用加法电路系统)来导出的。相反,通过在i次迭代中使用串联来计算这些值(并为s3[i]和sm3[i]中的每一者串联不同的数字),可以用比使用加法电路系统减去1所实现的时延更低的时延来确定这些数。
[0125]
在一些示例中,数据处理装置包括数字递推电路系统,该数字递推电路系统用于执行数字递推运算以产生多个带符号数字,其中在多次迭代中的每次迭代中,多个带符号数字中的一个带符号数字被提供给接收器电路系统。数字递推电路系统可以用于提供构成输入值的一系列数字,其中在迭代(或子迭代)时,例如在每个时钟循环提供这些数字的子集。
[0126]
在一些示例中,数字递推电路系统被配置为以平方根运算模式进行运算,其中数字递推运算是平方根运算。用于计算平方根的数字递推算法执行部分根s的乘法,即取决于所加上的数字的乘法。由于部分根s在每次迭代时都会发生变化,因此每次迭代都会执行此乘法。乘以0总是得到0。乘以1就是恒等函数。同时,可以通过执行位移来实现乘以二的幂(例如2或4)。乘以-1、-2和-4可以类似地通过分别对乘以1、2和4的结果求反来实现。然而,乘以3明显更复杂。执行实际乘以3的乘法电路系统可能需要数个处理器循环,这太慢了。即使添加x和2x以确定3x也需要加法电路系统,这也可能需要很长时间来执行。因此,通过保持经由串联实现的s3的值,可以有效地执行平方根数字递推。
[0127]
在一些示例中,数字递推电路系统被配置为在数字递推运算是除法运算的除法运算模式下进行运算;并且先前中间数据包括:s[i],其是呈非冗余表示的输入值的至少一部分;以及sm[i],其是呈非冗余表示的输入值的至少一部分减去一,其中在多次迭代之后,输出电路系统进一步被配置为输出s[i]。因此,可以在平方根运算和除法运算中使用执行从输入值到输出值的转换的相同数据处理装置。计算还可以包括生成s[i]以及sm[i],s[i]是转换为非冗余表示的输入值的至少一部分,sm[i]是该值减去一。
[0128]
在一些示例中,串联电路系统被配置为在除法运算模式下抑制s3[i]的生成。如先前所解释,当执行平方根数字递推时,s3(和扩展的s3m)的值具有特定相关性。当执行数字递推除法时,不需要针对每次迭代执行部分根的乘法,并且因此不需要生成s3和s3m。因此,可以通过在除法运算模式下抑制s3和s3m的生成来降低功耗。
[0129]
在一些示例中,数字递推运算的基数至少为8。对于至少为8的基数,如果可用数字不同时包括+3和-3,则包括其中至少一个。因此,在平方根数字递推算法期间,取决于最近的数字,可能需要将部分根乘以3或-3。如先前所解释,乘以3可能很耗时,因此通过经由串联保持s3和s3m,可以在满足电路系统的定时约束的同时有效地执行基数为8的平方根数字递推。
[0130]
在一些示例中,带符号数字的可能值包括以下中的至少一个:+3和-3。如先前所解释,使用无符号数字可能需要乘以3,这比涉及两的幂的乘法更难执行。
[0131]
选择常数
[0132]
在一些示例中,提供了一种用于对输入值执行数字递推运算的数据处理装置,该数据处理装置包括:接收器电路系统,该接收器电路系统被配置为接收数字递推运算的先前迭代的余数值;以及比较电路系统,该比较电路系统被配置为将数字递推运算的先前迭代的余数值的最高有效位同与数字递推运算结果的下一个数字的可用数字相关联的多个选择常数中的每一个选择常数进行比较,并且基于这些比较输出数字递推运算结果的下一个数字,其中每个选择常数与可用数字和输入参数中的一者相关联;以及存储电路系统,该存储电路系统被配置为存储选择常数的子集,选择常数的子集从选择常数中排除与来自可用数字的排除数字相关联的排除选择常数。
[0133]
在数字递推过程期间,在先前迭代的余数值的最高有效位与数个选择常数之间执行比较,以便确定数字递推运算的下一个数字,即要输出的下一个数字。选择常数的数量对应于余数值的最高有效位的可能值的数量与输出数字可以具有的可能值的数量的乘积。例如,如果考虑余数值的六个最高有效位并且每个输出数字存在八个可能值,则选择常数表保留8
×
32=256个值。每个值也可能占用数个位。另外,通常需要提供多个表以便处理平方根数字递推和除法数字递推。因此,要存储的值的数量很大。在以上示例中,未存储至少一些所需的选择常数。也就是说,对于所支持的数字递推运算的范围(基于所考虑的基数和最高有效位的数量),数字选择过程所需的至少一些选择常数未存储在数据处理装置中的任何位置。因此,可以减少所需的存储空间量。这会产生更小、更低功率的电路系统。
[0134]
在一些示例中,数据处理装置包括转换电路系统,该转换电路系统被配置为从存储在存储电路系统中的选择常数生成排除的选择常数。在这些示例中,未存储在数据处理装置中的缺失或省略的选择常数改为从存储在数据处理装置中的其他选择常数推断或生成。
[0135]
在一些示例中,转换电路系统被配置为通过对存储在存储电路系统中的选择常数之一的符号执行选择性反转来生成排除的选择常数。在这些示例中,可以通过取另一选择常数并反转其符号来生成一些省略的选择常数。反转数字的符号(例如,通过取两个补码)可以有效地执行,因此不需要影响执行选择操作所花费的时间。
[0136]
在一些示例中,一个选择常数与同一个输入参数和一个不同的可用数字相关联,作为排除的选择常数。因此,可以

合并’选择常数表的两列。也就是说,对于余数值的一组给定的最高有效位,两个不同数字的选择常数相同(符号根据为哪个数字生成选择常数而变化)。例如,对于可能的输出数字+4和-3,余数位0.100010的选择常数可能是
‘2’
。然而,对于数字+4,选择常数可能为负(-2),并且对于数字-3,选择常数可能为负(+2)。因此,这两列可以合并成一列,其中规则是常数是正还是负。
[0137]
在一些示例中,存储电路系统被配置为针对选择常数存储异常标记以指示是否发生选择性反转以生成排除的选择常数。在这些示例中,是否执行反转取决于异常标记的值。反转还可能取决于其他因素,例如取决于生成选择常数所针对的数字。例如,考虑到余数位0.100010的先前示例,对于一个数字(+4),选择常数可能为正(+2),并且对于另一个数字(-3),选择常数可能为负(-2)。然而,异常标记可能会覆盖此情况(使两个数字具有相同的选择常数)或甚至可能反转(对于数字+4为-2并且对于数字+3为+2)。
[0138]
在一些示例中,数字递推运算是平方根数字递推运算;并且输入参数是部分根。
[0139]
在一些示例中,数字递推运算是除法数字递推运算;并且输入参数是除数。
[0140]
在一些示例中,在除法运算模式下,数字递推运算是除法数字递推运算,并且输入参数是除数;并且在平方根运算模式下,数字递推运算是平方根数字递推运算,并且输入参数是部分根。因此,在这些示例中,可以取决于运算模式使用装置来执行除法数字递推和平方根数字递推。
[0141]
在一些示例中,在除法运算模式下,数字递推运算是除法数字递推运算,并且输入参数是除数;在平方根运算模式下,数字递推运算是平方根数字递推运算,并且输入参数是部分根;并且每个选择常数是除法数字递推运算选择常数,或者每个选择常数是平方根数字数字递推运算选择常数。尽管此类数据处理装置能够执行除法和平方根数字递推,但是存储的选择常数特定于这两种运算模式(除法或平方根)之一。通过存储仅特定于两种运算模式之一的选择常数,可以减少数据处理装置的存储要求。
[0142]
在一些示例中,每个选择常数是除法数字递推运算选择常数。这并不是说存储用于除法数字递推的所有选择常数,只是存储的这些常数是除法数字递推选择常数,可以用作生成平方根数字递推选择常数的过程的一部分。
[0143]
在一些示例中,转换电路系统被配置为通过选择性反转除法数字递推运算选择常数之一的符号,在除法运算模式中生成排除的选择常数。也就是说,使用除法数字递推常数之一,并且基于一些标准(例如,与常数相关联的数字的值)反转该除法数字递推常数。
[0144]
在一些示例中,转换电路系统被配置为通过参考除法数字递推运算选择常数之一,在平方根运算模式下生成排除的选择常数。
[0145]
在一些示例中,存储电路系统被配置为存储平方根运算模式下排除的选择常数与除法数字递推运算选择常数之一之间的多个映射。映射用于指示哪一个除法数字递推运算选择常数将用作创建平方根数字递推运算选择常数的基础,和/或如何修改除法数字递推
运算选择常数之一以生成对应的平方根数字递推运算选择常数。
[0146]
在一些示例中,存储电路系统被配置为针对选择常数存储异常标记以指示是否发生选择性反转以生成排除的选择常数。异常标记可以是一组标记的一部分(或作为较大值的一部分存储),其指示发生反转以便生成排除的选择常数的情况。
[0147]
在一些示例中,数字递推运算以基数8为单位。例如,可用的数字可能限于{-4,-3,-2,-1,0,1,2,3,4}。
[0148]
数据处理装置示例
[0149]
图1示出了数据处理装置2的示例,例如处理器,其支持执行根据特定指令集架构(isa)定义的指令。该装置具有指令获取电路系统4,用于从指令高速缓存或存储器(图1中未示出)获取根据架构定义的程序指令。获取的指令由解码电路系统6解码以标识要执行的运算。响应于给定指令,解码电路系统6生成控制信号,这些控制信号控制执行单元8以执行由该指令表示的处理运算。可以从寄存器10读取给定处理运算的操作数,并且可以将处理运算的结果写回寄存器10。执行单元8可以包括各种类型的执行单元,包括算术单元,例如加法器20、乘法器22和除法/平方根单元24。执行单元还可以包括其他类型的功能单元,例如:分支单元26,用于确定分支指令的结果,这些分支指令可以触发正在执行的程序内的程序流的非顺序变化;以及加载/存储单元28,用于执行加载指令以将数据从高速缓存或存储器加载到寄存器10或执行存储指令以将数据从寄存器10存储到高速缓存或存储器。
[0150]
后续示例示出了处理装置2的除法/平方根执行单元24的电路逻辑设计。当解码阶段6解码除法指令时,解码阶段6控制除法/平方根执行单元24以根据数字递推方法执行除法运算。当解码阶段6解码平方根指令时,解码阶段6控制除法/平方根执行单元24以根据数字递推方法执行平方根运算。
[0151]
虽然后续示例集中于除法/平方根执行单元24,但是应当理解,处理装置2的其余部分可以根据任何已知的处理器设计技术来构建。应当理解,图1是数据处理器的部件的简化表示,并且实际上还可以提供图1中未示出的许多其他部件。
[0152]
数字递推除法和平方根的理论基础
[0153]
数字递推是一类迭代算法,它在每次迭代中计算基数r结果数字p
i+1
和余数rem[i]。余数用于获得下一个基数r数字。基数r是2的幂,并且每个基数r数字表示结果的log
2(r)
字递推算法可用于计算除法(x/d)和平方根
[0154]
迭代i之前的部分结果定义为:
[0155][0156]
其中数字可以取值pi∈{-r/2,

,-1,0,+1,

+r/2}。每次迭代由以下方程描述,
[0157][0158]
rem[i+1]=r
×
rem[i]-p
i+1
×
f[i+1](3)
[0159]
其中分别来说,是余数rem[i]的几位的估计,并且是除数d(在除法的情况下)或部分结果s[i]的几位的估计(s[i]是平方根运算的特定情况下的部分结果p[i])。选择函数sel所需的估计中的位数取决于基数和运算。对于每种运算,项f[i+1]是不
同的,
[0160][0161]
对于快速迭代,余数以进位保留或带符号数字冗余表示保持。在下文描述的实现方式中,使用已知方法,使用类似进位保留的表示来表示余数,其中余数用正字和负字表示(然后可以通过从正字减去负字来获得对应于余数的非冗余二进制值)。
[0162]
另一方面,由于算法收敛条件和方程(3)中的乘法次数r,余数在整数部分中将具有数个位;整数位的数量取决于基数、数字集和运算。
[0163]
然后,在每次迭代从当前余数获得结果的基数r数字,并为下一次迭代计算新的余数,并更新部分结果。
[0164]
用于选择下一个结果数字的选择函数包括将余数估计与一组相关的选择常数进行比较,每个数字值一个常数。因此,
[0165][0166]
其中ct(k)和ct(k+1)分别是数字值k和k+1的选择常数,其中k∈{-(r/2)+1,...,-1,0,+1,...,+r/2}。无需保持数字值k=-r/2的选择常数,因为当时,可以确定要选择的数字是k=-r/2。估计所需的rem[i]和t[i]的位数取决于基数和运算:基数越大,估计的位数越大。
[0167]
部分结果呈基数r带符号数字冗余表示,并且产生最高有效数字优先(msdf)。每次迭代将该部分结果转换为非冗余表示。最有效的转换技术是众所周知的即时转换。基本上,即时转换将数字p
i+1
与部分结果p[i]相加(参见方程(1));然而,由于数字可以为负,因此这种加法可以产生进位传递。为了防止这种缓慢的进位传递,保持另一种形式的结果,pm[i],其值为
[0168]
pm[i]=p[i]-r-i
(6)
[0169]
使用第二种形式,串联方面的转换算法是
[0170][0171][0172]
这样,转换中不涉及算术运算,只是将值串联到p[i]和pm[i],其中串联的值取决于选定数字p
i+1

[0173]
数字递推算法的迭代次数为
[0174][0175]
n是结果的位数,包括舍入所需的位。表示天花板函数,使得是大于或等于n/log2(r)的最小整数。
[0176]
循环数与迭代次数直接相关,并且与每个循环执行的迭代次数直接相关。然后,考虑到每个循环的m次迭代,循环数为
[0177][0178]
方程(1)到(10)可以详细说明为任何基数。在接下来的两节中,这些方程将针对r=8以及除法和平方根进行详细说明。可以通过重叠两次基数8子迭代来获得较高基数r=64。然后,子迭代基数为8。
[0179]
基数8除法
[0180]
被除数x和除数d的浮点除法产生商q=x/d。对于基数8,迭代i之前的部分商(部分结果)和在迭代i中获得的数字分别称为q[i]和q
i+1
,然后方程(1)可以重写为
[0181][0182]
考虑到t[i]=d,数字计算和余数更新为
[0183][0184]
rem[i+1]=8
×
rem[i]-q
i+1
×
d(13)
[0185]
注意,f[i+1]=d,并且余数的初始值为rem[0]=x/8。
[0186]
对于选择函数,已经发现,仅需要同化余数的10个最高有效位即可获得精确度足以进行数字选择的余数估计。如前所述,选择常数还取决于除数。除数的6个最高有效位用于为当前除法的所有迭代选择一组8个选择常数。不同的除数值可以选择不同的组。注意,因为在选择常数之前对操作数进行正规化,所以除数的最高有效位始终为1。选择常数存储在查找表(lut)中。
[0187]
对于此实现方式,已经确定仅需要余数的10个最高有效位(msb),即三个整数位和七个分数位,即可用方程(12)选择下一个商数字。
[0188]
基数8平方根
[0189]
操作数x的浮点平方根产生根迭代i之前的部分根和在迭代i中获得的数字分别称为s[i]和s
i+1
(它们分别对应于前面所示的一般方程中的p[i]和p
i+1
),然后对于基数8,方程(1)可以重写为
[0190][0191]
平方根迭代由以下方程定义
[0192][0193]
rem[i+1]=8
×
rem[i]-s
i+1
×
(2
×
s[i]+s
i+1
×
8-(i+1)
)(16)
[0194]
其中
[0195]
d[i+1]=f[i+1]=2
×
s[i]+s
i+1
×
8-(i+1)
(17)
[0196]
然后
[0197]
rem[i+1]=8
×
rem[i]-s
i+1
×
f[i+1](18)
[0198]
(在下文的一些实例中使用记号d[i+1],这与f[i+1]的值相同)。
[0199]
余数和部分根的初始值分别为rem[0]=x-1和s[0]=1.0。
[0200]
选择函数包括余数估计与一组8个部分根相关选择常数的比较,每个数字值一个常数。因此,
[0201][0202]
cte(k)和cte(k+1)分别是数字值k和k+1的选择常数,其中k∈{-3,-2,-1,0,+1,+2,+3,+4}。注意,不必为数字值-4保持选择常数。已经发现,仅需要同化余数的11个最高有效位即可获得准确度足以进行数字选择的余数估计。
[0203]
选择常数取决于部分根。部分根的7个最高有效位用于选择一组8个11位选择常数。不同的部分根值可以选择不同的组。部分根处于区间[0.5,1]中;注意,在产生非零数字之前,值s[i]=1是可能的。因此,考虑到部分根有1个整数位(在产生第一个非零和负数字后为零)和6个分数位,并且部分根的最小值为0.5,选择常数可以存储在33
×
88位查找表(lut)中,其中s[i]∈[0.5,1)有32个条目并且s[i]=1有1个条目(尽管如下文在某些方法中所论述,偏移lut可用于减小平方根比较常数的存储大小)。
[0204]
利用两次基数8迭代的基数64平方根的朴素实现方式
[0205]
每次基数8迭代产生3位的结果;然后,两次基数8迭代可以重叠以每个循环获得6个结果位,这相当于基数64平方根。图2中示出了朴素实现方式。连接两个相同的基数8子迭代以获得基数64迭代。注意,只有余数的最高有效位用于选择商数字;在12位加法器30中获得11位余数估计并且为了生成余数估计,可以丢弃余数的最低有效位。一旦获得了根数字,就利用方程(18)计算下一个余数,并且该数字串联到实际部分根以获得下一个部分根。
[0206]
因此,在每次子迭代中:
[0207]

进位传递加法器30接收在先前子迭代中生成的余数值rem[i]31,该余数值以冗余表示来表示。进位保留加法器30通过对余数值31的两个字的高位执行进位传递加法(例如,如果使用具有上述正字和负字的表示,则从正字中减去负字)来生成余数值31的最高有效位的一部分的非冗余余数估计。
[0208]

数字选择比较器32将余数估计与一组比较常数34中的每一个比较常数进行比较,以确定下一个根数字33。
[0209]

余数调整值生成电路系统36生成余数调整值39,其对应于上述方程17所示的“d向量”或d[i+1]项。因此,对于平方根运算,余数调整值取决于从先前子迭代接收到的部分根值37和由数字选择比较器32选择的下一个根数字33。应注意,术语“d向量”用作d[i+1]项的标签,这仅仅是因为在一些实现方式中,值中的位数与用于向量操作数的位数相称,但此术语并不意味着“d向量”是包括多个独立数据元素的单指令多数据(simd)向量操作数,即,“d向量”是单个数据值而不是多个独立数据值的向量。
[0210]

余数更新电路系统38(包括3:2进位保留加法器)通过添加先前余数31和余数调整值39的正字和负字,基于余数调整值39更新从先前子迭代接收到的先前余数31,以生成更新后余数40(仍呈冗余表示),该更新后余数被供应到下一次子迭代以成为该子迭代的先前余数31。在一次子迭代中输出更新后余数40与将先前余数31输入到下一次子迭代的余数更新电路系统38中的进位保留加法器之间的路径上,应用3位左移来表示上述方程18的8
×
rem[i]项。
[0211]

即时转换电路系统42将基于选定根数字33确定的值插入部分根值37中以生成更新后部分根值43,该更新后部分根值被输出以在后续子迭代中成为部分根值37。即时转换可以根据以上方程6到8进行。因此,尽管为了简洁起见,图2中未示出,但部分根值可以表示为两种单独的形式p和pm,如前所述,以简化即时转换,然后将即时转换作为串联进行。
[0212]
来自一次子迭代的更新后余数40和更新后部分根值43成为下一次子迭代的先前余数31和部分根值37。类似地,来自一次迭代中的最终子迭代的更新后余数40和更新后部分根值43成为下一次迭代中的第一子迭代的先前余数31和部分根值37。
[0213]
然而,这种朴素实现方式太慢了。为了加速循环,使用了几种技术,将在下一节中进行解释。
[0214]
基数64平方根迭代
[0215]
图3示出了用于实现对应于单次基数64平方根迭代的数字迭代循环的平方根处理电路系统。在此示例中,平方根处理电路系统是迭代单元,其中一次迭代的输出作为输入反馈给后续迭代中的相同单元,其中触发器50锁存在循环间传递的值。然而,如下文关于图9进一步论述,平方根处理电路系统还可以用于流水线实现方式。
[0216]
平方根处理电路系统包括数个部分:(1)余数更新电路系统34、(2)数字选择电路系统(根数字计算)32、(3)余数估计电路系统30。还示出了这些部分之间的连接。在下文中,详细解释这些部分中的每一个部分。平方根处理电路系统还包括即时转换电路系统42,稍后将对其进行更详细的论述。即时部分根转换保持两种部分根形式s[i]和sm[i],即sm[i]部分根s[i]减1,
[0217]
sm[i]=s[i]-8-i
(20)
[0218]
这两种形式用于基数64迭代的数个部分。另外,
[0219]
s3[i]=3
×
s[i]
[0220]
s3m[i]=s3[i]-8-i
[0221]
也需要进行即时部分根转换,如下文将关于图13到图16更详细地论述。s3[i]和s3m[i]的使用简化了乘以
±
3根数字的处理。
[0222]
如图3所示,当基数64迭代被分成两次基数8子迭代时,对应于相应基数8子迭代的余数估计电路系统30、数字选择电路系统32和余数更新电路系统34中的每一者有两个实例,尽管如下文进一步论述,用于相应子迭代的电路系统之间可能存在一些重叠。即时转换电路系统42也可以有两个实例,用于使用在每次基数8子迭代中获得的基数8根数字执行即时转换,尽管为了简洁起见,在图3中此即时转换电路系统示出为单个块。
[0223]
余数更新
[0224]
图4更详细地示出了余数更新电路系统30,用于在单次基数8子迭代(其可以是基数64迭代内的第一或第二基数8子迭代)中执行余数更新。推测性地完成循环中每次迭代的余数更新(参见方程16)。也就是说,计算根数字的每个可能值的更新后余数值rem[i+1],并且一旦知道了根数字s
i+1
,就选择正确的余数。因此,余数更新电路系统30具有数个复制电路单元60,其各自产生更新后余数的相应候选输出值,对应于下一个根数字s
i+1
的不同选项。没有为s
i+1
=0提供复制电路单元60,因为在这种情况下,上述方程18意味着更新后余数rem[i+1]可以直接从先前余数值rem[i]获得,而无需加法。先前余数估计的符号用于减少推测性余数的数量。如果余数估计为正,则根数字只能为{+4,+3,+2,+1,0}。另一方面,如果
余数估计为负,则根数字只能为{-4,-3,-2,-1,0}。
[0225]
因此,每个复制电路单元60具有进位保留加法器38和选择复用器62,该选择复用器用于取决于从先前子迭代或迭代接收到的先前余数估计的符号,在逻辑块64中针对量值相等的正根数字和负根数字计算的替代值之间进行选择。这减少了所需的复制单元的数量(4个复制电路单元60现在足够分别对应于数字
±
1、
±
2、
±
3、
±
4,而不需要8个复制电路单元来分别处理每个正/负数字)。
[0226]
复制电路单元60为除0以外的所有根数字值(正值和负值)构成向量d[i+1](有时称为f[i+1]):
[0227][0228]
注意,虽然方程21示出了加法,但这实际上可以实现为2*s[i]或2*sm[i]与位0001、1111、0010、1110、0100、1100的模式之间的串联,如逻辑64的输入所示,用于形成每个量值1、2、4的相应正/负数字所需的余数调整值的值。因此,在图4中,示出了在每个可能的d[i+1]向量的即时计算中要串联的数字的位。掩码mask[i]用信号表示必须串联根数字的位置(掩码在子迭代之间移动3位,使得每个连续基数8根数字串联在比插入先前基数8根数字的位置低3位的位置)。
[0229]
标记为fda_pos和fda_neg的块64(其中x=1,2,3,4)将具有与正数字或负数字相对应的值的2*s[i]或2*sm[i]与|s
i+1
=a|串联,以分别表示根据方程21的d向量d[i+1],并评估-a
×
d[i+1](对应于上述方程18中的项-s
i+1
×
f[i+1]),以产生d向量fd1、fd2、fd3、fd4。
[0230]
注意,在递推中,d[i+1]乘以s
i+1
。为了防止3x乘法,以不同的方式处理s
i+1

±
3的情况:3
×
d[i+1]由块fd3_pos或fd3_neg直接使用3
×
s[i]构建,如下所示:
[0231]3×
d[i+1]=2
×
(3
×
s[i])+(3
×si+1
)
×
8-(i+1)
(22)
[0232]
在这种情况下,我们串联|3
×si+1
|=9,这需要4位来表示。这并不意味着有任何问题,因为3
×
s[i]的1位左移为额外位留出了空间。然后,
[0233][0234]
下文关于图14和图15进一步论述s3[i]和s3m[i]的保持。对于s
i+1

±
3候选值,要串联的位模式对于s
i+1
=+3指示为1001,并且对于s
i+1
=-3指示为0111。同样,掩码用信号表示插入串联位的位置。
[0235]
余数估计符号用于选择在3比2进位保留加法器38之前设置的正或负d[i+1]。因此,通过这种方式,只计算5个推测性余数,而不是9个。
[0236]
余数估计符号的倒数放在推测性余数进位字的最低有效位中,因此如果余数估计符号为1,则推测性余数进位字的最低有效位为0,并且如果余数估计符号为0,则推测性余数进位字的最低有效位为1。这是因为如果数字为正(余数估计符号为0),则需要减去项s
i+1
×
f[i+1],如方程(18)所示。减法意味着我们必须计算s
i+1
×
f[i+1]的2的补码。2的补码是通过对项s
i+1
×
f[i+1]进行位补码并加上1来获得的。例如,11100010的2的补码为00011101+1=00011110。因此,在图4中的fd1_pos、fd2_pos、fd3_pos和fd4_pos模块中对项进行位补
码,并通过将进位字的定义为0的最低有效位改为1来加上“+1”。这样,我们就不需要额外的加法器来完成2的补码的计算。如果数字为负(余数估计符号为1),则方程(18)中的运算是加法,因此我们不需要进行2的补码,因此进位字的最低有效位保持为0。因此,总之,余数估计符号的倒数放在进位字的最低有效位中。
[0237]
在由复制电路单元60提供的这些推测性余数中,对于数字s
i+1
=0,没有块fda_pos和fda_neg的等效物,因为它不需要额外的硬件,只需要复用器68中的额外输入,该复用器用作选择电路系统,用于在数字选择电路系统32确定了下一个根数字s
i+1
后选择正确的候选输出值。
[0238]
每个进位保留加法器38执行3个项的进位保留加法:2个项是冗余表示的先前余数rem[i]的正字和负字,并且第三个项是由fd1到fd4表示的来自方程(18)的
–si+1
×
f[i+1]项。每个进位保留加法器38的输出是用于选择为更新后余数rem[i+1]的候选值,其仍呈冗余表示并且因此包括两个项,即正字和负字。对于根数字=0的情况,没有进位保留加法器38,因为在这种情况下,候选值仅等于8*rem[i],因此不需要加法。用作选择电路系统的5:1复用器68取决于由根数字选择电路系统32选择的根数字s
i+1
在候选输出值之间进行选择,以提供更新后余数rem[i+1]。
[0239]
余数估计
[0240]
图5示出了第一和第二子迭代的余数估计电路系统30。余数估计是对余数的11个最高有效位的早期推测性计算,用于根数字选择。这允许获得更好的定时,因为从经过根数字计算的关键路径中去除了余数估计。
[0241]
示出了两种不同的情况:
[0242]
1.第一子迭代中的余数估计,用于产生用于在循环中的第二子迭代中进行数字选择的余数估计。这在第一迭代期间完成,基于由第一子迭代的余数更新电路系统34获得的推测性余数,如图4所示。因此,五个进位传递加法器70将由第一子迭代的余数更新电路系统34获得的推测性余数(rem
d4
[i+1]到rem
d1
[i+1],以及rem[i])的和以及进位字的最高有效位相加。当已知根数字s
i+1
时,复用器72选择用于循环中的第二子迭代中的根数字选择的适当余数估计。因此,这是包括复制电路单元70和选择电路系统72的复制电路系统的另一实例。
[0243]
2.第二子迭代中的余数估计,用于产生用于在下一个循环的第一子迭代中进行数字选择的余数估计(余数估计电路系统30在第二迭代中输出的值可以在触发器50中触发以供在下一个循环中使用,如图3所示)。余数估计电路系统30在第二子迭代中生成的余数估计是8
×
rem[i+2]的最高有效位的同化,其可作为第一子迭代中的先前余数值从rem[i]输入中导出,如下所示(基于使用方程18将rem[i+2]与rem[i+1]的关系中的rem[i+1]替换为使rem[i+1]与rem[i]相关的方程18的另一个实例):
[0244]8×
rem[i+2]=8
×
(64
×
rem[i]-8
×si+1
×
d[i+1]-s
i+2
×
d[i+2])(24)
[0245]
=8
×
64
×
rem[i]-8
×8×si+1
×
d[i+1]-8
×si+2
×
d[i+2]
[0246]
在循环中的第一和第二迭代期间计算为
[0247]
msb_first=64
×
(8
×
rem[i]-s
i+1
×
d[i+1])(25)
[0248]
以及
[0249]
msb_rem[i+2]=msb_first-8
×si+2
×
d[i+2](26)
[0250]
其中在第一子迭代期间评估方程(25),并且在第二子迭代中评估方程(26)。这两个方程都是针对五个余数候选项进行推测性评估的。
[0251]
注意,方程(18)和(25)之间的差是64x因子,其是6位左移。如果使用17位加法器而不是两个12位加法器,则可以在相同的逻辑中评估这两个方程:11个最高有效位是在第一子迭代中计算的余数估计,用于在循环中的第二子迭代中进行数字选择,并且13个最低有效位用于在第二子迭代期间完成余数估计计算,以获得用于在方程(26)中的下一个循环的第一子迭代中进行数字选择的余数估计。
[0252]
因此,利用这种方法,第一子迭代中的加法器70计算用于在第二子迭代中进行数字选择的余数估计中实际不需要的一些额外(最低有效)位,但通过计算这些额外位,这使得能够在第一子迭代中计算上文所示的项msb_first,并且与单独加法器在第二子迭代中计算这些位相比,可以减少整体电路面积。
[0253]
第二子迭代的余数估计电路系统中的加法器74评估方程26,该方程取决于msb_first和d向量0、fd1[i+2]到fd4[i+2],其对应于分别具有s
i+2
=0,s
i+2

±
1到s
i+2

±
4的方程中的项8
×si+2
×
d[i+2]。这些向量在循环中的第二子迭代中作为余数更新电路系统34的一部分产生(参见图4中的fd1到fd4)。这种方法意味着在第二子迭代的余数估计电路系30中的进位传递加法器74开始加法之前,无需等待第二子迭代的余数更新电路系统34中的进位保留加法器38执行其加法。相反,可以与第二子迭代中的余数更新并行地执行第二子迭代中的更新后余数估计的计算,以从关键定时路径中去除时延。这改善了性能。
[0254]
根数字选择
[0255]
图6示出了由数字选择电路系统32执行的根数字计算(其可以是基数64迭代内的第一或第二基数8子迭代)。先前已概述根数字计算:将余数估计与8个比较常数中的每一个比较常数进行比较,并根据方程(19)选择数字。根数字存储为1热(hot)9位向量s[i],i=8,

,0,其中如果digit=i-4,则s[i]=1;例如,如果根数字为-1,则s[3]=1,并且9位向量为s={0,0,0,0,0,1,0,0,0}。
[0256]
这如图6所示。存在一组11位比较器80,用于将余数估计与每个比较常数进行比较;如果余数估计大于或等于比较常数,则每个比较器的进位输出,即ge输出,设置为1。然后,将ge输出和余数估计的符号输入到一组nand和or门,以产生1热9位s向量的每一位。
[0257]
从存储在查找表(lut)中的值导出根选择所需的选择常数。每次基数8迭代的选择常数取决于该子迭代之前的部分根值,使得每次子迭代使用一组不同的比较常数。然而,已经得出,除前两次子迭代外,每次子迭代都可以使用一组相同的选择常数。如下文关于图9的流水线示例进一步解释,可以在预处理阶段进行前几个根数字的选择以避免需要进行单独lut查找的主迭代循环,因为这允许将相同的选择常数用于每次迭代。
[0258]
将其放在一起
[0259]
图7示出了数字递推平方根处理循环的框图。用虚线标识不同部分(余数更新电路系统34、余数估计电路系统30、根数字选择电路系统32和即时根转换42)。另外,这些部分之间的关系也在图中示出。
[0260]
如前面更详细地示出,循环逻辑的数个部分使用推测和复制来满足定时约束。因此,在数个位置使用复制,从而获得每个数字值的推测性结果。在大多数情况下,通过使用余数的符号来减少复制,以使正数字值和其对应的负数字值具有相同的逻辑;这样,逻辑被
复制5次而不是9次,从而显著减少了面积。一旦知道根数字,就在9或5个推测性值中选择正确的值。
[0261]
在一些部分中,如在第一子迭代和第二子迭代中的余数更新中以及在第二子迭代中的余数估计中,逻辑仅被复制四次,但是选择是在5比1复用器中完成的。这是因为复用器的一个输入是复制逻辑的一个输入(因此不需要复制电路单元来计算推测性候选值的新值)。
[0262]
因此,图7示出了可以用于图1的除法/平方根单元24的平方根处理电路系统的示例。在一些示例中,除法/平方根单元24还可以包括除法处理电路系统的单独实例,其响应于除法指令执行除法运算,而无需在平方根处理电路系统与除法处理电路系统之间共享电路系统和数据路径。
[0263]
然而,如下文关于图8进一步解释,在一些示例中,上文针对方根处理电路系统描述的技术可以用于组合除法/平方根处理电路系统中,该组合除法/平方根处理电路系统也可以执行除法运算,在这种情况下,组合除法/平方根处理电路系统也充当前面提到的“平方根处理电路系统”。
[0264]
用于共享除法和平方根迭代的基数64组合除法/平方根处理电路系统
[0265]
图8示出了用于执行基数64除法/平方根迭代的组合除法/平方根处理电路系统的示例,该除法/平方根处理电路系统可以作为图1的除法/平方根单元24的一部分提供。组合除法/平方根处理电路系统使用共享电路系统和共享数据路径来执行除法和平方根运算两者,这两种运算都利用相同的基数64。对于除法和平方根运算,每个循环执行相同次数的基数64迭代(在此示例中,对于除法和平方根运算,每个循环执行数字递推方法的单次基数64迭代)。对于上述平方根示例,在此示例中,基数64迭代被分为两个重叠的基数8子迭代。组合除法/平方根处理电路系统接收信号“div/sqrt”作为输入,该信号指示当前运算是除法运算还是平方根运算。指令解码器6可以基于正在处理的指令是除法指令还是平方根指令来控制该信号。
[0266]
组合除法/平方根处理电路系统包括前面针对平方根示例关于图3到图7描述的所有部件,并且因此以与前面所描述相同的方式执行平方根运算。此电路的大部分也可以重复用于除法运算,使得用于生成平方根运算的更新后余数rem[i+1]、rem[i+2]、余数估计rem_est[i+1]、rem_est[i+2]和部分结果值s[i]、sm[i]的数据路径也用于生成除法运算的对应值(当执行除法运算时,记号q[i]、qm[i]用于部分结果值,但该部分结果值与针对平方根运算生成的部分根值s[i]、sm[i]位于相同的数据路径上)。
[0267]
图8示出了基数64除法/平方根迭代的微型架构。形成基数64迭代的两次基数8子迭代是分开的:第一子迭代在顶部,并且第二子迭代在底部。这两次迭代非常相似,但存在一些差异,如稍后将论述。
[0268]
如上述方程(1)和(3)中所述,迭代i之后的结果由部分结果p[i](可以是部分商q[i]或部分根s[i])和余数rem[i]定义。然后,每次迭代包括数个步骤。
[0269]
1.数字选择
[0270]
使用低精度估计而不是全精度值从余数和除数(在除法中)或部分根(在平方根中)产生新的结果数字(参见方程(2))。因此,对于每次基数8子迭代,组合除法/平方根单元24包括共享数字选择电路系统32,该共享数字选择电路系统基于先前余数估计rem_est
[i],rem_est[i+1]与一组比较常数的比较选择除法/平方根结果的下一个基数8数字。在除法和平方根中,余数估计字长是不同的。
[0271]
如上文已针对图6中的平方根示例描述,数字选择是通过将余数估计与一组8个选择常数进行比较来完成的。此组取决于除数或部分根的最高有效位。比较常数集存储在查找表(lut)中,该查找表用除数或部分平方根的最高有效位寻址(如下文进一步描述)。基数8除法和平方根算法的误差分析示出,在两种运算中,比较常数和余数估计的位数是不同的,在平方根中为11位并且在除法中为10位。然而,如果11位余数估计用于除法和平方根,则可以将两种运算放在相同逻辑中。在这种情况下,通过将0放在最低有效位位置中,除法的比较常数扩展到11位。这样,第一和第二子迭代中的余数估计逻辑30和数字选择电路系统32在除法与平方根之间共享。因此,用于除法和平方根运算的同一组比较器80执行数字选择的比较。数字选择电路系统32的运算对于除法和平方根运算是相同的(如前面关于图6针对平方根所描述),不同的是接收一组不同的比较常数以与11位余数估计进行比较。
[0272]
2.余数更新
[0273]
如此产生的结果数字用于更新余数和部分结果(方程(1)和(3))。因此,在每次子迭代中提供共享余数更新电路系统34,以在给定基数8子迭代中基于余数调整值调整先前余数值rem[i]、rem[i+1],从而以冗余表示生成更新后余数值rem[i+1]、rem[i+2]。
[0274]
对于前面在图4中论述的平方根示例,提供复制电路单元以生成选定结果数字的不同可能值的候选余数值(在前面论述的具有相同量值的正/负数字之间共享电路系统),然后5:1复用器68取决于由数字选择电路系统32选择的下一个结果数字选择一个候选值。进位保留加法器38和fd计算单元64与图4中相同。
[0275]
然而,如方程(4)所示,在余数更新中使用的余数调整值(f[i+1]项)对于除法和平方根是不同的。在平方根的情况下,通过将根数字s
i+1
串联到移位的部分根来获得f[i+1];这意味着f[i+1]由fd计算单元64在每次迭代中计算。然而,在除法的情况下,f[i+1]是在迭代之间不改变的除数d。
[0276]
因此,添加异或门90以生成方程(3)的-p
i+1
×
d项,该项在执行除法运算时(当f[i+1]=d时,如方程4所示)产生。一个异或门用先前余数估计rem_est[i]、rem_est[i+1]的符号的倒数对除数d进行异或运算,以提供乘以-1。换句话说,在除法的情况下,余数更新使用+d或-d的倍数;然后,在正余数的情况下,除数被补足,以获得除数的负倍数。对于计算与根数字
±
2和
±
4相对应的候选余数值的复制单元,在异或门外的路径上应用1位或2位左移,以表示与方程(3)中需要的乘以p
i+1
。对于平方根,使用3倍除数3xd的单独表示,以避免需要进行3x乘法(为了进行快速迭代,在迭代之前预先计算了倍数3
×
d),因此第二异或门类似地用先前余数估计的符号的倒数对3xd进行异或运算,以向正在计算
±
3根数字的候选余数的复制电路单元提供输入。
[0277]
图4所示的平方根示例的2比1复用器62替换为图8中的一组3比1复用器62,以选择适当的f[i+1]值进行除法或平方根。当运算类型信号div/sqrt指示执行除法运算时,每个3:1复用器62基于除数选择从异或门90接收到的对应值。当运算类型信号div/sqrt指示执行平方根运算时,基于先前余数估计的符号选择由fd1到fd4计算块64产生的d向量值中的一个相关d向量值,如前面针对图4所解释。因此,3:1复用器62用作选择电路系统以选择以下各项作为余数调整值:在执行作为基数64除法运算的一部分的给定基数8子迭代时从除
数值d导出的值,或在执行作为基数64平方根运算的一部分的给定基数8子迭代时从取决于先前选择的基数8根数字序列的部分根值导出的值。在两种运算之间共享进位保留加法器38和5:1复用器68节省了电路面积。
[0278]
3.余数估计
[0279]
获得余数估计以用于下一次子迭代中的数字计算。因此,存在共享余数估计电路系统30,其在给定基数8子迭代中生成更新后余数估计rem_est[i+1]、rem_est[i+2],其是余数更新电路系统34在给定基数8子迭代中以冗余表示生成的更新后余数值rem[i+1]、rem[i+2]的一部分的非冗余估计。余数估计电路系统30与前面在图5中针对平方根运算所描述的相同。同样,在第二基数8子迭代中,余数估计电路系统30与余数更新电路系统34生成更新后余数值rem[i+2]并行地确定更新后余数估计rem_est[i+2]。
[0280]
4.即时转换
[0281]
部分结果p[i](商q或根s)使用即时转换(方程(7)和(8))从带符号数字冗余表示转换为传统二进制非冗余表示。在典型的即时转换方案中,部分根用于下一个数字选择和平方根运算的余数更新,但部分商不用于除法运算,这推动了不同的部分商更新和部分根更新方法。此差异如下所示(数字意味着值为-a):
[0282][0283]
在除法的情况下,每次产生新的数字(基数8中的3位),在典型的方案中,实际部分商左移,并且新数字被放置为三个最低有效位;这样,实际部分商始终在左边的有效部分中。先前插入的位向左移位到更多有效位位置。另一方面,在平方根的情况下,新的根数字串联到实际部分根,其方式为部分根的最高有效位始终在所存储数据值的最高有效部分,并且掩码mask[i]、mask[i+1]用于记录必须串联下一个数字的位置,如前面针对平方根运算所描述。
[0284]
为了在除法与平方根之间共享即时转换逻辑,已决定像部分根更新一样执行部分商更新;也就是说,使用掩码串联新的商数字,以指示必须串联数字的位置。这是非常规的,但是意味着增加数据路径和电路逻辑的共享是可能的。
[0285]
因此,在第一子迭代中,对于除法运算和平方根运算,共享即时转换电路系统42基于掩码mask[i]选择用于将下一个数字插入部分结果值q[i]、qm[i]、s[i]、sm[i]中的位置。类似地,在第二子迭代中,对于除法运算和平方根运算,共享即时转换电路系统42基于掩码mask[i+1]选择用于将下一个数字插入部分结果值q[i+1]、qm[i+1]、s[i+1]、sm[i+1]中的位置。每次子迭代将掩码右移3位,使得每个结果数字被插入前一个数字右侧的3位。
[0286]
对于前面针对图7描述的平方根示例,组合除法/平方根处理电路系统可以在迭代单元中使用,其中在一次迭代中生成的标记为“i+2”的输出作为标记为“i”的输入反馈以用于平方根或除法运算的下一次迭代,或可以在流水线单元中使用,如下文关于图9进一步论述。
[0287]
除法/平方根流水线
[0288]
传统除法和平方根实现方式的长时延和其每个阶段的复杂性,以及除法和平方根的独立逻辑,阻止了在商业处理器中使用流水线浮点除法和平方单元。相反,商业处理器具有迭代单元,其中逻辑的部分在数个循环中使用,从而导致低带宽设计。在典型的方案中,迭代逻辑由两个分开的部分构成,即除法迭代和平方根迭代,两种运算之间的共享逻辑非常少(如果有的话)。为了增加带宽,放置了数个并行运行的迭代div/sqrt单元。例如,一种设计有执行双精度、单精度和半精度运算的两个迭代浮点div/sqrt单元,以及执行单精度和半精度运算的另外两个较小的迭代单元;这样,双精度div/sqrt带宽加倍,而单精度和半精度除法和平方根的带宽相对于仅div/sqrt迭代单元的配置乘以四。
[0289]
在图9所示的方法中,改为提供单个流水线div/sqrt单元24。为了克服阻止使用此类单元的障碍,我们开发了低时延除法和平方根实现方式,以及除法和平方根的共同阶段,以及在两种运算之间共享的一些其他逻辑。低时延是通过每个循环利用两次基数8迭代实现基数64数字递推除法和平方根算法来实现的。如前面所解释,此类算法每循环产生6位的结果。另一方面,对于除法和平方根使用相同的算法,再加上仔细的阶段设计,可以减少面积要求。因此,我们能够设计面积相对较小的双精度、单精度和半精度流水线浮点div/sqrt单元。与上文所论述的具有两个双精度/单精度/半精度单元和两个单精度/半精度单元的替代配置相比,双精度和单精度的带宽显著提高,而半精度的带宽提高更为适度,但流水线单元的电路面积可小于替代配置的总面积。因此,流水线单元允许用高带宽组合低时延以获得高性能div/sqrt单元24。
[0290]
如图9所示,流水线单元24包括预处理电路系统100、用于执行数字递推迭代的流水线的主体102和后处理电路系统104。预处理和后处理逻辑主要在除法与平方根之间共享,并且迭代部分,即数字迭代,被展开为数个流水线基数64共享阶段110。
[0291]
预处理电路系统100执行各种预处理操作,包括操作数解包、操作数正规化(如果需要)和初始化(例如,查找比较常数并选择一个或多个初始结果数字)。
[0292]
流水线的主体102执行数字迭代,这是数字递推算法的迭代部分。流水线的主体102包括数个除法/平方根流水线阶段100,其中的每一个阶段包括图8所示的组合除法/平方根处理电路系统的实例。因此,主体102中的每个流水线阶段110执行基数64数字递推浮点法除法运算q=x/d或基数64数字递推平方根运算的单次迭代。为了获得除法/平方根的能量和定时高效实现,通过重叠如前面所描述的两个更简单的基数8迭代来获得基数64迭代。
[0293]
在次正规结果的情况下,后处理电路系统104包括舍入逻辑和右移(仅在除法中)。
[0294]
流水线单元分别处理三种不同的浮点精度:双精度、单精度和半精度(dp、sp和hp),这会使得对于不同精度运算,除法或平方根运算的时延不同。然而,对于给定精度,时延对于除法和平方根是相同的,以简单地调度后处理阶段的定时。
[0295]
下文论述对流水线的更详细论述,其集中于处理输入操作数x、d的有效数以生成结果。应当理解,还会处理输入操作数x、d的指数,这可以根据任何已知技术进行。例如,对于除法,结果指数可对应于输入操作数x、d的真指数之间的差,针对次正规处理所需的后处理阶段的任何右移进行调整。对于平方根运算,结果指数可对应于输入操作数x的真指数的一半,再次针对所应用的任何正规化进行调整。在此,“真指数”是指由浮点数的指数表示的
2的有效幂(去除了根据所使用的浮点精度应用的任何指数偏差)。
[0296]
预处理(v1、v2)
[0297]
预处理电路系统100执行预处理,其包括对浮点操作数解包以提取符号、有效数和指数、确定特殊条件(次正规、零

)、操作数正规化(例如,处理次正规)和查找表(lut)寻址以获得数字选择中所需的选择常数。在用两个次正规操作数进行除法的情况下,两个操作数均在同一循环中正规化。
[0298]
另外,获得第一基数8数字。在浮点除法中,第一数字只能取值{+1,+2},并且它是商的整数数字。在浮点平方根中,第一基数8数字可以取值{-4,-3,-2,-1,0},并且其计算很容易与余数和部分根的初始化合并。
[0299]
在平方根的情况下,还获得第二数字。如前所述,lut存储数字选择所需的选择常数。然而,在平方根中,每次基数8迭代的选择常数取决于该迭代之前的部分根值,其方式使得每次迭代使用一组不同的比较常数。这在定时和面积方面施加了硬限制,因为迭代逻辑应包括lut,并且应在每次新迭代开始时被读取。然而,(通过误差分析)已经得出,在基数8平方根中,一组相同的选择常数可以用于除前两次迭代外的每次迭代(即使在前两次迭代之后使用一组相同的选择常数,结果也具有足够准确度)。因此,在此阶段获得第二根数字,然后读取lut,并且触发如此获得的一组选择常数浮动以用于在其余迭代中进行数字选择。
[0300]
在除法的情况下进行一些其他动作。为了以单精度保留迭代,商q必须在q∈[1,2)中。注意,只有当x《d时,q《1。如果以q=2
×
x/d和q∈[1,2)的方式1位左移,则在预处理和被除数中会检测到这种情况。当然,尾数与x/d中相同,但指数需要递减。最后,计算3
×
d=2
×
d+d以用于基数8迭代,从而避免在每次迭代中需要计算3x倍数,这节省了时间。
[0301]
预处理阶段被分成两个循环v1和v2,使得操作数解包、分类和正规化以及第一根数字(平方根)在v1中完成。而在v2中,进行以下动作:第二根数字计算(平方根)、第一商数字计算(除法)、x与d比较和商的条件移位(除法)、3
×
d计算(除法)和lut寻址,以获得其余迭代(除法和平方根)的比较常数。
[0302]
第一除法数字选择和前两个平方根数字选择
[0303]
下文提供了关于如何在预处理电路系统100处选择第一基数8除法结果数字和前两个基数8平方根结果数字的更多信息。
[0304]
上下文
[0305]

基数64除法和平方根
[0306]

每次基数64迭代由两次基数8迭代构成
[0307]

除法:
[0308]

在迭代部分之前完成第一迭代
[0309]

这一点的原因:
[0310]

在迭代部分之前,对常数查找表(lut)进行寻址,以获得在每次基数8迭代中进行商数字选择所需的比较常数。
[0311]

用除数的最高有效位对lut寻址
[0312]

所有迭代使用一组相同的比较常数。
[0313]

第一基数8商数字可以只能取值+2或+1;这意味着第一迭代比其余迭代简单得多
[0314]

在对lut寻址的同一循环中,有时间执行第一除法迭代
[0315]

由于在lut循环中进行了第一迭代,最终时延可以减少1个循环,以达到某一精度
[0316]

平方根:
[0317]

用部分根的最高有效位对lut寻址
[0318]

在迭代部分之前完成第一和第二迭代
[0319]

这一点的原因:
[0320]

基数8平方根算法对于第一迭代、第二迭代和其余迭代要求不同的比较常数集
[0321]

为了在平方根计算的迭代部分中具有共同平方根迭代逻辑,并且为了防止在迭代逻辑中对lut寻址,已决定在迭代部分之前进行第一和第二迭代
[0322]

在第一循环v1中完成第一迭代,以及操作数解包和特殊操作数的确定
[0323]

在与lut寻址相同的循环v2中完成第二迭代,以获得其余迭代的比较常数。此循环在算法的迭代部分之前
[0324]
除法:第一基数8数字(在v2)
[0325]

使用与其余迭代相同的一组常数来选择第一基数8除法数字,因此,此第一数字选择和后续迭代中的数字选择的常数从lut中获得。
[0326]

在此循环中
[0327]

对lut寻址,
[0328]

使用数字=+2的常数以进行第一迭代
[0329]

触发一组比较常数以在其余迭代中使用。
[0330]

然后,第一迭代使用与其余迭代相同的一组常数,但由于数字值有限,只需要数字=+2的常数。
[0331]
平方根:第一基数8数字(在v1)
[0332]

对于基数8迭代,想法相同,但逻辑与基数4的情况不同:
[0333]

部分根为1(初始值)
[0334]

第一基数8数字可以取值-4、-3、-2、-1或0
[0335]

在给定部分根的情况下,这5个数字值的比较常数是已知的,并连接到第一数字选择逻辑中(只需要存储4个值)。因此,这不需要lut寻址。
[0336]

这4个值是(比较cte*64,即,下面引用的值是实际存储常数的64倍):
[0337]
数字=0:-64的常数
[0338]
数字=-1:-176的常数
[0339]
数字=-2:-272的常数
[0340]
数字=-3:-352的常数。
[0341]
平方根:第二基数8数字(在v2)
[0342]

第一迭代之后的部分根的值范围有限,只有5个值是可能的(第一数字的每个值的不同部分根值):
[0343]

第一数字=0=》下一个部分根为1.00_000
[0344]

第一数字=-1=》下一个部分根为0.11_000
[0345]

第一数字=-2=》下一个部分根为0.10_000
[0346]

第一数字=-3=》下一个部分根为0.01_000
[0347]

第一数字=-4=》下一个部分根为0.00_000
[0348]

使用小型lut来存储这5个比较常数集
[0349]

此lut的大小为5x88
[0350]

5行
[0351]

8位/行,用于存储八个11位比较常数
[0352]

用上文所示的部分根寻址
[0353]

lut中存储的值(同样,示出的常数值是比较cte*64,比存储值大64倍):
[0354]
部分根为1.00_000=》461、326、191、61、-62、-192、-317、-442
[0355]
部分根为0.11_000=》406、281、171、61、-62、-172、-277、-377
[0356]
部分根为0.10_000=》351、241、141、46、-47、-142、-232、-322
[0357]
部分根为0.01_000=》291、206、121、41、-42、-122、-192、-267
[0358]
部分根为0.00_000=》236、161、96、31、-32、-97、-152、-212
[0359]
上述常数的次序为数字=+4、数字=+3、数字=+2、数字=+1、数字=0、数字=-1、数字=-2、数字=-3的常数。
[0360]
这解释了预处理电路系统的初始数字选择。后续阶段中的数字选择如前面在图6中所描述,参考下文在图17到图20中进一步描述的lut中示出的比较常数。
[0361]
流水线除法/平方根单元中的数字迭代
[0362]
对于一般基数r以及将n调用到结果的位数,迭代次数为,
[0363][0364]
让我们详细说明基数64(r=64)、两种运算(除法和平方根)和三种浮点精度(ds、sp和hp)。每种精度的分数位数分别为52、23和10。每个循环进行一次基数64迭代;如前所述,为了获得可负担的实现方式,通过每个循环重叠两个更简单的基数8迭代来获得基数64迭代。然而,迭代次数仍然是基数64算法的次数。
[0365]
浮点除法:在预处理中选择产生最终商的整数位的第一数字。另外,如果商必须在[1;2]中,则舍入只需要保护位,不使用舍入位。然后,分别对于双精度、单精度和半精度,n=53,24,11。这包括分数位和保护位。然后,三种精度的迭代次数为
[0366][0367]
在dp和hp中,迭代产生的位数比目标结果位数多一个,在双精度中为54个,并且在半精度中为12个。此额外位必须从商中丢弃,并在舍入之前合并到余数中。
[0368]
浮点平方根:由于输入操作数在[0:25;1),结果在[0:5;1)中;因此,结果必须左移才能获得[1;2)中的最终浮点结果。与除法一样,舍入只需要一个额外的位,即保护位。因此,对于dp、sp和hp,算法必须产生的根的位数分别为54、25和12。这包括整数位、分数位和
保护位。
[0369]
另一方面,在迭代之前,在预处理中获得前两个基数8数字。跳过第一数字选择并将其集成到余数和部分根初始化中,并且在v2中完成第二数字选择,以便为所有其余迭代提供单个lut。这两个迭代产生6位的最终根,然后迭代部分中的循环数为
[0370][0371]
在单精度中,在4次迭代之后产生的位数为30,即预处理中的6位加上数字迭代中的24位;因此有5个额外位。为了去掉这些额外位,跳过最后一个数字迭代循环中的第二基数8迭代,并且从根中去除2个额外位并在舍入之前将这些额外位合并到余数中。
[0372]
因此,在流水线的主体102中,添加数个复用器:
[0373]

在阶段d2添加2:1复用器120以在阶段d1和d2的输出之间进行选择,从而允许在执行hp平方根运算时跳过阶段d2。这反映了除法所需的2个循环与平方根所需的1个循环之间的差异,如方程(28)、(29)所示。
[0374]

在组合除法/平方根处理电路系统内添加复用器(图9中未示出),以允许在执行sp平方根运算时,选择阶段d4中的第一子迭代的输出并将其输出为迭代结果(跳过阶段d4中的第二子迭代)。这避免了生成第二子迭代的额外3位,并且也可以丢弃在第一子迭代中生成的2个额外位,如上所述。
[0375]

在阶段d9添加2:1复用器122以在阶段d8和d9的输出之间进行选择,从而允许在执行dp平方根运算时跳过阶段d9。这反映了除法所需的9个循环与平方根所需的8个循环之间的差异。
[0376]

在阶段9的3:1复用器124在从阶段d2、d4和d9接收到的输出之间进行选择(跳过或未跳过上述平方根),其中复用器124基于指示当前运算的浮点精度的控制信号进行选择,该控制信号由指令解码器6取决于解码的指令类型控制,以控制除法/平方根运算。
[0377]
因此,指令解码器6充当控制电路系统,该控制电路系统控制流水线以使得至少一个除法/平方根迭代流水线阶段在执行数字递推除法或平方根运算时被绕过以生成精度较低的结果(通过控制复用器124以在应用绕过时选择较早阶段的输出),该至少一个除法/平方根迭代流水线阶段用于在生成精度较高的结果时执行数字递推除法或平方根运算的至少一次迭代。
[0378]
此外,指令解码器6控制除法/平方根流水线以使得至少一个除法/平方根迭代流水线阶段在执行数字递推平方根运算时完全或部分地被跳过或丢弃其结果输出的一些位(通过控制复用器120、122和阶段d4内的未示出内部复用器,其允许跳过阶段d4的第二子迭代并丢弃位),该至少一个除法/平方根迭代流水线阶段用于在执行数字递推除法运算时执行至少一次迭代。
[0379]
后处理(w0)
[0380]
如前所述,后处理是对结果进行舍入并且在次正规结果的情况下右移。这里可以
使用任何已知的浮点舍入技术。注意,结果只在除法中可能是次正规的,平方根中没有次正规的结果。除法和平方根都在一个循环中完成后处理。
[0381]
在同一流水线中适应两种运算和三种精度-即时转换
[0382]
如上所述,dp和hp平方根中的数字迭代循环数比除法中少一个(参见方程(28)和(29))。为了保持相同的时延并收集两种运算在同一循环中的结果,为平方根添加空循环;也就是说,d2和d9的输入传递到输出,而无需任何进一步的变换。另外,在sp平方根中,跳过d4循环中的第二基数8迭代。此外,每种精度的时延都不同。虽然在d9获得了dp未舍入结果,但在循环d2和d4分别获得了未舍入hp和sp结果。然后,w0循环的运算取决于精度保留来自d2、d4或d9的信号。
[0383]
为了实现高效的数字迭代循环,两种运算共享大部分逻辑,包括用于更新部分商或根的即时转换电路系统42。然而,在第一数字循环d1之前,预处理已经在平方根的情况下产生了6个分数位,或者在除法的情况下产生了整数数字。对于除法和平方根,共享商/根更新逻辑需要具有相同的新分数位数字串联位置。
[0384]
因此,在除法的情况下,在预处理阶段v2将6个零添加到商q[i]、qm[i]的分数部分;然后,在这些零之后串联在每次后续迭代中产生的新分数位qi(在将串联对应位以用于平方根运算的相同位置,如掩码所示):1:000 000q1q2q3 q4q5q6

[0385]
在后处理阶段w0,在舍入之前去除这些零,以具有未舍入的商:1:q1q2q3 q4q5q6

[0386]
这些零的添加不会影响最终的商准确度,因为如方程(4)所示,在数字递推除法方程中不使用部分根。
[0387]
因此,对于除法运算,预处理阶段v2向第一除法/平方根迭代流水线阶段d1提供部分结果值,其中选定位位置被设置为虚拟位值(在此示例中为0),其中那些选定位位置对应于至少一个预处理阶段v1、v2在执行数字递推平方根运算时将插入不针对数字递推除法运算生成的至少一个额外结果数字的位位置。在后处理阶段w0,消除这些虚拟位值。
[0388]
定时控制、时延和吞吐量
[0389]
流水线单元的微型架构示于图9中。该单元由12个阶段构成;这是较慢运算,即双精度除法的时延:2个预处理循环(v1、v2)、9个数字迭代循环(d1到d9)和1个后处理循环(w0)。对于给定浮点精度,除法和平方根运算具有相同的时延:
[0390]

半精度,5个循环:v1-v2-d1-d2-w0
[0391]

单精度,7个循环:v1-v2-d1-d2-d3-d4-w0
[0392]

双精度,12个循环:v1-v2-d1-d2-d3-d4-d5-d6-d7-d8-d9-w0
[0393]
(注意,即使在d2或d9为平方根跳过循环,在阶段d2或d9的输入处的触发器之后,时延仍然与3:1复用器124的输入相同)。两种运算具有相同的时延可以简化定时控制。
[0394]
另外,无论是否存在次正规操作数或结果,时延都是相同的:在v1中进行正规化(如果需要),并且在舍入之后在w0中完成次正规商右偏移。
[0395]
提供定时控制电路系统130以控制可以开始除法和平方根运算的定时。虽然定时控制电路系统130在图9中示出为单独单元,但是在其他示例中,解码器6可以充当定时控制电路系统130。
[0396]
除法/平方根单元24完全是流水线的;这意味着当所有运算的精度相同时,可以在
吞吐量为1的每个循环开始新运算,这是最常见的情况。因此,控制电路系统130可以控制除法/平方根流水线以执行第一数字递推除法或平方根运算和第二数字递推除法或平方根运算,其中除法/平方根流水线的后续除法/平方根迭代流水线阶段与较早除法/平方根迭代流水线阶段执行第二数字递推除法/平方根运算的较早迭代并行地执行第一数字递推除法或平方根运算的后续迭代。
[0397]
然而,当存在混合精度除法或平方根时,会出现一个限制:两种运算无法同时处于同一阶段。如图10所示,sp和hp运算存在一些禁止的开始循环,因为时延取决于精度。例如,sp div/sqrt无法在dp之后开始5个循环,因为在这种情况下,两种运算都会在w0中发生冲突。
[0398]
因此,如图10所示,定时控制电路系统130可以控制电路系统以防止为生成精度较低的结果而执行的较低精度数字递推除法/平方根运算在为生成精度较高的结果而执行的较高精度数字递推除法/平方根运算之后开始预定数量的循环,预定循环数对应于达到较高精度数字递推除法/平方根运算的至少一个后处理阶段所花费的循环数与达到较低精度数字递推除法/平方根运算的至少一个后处理阶段所花费的循环数之间的差。
[0399]
预定循环数取决于所使用的精度而不同。如图10所示,预定数:
[0400]-当较低精度为sp并且较高精度为dp时,为5个循环;
[0401]-当较低精度为hp并且较高精度为dp时,为7个循环;以及
[0402]-当较低精度为hp并且较高精度为sp时,为2个循环。
[0403]
当运算之间的循环数大于或小于预定数时,在高精度运算之后开始低精度运算没有问题,因为在这种情况下,后处理阶段w0不会发生冲突。
[0404]
利用这种方法,可以通过使用共享流水线除法/平方根运算来显著提高带宽,并且由于共享共同逻辑而减少面积,从而在性能与电路面积之间实现更好的平衡。
[0405]
然而,对于平方根和除法单元中的一者或两者,流水线方法还可以用于具有单独的平方根和除法单元的实现方式。
[0406]
而且,虽然图9将流水线方法应用于基数64数字递推除法和平方根,但是流水线方法也可以用于其他基数值。
[0407]
而且,虽然图9示出了支持所有hp、dp、sp的流水线方法,但是其他示例可能只支持这些精度的子集,或可能支持其他浮点精度,因此可以使用不同数量的流水线阶段。
[0408]
即时转换
[0409]
如先前所解释,数字递推方法的一部分可能涉及从冗余表示到常规二进制表示(非冗余表示)的转换。由于来自数字递推方法的输出数字一次产生一个,因此如果可以一次执行一个数字的转换以避免在必须一次转换所有数字时可能出现的时延,这将非常有用。使用即时转换电路系统42执行此转换。
[0410]
简单来说,平方根的即时转换保持两个部分根字,即s[i]和sm[i](s[0]=1.0并且sm[0]=0.0),其中sm[i]=s[i]-r-i
,并且更新规则如下所示,
[0411]
[0412][0413]
其中(x,y)意指x和y的串联,即xy。注意,实际上,sm[i](二进制)等同于s[i](二进制)从最低有效位位置减去1。所以,如果s[0]=111,则sm[0]=110。
[0414]
图11总结了在基数8运算中如何为每个数字更新s[i]和sm[i]。在图中,{sx[i],aaa}意指aaa位与s[i]或sm[i]的实际值的串联。注意,不涉及算术运算,只涉及串联。
[0415]
图12示出了基数8根的即时转换的示例。数字序列为-1、1、-2、-4、2、0、-1;注意,sm[i]的最终值是s[i]-1。
[0416]
如前所示,对于平方根运算,下一个余数rem[i+1]的计算涉及s
i+1
×
s[i]乘法(参见方程(3))。在基数8实现方式中,需要s
i+1
={+4,+3,+2,+1,0,-1,-2,-3,-4}和因此s[i]的2x、3x和4x倍数。2x和4x项通过将s[i]左移1或2位容易地获得,但3
×
s[i]的计算要复杂得多,并且这一直是基数8平方根算法的实际利用的一个限制因素。
[0417]
注意,在具有较小基数的其他实现方式中,由于基数2中的数字集{+1,0,-1}以及基数4中的{+2,+1,0,-1,-2},所以不需要项3x。
[0418]
本发明保持表示s3[i]和s3m[i]的额外部分根字,从而通过执行乘以三或通过将s与s乘以二相加来防止计算以3
×
s[i]的形式进行。在s3和s3m中的每一者的情况下,要执行的串联是:
[0419]3×si+1
∈{+12,+9,+6,+3,0,-3,-6,-9,-12}
[0420]
图13示出了如何进行串联。注意,需要4位来表示3
×si+1
={+12,+9,-9,-12};这意味着这些数字值的串联产生被传递到先前数字的进位。因此,4位3
×si+1
被分解为3位数字(3
×
s[i+1])mod 8,取{+6,+4,+3,+1,0,-1,-3,-4,-6}中的值,以及正进位或负进位c
i+1
={+1,-1}。
[0421]
从图13可以看出,如果s
i+1
={+4,+3,+2,+1,0,-1,-2,-3,-4},则要串联以获得3
×
s[i]的3位数字分别是(3
×
s{i+1])mod 8={+4,+1,+6,+3,0,-3,-6,-1,-4}。因此,获得s3[i]和s3m[i]的串联过程如下:
[0422]
1.如果|s
i+1
|={4,3},则递增/递减实际部分根。通过取决于进位将先前数字si改为si+1或s
i-1,重建部分根s3[i]及其递减对应项s3m[i]的实际3x倍数,
[0423]
s3_inc[i]=s3[i]+8-i
[0424]
s3m_dec[i]=s3m[i]-8-i
[0425]
注意,进位不需要传递到先前数字si之外,因为使用了三个位来表达要串联的每个数字,但没有使用这三个位可以表达的全部值范围,只将最大值+6添加为数字。
[0426]
2.3位数字的串联。3位数字串联定义如下,
[0427]
[0428][0429]
在上述方程中,递增的实际根s3_inc[i]用于数字+3和+4,并且递减的实际根减1,即s3m_dec[i],用于数字-3和-4。对于其余数字值,使用实际根s3[i]或实际根减1,即s3m[i]。在此,当x除以y时,模运算x mod y提供余数。例如,5 mod 8=5,11 mod 8=3,-5 mod 8=-5,并且-12 mod 8=-4。
[0430]
图14示出了3x根倍数的即时转换的示例。数字序列为-1、+1、-2、-4、+2、0、-1。表中的最终s3[i]结果是图12中的最终s[i]结果的3x。在子迭代i=0时,s3的初始值为11(即3乘以初始值s[0]=1),并且s3m的初始值为10(即3-1=2)。在子迭代i=1时,添加数字-1。3乘以-1为-3,这等于s3的数字-3和s3m的数字-2的串联。参考方程(32)和(33),我们可以看出s3[i+1]的值是s3m[i]和101(即5)的串联,而s3m[i+1]的值是s3m[i]和100(即4)的串联。
[0431]
在子迭代i=2时,将添加数字1。3乘以1为3。再次,参考方程(32)和(33),我们可以看出,对于s
i+1
=1的情况,s3[i+1]是通过s3[i]和011(即3)的串联创建的,而s3m[i+1]是通过s3[i]和010(即2)的串联创建的,从而使得s3[2]=10.101011并且s3m[2]=10.101010。在子迭代i=3时,将添加数字-2。3乘以-2为-6。在s3的情况下,对s3m的先前值执行串联。由于我们是以基数8进行运算的,因此使用s3m[i]来创建s3[i+1]意味着s3[i+1]的值比它应该的值低8。由于我们的目标是减去6,这意味着我们现在必须加上+2(8

6=+2)。因此,如图14所示,串联是s3m和2(010)。类似地,在s3m的情况下,对s3m的先前值执行串联。因此,如图14所示,串联s3和1(二进制中的001)。在子迭代i=4时,要串联的数字为-4。3乘以-4为-12。这是一种更为复杂的情况,因为-12不能仅用3个数字表达,因此执行负进位。执行负进位后,要执行的其余减法为-4(-12=-8-4)。因此,我们使用s3m_dec的值,它本质上减去16(来自递减值的8和从s3m导出的8)。要执行的结果加法为4(16

12=4),因此对s3m_dec的值和100(二进制中为4)执行串联,以得到010 000 100。对于s3m的值,使用相同的值,但串联是针对小一的值(即4

1=3),并且因此在s3m_dec与011(其是二进制中的3)之间执行串联。从上述解释中应该清楚了解在迭代5、6和7中使用的数字2、0和-1的过程。
[0432]
图15示出了3x部分根倍数即时转换的实现方式,其形成即时转换电路系统42的一部分。用于生成部分根值s[i]和sm[i]的电路系统未示出,因为这可以通过(使用图中提供的表)简单调整例如美国专利公开2020-0293281中所示的电路系统来实现。在每次子迭代(除第一子迭代外)时,由接收器电路系统202接收来自先前子迭代的s3[i]、s3m[i]、aux[i]和auxm[i]的值。实现方式有三个部分:
[0433]

使用调整电路系统204来递增/递减实际3x部分根s3[i]、s3m[i],
[0434]

计算下一个3x部分根s3[i+1]、s3m[i+1],以及
[0435]

计算新辅助3x部分根aux[i+1]、auxm[i+1]。
[0436]
辅助3x部分根定义为
[0437]
[0438][0439]
并且由于递增/递减3x部分根的方式,提供上式。注意,当先前数字没有进位时,aux[i+1]=s3[i]并且auxm[i+1]=s3m[i]。然而,对于某些特定的数字序列,提供递减/递增的s3[i]和sm3[i]。特别地,值aux和auxm使扩展进位超过前一组位。例如,考虑:
[0440]
s3[i]=001 111 100
[0441]
s3m[i]=001 111 011
[0442]
其中s
i+1
=-3,s
i+2
=+3。
[0443]
也就是说,存在对实际3x部分根的进位传递。根据方程(32)和(33),3
×si+1
的串联产生:
[0444]
s3[i+1]=001 111 010 111
[0445]
s3m[i+1]=001 111 010 110
[0446]
然后,3
×si+2
的串联产生:
[0447]
s3[i+2]=001 111 011 000 001
[0448]
s3m[i+2]=001 111 011 000 000
[0449]
也就是说,因为数字+3使得进位发生,所以前一组数字递增。然而,如果这些数字已经饱和(在这种情况下,s3的相关数字为111),则会进一步进位到下一组位。换句话说,通过将(3
×si+2
)mod 8串联到递增的s3[i+1]来获得s3[i+2];但注意,增大s3[i+1]不仅会递增最后串联的数字值111

000,还会使s3m[i]_dec从001 111 010递增到001 111 011,或者等效地,s3m[i]仍然需要产生s3[i+2]。注意,在此示例中,没有必要比这更进一步。这是因为111串联到s[i](数字s
i+1
=-3)以获得s[i+1],并且下一个数字s
i+2
的转换产生正进位(s
i+2
=+4,+3)。这种进位传递通过一个数字。理论上,如果一行中有几个“111”块,并且部分根必须递增,则进位将传递超过2个数字。例如,如果s3[i]=0001 011 111 111,则下一个数字是+3。在这种情况下,进位将传递到先前的第三个数字。然而,这种模式无法通过在此描述的串联过程产生。
[0450]
因此,当传递到先前数字的进位为carry=+1时,保留s3_inc[i]和s3m_inc[i]用于计算s3[i+2]和s3m[i+2],并且当carry=一1时,保留s3_dec[i]和s3m_dec[i]。当在两个连续根数字的串联中以及对于3x部分根中的特定值存在进位+1或-1时,就会出现这种情况。
[0451]
返回到图15,调整电路系统204用于从aux[i]或auxm[i]产生s3
inc[i]
、s3
dec[i]
、s3m
inc[i]
和s3m
dec[i]
。选择aux[i]还是auxm[i]取决于先前数字si,如图16所示。因此,解码电路系统206考虑先前数字si,并向复用器208a、208b、208c、208d提供信号,以在aux[i]与auxm[i]之间进行选择。然后将先前数字si的值与来自数字x3电路系统的输出串联,以得到s3_inc[i]和s3m_dec[i]的校正值。数字x3电路系统产生四个输出值,如下:
[0452]
当si》=0时:
[0453]
·
3s
i mod 8+1
[0454]
·
3s
i mod 8
[0455]
·
3s
i mod 8-1
[0456]
·
3s
i mod 8-2
[0457]
并且当si<0时z
[0458]
·
8-(|3si| mod 8)+1
[0459]
·
8-(|3si| mod 8)
[0460]
·
8-(|3si| mod 8)-1
[0461]
·
8-(|3si| mod 8)-2
[0462]
例如,如果si=+1,则输出为4、3、2和1,而如果si=-2,则输出为3、2、1和0。
[0463]
然后,通过将与新的带符号数字si
+1
相对应的位串联到s3[i]、s3m[i]或s3_inc[i]或s3_dec[i]来产生新的3x部分根s3[i+1]和s3m[i+1]。这使用串联电路系统210来实现。注意,余数的符号用于减少2∶1复用器的数量,这些复用器的输出以与参考图4描述的方式类似的方式馈送到串联电路系统210中,即,余数符号用于在正数字与负数字之间选择,例如,在一个复用器中s[i]的数字+3与-3之间以及在另一个复用器中sm[i]的数字+3与-3之间进行选择。正余数将选择正或零根数字,而负余数选择负或零根数字。方程(32)和(33)给出每个数字要串联的数字。例如,对于数字+3,我们串联001,即(3x3)mod 8。同时,对于-1,我们串联111,即8-|3x-3|=-1(或二进制中的111)。
[0464]
在执行串联电路系统后,呈一组复用器形式的输出电路系统212输出s3[i+1]和s3m[i+1]的选定值以及由aux生成电路系统214产生的更新后辅助根值aux[i+1]和auxm[i+1],该aux生成电路系统对最新的新数字si+1进行解码以确定是否存在进位,然后使用该信息选择适当的值以输出为aux[i+1]和auxm[i+1],如图16所示。接收电路系统202在另一迭代或子迭代中接收回aux[i+1]、auxm[i+1]、s3[i+1]、s3m[i+1]中的每一者。
[0465]
用于选择常数的lut
[0466]
在数字递推运算的每个阶段,数字选择操作sel(参见方程2)。基数8除法或平方根数字递推算法中的数字选择函数执行实际余数(或其一部分)与一组八个选择常数或系数的比较。使用除数或部分平方根的最高有效部分选择系数集。将选定集中的八个系数与余数的最高有效部分进行比较,并且使用八个比较的结果来确定下一个商或根数字。
[0467]
这些系数集存储在查找表(lut)中,该查找表利用除法运算中的除数的最高有效位或平方根运算中的部分根的最高有效部分进行寻址。基数8除法的lut大小是32
×
72位,并且基数8平方根的大小是33
×
80位。在支持除法和平方根的单元中,需要两种不同的lut,一个用于除法,另一个用于平方根。因此,此类单元中的总lut大小将为32
×
72+33
×
80=4944位。
[0468]
在这些示例中,提出了减小总lut大小的数种方式。可以合并一些列。另外,可以通过向除法系数添加小偏移来计算平方根系数;因此,平方根lut可以由较小的表和一些逻辑代替。另外,进行一些优化以进一步减少除法lut大小。因此,总lut大小可以减小到33
×
42+33
×
18=1980位,表示所需存储空间减少了大约60%。
[0469]
选择函数涉及将余数估计(余数的最高有效位)与一组8个选择常数或系数进行比较,数字p
i+1
的每个可能值一个常数。因此,
[0470][0471]
其中cte(k)和cte(k+1)分别是数字值k和k+1的选择常数,其中k∈{-3,-2,-1,0,+1,+2,+3,+4}(在基数8中)。实际上,没有必要为数字值-4保持选择常数,因为如果余数估计
与其他数字(-3到+4)的选择常数不相对应,则选定数字必须为-4。已经发现,只需要考虑余数的10个(除法)或11个(平方根)最高有效位才即可获得精确度足以进行数字选择的余数估计。
[0472]
在除法数字递推中,用于获得下一个数字的选择常数集取决于除数;而在平方根中,该选择常数集取决于部分结果。除数的6个最高有效位或部分根的7个最高有效位用于为当前除法的所有迭代选择一组8个选择常数。不同的除数或部分根值选择不同的常数集。
[0473]
在除法的情况下,选择常数是10位宽,但最高有效位是0。另一方面,注意,因为在选择常数之前对操作数进行正规化,所以除数的最高有效位始终为1。因此,选择常数存储在32
×
72位除法查找表(lut)中。
[0474]
在平方根的情况下,选择常数为11位宽。部分平方根在[0.5,1]中。因此,考虑到部分根估计有1个整数位和6个分数位,并且部分根的最小值为0.5,选择常数存储在33
×
80位平方根lut中,其中r[i]∈[0.5,1)有32个条目并且r[i]=1有1个条目。
[0475]
因此,在支持除法和平方根的单元(fdivsqrt单元)中,通常使用两个lut,即32
×
72位除法lut和33
×
80位平方根lut。总lut大小为32
×
72+33
×
80=4944位。
[0476]
在此技术中,提出了一种用于减小fdivsqrt单元中的总lut大小的方法。lut减小基于以下两项。
[0477]
1.已检测到,平方根常数sqrt
ct
可通过向基常数base_ct=[2
×
div_ct/16]
×
16添加4位偏移而从除法常数div_ct中获得。注意,base
ct
是4个最低有效位设置为0的div_ct。4位偏移可以为负或正。这样,我们不需要存储平方根常数,而只需要将偏移存储在偏移lut中。
[0478]
2.除法lut和偏移lut中的一些对称性允许进一步减少lut总大小。
[0479]
图17和图18示出了原始除法和平方根lut。这些图示出了除数和部分根估计的每个值的常数集;每个集由用于选择数字pi={+4,+3,+2,+1,0,-1,-2,-3}的常数构成,集中总共有8个常数,div_ct={md(4),md(3),md(2),md(1),md(0),md(-1),md(-2),md(-3)}用于除法,并且sqrt_ct={ms(4),ms(3),ms(2),ms(1),ms(0),ms(-1),ms(-2),ms(-3)}用于平方根。
[0480]
每个比较常数的值可以从窄区间中选择。在这些示例中,仔细选择了这些值以使每个lut对称,这意味着数字+4和-3、+3和-2、+2和-1以及+1和0的列中常数的绝对值是相同的(除了少数例外情况)。如随后将示出的,此选择有助于减小lut大小。
[0481]
前两个除数区间常数md(4)和md(-3)超出界限。也就是说,前两个数字不能为4或-3。这可以通过将除数间隔的数量加倍来解决,但这种方法非常昂贵,因为它意味着将lut大小加倍。相反,除数的第6个分数位用于选择子区间并校正md(4)和md(-3)的2个最低有效位。
[0482]
对于lut的大小,除法lut中的最大值和最小值分别为222和-222;因此,除法常数值在范围[222;-222]内,并且需要9位来表示此范围内的所有值。类似地,对于平方根,常数在范围[447;-446]内,因此需要10位。
[0483]
偏移lut
[0484]
比较图17和图18所示的除法和平方根比较常数,可以获得平方根比较常数,如下所示
[0485][0486]
也就是说,令除法常数md(k)乘以2,将4个最低有效位清除为0,并加上4位偏移offset(k)。我们称之为然后
[0487]
ms(k)=m_base(k)+offset(k),其中k=4,3,2,1,0,-1,-2,-3(38)
[0488]
注意,当偏移与基常数m_base(k)具有相同的符号时,加法涉及用4位偏移替换m_base(k)的4个最低有效位。在偏移与基常数的符号不同的情况下,进行加法。
[0489]
作为另一个示例,考虑针对计算ms(2)(图17中的第4行)。取图17和图18的第4行中的常数,常数,在这种情况下,offset(2)恰好为12。注意,m_base(2)和offset(2)的符号相同,平方根常数是通过用偏移量替换4个最低有效位获得的:m_base(2)=0001100000并且offset(2)=1100,然后ms(2)=0001101100=108。
[0490]
然而,在少数情况下,m_base(k)和offset(k)的符号是不同的。例如,对于利用图17和图18中的第3行计算ms(3),计算ms(3),然后ms(3)=176-1=175。由于偏移为负,即,offset(3)=-1,因此通过减法(或负数加法)获得平方根常数。
[0491]
图19示出了计算平方根常数的偏移。突出显示了偏移符号与除法常数符号不同的情况。已仔细选择平方根和除法比较常数以使此表关于列对称,这意味着列+4和-3、+3和-2、+2和-1以及+1和0中常数的绝对值相同(符号相反)。有两种情况打破了这一规则:在第4行和第13行中,数字+4和-3的偏移没有相同的绝对值。这些情况被单独处理,并且可以通过例如偏移校正指示电路系统252来检测。
[0492]
对称性
[0493]
首先关注除法lut注释:
[0494]
1.可以存储常数的绝对值,而不是带符号值。这有助于减小lut大小。
[0495]
2.数字pi=+1和pi=0的常数的绝对值是相同的(符号相反,并且具体地说,数字pi=+1为正并且pi=0为负),因此这两列可以替换为仅1列。
[0496]
3.除第0行和第17行外,数字pi=+2和pi=-1的常数的绝对值相同(符号相反,并且具体地说,数字pi=+2为正并且pi=-1为负)。这两列仅存储为1列,并且第0行和第17行的值稍后在例如除法校正指示电路系统250和除法常数校正电路系统248中进行校正。注意,在第0行中,m(2)=50,m(-1)=-48,并且在第17行中,m(2)=73,m(-1)=-72。为融合这两列,保存的值在第0行为48并且在第17行为72,并且通过更改最低有效位(第17行)或最低有效位左侧的位(第0行)来校正最终m(2)值。
[0497]
4.数字pi=+2和pi=-1的常数的绝对值的最高有效位为零。这个位不需要存储在lut中。
[0498]
5.数字pi=+1和pi=0的常数的绝对值的两个最高有效位为零。这些位不存储在lut中。
[0499]
6.数字pi=+3、pi=+2、pi=+1、pi=0和pi=-1的常数为偶数,因此最低有效位不存储在lut中。
[0500]
7.因此,由于上面第2项和第3项中所指示的列融合,优化的除法lut只有6列。此
外,还减少了每列的位数。
[0501]
图19示出了偏移lut。此表也可以优化:
[0502]
1.数字pi={+2,+1,0,-1}的偏移与m_base具有相同的符号;也就是说,对于数字+2和+1,偏移为正,并且对于数字0和-1,偏移为负(适当时,包括0作为负或正)。
[0503]
2.lut关于列对称:数字+4和-3、数字+3和-2、数字+2和-1以及数字+1和0的偏移绝对值相同,但前面指示的两种情况除外。因此,只有偏移的绝对值存储在lut中,并且当使用偏移获取平方根比较常数时,其符号根据数字值设置,但偏移符号不同于m_base符号(图19中突出显示的值)的情况除外。
[0504]
3.这些异常值的符号存储在lut中的新列中。
[0505]
然后,偏移lut只有5列,即由于第1项和第2项中的列融合而产生的4列加上符号的额外列。
[0506]
应当理解,作为上述的替代,可以提供平方根lut,其中通过查找除法lut中的值并执行偏移来导出除法运算的常数。在这种情况下,可以应用上述许多相同的技术,以减小浮点lut或除法偏移表的大小。例如,从图18可以清楚地看出,数字+4和-3的常数的量值是相同的(数字具有相反的符号,通常对于+4数字为正,并且对于-3数字为负)。类似地,数字+3和-2的常数的量值相同(同样数字相反,通常对于+3为正,并且对于-2为负)。类似地,数字+2和-1的常数的量值相同(同样符号相反,通常对于+2为正,并且对于-1为负)。
[0507]
图20示出了具有前面章节中所描述的优化的最终除法和偏移表。表分为几个部分,左边是除法lut,并且右边是平方根偏移lut。注意,由于列融合,列数已减少。所得融合列标有两个相关数字的值。因此,例如标记为(+2,-1)的列意指原始表中对应于数字pi=+2和pi=-1的列的融合。
[0508]
另一方面,注意,图20的表中最后一行仅针对平方根(图19中的第32行)。
[0509]
对于除法和平方根,地址(表中的最左列)的访问方式不同。在除法中,除数的6个最高有效位形成地址,但第一位将为1。在平方根的情况下,部分根r[i]的7个最高有效位用于寻址该表,其值范围为0.5(二进制中的0.100000)到1.0(二进制中的1.000000)。注意,对于地址使用6位,因为平方根lut有33行。
[0510]
lut的内容示出为十六进制值。注意,表中指定了每列实际需要的位数,因此尽管示出了十六进制值,但可能无法获得完整的值范围。例如,此除法lut中数字pi=+3的常数值只需要7位,因为最高有效十六进制数字只取{2,3,4}的值,这些值对应于二进制值{0010,0011,0100},因此不需要存储最高有效位。对于列(+2,-1)和(+1,0),情况类似。
[0511]
图20中的偏移lut(右侧部分)将偏移绝对值存储在列(+4,-3)、(+3,-2)、(+2,-1)和(+1,0)中,而列sign中的2位值是列(+4,-3)和(+3,-2)中偏移的偏移符号。注意,列(+2,-1)和(+1,0)中的偏移为正。符号位1意味着偏移和其对应的m_base具有不同的符号。
[0512]
如先前所解释,表中地址为100000的最后一行仅对平方根有意义。使用与第011111行相同的基,利用表中指示的偏移获得此部分根估计的比较常数。
[0513]
考虑除法和平方根比较常数计算的以下示例。对于除法,通过加上前导0,从lut中获得常数集。例如,在divisor=1.00110x

x的除法运算中,lut地址为0100110,然后lut返回
[0514]
lut_div(01_00110)={87,30,1d,09,60,86}
[0515]
={1000_0111,011_0000,01_1101,0_1001,011_0000,1000_0110}
[0516]
注意,集中每个常数的位数取决于常数针对哪个数字。因此,考虑到先前针对除法列出的lut大小缩减规则,此特定除数值的比较常数集为
[0517]
md(4)=1000_0111

00_1000_0111≡135
[0518]
md(3)=0110_0000

00_0110_0000≡96
[0519]
md(2)=0011_1010

00_0011_1010≡58
[0520]
md(1)=0001_0010

00_0001_0010≡18
[0521]
md(0)=0001_0010

11_1110_1110≡-18
[0522]
md(-1)=0011_1010

11_1100_0110≡-58
[0523]
md(-2)=0110_0000

11_1010_0000≡-96
[0524]
md(-3)=1000_0110

11_0111_1010≡-134
[0525]
为了获得最终常数而添加的位被突出显示。注意,从lut中获得常数的绝对值;在后续步骤中,对m(0)、m(-1)、m(-2)和m(-3)的符号进行2的补码,以获得最终常数集。
[0526]
对于此同一行的平方根常数,注意sign字段为01;这意味着计算ms(+3)和ms(-2)的偏移的符号不同于基常数符号,因此,计算这两个常数需要减法。从表中可知,
[0527]
lut_offset(01_00110)={1,a,e,2,6}
[0528]
并且偏移如下;符号与基常数符号不同的偏移被突出显示
[0529]
offset(k)={+10,-2,+2,+6,-6,-2,+2,-10}其中k=4,3,2,1,0,-1,-2,-3
[0530]
基常数为
[0531]
m_base(k)={1_0000_0000,0_1100_0000,0_0111_0000,0_0010_0000,0_0010_0000,0_0111_0000,0_1100_0000,1_0000_0000}
[0532]
然后,
[0533]
ms(4)=001_0000_1010

266
[0534]
ms(3)=000_1100_0000-000_0000_0010

190
[0535]
ms(2)=000_0111_0010

114
[0536]
ms(1)=000_0010_0110

38
[0537]
由于sqrt lut的正部分和负部分是对称的,因此其余常数通过对上述常数进行2的补码来获得
[0538]
{ms(0),ms(-1),ms(-2),ms(-3)}={-38,-114,-192,-266}
[0539]
图21示出了选择常数生成器238,其用于生成由例如数字选择比较器32使用的选择常数。由复用器240接收除数和部分根的位。提供div/sqrt选择信号,其在需要除法的选择常数时选择除数,并在需要平方根的选择常数时选择部分根。此后,使用选定位访问由除法lut和(平方根)偏移lut构成的存储电路系统242中的相关值。
[0540]
将来自除法lut的输出传递到填充电路系统246,该填充电路系统通过向输出的常数添加0来填充位。例如,在关于上述除法lut的第2点到第6点中描述了所执行的填充。将所得常数传递到下文论述的转换电路系统244,并且还传递到除法常数校正电路系统248。除法常数校正电路系统248接收填充的(扩展的)除法选择常数以及来自除法校正指示电路系统250的输出,该除法校正指示电路系统指示从除法lut检索的数据是否为常数的绝对值不相同的例外情况之一(关于上述除法lut的第3点)。也就是说,该除法校正指示电路系统检
查(i)当除数估计为0或1时常数md(4)和md(-3),以及(ii)当除数估计为0或17时数字pi=+2和pi=-1的常数绝对值的差。这些校正需要设置位70、50、1和0,并清除选定常数集中的位71和21。这些校正由除法常数校正电路系统248进行。
[0541]
将来自偏移lut的输出与来自偏移校正指示电路系统252的输出一起传递到转换电路系统244,该偏移校正指示电路指示所访问的常数是否为lut偏移不具有相同值的例外情况之一(例如,第4行和第13行)。如果是,则在转换电路系统244内校正为正确值。校正电路系统244还从填充电路系统246接收填充的(扩展的)除法常数。替换电路系统254用于使用先前所论述的串联或减法来添加偏移。特别地,当偏移符号和常数基符号不同时,进行减法。通过检查偏移lut中的符号字段来启用减法。仅当符号相同时,才替换4位偏移的4个最低有效位。
[0542]
对于除法常数和lut常数,提供符号赋予电路系统256以在数字pi=0,-1,-2,-3改变的情况下将绝对值转换为带符号值。
[0543]
用于制造的计算机可读代码
[0544]
本文所描述的概念可体现于用于制造体现所描述概念的装置的计算机可读代码中。例如,计算机可读代码可在半导体设计和制造过程的一个或多个阶段(包括电子设计自动化(eda)阶段)使用,以制造包括体现这些概念的装置的集成电路。以上计算机可读代码可另外地或另选地使得能够对体现本文所描述概念的装置进行定义、建模、模拟、验证和/或测试。
[0545]
例如,用于制造体现本文所描述概念的装置的计算机可读代码可体现在定义这些概念的硬件描述语言(hdl)表示的代码中。例如,代码可定义用于定义体现这些概念的装置的一个或多个逻辑电路的寄存器传送级(rtl)抽象。代码可用verilog、systemverilog、chisel或vhdl(超高速集成电路硬件描述语言)以及诸如firrtl的中间表示来定义体现装置的一个或多个逻辑电路的hdl表示。计算机可读代码可提供使用系统级建模语言诸如systemc和systemverilog体现概念的定义或概念的其他行为表示,这些行为表示可由计算机解译以使得能够对概念进行模拟、功能和/或形式验证和测试。
[0546]
附加地或另选地,计算机可读代码可以体现一个或多个网络列表的计算机可读表示。可以通过向rtl表示应用一个或多个逻辑合成过程来生成一个或多个网络列表。另选地或另外地,一个或多个逻辑合成过程可从计算机可读代码生成待加载到现场可编程门阵列(fpga)中以将fpga配置为体现所描述概念的位流。fpga可出于在制造集成电路之前验证和测试概念的目的被部署,或者fpga可直接部署在产品中。
[0547]
计算机可读代码可包括用于制造装置的代码表示的混合,例如包括rtl表示、网表表示或在半导体设计和制造过程中用于制造体现本发明的装置的另一计算机可读定义中的一者或多者的混合。另选地或另外地,概念可在半导体设计和制造过程中用于制造装置的计算机可读定义和定义一旦制造就将由所定义装置执行的指令的计算机可读代码的组合中定义。
[0548]
此类计算机可读代码可设置在任何已知的暂态计算机可读介质(诸如通过网络进行的有线或无线代码传输)或非暂态计算机可读介质诸如半导体、磁盘或光盘中。使用计算机可读代码制造的集成电路可包括诸如以下中的一者或多者的部件:中央处理单元、图形处理单元、神经处理单元、数字信号处理器或单独或共同体现概念的其他部件。
[0549]
在本技术中,字词“被配置为
…”
用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可具有提供所限定的操作的专用硬件,或者可对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。
[0550]
虽然本文已结合附图详细描述了本发明的示例性实施方案,但应当理解,本发明并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明的范围的前提下,本领域的技术人员可在其中实现各种变化和修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1