CN108008932B - 除法合成 - Google Patents
除法合成 Download PDFInfo
- Publication number
- CN108008932B CN108008932B CN201711032975.2A CN201711032975A CN108008932B CN 108008932 B CN108008932 B CN 108008932B CN 201711032975 A CN201711032975 A CN 201711032975A CN 108008932 B CN108008932 B CN 108008932B
- Authority
- CN
- China
- Prior art keywords
- bit
- logic
- binary
- reduction
- logic circuit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/535—Dividing only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4873—Dividing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/491—Computations with decimal numbers radix 12 or 20.
- G06F7/4915—Multiplying; Dividing
- G06F7/4917—Dividing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/491—Computations with decimal numbers radix 12 or 20.
- G06F7/492—Computations with decimal numbers radix 12 or 20. using a binary weighted representation within each denomination
- G06F7/493—Computations with decimal numbers radix 12 or 20. using a binary weighted representation within each denomination the representation being the natural binary coded representation, i.e. 8421-code
- G06F7/496—Multiplying; Dividing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49931—Modulo N reduction of final result
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/727—Modulo N arithmetic, with N being either (2**n)-1,2**n or (2**n)+1, e.g. mod 3, mod 4 or mod 5
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/535—Indexing scheme relating to groups G06F7/535 - G06F7/5375
- G06F2207/5354—Using table lookup, e.g. for digit selection in division by digit recurrence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/535—Indexing scheme relating to groups G06F7/535 - G06F7/5375
- G06F2207/5356—Via reciprocal, i.e. calculate reciprocal only, or calculate reciprocal first and then the quotient from the reciprocal and the numerator
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Nonlinear Science (AREA)
- Error Detection And Correction (AREA)
- Logic Circuits (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
一种用于根据舍入方案确定比率x/d的二进制逻辑电路,其中x是位长度w的变量整数输入,并且d是2n±1形式的固定正整数,该二进制逻辑电路被配置成将比率形成为多个位片,位片共同表示比率,其中二进制逻辑电路被配置成根据用于计算输入x的相应位选择的mod(2n±1)的第一模运算以及根据对进位位的检查来生成每个位片,其中二进制逻辑电路被配置成响应于该检查,选择性地将进位位与第一模运算的结果相组合。
Description
发明背景
用于计算比率的二进制逻辑电路是众所周知的。例如,电路设计通常通过使用来自逻辑单元库的在寄存器传送级(RTL)处生成电路设计的工具来执行,其中逻辑单元库通常包括用于计算比率/>的逻辑单元。这种标准的逻辑单元很少代表用于根据消耗的电路面积或引入到关键路径中的延迟量来计算/>的最有效逻辑。
用于计算比率的常规逻辑通常以两种方式之一进行运算。第一种方法是根据长除法过程来估计比率。这种方法可能在硅面积消耗方面相对有效,但是需要引入大量等待时间的w-n+1个顺序运算,其中w是x的位长度。第二种方法是通过将输入变量x乘以倒数来估计比率:
因此,可以通过使用常规二进制乘法器逻辑来将变量x除以2n-1,该常规二进制乘法器逻辑被布置成将变量x乘以在设计时估计的常数c。这种方法可以提供低等待时间,但需要大的硅面积。
发明内容
根据本发明的第一方面,提供了一种用于根据舍入方案确定比率x/d的二进制逻辑电路,其中x是位长度w的变量整数输入,并且d是2n±1形式的固定正整数,二进制逻辑电路被配置成将比率形成为多个位片,位片共同表示比率,其中二进制逻辑电路被配置成根据用于计算输入x的相应位选择的mod(2n±1)的第一模(modulo)运算并且根据对进位位的检查来生成每个位片,其中二进制逻辑电路被配置成响应于该检查,选择性地将进位位与第一模运算的结果相组合。
二进制逻辑电路可以被配置成通过以下方式针对每个位片i执行对进位位的检查:
在d=2n-1的情况下,在以下情况时返回进位位1以与第一模运算的结果相组合:
x[w-1:n*(i+1)]mod(2n-1)+x[n*(i+1)-1:n*i]≥2n-1
或者
在d=2n+1的情况下,在以下情况时返回进位位-1以与第一模运算的结果相组合:
-x[w-1:n*(i+1)]mod(2n+1)+x[n*(i+1)-1:n*i]≥0。
二进制逻辑电路可以被配置成在不满足相关条件的情况下不将进位位与第一模运算的结果相组合。
对于给定位片i,对进位位的检查可以使用输入x的相应位选择的mod(2n±1)第一模运算的结果。
二进制逻辑电路可以包括多个模逻辑单元,每个模逻辑单元被配置成对输入x的不同相应位选择执行第一模运算,以便生成模输出集合。
可以使用来自模逻辑单元中的至少一个的模输出来生成比率的多个位片。
多个模逻辑单元可以被配置成并行操作。
大多数模逻辑单元可以被配置成并行操作。
二进制逻辑电路包括组合逻辑,该组合逻辑可以被配置成将模输出集合相组合,以便生成比率的位片。
组合逻辑可以是加法器树。
组合逻辑可以被配置成针对每个位片i执行对进位位的检查。
模输出可以是d位独热(one-hot)编码。
二进制逻辑电路可以包括加法器树,该加法器树被配置成通过将对来自x的较短位选择进行的第一模运算的结果相组合以形成对来自x的较长位选择进行的第一模运算的结果从而确定第一模运算中的一个或多个的结果,二进制逻辑电路不包括用于估计对来自x的较长位选择进行的这些第一模运算的逻辑。
加法器树的逻辑元件可以仅包括“与”(AND)门和“或”(OR)门。
在d=2n-1的情况下,二进制逻辑电路可以包括多个全加器,每个全加器被配置成针对指定位片i执行第一模运算x[w-1:n*(i+1)]mod(2n-1),并且每个全加器包括:
缩减(reduction)逻辑,该缩减逻辑被配置成将输入x的相应位选择缩减成第一n位整数β和第二n位整数γ的总和;以及
加法逻辑,该加法逻辑被配置成计算加法输出,加法输出由被右移n的以下各项的总和的n个最低有效位表示:
长度为2n的第一二进制值,其中n个最高有效位和n个最低有效位各自为由β表示的位值串;
长度为2n的第二二进制值,其中n个最高有效位和n个最低有效位各自为由γ表示的位值串;以及
二进制值1。
多个全加器可以被布置在逻辑树中,该逻辑树被配置成生成比率的每个位片i。
缩减逻辑可以被配置成将x的位选择解释成n位行x′的总和,每行表示x的位选择的n个连续位,使得x的位选择的每个位仅贡献一行并且x的所有位均被分配到一行,并且缩减逻辑被配置成在一系列缩减步骤中缩减这种n位行x′的总和,以便生成第一n位整数β和第二n位整数γ的总和。
每个缩减步骤可以包括对x′的多个n位行进行求和,以便生成一个或多个较少n位行的总和。
缩减逻辑可以被配置成在生成二进制位置n+1处的一行的进位位的缩减步骤中,将进位位用作行的最低有效位。
缩减逻辑可以包括一个或多个缩减单元,每个缩减单元可以被配置成对x′的多个n位行进行求和,以便生成一个或多个较少n位行的总和。
缩减逻辑可以包括多个缩减单元,并且该多个缩减单元可以被配置成在每个缩减步骤中对x′的行进行并行操作。
缩减逻辑可以包括串联耦合在一起的多个缩减级,每个缩减级包括一个或多个缩减单元,该一个或多个缩减单元被配置成并行操作以便执行缩减步骤。
缩减逻辑所包括的缩减级的数目等于将n位行x′的总和缩减成n位整数β和γ的总和所需的缩减步骤的数目。
缩减逻辑可以被配置成迭代地对x′的行操作一个或多个缩减单元,直到留下表示n位整数β和γ的两行。
二进制逻辑电路还可以包括:
异常逻辑,该异常逻辑被配置成形成指示x的位选择的所有位是否均为1的确定结果;以及
输出逻辑,该输出逻辑被配置成根据从异常逻辑接收的确定结果对加法输出进行运算;
其中,输出逻辑被配置成在确定结果指示x的位选择的所有位均为1时执行加法输出与二进制值1的“异或”(XOR)运算。
异常逻辑可以被配置成在x的位选择的所有位均为1时形成确定结果1,并且在并非x的位选择的所有位均为1时形成确定结果0,并且输出逻辑包括“异或”(XOR)门,该“异或”(XOR)门被配置成接收加法输出和确定结果来作为其输入,以便形成第一模运算的结果来作为其输出。
加法逻辑可以包括复合加法器,该复合加法器被配置成同时形成第一总和β+γ和第二总和β+γ+1,并且将这些总和提供给多路复用器,该多路复用器被配置成根据第二总和是否生成进位位来在第一总和与第二总和之间进行选择;如果生成进位位,则多路复用器的加法输出是第二总和,而如果未生成进位位,则加法输出为第一总和。
加法逻辑可以包括加法器,该加法器被配置成计算第一二进制值和第二二进制值和1的总和,并且加法逻辑被配置成提供被右移n的该总和的n个最低有效位来作为加法输出。
缩减逻辑,该缩减逻辑被配置成将长度为n的三个相邻输入位串的集合缩减到长度为n的两个输出位串的集合,位串被分配以交替符号,以使得相邻位串具有相反符号并且取决于分配有正号的包括x的最低有效位的第一位串;
进位逻辑,该进位逻辑被配置成对由缩减逻辑在位置n处生成的进位位进行逻辑求反,并且将该进位位包括在两个输出位串集合中的空位置0处;以及
加法逻辑,该加法逻辑被配置成:
在三个输入位串包括两个正位串和一个负位串时将二进制负1与输出位串相加;以及
在三个输入位串包括一个正位串和两个负位串时将二进制正1与输出位串相加。
二进制逻辑电路可以被配置成生成长度为n的位片。
根据第二方面,提供了一种用于根据舍入方案来在二进制逻辑电路中确定比率x/d的方法,其中x是位长度为w的变量整数输入,d是2n±1形式的固定正整数,该方法包括:
通过以下方式形成比率的多个位片中的每一者:
执行第一模运算,该第一模运算用于计算输入x的相应位选择的mod(2n±1);
检查第一模运算的进位位;以及
响应于该检查,选择性地将进位位与第一模运算的结果相组合;以及
将位片相组合以形成完整的比率。
每个第一模运算的结果可以是d位独热(one-hot)编码。
第一模运算中的一个或多个的结果可以通过以下方式来确定:将对来自x的较短位选择进行的第一模运算的结果相组合,以形成对来自x的较长位选择进行的第一模运算的结果。
执行第一模运算可以包括:
将x的位选择缩减成第一n位整数β和第二n位整数γ的总和;
至少部分地计算以下各项的总和的结果:
长度为2n的第一二进制值,其中n个最高有效位和n个最低有效位各自均为由β表示的位值串;
长度为2n的第二二进制值,其中n个最高有效位和n个最低有效位各自均为由γ表示的位值串;以及
二进制值1;
以及
将被右移n的结果的n个最低有效位用作第一模运算的结果。
二进制逻辑电路可以实施于集成电路上的硬件中。可以提供在集成电路制造系统中制造二进制逻辑电路的方法。可以提供一种集成电路定义数据集,其中当在集成电路制造系统中被处理时,集成电路定义数据集将系统配置成制造二进制逻辑电路。可以提供一种非暂态计算机可读存储介质,在其上存储有集成电路的计算机可读描述,其中在集成电路制造系统中被处理时,该集成电路的计算机可读描述使得集成电路制造系统制造二进制逻辑电路。
可以提供一种集成电路制造系统,包括:
非暂态计算机可读存储介质,在其上存储有描述二进制逻辑电路的计算机可读集成电路描述;
布局处理系统,该布局处理系统被配置成处理集成电路描述,以便生成实现二进制逻辑电路的集成电路的电路布局描述;以及
集成电路生成系统,该集成电路生成系统被配置成根据该电路布局描述来制造二进制逻辑电路。
可以提供用于执行本文所述方法的计算机程序代码。可以提供在其上存储有计算机可读指令的非暂态计算机可读存储介质,其中当在计算机系统上执行时,计算机可读指令使得计算机系统执行本文所述方法。
附图说明
现在将参考附图以示例方式描述本发明。在附图中:
图1是用于全加器的第一二进制逻辑电路的示意图。
图2是用于全加器的第二二进制逻辑电路的示意图。
图3是用于全加器的缩减逻辑的示意图。
图4示出了在缩减逻辑中对输入值x的缩减。
图5是根据本发明配置的二进制逻辑电路的示意图。
图6是在全加器处执行的加法逻辑的示意图。
图7示出了用于全加器的二进制逻辑电路的异常逻辑中的“与”(AND)树的示例。
图8是根据本发明配置的二进制逻辑电路的第一示例的示意图。
图9是根据本发明配置的二进制逻辑电路的第二示例的示意图。
图10示意性地示出了5个全加器的并行运算。
图11是集成电路制造系统的示意图。
图12是示出根据本发明配置的二进制逻辑电路的操作的流程图。
图13示出了全加器树中的全加器的示例性逻辑布置。
图14针对常规电路以及根据本文所述原理配置并且使用了独热(one-hot)编码模运算的二进制逻辑电路,比较了它们的面积与延迟的图。
图15针对常规电路以及根据本文所述原理配置并且使用了二进制编码模运算的二进制逻辑电路,比较了它们的面积与延迟的图。
图16针对常规电路以及根据本文所述原理配置并且使用了全加器来执行模运算的二进制逻辑电路,比较了它们的面积与延迟的图。
具体实施方式
通过示例方式给出以下描述,以使得本领域技术人员能够制造和使用本发明。本发明不限于本文所述实施例,并且对所公开实施例的各种修改对于本领域技术人员将是显而易见的。
本文所述示例提供了用于计算比率的改进的二进制逻辑电路,其中x是变量输入,d是固定整数除数。在本文所述示例中,x是已知长度为w位的无符号变量整数输入,d是2n±1形式的正整数除数,div是具有q位的输出。应当理解,本文所公开的原理不限于本文所述的具体示例,并且可以通过使用本领域中已知的二进制逻辑电路设计技术被扩展成例如有符号的输入x、除了舍入到负无穷之外的舍入方案、以及相关形式的除数。例如,根据本文所述的原理,可以通过首先将x右移p,然后再除以2n±1来容易地适应除以d=2p(2n±1)形式的除数的除法。
图5中示出用于估计比率的二进制逻辑电路500,其中除数d=2n±1,并且输入变量x是位范围为x[w-1:0]的无符号整数。电路包括用于保存输入变量x的位的数据存储器501(例如一个或多个寄存器)、用于对输入变量的一部分进行运算以便生成比率div的n个位片的片逻辑510,其中这些位片共同表示输出513,即完整的二进制比率div。二进制逻辑电路可以另外提供用于除法运算/>的模输出514。
数据存储器501可以包括用于输入变量的每个位的寄存器,如图5中所示的寄存器501-505。如果输入变量的位长度为w,则在本示例中将是w个寄存器。其他布置也是可能的。二进制逻辑电路500被配置成对来自输入变量x的位选择进行操作。来自输入变量的位选择由图5中的506-508表示。位选择在设计时被确定。例如,每个寄存器可以在二进制逻辑电路中硬连线,以便为片逻辑510提供适当的位选择。现在将描述位选择及其在片逻辑中执行的用于生成输出div的位片计算中的使用。
本示例中的二进制逻辑电路500被配置成计算:
由于使用舍入到负无穷,因此计算比率x/d的下限。
因此,该除法运算的模输出514由下式给出:
modulo=x-d*div (3)
以使0≤modulo≤d-1。
本发明认识到,可以通过从输入变量x的位选择计算比率div的长度为n的位片,来以分段方式有效地估计方程式(2)的除法运算。对于给定n和二进制输入x的已知位长度w,可将可以表示所有可能输出的二进制比率div的最短位长度表示为q:
输出比率div的位n*i到q-1可以在以下方程式(5)中表示如下,其中对i进行选择以生成q位的div。索引的最大值为:
例如,对于16位二进制输入x(对应于w=16)和除数3(对应于形式d=2n-1的除数,n=2),q为15,i的取值范围为[0,7]。
采用模2n来产生最低有效n位给出输出div的第i个n位片的表达式:
对于d=2n-1的情况,方程式(6)简化为条件方程式:
div[n*(i+1)-1:n*i]=x[w-1:n*(i+1)]mod(2n-1)+?1∶0 (7)
其中当以下条件为真时,元素+?1:0表示增加了进位位,否则不增加进位位(或增加零):
x[w-1:n*(i+1)]mod(2n-1)+x[n*(i+1)-1:n*i]≥2n-1 (8)
对于d=2n+1的情况,方程式(6)简化为条件方程式:
div[n*(i+1)-1:n*i]=x[w-1:n*(i+1)]mod(2n+1)-?1:0 (9)
其中当以下条件为真时,元素-?1∶0表示增加了负进位位,否则不增加负进位位(或增加零):
-x[w-1:n*(i+1)]mod(2n+1)+x[n*(i+1)-1:n*i]<0 (10)
通过这种方式,对于i的每个值,可以将潜在的复杂除法运算缩减成对来自输入变量x的位选择执行模运算。根据方程式7或9执行的每个模计算均表示预期输出div的n位片。因此,来自i模计算的集合的共同输出表示完整的q位输出div513。输出513可以存储在一个或多个位寄存器中。并非同时需要输出513的所有位-例如,可以在片逻辑生成div的n位片时将它们存储起来,直到寄存器中出现完整的q位输出div513。
参数d和w是在设计时已知的,以使二进制逻辑电路可以被配置成优化成执行除以d的固定功能硬件单元。可以在片逻辑510中实现能够根据方程式7和8或9和10(适合于d的特定形式)执行模运算的任何逻辑。
将除法运算缩减成对输入变量的一部分执行的一组模运算能够实现以低等待时间执行除法运算,并同时消耗芯片上的有限面积。该方法还提供了优化二进制逻辑电路500以最小化等待时间和/或芯片面积消耗的实质范围。通常,等待时间和芯片面积消耗至少在某种程度上是竞争因素。本文所述方法允许要实现的它们之间的预期平衡。
上述方法实现了除法运算的实质并行化。例如,可以在片逻辑中提供多个逻辑单元,以使得能够并行地生成div的两个或更多个(并且可能全部)n位片。这使得能够实现非常低的等待时间。将为形成div的位片而执行的模计算进行重复可以替代地或附加地用于减少二进制逻辑电路所消耗的面积。例如,不为给定模计算的每个实例提供逻辑单元,而是可以提供比该计算的实例数目更少的逻辑单元(可能为一个),其中当需要由逻辑单元执行的计算的结果时,该结果用在片逻辑中的多个实例中。
以上方程式7到10中针对每个i表示的位选择针对n=2的情况在图5中通过位范围506至508示出。例如:
·为执行i=0的模计算,需要位范围x[w-1:n](即x的除了前2位之外的所有位);进位检查需要相同的位范围以及x[n-1:0]。因此,片逻辑需要x的所有位来执行i=0的模计算。相关位选择由图5中的506示出。
·为执行i=1的模计算,需要位范围x[w-1:2n](即x的除了前4位之外的所有位);进位检查需要相同的位范围以及x[2n-1:n]。因此,片逻辑需要x的除了前2位之外的所有位来执行i=1的模计算。相关位选择由图5中的507示出。
·为执行一般i的模计算,需要位范围x[w-1:n*(i+1)](即x的除了前2(i+1)位之外的所有位);进位检查需要相同的位范围以及x[n*(i+1)-1:n*i]。因此,片逻辑需要x的除了前2i位之外的所有位来执行一般i的模计算。相关位选择由图5中的508示出。
继续说明该示例,在n=2的情况下,对于除以d=2n-1形式的除数的除法,如果输入变量x的长度为w=16位,则根据方程式4,输出div的长度q=15位。在这种情况下,i取值范围为[0,7]。因此,输出div由每个均为2位的七个位片,以及针对最高有效位div[14]的单个位片形成。在此示例中,二进制逻辑电路500被配置成执行16位输入变量x除以3的除法。
片逻辑可以包括模逻辑511和组合逻辑512。模逻辑被配置成执行x[j:k]mod(2n±1)形式的模计算。模逻辑511可以包括一组逻辑单元,每个逻辑单元被配置成执行模计算-在一些示例中,每个这样的单元可以被配置成执行在给定j和k的值范围的情况下的可能模计算中的不同的一者。组合逻辑512被配置成根据方程式7和8或9和10(适用于d的形式)将来自模计算的输出相组合,以生成div的位片,并且因此生成完整的输出513。组合逻辑512可以根据方程式8和10并且使用在模逻辑511处执行的模计算的输出来对每个位片增加进位位。通过模逻辑和组合逻辑进行的处理不必是按顺序的。例如,组合逻辑可以是其中布置有模逻辑的逻辑树的形式。在一些实施例中,模逻辑和组合逻辑可以是一个并且是同一单元。
可以使用用于计算x/d的模的任何合适逻辑。例如,可以根据方程式3在片逻辑510中通过输出div513计算模输出514。但是,该方法会引入额外的等待时间并消耗额外的芯片面积。优选地,除法运算x/d的模与div在片逻辑处同时被计算。这可以通过例如将片逻辑配置为计算x[w-1:0]mod(2n±1)=modulo来实现。可以使用以下述方式配置的全加器来计算该结果。更一般地,可以使用其他任何合适逻辑,包括例如使用下述独热编码配置的逻辑。有利的是,无论使用什么逻辑,片逻辑被配置成通过至少部分地使用根据方程式7和9计算的一个或多个模运算x[j:k]mod(2n±1)的结果来生成模结果。例如,在下述独热编码示例中,通过使用x[w-1:n]范围内的x的位计算出的一个或多个模运算的结果可以以针对独热示例描述的方式与x[n-1:0]mod(2n±1)的结果相组合,以产生完整的modulo=x[w-1:0]mod(2n±1)。
图12的流程图中示出了由二进制逻辑电路500执行的操作的示例。二进制逻辑电路接收输入x(1201),对于输入,需要针对d=2n±1形式的正整数d来确定比率x/d。二进制逻辑电路(例如,多个模逻辑单元)的片逻辑被配置成例如根据方程式7或9对位选择x[j:k]执行x[j:k]mod(2n±10形式的模运算1202。在片逻辑处执行位检查1203,以便确定是否要将进位位与模运算1202的结果相组合。进位检查本身可以包括根据方程式8或10的一个或多个模运算,并且/或者进位检查可以使用已经执行的一个或多个模运算的结果。如果要增加进位位,则将进位位与模运算1202的结果相组合(例如,相加)(1204)。在d=2n-1的情况下,进位位为1;在d=2n+1的情况下,进位位为-1。如果不增加进位位,则不执行组合运算或者将模运算的结果与零相组合(1205)。组合的结果是长度为n的位片1206。
针对每个位选择重复(1209)对位片1206的生成,以便在i上生成设置的位片。重复不需要按顺序执行,并且图12中指示的重复1209仅仅是示意性的:步骤1202到1204/1205中的一部分或全部可以并行执行,以形成多个位片。在1207处将位片进行组合,以便在1208处形成完整的比率x/d。该组合可以简单地包括:例如,将位片中的位存储在二进制逻辑的寄存器中,以使一旦已经生成了所有位片,则寄存器中可以获得完整的比率。
请注意,在步骤1202处执行的计算不需要是相同的计算从而形成每个位片:可以基于对于来自x的其他位选择的先前的模计算的结果来确定来自x的某些位选择的模计算的结果。
现在将参照图8和图9描述二进制逻辑电路500的示例性实施方式。
独热模编码
对于由片逻辑510执行的模计算的结果,使用除简单二进制编码之外的编码可能是有利的。在此示例中,使用独热编码,其中将由片逻辑执行的x[j:k]mod(2n±1)形式的每个模计算的结果编码成d位宽的值,其中只有一个高位(即独热)并且所有其他位为零。将片逻辑510配置为生成独热编码使得模计算的结果能够组合成特别有效的逻辑树,以便形成输出div的位片。独热编码在n较小时特别有利,并且可以用于任何奇数值的d。这是因为独热编码长度为d位,而不是的二进制长度,因此所需的逻辑量通常增加为d2。n在例如除数d=2n±1为3、5、7时可以视作较小。在一些实施方式中,当d为9、11、13等时,n也可以视作较小。
图8示出了具有片逻辑510的二进制逻辑电路800,其中片逻辑被配置成使用独热编码进行操作。在此示例中,片逻辑包括多个模逻辑单元805-808,每个模逻辑单元被配置成执行x[j:k]mod(2n±1)形式的模计算,并将结果输出为独热编码810-813。每个模逻辑单元可以被配置成执行不同的模计算(例如,对于不同的j,k)。
以二进制形式表示模计算a mod b所需的位数是其中输出可以取0到b-1之间的任意值。例如,在除数为d=2n-1的本情况下,值n=2意味着只需要位来以二进制形式表示除数d=3的模运算的输出。独热编码采用d位(在这种情况下,是3位)对输出进行编码。这是因为a mod 3只有3个可能输出,因此只需要三个独热编码来表示这些输出:
0 mod 3->"001"
1 mod 3->"010"
2 mod 3->"100"
模计算中a的其他所有值均围绕这三个值中的一者。这些值表示一种编码选择-在以不同方式将可能的独热表示分配给模运算的可能输出的情况下,可以使用其他编码。模逻辑单元可以被配置成在执行模运算时生成相关的独热表示。在其他示例中,片逻辑510可以设有查找表(LUT),并且被配置成用LUT中定义的相应独热表示来替代模逻辑单元的二进制输出。
通常,在给定a和b的d位编码的情况下并且假设d是奇数,则可以如下计算(a*2k+b)mod d的独热编码的第i位。存在d2个(a,b)的值选择,并且对于这些选择的确切d,(a*2k+b)mod d=i。例如,(a,b)=(0,i)的情况。这是因为存在r值,使得(r*2k)mod d=1。
对于j=0,...,d-1,使(a*2k+b)mod d=i的d值的集合是(a,b)=(r*(i-j)mod d,j)。独热编码的第i位可以由下式给出:
·对于给定的i,针对a和b中的每个位位置,用“与”(AND)运算将a和b的对应位进行组合以生成d个中间值;
·用“或”(OR)运算将d个中间值进行组合,以便产生独热表示的第i位。
例如,对于d=3以及因此产生的情况(2*a+b)mod 3,独热编码的第0位由下式给出:
(a(0)AND b(0))OR(a(1)AND b(1))OR(a(2)AND b(2))
而对于3位独热编码的第1位和第2位也类似。
可以在片逻辑中提供逻辑以生成用于给定输入的这些编码,但是优选地将独热编码写入查找表,以便在接收到模计算的结果时使得逻辑能够读出该结果的独热编码。
使用独热编码的优点是可以在逻辑树814处有效地组合模逻辑单元805-808的输出的独热表示810-813。逻辑树814是组合逻辑512的示例。这是因为使用独热编码允许通过将对x的较小位选择进行的模运算的输出相组合来确定对x的较大位选择进行的模运算的输出。这是因为:
例如,可将x[f:g]mod(2n±1)和x[g-1:h]mod(2n±1)组合在一起来形成x[f:h]mod(2n±1),因为根据方程式11:
因此,n=2,d=3的以上示例之后,mod 3运算的输出的组合可以由独热编码表示如下:
(0+0)mod 3=(2+1)mod 3=(1+2)mod 3=0mod 3->"001"
(1+0)mod 3=(0+1)mod 3=(2+2)mod 3=1mod 3->"010"
(2+0)mod 3=(1+1)mod 3=(0+2)mod 3=2mod 3->"100"
可以使用任何适当逻辑树814来组合模输出的独热表示以形成输出div。但是,由于独热编码方案中的每个模运算表示中只有1位为高,因此仅使用“与”和“或”门实施逻辑树是有利的。这样可最小化二进制逻辑电路的复杂性、等待时间和消耗面积。
此外,可以容易地优化逻辑树814的结构以最小化关键路径上的延迟或者最小化由电路消耗的芯片面积。在给定r输入到树的情况下,在第一示例中,逻辑树可以被构造成具有log(r)次序的深度,并且树中具有r*log(r)个组合。该结构可最小化关键延迟。在第二示例中,树可以被构造成具有r次序的深度,并且树中具有r个组合。该结构可最小化电路面积。可能存在这些示例之间的中间结构,该中间结构可以提供等待时间和电路面积的期望平衡。
逻辑树814可以具有类似于例如进位先行加法器(将为深度log(r)的树)或行波进位加法器(将为深度r的树)的结构。
通常需要对div的独热编码片进行解码,以形成二进制表示。这可以通过使用合适的查找表来实现-例如,为每个可能输入提供预定义输出的逻辑。
在一个示例中,可以如下计算对来自x的独热模编码的解码。在此示例中,输入x已经以以下列方式分成k片:
x[ik-1-1:ik-2],x[ik-2-1:ik-3],..,x[i1-1,i0]其中ik-1=w and i0=0
可以根据相同切片结构来计算输出div。例如,可以通过x[w-0:ij]mod d和x[ij-1:ij-1]来计算div[ij-1:ij-1]。x[w-1:ij]mod d可以通过以上述方式使用独热编码以及对更高有效位片x[ik-1-1:ik-2],..,x[ij-1:ij-1]进行组合来计算。
输出div由以下公式给出:
这是从以上方程式5和6的一般应用得出的,因为:
除了仅为位片x[ik-1:ik-2]的函数的最高有效div[ik-1:ik-2]之外,可以对所有位片类似地执行此操作,并且在解码查找表中可以将模值假定为零。
如果位片足够小,则本领域技术人员通常很容易通过手动创建一些逻辑来有效地将独热形式解码成二进制形式,并且解码(以及初始的独热编码)逻辑将较为廉价。但是权衡点在于,位片越小,用于编码/解码以及使用组合逻辑来进行组合的逻辑就越多(需要具有更多初始节点的树)。
可以将输入x分成长度差异量与n不同的部分,因为假设在设计时已知i以及a和b的独热编码,则计算(α*2i+b)mod d的独热编码所需的逻辑量与i值无关,因此对于d=2n±1,其不需要被限制为n的倍数。
这使得可以通过增加x的初始编码二进制部分的宽度来减少组合逻辑的数量,因为这意味着要组合的独热值更少。但是,这将以对模运算结果进行更复杂的独热编码以及相应地对div片进行更复杂的解码为代价(尽管可以使用查找表来执行编码和解码步骤)。
或者,x的二进制部分的宽度可以减小,但是这意味着要组合更多独热编码并且计算更多模值以计算div的增加数目的位片-换言之,需要更高数量的组合逻辑。
例如,在d=3的情况下,生成的输出div的位片的宽度可以是1位而不是n=2位。这使得初始独热编码很简明,因为只需要“非”(NOT)门:即0变为000,1变为001,因此一般x[i]变为0x[i]NOT(x[i])。对位片的解码类似地也很简明,因为方程式7可以在该d=3的情况下被重写为:
div[i]=?1:0=2*(x[w-1:i+1]mod 3)+x[i]≥3?1:0
假设是x[w-1:i+1]mod 3=e(i+1)[2∶0]的独热编码,则div[i]=e(i+1)[2]OR(e(i+1)[1]ANDx[i]),这可以使用简单的“与或”(ANDOR)逻辑门来实现。
减小x的二进制部分的宽度的代价是组合逻辑树较大,因为它的输入现在变为两倍。但是,编码/解码逻辑可以更小。可以通过适当建模在设计时确定所得电路的大小和/或速度方面的最佳二进制部分宽度。
最普遍的,位片不需要全部为相同长度。这可以通过在逻辑树814中对组合逻辑进行适当修改来适应。
在其他示例中,可以使用不同于独热编码的编码方案。
有符号情况
应理解的是,图8所示的独热二进制逻辑电路可以容易地扩展成支持有符号输入变量x。例如,在有符号的8位数x的情况下,独热编码由下式给出:
其中onehot(x[i])分别表示作为数字{0,1,2}的独热信号{“001”,”010”,”100”},使得x[i]=0,1(对于i=0,..,6),以及x[7]=0,1(其中值x[7]表示为-1*x[7],因为它是有符号位),并且i=0,...6与i=7之间的差别为0,-1 mod 3=0,2。使用长度为1的片执行除以3的除法可得到有符号的7位div输出:
div[i]=onehot(x[7:i
+1]mod 3)[2]OR(onehot(x[7:i+1]mod 3)[1]ANDx[i])for i
=0,..,6
请注意,输出div[6]逻辑的符号位可简化为:
div[6]=onehot(x[7]mod 3)[2]OR(onehot(x[7]mod 3)[1]AND x[6])=x[7]OR′0′
=x[7]
这是针对舍入到负无穷(RNI)舍入的输入的符号位。负输入总是得出负输出。
通常,可以将输入“符号扩展”一位,因此现在符号位是有效位高出1位(例如,x[n]而不是x[n-1])。这使符号位不再是分片操作中的一部分,并且可以单独处理。但是,最高有效位片的模值必须仍然考虑到符号位对模值的影响:换言之,应仍然对x[n-1:ik]mod d进行编码,如同x[n-1]是符号位一般。
因此,可以根据以下略微改变的方程式来估计最高有效位片:
其中x[n]在这里被解释成值为-1或0(而不是1或0)。
在此方程式中,现在存在潜在的非零mod项,这在无符号方程式中不存在:
输出符号位应始终与针对RNI舍入的输入符号位相匹配。无符号除法也可以以这种方式进行处理,但符号位x[n]总是为零,因此上述方程中的mod项决不会发生。
全加器缩减
图9中示出了二进制逻辑电路的第二示例性实施方式。二进制逻辑电路900使用全加器905的逻辑树来执行x[j,k]mod(2n±1)形式的模运算。可以为每个模运算提供全加器,可以为每个不同的模运算提供全加器,或者可以提供比不同模运算的数量更少的全加器,其中全加器被配置成共享逻辑元件和/或在全加器中生成的值,如下所述。现在将参照图1-4、6-7和10描述情况d=2n-1的全加器。在以下段落中,将使用符号m代替n来表示除数d中的指数2。
图1中示出了用于对给定值m和输入值x估计y=x mod(2m-1)的全加器100。全加器包括缩减逻辑101,该缩减逻辑被配置成将长度为v的x的选定输入位范围(如上所述,每个模运算中仅使用x的w位选择)缩减到两个m位数字的总和x′,并且加法逻辑104被配置成计算通过两个m位数字的总和x′确定的总和,从而以这种方式生成y。在v mod m=0的情况下,可以提供异常逻辑102和“异或”(XOR)106,以确保在x的所有数字均为1的情况下全加器提供正确的输出。
缩减逻辑101对二进制输入值x进行操作,在本示例中,二进制输入值将为图5所示的来自输入变量x的位选择x[j:k]。最通常地,缩减逻辑可以包括以适于将x的范围缩减成两个m位数字的总和的方式布置的任何类型的(一个或多个)缩减单元,并且该缩减单元被配置成在每个缩减步骤之后,第m位位置上方进位的位将回绕到第一位位置的位置中。这是可接受的,因为2mmod(2m-1)=20。在本文描述的全加器示例中,一个或多个缩减单元被布置成将表示或解释为x′的x进行压缩,其中x'是x的连续m位部分的总和,如图4中的402所示。由于x mod(2m-1)=x′mod(2m-1),可以通过将x特别表达或解释成长度为m的各行的总和402来代替x计算y=x mod(2m-1)。这可以理解如下:
尽管x的范围是[0,2v-1],但是x′的范围是[0,k*(2m-1)],其中k是x′的行数,并且在402中小于或等于以12位数x=110101101111作为简单示例。该数字可以以x′的形式表示为x的连续m位部分的总和,如下所示:
1111
+0110
+1101
缩减逻辑101的一个或多个缩减单元可以是一个或多个全加器,该全加器被布置成将x′的行缩减到长度为m的两行的总和。全加器接收两个一位值和进位位作为其输入,并将这些位值的总和与进位位一起输出。因此,可以使用全加器来对x′的一对行的位进行求和,以便将这两行m位压缩成单行m位和进位位。如本领域已知,这可以通过使用m个级联全加器或通过使用少于m个的全加器并且在先前全加器的输出上迭代地操作这些全加器中的一个或多个来实现。
也可以使用其他类型的缩减单元,例如半加器。应理解的是,存在大量可能的加法器设计,这些加法器设计可以用于将多个m位二进制数的总和缩减成两个m位二进制数的总和。根据本文所描述的原理,可以在缩减逻辑中采用任何合适的加法器设计来缩减x的范围。
缩减逻辑101可以包括一个或多个缩减单元。通常,可以使用能够将s行二进制总和缩减成t行二进制总和(s到t缩减单元)的任何种类的缩减单元。一个或多个缩减单元被配置成提供一对行x′作为缩减逻辑的输出。多个缩减单元可以串联或并联布置。根据以下教导,缩减逻辑被配置成在每个缩减步骤之后,将位位置m+1处的进位位回绕到第一位位置。
全加器的缩减逻辑101保持运行,直到x′的行已被缩减成两行,此时,x′位于[0,2*(2m-1)]范围内。这长度为m的两行的x′被称为β和γ。
现在将描述缩减单元302的有利形式,缩减单元提供对x′的高速压缩。每个缩减单元包括m个全加器,该全加器被配置成对每行长度为m的三行的x′进行操作。每个全加器对每行的相应位的列进行操作,以将三行压缩成长度为m的两行。图10中示意性地示出了缩减单元的操作,其中示出了表示到缩减单元的输入的长度为m(在该示例中为m=5)的三行1001-1003。缩减单元包括五个全加器1004,每个全加器被配置成对来自三行的相应位的列进行操作。例如,全加器1008对行的第一位进行操作,在这种情况下,包括对位1、0和1求和。全加器的输出包括进位位和总和位,每个全加器的输出由图中的虚线箭头指示。例如,全加器1008的输出由位对1005表示,并且包括进位位1和总和位0。总的来说,进位位表示第一输出行1006,并且总和位表示第二输出行1007。
在使用缩减单元的这对输出行之前,其在m+1列/位位置存在(至少逻辑上)的进位位1009被回绕到第一列/位位置。这是可以接受的,因为2mmod(2m-1)=20,并确保x′的行保持对齐且长度为m位。下面将参考图4更详细地描述进位位的回绕。在物理层面,进位位的回绕可以通过对缩减逻辑的输出进行适当布线来实现。
通过以如图10所示的方式对x′的三行集合的列来操作包括m个全加器的缩减单元,可以将x′的行数被减1。但是优选情况下,缩减逻辑101包括对x′的行并行操作的多个缩减单元302。一组缩减单元的每个操作将表示一个缩减步骤,缩减步骤将x′的行数缩减了缩减单元的数量。由于在设计时已知布置全加器来对其进行处理的x的位的长度,因此对缩减逻辑101而言,包括与x′的每行长度为m的三行集合同样多的缩减单元是有利的。换言之:长度为v的二进制输入x将创建长度为m的行,可能会加上长度小于m的行。任何长度小于m的行的空位可以被设置为0。/>
对于长度为v的二进制输入,可以提供个缩减单元,以便将x′的行数缩减约三分之一。/>表示x′的初始行数,其中可以包括长度小于m的行。当v为m的整数倍时,缩减单元的数量为/>随着x′的行数变小,缩减单元的数量也变小。
为了将x′的行数缩减成两行,缩减逻辑中的一组缩减单元可以被配置成对x′进行迭代操作,直到x′的行数达到2。例如,包括个缩减单元的缩减逻辑可以被配置成对x′的行迭代地执行一系列缩减步骤,每个缩减步骤中所需的缩减单元逐渐减少,直到仅留下两行。为此,这可使用顺序逻辑和时钟信号来实现以将用于上一缩减步骤的缩减单元的输出安排成用于下一缩减步骤的缩减单元的输入。但是配置通常只允许每个时钟周期一个缩减步骤(迭代)。
优选地,缩减逻辑包括串联布置的多级缩减单元,每级缩减单元从上一级的输出接收其输入。每级的缩减单元可以被配置成并行操作。所提供的缩减单元级数等于在无迭代的单个操作中将输入x缩减成长度为m的二进制值的总和所需的数量相同。图3中示出了针对缩减逻辑101的布置。在此示例中,缩减逻辑包括多个缩减级,而图中示出了其中的三个缩减级:级301、302和303。每个缩减级包括一个或多个缩减单元304。
每个缩减单元304包括一组图10所示的全加器,它们各自被配置成将x′的三行集合相加,以便在每个缩减级在其位置处形成x′的一对新行,并因此将x′的行数减少1。通过并行操作缩减单元304,可以在每个缩减级中将x′的行数缩减约三分之一。
第一缩减级301包括个缩减单元304,每个缩减单元具有m个全加器,这些全加器被布置成以图10所示方式对三行集合并行操作。每个缩减单元将其所操作的3行缩减成2行。因此,第一缩减级的输出处提供的行数将是:
第二缩减级(例如302)被布置成对第一缩减级的输出进行操作,并且包括适合于在第一缩减级的输出处提供的行数的多个缩减单元。例如,如果来自第一级的输出行数是b,则第二缩减级包括个缩减单元304。足够数量的进一步缩减级以这种方式串联布置,直到最终缩减级303的输出仅包括两行。最终缩减级303包括单个缩减单元304,该缩减单元被配置成对上一缩减级的三个输出行进行操作。
在此示例性配置中,缩减逻辑中存在的全加器的总数是个全加器。应理解,如果行的位数少于m位,则全加器的一些输入将为零。全加器可以视作半加器,在这种情况下,将存在/>个全加器以及(-v)mod m个半加器。所描述的配置表示具有最小数量的缩减级的缩减逻辑。
以这种方式配置的缩减逻辑(具有一系列缩减级,这些缩减级中的每个缩减级包括一个或多个缩减单元,缩减单元对x′的行并行操作)通常能够在其上运行缩减逻辑的数字平台的单个时钟周期中将x压缩成长度为m的两行x′。因此,使用串联缩减级可提供将输入x缩减成满足下式的两行β+γ的总和的高速配置:
x mod(2m-1)=(β+γ)mod(2m-1) (15)
例如,对于m=5的情况,考虑长度v=48的输入x。对于优选情况,缩减逻辑的第一级包括个缩减单元,用于对初始x′的10行集合进行操作,留下未分配给还原单元的较短3位行。每个缩减单元以图10所示的方式操作,其中第一缩减级的每个缩减单元将其三个输入行缩减成两个。因此,第一缩减级的输出例如301将包括7行。这可包括可视作构成第一级“输出”的一部分的未分配短行。通常,一种方法只是从最高有效行开始,向每个缩减单元分配3行构成的组,即便该行包括前导零(即,该行“短”的情况)。第二缩减级,例如中间级302包括两个缩减单元,这两个缩减单元可布置成将7行中的6行压缩成4行,总共留下5行。之后的缩减级(需要另外3个)可以各自包括对上一级输出的三行进行操作的一个缩减单元,直至仅剩下两行。此示例表示缩减单元在缩减逻辑101中布置成一系列缩减级的一种可能布置。
应理解,可以以其他各种配置将全加器布置在缩减单元中。因为可用作到一级的输入的行数将为3的整数倍,因此缩减级不一定始终能够对所有可用行操作。通常有多种方式来将全加器布置在缩减逻辑中,同时仍然实现相同数量的缩减级。这种自由度使设计者能够例如优化缩减逻辑,以便处理成物理逻辑电路时最小化其面积/延迟/功率。
缩减逻辑的许多其他配置可以将输入x压缩到长度为m的两行。缩减逻辑可以包括不同于全加器的缩减单元,例如可用于将两行缩减成一行的行波进位加法器。但是由于行波进位加法器的进位传送会导致性能比其他类型的缩减单元慢,因此并行实施方式中优选不使用所配置的行波进位加法器来对行对进行相加。
图4更详细地示出了缩减逻辑101所执行的第一缩减步骤。输入x401的v位位置在图4中标记为从对于最高有效位的v-1到对于最低有效位的0。如图所示,为了计算y=x mod(2m-1),输入x可以表示为长度为m的行的总和402,其中行表示x的连续m位部分。因此,行数取决于x的长度。在v(x的长度)不是m的整数倍的情况下,用于填充最终m位部分的位数将不足,如图4中的409所示。这些位可以被设置为0或在缩减逻辑中被解释为0。
图4中的406示出了由缩减逻辑对x′执行的第一缩减步骤的输出。总和406的行表示新值α,新值具有等于x的mod(2m-1)值。现在将参考行403来说明输出行406的形成(为清楚起见而示出,但是优选地不表示缩减逻辑中形成的中间结果)。
由第一缩减步骤执行的缩减生成进位位404和405。如上所述,如图4中的406所示,缩减步骤(例如,404、405)在第m位位置处生成的任何进位位将回绕到第一最低有效位位置(例如407、408)。这是可接受的,因为2mmod(2m-1)=20。可以以任何适当方式来执行进位位的回绕-例如通过缩减级之间的适当连接,或通过对被配置成对x′迭代地进行操作的缩减逻辑的适当配置。由于所执行的操作的性质,对于要生成进位位的行(例如,图10中的行1006),第一位位置将始终为空。
在上述示例中,每个缩减步骤将x′的行数缩减约三分之一。在使用缩减单元的其他类型或布置的其他示例中,每个缩减步骤中所缩减的行数可以不同-例如,可以使用将4行缩减成3行或者将7行缩减成3行的缩减单元布置。根据上述原理,这样的布置可以生成不止一个进位位,进位位将回绕到空的最低有效位位置。
而在v mod m≠0的情况下,在x′402的初始表达式中,对于x的每个可能输入值,将始终存在具有0位的行。如果0是全加器的三个输入中的一个输入,则两个输出中的一个输出也必须为0,因为只有当每个输入均为1时,每个输出才为1。因此,在由缩减逻辑101执行的每个缩减步骤之后,x′的行中的一行的至少一位将为0。由于x′位于范围[0,2*(2m-1)]内,因此只有在v mod m=0和x=2n-1的情况下(即所有n个输入位均为1),x′达到其最大值2*(2m-1),其中x′的行中的所有位都保持为1。这一点与下面的讨论相关,其中提供可选异常逻辑112(在v mod m=0的情况下使用)以便降低加法逻辑104中的关键路径延迟。
应注意,图4是本示例中缩减逻辑的逻辑操作的示意图,并且不旨在暗示x的位值需要物理地存储在缩减逻辑中作为行的总和402。缩减逻辑可以对以任何形式保存在缩减逻辑或全加器的任何其他部分中的x的位值进行操作。
现在将说明将v位输入x表示为两个m位数β和γ的总和x′以用于计算y=x mod(2m-1)的有用性。
用于计算y=x mod(2m-1)的二进制总和的表示如图6所示。图6中的总和可以在诸如常数因子乘法阵列等之类的二进制乘法器阵列中执行(因为在设计时已知v和m)。所示的求和计算表示以下各项的总和:
·第一行604,第一行包括重复两次的β的位(即列601中的β的位以及列602中被左移m位的β的位);
·第二行605,第二行中包括重复两次的γ位(即列601中的γ的位以及列602中被左移m位的γ的位);以及
·1。
现在将说明这一计算的意义。注意,列601和602仅仅是示意性的,并且不需要表示独立的总和。
在v mod m=0和x=2v-1(x的所有数字均为1)的情况下,值x′=β+γ=2m+1-2。这种情况可以以下述方式在异常逻辑中单独处理。对于在v mod m≠0时的x的所有输入,以及对于在v mod m=0时的x的所有输入,除了上述x=2v-1的情况之外,值x′=β+γ位于范围[0,2m +1-3]内。考虑该范围中(β+γ)∈[0,2m-2]的第一部分。从该β+γ的值的可能范围可以看出:
β+γ=((β+γ)mod(2m-1))=(x mod(2m-1)) (16)
换言之,在这种情况下,y等于总和β+γ。这是因为由于0≤β+γ+1<2m,列601中的总和β+γ+1不产生进位位。图6所示的二进制总和的输出603在这种情况下与列602所示的总和相同。
现在考虑x′范围中(β+γ)∈[2m-1,2m+1-3]的第二部分。在此情况下,由于2m≤β+γ+1<2*2m,列601中的总和β+γ+1确实产生第(m+1)列的进位位。它符合下式:
2m-1≤β+γ<2*(2m-1) (17)
因此:
((β+γ+1)mod 2m)=(β+γ+1)-2m
=(β+γ)-(2m-1)
=((β+γ)mod(2m-1)) (18)
对于完整范围(β+γ)∈[0,2m+1 -3],可得出:
(β+γ)mod(2m-1)=(β+γ+1)mod 2m(如果β+γ+1≥2m) (19)
或者:
(β+γ)mod(2m-1)=(β+γ)mod 2m (20)
从上文可了解,图6所示的总和可以通过适当地选择总和的结果603的位来提供所需的输出y=x mod(2m-1)。例如,如果β+γ+1不产生进位位,则输出603由列602中的总和β+γ的前m位给出。该值等于((β+γ)mod 2m).。如果β+γ+1确实产生进位位,则输出603由列602中的总和β+γ+1的前m位给出,其中额外的1是由从列601中的总和进位而产生的。该值等于((β+γ+1)mod 2m).。
换言之,输出y=x mod(2m-1)由位选择603给出,位选择等于取图6所示的总和的结果的m位并且将其右移m,即总和的m+1到2m的位置中的m位。
图6所示的总和及位选择可以以任何合适方式实现在全加器中,例如,在图1所示的加法逻辑104中。全加器的输出将为目标值y。在一些实施方式中,全加器可以不被配置成计算图6中所示的全加总和;全加器可以被配置成以任何合适方式仅生成表示输出y的所需位603。
在图1所示的示例性全加器中,加法逻辑包括加法器105,该加法器是被配置成执行对图6的求和的阵列。加法器从缩减逻辑101接收表示为两个m位值β和γ之和的x′。加法逻辑的输出108是由加法器估计的总和的位置m+1到2m处的m位选择。可以在物理逻辑电路中通过将来自由加法器形成的总和的输出位硬连线到加法逻辑的输出来实现该位选择,以便生成输出y。
图1中的加法器105的宽度为2*m。由于加法器执行的求和的性质(参见图6),因此所执行的加法中存在大量的重复。使用被配置成同时计算β+γ和β+γ+1的复合加法器来代替加法器105是有利的。该示例由图2中的二进制电路200示出,其中复合加法器205从缩减逻辑101接收β和γ,并计算β+γ(信号208)和β+γ+1(信号209)。返回参考图6,可以考虑复合加法器205来同时计算列601的总和(β+γ+1)以及列602的总和(β+γ)。复用器206用于基于由总和β+γ+1产生的进位位207来在信号208和209之间进行选择。如果进位位为1,则加法逻辑的输出108为(β+γ+1)mod 2m;如果进位位为0,则加法逻辑的输出108为β+γ。使用复合加法器有助于最小化加法器的电路面积。
在v mod m=0和x=2v-1的情况下,β+γ=2m+1-2,,其位于范围[0,2m+1-3]之外。在这种情况下,被配置成计算图6所示总和的乘法器阵列不提供正确的输出。当β,γ=2m-1时,实现图6所示的总和的逻辑输出是2m-1,而答案实际上为0。有利的是,在加法阵列之外处理异常,以免损害阵列的选择。例如,可选择适用于特定实施方式的针对大小/速度/功耗而优化的阵列,而不需要修改阵列来处理异常情况。
例如,返回到图1和图2所示的示例性全加器中,当v modm=0时,可以在异常逻辑102处理x的所有输入位均为1的异常情况。v和m的值在设计时是已知的。如果v modm≠0,则不需要异常逻辑。异常逻辑可以以任何适当方式被配置,但是如果在x的所有输入位均为1时异常逻辑107的输出是为1的二进制指示(例如,异常标志),并且在并非x的所有输入位均为1时异常逻辑输出是为0的二进制指示,则这是有利的。这允许使用快速有效的“异或”(XOR)逻辑106来生成输出y。“异或”(XOR)逻辑可以被包括在加法逻辑104/204中。“异或”(XOR)逻辑106接收来自异常逻辑102的异常标志107以及来自加法逻辑104/204的输出108作为其输入。由于2m-1(在这种情况下,加法逻辑的输出)是0的逻辑反(将0视作m位二进制串),因此对于异常情况,“异或”(XOR)逻辑的输出为y,因此“异或”(XOR)具有所需的效果。
图7中示出了用于在v modm=0的情况下使用的异常逻辑102的示例配置。示例性输入x的位由图中的位值701示意性地表示。“与”(AND)门702的树被配置成接收x的位并提供用作异常标志107的单个输出位。“与”门树可以以许多不同方式进行布置,以达到相同结果。图7中示出了适用于对6位输入x进行操作的一种布置。“与”(AND)树包括三个“与”(AND)门702-704,每个“与”门接收两个位值701作为输入;“与”门705,其接收“与”门703和704的输出作为其输入;以及“与”门706,其接收“与”门702和705的输出作为其输入。“与”树布置成使每个位值701向“与”门提供输入。应理解,在所有位值701均为1的情况下,“与”树的输出107将仅为1。图7中的“与”树可以通过将输入数未使用的任何位值701设置为1来对长度小于6位的输入进行操作。
应理解,为将输入二进制整数x表示为m位二进制整数x′的行的总和,不需要物理地对输入二进制整数的位进行重新排序。被配置成对x′的行进行操作的全加器可以在逻辑上将x的位解释成别表示为m位二进制整数x′的行的总和,并且以此处理这些位,而不需要对x进行任何物理重新配置(例如,不需要实际上在硬件中将x分成m位的行)。这对于本文所述的全加器元素的输入和输出值通常是正确的:任何二进制值可以以任何形式物理显示;本文的教导应理解为解释全加器的逻辑运算,并不旨在限制用于存储、高速缓存或以其他方式表示的二进制值的可能二进制值物理表示(例如,二进制电路的寄存器或存储器)。
全加器为在二进制逻辑中计算y=x mod(2m-1)提供了低延迟和面积有效的解决方案。因此,使用全加器905来执行图9中的二进制逻辑电路900中x[j,k]mod(2n±1)形式的模运算是有利的。
在一些实施方式中,可以在片逻辑510中提供多个全加器905,以使存在用于要执行的每个不同模运算的全加器。这样使得能够在片逻辑中至少部分并行地执行模运算。由于通常会有一些重复的模运算,因此有利的是在设计时将二进制逻辑电路配置为包括用于每个不同模运算的共享全加器,并在全加器树905中所需的点处利用这些全加器的输出。方法仍然允许并行执行模运算,但是避免了逻辑的重复,从而节省了芯片面积。全加器树被配置成根据方程式7和8或9和10来对由全加器执行的模运算的输出进行组合,以形成输出513的位片。
在附图中未示出的其他实施方式中,可以在片逻辑510中提供单个全加器,以按顺序执行所需的模运算,并逐片生成输出div513的位片。在这样的实施方式中,片逻辑可以包括状态逻辑,以将模运算结果处理成输出513的位片,并使全加器按顺序接收输入x的正确位选择。
可以对全加器树905的结构进行优化,以最小化关键路径上的延迟和/或最小化电路消耗的芯片面积。这可以通过例如适当地选择全加器的数量和互连来实现,以便控制各种因素,例如树905等全加器的并行和共享程度。对于独热编码示例,全加器树可以被配置成具有相对于其输入数量呈对数或线性的深度,或介于这两者之间的深度。
使用全加器的进一步优势在于:可以在不同模计算之间共享许多全加器级(参见图3中的301-303)。这使得能够在常规树结构上实现芯片面积消耗的实质性改进。例如,对于logr次序深度的全加器树而言,不需要二次数的全加器级,而是只需要rlogr次序的全加器级(每个全加器将m位的3行缩减成m位的2行)。这种树结构可用于最小化关键延迟。并且,对于r次序深度的全加器树,仅需要r次序的全加器级。该树结构可用于最小化芯片面积消耗。
每个全加器行可以与逻辑树中的每个其他全加器行相同。全加器行中的每个全加器可以与该行中的其他全加器完全相同,但对其进位位回绕到最低有效输出的最高有效位进行操作的全加器除外。
线性深度的全加器逻辑树趋于较小,但可能受到比对数电路设计更高的延迟。逻辑树可能具有深度介于线性与对数深度树之间的混合结构。
全加器的缩减单元可以如下布置在具有线性次序深度的树中。提供缩减单元以将x的相关位部分的最高有效3个n位行缩减成2个n位行(进位位以上述方式回绕)。然后可以将x行的该位部分中的下一个最高有效n位与这2个n位行相组合以产生2个新的n位行。然后将这两行与x的该位部分的下一个最高有效n位组相合,并且依此类推,直到最低有效行进入产生最后2个n位行的全加器。每个n位行的总和等于配置全加器执行的x[j,k]mod(2n-1)形式的模运算结果。
因此,对于r行,需要(r-2)*n个全加器来产生所有所需的模值,以便计算div的所有片。(r-2)*n个全加器移除(r-2)*n位,将输入的初始r*n位(r个n位行)缩减成2个n位行。全加器的这种布置类似于“行波进位加法器”中使用的进位树。
具有log(r)次序深度的全加器的缩减单元的可能逻辑布置如图13所示(注意,作为物理电路,缩减单元不需要与如图13所示的相同,因为如下所述,一些缩减单元可以在全加器之间共享)。这种加法器布置的优势在于,它们可以在树的每一级别中缩减更多数量的行,并且因此表现出更大的并行化。应理解,图13的原理可以扩展到更多数量的行。
图13示出了x的输入位部分的对数深度的示例性全加器,其范围从位部分长度分为11行时的情况到位部分长度分为只需要单个缩减级的仅三行时的简单情况(在图中标记为“3”)。图13所示的每个缩减是与上述方程式7中的不同i值以及相应地来自输入x的不同位选择相关的全加器。
每个全加器在图中标记成输入位部分中n位行的数目。因此,全加器的每个输入根据方程式7而相差n位。图中的每个节点表示n位行,其中行的垂直表示的顶部是承载最高有效位的行,并且底部是承载最低有效位的行。可以首先对最高有效行进行缩减。图13中的每个全加器示例性示出了由缩减单元缩减成2行的3行组。长度为包括1或2行的x的位部分不需要进行缩减,如图13所示。
在图13中,首先对包括更多有效位的更多行进行缩减,直到行数缩减成2。在每个缩减级中,当行数不是3的整数倍时,一个或多个最低有效行被忽略。可能存在具有相同深度的其他缩减单元布置(例如从包括最低有效位的行开始)。
模运算x[j,k]mod(2n-1)的结果是全加器的输出之和,全加器各自被配置成对于方程式7中的给定i来缩减x的位选择。换言之,如果最长位选择的长度为r,则将从长度r缩减成1的位选择的缩减相加在一起以给出模运算的输出。例如,如果n=2,并且来自x的最长位选择是22位,则要在全加器处缩减的最大行数是11,并且可以通过将图13所示的11个全加器的输出相加来计算模运算的输出。
属于不同全加器的许多缩减单元可以共享,产生所有必需的模信号以计算除法片所需的缩减单元的总数为r*log(r)次序。图13中以阴影方式示出了由于对x的相同输入位集合操作而可以在不同全加器之间共享的缩减单元。在此示例中,如果在二进制逻辑电路的设计中,全加器被配置成在全加器之间共享缩减单元,则图中所示的45个缩减单元的功能实际上可以仅由18个缩减单元执行。
根据本文所述用于将除法运算缩减成一组模计算的原理来执行除法的全加器树方法可以进一步扩展到以下形式的除法:
对于整数p,r和奇整数q(与以上使用的p,q,r无关)。这是因为将存在整数a和b,其中:
a*q=2b-1
使得:
其中z=(a*p)*x+(a*r)。因此,在上述方程式7和8或9和10中用z替代x并且用b替代n能够将更复杂的除法类似地缩减成一组模运算,从而受益于速度和芯片面积消耗的类似改进。与常规乘法-加法方案相比,普遍情况下采用本文所述原理对节省芯片面积特别有用,常规方案往往产生具有过多重复逻辑运算的阵列。
应理解,全加器树方法可以扩展到d=2n+1形式的除数,以及对有符号输入x的除法运算。
在输入x有符号时的d=2n-1情况下,仅考虑最高有效位是否有符号即可。这可以通过计算(-2w-1mod 2n-1)=2n-1-(2w-1 mod 2n-1)=2n-2(w-1)mod n-1而不是(2w-1mod 2n-1)=2(w-1)mod n来实现。其中-2w-1是符号位的值,它是有符号输入x中的最高有效位。这相当于将符号位从左附加到最高有效n位行(例如,如果符号位为0,则用0填充n位行中的剩余有效位;如果符号位为1,则用1填充剩余有效位),并且在对最高有效行的群进行缩减操作之后,将该缩减的输出递减1以形成经修改的输出,以用于后续的缩减级。该递减与无符号情况相比增加了延迟/面积,但是是一种处理有符号的情况的有效方式并且即使在wmod n=0的情况下,也不需要异常逻辑。该方法确保适当的符号位提供成输出div的最高有效位。
每行以符号位递减可以递延到模片或div片计算级。该方法可能引入必须为每个片执行递减的开销,因此片逻辑可能变得更加复杂。但是可以潜在地改善片逻辑的定时特性,因为减量可以与计算每个div片所需的(一个或多个)加法合并。
图14至16示出了根据本文所述的原理,与通过合成软件生成的常规架构相比,被配置成计算比率div=x/(2n-1)的二进制逻辑电路的面积与延迟的图。从图中可以看出,所提出的二进制逻辑电路在速度和面积上比常规电路方面有实质改进。
对于w=64和d=3情况的无符号x,图14将常规电路(红线)与根据本文所述独热编码配置的二进制电路进行比较,其中二进制电路的速度(绿线;对数深度逻辑树)和面积(蓝线;线性深度逻辑树)已优化。
对于w=64和d=255情况的无符号x,图15针对常规电路(红线)和根据方程式7和8被配置成以逐片方式估计比率、但使用常规值的二进制编码而不是以上示例中的独热编码的二进制电路,比较了这两者的面积与延迟。在该图中,绿线涉及具有对数深度逻辑树形式的组合逻辑的二进制电路,因此针对速度进行了优化,并且蓝线涉及具有线性深度逻辑树形式的组合逻辑的二进制电路,因此针对面积进行了优化。
对于w=48和d=21的情况的无符号x,图16针对常规电路(红线)与根据本文所述的全加器示例配置的二进制电路(绿线),对这两者的面积/延迟进行比较。
d=2n+1情况
现在将针对情况d=2n+1说明上文参考图9和10的全加器缩减的变型,其中x是无符号m位整数x[m-1∶0],对其执行除以d=2n+1的RNI除法,以产生无符号整数和模modulo[n:0]=x mod(2n+1)。
为简化以下说明,m被布置成n的倍数,其中m=t*n和t>2。因此这可以通过以适当方式在x的左侧附加“0”来实现。应理解,在实践中,二进制逻辑电路不需要附加这些零,并且可以被配置成以任何适当方式处理不同长度的位串。可以从下文所述更一般情况中更直接地推导出t=1,2的情况。
可以采用以下方法来在片逻辑510中执行除以d=2n+1的除法。应注意,下列值是逻辑值,并且不论是值本身还是值的所述布置均无需物理存在于适当适配的全加器树的全加器中。
原理是计算i=0,..,t-1的以下形式的所有值:
partial_mod(m-1,i*n)=x[m-1:1*n]mod(2n+1)
这些值表示对x的一部分执行的模计算的输出,并且可以对其进行组合以形成输出div和模值。这些值可以在二进制逻辑电路的片逻辑510的全加器树905中的一个或多个全加器组中计算。每个全加器可以是例如上文对于图1和图2所述的全加器100或200。应注意,对于i=0,partial_mod(m-1,0)=modulo[n:0]。
对于i=t-1的情况:
partial_mod(m-1∶(t-1)*n)=x[m-1∶(t-1)*n]
因为
x[m-1:(t-1)*n]∈[0,2n-1]
因此
x[m-1:(t-1)*n]=x[m-1:(t-1)*n]mod(2n+1)(简单地)。
对于i=t-2的情况:
减法、模2n+1等于partial_mod(m-1:(t-2)*n)。减法值可以是[-2n+1,2n-1]范围内的任意值。如果减法为0或正,则:
x[(t-1)*n-1:(t-2)*n]-x[m-1:(t-1)*n]=partial_mod(m-1:(t-2)*n)。
如果减法为负,则:
x[(t-1)*n-1:(t-2)*n]-x[m-1:(t-1)*n]+(2n+1)=partial_mod(m-1:(t-2)*n)
x[(t-1)*n-1:(t-2)*n]-x[m-1:(t-1)*n]和x[(t-1)*n-1:(t-2)*n]-x[m-1:(t-1)*n]+(2n+1)可以有利地根据上文参照图2所述的复合加法器的原理同时计算。但是,将根据x[(t-1)*n-1:(t-2)*n]-x[m-1:(t-1)*n]的符号而不是进位位207的值在MUX 206中选择所需值。
对于0≤i<(t-2):
可以使用全加器树905有效地进行这些计算,该全加器树被配置成在独立的“有符号”全加器处将x的位的行缩减成2个n位行。全加器的配置和“符号”如下所述。
以类似于图10所示方式的方式,x被分成t个相邻n位的群:
x[m-1:(t-1)*n],x[(t-1)*n-1:(t-2)*n],..,x[2*n-1:n],x[n-1:0]
这位的t个群中的每一者在逻辑上表示全加器树905的全加器中的行。每个全加器接收三行以缩减成两行。在本示例中,行按照每行中包含的位的有效顺序排列-例如,可以将包括最高有效位值的行布置在顶部,然后是包括第二最高有效位的行,以此类推,直到包括最低有效位的行。这是与针对图10所述布置相同的布置。也可采用其他布置。
本文所述的“有符号”全加器对3个相邻行进行操作,以便按照图10所示的一般方式将这些行缩减成2行,但是根据以下规则进行了修改:
1.x的t个行分配有交替符号(当行按照x中的位有效性顺序排列时)。
2.如果全加器对包括2个正行和1个负行的3行的群进行操作,则第n列的进位位(例如图10中的1009)在逻辑上求反并回绕到第0列,以便产生其总和减一与3行的原始总和相同的正行和负行(考虑符号和模(2n+1))。
3.如果全加器对包括1个正行和2个负行的3行的群进行操作,则第n列的进位位(例如图10中的1009)在逻辑上求反并回绕到第0列,以便产生其总和加一与3行的原始总和相同的正行和负行(考虑符号和模(2n+1))。
4.对于t-i为偶数的每个partial_mod计算,当通过两个输出行的值计算模值时,将两个输出行的符号进行交换。这不需要额外的逻辑,因为对于已知t的给定设计,输出行的符号可以在电路内适当解释。
5.对于t-i为奇数的每个partial_mod计算,在计算模值时,对两个输出行添加-1校正。
有利的是在对位选择x[m-1:i*n]执行的每个partial_mod计算上固定x的最高有效行的符号。这直接地允许全加器输出被共享,因为对于不同的partial_mod计算执行相同的缩减。
通过使用n个独立的“有符号”全加器可将表示x的交替符号的行的集合缩减成不同符号的2行(最后一对行总是正行和负行)。需要对全加器树905的逻辑进行简单修改以执行对每个进位位的逻辑求反。
由全加器估计的交替总和模(2n+1)等于partial_mod(m-1:i*n)。
由于每个“有符号”全加器对位列进行操作(参见图10),全加器取一个符号的2位以及另一个符号的1位,并产生与输入的2位相同符号的进位位,以及另一个符号的总和位。这可以表达如下:使1位输入a,b具有相同的符号,并且c具有相反的符号。“有符号”全加器执行与上述无符号缩减单元相同的逻辑:
sum=a XOR b XOR c
但是进位位是由下式给出的:
carry=(a AND b)OR(b AND not(c))OR(not(c)AND a)
这与无符号全加器的区别在于输入c在进位输出中被逻辑地求反。
因此,可以使用具有用于将n位列的值相加的逻辑的全加器将具有符号+,-,+的3行转换成符号+,-的位的行对,其中第n列具有正进位位并且第0列中的正行中存在间隙,或者将带有符号-,+,-的3行转换成有符号-,+的位的行对,其中第n列具有负进位,并且第0列中的负行中存在间隙。
“有符号”全加器树的结构可以与d=2n-1情况相同,其中可以包括具有更多节点的对数深度树或具有更少节点的线性深度树。例如,图13中所示对d=2n-1情况(其中x具有11行)的对数深度树结构也可以用于显示如何为0≤i<(t-2)中的每个值共享“有符号”全加器的输出。这是因为当我们以所述方式,即我们解释输入和输出的方式向行中引入符号时,逻辑不会改变。这可以通过将图13所示的点替换成每个行图的交替的+和-,并且根据上述规则将它们继续到最终的2行输出。
可以以下述方式使用0≤i<t的partial_mod(m-1:i*n)值来计算div[(i+1)*n-1:i*n]的(t-1)个n位除法片:
可以通过执行以下sum(i)值(其中“&”符号表示二进制数字的级联),然后将结果右移n来计算最终三元语句:
sum(i)=(partial_mod(m-1:(i+1)*n)&(x[(i+1)*n-1:i*n]))
-partial_mod(m-1:(i+1)*n)
=(2n-1)*partial_mod(m-1:(i+1)*n)+x[(i+1)*n-1:i*n]
这是因为
(x[(i+1)*n-1:i*n]-partial_mod(m-1:(i+1)*n))∈[-2n,2n-1]可以由有符号(n+1)位数表示。符号位在第n列(测量最低有效值为0),因此如果其值为负,则符号位将导致顶部n位中partial_mod(m-1:(i+1)*n)减量,如果为正或零,则符号位将对顶部n位无影响。因此,右移底部的n位会留下partial_mod(m-1:(i+1)*n)-1或partial_mod(m-1:(i+1)*n)-1,具体取决于所需的(x[(i+1)*n-1:i*n]-partial_mod(m-1:(i+1)*n))的符号。
使a[n-1:0]是最后的“有符号”全加器行缩减的正行,并且b[n-1:0]为负行。可得出:
由于(a-b)∈[-2n+1,2n-1]和(a-b-1)∈[-2n,2n-2]可以用(n+1)位有符号数字表示,因此可以在给定t和i常数值的情况下,采用与上述参考图2所述相似的复合加法器设置来通过a[n-1:0]和b[n-1:0]计算partial_mod(m-1:i*n)。
通过这种方式,并且通过为在全加器中引入行的符号进行有限修改、执行进位位的逻辑求反以及形成上述sum,除以2n+1可以在本文参照附图所述的二进制逻辑电路的片逻辑中执行。
现在将给出可以由包括复合全加器树的二进制逻辑电路执行的计算的具体示例,复合全加器树被配置成以上述方式执行除以d=23+1=9。在此示例中,x是无符号16位整数(x[15:0]),并且二进制逻辑电路的输出是无符号整数和modulo[3:0]=x mod(23+1)。
使输入为x=″1001010100110111″=38199。然后我们预期输出为div[12:0]=″1000010010100″=4244和modulo[3:0]=″0011″=3。
x[17:15]=″001″
x[14:12]=″001″
x[11∶9]=″010″
x[8:6]=″100″
x[5:3]=″110″
x[2:0]=″111″
请注意,被配置成对长度为16的输入进行操作的二进制逻辑电路可以附加或可以不附加2个零,就像这里所做的那样以简化示例。通常,如二进制逻辑电路设计领域的技术人员将理解的那样,硬件电路将不设计成需要额外输入来最小化电路面积和复杂性。
首先,当i=5 or 4时,不需要全加器,因为不需要进行缩减。
i=5情况是x的前三位:
partial_mod(17:15)=x[17:15]=″001″
由于模23+1的值通常在[0,8]的范围内,因此为简化起见,为了与其他partial_mod值一致,该值可表示为4位值,例如“0001”。
可以在片逻辑处提供加法逻辑以执行i=4情况:
partial_mod(17:12)=(x[14:12]-x[17:15])mod(23+1)
=(″001″-″001″)mod(23+1)
由于“001”-“001”≥0,则不需要对23+1进行校正加法,因此partial_mod(17:12)=″001″-″001″=″0000″。
“有符号”全加器可用于估计i=3,2,1,0的partial_mod:
当i=3时:
partial_mod(17:9)=(-″010″+″101″-1)≥0?(-″010″+″101″-1)
(-″010″+″101″-1+″1001″)=″0010″
其中作为将3行缩减成2行的全加器缩减可表达成:
这需要一个全加器和一个级。请注意加上-1,因为t-i是奇数。另请注意,最高有效行分配有正号,并且在后续的i中该行将仍然采用此符号,以便允许后续的partial_mod计算使用被布置成计算较低i的partial_mod的全加器的输出。
当i=2时:
这需要两个全加器和两个级。每个箭头表示由有符号行的全加器进行的缩减。不需要缩减的行将作为余数行传递到下一个级。应注意,由于t-i是偶数,因此两个输出行的符号将交换。
当i=1时:
这需要三个全加器和三个级。请注意加上-1,因为t-i是奇数。
当i=0时:
partial_mod(17:0)=(-″010″+″101″)≥0?(-″010″+″101″)
:(-″010″+″101″+″1001″)=″0011″=3=modulo[3:0]
与本示例输入的预期相符。
这需要四个全加器和三个级。应注意,由于t-i是偶数,因此两个输出行的符号将交换。
上述全加器的总数为10。但是只有6个唯一输入行集合,因此可以配置全加器树,其中包括全加器以在全加器之间共享结果,从而只需要6个全加器。这是有利的,因为可以最小化电路面积和复杂度。
由于t=6是偶数,因此当i是偶数时,t-i也是偶数。因此,i=2和4情况的两个输出行应将其符号进行交换(以上规则4)。i=1和3情况的输出行在计算以下partial_mod值时需要减1校正(以上规则5)。
现在可以在给定partial_mod的这些值的情况下来计算(t-1)=5的div片:
将所有这些级联在一起可得出:
div[14:12]&div[11:9]&div[8:6]&div[5:3]&div[2:0]=″001000010010100″
由于输入x的长度是16,因此除以23+1之后,div输出的长度将为12。因此,可以删除该级联的前两位,其中由于一开始就将两个零附加到x的顶部以使其长度可被3除尽,因此这前两位保证为零。请注意,一开始将零附加到x是出于便于解释的目的,并且优选的是,二进制逻辑电路在其出现时确实浪费额外的逻辑。
通过这种方式,最终可得出:
div[12∶0]=″1000010010100″=4244
与本示例输入的预期相符。
通常,集成电路最初通过使用产生预期集成电路的逻辑抽象的软件(例如,Synopsys(R)Design Compiler)来进行设计。这种抽象通常称为寄存器传送级或RTL。一旦已经定义了集成电路的逻辑操作,则可以由合成软件(例如,Synopsys(R)IC Compiler)来使用逻辑抽象来创建物理集成电路的表示。这样的表示可以在高级硬件描述语言例如Verilog或VHDL中定义,并且最终根据集成电路的门级描述来定义。如果需要用于计算除法运算的逻辑,设计软件可以被配置成使用根据本文所述原理配置的逻辑。这可以通过例如引入到集成电路设计寄存器传送级(RTL)代码中来实现,该代码定义根据本文所述和附图中所示的任何示例的二进制逻辑电路。
图中所示的二进制逻辑电路图示成包括多个功能块。这仅是示意图,并不旨在定义这些实体的不同逻辑元件之间的严格划分。可以以任何合适方式提供每个功能块。应理解,本文所述由二进制逻辑电路的部件形成的中间值不需要在任何位置处由二进制逻辑电路物理地产生,并且可以仅表示便于描述其输入和输出之间由二进制逻辑电路执行的处理的逻辑值。
通常,可以在软件、固件、硬件(例如,固定逻辑电路)或其任何组合中实现上述功能、方法、技术或部件中的任一者。本文中可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来表示软件、固件、硬件或其任何组合。在软件实施方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示当在处理器上执行时执行指定任务的程序代码。本文所述算法和方法可以通过由执行代码的一个或多个处理器执行使该(一个或多个)处理器执行算法/方法的代码来实现。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器访问的其他存储装置。
本文所用术语“计算机程序代码”和“计算机可读指令”是指用于处理器的任何类型的可执行代码,包括用机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节码、定义集成电路的代码(例如硬件描述语言或连线表)以及以诸如C、Java或OpenCL等之类的编程语言代码表达的代码。可执行代码可以是例如任何类型的软件、固件、脚本、模块或库,其在被适当地执行、处理、解释、编译、在虚拟机或其他软件环境下执行时,使计算机系统中支持可执行指令的处理器执行代码指定的任务。
处理器、计算机或计算机系统可以是具有使其能够执行指令的处理能力的任何类型的装置、机器或专用电路或其集合或其一部分。处理器可以是任何类型的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
它还旨在包括定义本文所述硬件的配置的软件,例如用于设计集成电路或用于配置可编程芯片以执行预期功能的HDL(硬件描述语言)软件。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,其中当在集成电路制造系统中处理计算机可读程度代码时,计算机可读程序代码将该系统配置为制造被配置成执行本文所述任何方法的二进制逻辑电路,或者制造包括本文所述任何设备的二进制逻辑电路。集成电路定义数据集可以是例如集成电路描述。
集成电路定义数据集可以采用计算机代码的形式,例如连线表、用于配置可编程芯片的代码、定义任何级别的集成电路的硬件描述语言,包括寄存器传送级(RTL)代码,诸如Verilog或VHDL等高级电路表示,以及诸如OASIS(RTM)和GDSII等低级电路表示。在逻辑上定义集成电路(例如RTL)的较高级别表示可以在被配置用于在软件环境的上下文中生成集成电路的制造定义的计算机系统中进行处理,其中包括电路元件和规则的定义,以用于将这些元素组合在一起以产生由表示定义的集成电路的制造定义。通常对于计算机系统上执行以定义机器的软件,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便被配置用于生成集成电路的制造定义的计算机系统执行定义集成电路的代码,从而产生该集成电路的制造定义。
现在将参照图11描述在集成电路制造系统上处理集成电路定义数据集以便将系统配置为制造二进制逻辑电路的示例。
图11示出了集成电路(IC)制造系统1102的示例,其包括布局处理系统1104和集成电路生成系统1106。IC制造系统1102被配置成接收IC定义数据集(例如,定义本文中任何示例中所述的二进制逻辑电路),处理IC定义数据集,并根据IC定义数据集生成IC(例如,实施为本文中任何示例所述的二进制逻辑电路)。处理IC定义数据集可将IC制造系统1102配置为制造实施本文任何示例中二进制逻辑电路的集成电路。
布局处理系统1104被配置成接收和处理IC定义数据集以确定电路布局。通过IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL码以确定要生成的电路的门级表示,例如,在逻辑部件方面(例如“与非”(NAND)、“或非”(NOR)、“与”(AND)、“或”(OR)、MUX和FLIP-FLOP部件)。可以通过确定逻辑部件的位置信息来从电路的门级表示确定电路布局。这可以自动完成或者由用户参与执行,以优化电路布局。当布局处理系统1104已经确定电路布局时,它可以将电路布局定义输出到IC生成系统1106。电路布局定义可以是例如电路布局描述。
如本领域已知,IC生成系统1106根据电路布局定义生成IC。例如,IC生成系统1106可以实现用于生成IC的半导体器件制造工艺,其可以涉及光刻和化学处理步骤的多步骤序列,在序列期间,在由半导体材料制成的晶片上逐渐地形成电子电路。电路布局定义可以采用可用于根据电路定义产生IC的光刻过程中的掩模的形式。或者,提供给IC生成系统1106的电路布局定义可以是计算机可读代码的形式,其可供IC生成系统1106使用以形成用于生成IC的合适掩模。
由IC制造系统1102执行的不同过程可以全部在一个位置,例如,由一方实现。或者,IC制造系统1102可以是分布式系统,以使一些过程可以在不同的位置执行,并且可以由不同方执行。例如,以下几级中的一部分可以在不同位置和/或由不同方执行:(i)合成表示IC定义数据集的RTL代码以形成要生成电路的门级表示,(ii)基于该门级表示生成电路布局,(iii)根据电路布局形成掩模,以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统中处理集成电路定义数据集可以将系统配置成制造二进制逻辑电路,而不对IC定义数据集进行处理,以便确定电路布局。例如,集成电路定义数据集可以定义诸如FPGA等可重构处理器的配置,并且该数据集的处理可以将IC制造系统配置成生成具有该定义配置的可重构处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成本文所述的装置。例如,通过由集成电路制造定义数据集以上文相对于图11所述方式对集成电路制造系统进行配置,可以制造本文所述的装置。
在一些示例中,集成电路定义数据集可以包括在数据集中定义的硬件上运行或者与数据集中定义的硬件相组合的软件。在图11所示的示例中,IC生成系统还可以通过集成电路定义数据集被配置为在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到该集成电路上或以其他方式向集成电路提供程序代码以与集成电路结合使用。
与已知实施方式相比,本申请中提出的在装置、设备、模块和/或系统中实施的概念(以及本文中实施的方法)可实现性能改进。性能改进可以包括以下项中的一者或多者:计算性能提高、等待时间减少、吞吐量增大和/或功率消耗降低。在制造这些装置、设备、模块和系统(例如,在集成电路中)期间,可以对物理实施方式进行性能改进,从而改进制造方法。例如,可以针对布局区域进行性能改进,从而与已知实施方式的性能相匹配,但是使用更少的硅。这可以例如通过以串行方式重用功能块或者在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,可以通过在本申请中所述提出改进装置、设备、模块和系统的物理实施方式(例如,硅面积减小)的概念来实现性能的改进。这可以例如通过在预定面积预算内制造模块的多个实例来完成。
申请人特此公开了本文所述的每个单独特征以及两个或更多个这些特征的任何组合,使得能够根据本领域技术人员的公知知识,基于本说明书整体来执行这些特征或组合,无论这些特征或特征组合是否解决了本文公开的任何问题。鉴于上述描述,本领域技术人员可显而易见地了解可以在本发明范围内进行的各种修改。
Claims (20)
1.一种用于根据舍入方案确定比率x/d的二进制逻辑电路,其中,x是位长度为w的变量整数输入,并且d是2n±1形式的固定正整数,所述二进制逻辑电路被配置成将所述比率形成为多个位片,所述位片共同表示所述比率,其中所述二进制逻辑电路被配置成根据用于计算所述输入x的相应位选择的mod(2n±1)的第一模运算,以及根据对进位位的检查来生成每个位片,其中所述二进制逻辑电路被配置成响应于所述检查,选择性地将进位位与针对所述输入x的相应位选择的所述第一模运算的结果相加。
3.根据权利要求2所述的二进制逻辑电路,其中,所述二进制逻辑电路被配置成通过以下方式针对每个位片i执行所述对进位位的检查:
在d=2n-1的情况下,在以下情况时返回进位位1以与所述第一模运算的结果相组合:
x[w-1:n*(i+1)]mod(2n-1)+x[n*(i+1)-1:n*i]≥2n-1
或者
在d=2n+1的情况下,在以下情况时返回进位位-1以与所述第一模运算的结果相组合:
-x[w-1:n*(i+1)]mod(2n+1)+x[n*(i+1)-1:n*i]≥0。
4.根据权利要求1所述的二进制逻辑电路,其中,所述二进制逻辑电路包括多个模逻辑单元,每个模逻辑单元被配置成对所述输入x的不同相应位选择执行第一模运算,以便生成模输出集合。
5.根据权利要求4所述的二进制逻辑电路,其中,所述二进制逻辑电路包括组合逻辑,所述组合逻辑被配置成将所述模输出集合相组合,以便生成所述比率的所述位片。
6.根据权利要求4所述的二进制逻辑电路,其中,所述模输出是d位独热编码,并且所述二进制逻辑电路包括加法器树,所述加法器树被配置成通过将对来自x的较短位选择进行的第一模运算的结果相组合以形成对来自x的较长位选择进行的第一模运算的结果来确定所述第一模运算中的一个或多个的结果,所述二进制逻辑电路不包括用于估计对来自x的较长位选择进行的那些第一模运算的逻辑。
7.根据权利要求1所述的二进制逻辑电路,其中,在d=2n-1的情况下,所述二进制逻辑电路包括多个全加器,每个全加器被配置成针对指定位片i执行所述第一模运算x[w-1:n*(i+1)]mod(2n-1),并且每个全加器包括:
缩减逻辑,所述缩减逻辑被配置成将所述输入x的所述相应位选择缩减成第一n位整数β和第二n位整数γ的总和;以及
加法逻辑,所述加法逻辑被配置成计算加法输出,所述加法输出由被右移n的以下总和的n个最低有效位表示:
长度为2n的第一二进制值,其中n个最高有效位和n个最低有效位各自为由β表示的位值串;
长度为2n的第二二进制值,其中n个最高有效位和n个最低有效位各自为由γ表示的位值串;以及
二进制值1。
8.根据权利要求7所述的二进制逻辑电路,其中,所述缩减逻辑被配置成将x的所述位选择解释成n位行x′的总和,每行表示x的所述位选择的n个连续位,使得x的所述位选择的每个位仅贡献一行并且x的所述位中的全部均被分配到行,并且所述缩减逻辑被配置成在一系列缩减步骤中缩减所述n位行x′的所述总和,以便生成所述第一n位整数β和所述第二n位整数γ的所述总和,其中每个缩减步骤包括将x′的多个所述n位行相加,从而生成一个或多个较少n位行的总和。
9.根据权利要求8所述的二进制逻辑电路,其中,所述缩减逻辑被配置成在生成二进制位置n+1处的行的进位位的缩减步骤中,将所述进位位用作所述行的最低有效位。
10.根据权利要求8所述的二进制逻辑电路,其中,所述缩减逻辑包括被配置成在每个缩减步骤处对x′的所述行进行并行操作的多个缩减单元以及串联耦合在一起的多个缩减级,每个缩减级包括被配置成并行操作以执行缩减步骤的所述缩减单元中的一个或多个。
12.根据权利要求10所述的二进制逻辑电路,其中,所述缩减逻辑被配置成迭代地对x′的所述行操作所述一个或多个缩减单元,直到留下表示n位整数β和γ的两行。
13.根据权利要求7所述的二进制逻辑电路,还包括:
异常逻辑,所述异常逻辑被配置成形成指示x的所述位选择的所述位中的全部是否均为1的确定结果;以及
输出逻辑,所述输出逻辑被配置成根据从所述异常逻辑接收的所述确定结果对所述加法输出进行操作;
其中,所述输出逻辑被配置成在所述确定结果指示x的所述位选择的所述位中的全部均为1时执行所述加法输出与所述二进制值1的异或(XOR)运算。
14.根据权利要求13所述的二进制逻辑电路,其中,所述异常逻辑被配置成在x的所述位选择的所述位中的全部均为1时形成确定结果1,并且在并非x的所述位选择的所述位中的全部均为1时形成确定结果0,并且所述输出逻辑包括异或(XOR)门,所述异或(XOR)门被配置成接收所述加法输出和确定结果作为其输入,以便形成所述第一模运算的结果作为其输出。
15.根据权利要求7所述的二进制逻辑电路,其中,所述加法逻辑包括复合加法器,所述复合加法器被配置成同时形成第一总和β+γ和第二总和β+γ+1,并且将所述总和提供给多路复用器,所述多路复用器被配置成根据所述第二总和是否生成进位位来在所述第一总和与所述第二总和之间进行选择;如果生成进位位,则所述多路复用器的加法输出是所述第二总和,而如果未生成进位位,则所述多路复用器的加法输出是所述第一总和。
16.根据权利要求7所述的二进制逻辑电路,其中,所述加法逻辑包括加法器,所述加法器被配置成计算所述第一二进制值和所述第二二进制值和1的总和,并且所述加法逻辑被配置成提供被右移n的所述总和的n个最低有效位作为所述加法输出。
17.根据权利要求1所述的二进制逻辑电路,其中,在d=2n+1的情况下,所述二进制逻辑电路包括一个或多个全加器的群,每个群被配置成针对指定位片i执行所述第一模运算x[m-1:i*n]mod(2n+1),其中群中的每个全加器包括:
缩减逻辑,所述缩减逻辑被配置成将长度为n的三个相邻输入位串的集合缩减到长度为n的两个输出位串的集合,所述位串被分配以交替符号以使所述三个相邻输入位串的集合中的相邻位串具有相反符号,并且取决于分配有正号的包括x的最低有效位的第一位串;
进位逻辑,所述进位逻辑被配置成对由所述缩减逻辑在位置n处生成的进位位进行逻辑求反,并且将所述进位位包括在所述两个输出位串的集合中的空位置0处;以及
加法逻辑,所述加法逻辑被配置成:
在所述三个相邻输入位串的集合包括两个正位串和一个负位串时将二进制负1与所述输出位串相加;以及
在所述三个相邻输入位串的集合包括一个正位串和两个负位串时将二进制正1与所述输出位串相加。
18.一种用于根据舍入方案来确定二进制逻辑电路中的比率x/d的方法,其中x是位长度为w的变量整数输入,d是2n±1形式的固定正整数,所述方法包括:
通过以下方式形成所述比率的多个位片中的每一者:
执行第一模运算,所述第一模运算用于计算输入x的相应位选择的mod(2n±1);
检查所述第一模运算的进位位;以及
响应于所述检查,选择性地将所述进位位与针对所述输入x的相应位选择的所述第一模运算的结果相加;以及
将所述位片相组合以形成完整的比率。
19.根据权利要求18所述的方法,其中,所述执行第一模运算包括:
将x的所述位选择缩减成第一n位整数β和第二n位整数γ的总和;
至少部分计算以下总和的结果:
长度为2n的第一二进制值,其中n个最高有效位和n个最低有效位各自均为由β表示的位值串;
长度为2n的第二二进制值,其中n个最高有效位和n个最低有效位各自均为由γ表示的位值串;以及
二进制值1;
以及
将被右移n的所述结果的n个最低有效位用作所述第一模运算的结果。
20.一种在其上存储有集成电路的计算机可读描述的计算机可读存储介质,其中当在集成电路制造系统中处理所述计算机可读描述时,使得所述集成电路制造系统制造用于根据舍入方案确定比率x/d的二进制逻辑电路,其中x是位长度为w的变量整数输入,并且d是2n±1形式的固定正整数,所述二进制逻辑电路被配置成将所述比率形成为多个位片,所述位片共同表示所述比率,其中所述二进制逻辑电路被配置成根据用于计算所述输入x的相应位选择的mod(2n±1)的第一模运算,并且根据对进位位的检查来生成每个位片,其中所述二进制逻辑电路被配置成响应于所述检查,选择性地将进位位与针对所述输入x的相应位选择的所述第一模运算的结果相加。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1618286.7 | 2016-10-28 | ||
GB1618286.7A GB2555459B (en) | 2016-10-28 | 2016-10-28 | Division synthesis |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108008932A CN108008932A (zh) | 2018-05-08 |
CN108008932B true CN108008932B (zh) | 2023-06-20 |
Family
ID=57963823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711032975.2A Active CN108008932B (zh) | 2016-10-28 | 2017-10-30 | 除法合成 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10409556B2 (zh) |
EP (1) | EP3316124B1 (zh) |
CN (1) | CN108008932B (zh) |
GB (1) | GB2555459B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2555459B (en) * | 2016-10-28 | 2018-10-31 | Imagination Tech Ltd | Division synthesis |
GB2576536B (en) | 2018-08-22 | 2021-05-05 | Imagination Tech Ltd | Float division by constant integer |
US10951230B1 (en) * | 2020-03-17 | 2021-03-16 | Qualcomm Incorporated | Method and apparatus for ternary mapping |
US20220129320A1 (en) * | 2021-11-05 | 2022-04-28 | Debabrata Mohapatra | Schedule-aware dynamically reconfigurable adder tree architecture for partial sum accumulation in machine learning accelerators |
CN113971015B (zh) * | 2021-11-10 | 2023-09-08 | 哲库科技(北京)有限公司 | Uia2计算电路及其数据处理方法、芯片、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1831754A (zh) * | 2005-11-04 | 2006-09-13 | 北京浦奥得数码技术有限公司 | 一种椭圆曲线密码系统及实现方法 |
CN101571796A (zh) * | 2008-04-28 | 2009-11-04 | 阿尔特拉公司 | 可配置的混合加法器电路 |
CN103180820A (zh) * | 2010-09-03 | 2013-06-26 | 超威半导体公司 | 用于执行浮点除法的方法和装置 |
GB201507893D0 (en) * | 2015-05-08 | 2015-06-24 | Imagination Tech Ltd | Performing constant modulo arithmetic |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB868840A (en) * | 1956-07-10 | 1961-05-25 | Nat Res Dev | Improvements in or relating to circuit arrangements for dividing binary numbers |
US5012439A (en) * | 1986-12-29 | 1991-04-30 | Hughes Aircraft Company | Method and apparatus for performing division |
US20020116679A1 (en) * | 2000-12-15 | 2002-08-22 | Mike Lei | In-band FEC decoder for sonet |
EP1315081B1 (en) * | 2001-11-22 | 2008-05-07 | STMicroelectronics Limited | Circuitry for carrying out at least one of a square root operation and a division operation |
EP1315079A1 (en) * | 2001-11-22 | 2003-05-28 | STMicroelectronics Limited | Circuit for calculation of division and square root with floating point numbers |
US9081608B2 (en) * | 2012-05-19 | 2015-07-14 | Digital System Research Inc. | Residue number arithmetic logic unit |
GB2555459B (en) * | 2016-10-28 | 2018-10-31 | Imagination Tech Ltd | Division synthesis |
-
2016
- 2016-10-28 GB GB1618286.7A patent/GB2555459B/en active Active
-
2017
- 2017-10-27 EP EP17199009.6A patent/EP3316124B1/en active Active
- 2017-10-30 US US15/797,020 patent/US10409556B2/en active Active
- 2017-10-30 CN CN201711032975.2A patent/CN108008932B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1831754A (zh) * | 2005-11-04 | 2006-09-13 | 北京浦奥得数码技术有限公司 | 一种椭圆曲线密码系统及实现方法 |
CN101571796A (zh) * | 2008-04-28 | 2009-11-04 | 阿尔特拉公司 | 可配置的混合加法器电路 |
CN103180820A (zh) * | 2010-09-03 | 2013-06-26 | 超威半导体公司 | 用于执行浮点除法的方法和装置 |
GB201507893D0 (en) * | 2015-05-08 | 2015-06-24 | Imagination Tech Ltd | Performing constant modulo arithmetic |
Non-Patent Citations (3)
Title |
---|
Division techniques for integers of the from 2N 1;Taylor等;《INTERNATIONAL JOURNAL OF ELECTRONICS》;19930501;全文 * |
基于新型脉动阵列的RSA密码处理器;刘强等;《北京大学学报(自然科学版)》;20050520(第03期);全文 * |
直接与亚直接逻辑原理在极高速运算中的应用;罗沛霖等;《前沿科学》;20080628(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
GB201618286D0 (en) | 2016-12-14 |
US20180121166A1 (en) | 2018-05-03 |
EP3316124A1 (en) | 2018-05-02 |
CN108008932A (zh) | 2018-05-08 |
EP3316124B1 (en) | 2019-04-03 |
GB2555459A (en) | 2018-05-02 |
GB2555459B (en) | 2018-10-31 |
US10409556B2 (en) | 2019-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108008932B (zh) | 除法合成 | |
US10528325B2 (en) | Efficient modulo calculation | |
US20230297338A1 (en) | Float Division by Constant Integer | |
US20220365755A1 (en) | Performing constant modulo arithmetic | |
JP4177125B2 (ja) | 演算装置及び演算装置の演算方法 | |
GB2549928A (en) | Sorting numbers in hardware | |
US20220334799A1 (en) | Method of Performing Hardware Efficient Unbiased Rounding of a Number | |
US20230367554A1 (en) | Apparatus, a method of operating modulo k calculation circuitry and a non-transitory computer-readable medium to store computer-readable code for fabrication of an apparatus | |
EP4187368A1 (en) | Truncated array for performing division | |
GB2590865A (en) | Float division by constant integer with output subtraction | |
GB2590866A (en) | Float Division by constant integer using a predetermined number of modulo units | |
JP2023008855A (ja) | オンザフライ変換 | |
JP2023008865A (ja) | デジット漸化選択定数 | |
JP2023008973A (ja) | 平方根処理回路及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |