基于背面查找表的可编程处理器的制作方法

文档序号:12915741阅读:148来源:国知局
本发明涉及集成电路领域,更确切地说,涉及处理器。
背景技术
::传统处理器采用基于逻辑的计算(logic-basedcomputation,简称为lbc),它主要通过逻辑电路(如与非门等)来计算。逻辑电路适合实现算术运算(如加法、减法和乘法),但对于非算术函数(如初等函数、特殊函数等)无能为力。非算术函数的高速高效实现面临巨大的挑战。在传统处理器中,仅少量基本非算术函数(如基本代数函数、基本超越函数)能通过硬件直接实现,这些函数被称为内置函数(built-infunctions)。内置函数一般通过算术运算和查找表的组合来实现。实现内置函数的例子很多,例如:美国专利us5,954,787(发明人:eun;授权日:1999年9月21日)披露了一种利用查找表实现正弦/余弦(sine/cosine)函数的方法;美国专利us9,207,910(发明人:azadet;授权日:2015年12月8日)披露了一种利用查找表实现幂函数的方法。图1a具体描述了内置函数的一种实现方法。传统处理器00x通常含有逻辑电路100x和存储电路200x。逻辑电路100x含有算术逻辑单元(alu),它用于实现算术运算。存储电路200x含有查找表电路(lut)。为了达到足够的计算精度,需将代表内置函数的多项式展开到足够高的阶数。这时,lut200x存储多项式系数,alu100x计算相应的多项式。由于alu100x和lut200x并肩排列在同一平面上(均形成在衬底00s中),这种集成是一种二维集成。二维集成对处理器的制造工艺要求较高。存储电路200x由存储晶体管构成,逻辑电路100x由逻辑晶体管构成。熟悉本专业的人士都知道,存储晶体管和逻辑晶体管的性能指标有很大不同。比如说,存储晶体管更注重降低漏电流,而逻辑晶体管更注重增加导通电流。在同一衬底上00s的同一表面上同时形成高性能的存储晶体管和逻辑晶体管对于制造工艺来说是一种挑战。二维集成还会限制计算密度和计算复杂度的进一步发展。计算正向更高的计算密度和更大的计算复杂度发展。计算密度是指单位芯片面积的计算能力(如每秒的浮点数运算次数),它是平行计算的一个重要指标。计算复杂度是指内置函数的种类和数量,它是科学计算的一个重要指标。由于采用二维集成,lut200x的存在将增加传统处理器00x的芯片面积,降低其计算密度,这对平行计算不利。同时,在传统处理器00x的设计过程中,由于alu100x是传统处理器00x的核心部件并占用了大部分芯片面积,故lut200x能利用的芯片面积有限。因此,传统处理器00x仅支持少量内置函数。图1b列出英特尔公司的itanium处理器(ia-64)能实现的所有内置超越函数(参考harrison等所著《thecomputationoftranscendentalfunctionsontheia-64architecture》,inteltechnicaljournal,q4,1999年)。ia-64处理器共支持7种超越函数,每种超越函数使用了相对较小的查找表(从0到24kb),并需要进行相对较多的泰勒级数(5阶到22阶)计算。基于lbc的处理器00x有一个缺陷。由于实现不同内置函数使用的逻辑电路完全不同,处理器00x是完全定制的,不能通用。换句话说,一旦处理器00x的设计完成,它只能实现一套预先定义的内置函数。很明显,用户希望用同一硬件实现不同计算,即实现计算的编程。这可以从现场可编程门阵列(fpga)中得到启发。fpga能实现逻辑的编程。美国专利4,870,302(发明人:freeman;授权日:1989年9月26日)披露了一种fpga。它含有多个可编程逻辑单元(configurablelogicelement)和可编程连接(configurableinterconnect)。目前,fpga只能实现逻辑的编程,即同一硬件在设置信号控制下选择性地实现不同的逻辑。遗憾的是,fpga尚无法实现计算的编程,即同一硬件在设置信号控制下选择性地实现不同的计算(即实现不同的函数)。技术实现要素:本发明的主要目的是实现计算的编程。本发明的另一目的是实现计算的现场编程。本发明的另一目的是实现可重构计算。本发明的主要目的是实现多变量函数的编程。本发明的另一目的是提供一种能实现更高计算复杂度的可编程处理器。本发明的另一目的是提供一种能实现更高计算密度的可编程处理器。本发明的另一目的是提供一种计算能力更灵活、更强大的现场可编程门阵列。为了实现这些以及别的目的,本发明提出一种基于背面查找表(backsidelut,简称为bs-lut)的可编程处理器(bs-lut可编程处理器)。bs-lut可编程处理器含有至少一逻辑电路和一可编程存储电路。其中,逻辑电路含有至少一算术逻辑电路(arithmeticlogiccircuit,简称为alc);可编程存储电路含有至少一查找表电路(look-uptablecircuit,简称为lut)。lut存储一函数的相关数据(如该函数的一查找表),alc对该函数相关数据进行算术运算。alc和lut分别形成在处理器衬底的正反两面,它们之间通过穿透硅片通道(tsv)进行电耦合。由于位于衬底背面,lut又被称为背面查找表电路(bs-lut)。此外,由于bs-lut是可编程的,因此可根据用户需求在bs-lut中写入所需函数的相关数据,以实现计算的编程。bs-lut可编程处理器采用“基于存储的计算”(memory-basedcomputation,简称为mbc),它主要通过查表来实现计算。bs-lut可编程处理器中bs-lut的存储容量远高于传统处理器的lut。虽然大多数mbc仍需要进行算术运算,通过使用较大的bs-lut作为计算的出发点,mbc仅需使用较少的多项式展开(如泰勒级数展开)。在mbc中,大部分计算通过bs-lut完成,少部分计算通过alc实现。bs-lut可编程处理器的使用分两个阶段:设置阶段和计算阶段。在设置阶段,在bs-lut中写入所需函数的相关数据;在计算阶段,通过在bs-lut中查找函数相关数据来实现计算。bs-lut可编程处理器能实现现场编程和可重构计算。对于现场编程,可在使用现场将所需函数的相关数据写入bs-lut,则bs-lut可编程处理器可在使用现场实现所需的函数。对于可重构计算,不同时段在bs-lut中写入不同函数的不同相关数据(如不同函数的查找表),则bs-lut可编程处理器可实现不同函数。例如,在第一时段,bs-lut存储第一函数的相关数据;在第二时段,bs-lut存储第二函数的相关数据。这种将alc和lut形成衬底正反两面的集成方式被称为双面集成。双面集成能提高计算密度和计算复杂度。采用传统的二维集成,传统处理器00x的面积是alu100x和lut200x之和。采用双面集成后,lut从边上移到衬底背面,bs-lut处理器变小,计算密度加强。此外,传统处理器00x中lut200x的总容量小于100kb,而bs-lut处理器中bs-lut的总容量可达到100gb;单个bs-lut处理器就可支持上万个内置函数(包括多种复杂数学函数),远多于传统处理器00x。此外,由于构成alc的逻辑晶体管和构成lut的存储晶体管分别形成在衬底的不同表面上,它们的制造工艺可分别优化。为了进一步提高可编程度,本发明还提出一种基于bs-lut的可编程门阵列(bs-lut可编程门阵列)。它含有多个可编程计算单元、多个可编程逻辑单元和多个可编程连接。可编程计算单元含有一bs-lut,该bs-lut含有至少一可编程存储阵列,它存储一函数的相关数据。由于bs-lut是可编程的,因此可以根据用户需求,在bs-lut中写入所需函数的相关数据,以实现计算的编程。bs-lut可编程门阵列中的可编程逻辑单元和可编程连接与传统fpga中的可编程逻辑单元和可编程连接类似。在计算过程中,非算术函数首先被分解为基本非算术函数的组合。然后针对每个基本非算术函数设置相应的可编程计算单元,使其实现相应的基本非算术函数。最后,设置可编程逻辑单元和可编程连接,以实现所需的非算术函数。相应地,本发明提出一种可编程处理器(300),其特征在于含有:一半导体衬底(0s),该半导体衬底(0s)含有一正面(0f)和一背面(0b);一位于该衬底背面(0b)的查找表电路(170),可根据用户需求在该查找表电路(170)中写入一函数的相关数据;一位于该衬底正面(0f)的算术逻辑电路(180),该算术逻辑电路(180)对该查找表(170)中读出的数据进行算术运算;多个穿透该半导体衬底(0s)、并将该查找表(170)和该算术逻辑电路(180)电耦合的穿透硅片通道(tsv)(160)。附图说明图1a是一传统处理器的透视图(现有技术);图1b列出英特尔itanium(ia-64)处理器支持的所有超越函数(现有技术)。图2a是一种典型bs-lut可编程处理器的简要电路框图;图2b是其正面透视图;图2c是其背面透视图。图3a是一种bs-lut可编程处理器的截面图;图3b是其正面电路布局图;图3c是其背面电路布局图。图4a是一种典型可编程计算单元之简要电路框图;图4b是一种实现一单精度函数的可编程计算单元之电路框图;图4c列出实现各种精度函数所需的查找表容量和泰勒级数展开项。图5是一种bs-lut可编程门阵列的布局图。图6是图5中bs-lut可编程门阵列实现一多变量函数e=a.sin(b)+c.cos(d)的设置。注意到,这些附图仅是概要图,它们不按比例绘图。为了显眼和方便起见,图中的部分尺寸和结构可能做了放大或缩小。在不同实施例中,数字后面的字母后缀表示同一类结构的不同实例;相同的数字前缀表示相同或类似的结构。“/”表示“和”或“或”的关系。在本发明中,“查找表”和“查找表电路”均被缩写为lut。根据上下文,lut代表查找表或查找表电路。具体实施方式图2a是一种典型的、基于背面查找表(backsidelut,简称为bs-lut)的可编程处理器(bs-lut可编程处理器)300的简要电路框图;图2b是该bs-lut可编程处理器300的透视图。bs-lut可编程处理器300有一个或多个输入150、以及一个或多个输出190。bs-lut可编程处理器300含有至少一逻辑电路100和一可编程存储电路200。其中,逻辑电路100含有至少一算术逻辑电路(alc)170;可编程存储电路含有至少一查找表电路(lut)170。lut170存储一函数的相关数据(如该函数的一查找表),alc180对该函数相关数据进行算术运算。alc180和lut170分别形成在处理器衬底0s的正反两面0f、0b,它们之间通过穿透硅片通道(tsv)160进行电耦合。由于位于衬底背面0b,lut又被称为背面查找表电路(bs-lut)170。此外,由于bs-lut170是可编程的,因此可根据用户需求在bs-lut170中写入所需函数的相关数据,以实现计算的编程。在说明书附图中,由于它们处于衬底0s的不同表面0f、0b上,bs-lut170用虚线表示,alc180用实线表示。图3a是bs-lut可编程处理器300的截面图;图3b是其正面电路布局图;图3c是其背面电路布局图。bs-lut可编程处理器300含有多个穿透衬底0s的tsv160a-160f…(图3a)。bs-lut可编程处理器300的正面0f含有alc180,包括alc构件180a-180d…(图3b)。这些alc构件180a-180d分别与tsv160a-160d耦合。bs-lut可编程处理器300的背面0b含有bs-lut170,包括可编程存储阵列170a-170f…(图3c)。在本说明书中,存储阵列是所有共享了至少一条地址线的存储元之集合(包括其周边电路)。可编程存储阵列170a-170f分别与tsv160a-160d耦合。alc180通过tsv160a-160f从bs-lut170中读取数据,并进行算术运算。bs-lut可编程处理器300采用“基于存储的计算”(mbc),它主要通过查表来实现计算。bs-lut可编程处理器300中bs-lut170的存储容量远高于传统处理器00的lut200x。虽然大多数mbc仍需要进行算术运算,通过使用较大的bs-lut170作为计算的出发点,mbc仅需使用较少的多项式展开(如泰勒级数展开)。在mbc中,大部分计算通过bs-lut170完成,少部分计算通过alc180实现。bs-lut可编程处理器300的使用分两个阶段:设置阶段和计算阶段。在设置阶段,在bs-lut170中写入所需函数的相关数据;在计算阶段,通过在bs-lut170中查找函数相关数据来实现计算。bs-lut可编程处理器300能实现现场编程和可重构计算。对于现场编程,可在使用现场将所需函数的相关数据写入bs-lut170,则bs-lut可编程处理器300可在使用现场实现所需的函数。对于可重构计算,不同时段在bs-lut170中写入不同函数的不同相关数据(如不同函数的查找表),则bs-lut可编程处理器300可实现不同函数。例如,在第一时段,bs-lut170存储第一函数的相关数据;在第二时段,bs-lut170存储第二函数的相关数据。bs-lut170可用ram和/或rom。ram包括sram和dram等。rom包括otp、eprom、eeprom和闪存等。闪存可以分为nor或nand,还可以分为横向闪存和纵向闪存(verticalnand)。对于可重构计算,bs-lut170采用可重复编程存储器。对于现场编程,除了可重复编程存储器以外,bs-lut170还可以采用otp。另一方面,alc180可以含有加法器、乘法器、和/或乘加器,它可以用于实现整数运算、定点数运算、或浮点数运算。这种将alc180和lut170形成衬底0s正反两面0f、0b的集成方式被称为双面集成。双面集成能提高计算密度和计算复杂度。采用传统的二维集成,传统处理器00x的面积是lut200x和alu100x之和。采用双面集成后,lut从边上移到衬底背面0b,bs-lut处理器300的面积变小,计算密度加强。此外,传统处理器00x中lut的总容量小于100kb,而bs-lut处理器300中lut的总容量可达到100gb;单个bs-lut处理器300就可支持上万个内置函数(包括多种复杂数学函数),远多于传统处理器00x。此外,双面集成还能提高bs-lut170和alc180之间的数据传输带宽。由于bs-lut170和alc180距离较近且tsv160数量较多,它们之间的数据传输带宽远高于传统处理器00x中lut200x和alu100x之间的带宽。最后,双面集成对制造工艺角度也有益处。由于构成alc180的逻辑晶体管和构成lut170的存储晶体管分别形成在衬底0s的不同表面0f、0b上,它们的制造工艺可分别优化。为了进一步提高可编程度,本发明还提出一种基于bs-lut的可编程门阵列(bs-lut可编程门阵列)700(图4a-图6),它含有多个可编程计算单元400aa…、多个可编程逻辑单元500aa…和多个可编程连接610-650…。图4a表示一种典型的可编程计算单元400,它含有一预处理电路180r、一后处理电路180t和至少一bs-lut170。bs-lut170含有至少一可编程存储阵列,它存储一函数的相关数据(如该函数的查找表)。由于bs-lut170是可编程的,因此可根据用户需求在bs-lut170中写入所需函数的相关数据,以实现计算的编程。预处理电路180r将函数的自变量x150转换为bs-lut170的地址a160a;后处理器180t将从bs-lut170中读出的数据d160d转换为函数值y的输出190。在该实施例中,预处理电路180r和后处理电路180t形成在逻辑电路100中。在其他实施例中,至少一部分预处理电路180r和/或后处理电路180t也可以形成在存储电路200中。自变量x的一部分r可以在被预处理电路180r处理之前送至后处理电路180t作为后端处理的一个输入,也可以在被预处理电路180r处理之后(即地址a的一部分)送至后处理器180t。图4b表示一种实现一单精度函数y=f(x)的可编程计算单元400。bs-lut170含有两个lut170q、170r,其容量均为2mb(16位输入、32位输出),并分别存储函数值d1=f(a)和函数的一阶导数值d2=f’(a)。alc180含有预处理电路180r(主要含有一地址缓冲区)和后处理电路180t(含有一加法器180a和一乘法器180m)。tsv160在bs-lut170和alc180之间传输数据。在计算函数时,该bs-lut可编程处理器300的输入为32位自变量x150(x31…x0);预处理电路180r将其前16位(x31…x16)提取出来作为lut170q、170r的16位地址输入a,再将其后16位(x15…x0)提取出来作为16位地址余量r送到后处理电路180t;后处理电路180t通过多项式插值计算32位输出值y190。在本实施例中,多项式插值是一阶泰勒级数:y(x)=d1+d2*r=f(a)+f’(a)*r。很明显,采用更高阶的多项式插值(如更高阶的泰勒级数)能进一步提高计算精度。在实现内置函数时,将lut和多项式插值结合起来可以用较小的lut实现较高的计算精度。假如仅用lut(无多项式插值)来实现上述的单精度函数(32位输入、32位输出),lut的容量需要达到232*32=128gb。用这么大的lut来实现一个函数是不现实的。通过多项式插值,lut的容量可极大地降低。在上述实施例中,在采用一阶泰勒级数后,lut只需4mb(函数值lut需要2mb、一阶导数值lut需要2mb)。这比仅用lut的方式(128gb)少很多。图4c列出实现各种精度函数所需的查找表容量和泰勒级数展开项。该实施例采用定义域缩小法并将查找表的容量限制在mb级(参考harrison等所著《thecomputationoftranscendentalfunctionsontheia-64architecture》,inteltechnicaljournal,q4,1999年)。半精度(16位)计算使用的bs-lut170容量为216×16=1mb,这时不需要计算任何泰勒级数;单精度(32位)计算使用的bs-lut170容量为216×32×2=4mb,这时需要计算1阶泰勒级数;双精度(64位)计算使用的bs-lut170容量为216×64×3=12mb,这时需要计算2阶泰勒级数;扩展双精度(80位)计算使用的bs-lut170的容量为216×80×4=20mb,这时需要计算3阶泰勒级数。作为一个比较,为实现同样的双精度(64位)计算,英特尔的itanium处理器需要计算多达22阶泰勒级数。除了初等函数以外,图4a-图4b中的实施例还能实现各种高等函数,如特殊函数等。特殊函数在数学分析、泛函分析、物理研究、工程应用中有着举足轻重的地位。许多特殊函数是微分方程的解或基本函数的积分。特殊函数的例子包括伽玛函数、贝塔函数、贝塞尔函数、勒让德函数、椭圆函数、lame函数、mathieu函数、黎曼泽塔函数、菲涅耳积分等。可编程计算单元400的出现将简化特殊函数的计算,助推其在科学计算中的应用。图5表示一种bs-lut可编程门阵列700。它含有规则排列的可编程模块700a和可编程模块700b等。每个可编程模块(如700a)含有多个可编程计算单元(如400aa-400ad)和可编程逻辑单元(如500aa-500ad)。在可编程计算单元(如400aa-400ad)和可编程逻辑单元(如500aa-500ad)之间含有可编程信道620、640;在可编程模块700a和可编程模块700b之间,也含有可编程信道610、630、650。可编程信道610-650含有多个可编程连接。对于熟悉本领域的专业人士来说,除了可编程信道以外,还可以采用门海(sea-of-gates)等设计。可编程逻辑单元和可编程连接类似传统fpga中的可编程逻辑单元和可编程连接(参见美国专利4,870,302)。比如说,可编程逻辑单元可以选择性地实现移位、逻辑非、and(逻辑与)、or(逻辑和)、nor(和非)、nand(与非)、xor(异或)、+(加法)、-(减法)等逻辑操作;可编程连接可以选择性地实现互连线的连接、断开等功能。在一些实施例中,部分可编程逻辑单元甚至可以实现×(乘法)。图6表示该bs-lut可编程门阵列700的一种具体实现,它用于实现一多变量非算术函数:e=a.sin(b)+c.cos(d)。在可编程信道610-650中可编程连接采用与美国专利4,870,302一致的表达方式:交叉点有圆点的可编程连接表示交叉线相连,交叉点无圆点的可编程连接表示交叉线不相连,断开的可编程连接表示断开的互连线被分为两个互不相连的互连线段。在该实施例中,可编程计算单元400aa被设置为log(),其计算结果log(a)被送到可编程逻辑单元500aa的第一输入。可编程计算单元400ab被设置为log[sin()],其计算结果log[sin(b)]被送到可编程逻辑单元500aa的第二输入。可编程逻辑单元500aa被设置为“加法”,其计算结果log(a)+log[sin(b)]被送到可编程计算单元400ba。可编程计算单元400ba被设置为exp(),其计算结果exp{log(a)+log[sin(b)]}=a.sin(b)被送到可编程逻辑单元500ba的第一输入。类似地,通过适当的设置,可编程计算单元400ac、400ad,可编程逻辑单元500ac,可编程计算单元400bc的结果c.cos(d)被送到可编程逻辑单元500ba的第二输入。可编程逻辑单元500ba被设置为“加法”,a.sin(b)和c.cos(d)在此相加,最终结果送到输出e。很明显,通过改变设置,bs-lut可编程门阵列700还可以实现其它非算术函数。bs-lut可编程门阵列700尤其适合实现对多变量函数的编程。如果仅采用lut,则上述4变量函数e=a.sin(b)+c.cos(d)需要的极大lut:即使仅采用半精度,就需要216×216×216×216×16=256eb的lut。很明显,用这么多lut来实现一4变量函数是不现实的。采用bs-lut可编程门阵列700后,仅需要8mb的lut(8个可编程计算单元,每个计算单元含1mb的lut)就可实现该4变量函数。对于熟悉本专业的人士来说,bs-lut可编程门阵列700可以推广到其它多变量函数中。应该了解,在不远离本发明的精神和范围的前提下,可以对本发明的形式和细节进行改动,这并不妨碍它们应用本发明的精神。例如说,处理器可以是中央处理器(cpu)、数字信号处理器(dsp)、图像处理器(gpu)、网络安全处理器、加密/解密处理器、编码/解码处理器、神经网络处理器、人工智能(ai)处理器等。因此,除了根据附加的权利要求书的精神,本发明不应受到任何限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1