4 VHDL编码方式对综合质量的影响
VHDL语言支持全部的仿真功能,但并不是全部可综合的。VHDL程序的许多硬件描述和仿真结构没有对应的数字电路来实现,还有些描述在理论上可以映射为对应的数字电路,但是却不能保证其精确性,比如延时模型。随着综合算法技术水平的提高,针对某些寄存器传输级RTL(Register Transfer Level)电路描述可以进行有效的优化,但是对于更普遍的电路描述这还不够,因此综合结果是否满足给定的时间约束条件和面积约束条件,还取决于VHDL编码方式。下面给出几点经验,相信对提高综合质量有所帮助与启发。
(1)资源共享
例如下面的两段代码中,(A)需要2个加法器,而完成同样的功能,略做修改;(B)只需要1个加法器,有效地减少了使用面积。
适当地利用圆括号进行重新组合,有时也可以实现资源的共享。如下面两段代码(C)和(D),(D)中输入信号b和c即可实现加法器的共享。
(2)使用带范围限制的整数
在VHDL中无约束整数的范围是-2147483647~+2147483647。这意味着至少需要32位来表示,但通常这会造成资源的浪费,有些综合软件会自动优化,但所消耗的时间是相当可观的。因此,如果不需要全范围的整型数据,最好指定范围,例如:
signal small_int : integer range 255 downto 0 ;
small_int在本例中只需要8位,而不是32位,有效地节约了器件面积。
(3)使用宏模块
当在VHDL中使用算术逻辑、关系逻辑等通用逻辑结构时,多数EDA开发软件及专用综合工具通常包含针对特定工艺的优化宏模块供我们选择,从功能上可分为时序电路宏模块、运算电路宏模块和存储器宏模块,具有很高的执行效率,使得综合结果面积更小、频率更高、所需编译时间更短。当然,它们是针对特定工艺的,这将使VHDL程序依赖于具体的器件系列,影响移植性。
(4)高级设计优化
上述几种方法是在没有改变其功能性的情况下进行综合优化的,有时候我们可以在不妨碍设计规格约束的前提下,稍微改变其功能,来提高综合效率,参考下面两个例子(E)和(F)。
在(E)中,综合工具建立递增计数器和完整的比较器;在(F)中,综合工具建立递减计数器和对于常数零的比较器。由于和常数作比较更易于实现,且占用逻辑单元更少,因此(F)程序更高效。
另外,由于综合工具只能支持VHDL的子集,为保证在综合前后的仿真保持相同,以下语句在综合中应该避免使用:
◇ 避免使用 wait for xx ns,这种语句不会被综合为实际的电路元件;
◇ 避免使用after xx ns,在综合工具进行综合时,会忽略after语句;
◇ 避免在信号和变量声明时赋初值,因为大部分综合工具会忽略初始化语句,如果使用初始化语句,那么综合的结果和仿真的结果将会产生差异。