门控时钟与多时钟电路的时序约束
(2013-04-17 09:31:54)分类: 数字后端 |
问题1:
假设clk1分频生成clk2,clk2分频生成clk3,那么在定义generated clock的时候是否应该把clk3的源时钟定义成clk1??
A:两者都可以,把clk3的源时钟定义成clk2比较安全,可以被更多的工具接受
问题2:
对于下面的这种形式的时钟逻辑,clk1和clk2的时钟定义能否穿透中间的逻辑到达clk3呢?
assign a = (sel1)?clk1:clk2;
assign clk3 = (sel2)?a:~a;
A: 可以穿透。对于clk3建议在这里例化单元来实现,然后把clk3定义在单元的pin上。
问题3:
为了关断模块时钟clk,加入了一个使能信号clk_en,那么在代码书写时是否可以直接写成clk_out=clk&clk_en,然后让DC自己去生成门控逻辑,还是应该例化库中的门控单元来实现呢?如果例化门控单元来实现,那么clk的时钟定义能否穿透这个门控的单元呢?
A: 1.建议例化库中的门控单元来实现,最好用集成and+latch的门控单元,这种门控单元可以去除毛刺。
2.时钟定义能穿透门控单元的。
问题4:
如果问题3采用门控单元来实现,那么对这个单元有特殊的约束要求没有呢?
A:如果用集成and+latch的门控单元,不需要额外的约束。只需set_dont_touch
问题5:
设计内部有多个时钟,这些时钟都是由一个时钟通过不同的分频而得到的,但是在插入门控过后,对那些门控后的时钟引入了额外的skew和latency,工具会自动对相关参数进行处理吗?会保持他们之间的同步的关系来确保不同时钟域之间的数据交换么?
A: 后端工具有办法处理带门控单元的时钟树的。
问题6:
对于由模块内部生成的用于其他模块的异步复位信号,需要关注哪些问题?这两个模块的时钟是同步时钟,只是一快一慢而已.
A:如果你可以保证在异步复位信号有效时没有时钟边沿的话,
就set_false_path -from reset; 如果不能保证的话,就按照一般的信号处理,让工具去收敛时序
问题7:
假设一段较长的流水线逻辑都是多周期路径,是否有简单的方法可以只约束一次,而不用去对每一个寄存器之间的路径都去约束,以声明其为多周期路径?
A:试着用*号去做
问题8:
综合时设置input/output delay时用到了虚拟时钟,那么在提供给版图的sdc文件中,这个虚拟时钟是否应该继续存在呢?
A:虚拟时钟始终要存在sdc文件中,因为做post-layout的STA时也需要的。
问题9:
对于那种由一个时钟不同分频得到的时钟之间的数据交换,是否需要设置多周期路径?
A:一般来讲,不需要设置为多周期路径,除非你从功能上可以保证它是多周期路径