在通常的 FPGA设计中对时钟偏差的控制主要有以下几种方法:
⑴ 控制时钟信号尽量走可编程逻辑器件的的全局时钟网络。 在可编程逻辑器件中一般都有专门的时钟驱动器及全局时钟网络,不同种类、型号的可编程逻辑器件,它们中的全局时钟网络数量不同, 因此要根据不同的设计需要选择含有合适数量全局时钟网络的可编程逻辑器件。一般来说,走全局时钟网络的时钟信号到各使能端的延时小,时钟偏差很小,基本可以忽略不计。
⑵ 若设计中时钟信号数量很多,无法让所有的信号都走全局时钟网络,那么可以通过在设计中加约束的方法,控制不能走全局时钟网络的时钟信号的时钟偏差。
⑶ 异步接口时序裕量要足够大。局部同步电路之间接口都可以看成是异步接口,比较典型的是设计中的高低频电路接口、I/O 接口,那么接口电路中后一级触发器的建立—保持时间要满足要求,时序裕量要足够大。
⑷ 在系统时钟大于 30MHz时,设计难度有所加大,建议采用流水线等设计方法。
⑸ 要保证电路设计的理论最高工作频率大于电路的实际工作频率。
复位和置位信号处理:
在设计时应尽量保证有一个全局复位信号,或保证触发器、计数器在使用前已经正确清零状态。在设计寄存器的清除和置位信号时,应尽量直接从器件的专用引脚驱动。另外,要考虑到有些器件上电时,触发器处于一种不确定的状态,系统设计时应加入全局复位/Reset。
这样主复位引脚就可以给设计中的每一个触发器馈送清除或置位信号, 保证系统处于一个确定的初始状态。需要注意的一点是:不要对寄存器的置位和清除端同时施加不同信号产生的控制,因为如果出现两个信号同时有效的意外情况,会使寄存器进入不定状态。