苏家屯房证办事大厅:避免用组合逻辑产生时钟

来源:百度文库 编辑:爱问知道 时间:2020/04/02 07:29:45

避免用组合逻辑产生时钟

上一篇 / 下一篇  2011-04-06 12:32:34/ 个人分类:经验集锦

查看( 282 ) / 评论( 2 ) / 评分( 0 / 0 )

今天看到一个问题如下:
  在生成位流文件的时候,显示的警告如下:
  Clock net u8/dout_not 0001 is sourced by a combinatorial pin.This is not good design practice.Use the CE pin to control the loading of data into the flip-flop.

回复:

报告的warning和这个模块看起来没关系,至少从你贴的代码没看出来问题。但是报告的warning你的确需要关注,你用了gating clock,你是不是将这个模块的dout在外面用作时钟了?如果是的话,设计是不建议这样用的。
最好不要用运算之后的信号来做一个模块的输入时钟,因为信号的时钟要求非常高的质量,对于duty-cycle, jitter, skew都有非常高的要求。但是组合逻辑生成的时钟可能会有毛刺等等对于时钟是非常致命的东西。
除非你非常有把握,否则不建议这样的设计方法。
这就是这个警告的意思。

评:对于ASIC设计来说,gating-clock可以通过特定的单元或者综合工具,由工艺库提供商或者综合器来保证gating-clock的正确性。在RTL代码级设计中,尽量不要使用gating-clock来控制时钟。使用控制时钟的方法非常危险,因为这个非常难以通过后端约束来解决组合逻辑产生的glitch,这些时钟的glitch会使设计功能变得杂乱无章,无法跟踪,导致仿真和综合后结果不能match。

当然,我觉得ASIC设计后端place&route可以人工干预,以此来控制产生的clock的质量。FPGA实现就没有这么好的命运了,大多数的FPGA是经过工具自动布局布线完成,而且FPGA设计因为其灵活性,经常有非常多次数的设计交替(不像ASIC,芯片做一次后端,制造出来了,ASIC设计就结束了)。所以,每次FPGA自动布局布线都可能会将产生的clock布线结果不一样,那么clock质量就不一样,这样设计的后端会非常难做,产生的bit流文件也非常难在FPGA上debug(调试)。

最后,需要指出的是,不是不能在FPGA内用gating clock,不同的FPGA厂商有其自己的gating clock或者时钟生成器的方法。需要详细参考其data-sheet。避免问题的产生。