控制数据流图表示是一种适用于高层次综合的、机器内部的表示格式,并不是用于人的观察。由于它的图形表示比较繁琐,为了简洁起见,今后在图中不再画出起始结点和终止结点。表示常量、常数、中间变量、初始输入信号和初始输入变量的传输结点以及指向终结点的汇聚结点也将不在图中画出,数据流向与控制流向清晰的有向边也不再标注箭头。
如图5.2所示,高层次综合工具首先把设计者提供的行为描述转换为一种机器内部的中间表示格式,然后再作各种后续处理。这里介绍的控制数据流图就是这种中间表示格式之一,是用图形表示相应的数据结构。
3. 转换
由于硬件描述语言是面向设计者可读的,不是针对从行为到结构行为转换的描述语言,不是用于描述综合过程的语言。而且,硬件描述语言的编译实际上是从行为特性描述到中间表示格式一对一的翻译。因此,有必要对中间表示格式进行相应的转换。转换的目的在于对设计目标的行为进行转换(优化)。
基本的转换是编译优化。它包括:
(1) 常量代入:图5.6(a)所示控制数据流图表示下列2个VHDL语句:
a := 2;
c := a + ( 4 + b );
其中a被赋值为2,a作为一个常量可直接将常数2代入,如图5.6(b)所示。
(2)无用码(操作)删除:如图5.6(b) 所示,若常量a不再被重新赋值,则在代入后操作1变为无用操作(无用码)。可以将该操作删除,而不会改变控制数据流图的语义。
(3)公因子的提取与公用表达式的删除。
(4)代码(操作)移动:将条件分枝中的操作移出条件分枝,或将条件分枝外的操作移入条件分枝。
(5)过程体展开:将过程体(子程序或函数)展开代入主程序中,以便于整体转换与优化。
(6)循环展开:将循环次数已知的循环体展开,进行整体转换与优化。将循环次数不可预知的循环体展开,进行流水线设计。
编译优化中的公因子提取、公用表达式的删除、代码移动和循环展开将在以后几节中讲述。
图5.6 常量代入与无用码删除
 |
针对高层次综合进行的其它转换包括:
(1)针对专门硬件模块进行的操作转换和将复杂的多周期操作转换为简单操作。例如,对于乘以2或2的幂、除以2或2的幂这类操作,可以用位操作选取相应的位来实现,即对应于移位寄存器的移位操作。
(2) 增加操作的并行度。在硬件模块足够多的情况下,使操作尽可能并行执行。
(3)减少控制数据流图中关键路径和指定路径上的操作个数。以提高数字系统的速度。
(4)把分枝操作移入 / 移出条件分枝,以提高资源的利用率和数字系统的速度。
(5)把循环体展开,实现流水线设计等。
实际上,高层次综合中转换的效果很难估计。因为在高层次综合的初始阶段,性能指标中的面积、时延、功耗等仅仅是一个估算值,只是在实际硬件确定后才能计算出精确值。例如,高层次综合中的关键路径经过逻辑综合后可能不再是关键路径。而高层次综合中的非关键路径经过逻辑综合后可能变成关键路径。这是高层次综合技术中的难点,也正是高层次综合面临的研究课题。目前的作法多采用试探法进行转换,或由设计者根据个人经验指定某些转换。然而,把高层次综合和逻辑综合相结合甚至和布图相结合的研究工作正在悄然展开。
|