在大家理解了时钟和时序逻辑的工作机理后,也就能够理解为什么时钟信号对于时序逻辑而言是如此的重要。关于时钟的设计要点,主要有以下几个方面:
① 避免使用门控时钟或系统内部逻辑产生的时钟,多用使能时钟去替代。(特权同学,版权所有)
门控时钟或系统内部逻辑产生的时钟很容易导致功能或时序出现问题。尤其是内部逻辑(组合逻辑)产生的时钟容易出现毛刺,影响设计的功能实现;组合逻辑固有的延时也容易导致时序问题。(特权同学,版权所有)
② 对于需要分频或倍频的时钟,用器件内部的专用时钟管理(如PLL或DLL)单元去生成。(特权同学,版权所有)
用FPGA内部的逻辑去做分频倒不是难事,倍频恐怕就不行了。但是无论是分频还是倍频,在通常情况下都不建议用内部逻辑去实现,而应该采用器件内部的专用时钟管理单元(如PLL或DLL)来产生,这类专用时钟管理单元的使用并不复杂,在EDA工具中打开配置页面进行简单参数的设置,然后在代码中对接口进行例化就可以很方便的使用引出的相应分频或倍频时钟进行使用了。(特权同学,版权所有)
③ 尽量对输入的异步信号用时钟进行锁存。(特权同学,版权所有)
所谓异步信号,是指两个处于不同时钟频率或相位控制下的信号。这样的信号在相互接口的时候如果没有可靠的同步机制,则存在很大的隐患,甚至极有可能导致数据的误采集。笔者在工程实践中常常遇到这类异步信号误触发或误采集的问题,因此也需要引起初学者足够的重视。在笔者的《深入浅出玩转FPGA》笔记6中列举的一些改进的复位设计方法就是非常典型的异步信号的同步机制。(特权同学,版权所有)
④ 避免使用异步信号进行复位或置位控制。(特权同学,版权所有)
这个点和上一个点所强调的是同一类问题,异步信号不建议直接作为内部的复位或置位控制信号,最好能够用本地时钟锁存多拍后做同步处理,然后再使用。(特权同学,版权所有)
上述几个点对于初学者可能很难理解和体会,没有关系,当你有了实践经历以后回头再品味一下或许就有味道多了。由于这几个点多少也算是比较高级的技巧了,所以无法一一扩展开来深入剖析。更多相关扩展的知识点读者可以参考笔者的《深入浅出玩转FPGA》一书,那里有更多更详细的介绍和说明。(特权同学,版权所有)