用VHDL 语言设计电路是利用硬件描述的方法,将系统功能通过目标器件表现出来,而目标器件的资源占用率是设计成功与否的关键。虽然HDL 设计语言与设计平台与具体硬件无关,设计者能最大程度地将自己的才智和创造力集中在系统性能提高和成本降低上,但描述方法、设计规则和逻辑设计等均对电路的结构有一定的影响。不合理的VHDL 设计往往占用过多的系统资源,有些甚至不能在目标器件中适配,因此,应该在设计时对有些事项加以注意。
毛刺问题的处理
在EDA 环境中,毛刺是系统设计是否成功的关键。毛刺(竞争- 冒险) 现象是长期困绕电子工程师的问题之一。由于毛刺的存在,使得系统存在许多不稳定因素,经常会造成对脉冲上下沿敏感的电路产生误动作。毛刺主要是由门电路延时及路径延时造成的,采用传统设计方法时,毛刺必须在硬件测试时才有机会发现。但在现代数字系统设计时,通过EDA 软件,完全可以找出毛刺产生的原因及产生的位置,并且非常精确和接近实际情况。
目前常使用三种方法来消除毛刺,它们分别为延时法、选通法和修改逻辑设计法。其中,修改逻辑设计能从根本上消除毛刺,但该方法要求使用者掌握电路的工作状态及其转换,有时需要多路输出,使用起来有一定的复杂性。
FPGA 及CPLD 器件的选择
现场可编程门阵列FPGA(Field Programmable Gate Array) 和复杂可编程逻辑器件CPLD(Complex Programmable Logic Device) 均是目前大量使用的可编程大规模集成电路。可编程器件的使用,大大缩短了电子产品的设计周期,减少了设计费用及风险,是电子产品领域的一场革命。FPGA 器件将逻辑功能块排列为阵列,并由可编程的内部连线连接这些功能块来实现相应的逻辑功能。
FPGA 器件的内部可以分成三个组成部分,分别是可构造的输入/ 输出模块IOB ( Input/ Output Block) 、可构造逻辑块CLB(Configurable Logic Blocks) 和可编程内部连线资源PIA(Programmable Interconnect Array) 。CPLD 器件将多个可编程阵列器件(PAL) 集成到一个芯片内,一般包含三个部分,分别为可编程逻辑功能块(FB) 、可编程I/ O 单元以及可编程内部连线,有些CPLD 器件还集成RAM、双口RAM 和FIFO 等。尽管FPGA 和CPLD 均为可编程器件,有很多共同的特点,但由于结构上的差异,在使用时,必须注意以下几点:
(1) CPLD 器件编程时采用E2PROM 或FAST FLASH 技术,使用时无需外部存储芯片,系统断电时,编程信息不丢失;而FPGA 器件必须使用外部存储器存储编程的信息。由于采用SRAM 存储技术,FPGA 编程信息在系统断电时丢失,每次上电时,必须将编程信息重新写入SRAM 中,但其编程次数没有限制,可以随时改变编程信息。
(2) CPLD 器件的速度比FPGA 快,保密性能好,但功耗大,而且这一特点随集成度的提高,愈加明显。
(3) FPGA 的集成度比CPLD 高,但其时序延迟不可预测,而CPLD 器件由于采用边续布线结构,决定了它的时序延迟是均匀的,可预测的。尽管采用FPGA 和CPLD 器件均可完成相同的电路设计,但在实际使用时,应注意到对于复杂的组合电路设计,宜采用CPLD 器件,而在电路设计时,如果用到较多的触发器,则宜采用FPGA 器件。
FPGA 和CPLD 器件管脚使用和选择时应注意的问题
要保证器件所有的电源正端和接地端可靠连接,每一对电源正端和地线之间并联一个0. 1UF 的电容,以便滤波和去耦。由于可编程器件在使用时,编程信息易于修改,应对内部的逻辑单元和外部的引脚留有一定的余量,以便系统的修改和扩充。时序电路一定要使用“上电复位”电路,以保证系统上电后,便处于初始状态。合理进行引脚锁定,以避免管脚位置的变化导致的电路设计失败,因为管脚的位置变化,往往会引起指定功能块组合的变化,造成芯片内部资源的不足。
在使用VHDL 语言编程时,应合理选择信号、变量以及数据类型因为VHDL 语言是一种硬件描述语言,信号、变量均具有一定的硬件性质,并占有相应的内部资源。变量具有局部特性,只在一个进程或一个子程序中有效,但对于它的赋值是立即生效的。信号则不同,它具有全局特性,对信号的赋值不是立即生效的。一般情况下,往往在进程中使用变量传递数据,然后利用信号将数据带出进程。
无论是变量还是信号,一定要在定义完类型后,根据实际的需要确定数据的范围,否则将大大占用内部资源。不同的数据类型不能直接进行运算,即使数据类型相同,位长不同时,也不能直接带入。寄存器的引入往往是通过WAIT 和IF 语句测试敏感信号边沿来实现的,禁止在一个进程中同时存在两个或两个以上的寄存器描述,即一个进程中只能有一个WAIT 和IF 语句。一般情况下,不要将产生寄存器的赋值语句放在IF 语句的ELSE 分支上,但可以放在ELSEIF 语句上。
总结
随着硬件描述语言的出现,电子工程师利用TOP - DOWN 设计理念,使得系统的设计从一开始就能够在系统级的行为描述上得到验证。由于系统设计时,与硬件结构无关,使得设计结果可以在不同的硬件上自由移植,增加了系统设计的复用性。逻辑方法的实现可以有多种实现途径,如果设计不当,会用更多的内部资源来实现同样的功能。应该尽量提高硬件资源的利用率,避免出现不必要的锁存器。在编写程序时,要对整个设计进行深入的了解,提出几种方案进行综合比较,从而得到最好的方案。