### FPGA/CPLD数字电路设计经验分享
#### 一、数字电路设计中的基本概念
##### 1.1 建立时间和保持时间
在数字电路的设计中,建立时间和保持时间是非常重要的概念,尤其是在与时序相关的电路设计中。这两个概念直接决定了触发器能否正确地捕获数据。
- **建立时间(Setup Time)**:指的是在触发器的时钟信号上升沿到来之前,数据必须保持稳定不变的时间。如果建立时间不足,数据可能无法在时钟上升沿被捕获。
- **保持时间(Hold Time)**:指在触发器的时钟信号上升沿之后,数据必须保持稳定不变的时间。如果保持时间不足,数据也可能无法被捕获。
为了确保数据能够被正确捕获,建立时间和保持时间都必须得到满足。在实际的设计过程中,这些时间值可能会因为各种因素而有所差异,比如时钟树的偏斜情况。在进行后仿真验证时,通常使用最大延迟来检查建立时间是否满足要求,而使用最小延迟来检查保持时间是否满足要求。
值得注意的是,建立时间通常与时钟周期有关,如果系统在高频时钟下无法正常工作,可以通过降低时钟频率来解决问题。然而,保持时间则与时钟周期无关,一旦设计不合理导致无法满足保持时间要求,就需要对整个系统进行较大的修改才能解决,这会极大地影响设计效率。因此,在设计初期就需要充分考虑时序问题,以提高设计的质量。
在可编程逻辑器件(PLD)和现场可编程门阵列(FPGA)中,由于时钟树的偏斜相对较小,保持时间一般都能够满足要求。PLD/FPGA开发软件通常能够自动计算建立时间和保持时间,帮助设计者进行优化。
##### 1.2 FPGA中的竞争和冒险现象
在FPGA内部,信号通过连线和逻辑单元时都会有一定的延时。这种延时不仅受到连线长度和逻辑单元数量的影响,还受到器件制造工艺、工作电压和温度等因素的影响。当多个信号同时变化时,由于这些延时的存在,会导致输出信号出现“毛刺”,即短暂的不正确的尖峰信号。
- **竞争冒险**:当输入信号同时发生变化时,组合逻辑电路可能会产生毛刺。这些毛刺可能会影响逻辑电路的稳定性,尤其是对于时钟端口、清零和置位端口等对毛刺非常敏感的输入端口。
- **如何处理毛刺**:为了避免毛刺的影响,可以通过改变设计来消除产生毛刺的条件。例如,使用格雷码计数器替换普通的二进制计数器,因为格雷码计数器每次仅有一位跳变,从而避免了竞争冒险的发生。此外,也可以通过使用同步电路来减少毛刺的影响,因为同步电路中的信号变化通常发生在时钟边沿,只要毛刺不发生在时钟的上升沿且满足建立和保持时间,通常不会对系统造成危害。
在FPGA/CPLD的数字电路设计中,理解并妥善处理建立时间和保持时间、以及如何有效避免竞争冒险现象,是确保电路性能和稳定性的关键。通过合理的设计方法,可以大大提高电路的后仿真通过率,并使系统的工作频率达到较高水平。