电阻开关阵列的路由和编程的制作方法

文档序号:15366136发布日期:2018-09-07 22:01阅读:166来源:国知局

本发明涉及电阻开关阵列的路由和编程。



背景技术:

电阻开关元件,例如使用导电桥的电解元件,被提出作为配置随机存储器(CRAM)和在具有可编程元件的集成电路(IC)中普遍存在的传输门晶体管开关的替代。这种IC的一个实例是现场可编程门阵列(FPGA)。电阻开关元件不必要限制为导电桥器件,并且本文使用的术语“电阻开关”和“可编程电阻开关”通常代表可配置为执行至少两种模式中的一种的电阻元件,这两种模式包括高阻抗模式(其中的电阻元件实质上相当于开关的OFF(关闭)状态)和低阻抗模式(其中的电阻元件实质上相当于是开关的ON(开启)状态)。

在过去的FPGA路由结构中,选择电路的各级(例如,多路复用器或“复用器”)被用于路由主路由线(例如,跨越逻辑区,例如逻辑阵列模块或者“LAB”,的横向通道线和纵向通道线)和每个LAB内的逻辑元件输入之间的信号。例如,在一些结构中,进入LAB的复用器的第一级(有时指LAB输入复用器或“LIM”)可被编程为从子路由线中选择信号,然后,被LIM选择的子线可以通过编程第二级复用器(有时指逻辑元件输入复用器或“LEIM”)被选择。独立的复用器(有时是指驱动器输入复用器或“DIM”)选择来自逻辑元件的输出,并将其提供给路由线驱动器。在一些实现中,DIM除了从本地LAB输出中选择输入外,也可以从其他路由线中选择输入信号。

用于选择电路,例如上如描述的LIM,LEIM和DIM,的可编程开关经常与和传输门晶体管联接的CRAM元件一起实现,CRAM元件保持“1”或“0”状态以控制晶体管的开启或关闭。

用于编程选择电路和用在编程逻辑元件中的CRAM元件通常包括跨越FPGA编程逻辑区域的可编程阵列。在一个典型的实现中,该阵列可一次编程一列。在一个编程周期中,选择一列(基于地址寄存器中的地址数据),然后将已加载到数据寄存器元件中的行编程数据移到已选列的CRAM元件中。在编程区域内,CRAM的整列在单个时钟周期内被编程,这种编程需要相对少的功率。通过使用单个驱动器连同地址寄存器选择该列。

鉴于CRAM元件和相关的传输门晶体管的管芯成本,现有的布线结构通常只为进入LAB逻辑源的LAB附近少量的子路由源提供潜在连接。例如,在一些实现中,尽管基本上LAB附近的横向和纵向通道内的所有路由线都被连接到LAB中的LIM输入端,但是LAB的LIM开关总数仅提供可能的LIM输入到输出连接的大约5%。

在这个背景下提出了本发明实施例。



技术实现要素:

尽管已被实现的实例电路包括几百甚至几千个电阻开关,但是实际使用可编程电阻开关的现场可编程门阵列(FPGA)将使用电阻开关阵列,其元件数量比迄今为止实例电路中包含的元件数量大几个数量级。这种基于电阻开关阵列的FPGA以前还没有被实现。

与先前FPGA中使用的可配置随机存取存储器(CRAM)元件和通路晶体管开关的组合相比,电阻开关提供的优势在于尺寸比较小。另外,他们可以位于进程堆栈中的高位,并且有效地不占用管芯上的额外区域。因此,在FPGA中的密集阵列中使用大量的电阻开关是有效的。这可以使路由源和可用于可编程选择的逻辑元件之间的潜在连接的百分比提高。一方面,本发明实施例通过使用单级可编程选择电路,提供出入逻辑区域(例如,逻辑阵列模块或“LAB”内的逻辑元件)的路由。在一个实施例中,该单级可编程选择电路包括单个选择阵列,在这个选择阵列中,任意输入均可被选为任意输出。在另一个实施例中,单级可编程选择电路包括两个或更多并行的选择阵列。在这个实施例的变体中,一些但不是全部路由源的集合被提供给该两个或多个并行选择阵列的每一个。在一个实施例中,逻辑区域两侧上的路由通道提供单级可编程选择电路的输入,该逻辑区域三侧上的路由通道接收穿过可编程选择电路的来自逻辑区域的输出。

FPGA中的电阻开关(用于选择电路和逻辑元件)可以是与编程电路连接的大电阻开关阵列的部分。编程大电阻开关阵列存在挑战,而编程CRAM元件阵列没有。通过在足够时间周期内,在电阻元件中通入足够的电流来编程电阻开关(本文有时是指“正在被编程”或简单地指“被编程”)。用于编程的列线上会被引入大量负载,尤其是,在同一列中如果大量开关处于“正在被编程”状态。由于到远离列线编程驱动器的行中电阻开关的连接,所以这种负载会导致带有压降的沿列线的不一致电压。这会造成编程这种开关时需要更长的编程时间。

在本发明的一个实施例中,编程电路被提供以使被编程列与FPGA的编程区域内的多个本地区域中的本地列驱动器联接。在一个变体中,本地区域内的每个本地列编程驱动器(用于驱动本地列线)与提供电源电压的本地区域功率缓冲器联接。

在本发明的另一个实施例中,行或列编程驱动器包含电流源驱动器。例如,在一个实施例中,利用电压源编程驱动器给列线提供编程电压,而在行线上使用电流源驱动器作为编程驱动器可以有助于将流经电阻开关的电流维持恒定,即使这些开关进一步低于列线并因此从列线中接收到较低电压水平。

在另一个实施例中,提供了一种使用一个或多个编程向量编程开关的方法和相关的计算机程序产品,以使要被编程开关的整列都被编程,若需要,可以在多个编程周期中逐步地被编程。在一个实施例中,特殊的功率约束被用作确定编程向量的部分。在一个特殊的实施例中,当考虑功率成本违反该约束,则一种方法可以被适配以减少向量的个数,该功率成本依赖于被编程行而变化。

下面将更全面地描述这些和其他实施例。为了说明起见,将参考下面的图说明本发明特定实施例的几个方面。

附图说明

图1根据本发明实施例图示了部分集成电路(IC)中的路由和逻辑电路。

图2图示了图1的其中一个逻辑阵列模块(LAB)的路由电路的进一步细节。

图3图示了图2的选择电路开关阵列的进一步细节。

图4图示了图2图示的路由电路的另一个替代实施例。

图5根据本发明实施例图示了用于编程穿过多个本地编程区域的电阻开关的编程电路的高级视图。

图6根据本发明实施例图示了用于编程电阻开关网格的电路的进一步细节。

图7图示了用于生成编程电阻开关的编程向量的方法,该方法根据本发明实施例获得。

图8的表格图示了在给定功率约束下,应用图7的方法生成的用于编程电阻开关列的样本编程向量。

图9是另一个表格,图示了在另一给定功率约束和根据电阻开关属于哪一行而计算的不同功率成本的情形下,应用图7的方法生成的用于编程电阻开关列的样本编程向量。

图10是根据本发明实施例图示了一种包含具有电路的现场可编程门阵列(FPGA)的典型数据处理系统。

图11显示了用于执行包含在计算机程序产品中的指令代码的计算机系统实例。该计算机程序产品根据本发明实施例获得。

具体实施方式

下面的描述使本领域的任何技术人员能够制造和使用本发明,本文也提供了本发明详细的应用和要求。对于本领域的技术人员而言,对典型实施例的不同修改版本读起来是显而易见的,本文定义的一般原理在不偏离本发明的精神和范围的情形下,可被应用到其他的实施例和应用中。因此,本发明并不局限于实施例中显示的内容,而是与本文公开的原理和特征一致的最大范围。

图1根据本发明实施例图示了在部分集成电路(IC)1000中的路由和逻辑电路。路由电路包括纵向通道101-V0,101-V1以及101-V2和横向通道101-H0。在具体的实施例中,每个这些通道可以包括短于整个通道长度的多条线路,这些通道的起始点和终点是交错的。IC部分1000还包括排列为包括LAB 10,LAB 11,LAB 12的逻辑阵列块(LAB)(注意:术语“LAB”通常包括逻辑区域自身——一组逻辑元件——和与逻辑区域相关的路由接口)的逻辑区域。在这个实例中,仅为了图示方便,每个纵向通道包含100条单独的纵向路由线,图示的横向通道包含200条横向线。每个通道内的纵向和横向路由线跨多个LAB。显示的输出线104-0和104-1用于相邻逻辑区域之间的信号的本地传输。例如,线104-0提供了从LAB 10到LAB 11的信号路径,而线104-1提供了从LAB 11到LAB12的信号路径。

图2图示了用于图1LAB11的路由电路的进一步细节。如图2所示,LAB11包括选择电路开关阵列201和逻辑元件202。注意:术语“选择电路”一般指适于选择性地连接输入和输出的任意电路。有时,本文用的术语“多路复用器”或“复用器”是指能将任意输入映射到一个或多个输出的电路。根据本领域的一些使用情况,“复用器”被更严格的定义为在多个输入之间选择,具有单输出的选择电路(而“多路分配器”是在多个输出之间选择,具有单输入的选择电路)。从这个意义上来说,本文中用的术语复用器有点更宽泛,该复用器有时包括纵横开关(虽然没有被构造成阵列的一些复用器技术上不是纵横开关;因此,一种特殊的纵横开关可以简单地被认为是一种本文所使用的复用器类型)。然而,复用器通常输出比输入少,而纵横开关具有相同数量的输入和输出(但也可以是输出数小于输入数)。为了避免这种定义上的问题,由于在最宽泛的方面这些术语与本发明的精神和范围无关,通常使用较广泛的术语“选择电路”定义本发明的实施例,尽管偶尔会使用术语“复用器”描述具体的实例。

选择电路开关阵列201可被配置为为155个输出中的任意一个(或者更定)选择340个输入中的任意一个。如图所示,开关阵列201的输入包括:来自纵向通道101-V1中的100条纵向路由线的100个输入;来自横向通道101-H0中的200条路由线的200个输入;来自20个输出104-0(来自图1中相邻的LAB10)的20个输入;以及来自20根提供逻辑元件202(没有显示单个逻辑元件)的输出的线路103的20个输入。选择电路开关阵列201提供75个输出作为路由线路101的输入驱动(在这个实例中,该路由线路包括图1中图示的横向通道101-H0中的一些线路和纵向通道101-V1中的一些线路),并提供80个输出作为逻辑元件202的输入。特别地,如果每个横向和纵向通道包含的线路逻辑长度为4(即跨四个LABs),则线路总数的1/4(200个横向通道线路和100个纵向通道线路,即,总共300根线路),或75根线路需要在每个LAB位置上被驱动。

如这个详细的实施例所示,选择电路开关阵列201被认为是“单级”选择电路,因为在它的输入和输出之间只发生一级信号选择。换句话说,155个输出是从340个输入中选择的,而没有使用在最终选择之前影响初始输入的中间选择的两个或更多不同的串联连接的选择电路。例如,通过对比,如果一个选择电路由串联的两个选择电路的组合替代实现,比如,从340个输入中选择225个输出的第一电路,从第一电路的225个输出中选择155个输出的第二电路,这样的组合选择电路被认为是两级选择电路而不是单级选择电路。

图3图示了图2的选择电路开关阵列的进一步细节。更具体地,开关阵列201包括编号从3010,0到301339,154(在这个实例中,开关总数为52700)的多个电阻开关。每个开关301将一个输入驱动器321(作为特殊复用器的输入)联接到输出驱动器322(作为特殊复用器的输出)上。输入是否被选为具体的输出取决于连接输入和输出的开关301是否被编程(本文是指“正在被编程”或简单地指“被编程”)。例如,为了选择IN0作为OUT0,则开关3010,0正在被编程;选择IN2作为OUT1,开关3012,1正在被编程;以及选择IN339作为OUT154,则开关301339,154被编程。图3没有单独显示编程电路的每行和每列。

图4图示了图2中图示的LAB的替代实施例。更具体地,图4图示的LAB11'包括选择开关阵列401A和401B。如图所示,开关阵列401A接收:来自LAB11'的逻辑元件402的20个输出的输入,来自相邻LAB10中的逻辑元件的20个输出的输入;来自H通道101-H0的200根线路中的120根的输入,以及来自V通道101-V1的100根线路中的60根的输入。类似地,开关阵列401B接收:来自LAB11'的逻辑元件402的20个输出的输入,来自相邻LAB10中的逻辑元件的20个输出的输入;来自H通道101-H0的200根线路中的120根的输入,以及来自V通道101-V1的100根线路中的60根的输入。

在图示实例中,相同的来自LAB11'的逻辑元件402的20个逻辑元件输出被提供给开关阵列401A和开关阵列401B。同样地,相同的来自相邻LAB10的20个逻辑元件输出被提供给开关阵列401A和401B。来自H通道101-H0的重叠但不相同组的线被提供给开关阵列401A和401B作为它们的输入。更具体地,在这个实例中,H通道线包括编号自101-H00到101-H0199的线。线101-H00-119被提供给开关阵列401A,作为其输入,线101-H080-199被提供给开关阵列401B,作为其输入。同样地,来自V通道101-V1的重叠但不相同组的线被提供给开关阵列401A和401B作为它们的输入。更具体地,在这个实例中,V通道线包括编号自101-V10到101-V199的线。线101-H00-59被提供给开关阵列401A,作为其输入,线101-H040-99被提供给开关阵列401B,作为其输入。

开关阵列401A提供37个输出作为与路由线路联接的驱动器的输入,并提供40个输出作为逻辑元件402的输入。开关阵列401B提供38个输出作为与路由线路联接的驱动器的输入,并提供40个输出作为逻辑元件402的输入。

基于设计的考虑,通过比较图4实施例相对于图2实施例的效益和成本来选择具体环境中的最佳实现。对于给定的开关阵列,开关的数量等于输入量乘以输出量。因此,图4实施例通过提供两个较小平行布置的开关阵列,容纳较少的开关总数。具体地,图4中的阵列可以利用220*77+220*78=34100个开关总数实现,所需的开关数比图2实施例所需的开关数少约35%。

然而,在图4的布置中,由于每个开关阵列(401A和401B)提供到达不同组源的输出,并且因为一些,但不是全部V通道和H通道的路由源都被提供为两个开关阵列的输入,因此一些连接不能被选择。然而,一些源是与两个开关阵列都连接的。上文描述的这个具体实例中,被路由到LAB11'的200个H通道线中的40个(线101-H080-119)都被提供为开关阵列401A和401B的输入。同样地,被路由到LAB11'的100个V通道线中的20个(线101-V140-59)都被提供给开关阵列401A和401B。由于很多路由输入(一些V线和H线输入,以及所有来自LAB11'和LAB10中的LE输出的输入)都被提供给开关阵列401A和开关阵列401B,这两个开关阵列总共的输入数(总输入:220+220=440)大于图2实施例的开关阵列201具有的输入总数(总输入:340)。这导致更多列需要被编程,(从图3中可以看出,更多的总输入数需要更多的电阻开关总列数),因此,需要更大量的列编程驱动器(列编程驱动器将在图5的文本中讨论)对得到的编程网格(注意:尽管本文中在这里提到的“开关阵列”是指在IC的操作模式中的特殊选择电路的背景下,但是由于编程模式的缘故,在本文图5-9的背景中描述的进一步细节中,在各个选择电路开关阵列中的开关是更大型被编程开关阵列的部分)编程。

从占有IC的空间来说,电阻开关自身的成本相当低。因此,图2的实施例对很多实现具有吸引力,因为它增加了具体源之间的连接选择数。然而,由于编程电阻开关需要很大功率(将在图5-9的背景中进一步描述),在一些实现中,以牺牲接入和接出不可用的逻辑区域的源连接为代价,限制开关的总数是有利的。图4实施例提供了一个实例。然而,对于单个LAB包含有两个或多个平行阵列的替代实施例,在不超出本发明精神和范围情形下,可以提供的路由源到LAB的连接的重叠度高于或低于(或不重叠)图4图示实例的重叠度。

图5根据本发明实施例图示了用于编程跨多个LAB本地区域的电阻开关的编程电路的高级视图。具体地,图5图示了部分本地LAB区域110和120。本地LAB区域110包括LAB 0,LAB 1,LAB 2,LAB 3,和LAB 4。类似地,本地LAB区域120包括LAB 5,LAB 6,LAB 7,LAB 8,和LAB 9。为便于图示,图5只图示了跨本地区域的LABs的一列。电阻开关301被布置以形成多列电阻开关,每列电阻开关与列线314联接,列线314被本地区域内的列线编程驱动器311驱动。在线316上提供了地址控制,并通过附加电路控制地址寄存器C0,C1,C2,C3(每个寄存器对应被编程电阻开关阵列中的一列)和其他没有单独显示的地址寄存器。当电阻开关的具体列被编程时,地址寄存器为该具体列提供列选择编程信号,并通过列线编程驱动器311在列线314上提供编程电压。在线313a和313b上提供编程控制信号。线313a上的信号控制地址寄存器,而线313b上的信号通过用于所选列的编程驱动器311使能列线314上驱动的编程电压。

通过各自的线318和本地列驱动器311将编程电压传送到各自列线314上。本地区域功率缓冲器312提供本地缓冲或调节通过线317传送的电源电压,从而为本地编程区域110和220中的每个本地列驱动器311提供电源电压。通过如图中所示的方式提供编程电压信号和电源电压的本地缓冲,从而保持足够的在编程区域内沿整列电阻开关编程所有电阻开关的编程电压水平。

图6图示了用于编程电阻开关网格的电路的进一步细节。具体地,显示了更大电阻开关网格的4X4部分600(已在图5中表示)和用于编程包括已图示的开关的行和列的行与列编程电路,下面将进一步描述。

图示的编程电路包括每一行的行驱动电路360。每个行驱动电路360包括电流源驱动器361和使能晶体管362。另外,还图示了行数据寄存器R0,R1,R2和R3。在执行编程操作时,每个这些寄存器被加载为“1”或“0”编程位,用来表示具体行中的开关是否是“正在被编程”。例如,在编程周期中,如果行数据寄存器R2被加载为“1”(即,任何二进制高电压信号水平),则该信号将会被施加到与寄存器R2联接的使能晶体管362的栅极。接着,这会导致相应地电流源驱动器361驱动相应行线324上的电流。

在编程过程中,其中一个地址寄存器(例如:C0,C1,C2,C3)中的数据表示在编程周期中被选为用于编程的列。对于该已选列,相应列线314的驱动器311将要在该已选列线314上(也就是说,在被编程列中)驱动高电压。例如,如果列地址寄存器C1的值表示它的列被选择,将会在列C1的列线314上驱动高电压(如图所示,本地区域110中的线314和本地区域120中的线314),并且该列的行数据寄存器保持“1”的行中的电阻开关将会在该编程周期中(例如,对应行寄存器R2的行中的电阻开关)被编程。具体地,用于已选列的本地列编程驱动器和行编程驱动器与将要被编程的电阻开关联接,而且这些驱动器工作从而维持电阻开关两端的编程电压差。

在该图示实施例中,特别地,如果很多电阻开关与单个列线联接,以及如果在相同编程周期内,很多这些开关被选以被编程,则列线314在编程过程中会承受很大负载。因此,沿线电压水平会产生变化,沿着列线某一点的电压随着该点与本地编程驱动器311的距离的增加而减小。基于这个原因,一方面,本发明实施例使用电流源361(而不是电压源)作为部分行编程驱动器电路360。这有助于将流经每个正在被编程的电阻开关的电流维持恒定,即使提供的电压沿列线发生变化。这允许在驱动器提供较大电压差以补偿沿列线的电压降,同时将要被编程的电阻开关两端的的电压差和流过要被编程的电阻开关的电流限制在合适水平。例如,在一个实施例中,行驱动器和列驱动器之间提供的电压差大于编程电压。然而,驱动行的电流源将正在被编程的电阻开关两端的电压差和流过的电流限制在合适的编程电压和电流水平。

在本实施例中,提供的电压源编程驱动器用以驱动列线,而提供的电流源编程驱动器用于驱动行线。然而,在这个方面与本发明一致的替代实施例中,在列线上提供电流源编程驱动器,并在行线上提供电压源驱动器。另外,在一些这种替代体中,电压源行编程驱动器可以简单地接地或以其他方式在行线上提供“低”电压值。

此外,在其他方面与本发明实施例一致的一些实现中,行与列编程驱动器都可以包含电压源驱动器,其中一个提供高电压源,而另一个提供低电压源。例如,如果编程区域被分成图5实施例所示的本地编程区域,则每个列线可用于编程足够小量的电阻开关,从而编程电压在沿线的长度上被保持足够恒定,而不需要电流源驱动器作为行或列编程驱动器。

尽管在电阻开关的行和列与逻辑区域的行和列(其中,例如,“横向”路由通常在行的方向上路由,“纵向”路由通常朝向跨多行的方向和/或在列的方向上路由)的上下文中描述了本发明实施例的各方面,但必须理解,由于行和列的说法是相对器件的方向而言的,器件仅旋转90度,行和列就会互换。另外,尽管术语“行”和“列”通常与物体的直线排列有关,但替代实施例在不背离本发明的精神和范围情形下可以采用的行或列排列是:曲线型,或部分曲线型,或偶尔有粗糙面或裂口,或没有跨IC整个区域。

图7图示了符合本发明实施例的方法700。因为电阻开关需要巨大的功率水平来完成编程,所以需要为每个编程周期实行功率约束。反过来,这会导致限制在单个编程周期中被编程的电阻开关数量,因此,需要多个编程周期来编程电阻开关的单列。当这种编程周期功率约束成为必要或需要时,方法700提供了完成电阻开关阵列编程的步骤。

如本文使用的,术语“编程向量”简单指,在应用一个或更多个功率约束条件下,被加载到在编程周期中使用的行寄存器上的一组编程数据值,从而在区域被编程电阻开关列中的行。(本文中,此处的区域表示“功率约束共享区域”)编程电阻开关列中的行。参考图5实施例,列可以跨多个本地区域,因此在同列内沿着多个列线会有电阻开关。在图7图示的方法和图8-9图示的样本编程向量的上下文中,为便于说明,如果具体行中的开关被编程,则假定编程向量包括“1”值,而如果没有被编程,则包括“0”值。编程周期内的功率水平通常取决于被编程的开关数量,因此,在编程向量中的“1”会影响具体编程周期中的总功率成本。在典型的用于编程现场可编程门阵列(FPGA)的现有方法中,配置元件的列(该配置元件经常但不必需,被用于实现静态随机存储器或“SRAM”单元)在单编程时钟周期(假定该行编程数据已经被加载行数据寄存器元件中)中被编程。相反,如果必须给定功率约束,则方法700提供多编程向量,该多编程向量可用于在多编程周期中编程单列开关。

步骤701识别功率约束共享区域列中的被编程位的组。步骤702初始化当前编程向量,置为0s,表示该方法这部分的起始编程数据向量,假定初始值只包含0s。正如该方法的进展,编程向量中的一些0s被设置为1s,若这样做不违反功率约束将进一步说明。步骤703选择被编程位的第一1-位(注意:本领域的技术人员有时为方便将此处“1-位”简单理解为本文中的位;尽管技术上,“位”可以指代值为1或0的位)。如果编程电阻开关的功率成本随行变化,则应当按顺序从成本最高位到最低位测试(这在本文的图9和相应的文本中进一步解释)被编程位(即,1-位)。步骤704确定编程已选位是否会违反预功率约束(导致相应电阻开关被编程)。若是,该方法进入步骤706,确定这些被编程位是否有更多位需要被检测。若步骤704的结果是否,则该方法进行到步骤705,将已选位加到编程向量上(即,编程向量中行为“0”的变成“1”)。另外,该位被从被编程位中移除(即,被编程位中的“1”被改为“0”)。然后该方法进入步骤706,正如刚才描述的,步骤706确定列中是否有更多被编程位还没有被测试。

如果步骤706的结果为是,则该方法进入步骤707,选择下一个1-位测试(若功率成本随行变化,读取下一个最高功率成本位,图9的上下文中将进一步解释),然后该方法回到步骤704。若步骤706的结果是否,则方法进入步骤708,输出编程向量。步骤709确定是否有更多1-位被编程。若是,方法回到步骤702,开始建立额外的编程向量。若否,该方法结束进入步骤710。一旦到达步骤710,已经被建立的一个或多个编程向量可被用于编程整列电阻开关。

图8显示的表800图示了在特殊功率约束下,实行方法700生成编程向量的一个实例。表800图示的建立编程向量所应用的功率约束包括两个简单的线性约束:规则1:在本地编程区域内(在图5的上下文中,表示在其中一个本地编程区域内—区域110或区域120,沿单个本地列线314的开关),一列中每周期功率成本不超过2个单位(为进行概念解释采用通用单位)。规则2是全局约束,在整个功率约束共享区域(在图5的上下文中,该区域的电源由全局列线317提供)中,每周期的功率成本不超过5个单位。在图8图示实例的上下文中,假定编程任意行中电阻开关的公里成本为1个单位。

图8实例中假定可用功率约束共享区域中有四个本地区域,并且,为了说明简单和方便,假定每个本地列区域包括10行电阻(一个实际的实现,单个本地区域可能包括更多行电阻,包含更多或更少本地区域)。具体地,图8假定第一本地区域80(行R0-R9),第二本地区域81(R10-R19),第三本地区域82(R20-R29)和第四本地区域83(R30-R39)。

表800的801列图示了用于编程的位组样本。若表格所示,行R1,R2,R4,R6,R7,R10,R14,R15,R18,R22,R25,R27,R31和R39中的电阻开关正在被编程。应用方法700和上述提到的功率约束(规则1:每个本地区域最大功率2个单位;规则2:整个编程区域总的功率成本为5个单位)生成初始编程向量,(“向量1”),如表800的802列所示。向量1编程行R1,R2,R10,R14和R22中的位,注意:在应用方法700评价“将被编程的位”加到向量1的可能性时,最初对行R1和R2中的位测试,然后发现没有违反规则1和规则2功率约束,因此被加到向量1上。然而,当测试行R4,R6和R7中的位时,发现违反了规则1功率约束,因此不加到向量1上。同样地,行R10和R14中的位可以被加到向量1上而行R18和R19中的位不被加到向量1上。行R22中的位被可以被加到向量1上,但是接下来,达到规则2的限制条件(总共5位),所以其他被测试位都不能通过功率约束而被加到向量1上。

向量1确定后,然后,如表800的803列所示,正在编程位剩余的被编程位在行R4,R6,R7,R15,R18,R25,R26,R27,R31和R39中。继续应用规则1和规则2功率约束,并使用图7的方法将行R4,R6,R15,R18和R25中的位加到第二向量上(“向量2”,表800的804列所示)。向量2被确定后,正在编程位剩余的被编程位在行R7,R26,R27,R31和R39中,如表800的805列所示。继续应用规则1和规则2功率约束和图7的方法将行R7,R26,R27,R31和R39中的位加到第三向量上,向量3(如表800的806列所示)。向量3确定后,已经没有正在编程位剩余的被编程位,如表800的807列所示。因此向量1,向量2和向量3可被用在三个编程周期中编程列。

图9显示的表900图示了在给定具体功率约束下,实行方法700生成编程向量的另一个实例。为了简要说明。图9图示的实例显示了单个本地列区域,并假定功率约束是本地的。具体地,图9的实例假定每个编程周期的总功率成本为3个单位。然而,图8的实例假定每行编程电阻开关的功率成本是相同的,而图9的实例假定功率成本随行与列编程驱动器的距离增加而增加,约等于沿编程主线的电压降。假定该功率成本的形式是1+i/10,其中i表示行号。

表900的901列显示了编程每行的功率成本。902列显示被编程位在行R1,R2,R4,R5,R7和R8中。应用方法700,行R8首先被测试。首先测试最高成本行,可以使更有效配对更贵行和便宜行成为可能,在某些情况下,可以减少用于编程列必要的向量总数(并因此减小编程周期)。如表900的903列所示,使用方法700从成本最高的行到成本最低的行进行测试以生成向量1,其中,行R8和R2被编程。

向量1建立后,剩余被编程位在行R1,R4,R5和R7中,如表900的904列所示。继续应用功率约束(每个向量功率成本不超过3个单位)和方法700建立向量2,如905列所示。向量2编程行R1和R7。向量2建立后,剩余被编程位在行R4和R5中,如906列所示,由于这些位的总功率成本为2.9个单位,他们可以和一个额外的向量一起被编程,即向量3,如907列所示。如908列所示,向量3建立后,没有更多正在编程位剩下被编程。

本文的可编程电阻开关阵列和相关的路由及编程电路可以被实现为任意IC部分。IC的一个具体实例是FPGA。FPGA(也指可编程逻辑器件(PLD)、复杂PLD、可编程阵列逻辑、可编程逻辑阵列、现场PAL、可擦除PLD、电可擦除PLD、逻辑单元阵列或其他)提供固定IC的优势是定制IC的灵活性。FPGA具有配置元件(即,可编程元件),可以被编程或重新被编程。将新的数据写入到配置元件中,编程或重新编程FPGA的逻辑功能和相关的路由路径。这种配置可以通过将数据存储到IC上的可编程元件中来完成。可编程元件可以包括动态或静态RAM、触发器、电可擦除可编程可读存储(EEPROM)单元、闪存、熔丝、反熔丝可编程连接、或其他存储元件。也可以在IC操作过程中,通过IC接收一个或更多外部产生的信号来实现配置。在IC执行过程中,这种信号表示的数据可以存储或可以不存储在IC上。还可以在IC制造过程中通过掩膜编程实现配置。然而掩膜编程相对于已经列出的现场可编程选择具有缺点,但对于某些大容量应用场合有用。

图10图示了包括FPGA 1010的典型数据处理系统1000。FPGA 1010包括可编程电路,该可编程电路包括电阻开关1001和根据本文图1-6图示(图10中没有单独显示)的实施例原理的编程和路由电路。

数据处理系统1000可以包括一个或多个以下列出的额外组件:处理器1040、存储器1050、输入/输出(I/O)电路1020和外围设备1030、以及/或其他组件。这些组件通过系统总线1065连接在一起,并被布置在电路板1060上,该电路板1060包含在终端用户系统1070中。如系统1000的数据处理系统可以包括像终端用户系统1070的单个终端用户系统,或可以包括作为一个数据处理系统一起工作的多个系统。

系统1000可被用在很多不同的应用中,比如计算机网络、数据网络、自动化设备、视频处理、数据信号处理或在系统设计中需要利用可编程或再编程逻辑优势的其他应用中。FPGA 1010可被用于实现不同的逻辑功能。例如,FPGA 1010可构造为与处理器1040协同工作的处理器或控制器(或,在替代实施例中,FPGA自身作为单独的系统处理器)。FPGA 1010还可用作判别进入系统1000中的共享源的权限的判别器。然而,在其他实例中,FPGA 1010可构造为处理器1040与系统1000中其他组件的其中一个之间的接口。注意:系统1000仅是典型实例。

图11显示了根据本发明实施例的计算机系统1100的一个实例,该计算机系统1100可用于执行包含在计算机程序产品1160中的指令码。计算机程序产品1160包括电子可读介质中的可执行码,可执行码可以指导一个或多个诸如计算机系统1100的计算机执行数据处理,以完成图7中的典型方法700。电子式可读介质可以是任何永久性介质,电子式存储信息,可以本地访问或比如通过网络连接进行远程访问。该介质可包括多个地理上分散的介质,每个介质被构造为存储不同位置和/或不同时间的执行码的不同部分。电子式可读介质中的可执行指令码指导图示的计算机系统1100实现本文已描述的不同典型任务。用于指导执行本文已描述的任务的可执行码通常用软件实现。然而,本领域的技术人员应当理解,计算机或其他电子装置可以在硬件上使用代码,以执行多个或所有不背离本发明的确定性任务。例如,用于执行本文编程方法的一些逻辑可在FPGA或其他被编程IC或相应可配置存储设备上的可配置控制器内的硬件上实现。本领域的技术人员将理解,在本发明的精神和范围内实现典型方法可执行码会有很多变化。

计算机程序产品1160中包含的代码或代码的副本可被存储到存储器1110中,以被处理器1120执行。计算机系统1100还包括I/O子系统1130和外围设备1140。I/O子系统1130、外围设备1140、处理器1120和存储器1110通过总线1150连接。

本领域那些技术人员将理解计算机系统1100仅图示了根据本发明实施例可以实现的计算机程序产品中的一个系统实例。为了引用一个替代实施例的实例,根据本发明实施例,包含在计算机程序产品中的执行指令可以被分布在多个计算机中,例如,比如,分布式计算网络的计算机中。

附加实施例

一种集成电路(IC),其包括:多个逻辑区域和用于路由信号进/出该逻辑区域的路由装置。IC包括用于编程电阻开关阵列的编程电路。

虽然本发明关于图示实施例已经进行了详细描述,但应当理解,在本发明的范围内,会在本公开基础上有不同修改、修正和改动。虽然本发明关于什么被认为是当前最实用和最可取的实施例已经进行了描述,但必须理解的是本发明并不限于所公开的实施例,而仅由权利要求书限定。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1