用于分配数据通路的方法和装置的制作方法

文档序号:6507237阅读:242来源:国知局
专利名称:用于分配数据通路的方法和装置的制作方法
技术领域
本发明涉及例如电路设计中数据通路的分配。
背景技术
在电路设计中,设计者首先要有一个其中包含有电路功能的算法说明的行为描述。高层次综合将一种超大规模集成(VLSI)电路的行为描述转换成一个结构的,寄存器传输级(register-transfer level----RTL)的实施方式。该RTL实施方式描述了宏模块(如,功能单元、寄存器、复用器、总线、存储块等)和随机逻辑之间的互接。
时序电路的行为描述几乎不包含电路的逐周期行为(cycle-by-cyclebehaviour)或者是其结构实施方式。高层次综合(high-levelsynthesis----HLS)工具典型地会将一行为描述编辑成一个合适的中间格式,如控制数据流图(Control-Data Flow Graph----CDFG)。CDFG中的顶点表示行为描述中的不同操作。数据及控制边缘用来表示操作与控制流之间的数据依赖。
高层次综合工具典型地要进行下面的一项或多项工作变换、模块选择、时钟选择、调度、资源分配和指派(也被称为资源的共享或硬件共享)。调度是通过给一个或多个时钟周期或控制步骤分配操作来确定出设计的逐周期行为。分配确定用来实施行为描述的每一类硬件资源的数目。指派涉及的是每一个变量(以及所对应的操作)与所分配寄存器中的一个(以及所对应的功能单元)的绑定。
在VLSI电路中,无论何时电路中的信号进行逻辑转换,此时存在的动态元件通常决定了功率的消耗。然而,每一时钟周期期间,不是电路的所有部分都必须起作用。同样地,已经基于抑制或消除不必要信号转换来提出了多种低功率设计技术。一般来讲,用来指该技术的术语是功率管理。在数据通路分配的情况下,能够将功率管理用于使用下列技术的数据通路分配i)操作数的隔离将透明锁存器插入到嵌入式组合逻辑块,和附加的控制电路的输入端,以检测逻辑块的空闲状况。将控制电路的输出用来使逻辑块输入端的锁存器失效使之不能改变数值。由此,将前一周期输入的数值保留在考虑中逻辑块的输入端,消除了不必要功率消耗。
操作数隔离技术有两个缺点。用于检测各个子电路空闲状况的信号通常到的很晚(例如,由于每一个控制器状态中嵌套条件的存在,空闲状况可能取决于比较器从数据通路的输出)。因此,必须加上的时延约束(即,透明锁存器的启动信号就必须在其数据输入能够变化前安置好)通常不能满足,因此就会使抑制无效。此外,在功能单元前插入透明锁存器会导致电路关键通路的额外延迟,这一点在信号和图像处理这样既需要快速又需要高功效的场合中可能会令人无法接受。
ii)用于低功率VLSI设计的受约束的寄存器共享技术根据Raghunathan等人的、授权日为2001年2月27日的美国专利文献US6195786B1,可通过约束数据通路分配中寄存器的共享来避免虚操作。在该方案中,将寄存器的智能共享进行分配,这样共享一个公共寄存器的某些操作的输出变量不会导致其他功能单元输入的不必要开关。
数据通路的分配采用的是完善的功率管理,至少是到现在其涉及到虚的切换动作,该分配要求将每一个功能单元的输入连接到寄存器,这些寄存器还没有连接到其它功能单元输入。这种严格的要求导致功率节省和面积开销的体系结构,该机构与共享资源的量以及CDFG的性能呈正比变化。在约束的寄存器共享中,以重复方式出现在一个功能单元的一个输入端的数值序列对应于v1_1,v2_1,...,vi_1,并且以重复方式出现在该功能单元的另一个输入端的数值序列对应于v1_2,v2_2,...,vi_2,在这些序列处,接着在任何时钟周期中出现在该功能单元输入端的数值就对应于某数值对(vj_1,vj_2),1≤j≤i。
图1所示为两个寄存器的非约束使用的示例。图2是一寄存器约束共享的示例。在图1中,第一寄存器R1在第一时钟周期给一个运算逻辑单元(arithmetic logic unit----ALU)提供一个第一变量A,并且在第一时钟周期之后的第二时钟周期给一个乘法器(MULT)提供第二变量B,该乘法器同时也从其它地方接收一个输入。在图2所示的一个寄存器约束共享的情况下,需额外提供一个第二寄存器R2。第一寄存器R1在第一时钟周期将第一变量A提供给运算逻辑单元(ALU),并且第二寄存器R2在第二时钟周期将第二变量B提供给乘法器(MULT)。这样就通过对共享的约束避免了虚的开关(spurious switching activities)动作。然而,这样会导致寄存器数量的增加。
约束的寄存器共享据报告能够节省功率8.4%到33.0%,面积开销从-4.0%到6.4%。相关的文献由上述美国专利文献US6195786B1的发明人,G.Lakshminarayana,A.Raghunanthan,N.K.Jha,和S.Dey于1999年3月在IEEE Trans.VLSI System,vol.7,no.1,pp.7-15上发表,“Power managementin high level synthesis”。在该文献中,报道在面积开销为0%到13.8%时处的功率减少(其平均为23.05,标准偏差为13.3%)具有带通示例,该示例是在59、72和86周期的通量约束下测试的。值得注意的是,功率的节省和面积开销随着采样周期的增加而增加,这是因为增加的采样周期推动增加的寄存器共享,这一点会导致虚操作执行的增加。为了消除虚操作,就必须比严格的性能约束设计在很大程度上禁止寄存器共享。
约束的寄存器共享管理,尽管导致很好的节能效果,但其面积开销取决于数据流图的特性。对于一个带有多个共享操作和变量的数据流图(DFG)来说,这种分配方案中的面积开销很大。巨大的面积开销伴随着DFG的受约束的寄存器共享管理,其中操作的许多输出变量都延伸到后续操作步骤中的多个操作,即操作具有连接到其它操作上的输入。这一点在这种变量的寄存器共享所带来的虚切换动作的可能更高时更是如此。受约束的寄存器共享的刚性条件不会给研发人员提供灵活性来形成RTL设计,这些设计使用的寄存器少于在数据通路分配阶段中所需要的数量。
晶片的成本通常正比于其面积的四倍。因此在成本上最有效的方式是形成面积最小的RTL设计从而降低生产成本。然而,随着便携式或移动式计算和通讯设备如膝上或掌上电脑、移动电话、无线调制器、手持式视频游戏等的出现,功率耗散变成所有RTL设计中另一个主要的考虑点。在集成电路中过多的功耗不仅不利于这些设备在便携环境的使用,同时也会产生过热的问题,从而使芯片的性能降格和使其寿命下降。为了控制其温度水平,高功率芯片需要专门和昂贵的封装以及散热装置。在将多个晶体管集成到一个芯片或者一个多芯片模块上时,过多的功耗是一个限制性因素。
芯片设计中面积及功率的要求随着芯片所用场合的不同而有很大地区别。对于便携式设备以及高密度微电子器件来说,VLSI电路的功率耗散是一个重要的问题。对于非便携式设备以及低密度微电子器件来说,相比于母晶片面积的问题,功率耗散的问题考虑地更少一些。

发明内容
根据本发明的一个方面,提供了一种数据通路分配的方法。该方法包括形成资源的初始分配并确定资源的分配是否满足一个预定的第一约束。如果该约束不能满足,那么基于较低面积使用以及较低功率使用之间的折衷,形成一个修订的资源分配。针对该第一约束生成并测试修订的分配,直到满足该第一约束。
根据本发明的另一个方面,提供了一种用于数据通路分配的装置。该装置包括用来形成资源的一个初始分配的装置和用来确定资源的分配是否满足至少一个预定约束的装置,该至少一个预定约束至少包括预定面积约束和预定功率使用中的一个。该装置还包括装置,用来基于所用面积和所用功率中更低的一个以及所用面积和所用功率中更高的一个之间的折衷形成一个修订的资源分配。该装置进一步包括用来确定修订后的分配是否满足至少的一个预定约束的装置。此外该装置还包括装置,用来控制该装置从而生成修订后的分配并确定修订后的分配是否满足至少一个预定的约束,直到满足至少一个约束。
根据本发明的一个进一步的方面,提供一种用于数据通路分配的装置,其能根据本发明的第一个方面进行操作。
根据仍然是本发明的另一个方面,提供了一种计算机程序产品以便进行数据通路分配,该产品具有一个记录在一计算机可读介质上的计算机程序。该计算机程序产品包括用来形成资源初始分配的计算机程序代码装置,以及用来确定该资源分配是否满足至少一个预定约束的计算机程序代码装置,该至少一个预定约束至少包括一个预定面积约束以及一个预定功率使用中的一个。该产品还包括计算机程序代码装置,用于基于面积使用和功率使用中较低的一个以及面积使用和功率使用中较高的一个之间的折衷来形成一个修订的资源分配。该产品进一步包括计算机程序代码装置,用于确定修订后的分配是否满足该至少一个预定约束。此外该产品还包括计算机程序代码模块,其用来控制该装置从而生成修订后的分配并确定修订后的分配是否满足该至少的一个预定约束,直到满足该至少一个约束。
再一次根据本发明的一个方面,提供了一种用于数据通路分配的计算机程序产品,其具有一个记录在计算机可读介质上的计算机程序,该产品能根据本发明的第一个方面的方法进行操作。
本发明的实施例能够被用来给高层次综合工具提供交互式界面,从而确定优化技术的优先级,并生成具有面积及功耗特性的电路,这些特性属于研发人员所确定的约束之内,用于对芯片的发展要求进行分类。


下面参照附图并结合本发明非限定性的示例来描述本发明,其中图1所示为两个功能单元和两个寄存器的已知的、非约束的寄存器使用;图2所示为两个功能单元和一个寄存器的已知的、受约束的寄存器使用;图3为涉及本发明一实施例操作的流程图纵览;
图4是显示功率和面积使用之间折衷的曲线图;图5是一个循环的示图,其带有多个嵌套循环;图6显示ALU和转换器之间受约束寄存器的使用;图7是一个用来确定一循环切换的重复次数的编辑器指令的使用情况;图8是数据通路分配中优化的流程图,其中的面积享有更高的优先级;图9是数据通路分配中优化的流程图,其中的功率享有更高的优先级;图10的流程图展示的是一数据通路分配的过程;图11的流程图展示的是一模块分配的过程;图12的流程图展示的是一寄存器分配的过程;图13示意性地展示了具有交叠周期的变量组;图14是一双向图,其展示了变量到寄存器之间可能的分配情况;图15展示的是一计算机系统,用来实现与该实施例相关的装置和过程。
优选实施例所描述的实施例采用的是被称为有缺陷的功率管理。该实施例使用一种折衷,该折衷存在于多个寄存器共享所引起的改善的面积使用,与增加的多个寄存器共享所伴随的功率管理成本之间。
本发明的所述实施例在高层次综合的数据通路分配优化阶段是有用的,其具有模块分配(操作到功能单元的绑定)和寄存器分配(变量到寄存器的绑定)。将改进的功率管理和所用的寄存器数目之间的折衷成本比较以产生优选的分配,该比较优选地是在每个分配阶段,通过功率管理成本方程来进行。研发人员能够通过功率和面积约束的指示以及它们相关的优选优先级来决定分配形式。此外,研发人员能够用他的频率知识来影响分配,通过编辑器指令,在高级抽象时迭代该循环。
在功率管理方面,用于面积的虚功率(spurious power)的折衷对调用频率较少的循环,即较少深入嵌套的循环和很少调用的循环来说是比较不重要的。此外,用于面积的虚功率的折衷对消耗相对较少功率的功能单元来说也是比较不重要的。这样,很少调用并且具有较少深入嵌套的循环中的变量,与那些更加经常调用并且具有更多深入嵌套的循环中的变量相比,就被分配了较低的功率管理成本。这样就能适应寄存器的分配,使面积的功率朝着那些很少调用并且具有较少深入嵌套的循环中的变量折衷,因为它们对电路功率的消耗具有较少的作用。
该用户可干涉分配过程,在主实施例中,通过编辑器指令的使用,能使用户指定例如一高级C抽象中某一特定基本块的开关速率。该编辑器指令能使用户影响分配过程,并使功率管理成本的指派正比于该用户指定的成本。
所述实施例还可用一双向赋权算法来分配数据通路。所分配的寄存器的数目由双向赋权来自动确定,该赋权是基于与曲线边缘关联的权重。这些权重用面积和功率成本以及加权因素进行模型化,其中的加权因素反映的是某特定设计中面积和功率之间相对的重要性。
在功率管理和面积之间的折衷与功率和面积的加权因子一起模型化,并在数据通路分配的过程中启发地确定。这就导致了一个有缺陷功率管理的方案,从而在多个数据通路分配阶段引导分配,从而产生降低的功率耗散配置。
所述实施例可用来重复地生成RTL设计。对于一个在数据通路分配优化中具有面积作为它的优先级的电路来说,这种重复起始于一个具有最佳寄存器共享的设计。该设计重复终止于在所估计的功率位于研发人员所指定的范围之内的时候。对于一个在数据通路分配优化中具有功率作为它的优先级的电路来说,RTL设计重复地生成一个具有最小功率耗散的RTL设计,产生完美的功率管理作为其初始的方案。该设计阶段终止于所估计的面积落在研发人员在用户界面中所指定的范围之内的时候。
图3涉及本发明一实施例操作的流程图纵览,从而基于给定的约束和优化的优先级产生硬件设计。
提供电路的行为描述(步骤S10)。功率及面积约束是输入(步骤S12)。可以是由机器或者由用户通过用户界面诸如键盘或图形化用户界面来输入。功率和面积约束指定了设计电路最大允许的功耗和最大允许的面积。最优化优先级是输入(步骤S14)。该最优化优先级可由机器或由用户通过用户界面如键盘或图形化用户界面来输入。该最优化优先级指定了是减少面积还是减少功耗更重要。
提供用于电路设计变量的开关频率(步骤S16)。这通常是在高层次抽象输入处(如C资源)通过编辑器指令的方式进行,该指令给行为综合工具如HLS编辑器提供频率。由用户定义或者是由编辑器的上相(upper phase)计算出来的该开关频率,在虚功率耗散计算的资源分配阶段使用,其中的虚功率耗散由那些导致缺陷功率管理体系结构的寄存器共享引入。
使用例如HLS编辑器的输入约束和最优化优先级来对行为描述进行分析(步骤S18)。通过任意一种已知的方式来对中间表示进行优化(步骤S20)。用来优化中间表示的一般技术包括软件流水、循环展开、指令并行调度、力矢量调度等。这些方法通常合起来优化中间表示。用变量的开关频率来调度数据流图(DFG)(步骤S22)。将分析的描述进行编辑来调度DFG。
生成初始的功率和面积加权(步骤S24)。基于目标设计的最优化优先级,将一个初始最大加权因子指派给与较高最优化优先级相关的成本,并且将一个初始最小加权因子指派给较低的最优化优先级。这样,该初始分配就完全偏离于较高优先级的最优化标准。
对当前的权重,在电路设计中给模块和寄存器进行分配(步骤S26),正如后面所述的那样,以RTL设计的形式导出一个建议的体系结构(步骤S28)。相对于所定义的输入约束来评估该体系结构,它是否落在那些约束之中(步骤S30)?如果有一个约束得不到满足,那么就调节加权因子(步骤S32)从而朝该约束的方向形成一个设计。由此,如果该体系结构不能满足面积约束,那么就提高面积的加权因子和/或降低功率的加权因子。程序转向步骤S26以形成一个新的体系结构用于评估。另一方面,如果在步骤S30中两个约束都得到满足,那么程序就停下来,当前的体系结构就作为最终的体系结构(步骤S34)。由此,当给定的约束得到满足时,硬件的生成以及评估程序就停止下来。
面积和功率之间的关系图4是电路设计中所用功率与面积的曲线。曲线上的线和点示意性地表示了典型地功率使用和面积之间是如何相互变化的。寄存器分配中硬件共享最大并且所用面积最小的一点由“X”表示。从功率管理的角度来看,最佳设计点以及所用的最大的面积使用由“O”表示。线40、42展示的是功率(从功率管理的角度来看)和寄存器共享(及因此的面积)程度之间的折衷。
弯曲的点线40展示的是通常的次功率及面积的设计轨迹,其中不仔细控制面积和功率之间的折衷。弯曲的实线42展示的是通常最佳的设计轨迹,其通过寄存器的智能分配达到当前最佳的功率管理和寄存器共享。虚线44展示的是一设计轨迹,其例如使用了如下文所述的循环嵌套信息来达到次佳的功率管理和寄存器共享。
采用智能的寄存器分配,面积的减少相对于功率的增加在最初的努力中更大了,从而偏离了完美功率管理的设计。
较不深入嵌套循环的体系结构相比于那些内嵌套循环的体系结构对功率消耗的贡献要少一些。由最外层循环的寄存器共享所产生的虚动作对功率消耗的贡献最少。功率对面积节约的折衷应该因此从最少使用的体系结构开始。图5展示的是一个带有多个嵌套循环的循环。图5展示了用于电路算法一次重复时使用的次数变量的数量。对于最外层嵌套循环,该变量使用了n次。对于第二级嵌套循环来说,该变量开关m*n次。对于第三级嵌套循环来说,将变量以n*m*k的速率开关,以此类推。所用功率的贡献正比于所用变量的速率。由此,在用功率交换寄存器面积时,通过缺陷功率管理,应当共享开关频率最少的变量,因为它们对功率消耗的贡献最少。因此,对设计点折衷曲线42和44上是倾斜较小的靠近完美管理体系结构。由于在功率对面积折衷时耗尽了开关频率较少的寄存器,因此单位功率折衷的面积成本会增加,因此当设计远离完美功率管理体系结构时,导致折衷曲线增加的梯度。
对用于数据通路分配的变量的寄存器共享所引来的虚动作数量有贡献的因素,通过检查这些因素,进一步管理以优化面积和功率管理之间的折衷是可能的。在分配哪一个寄存器共享从而减少由共享使用所引起的虚动作中,能够作出更好的决定。
假定有等量的开关切换用于功能单元,那么通过共享功能单元之间的寄存器,能够将虚动作保持到最小,该功能单元对输入向量中的等同变化使用较少的开关。图6展示了一个加法器(ALU)和一个转换器之间寄存器的共享。通过共享加法器和转换器之间共用的输入寄存器引入的虚开关,由此带来的功率耗散比如图1所示,通过共享加法器和乘法器之间共用的输入寄存器带来的虚开关所带来的功率耗散要小得多,图1中假设转换器和乘法器候选者之间的虚开关相同。
通过所有寄存器共享所引起的虚动作累积的数量,用作一个准则,从而获得不同变量之间寄存器共享最小的功耗。最有成本效率共享产生图4所示弯曲实线42的设计轨迹。
由此,寄存器的智能分配,在一功率管理方案中为面积交换功率,这一点允许研发人员形成沿着或者接近最佳功率面积折衷曲线的设计,从而来平衡特定约束中功率和面积最小化这两个对立的目标。
编辑器指令编辑器指令能使电路研发人员很好控制数据通路分配的过程。将编辑器指令插入到一功能源代码的开始,并允许该用户指定该特定功能的开关速率。这个注解(编译指令(pragma))功能能使用户用优化器来使功率的减少朝着较少调用循环中的变量对面积进行折衷。
图7给出了这种指令使用情况一个示例,其用C源代码写成,其中用户能够对注解“#pragma switch_iterations(Iteration_number)”指派一个重复的次数。当研发人员未在给定的循环中插入一编辑器指令时,该编辑器就给缺省值指派一个已知的“Iteration_number”。该缺省值由前面所用的重复次数导出,例如所有前面已知重复次数的平均值(或者恰是它们最后几个的平均值,例如最后的5个)。参见图7,如果n是100,那么编辑器就自动将“Iteration_number”指定为100。如果n在输入程序执行流程的前几个步骤中被指定,并且未被编辑器测定,那么用户通过编辑器指令所指定的“Iteration_number”就可用来构成一特定循环中的开关速率。
参见公式3来描述本信息在功率管理成本方程中的使用。
数据通路功率&面积的优化功率及面积优化是根据指定的设置自动进行的,这些设置是i)优化(面积/功率)的优先级;ii)面积约束(如,在面积单元如平方毫米内);和iii)功率约束(如,在功率测定单位如μW内)。
在数据通路分配中,假定调度当场(priori)已经进行了。对分配来说时钟和电压是固定的。互联分配只用多路器,这是因为总线互联有各种缺点i)随着芯片尺寸的增大,两个互联远离的可能性增加,将它们组合起来可以产生运行长距离的总线。充分利用的总线的长度倾向于线性地增加芯片的尺寸,这样会损伤性能,同时会提高成本(参见F.Brewer和D.Gajski于1990年7月在IEEE Trans.ComputerAided Design,vol.9上发表的“ChippeA system forconstraint driven behavioural synthesis”);以及ii)总线式的体系结构不太容易进行测试。
平面布置信息并不用在分配中,一般来讲因为较少的功能硬件单元和较少的寄存器产生具有较低配线成本的设计。这一点可由下面的文献来确定W.E.Donath于1979年4月在IEEE Trans.Circuits and Systems,vol.26上发表的“Placement and average interconnection lengths of compute logic”,W.R.Heller、C.G.His和W.F.Mikhail于1984年8月在IEEE Design and Test,vol.1上发表的“Wireability-Designing wiring space for chips and chippackages”,1989年1月在IEEE Trans.Computer-Aided-Design,vol.8上的发表的“Techniques for area estimation of VLSI layouts”,Minjoong Rim、Ashutosh Mujumdar、Rajiv Jain和Renato De Loene于1994年6月在IEEETransactions on VLSI System,vol.2.No.2上发表的“Optimal and HeuristicAlgorithms for Solving the Binding Problem”。
在一整数线性规划(Integer Linear Programming----ILP)方程中使用多标准优化来解决数据通路分配问题,这就是图3流程图中步骤S26的一个部分。用来对面积和功率共同优化的这个ILP方程参见下面的公式1。
minx∈CF(x)=Kpowerfpower(x)Kareafarea(x)---(1)]]>其中fpower(x)是功率的成本公式farea(x)是面积的成本公式C={用于寄存器分配时最大变量密度处寄存器最小数目的约束,或者是用于模块分配时最大操作密度处功能单元最小数目的约束}Kpower是fpower(x)的权重,以及Karea是farea(x)的权重与每一种可能分配相关的成本均用来生成一个矩阵。由匈牙利方法得到最好的结果,即用于所分配的每一个操作、变量等的最小总成本。
图8是数据通路分配的一例最优方案,其中面积具有更高的优先级。图9是数据通路分配的一例最优方案,其中功率具有更高的优先级。
对图8来说,通过寄存器分配来确定初始方案的特征,该分配通过最大的寄存器共享获得最佳的面积。因此,功率的加权因子Kpowet一开始设置为1,而面积加权因子Karea则设置为MAX_WEIGHT(步骤S102----图3中步骤S24的一个特例)。基于当前的权重,形成一个数据通路分配(步骤S14----图3中步骤S26和S28的一个概括)。用一个随机的或者是预选的输入位模式40,例如用一个RTL功率评估工具,利用预定单元库的功率使用信息,来接着评估电路的功率消耗(步骤S106)。确定所评估的功率是否小于预设的功率约束(步骤S18----图3中步骤S30的一部分)。如果功率消耗超过了功率约束,通过第一次启发确定的步进值α增加Kpower,并且通过第二次启发确定步进值β减少Karea(步骤S110----图3中步骤S32的一个特例)。为新的权重,重复该数据通路分配过程(步骤S104)。如果所评估的功率耗散小于步骤S108的约束量,那么就用例如Synopsis DC编辑器来评估用于当前通路分配的面积(步骤S112)。确定该面积是否小于预设的面积约束(步骤S114)。如果该面积超过了所允许的面积,那么对于所输入的约束来说没有方案是可行的(S116)并且程序结束。如果面积落在所允许的面积之内,那么当前的数据通路分配是输出(S118)并且程序结束。
下面来描述用于确定步进值的启发式方法的示例,该步进值用于模拟中的每一次重复。
首先是选择Karea和Kpower的最大值,这样它们在与成本(公式1中的fpower(x)和farea(x)相乘时就不会溢出(超过32位)。在本示例中,Karea和Kpower的最大值封顶到1000。两个极端设计,一个是Karea设定到1同时Kpower设定到最大权重(1000),另一个是Karea设定到最大权重(1000)同时Kpower设定到1,两个设计所需寄存器数目的差首先通过两次模拟确定出来。这两个设计配置(一个用于完美的功率管理方案,另一个用于最不完美的功率管理方案)所需寄存器数目的差显示了,在整个优化空间中模拟所能获得的寄存器数目的最大结果范围。该范围表示的是优化结果的不同。
该权重区域(1到最大,在本实施例中就是1000)首先被分成N个区域,其中用于优化轨迹每一个区域的约束在每一个特定权重区域的模拟开始之前被确定出来。如果精确度越高,那么N就越大。在本示例中,N选为4,同时为步进值α和β将权重区域(近乎)均匀地分为{1,250,500,750,1000}。1用作第一数值,因此对于端点的设计优化来说,仍需考虑优先级较低的对象(功率或面积)。如果将0指定为不重要对象的权重,那么编辑器不执行分配,该分配在所有用于某些情况处,优化较不重要的目标,这些情况是较重要目标候选者的成本是相同的。
在前两个区域交点处,即在本实施例中权重(Karea为250,Kpower为750)的地方所需寄存器的最大数目要第一个确定。第一区域的结果范围由该交点处所需寄存器的最大数目以及初始权重(1,1000)所获得的寄存器的最大数目的差获得。然后用设计轨迹两个极值处设计所获得的最大结果范围(即(1,1000)到(1000,1))来规格化第一区域的结果范围。为第一区域模拟的重复所选择的步进值通过下面的操作来获得,即将规格化的结果范围平均分成所需规格变化的步骤(即,每一个变量均应将寄存器的数目改变一定比例的结果范围),这里假定权重和范围之间为线性关系。例如,如果第一区域{(1,1000),(250,750)}的结果范围为10%,是模拟结果最大范围{(1,1000),(1000,1)}的0.1,并且0.02是在每次重复所要求的结果中预期规划的变化(即寄存器的数目应发生的变化是结果范围(1,1000),(1000,1)中寄存器数目的2%),那么将每次重复的步进值设定为250的五分之一(0.02/0.1),即α和β均为50。
如果在第一区域内{(1,1000),(250,750)}没有确定出合适的通路分配方案,那么就为第二区域{(250,750),(500,500)}确定出一组新的步进值,并且如果需要的话以此类推到第三及第四的区域。
根据上述的启发式方法,步进值α和β很可能会根据启发式确定的结果每重复几次(在第一区域的头五次之后)就会变化。选择地,该步进值也保持不变,例如α和β始终都是50。步进值α和β并非必须是相同的。
面积对同样数量的功率节省的折衷在开始会很小,其会随着设计偏离图4中的点“X”而逐渐增加。这是因为将最频繁使用的变量从初始折衷中的共享寄存器约束出来,这样对于固定单位的面积来说产生大的功率节约。这种设计重复直到预定的功率约束得到满足才停止。这种方案的结果就是这样的一种体系结构,其具有最佳的面积,并且用最小的面积折衷最大可能的功率节约从而满足预定的功率约束。
图9展示了一个优化中功率具有优先级的方案。该初始方案的特征是具有完美功率管理的数据通路分配。Karea设置为1,而Kpower设置为MAX WEIGHT(步骤S122----图3中步骤S24的一个特例)。基于当前的权重,形成一个数据通路分配(步骤S124----图3中步骤S26和S28的一个概括)。然后例如用一个Synopsis DC编辑器来评估并分析所生成RTL的面积(步骤S126)。确定该面积是否小于预设的面积约束(步骤S128----图3中步骤S30的一部分)。如果该面积超过了面积约束,通过第一次启发确定的步进值α减少Kpower,并且通过第二次启发确定步进值β增加Karea(步骤S130----图3中步骤S32的一个特例)。用新的权重来重复该数据通路分配过程(步骤S124)。如果面积小于根据步骤S128的约束量,那么就评估当前数据通路分配的功率耗散(步骤S132)。例如通过一个RTL功率评估工具来使用一个随机的或者是预选的输入位模式40,和由一个预先定义的单元库得到的功率使用信息。确定所评估的功率消耗是否小于预设的功率约束(步骤S134)。如果所评估的功率超过了所允许的功率,那么对于所输入的约束来说没有可行的解决方案(S136),程序结束。如果所评估的功率落在所允许的功率之内,那么就输出当前的数据通路分配(S138),程序结束。
上述步进值可用前述同样的方式或其它方式计算出来,或者也可保持为常数。
功率对一固定单位面积的折衷成本随着设计远离图4中的点“O”而不断增加,其中的点“O”是具有最佳功率的设计。这是因为很少使用的变量用在寄存器共享中从而在最初用功率对面积折衷,由此会牺牲不完美管理体系结构的最小功率耗散。由于很少使用的体系结构被牺牲从而使功率对面积进行折衷,因此功率对同样单位面积的折衷成本会增加。该设计方案会形成一个最佳的功率管理体系结构,其用最小的功率来折衷最大的面积节约,从而满足预定的面积约束。
数据通路分配程序如前面参照图8和9分别在步骤S104和S124所描述的流程一样,图10的流程图所展示的是一个用来实现ILP方程(公式1)所描述约束的数据通路分配流程。在数据通路分配中所要完成的子任务是模块分配(操作到功能单元的系结)和寄存器分配(变量到寄存器的系结)。在本示例中,模块分配实现之后是寄存器分配,当然其也可同时进行或者以其它方式进行。
收集用于每一个变量的操作数据(步骤S202),这是有关操作的信息,在这些操作中这些变量被导出(Op_from)到使用(Op_destinations)这些变量的操作中。收集用于每一项操作的变量数据(步骤S204),这是有关通过每一项操作使用并且导出的变量信息。从对每一个变量的操作数据的分析,给每一个变量指派一个开始时间和一个终止时间(步骤S206)。给每一项操作指派一个开始时间和一个终止时间(步骤S208)。
这些操作首先根据所需的功能即通过模块类型进行分组。需要同一模块类型的操作,即那些能够共享相同功能单元的操作,根据它们的寿命和终止时间(基于开始及终止),将这些操作分成组(步骤S210)。这些操作首先是根据其开始时间向上排序。相互无法共享的一组操作根据其排序进行分配(当且仅当它们的寿命重叠的时候,两个操作是非共享的)。确定所需每一类模块的数目(步骤S212)。对于可能的每一类模块来说,所需的数目是能够共享该类模块的操作的最大数目,这些操作在任何一个控制步骤中同时存在。每一类模块的总数目可多于,但不能少于使用该类模块的任一组操作中操作的最大数目。然后将模块分配给不同的操作(步骤S214)。
根据变量的寿命和终止时间(基于开始和终止时间)对变量进行分组(步骤S216)。这些变量首先根据其开始时间向上排序。不能共享同一寄存器的一组变量根据其排序进行分配(当且仅当两个变量的寿命重叠时,这两个变量不能共享同一个寄存器)。确定所需的寄存器的数目(步骤S218)。所需的数目至少是任一控制步骤中能够同时存在的变量的最大数目。寄存器的总数目可多于但不能少于任一组变量中变量的最大数目。然后将寄存器分配给不同的变量(S220)。
现在参照图11描述分配模块步骤(图10中的步骤S214)的一个示例。
将所有这些模块类型均分配一个模块类型数目。能够共享一个共有功能单元的模块按模块类型进行分组。同一模块类型的所有模块均具有相同的等待时间(从开始到终止的时间)。分配给这些模块类型的模块类型数目均按照等待时间下降的顺序进行分配。即,等待时间最高的模块类型具有最低的模块类型数目(即0),并且等待时间最低的模块类型具有最高的模块类型数目。将等待时间相同的模块类型随机地分配两个不同且连续的数目,同样每一模块类型的每一组操作均分配一个数。
分配模块程序的开始是设定所要分配的第一模块类型,模块类型=0(步骤S302)。检查当前的模块类型数目是否高于最后一个(其可能是最高的一个)模块类型数目(步骤S304)。如果当前的模块类型数目不高于最后模块数目,为当前模块类型步骤S306,将当前的操作组的数目设定到0。当前模块类型的当前操作组数目中的所有操作均指派给当前模块类型的一个不同功能单元(步骤S308)。对于当前的操作组来说,该模块按等待时间下降的顺序进行分配(步骤S310)。
检查当前的操作组数目是否高于最后一个(其可能是最高的一个)操作组数目(步骤S312)。如果当前的模块类型数目高于最后的操作组数目,那么当前模块类型数目就加一(步骤S314),并且程序返回到步骤S304。如果新的当前模块类型数目不高于最后模块类型的数目,那么第一操作组中使用了下一模块类型模块的操作就分配给所述的下一类型模块(通过步骤S308)。
如果在步骤S312当前的操作组数目不高于最后一个操作组数目,那么为模块分配构造一个矩阵或曲线图(步骤S316)。该矩阵或曲线图基于已有的模块分配(对第一操作组以及到目前为止处理过的任何其它操作组)以及当前的操作组数目进行构造。解决所有的分配问题(步骤S318)从而为当前模块类型到目前为止处理过的所有组形成一个分配。
然后使当前的操作组数目加一(步骤S320),同时程序返回到步骤S312。
如果模块分配程序循环通过所有的模块类型,在步骤S304将会发现该模块类型数目大于最后一个或者是最高一个模块类型,并且该模块分配程序为所有的模块类型都输出这种模块分配(步骤S322)。
按等待时间下降的顺序为操作实现模块分配。这是因为对于等待时间较长的操作来说模块寿命交叠的机会要高于等待时间较短的操作。对于等待时间较短的操作来说,为较长等待时间的操作所分配的实际功能单元是用于分析而不是用在操作本身。
通过使用用双向赋权法按组给功能单元,将可共享功能单元的操作分配给组。在一加权的双向曲线图中,构造一个WB=(S,T,E)来解决匹配的问题,其中曲线的每一个节点si∈S(tj∈T)均表示一个操作opi∈OP(功能单元fuj∈FU),并且当且仅当opi能分配给fuj时,在si和tj之间具有一个加权的边缘eij(即,已经系结到fuj上的操作中没有一个操作的寿命与opi的寿命交叠)。与一边缘eij相关的权重wij则根据面积和功率成本方程以及各自相关加权因子计算出来(采用公式1并且如下所述参照公式2和3)。每一个模块组的分配都模型成一加权双向曲线图的一个匹配问题,其通过公知的匈牙利方法(Hungarian Method)[C.H.Padadimitriou和K.Steiglitz于1982年在Prentice-Hall公开的Combinatorial Optimisation]来解决,这一点例如后面参见图2所描述的那样。
曲线边缘的功率和面积成本合起来与权重呈线性关系,其中的权重作为成本的加权系数来分配的。接着就能进行双向赋权(Bipartite WeightedAssignments)了。
现在参见图12来描述分配寄存器步骤(图10中的步骤S220)的一个示例。
将当前的变量组数目设定到0(步骤S352)。当前变量组中的所有操作均指派给一个不同的寄存器(步骤S354)。然后将当前的变量组数目加一(步骤S356)。
检查当前的变量组数目是否超过最后一个变量组数目(步骤S358)。如果在步骤S358当前的变量组数目没超过最后一个变量组数目,那么为寄存器分配构造一个矩阵或曲线图(步骤S360)。该矩阵或曲线图是基于现有寄存器分配(第一变量组以及到目前为止处理过的任何其它变量组)以及当前的变量组构造的。解决所有的分配问题(步骤S362)从而给到目前为止已处理过的所有变量组形成一种分配。
然后将当前的变量组数目加一(步骤S364),程序返回到步骤S358,如果下一个变量组数目没超过最高的变量组数目,那么从这个步骤为下一个变量组生成寄存器分配。
一旦寄存器分配程序循环经过了所有的变量组,那么步骤S358会发现该变量组数目大于最后一个(最高一个)变量组数目,并且寄存器分配程序输出寄存器分配(步骤S366)。
这些变量还可用双向赋权按组分配给寄存器。每一个寄存器组的分配也可模拟成一加权双向曲线图的一个匹配问题,并通过公知的匈牙利方法来解决。对输入DFG中所有的操作和变量进行双向赋权,然后将所生成的RTL设计对照用户定义的输入约束进行评估。
通过分配寄存器子组中的新结点数等于变量子组中的结点数,该资源分配能够自动确定出资源分配中所用寄存器的数目。寄存器的数目超过一特定分配所需的寄存器的数目能使功率管理更好。为特殊的加权系数对,和与之相关的面积和功率边缘成本方程,所分配的寄存器的总数目由一个双向赋权的结果来确定。
成本方程模块分配---面积成本计算(图11的步骤S316)在模块分配中唯一能够改变的相关面积成本是那些因多路器(MUX)数量而带来的成本。因此,在模块分配中,公式1中所用的面积的成本方程farea(x)就是下面的公式farea(x)=(多路器面积成本之和) [2]对于该实施方式来说,功能单元在可能的地方始终共享。这里没有分配额外的功能单元,这一点与寄存器分配中为了实现完美的功率管理可提供额外的寄存器不同。模块分配阶段是一个决定如何来共享功能单元的阶段,因此在它们的输入以及在寄存器的输入,形成最少的MUX功率使用以及最佳的功率管理配置。
通过采用双向赋权目标,可将寄存器以及功能单元输入端的多路器(MUX)的数目保持下降。一项操作中输入和输出变量对MUX面积的要求将在模块分配面积成本方程中被评估,即下面公式3所指的wij,其由图11中步骤S316来生成。对于一项操作到一个功能单元的每一个分配来说,首先都是用公式3来评估寄存器输入处直接MUX成本(尽管该寄存器直到寄存器分配阶段才分配,但该寄存器必须在模块分配阶段就识别出来,因此其能计入成本)。然后用公式3来计算出功能单元输入端涉及的暗含成本。
wij=((Overlap(opi,opj))‾*[(Overlap(vari,varj)|((Opi==Opj).Overlap(Opi,Opj))‾‾)*]]>CMUX]+Overlap(opi,opj)*MAX]]>[3]其中i,j分别为比较式中候选操作和模块的标引;vari,varj均为变量(操作的输入或输出);CMUX是MUX所评估的成本(例如基于MUX的位宽度);MAX是一个最大值,在匹配不可能的时候分配该值,因为这些操作不能共享相同的功能单元(该值不应高到令所表示的成本引起溢出的程度);Overlap()在变量,或者当变量为输入变量时变量所到达的操作,或者对于一个输出变量来说变量所经过的操作具有交叠寿命时返回1,否则返回0;opi,opj分别为比较式中候选的操作以及模块过去分配的操作;Op,当变量为输入到模块的变量时其是该变量所抵达的操作,或者当变量为模块的输出变量时其是该变量经过的操作。
在到模块一个输入的该输入端处,当经过该模块的那些变量来自不同的操作时会生产直接(explicit)MUX成本。在一模块的输出端,有一个暗含(implicit)的MUX成本要分配给那些不经过一共用功能单元的组合,从而鼓励那些跨越其它组合并经过一个共用功能单元的模块进行共享。这是因为如果那些经过一个共用功能单元的操作被分配给不同的模块,那么会产生MUX成本。该MUX成本在这里仅仅是暗含的,因为它们不是必然产生的,即当组合中没有任何一个是由经过共用功能单元的变量组成的时候,就不会产生该MUX成本。然而,该成本是否实际发生只有到选择了一特定模块并分配了寄存器时才能确定下来。如果该暗含成本不能确定,那么改变的实施例就可将它们忽略掉。
如果这些操作的寿命交叠,那些这些模块就不能共享。因此其结果始终是最大值Overlap(opi,opj)=1因此((Overlap(opi,opj))‾=0]]>这样唯一的结果就是1*MAX=MAX。
如果这些操作的寿命没有交叠,那么Overlap(opi,opj)=0,因此Overlap(opi,opj)*MAX=0。然而,这里仍有MUX面积成本。这一点取决于这些操作的变量的寿命是否有交叠,这些操作的寿命是否有交叠以及同一操作是否用于两个变量。
如果这些操作的变量的寿命有交叠,那么Overlap(vari,varj)=1。如果前面或后面操作的寿命有交叠,那么((Overlap(opi,opj))‾=0,]]>因此(Opi==Opj).Overlap(opi,opj)‾‾=1.]]>如果前面或后面的操作或者是变量的寿命有交叠并且这些操作本身的寿命没有交叠,那么结果就是1*1*CMUX=CMUX。
如果所用是相同的操作,那么(Opi==Opj)=1。如果这些操作的寿命没有交叠并且这些变量的寿命也没有交叠,那么((Overlap(opi,opj))‾=1,]]>因此(Opi==Opj).Overlap(opi,opj)‾‾=0]]>并且Overlap(vari,varj)=0。因此该MUX面积的成本就是零。
当这些变量的寿命有交叠时MUX是必须的,因为它们不能共享一个共用寄存器。如果这些变量的寿命没有交叠,那么这些变量能够共享一个共用的寄存器。在一共享寄存器的输入处,如果这些变量分配给一共用功能单元后面的寄存器,那么就避免了一个MUX的成本。这一点只有在那些能够共享一功能单元的类似操作后面的变量并且这些操作均不具有交叠寿命时才有可能。在一功能单元的输入处,如果输入到该功能单元的变量分配给了一个共用的寄存器,那么就能避免一个MUX的成本。
模块分配功率成本方程(图11的步骤S316)能够在模块分配中变化的相关功率成本是指那些因多路器(MUX)分配以及功率管理成本所带来的成本。因此,在模块分配中,在公式1中使用的功率方程,即fpower(x)由下式确定fpower(x)=(功率管理成本之和)+(多路器功率成本之和) [4]模块分配中因MUX增加的总功率正比于该MUX面积的增加。该MUX面积的增加可由上面的公式3导出。
下面是对那些能够共享功能单元的同样操作计算出功率管理成本,其中的功能单元是分配给前面一操作组中同类的一项操作的功能单元。在功率管理成本计算中需要满足的前提条件是,用于寄存器共享的候选输出变量的寿命与过去分配的一个模块的输出变量没有交叠,这是因为模块分配需考虑到寄存器的分配,因此功能单元的分配方式应能使寄存器分配达到最佳的功率管理。
与功率相关的成本方程涉及到寄存器共享所引入的虚动作的计算。这种计算的实现需考虑到共享所涉及变量的开关活动率(switching activity)以及由这些变量所引入到功能单元的虚功率耗散,其中的功能单元在这些变量准备共享一个共用寄存器时连接到所共享的寄存器上。有关开关活动率的信息由设计人员例如通过编辑器指令来提供,或者是如前所述那样自动提供。由第一变量所引入的虚动作是由第一变量的开关活动率再乘上其它变量操作的功率因数计算出来,其中的其它变量是与第一变量共享一个寄存器的那些变量。模块分配充分利用这些信息从而以一种有利于寄存器分配的方式来共享这些模块。

其中Var1是到利益目的操作的第一输入变量;Var2是到利益目的操作的第二输入变量;SA是该变量相对于所有变量的开关活动率;n是目的操作的数目;以及Power是指不能与其它变量的任意目的操作共享的操作规格化功率消耗(虚动作)。
寄存器在其输入变化时进行开关切换。然而,对于功能单元输出切换时的整个功率耗散来说,无论该输出是否锁定到一个共享的还是不共享的寄存器,这些寄存器的功耗仍保持不变,即仍有一个寄存器将不得不切换。另一方面,现有的多路器会消耗功率,并且这些多路器使整个功率消耗不同。功率管理的成本是指那些仅仅与非必要功能单元切换相关的成本。它们与寄存器切换或多路器切换的功率损失没有关系。
参见图1和6,公式5用来使一模块分配朝着产生低功率管理成本的方向进行。变量A的目的操作是一个ADDER(ALU)。变量B和C分别具有目的操作MULTIPLIER和SHIFTER。变量B和C的开关速率与变量A的相同。分配任务有利于较低功率管理成本。如果变量A与变量C而不是变量B共享一个共用寄存器,就会有一个较低功率管理成本,这是因为Powershifter低于Powermultiplier。
进一步参见公式5,如果变量1的目的操作与变量2的相同,并且这两项操作没有交叠的寿命(即,这两项操作可由同一个功能单元来实现),那么就没有功率管理成本发生,这是因为通过寄存器共享不会引入虚动作(即,“Poweri”对公式5右侧的两个成分来说均为零)。
如前所述,程序外嵌套循环的开关活动率要低于象上面谈到的内嵌套循环的开关活动率。因此公式5就使为面积节省的不完美功率管理向较低活动循环的折衷。
用于寄存器分配的面积和功率的成本方程(图12中的步骤S360)用于寄存器分配的面积和功率的成本方程类似于前面参照公式3和5所描述的那样。那些用于成本方程的操作均由通过模块分配所指定的功能单元所代替。
寄存器分配----面积成本计算在寄存器分配中能够变化的相关面积成本是指那些因多路器(MUX)数目和寄存器数目带来的成本。因此,在寄存器分配中,公式1中所用面积成本方程farea(x)确定如下farea(x)=(多路器面积成本之和)+(寄存器面积成本之和) [6]如果一个寄存器由两个从不同功能单元过来的变量共享,那么会出现一MUX成本。同样,如果有两个变量传到了一个共用的功能单元但不共享同一个寄存器,那么就会出现一MUX成本。所分配的寄存器输入和输出变量所需要的MUX面积按照下面公式7a和7b所示的寄存器分配面积成本方程中的xij进行评估。
xij=((Overlap(i,j))‾*[((fui==fuj).Overlap(fui,fuj)‾‾)*CMUX]+Overlap(i,j)*MAX---[7a]]]>其中i是当前分配中指定给寄存器的变量;j是在前次寄存器分配中如果该寄存器共享那么已指定给该寄存器的其中一个变量;CMUX是所评估的MUX的成本(例如基于MUX的位宽度);MAX是一个最大值,在匹配不可能的时候分配该值,因为这些操作不能共享相同的功能单元(该值不应高到令所表示的成本引起溢出的程度);Overlap()在这些变量或者这些变量传到或传自的功能单元具有交叠寿命时返回1,否则返回0;fu所分配的功能单元,变量从寄存器传到该功能单元,或者是该变量从该功能单元传到寄存器。
在该寄存器的输入端这里,当那些传到寄存器的变量来自不同的功能单元时会产生一个直接的MUX成本。在寄存器的输出端,有一个暗含的MUX成本要分配给那些不经过一共用功能单元的组合,从而鼓励对那些跨越其它组合并传给一个共用功能单元的变量进行寄存器共享。这是因为如果那些传给一个共用功能单元的变量被分配给不同的寄存器,就会产生一个MUX成本。该成本是暗含的,因为它们可以不是必然产生的,例如,如果这些组合中没有一个组合是由那些传给共用功能单元的变量构成时,就不会产生该MUX成本。然而,该成本是否实际发生只有到整组寄存器被分配时才能确定下来。如果该暗含成本不能确定,那么其它的实施例就可将它们忽略掉。
如果这些变量i,j的寿命交叠,Overlap(i,j)=1。因此((Overlap(i,j))=0。这样该结果始终都至少是1*MAX=MAX。
如果这些变量i,j的寿命没有交叠,那么Overlap(i,j)=0,因此Overlap(i,j)*MAX=0。然而,这里仍可以有MUX面积成本。这一点取决于这些操作的寿命是否有交叠以及同一功能单元是否已被分配给两个变量。
如果用于这些变量i,j的功能单元的寿命有交叠,那么((Overlap(fui,fuj))‾=0,]]>因此(fui==fuj).Overlap(fui,fuj)‾‾=1.]]>如果这些变量i,j的寿命没有交叠,那么结果就是1*1*CMUX=CMUX。
如果用于这些变量i,J的两个功能单元相同,那么(fui==fuj)=1。如果用于这些变量i,j的功能单元的寿命没有交叠,那么((Overlap(fui,fuj))‾=1,]]>因此(fui==fuj).Overlap(fui,fuj)‾‾=0.]]>因此由该共享寄存器所带来的MUX的面积成本就是零。
在对所产生的暗含成本进行评估时,如果变量i传到或传自的功能单元与变量j的相同,其中的变量j已被分配给前一次寄存器分配中的一个不同的寄存器,那么暗含成本为(fui==fuj)*CMUX=1*CMUX=CMUX。
未分配寄存器即一个新分配寄存器的输入和输出变量所需要的MUX面积,按下面公式7b所示的寄存器分配面积成本方程xij进行评估xij=[((fui==fuj))*CMUX][7b]如果传给同一功能单元的变量不共享一个共用寄存器,那么会产生一个MUX成本。
寄存器分配——功率成本计算在寄存器分配中能够变化的功率成本是指那些因多路器(MUX)分配以及功率管理成本带来的成本。由此,在寄存器分配中,公式1中使用的功率成本方程即fpoweu(x)由下式确定fpoweu(x)=(功率管理成本之和)+(多路器功率成本之和) [8]寄存器分配中因MUX功率成本带来的总功率的增加正比于该MUX面积的增加。MUX面积的增加可由上面的公式7导出。
其中Var1是分配给该寄存器的变量;Var2是本寄存器前面使用的变量;SA是该变量相对于所有变量的开关活动率;n是目的操作的数目;以及Power是指所分配的不能被两个变量共享的功能单元的规格化的功率消耗。
与功率相关的成本方程涉及到寄存器共享所引入的虚动作的计算。这种计算的实现需考虑到共享所涉及变量的开关活动率,以及由这些变量引入到功能单元的虚功率耗散,其中的功能单元连接在这些共享的寄存器上。有关开关活动率的信息由设计人员例如通过编辑器指令来提供,或者是如前所述那样自动提供。由第一变量所引入的虚动作是由第一变量的开关活动率再乘上其它变量功能单元的功率因数计算出来,其中的其它变量是与第一变量共享一个寄存器的那些变量。
所需寄存器的最小数目就是任一时刻所用寄存器的最大数目。这可包括用于两组或多组中所需的变量,如果变量在时间上交叠。然而,这会导致功率成本的增加。另一方面,所设计电路可给每一个变量使用一个不同的寄存器。这样会使功耗降低但会使面积成本变大。本实施例可解决与将变量分配给不同寄存器相关的成本(根据面积和功率管理哪一个更为重要而采用权重来分配成本),然后可解决哪一种分配组合能产生最佳的结果。该过程以组为基础通过组来解决这个问题。由此,在一组中变量到寄存器的所有可能的分配都被前面组的分配所限定。任意一组的潜在候选者包括到目前为止所有已被分配的寄存器,即到该特殊分配为止所用过的寄存器数目的集合,再加上与当前组中变量数目相等的寄存器的数目。然而,某一分配会因寿命的交叠而无法进行。在这种情况下,与该组合相关的成本就会很高,其至少是上面公式7的MAX的值。
通过权重的自动寄存器数目确定的示例图13示意性地展示了在多个控制步骤(S1到S4)中有寿命的变量,这些变量被分成多个变量组(组0到组3)。在寄存器到变量组0的初始分配之后,给组1中变量的分配并非一定需要额外的寄存器,因为组1中变量的总数少于组0中的变量,并且组0中变量的数目与组1中变量的数目相同或更多,组0中变量与组1中变量的寿命没有交叠。更为精确地讲,在本例中,组0中有三个变量的寿命与组1中三个变量的寿命没有交叠。然而,对于本方案来讲,为了得到完美的功率管理(仅相对于不完美的功率管理),对该分配来说可获得的作为候选的寄存器的总数目是八个而不是五个。(组0的五个,以及用来实现完美功率管理分配的另外三个寄存器)。
下面提供自动寄存器分配的一个示例。本方案自动得到结论为了更好的功率管理而使用额外的寄存器;以及考虑到功率和面积之间折衷所用的额外寄存器的数目。
现在来考虑表1所示的一个模块分配的结果。对于图13中组0中的寄存器分配来说,变量a、b、c、d和e分别分配给R1、R2、R3、R4和R5(图12中的步骤S354)。这是因为在第一组分配的过程中没有成本。
表1模块分配结果

表2组1的成本分配

在本实施例中,该矩阵实际为一方阵。为了在该组中变量之外的栏中的输入,生成高数值的错误计算。这一点来平衡该矩阵。如果该问题是平衡的,那么匈牙利算法就能产生一个错误的结果。
组1中的变量f、g和h不能使用寄存器R1或R2,因为在变量f到h首次使用时,组0中的变量a和b仍使用着这些寄存器。将这些分配表现为通过包含一个由上面的公式7产生的很高的结果是不可能的。此外,在变量f首次使用时寄存器R3和R4仍分别被变量c和d使用着。然而,当变量g和h首次使用时情况就变了。因此,在上面的表2中,寄存器R3和R4中的变量g和h有数值。
每一种组合的成本输入均是Karea(直接面积成本+暗含面积成本-公式7a)+Kpower(功率成本-公式8)。例如对于具有寄存器R4的变量g组合来说直接面积成本=[((Overlap(i,j))‾*[((fui==fuj).Overlap(fui,fuj)‾‾)*CMUX]+Overlap(i,j)*MAX]+0]]>=[(0‾)*(0).(0)‾‾*CMUX]+(0)*MAX]]]>[6]由于共享变量没有交叠,功能单元没有交叠,因此相同的功能单元没有分配给两个共享的变量。
=1*1*CMUX=CMUX暗含面积成本=[((Overlap(i,j))‾*[((fui==fuj).Overlap(fui,fuj)‾‾)*CMUX]+Overlap(i,j)*MAX]+0]]>=[(0‾)*(0).(0)‾‾*CMUX]+(0)*MAX,]]>[6]由于共享变量没有交叠,功能单元没有交叠,因此相同的功能单元没有分配给两个共享的变量。
=1*1*CMUX_implicit=CMUX_implicit
这里没有额外的与使用了寄存器R4的变量g相关联的寄存器面积成本,因为总之R4将会出现,其会被组0中的变量d用到。然而,由于寄存器共享就意味着现在就需要多路器,因此这里有一个MUX面积成本。暗含的MUX面积成本仅用于面积成本的计算。该暗含的MUX面积成本在功率成本管理中甩出,因为该成本并非必然产生。
=SA(g.)Power(FU1<<)+SA(d).Power(FU1*)+Power(CMUX)]]>[8]由于寄存器R4已分配给组0中的变量d,因此变量d的开关活动率是相关的,因为其是变量d所用目的功能单元虚动作的功率消耗,即转换器(shifter)1(表1中),并且寄存器共享必须要有MUX的功率成本。
对于指定给R6的变量f来说,这里有寄存器面积成本,因为这是R6第一次被分配。这里还有一个MUX成本,因为变量f的目的与变量e的目的相同,变量e已分配给寄存器R5。此外,这里还会有一个与MUX相关的功率成本。
对于指定给R8的变量h来说,这里有寄存器面积成本,因为这是R8第一次被分配。然而,这里没有功率管理成本(至少是从本分配来讲没有),因为寄存器R8未被其它任何一个可能由此具有不同目的模块的变量共享。
采用前述方法,对于一个寄存器分配来说,寄存器面积成本和功率管理成本中至少有一个始终为零。然而,这里在有功率管理成本的同时可能会有一个MUX面积成本。该寄存器要么是被二次分配从而使这里没有额外的寄存器面积成本但可能会有MUX面积成本,要么是被第一次分配,此时该寄存器不被共享并且这里将没有功率管理成本。
当Karea与Kpower相比非常大时,变量f、g和h指定给R3、R4和R5(也可不按该顺序)并且不需额外的寄存器R6、R7和R8,会导致更小的面积但不完美的功率管理。变量f将被分配给R5,因为这种分配只有CMUX成本。匈牙利算法会基于下面两种不同的分配组合的功率成本的比较结果自动确定出变量g和h在寄存器R3和R4之间的分配以便实现最佳的功率管理成本
SA(g).Power(FU4+)+SA(c).Power(FU1*)+SA(h).Power(FU1<<)+SA(d).Power(FU1/)+Power(CMUX)和SA(g).Power(FU4+)+SA(c).Power(FU1/)+SA(g).Power(FU1<<)+SA(d).Power(FU1*)+Power(CMUX)另一方面,当Kpower比Karea大许多时,变量f、g和变量h指定给三个新的寄存器R6、R7和R8。实际的分配可能是随机的,因为这里仅有面积成本需要考虑,并且该面积成本对于每一个寄存器来说都是一样的。作为选择,例如在该成本相同的地方,将较低数目的变量指定给较低数目的寄存器,并且在所用寄存器数目中没有空隙。
下面来考虑Kpower和Karea的数值形成成本矩阵粗略相等的情况。变量f要么分配给寄存器R5,要么分配给来自{R6,R7,R8}的一个新的寄存器,变量g和h的可能分配结果如下变量g指定给R3,变量h指定给R4或者是{R6,R7或R8}中还未被指定的一个新的寄存器;变量g指定给R4,变量h指定给R3或者是{R6,R7或R8}中还未被指定的一个新的寄存器;变量g和h指定给{R6,R7和R8}中还未被指定的两个新的寄存器。
在任意一种情况下,变量g或h均不指定给R5,因为如果与MUX相关联的成本低于与寄存器相关联的成本,那么总的计算始终都是变量f在寄存器R5时其成本要低于变量g或h分配到那里的情况。
在上述示例中,MUX的成本均与MUX具有两个输入并且每一个输入都具有相同位宽度(例如32位)时的情况相同。该Reg_Costs同样也是对R6到R8来说其与这些寄存器同时仅用于一个变量相同。
匈牙利算法解决了双向赋权中的分配,使整个存在的成本降到最小。功率和面积权重用来引导该分配。该实施例的原理是与约束和指出的优先级相关,自动确定所要分配的寄存器的数目。
图14是一例双向图,其展示了组1中变量被分配之后图13中组2中变量到寄存器的可能的分配情况。在一双向图中,节点集合被分成两个分开的子集合。每条边缘连接不同子集合中的两个节点。在图13所示第二组的寄存器分配中,本图中两个子集合具有两个集合,寄存器集合R={r1,r2,r3,r4,r5,r6,r7,r8}和变量集合V={vf,vg,vh},如图14所示。在寄存器已经分配有变量的地方,图14相关的节点中就出现变量的数字。该图有一边缘的集合,其表示可能的匹配E={e3,g,e3,h,e4,g,e4,h,e5,f,e5,g,e5,h,e6,f,e6,g,e6,h,e7,f,e7,g,e7,h}。将每一个变量与一寄存器匹配的问题定型为一个经典任务分配问题。那些没有任何共用末端节点的最大边缘子集合被定义为该图的最大匹配,这里图的最大边缘-权重匹配是与其边缘权重最大总和的最大匹配。这有助于确保这些连线在权重双向赋权中不会与其它的边缘竞争,因为它们不是有效边缘。
上述实施例的装置和方法可在一计算机系统400上,例如图15所示系统上实现。这些实施例可用作一个软件,如能够在计算机系统400并且指令计算机系统400来进行上述实施例方法的计算机程序。
计算机系统400包括一计算机模块402,输入模块如键盘404和鼠标406多个输出设备如显示器408和打印机410。
该计算机模块402通过一个合适的收发设备414来与计算机网络412相连,从而能够接入例如互联网或者是其它的网络系统如局域网(LAN)或者是广域网(WAN)。
本例中的计算机模块402包括;一个处理器418,一个随机存取器(RAM)420以及一个只读存贮器(ROM)422。该计算机模块402还包括多个输入/输出(I/O)接口,如一个到显示器408的I/O接口424以及一个到键盘404的I/O接口426。该键盘404例如可由芯片设计人员使用来指示功率和面积约束,以及它们在优化中的重要级从而芯片适应不同的优化要求。
计算机模块402中的部分通常通过一个总线428以本领域技术人员公知的方式进行通讯。
该应用程序通常提供给该计算机系统400的用户,编码在数据存贮介质如CD-ROM或者是软盘上,并通过与数据存贮设备的相应数据存贮介质驱动器430来读取。该应用程序由处理器418读取并由其在执行中控制。程序数据的中间存贮可通过RAM420来实现。
效果用来产生高层次综合寄存器传输级设计的方法和装置利用了数据通路分配中功率耗散和面积使用之间的折衷。功率耗散和面积约束以及两者之间的优先级是输入。根据所指定的优先级和指定的约束,用一个算法来自动决定所要使用的寄存器的数目。功率管理方程可用来引导分配过程从而用较低的功率管理成本换来寄存器面积的等量节约。多规范优化整数线性规划用来与启示方式确定的功率和面积权重一起来适应芯片设计的不同要求。使用双向赋权通过成本方程和匈牙利算法来确定每一阶段所用寄存器的数目。
现代的芯片设计迎合了各种需要的应用。用于便携设备的芯片以及高密度的芯片在其研发中功率是首要的优化目标。另一方面,在非便携应用中的芯片的研发中,面积的考虑通常在功率之前。上述实施例提供了一种交互工具,其能使用户指定数据通路分配优化(面积/功率)的优先级,以及各自所需满足的约束(面积和功率)。这些交互工具能使用户基于芯片所用的场合以及加在其上的约束来确定数据通路的分配。
上述实施例通过提供一种机制,该机制能沿着一个最佳的功率-面积折衷设计轨迹,用功率管理成本交换面积,从而减少了现有技术中的某些问题。功率管理成本方程能调整这种分配来用最小的功率管理成本交换等量的面积,其中将变量的开关速率以及模块不完美管理的功率损失用作该方程中的参数。在面积优先的优化中,重复的数据通路分配形成了一种体系结构,其用最小的面积交换功率从而实现用户通过用户界面指定的功率约束。在功率优先的优化中,重复的数据通路分配形成了一种体系结构,其用最小的功率交换面积从而实现用户通过用户界面指定的面积约束。
该数据通路分配用双向赋权来实现,并以匈牙利算法来解决这些分配的匹配问题。该匈牙利算法复杂度O(n3)很低,因此分配并不耗时。
上面的实施例是参照一个电子电路如解码器或编码器的数据通路分配来描述的。然而,上述方法也可用来给其它电路如光学/光子电路分配数据通路,显然这很容易被本领域技术人员所理解。
前面公开了用来分配数据通路的方法和装置。其中只描述了几个实施例,但本领域技术人员都清楚在本发明构思的范围内还有许多的变化和/或修订。
权利要求
1.一种数据通路分配的方法,其包括(a)生成资源的一个初始分配;(b)确定该资源分配是否满足预定的第一约束;并且如果该约束得不到满足;(c)基于面积使用和功率使用中较低的一个以及面积使用和功率使用中较高的另一个之间的折衷,生成一个修订的资源分配;以及重复(b)和(c)直到确定该第一约束得到满足。
2.如权利要求1的方法,其中生成资源初始分配包括,以较低面积和较低功率使用之间的优先级为基础来分配资源。
3.如权利要求2的方法,其中如果优先级是较低面积超过较低功率,生成资源初始分配包括,以高数量的寄存器共享为基础来分配资源。
4.如权利要求3的方法,其中如果优先级是较低面积超过较低功率,生成资源初始分配包括,以尽可能多的寄存器共享为基础来分配资源。
5.如权利要求2至4之一的方法,其中如果优先级是较低面积超过较低功率,重复地生成一个修订的资源分配包括,重复地提高面积使用并减少功率使用,直到第一约束得到满足。
6.如权利要求2至5之一的方法,其中如果优先级是较低功率超过较低面积,生成资源初始分配包括,以良好的功率管理为基础来分配资源。
7.如权利要求6的方法,其中如果优先级是较低功率超过较低面积,生成资源初始分配包括,以完美的功率管理为基础来分配资源。
8.如权利要求2至7之一的方法,其中如果优先级是较低功率超过较低面积,重复地生成一个修订的资源分配包括,重复地提高功率使用并减少面积使用直到第一约束得到满足。
9.如权利要求2至8之一的方法,进一步包括输入较低面积和较低功率使用之间的优先级。
10.如权利要求2至9之一的方法,其中如果优先级是较低功率超过较低面积,那么就在较高的面积使用对较低的功率使用之间进行折衷。
11.如权利要求2至10之一的方法,其中如果优先级是较低面积超过较低功率,那么就在较高的功率使用对较低的面积使用之间进行折衷。
12.如权利要求11任何一个的方法,其中为了较低面积使用而接受较高的功率使用包括,在寄存器之间分配更多将被共享的变量。
13.如权利要求12的方法,其中与使用频率较高的变量相比,将使用频率较低的变量作为将被分配的目标,将在产生修订资源分配的较早重复中的寄存器之间进行共享。
14.如权利要求12或13的方法,其中那些用于操作的变量,这些操作功率消耗较高,与这样的变量相比,用于操作的变量,这些操作的功率消耗较低,将这些变量作为将被分配的目标,将在产生修订资源分配的较早重复中的寄存器之间进行共享。
15.如权利要求10或如权利要求11至14之一当其至少从属于权利要求10时的方法,其中为了较低功率使用而接受较高面积使用包括,分配更多的变量,这些变量在寄存器之间共享从而将寄存器分开。
16.如权利要求15的方法,其中使用频率较多的变量相比于使用频率较少的变量在生成一个修订资源分配的较早重复中作为将被分配的目标从而将寄存器分开。
17.如权利要求15或16的方法,其中那些用于操作的变量,这些操作功率消耗较低,与这样的变量相比,那些用于操作的变量,这些操作的功率消耗较高,将这些变量作为将被分配的目标,从而将在产生修订资源分配中较早重复中的寄存器分开。
18.如前述任一权利要求的方法,其中生成一修订资源分配包括,确定一个与多个可能分配相关联的成本,并基于相关联的成本选择一个分配。
19.如权利要求18的方法,其中基于相关联的成本选择一个分配包括,选择相关成本最较低的分配。
20.如前述任一权利要求的方法,其中给功率使用一个功率权重,并且成本与资源的分配相关联,资源分配是基于与该分配相关的功率使用和功率权重。
21.如前述任一权利要求的方法,其中给面积使用一个面积权重,并且成本与资源的分配相关联,资源分配是基于与该分配相关的面积使用和面积权重。
22.如权利要求20或21的方法,当其至少从属于权利要求18时,其中生成一个修订资源分配进一步包括,改变该权重或者至少一个权重。
23.如前述任一权利要求的方法,其进一步包括在确定面积和功率之间的折衷时,使用用于变量的开关活动率开关活动率。
24.如权利要求23的方法,其进一步包括输入有关变量开关活动率的信息。
25.如权利要求24的方法,其中的开关活动率由用户通过编辑器指令输入。
26.如权利要求23或24的方法,其进一步包括自动确定用于变量的开关活动率。
27.如权利要求26的方法,其中开关活动率的缺省值在这些数值没有输入时确定出来。
28.如权利要求23至27之一的方法,其进一步包括,从在2个变量之间共享一个共用寄存器来计算相关功率耗散成本,对这2个变量之间的任何一个,通过将该变量的开关速率与一个功能单元的功率量度相乘,该功能单元与另一个变量相连,从而指示在共享过程中引入的虚功率耗散。计
29.如权利要求28的方法,其中相应的功率耗散成本按照下式计算出来 其中Var1是分配给该寄存器的变量;Var2是本寄存器前面使用的变量;SA是该变量相对于所有变量的开关活动率;n是目标操作的数目;以及Power是指所分配的不能被两个变量共享的功能单元的规格化的功率耗散。
30.如前述任一权利要求的方法,其中生成资源分配包括,分别将数据通路中的操作和变量分配给模块和寄存器。
31.如权利要求30的方法,进一步包括,生成能够使用相同模块的操作的组。
32.如权利要求30或31的方法,进一步包括,生成操作组,其中的操作在给模块分配操作时其寿命存在交叠。
33.如权利要求31和32的方法,其中通过使用相同模块以及交叠寿命是否有交叠将该操作分成组。
34.如权利要求30至33之一的方法,其进一步包括生成变量族,其中在给模块分配变量时具有交叠的寿命。
35.如前述任一权利要求的方法,其进一步包括为到功能单元操作的不同分配,确定相应的面积成本。
36.如前述任一权利要求的方法,其进一步包括为到寄存器变量的不同分配,确定相应的面积成本。
37.如权利要求36的方法,其中的面积成本包括寄存器的面积成本。
38.如权利要求35至37之一的方法,其中的面积成本包括多路器的面积成本。
39.如权利要求35至38之一的方法,其中的面积成本包括一特定分配中的直接面积成本。
40.如权利要求39的方法,其中的面积成本进一步包括一特定分配中的暗含面积成本。
41.如前述任一权利要求的方法,其中生成资源的分配进一步包括使用具有功率和面积使用的权重的双向赋权分配。
42.如权利要求41的方法,其进一步包括在生成一个修订的资源分配时,改变功率和面积使用的相应权重。
43.如前述任一权利要求的方法,其中生成资源的分配进一步包括用匈牙利算法来解决分配匹配问题。
44.如前述任一权利要求的方法,其中在较低面积使用和较低功率使用之间的折衷包括通过满足下式来共同优化面积和功率minx∈CF(x)=Kpowerfpower(x)Kareafarea(x)---(1)]]>其中fpower(x)是功率的成本公式farea(x)是面积的成本公式C={最大变量密度处寄存器或功能单元最小数目的约束}Kpower是fpower(x)的权重,以及Karea是farea(x)的权重
45.如前述任一权利要求的方法,其中预定的第一约束是预定的面积约束和预定的功率使用约束中的一个。
46.如权利要求45的方法,其中一预定的第二约束是预定的面积约束和预定的功率使用约束中的另一个,并且(b)进一步包括确定是否满足预定的第二约束。
47.如权利要求45的方法,其中一预定的第二约束是预定的面积约束和预定的功率使用约束中的另一个,并且进一步包括,在确定第一约束已经满足之后,确定是否满足预定的第二约束。
48.如前述任一权利要求的方法,其进一步包括至少输入预定的第一约束。
49.如前述任一权利要求的方法,其是一种由一个给定的数据流图(CFG)来进行数据通路分配的方法。
50.如前述任一权利要求的方法,其是一种给一电路进行数据通路分配的方法。
51.如前述任一权利要求的方法,其是一种给一电子电路进行数据通路分配的方法。
52.一种数据通路分配的方法,其实际上如前文参照附图所描述并显示在附图中的那样。
53.一种用来数据通路分配的装置,其包括装置,用来形成资源的一个初始分配;装置,用来确定该资源分配是否满足至少一个预定的约束,该至少的一个预定约束至少包括一预定面积约束以及一预定功率使用中的一个;装置,用来基于面积使用和功率使用中较低的一个以及面积使用和功率使用中较高的一个之间的折衷,形成一个修订的资源分配;装置,用来确定修订后的分配是否满足至少的一个预定约束;以及装置,用来控制该装置从而生成修订的分配并确定修订的分配是否满足至少一个预定约束,直到该至少一个约束得到满足为止。
54.一种装置,其能根据权利要求1至52之一的方法进行操作。
55.如权利要求53的装置,其能根据权利要求1至52之一的方法进行操作。
56.一种用于数据通路分配的装置,将其构造和布置从而实际上如前文参照附图所描述并显示在附图中的那样操作。
57.一种计算机程序产品,用来进行数据通路分配,该产品具有一个记录在一计算机可读介质上的计算机程序,所述计算机程序产品包括用来形成资料初始分配的计算机程序代码装置;用来确定该资料分配是否满足至少一个预定约束的计算机程序代码装置,该至少的一个预定约束至少包括一预定面积约束以及一预定功率使用约束中的一个;计算机程序代码装置,用来基于面积使用和功率使用中较低的一个以及面积使用和功率使用中较高的另一个之间的折衷形成一个修订的资源分配;计算机程序代码模块,用来确定修订后的分配是否满足该至少的一个预定约束;以及计算机程序代码模块,用来控制该装置从而生成修订后的分配并确定修订后的分配是否满足该至少的一个预定约束,直到该至少的一个约束得到满足为止。
58.一种用于数据通路分配的计算机程序产品,具有一个记录在一计算机可读介质上的计算机程序,并且该产品能根据权利要求1至52之一的方法进行操作。
全文摘要
一种用来产生高层次综合寄存器传输级设计的方法和装置,采用数据通路分配中功率耗散和面积使用之间的折衷。功率耗散和面积约束以及两者之间的优先级是输入。根据该指定的优先级和指定的约束,一种算法自动确定所用寄存器的数目。可用功率管理方程来调整分配过程从而用较低的功率管理成本交换寄存器面积中的等量节省。多规格优化整数线性规划与启发式确定出来的功率和面积权重一起使用,从而适应芯片设计的不同需要。使用双向赋权通过成本方程和匈牙利算法来确定每一阶段所用寄存器的数目。
文档编号G06F17/50GK1957352SQ200480043146
公开日2007年5月2日 申请日期2004年11月19日 优先权日2004年5月24日
发明者维·理·纽, 蒂恩·平·川华 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1