门阵列集成电路在本技术领域中是很普通的,通过把预先定义和预先制造好的门阵列单元互相连接起来实现,可以设计专用集成电路。现场可编程门阵列(FPGA),使用通常的可编程器件,允许用户使用地点上单元的互连的产生,或编程。互连可以通过熔丝,可选的开关,存储控制可用开关的图案等等来产生。美国专利5 594 363“现场可编程门阵列中的逻辑单元和布线结构”,由Freeman等人于1997年1月14日提交,附在本文的参考文献中,该专利公布了一种基于非易失存储单元值的单元之间布线的技术,它包括连接选定垂直线与水平线的开关矩阵。典型地,设计者给定执行功能的描述,以及判断实现该功能的互连程序的计算机辅助设计(CAD)程序。这种描述可以是逻辑程序、数据流图、状态图或者表、结构设计语言中的一连串指令等等。
从设计描述到门阵列程序的转换取决于门阵列的内容。如果门阵列的单元是高级块,例如计数器、奇偶产生器等类似的块,那么所需程序量被约束在这些大的,或者粗糙颗粒单元之间的互连上。另一方面,如果门矩阵的单元是低级块,例如门、锁存器等,那么编程量显著提高,因为这些较小的,或者精细颗粒的单元需要实现更高级功能的互连,例如前面提到的计数器和奇偶产生器。在一些设计中,通过应用精细颗粒单元,可以达到较高的电路密度,因为较简单的功能可以由小的低级单元来实现,而不是由那些其高级功能没有得到使用的高级单元来实现。相反,一些复杂的设计不能在精细颗粒门阵列中有效地体现,因为低级单元之间所需互连的数目超过了门阵列的容量。在某些情况下,互连可以在门阵列的容量内,但是这样得到的低级单元之间的布线路径超过达到目标功能所需的传输延迟或者偏移约束。对于优化操作,与特别功能相关的精细颗粒单元应该一起放置,但当这样一起放置产生布线“瓶颈”时,这通常要对功能块的连接布线施加约束。
已经提出来多种结构来优化电路密度、布线效率、功能操作约束等之间的折衷方案。例如,1991年3月19日授予Cliff等人的美国专利5 001 368“可构造的逻辑阵列”,指出了仅含NAND门单元的门阵列结构的不足,并且详细说明了在每个单元中加入一个附加电路以包含一锁存器功能。在一般门阵列单元设计中需要锁存功能是一个普遍的话题,因为如果形成锁存器的器件经过长布线路径,或者经过中间缓冲器互连,引入的相移就能够导致锁存器震荡。典型的门阵列一般包含至少一个锁存器,有时候更多。1991年10月8日授予Galbracth等人的美国专利5 055 718“具有构造综合和时序块的逻辑模块”,详细说明了一种结构门阵列单元,它能实现从简单NAND功能到异步复位的边沿触发触发器的“广泛的多种”组合与时序逻辑功能。如上所述,不管实现的是简单NAND门或者复杂的触发器,都要消耗同样数量的单元面积。
为了减轻布线任务,1998年3月11日授予Kean等人的U.S专利5 831 448“精细颗粒FPGA的功能单元”,详细说明了把可构造门阵列单元组织成块层次,例如4×4单元块,4×4单元块的4×4构造等等。层次的每一层包含专属该层的布线路径,因此允许其布线策略是距离项的对数函数。前面提到的美国专利5 594 363也公开了层次布线电路通道的使用。市售FPGA的摩托罗拉MPA 1000系列提供了多功能结构门阵列单元,此单元以10×10单元和诸如端口单元和时钟分布单元的辅助组元区构造成,该区被构造成四个象限。布线路径的层次为:局域互连提供近邻或者次近邻单元之间的连接;中等互连提供区之间的互连;而全局互连提供四个象限以及全局信号和总线布线之间的互连。
尽管层次式布线对于管理互连复杂性很有效,但当单元层次与设计中使用的功能层次不一致时,固定的单元层次会导致失效,类似地,尽管通过包含诸如触发器的中等复杂器件,多功能结构单元减轻了布线任务,但可达到的电路密度受设计中的低级动能单元的数目的直接影响,因为无论如何简化,它们都将消耗一个中等复杂的中等尺寸单元。而且,当由于所有可用布线路径的约定而使可用逻辑元件不能接触到其它逻辑单元,或者优选的布线路径不能接触特定的逻辑单元时,把面积划分成逻辑单元区和布线路径区也能导致失效。
根据本发明的门阵列单元的优选实施方案,包含一个具有精心定义功能的核心元,它可以用做逻辑系统中的积木块而不引入明显的配置或者使布线无效。如本领域中众所周知,只用NAND门或只用NOR门可以产生任何逻辑器件。然而,从诸如NAND门或NOR门的核心简单门单元的结合而产生的设计,需要一定数目的布线路径。如上所述,从复杂多功能单元产生的设计经常使一定数目的门未被使用,每次诸如NAND或NOR功能的低级功能被放置在一个复杂多功能单元中以实现低级功能。因此,门阵列单元的优选实施方案包含足够的功能复杂性以使单元之间所需的布线最少,还提供一个功能上使未用的低级功能逻辑元最少的核心。
图1示出了根据本发明这一情况的门阵列单元100的范例逻辑图。单元100包含4个可编程的组元:多路器110、120和140、以及搜索表130。多路器110、120和140中的每个分别有多个输入101、102和103、以及一个单一输出111、121和141。每个多路器的编程控制决定多个输入中的哪一个与输出相连。通常有多种技术可用来对多路器进行编程。熔丝连接可以用来将各个输入连接到输出或从输出断开连接;旁路晶体管能形成由可编程存储器件控制的开关;同样,电可擦除晶体管能够形成可编程开关,等等。
多路器110、120的输出111、121形成到两输入搜索表130的输入。对搜索表130进行编程控制以产生输入逻辑值四个组合的每个的所需输出131。即,例如为实现AND功能,相应于1-1输入组合的表入口被编程至逻辑1,相应于另三个输入组合(0-0,0-1,1-0)的每个表入口被编程至逻辑0。因为所有四个输入组合只有一个可编程的结果输出,故包含那些通常被描述成具有反相输入的所有逻辑功能是可达到的。进一步讨论,图3示出了多种编程控制逻辑功能。因此,如所示,多路器110和120以及搜索表130的编程控制提供了任何输入101和任何输入102的任何逻辑组合的实现。
把多路器140编程选为输出141,两个逻辑输入152’和153’中的一个,即固定逻辑1值。如下面进一步讨论,输入152’的153’相应于近邻单元的中间输出信号,并方便交叉耦合门和级联门的形成,它们对诸如触发器,加法器,计数器等的多种更高级的逻辑块来说都是普通的。
NAND门150组合搜索表输出131和多路器输出141以形成中间输出151。反相缓冲器160把中间输出151反相形成单元输出161。因为NAND门150普遍用在级联门布局中,为方便参考和理解,此处称它为级联门150,而它的输出被称为级联输出151。
图1中分别示出了在级联输出151和单元输出161处的扇出箭头151-153、161-163。根据本发明,这些扇出箭头用来说明每个单元100的输出151、161被预先穿线以提供其它单元的输入101、102、103。图2阐述了多个单元250、251、260、261、270和271的范例预先穿线结构。相应于图1中单元输出节点161的单元输出260,在图2中标记为210,并提供近邻单元261的输入。这个单元输出210也被预先穿线来提供分别到单元251、271、250和270的输入211、212、213、和214。用同样的方法,单元260的级联输出220被预先穿线以分别提供上面所提到的到单元250和270的级联输入221和222(图1中的节点152’和153’)。根据本发明,门阵列包含多个重复单元,它们每个都有到其它单元的预先穿线扇出。单元260的范例扇出只是为了阐述,根据本公开内容,对于本技术领域中的普通技术人员来说,各种变通安排是显而易见的。一般说来,近邻左右上下单元的预先穿线方便了诸如锁存器和触发器的低压缩和中级逻辑块的产生。图2中所阐述的对角单元也被预先穿线,且如215和216的扇出线所示,较远分开的线也被预先穿线。用同样的方法,从另一个单元到单元260的每个输入被预先穿线,如从单元250的级联输出210和单元250的输出240节点的输入231、241所阐述。在优选实施方案中,除了中间近邻单元,单元输出节点210、240的扇出延伸到左,右,上,和下每个方向中单元之外的2、4和8单元。
图3阐述了图2中单元的范例预先穿线扇出如何方便更高级逻辑块300的产生,它是一个D触发器,使用四个单元301-304。如上所述,为了产生逻辑块300,对每个逻辑单元301-304中的每个多路器和搜索表进行编程,以实现预期的逻辑功能。这个编程由图3通过在每个逻辑多路器311-314、321-324、和341-344之内连线,和通过相应于每个单元301-304中的搜索表331-334的真值表331’-334’予以解释。亦即,在单元301中,第一个多路器311把D 391输入连接到搜索表331的第一个输入,第二个多路器321把CLK 392输入连接到搜索表331的第二个输入。
搜索表331实现由真值表331’描述的逻辑功能。按照惯例,上面的多路器在真值表中称为I1,其余的输入是I2。在这个范例中,真值表331’相应于一个简单的OR功能。因此,多路器311和321以及搜索表331的编程控制提供D 391(I1)和CLK 392(I2)的OR。用类似的方法,多路器313和323以及搜索表333的编程控制提供了CLK 392(I2)与D 391(I1)反相的OR。多路器312和322以及搜索表332的编程控制提供了单元301的输出381(I1)与CLK 392(I2)反相的OR。而多路器314和324以及搜索表334的编程控制提供了单元303的输出383(I1)与CLK 392(I2)反相的OR。未示出的是,CLK信号392可由门阵列的每个单元100内预先穿线以便能够存取的全局时钟信号来提供。D信号391-392可来自其它单元,并可作为其它单元的输出扇出被提供到每一个单元301、303。
图3中阐述了多路器341-344的编程控制,如提供交叉耦合门。即,多路器341和343的编程控制提供级联门351和353的交叉耦合,而多路器342和344的编程控制提供级联门352和354的交叉耦合。单元302、303的输出Q398,Q’399可分别显示为一般正边沿触发的D触发器的输出,它具有时钟CLK 392和数据输入D 391。注意,根据本发明,每个单元的级联输出到每个上面和下面近邻单元的级联输入的预先穿线提供了具有最小互连通道延迟的锁存器的有效而紧凑的实现。
于是,通过定义一个能够做为一类应用积木块的核心功能,如传统时序逻辑设计的范例单元100的可编程半锁存器功能,复杂的设计能够以最少的单元之间布线数目和最少的未用低级功能逻辑数目得以生成。用同样的方法,图11中的范例单元900是包含神经单元功能核的门阵列的实施方案,特别适合神经网络设计。神经单元900包含多个输入多路器910、920…,供选择到可编程权重表930的多个输入信号911、921、…。与神经网络工艺相一致,每个输入都被赋予一个在训练任务中能被调整的权重。可编程权重表930的输出951是相应于逻辑值“1”的每个输入信号的编程控制权重之和。这个和是多位值,如图11中总和输出端951上“M”位宽显示所示。根据本发明,与单元100的级联输出152、153类似,权重表930的和输出951扇出至近邻单元(未示出),如M位输出线952、953所示。阈值探测器960接受951和输出,以及来自近邻单元952’、953’的和输出。基于输入和值951、952’和953’,控制970将参数提供给阈值探测器,以判断何时“发射”。例如,把控制970编程以便控制在阈值探测器中使用和输入952’还是使用和输入953’。例如,如果总共有5个输入信号911、921、…,近邻输出和信号952’和953’允许直到10个附加输入信号来实现这个神经单元900的发射。如果只有5个或者更少的输入信号被连接到这个神经单元900,则可编程控制970被编程用来控制阈值探测器忽略近邻和输入952’、953’。用同样方法,把控制970编程以控制阈值,以便阈值探测器用来判断是否维持发射信号961。根据本发明,输出发射信号961把962扇出到其余邻近和远邻近单元,与单元100的输出160类似,并形成其它单元900的输入多路器910、920的输入。用这种方法,多个单元900能够有效地构造形成神经网络。基于典型地与传统神经网络设计相联系的目标结构约束,可以判断输入多路器910、920的数目、扇出952、953的延伸、到阈值探测器960的和输入952’、953’的数目、和信号951、952’或953’的位宽度、以及神经单元900的其它参数。在优选的实施方案中,提供5个输入多路器910、920,每个有5个输入,而和输出951是8位宽,阈值探测器960接受3个和输入951、952’或953’。注意,因为权重表930是可编程的,并且控制970是可编程的,故可以通过单元900实现其它功能。尤其,通过把权重表编程控制至除一个以外的所有输入为0,给所选输入赋予最大权重,当这个编程控制的最大的权重以输入信号被接受时,将控制器970编程以维持发射信号961,单元900能够被编程为穿过扇出器件。用这种方式,按照要求,单元900的输出961能够使用被连接达及远处单元900的其它单元900之一。
在优选的实施方案中,单元“布局”程序和门阵列有关。单元布局程序把门阵列的单元放置到设计的每个逻辑元处,使每个被放置单元都有合适的程序。根据本发明,通过允许诸如图3中的D触发器的预先定义逻辑块,或者宏单元的定义,每个单元输出的预先穿线扇出以及级联输入和输出端连接的预先穿线,使布局和编程任务方便。如上所做的详细说明,当设计中含有D触发器时,单元布局程序只对四个近邻单元100布局并为每个多路器和搜索表做适当编程控制。注意,这可以使诸如触发器的较大逻辑块紧凑而有效实现,而不需对所有的门进行固定的预先定位,直至这种较大的块真正在设计中被采用,为了实现较大逻辑块,这是需要的。例如,图2中所阐述的六个单元能够编程为包含一个D触发器,或者不包含,这取决于本设计是否需要D触发器的放置和产生。与在每个单元中包含预先构造的D触发器的传统的较大颗粒门阵列单元结构相反,例如,如果布图程序所要完成的特殊设计不需要D触发器,则图3中包含D触发器的四个单元中的每个都能够设置以执行其他的任务。用同样的方法,通过放置近邻单元900和适当地对970控制进行编程,使阈值探测器960根据这些多个输入而发射,单元900使具有大量输入的神经单元得以有效布图。相反地,只有几个输入的神经单元可以被布置到单一的单元900,并适当地对控制器970编程,使其忽略近邻的单元,从而允许近邻的单元被放置到其它的神经单元处。
根据本发明的另一种情况,尽管图2和3的布线图暗示了单元之间布线通道的应用,但是消除了存在于每个单元中的布线和传统的布线通道。图4显示了根据本发明的单元400的集成单元布线版图,而图5和6显示了单元接头处的布线结构,它不需预先定义布线通道。因为逻辑单元可以放置到图5中任何物理单元400处而不必考虑预布线区域,邻接单元的相邻区域被称为“单元海”。图10显示了门阵列800的范例实施方案,根据本发明,门阵列单元800拥有相邻单元810的区域。图10中还显示了传统的输入/输出单元840和其它范例电路块820、830。
图4中显示了单元400的输出节点Q 461,它相应于图1中逻辑单元100的逻辑输出节点161。为了方便参考和理解,图1中的逻辑单元100此处被用来阐述本发明互连布线方面的原则。由后来的公开内容来看,正如本领域中的普通技术人员所知,诸如神经单元900之类的其它核心单元能够被类似地构造以实现本发明的这种情况。
连接到单元400的节点461的,是四部分线段461R、461U、461L、和461D,它们分别提供从节点461到右、上、左、和下方向的连接。跨过单元400引入的线的拐点提供接点461上的信号传输到近邻单元上的适当接点。例如单元400中的线461D与线471D垂直对准。线471D被连接到节点401A,它相应于图1的单元100的输入信号101。当这个单元400桥接到它下面的另外一个单元时,单元400中的在461D处的输出信号461经过其它单元相应的线471D和节点401A被连接到其它单元的输入信号101上。图6阐述了根据本发明的单元输出信号461到近邻单元的结果扇出。图6中黑实线阐述了当单元桥接时被电连接到节点461的线;带阴影的单元阐述了每个被扇出连接的单元。例如,沿着向下的路径,单元400A的节点461,在471处被连接到下边紧邻单元400B的输入节点,在481处被连接到对角近邻单元400C,而在491处被连接到较远单元400D。如上面所说,例如,预先穿线布线能够延伸超过491而连接到远处单元即4、8等单元,它们都是400A以下的单元。注意每个单元的每个输出节点的扇出被类似地预先穿线,如以相应于单元400X的输出节点461’的节点471’、481’、491’所阐述;连接到节点461的黑实线只是被提出来用做说明的。相应于图1中逻辑单元100的级联输出152和153以及级联输入152’和153’的图4中单元400的预先穿线节点452、453、452’和453’,提供了近邻垂直单元之间的级联连接,但是为了清晰起见,在图6中没有示出。
注意,如图5和10所示,通过提供桥接单元的相邻区域,对于门阵列来说并没有预先定义结构的层次。亦即,在物理约束区域和四个象限中的区域等等之中没有单元。然而,通过预先定义能够实现诸如D触发器300或者是诸如同步计数器的更加复杂功能的逻辑功能层次的单元的安置,由本发明可以获得层次布局的优势,因为版图层次是按命令产生的,它对应于被编程控制的专门设计的要求。亦即,由用户所定义的在门阵列逻辑设计中使用的每个D触发器或者任何宏单元,在可编程门阵列中具有其相应的宏版图结构。
单元布线和逻辑的变通结构对于本领域中的普通技术人员来说是显而易见的。例如,图7阐述了类似于图1中单元100的单元500。单元500包含两个附加的缓冲器510、520和一个三输入可编程多路器550,该多路器选择是使用缓冲器510、520之一的输出511、521还是使用级联门150。当选择级联门150时,单元500的操作与上面所讨论的单元100相同。选择缓冲器510和520之一,使所选输入信号101、102分别通过多路器110、120实现直接传输到输出缓冲器160。这样,单元500能够被构造成提供重新构成和传输输入信号101、102到输出161的“中继器”的功能,与上面描述的单元900的通过扇出功能类似。这个中继器功能能够被用来分散诸如局部时钟发生器的高扇出门上的负载,或者用来避免信号沿着长的路线传输的衰减。
图8阐述了根据本发明的范例布线路径,它应用前面提到的单元500的中继器功能,它沿着延伸的距离传输信号。图8中假设在单元600的输出节点661产生的信号601需要跨过在位置601A、601B和601C上可用的多个单元传输。布线605的第一段利用了单元600的输出节点661的扇出路径,到达位置601C。在单元610处,从输出节点661的布线路径终止。如单元610处的虚线所示,单元610被构造成中继器单元,把信号601传输到单元610的输出节点。从单元610的输出的预先穿线的线段615,在单元620处终止,它也被构造成中继器单元,以便把信号601传输到单元620的输出节点。预先穿线的布线线段和中继器单元的这一时序通过中继器单元630、640,被传送到位置601A,并通过中继器单元630、650、660,被传送到位置601B。于是,用这种方法,只要在每个中继器单元处恢复,信号能够通过门阵列传输而不必使用专门的布线通道。注意,在优选的实施方案中每个单元输出的预先穿线扇出延伸到8个单元或者更远的距离,因此,中继器单元位置的数目要比图8范例所示的明显更少。
前面只阐述了本发明的原则,因此,本领域中的技术人员可以理解,能够设计各种各样尽管此处未明确描述的体现本发明的原则并因此在本发明的构思和范围之内的安排。例如,图9阐述了一种变通的单元设计700,它提供了改善的中继器单元性能。与图7中的单元500相比较,相比于单元500的三个输入的多路器550,单元700有一个7输入的多路器750。多路器750的附加输入是来自被距离长的水平或者垂直距离分隔的各单元的输出信号,如由更远上边701、更远右702、更远下703、和更远左704输入信号标志所示。在单元700中没有单元500的缓冲器510和520,单元700中的输出缓冲器760是非反相的。就象在本领域中普遍的那样,非反相缓冲器760包含两个反相器(未示出):第一个反相器以一定的尺寸设计使在输入线701-704上有最小负载,而第二个反相器以一定的尺寸设计向输出线761提供足够的驱动能力。
其它的变通也是明显的。例如,门阵列单元100的特殊逻辑构造可以用例如NOR门作为级联逻辑器件150,或者是另外一个可编程搜索表作为级联器件150来进行修正。同样,只要级联缓冲器有足够的驱动容量来驱动输出节点扇出,输出缓冲器160就能够是一个“透明的缓冲器”,或仅仅是线。从本发明来看,对于本领域中的技术人员来说,这些和其它的结构的修正是显而易见的并包含在下面权利要求的范围之内。