1 VHDL设计中提高硬件综合效率的主要策略
VHDL作为一种硬件描述和仿真语言,最终要实现的是实际硬件电路。但是其设计初衷并非综合,某些语句并不被综合器支持,所以在选择语句时应考虑到综合与仿真的效率。只有使用综合工具支持的语句,设计出的程序才有意义。在编程时要注意以下几点:
① 尽量不使用WAIT FOR XX ns语句和AFTER XX ns语句。XX ns表明在执行下一操作之前需要等待的时间,但综合器不予支持,一般忽略该时间,而不会综合成某种元件,故对于包含此类语句的程序,仿真结果与综合结果往往不一致。
② 声明信号和变量时尽量不赋初值,定义某确定数值时,使用常量而不用变量赋初值的形式。因为大多数综合工具将忽略赋值等初始化语句,诸如:VARIABAL S∶INTEGER∶=0。
③ 函数或过程调用时尽量使用名称关联。因为名称关联可以比位置关联更好地防止产生不正确的端口连接和元件声明,也不要在同一个语句中同时使用两种关联。诸如:
clk_1:bufes port map(I=>clock_in,clock_out);(不正确的用法)
clk_1:bufes port map(I=>clock_in,O=>clock_out);(正确的用法)
④ 正确使用when_else语句、if_else语句和case语句。VHDL设计电路的复杂程度除取决于设计功能的难度外,还受设计工程师对电路描述方法的影响。最常见的使电路复杂化的原因之一是,设计中存在许多本不必要的类似LATCH的结构,并且这些结构通常都由大量的触发器组成,不仅使电路更复杂,工作速度降低,而且由于时序配合的原因还会导致不可预料的结果。例如,描述译码电路时,由于每个工程师的写作习惯不同,有的喜欢用IF...ELSE语句,有的喜欢用WHEN...ELSE方式,而用IF...ELSE时,稍不注意,在描述不需要寄存器的电路时没加ELSE,则会引起电路不必要的开销。
例程2由于使用WHEN...ELSE完整条件语句,不会生成锁存器结构,所以不会有问题。而例程1若不加else Outy<=″0000000″语句,则属于不完整条件表达方式,会生成一个含有7位寄存器的结构。虽然上述例程都能实现相同的译码功能,但是电路复杂度会大不相同。
⑤ 注意算术功能的设计优化。例如下面两条语句:
Out<=A+B+C+D;
Out<=(A+B)+(C+D);
第一条语句综合后将会连续叠放3个加法器(((A+B)+C)+D);第二条语句(A+B)和(C+D)使用两个并行的加法器,同时进行加法运算,再将运算结果通过第三个加法器进行组合。虽然使用资源数量相同,但第二条语句速度更快。以4位和 16位加法器为例,选用Altera公司EPF10K30AQC240_3芯片,通过synopsys FPGA Express综合工具实现的结果进行测试,比较结果如表1所列。
2 优化系统速度的VHDL设计策略
选用基于VHDL设计的CPLD/FPGA器件往往首先是为了满足高速运行的需要,如通信系统。系统运行速度与电路节点之间的延时直接相关,因此,减少冗余逻辑,缩短节点延时是提高系统速度的关键。速度优化与电路结构设计(如器件结构特性、系统电路构成和PCB制板情况)和软件使用(如综合器性能和VHDL描述方式)都有关系。
3.2 逻辑优化方法
通过逻辑优化以减少资源利用也是常用的面积优化方法(如常数乘法器的应用,并行逻辑串行化处理等),但其代价往往是速度的牺牲。在延时要求不高的情况下,采用这种方法可以达到减少电路复杂度、实现面积优化的目的。
4 结论
通过以上初步的探讨可知,用VHDL进行集成电路的设计,不仅需要熟悉VHDL语言的使用方法和对设计要求的深刻理解,而且应在设计全程中遵循最优化设计的基本原则,在电路结构设计和软件使用中寻找满足设计要求的最佳方案。
文章评论(0条评论)
登录后参与讨论