我有一个项目要在FPGA上进行VHDL(旋风IV)。我的大多数实体都使用一个时钟。我知道时钟门控不是一个好的解决方案(见图),因为它会导致时序违规。有人能告诉我做这种事情的好习惯规则是什么? (我显然在互联网上做了一些研究,但我找到了关于时钟域交叉的每个链接) 谢谢
答案 0 :(得分:0)
该图不是时钟门控的演示。它显示了时钟分布树的不同部分之间的偏斜的影响。即使您没有选择时钟,这也是合成任何实际设计的现实。除了在时钟分配中自然发生的时钟之外,门控时钟还会在其扇出中的节点上引入额外的偏斜。
在非平凡设备中,时钟通过缓冲树以最小化容性负载。在FPGA中,时钟通常在精心设计的全局时钟网络上进行路由,这些时钟网络已经过优化,可以最大限度地减少偏斜。在ASIC中,将合成平衡时钟树,并且物理时序约束将指导缓冲器的放置以最小化触发器处的偏斜。除非你正在做一些异国情调,否则后端工具将为你提供最好的时钟树。
作为设计人员,您主要通过设置适当的时序约束来处理偏斜问题,并使用静态时序分析来验证您是否满足最坏情况(和最佳情况)条件下的设置和保持要求。 FPGA已经将其延迟特性用于静态时序。使用ASIC,可以在布局布线之前和之后估算设计延迟并将其输入分析仪。门控时钟将引入偏移,从而减少受影响数据路径上的可用时序预算。如果您已正确设置约束,时序分析器将考虑到这一点。一旦你在最终设计上通过静态计时,你的工作就完成了。
如果由于数据路径中的组合延迟而导致时序故障您必须执行以下操作之一:
如果门控时钟引入太多偏差,您可以将其视为完全创建新的时钟域,并使用时钟域同步技术在不同域之间传递信号。