调度是将操作赋给控制步(control step)。一个控制步是一个基本时序单位,在同步系统中,通常对应于一个或几个时钟周期。调度的目标是:在满足约束条件的情况下,将操作赋给各控制步,以使给定目标函数最小。这个目标函数主要包括:所需控制步总数、延时、功耗以及硬件资源数量等。
分配是将操作赋给相应的功能单元进行运算,将变量(或值)赋给寄存器加以存放。分配的目标在于使硬件资源的花费最少,硬件资源包括功能单元、存储单元和数据传输通路,使这些硬件资源同时最小通常很复杂。
此外,数据通路的抽象结构必须用具体的部件实现,这一步也称作模块确定(module binding)或模块指派(module
assignment)。各部件的实现既可调用标准单元库中的部件,也可以自己设计实现。通常,模块确定与分配在一起进行。本书中亦将模块确定与分配作为一个任务,统称为分配。
前面已经说过,调度和分配是两个紧密相关的任务,为了知道两个操作能否调度到同一个控制步中,首先要知道他们是否占用同一个功能单元。如果希望找到硬件资源的最有效调度,还需要知道它对不同操作的延迟,这只有在各功能单元及其互连关系知道后才能找出。反过来看,要较好地决定使用多少功能单元、存储单元以及各操作如何分配,就必须知道哪些操作需要并行进行,而这只有通过调度才可能知道。
解决上述问题的通常作法是:
(1) 在限制(或不限制)功能单元数目的条件下进行调度,然后进行分配。这种方法的一种改进方案是:首先在限制功能单元数目的条件下进行调度;然后再根据调度结果改变这个限制,返回到下一次调度,直到找到一个满意解。
(2) 调度与资源申请同时进行,在调度的同时给各操作分配功能单元,仅当操作不能共享已有资源时再增加功能单元;或者首先进行资源分配建立数据通路(假定操作具有最大并行度),然后进行调度。
由于调度和分配是高层次综合中最重要的两个任务,本章以后几节将重点介绍他们。
|