摘 要:从描述方法、设计规则、时序等方面分析了用硬件描述语言VHDL在EDA设计中容易出现问题的原因,并提出了相应的解决方案。
关键词:VHDL语言 数字系统设计 问题
VHDL语言作为一个系统设计语言的工业标准已被广大的硬件设计者所接受。但因其具有庞大、繁琐以及易于出错的特性[1][2],且在实际设计过程中,每个设计工程师对语言规则、电路行为的理解程度和编程风格不同,造成同样的系统功能综合出来的电路结构往往大相径庭,其电路的复杂程度和时延特性也差异较大,有时某些臃肿的电路还会产生难以预料的问题。因此,有必要对在VHDL设计中如何简化电路结构及优化电路设计的问题进行深入探讨。
1 设计问题探讨
1.1 描述方法对电路结构的影响
用VHDL语言进行电路设计,其最终综合出的电路的复杂程度除取决于该设计所要求功能的难易程度外,还受设计工程师对电路描述方法和设计规则理解程度的影响。最常见的使电路复杂化的原因之一是设计中存在许多本不必要的类似锁存器的结构而导致电路复杂、工作速度低,且由于时序问题而导致不可预料的后果。
VHDL语言中引入寄存器的是Wait和If语句。所以如果要描述一个组合电路和时序电路混合的系统,可以将描述时序的部分放在具有边沿检测条件的If或Wait语句的进程中,而将描述组合电路的语句放在普通进程中。在此普通进程中,应尽量使用When...Else来代替If结构或If语句中必须带有的Else。典型电路是FSM(有限状态机)电路,建议用3个进程来描述。具体如下:
1.2 毛刺信号
任何组合电路都可能是潜在毛刺信号的发生器。当毛刺信号影响后续电路时,整个设计就只能宣告失败。因此,当后续电路对组合电路输出的毛刺敏感时,最好的办法是将此输出进行锁存后再输出到下一级,如图1所示。
1.3 时 序
在原始设计电路中,应充分考虑在每一步时序上留有如图2所示的充分裕量,以避免由于电压、温度和工艺等变化出现时序上的问题。
1.4 时钟电路
若时钟电路设计不当,在环境因素(如温度、电压等)变化时,会导致电路逻辑混乱。时钟电路设计过程中,建议尽可能使用如图3所示的全局时钟,少用门控时钟,不用多级时钟、级联时钟和多时钟网络。使用门控时钟时要求门控时钟只能由单个的“与门”或“或门”构成,且门的输入信号中只能有1个信号作为时钟信号。最好的办法是将门控时钟改为全局时钟,以改善设计电路的可靠性,如图4、图5所示。并且用控制门控时钟的控制信号作为触发器的使能信号或用其控制输入数据。
1.5 异步逻辑
EDA(Electronics Design Automation)设计中,由EDA系统自动完成布线。特别是在FPGA设计中,为了均衡逻辑块的资源,信号在整个芯片内部经过的门数可能并非与逻辑表达式中所期望的一致,有时甚至无法正确估计某个信号的延时。因而常规的诸如利用增加冗余项或增加惯性延时环节来消除异步电路带来的冒险方法均不一定能起作用。所以数字系统设计中尽量少用异步电路,或用选通脉冲在信号作用时间上加以控制来避开产生冒险的尖峰。
1.6 异步输入
许多输入要求各异步系统之间进行同步通信,或者同步系统需要异步输入控制。如果异步输入不能满足建立时钟和保持时钟的限制,则会导致受控的同步系统出现逻辑混乱。
如果是寄存器的异步置位或清零端,最好用全局的置位或清零控制信号驱动;对于其他控制输入可以插入D触发器来解决异步输入不稳定的问题。
2 结 论
通过以上讨论可知,用VHDL语言进行电路设计时,涉及到VHDL语言的使用方法和对设计的理解程度。因此在编程前首先要对整个设计进行较深入的了解,科学地设计规划,在进行具体设计时应注意以下问题:
(1)保证时钟无毛刺,尽量利用全局时钟,少用门控时钟。(2)尽量使用全局置位复位信号。(3)寄存所有对毛刺敏感的组合输出,组合电路复杂时可采用“流水”技术。(4)同步所有异步输入信号,尽量不用异步电路。(5)对同步时序电路应消除“滞留”状态。(6)为每一步时序留有充分的裕度等。
参考文献
1 IEEE Standard VHDL Language Reference Module.IEEE,Std 1076-1993.1993
2 IEEE Standard VHDL Mathermatical Packages.IEEE,Std 1076.2-1996.1996