高基数子集代码乘法器架构的制作方法

文档序号:16428141发布日期:2018-12-28 19:56阅读:179来源:国知局
高基数子集代码乘法器架构的制作方法
本申请是要求于2017年6月20日提交的题为“highradixsubsetcodemultiplierarchitecture”的美国临时专利申请第62/522,546号的优先权的非临时申请,该申请通过引用并入本文。本公开一般地涉及集成电路,诸如现场可编程门阵列(fpga)。更具体地,本公开涉及在集成电路(例如,fpga)上实现的软乘法器逻辑。
背景技术
该部分旨在向读者介绍可以与本公开内容的各个方面有关的领域的各个方面,本公开内容将在下文进行说明和/或要求保护。本论述被认为有助于向读者提供用于促进本公开的各个方面的更佳理解的背景信息。因此,应当理解的是,这些陈述应从这个角度来理解,而不承认为现有技术。机器学习正变为越来越重要的应用领域。例如,机器学习可用在自然语言处理、对象识别、生物信息学和经济性以及其它领域和应用。因此,跨越包括fpga、专用标准产品(assp)、专用集成电路(asic)、中央处理单元(cpu)、图形处理单元(gpu)等在内的不同类型的平台的改进的机器学习实现方式可能是需要的。在机器学习中所涉及的很多计算都是基于推论的,不管平台如何。也即,机器学习中所涉及的系统可基于先前可用数据来进行预测。因此,为了更快且更高效地运行,系统可依赖于许多低精度(即,定点)计算,而不是依赖于较慢的、全精度(即,浮点)计算。因此,更小的、更高效的乘法器已经成为执行机器学习所涉及的运算的一部分。现代的fpga架构可以包含软乘法器,它们是利用大的内部存储器i/o带宽来增加可用乘法器数量的基于存储器的乘法器。然而,不幸的是,软乘法器使用可能非常昂贵。软乘法器会消耗集成电路的很大的面积、功率、路由和/或包装资源,并且因此,它们在用于机器学习应用时并不那么高效。技术实现要素:下文阐述本文公开的一些实施例的概要。应当理解的是,这些方面仅为了向读者提供这些实施例的简要概述而提供,并且这些方面不旨在限制本公开内容的范围。事实上,该公开内容可以涵盖下文没有阐述的各个方面。本实施例涉及用于增强软乘法器实现方式的性能/效率的系统、方法和设备。具体地,提供了一种用于将高booth基数8子集编码映射到单级fpga逻辑的方法。本文提供的技术实现了可以占用集成电路上的更小面积的较小的乘法器。此外,对于高密度电路而言封装可以更好。此外,使用公开的技术,软乘法器可以封装到单级逻辑上,可以利用较小的面积,并且可以具有更低的延迟。此外,这些软乘法器的功耗可以降低,并且可路由性可以得到显著提高。关于本公开内容的各个方面可能存在上文所述的特征的各种细化。另外的特征也可以并入这些各个方面中。这些细化和附加的特征可以单独地或以任何组合存在。例如,下文关于所示实施例中的一个或多个描述的各个特征可以单独地或以任意组合并入本发明的上述方面的任一方面中。再次,上述呈现的简要概述仅意在使读者熟悉本公开内容的实施例的某些方面和背景,而不限制所要求保护的主题。附图说明在阅读下文的具体实施方式并且参考附图时,可以更好地理解本公开内容的各个方面,在附图中:图1是根据实施例的用于实现软乘法器的系统的框图;图2是根据实施例的其中可以实现软乘法器的集成电路的框图;图3是根据实施例的根据公开的技术进行优化的nx3乘法器的框图;图4是根据实施例的示出了根据公开的技术进行优化的nx6乘法器的框图;图5是根据实施例的示出了nx9乘法器的框图;并且图6是根据实施例的示出了添加到乘法器的输出的校正因子的框图。具体实施方式下文将描述一个或多个具体的实施例,为了提供这些实施例的简要描述,在说明书中没有描述实际的实现方式的全部特征。应当意识到,在任何此类实际实现方式的开发中,如在任何工程或设计项目中,可以做出若干实现方式特定的决策来实现开发者的具体目标,例如符合系统相关和商业相关约束,这可能因实现方式而不同。而且,应当意识到,这样的开发努力可能是复杂的和耗时的,但是对于获益于本公开的普通技术人员而言仍是设计、制造和制作的常规工作。如下文进一步详述的,本公开的实施例一般涉及用于增强在集成电路(ic)上实现的软乘法器的电路。特别地,在一些实施例中,高booth基数8子集编码可以映射到单级fpga逻辑,这可以使得软乘法器尺寸减小和/或其它功效。回顾之前所述,图1示出了利用软乘法器逻辑来实现机器实现程序的系统10的框图。设计者可能希望在集成电路12(ic,诸如现场可编程门阵列(fpga))上实现功能。设计者可以规定实现高级程序,诸如opencl程序,这可以使得设计者能够更高效且容易地提供实现用于ic12的一组可编程逻辑的编程指令,而无需低级计算机程序设计语言(例如,verilog或vhdl)的具体知识。例如,因为opencl非常类似于其它高级程序设计语言,诸如c++,所以熟悉这些程序设计语言的可编程逻辑的设计者可以比需要学习不熟悉的低级程序设计语言以在ic上实现新功能的设计者具有减少的学习曲线。设计者可以利用诸如alteratm的quartus版本的设计软件14来实现它们的高级设计。设计软件14可以使用编译器16将高级程序转换成低级程序。编译器16可以提供将表示高级程序的机器可读指令提供给主机18和ic12。例如,ic12可以接收描述应存储在ic中的硬件实现方式的一个或多个内核程序20。主机18可以接收可以由内核程序20实现的主机程序22。为了实现主机程序22,主机18可以经由通信链路24将指令从主机程序22传送到ic12,通信链路24可以是例如直接存储器存取(dma)通信或快速外围组件互连(pcie)通信。在一些实施例中,内核程序20和主机18可以通过乘法器26实现乘法,乘法器26可以存储在ic12上且由主机18控制。乘法器26可以实现为软乘法器,或者可利用ic12内的大的内部存储器i/o带宽来增加可用乘法器数量的基于存储器的乘法器。现在转到ic12的更详细的说明,图2示出了ic设备12,其可以是可编程逻辑器件,诸如现场可编程门阵列(fpga)40。为了该示例的目的,设备40被称为fpga,但是应当理解,该设备可以任意类型的可编程逻辑器件(例如,专用集成电路和/或专用标准产品)。如图所示,fpga40可以具有输入/输出电路42,用于驱动信号离开设备40以及用于经由输入/输出引脚44从其它设备接收信号。互连资源46(诸如,全局和局部垂直和水平导线和总线)可以用来在设备40上对信号进行路由。另外,互连资源46可以包括固定互连(导线)和可编程互连(即,各个固定互连之间的可编程连接)。可编程逻辑48可以包括组合和顺序逻辑电路。例如,可编程逻辑48可以包括查找表、寄存器和多路复用器。在各个实施例中,可编程逻辑48可以被配置为执行定制逻辑功能。与互连资源相关联的可编程互连可以被视为可编程逻辑48的一部分。如下文进一步详述的,fpga40还可以包括可以依赖于高booth基数8子集代码来定义其架构的高效软乘法器。诸如fpga40之类的可编程逻辑器件可以包含具有可编程逻辑48的可编程元件50。例如,如上文所述,设计者(例如,客户)可以对可编程逻辑48进行编程(例如,配置)以执行一个或多个所需的功能。通过示例的方式,一些可编程逻辑器件可以通过使用掩码编程布置来配置其可编程元件50而进行编程,掩码编程布置是在半导体制造期间执行的。在已经完成半导体制作操作之后来配置其它可编程逻辑器件,诸如通过使用电编程或激光编程来对其可编程元件50进行编程。通常,可编程元件50可以基于任何适合的可编程技术,例如熔丝、反熔丝、电可编程只读存储器技术、随机存取存储器单元、掩码编程元件等等。大多数可编程逻辑器件进行电编程。利用电编程布置,可编程元件50可以由一个或多个存储器单元形成。例如,在编程期间,使用引脚44以及输入/输出电路42将配置数据加载到存储器单元50中。在一个实施例中,存储器单元50可以实现为随机存取存储器(ram)单元。本文所描述的基于ram技术的存储器单元50的使用仅意在为一个示例。此外,因为这些ram单元是在编程期间加载配置数据,所以它们有时称为配置ram单元(cram)。这些存储器单元50可各自提供控制可编程逻辑48中的关联逻辑组件的状态的相对应的静态控制输出信号。例如,在一些实施例中,输出信号可以应用于可编程逻辑48内的金属氧化物半导体(mos)晶体管的栅极。fpga40的电路可利用任何适合的架构来进行组织。作为示例,fpga40的逻辑可以以较大可编程逻辑区域的一系列行和列来进行组织,其中的每一个均可包含多个较小的逻辑区域。fpga40的逻辑资源可通过诸如关联的垂直和水平导体之类的互连资源46来互连。例如,在一些实施例中,这些导体可以包括跨基本上全部fpga40的全局导线、诸如跨器件40的部分的半线或四分之一线之类的分数线、特定长度(例如,足以互连若干逻辑区域)的交错线、较小局部线或任何其它适合的互连资源布置。此外,在另外的实施例中,fpga40的逻辑可以布置在多个级或层中,其中多个较大的区域互连而形成逻辑的另外的较大的部分。此外,其它器件布置可以使用不以除了行和列之外的方式布置的逻辑。如上所述,fpga40可以允许设计者创建能够执行和实施定制功能的定制设计。每个设计可以使得其本身的硬件实现方式实现在fpga40上。在一些实例中,可能期望增强ic上实现的软乘法器的性能。特别地,在一些实施例中,高booth基数8子集编码可以被利用且映射到单级fpga逻辑。在一些实施例中,软乘法器可以利用修改的booth算法来实施高效的乘法运算。修改的booth算法可用于通过将乘数的位划分为组,来执行高速乘法。乘数位的各组可被解码成乘法运算,该乘法运算可进一步分解成软乘法器架构实现方式中的移位运算和加法运算。所得的乘法运算可应用于被乘数,使得生成多个局部乘积。这些局部乘积可以被移位和加和而得到乘数和被乘数的相乘的最终的、低精度结果。乘数位的组可以被划分且随后根据编码方案进行解码。例如,通常理解的booth基数8编码可以总结在下文的表1中。表1的前两列(即,“三位字节”和“尾位”)可以涉及在乘法运算中从乘数考虑的位组。表1的第三列“代码”可以包括对乘法运算中的被乘数执行的运算。代码和后续操作可以对应于代码的相应行的前两列中的位组。例如,如果一组乘数位包括三位字节“101”并且组的“尾位”是‘1’,则‘-2’可以是对应于该组位的编码。在该情况下,对被乘数执行的运算可以包括将被乘数的位左移一位,并且取结果的补集(即,将被乘数乘以负2)。在为‘+3’或‘-3’代码的情况下,还可以使用加法运算,因为将被乘数的位移位可能涉及乘以因子2或除以因子2。在一些实施例中,该加法运算可以涉及被乘数*2+被乘数运算(即,‘2’代码与‘1’代码加和)。此外,booth基数8可以对四位的组操作。该四位的组可以由三个位和尾位组成,其中尾位可以包括前三位的最高有效位(msb)。对于最低有效三位,‘0’可被看作尾位。例如,12位乘数可以使用组{[3:1],‘0’},[6:3],[9:6]和[12:9]。因此,乘数可以分解成四位的重叠组,并且对应于四位的每组的代码可以根据表1来确定。表1:已知的booth基数8编码三位尾位代码“000”‘0’0“000”‘1’+1“001”‘0’+1“001”‘1’+2“010”‘0’+2“010”‘1’+3“011”‘0’+3“011”‘1’+4“100”‘0’-4“100”‘1’-3“101”‘0’-3“101”‘1’-2“110”‘0’-2“110”‘1’-1“111”‘0’-1“111”‘1’0通过去除一个或多个代码(即,取代码的子集)从而提高实现效率,booth基数8编码可被修改成高基数booth子集编码。去除的代码可以减小乘数的范围,但是剩余的支持范围可以是连续的。例如,在一些实施例中,可以忽略‘-4’代码以便创建更高效的软乘法器架构。在一些实施例中,‘+4’代码也可以忽略,因为它不会发生。例如,在3位乘数的情况下,尾位可以总是0,并且因此,对于‘+4’代码来说序列‘0111’不会发生。因此,剩余的支持范围可以是连续的(例如,对于3位乘数来说为+7至-7),并且乘数运算可以关于0对称。由于减少的乘数范围,所得到的乘数可以高效地适合fpga器件。因此,图3示出了可以在fpga上实现的与3位有符号乘法器100映射的booth修改基数8编码的实施例。fpga可以具有一定量的软逻辑,利用查找表(lut)(即,110-113、116、118、120、122、124和126),随后是专用行波进位加法器(即,114、115、128、130和132)来实现。在一些实施例中,可选的寄存器级可以在加法器之后。此外,在一些实施例中,四个3输入lut(以及两个行波进位位)的一组可以组合成自适应逻辑模块(alm)(例如,由组件110-115构成的alm101)。在本实施例中,alm101、102和103可以形成3位有符号乘法器100的前三个alm。附加的alm可以加到alm103的左侧以实现被乘数。在一些实施例中,被乘数的大小可由用于alm103左侧的alm的数量来确定。因此,被乘数可以具有适当数量的alm可实现的任何适合的大小(即,n位)。因此,可以实现3位有符号乘法器100,nx3,并且在本实施例中,示出了五位被乘数,可以执行5位x3位乘法。查找表可以按若干方式进行布置。在一些布置中,两个3输入查找表可以各自馈送到行波进位加法器的单独的输入中。此外,馈送到同一行波进位加法器的lut可以被视为是成对的(例如,110和111)。因此,每对lut可以具有6个独立输入(即,每个lut3个输入)。在一些实施例中,每个lut可以接收输入信号,输入信号可以包括:例如use_x1、use_x2、neg、aa(x)、aa(x+1)和/或aa(x-1)。use_x1和use_x2可以分别表示“x1”和“x2”的情况。也即,lut可以接收use_x1的输入以传达‘+/-1’代码可用作乘数运算,而use_x2信号可以传达‘+/-2’代码可用作乘数运算。在本实施例中,neg信号可以表示乘法运算是负的。aa(x)、aa(x+1)和aa(x-1)可以各自表示被乘数位,其中‘x’表示被乘数中的位的索引。例如,‘x’的值为3的情况下,aa(x)可以对应于被乘数的第三位,而aa(x+1)可以对应于第四位,并且aa(x-1)可以对应于被乘数中的第二位。每个lut上的use_x1、use_x2和neg输入可以从解码器接收信号。也即,解码器可以接收尾位为‘0’的三位乘数位,而解码器可以根据高booth基数8子集编码(即,没有‘+/-4’代码的表1)输出与接收到的位序列相关联的适当的代码或运算。因此,对于尾位为‘0’的3位乘数序列“111”,解码器可以输出‘-1’以用作乘数运算。为了传达该输出,use_x1和neg信号可由解码器的输出来置位。在‘-4’的情况下(即,尾位为‘0’的‘100’),解码器可能没有识别出有效输入代码,因为‘-4’被忽略。因此,解码器可以不置位use_x1,也不置位use_x2,并且乘数的结果可以是零。在一些实施例中,每个lut可以接收use_x1或use_x2信号为第一输入,neg信号为第二输入,并且aa(x)、aa(x-1)和aa(x+1)为第三输入。每个lut可以使用其输入中的每个的组合来从其表中查找并输出对应的相乘结果。在本实施例中,每个lut对的右侧lut(即,110、112、116、120和124)可以用于“x1”情况。也即,右侧lut可以接收use_x1信号作为输入。左侧lut(即,111、113、118、122和126)可以用于“x2”情况(即,use_x2信号是输入)。对于“x3”情况,可以使用两个lut。也即,右侧lut(即,110、112、116、120和124)的use_x1信号输入和左侧lut(即,111、113、118、122和126)的use_x2信号输入均可以被置位而使得对被乘数执行这两个运算。此外,在一些实施例中,与lut相关联的输入可以不彼此独立。相反,在一些实施例中,共享输入的子集可以在一对luet(例如,110和111)和/或在不成对的相邻lut(例如,112和118)上使用。例如,在本实施例中,每个lut对的每个左侧lut可以与lut对的右侧lut向右共享被乘数位(即aa(x)、aa(x-1)或aa(x+1))。例如,右侧lut112可以接收aa(2)作为数据输入,并且右侧lut112可以与来自不同lut对的左侧lut118共享aa(2)。另外,neg信号可以在每个alm101、102和103内以及之中的全部lut(即,110-113、116、118、120、122、124和126)之间共享,如本实施例所示。结果,neg信号可以反转(即,1的补集)被乘数向量。被乘数向量可以由分别在右侧lut110、112、116、120、124(即,被乘数向量1)和左侧lut113、118、122、126(即,被乘数向量2)接收到的被乘数位(即,aa[5:1])来表示。在一些情况下,可能期望不反转两个向量。例如,例如,在‘-2’代码的情况下,use_x1不被置位。因此,被乘数向量1值可以是“0000…000”。然而,常见的neg信号可以将该值求负,随后在1的补集中可以表示为“1111…111”。在该情况下,可能不期望将被乘数向量1反转。然而,可使用例如外部调节来校正向量值。在本实施例中,乘数的最低有效位(lsb)的左侧lut111可以缺少数据输入(即,aa(x)、aa(x-1)或aa(x+1))。因此,neg位可路由通过该数据输入以将被乘数向量1的1的补集值变成2的补集值。当neg值加到最低有效位时,‘1’可以加到求负后的被乘数向量1(即“1111…111”),将其转换成2的补集值,其可以如最初所希望的那样表示为“0000…000”。在2的补集的情况下,对neg信号的调节可以不在如上所述对于1的补集的情况的同一级逻辑上进行。因为2的补集值的情况可能是点积的结果,而校正可以统一第编码到整个点积的单个数中。在一些实施例中,所使用的校正可以包括值“000…010”的相加,这可以通过单个位的加法来实现,尽管具有在整个数上进位的效果。为了加上该校正,点积的加法器树中的不完整三元组可被定位,并且校正可以加到不完整三元组的末尾,如下文进一步详述的。如所描述的,当前的实施例实现了nx3乘法,围绕0达到平衡,其中乘法的贡献包含在单级逻辑中。然而,该方法还可以扩展以实现非常高效的nx6乘法,如图4中所示。也即,可以使用6位有符号乘法器200,而非3位有符号乘法器100。在nx6乘法的情况下,乘数可以分解成两组位(即,{[3:1],‘0’}和[6:3])。每组位可以根据所采用的booth基数8编码的子集或表1来进行评估,以确定与乘数位组对应的适合的乘数运算的代码。结果,将使用两个代码或乘数运算。也即,可类似于2个3位有符号乘法器100来评估6位有符号乘法器200。因此,如图3所示,对于nx6乘法,用于实现nx3乘法的结构可以实现两次(例如,作为高块202和低块201)。高块202可以通过乘数的“高”位(即,bb[6:3])来处理乘法。在一些实施例中,低块201可以通过尾位为‘0’的乘数(即,bb[3:1])的“低”位来处理乘法,如之前所述的。高块202和低块201可以从被乘数接收全部位。在所示的实施例中,例如,描绘了8位被乘数,整个被乘数可以根据与低块201中的乘数的低位对应的适当的运算(即,来自表1)进行相乘,并且整个被乘数可同时根据与高块202中的乘数的高位对应的适当的运算(即,来自表1)进行相乘。在对高块202和低块201的结果进行求和之前,可以涉及附加逻辑,如下文进一步详述的。虽然高块202和低块201匹配图3所示的nx3位乘法,但是在一些情况下,‘-4’代码在6位有符号乘数中不再被忽略。也即,当乘数的三个低位(即,bb[3:1])为“100”并且尾位自动假定为‘0’时,则根据表1可以得到‘-4’。虽然‘-4’可能发生在3位有符号乘法器100中,但是被选择性地忽略,如之前所述,‘-4’可以是6位有符号乘法器200中的有效代码,以便支持以0为中心的连续范围-27到+27。虽然,由于低块201可以等同于图3的3位有符号乘法器100,但是可以使用附加结构来促进‘-4’代码。因此,块204可以加到乘法器架构来检测‘-4’状况是否发生。在一些实施例中,块204的输出可用作多路复用器207的选择输入。当‘-4’状况由块204检测到时,则多路复用器207可选择块203的补集输出作为其输出。块203可以将被乘数左移位两位。因此,块203的输出的补集可以表示被乘数乘以-4。当‘-4’未由块204检测到时,则多路复用器207可以选择由低块201的输出得到的部分积(即,pp_low[])。在一些实施例中,高块202可以缺少与附加结构(诸如,块203、204和多路复用器207)的连接性,以便处理可能由于位bb[6:3]的输入而发生的‘+/-4’代码状况。结果,‘+/-4’代码可以在被乘数aa[8:1]和由乘数位bb[6:3]的booth基数8编码得到的代码相乘期间被忽略。然而,在一些实施例中,高块202可以连接到结构以检测并处理‘+/-4’代码(例如,诸如上文所述),但是这样的实施例可以使由去除代码得到的优化效果最小化,因为附加结构可能需要更多的面积和/或资源。此外,由于该结构可以基于修改的booth基数8算法,所以在块205处高块202的结果可以左移3位。也即,由高块202(即,pp_high[])得到的部分积的前三位可以为“000”。包括来自pp_high[]的位的信号206可以加到多路复用器207的输出以得到乘法运算的结果(即,cc[14:1])。在一些实施例中,信号206可以断定‘0’为其第一个位(即,bit[1]),如图4所示。此外,信号206的第二个位可以由低块201的输出确定。如果pp_low[]为负,其可以以1的补集格式从低块201输出,该格式可以通过将信号206的bit[2]设置为校正因子而可期望地被转换成2的补集格式。在一些实施例中,adjust_low信号(其可由低块201置位以校正其输出(即,pp_low[]))的逻辑与,并且块204的输出的补集(即,非门输出)可以确定bit[2]的值。因此,如果块204没有检测到‘-4’状况,则可以仅将bit[2]置位以校正pp_low[]。此外,在一些实施例中,如果‘-4’状况存在,则可以在信号206的bit[3]处而不是bit[2]处插入‘1’。换句话说,在3位有符号乘法器100中的相同逻辑(其中neg信号可以路由到lut111中以抵消反误差)之后,可以在信号206中设置一组校正因子(即,bit[2]和/或bit[3])以解决可能由于求反导致存在的任何误差和/或与期望的1的补集相对于2的补集输出有关的误差。在图4的所示的实施例中,基数8乘数(即,高块202和低块201)中的每一个可以被视为单级逻辑。另外,可以包括多路复用器207和加法器208的块210可以涉及单级逻辑。此外,控制块204可以与低块201并行地计算,并且块203和205的移位操作可以被视为自由操作,因为可以不存在所涉及的任何实际的逻辑。因此,在一些实施例中,nx6乘法可以仅利用两级逻辑。在一些实施例中,该方法还可以扩展到更大的乘法器。因此,图5示出了利用9位有符号乘法器250的nx9乘法的示例实施例。在所示的实施例中,nx9乘法器可以包括耦合在一起的nx3乘法器(即,高块220)、nx6乘法器(即,242)和附加逻辑。因此,块220、202和201可以构建于图3所示的结构的实例之上。乘数(即,bb[9:1])的位可以组合成4的三个集合(即,{bb[3:1],‘0’},bb[6:3]和bb[9:6]),它们可以分别视为乘数的低位、中位(即,中等位)和高位。如在nx6乘法器的情况一样,低块201可以接收乘数的低位(即,{bb[3:1],‘0’}),并且中等块202可以接收乘数的中位(即,bb[6:3])。高块220可以接收乘数的其余高位(即,bb[9:6])。在将高块220的结果与中块202和低块201之和进行求和之前,可以包含附加逻辑,如下文进一步详述的。在9位有符号乘法器250的情况下,低位{bb[3:1],‘0’}会导致‘-4’的状况仍会发生,并且可由nx6乘法器中所示的相同逻辑块(即,204、207、203)来处理。然而,与6位有符号乘法器200相比,由于附加乘数位,会发生新状况。在乘数的中位的尾位bb[6:3]与乘数的低位{bb[3:1],‘0’}的msb一致的情况下,会发生‘+/-4’代码状况。也即,“0011”和“1000”会作为bb[6:3]的有效值发生,这可以由booth的基数8编码分别解释为‘+4’和‘-4’。此外,为了根据中乘数位bb[6:3]的值生成适当的‘+4’或‘-4’状态,在一些实施例中,可以使用块230。因此,在块221处,被乘数位aa[8:1]可以左移两位,或乘以‘+4’,而无论中位bb[6:3]的值如何。块222可以确定位bb[6:3]的值来确定是否满足‘+/-4’状况。块222的输出可以路由到xor门223和加法器224以在必要时对块221的输出的值求补集而生成‘-4’状况。因此,加法器224的输出可以包含-4*被乘数或+4*被乘数。该输出可以连同中块202的输出的部分积(即,pp_mid[])一起馈送到多路复用器225。此外,块222的输出还可以路由到多路复用器225的选择位以在‘+/-4’状况的结果或块202的输出(即,pp_mid[])之间进行选择。230的输出随后可以由块205左移三位以正确地对齐中乘法器结果。在其它实施例中,‘+/-4’情况的产生可以使用其它方法来完成,该其它方法可以将这些值并入乘法器结构中,这可以取决于设备而具有不同的适合特性。此外,在将高块220结果与中块202和低块210之和进行求和之前,由高块220输出的部分积(即,pp_high[])可以左移6位,因为pp_mid[]位可以左移三位。块226的输出可以沿信号228进行求和。信号228可以具有取决于pp_mid[]结果的符号以及‘+/-4’状况的存在/不存在而在bit[5]或bit[6]中设定的校正因子,如nx6乘法器对于‘-4’状况和负pp_high[]所具有的一样。因此,中块202可以输出校正因子adjust_mid,以对信号228进行适当的校正。在一些实施例中,信号228可以在加法器240处与在加法器208处相加在一起的较低乘数组件之和相加。此外,adjust_high信号227可以加到加法器240的结果中(即,cc[17:1])或可以使用加法器240的结果的另一架构级中。也即,adjust_high信号227可以表示针对高块220乘法器的校正因子,但是不同于adjust_mid和adjust_low,在乘法器架构内没有位置将校正因子加到积或部分积中。因此,adjust_high信号227可以在乘法器架构外部路由而在另一级中加到乘法器的结果中。在图5所示的实施例中,类似于nx6乘法器的实施例,乘法器(即,220、202和201)中的每一个可视为单级逻辑。此外,虽然xor门223、加法器224和多路复用器225表现为散布于两级逻辑之上,因为加法器可以构造为逻辑级的输出级,但是多路复用器225可以由合成技术在逻辑上推回到加法器224之前。此外,虽然图3-图5的所示的实施例分别演示了nx3、nx6和nx9位有符号乘法器,但是,在一些实施例中,具有附加的适当大小的乘法器可以使用本文所述的技术来创建。如之前所述,在一些实施例中,校正值可以加到一个或多个乘法器的输出。如果校正分离地实现,例如,成为单个乘法器,则会占用整个加法器级,这可能造成浪费。可替代地,在一些实施例中,在三重相加结构可用的情况下,可使用三重加法器来添加校正。然而,三重加法器会由于布线密度而无法在fpga中很好地大规模封装。然而,在一些实施例中,多个乘法器可以相加在一起以用于许多应用,例如在点积的情况下。因此,使用加法器树来在多个乘法器上应用校正因子而不是对单个乘法器应用校正因子可能是有益的。因此,图6示出了在五个乘法器(例如,401-405)上实现的加法器树450以便应用校正因子的实施例。乘法器401-405可以具有任何适合的大小,诸如nx3、nx6或nx9。此外,在一些实施例中,每个乘法器401-405可以输出单位校正因子426(例如,adjust_low、adjust_mid、adjust_high),以及乘法器运算的未校正结果428。然而,在一些实施例中,乘法器架构可以使得每个乘法器能够输出多个位或编码的数值(诸如已经组合成整数校正值的多个位)作为校正值。块410可以从乘法器401-405接收校正位426中的每一个作为输入。在一些实施例中,块410然后可以将校正位426求和为单个校正整数430。由块410输出的单个校正整数430可以在加法器423处加到加法器树中。在所示的实施例中,加法器423可以表示加法器树450中的不完整三元组。也即,因为有奇数个乘法器,所以加法器420和421接收来自乘法器(即,分别为401和402以及403和404)的两个输入。然而,没有成对乘法器用作加法器423处的输入,得到校正整数430可以加入其中的不完整三元组。通过在423处将校正整数430加入加法器树450,其校正效果被传播到加法器424其最终输出。因此,针对每个乘法器401-405的校正可以被求和且同时应用,使得所有校正都存在于加法器424的最终输出中。然而,在一些实施例中,加法器树450可以不包含用于校正整数430要加入的不完整三元组,并且在这样的情况下,加法器树450可以包含附加加法器以将校正整数420并入最终的和中。虽然在本公开中阐述的实施例可以易于进行各种修改并且采用替代的形式的同时,在附图中通过示例的方式示出了具体的实施例,并且在本文中进行了详细说明。然而,应理解的是,公开内容不是要限于公开的特定形式。公开内容应涵盖落入如随附权利要求中所限定的公开的精神和范围内的所有修改方案、等同方案和替代方案。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1