对于reset的处理:
1. 设计:
1.1 对于从芯片pad进来的reset信号,与clock相位无关,所以一定是异步的。在设计时要现将pad引进来的reset同步化,然后更给内部flip-flop使用。synchronizer结构如下:
1.2 内部逻辑使用异步reset或同步reset设计都可以。但是最好不要混用。
1.3 内部逻辑使用多个时钟域时,reset进入每个时钟后都要用同步器同步。如果是从快速时钟域进入慢速时钟域,reset要增加其assertion宽度,保证对慢速时钟域有效。
1.4 有些人建议在reset之后再启动clock(gating clock),这样做的好处:
1)meta-stable问题不存在了。
2)利于STA分析,recovery/removal分析不用做了。
3)后端工具也不用做所谓的
reset tree,省面积,省功耗。
不好之处:
1)对于同步reset设计无效果。
2. DC综合(DC synthesis)
2.1 对于从pad引进的reset,应该将其设成false_path:
set_false_path [get_ports reset]
2.2 对于同步后的reset,DC综合室时应将其设置成:
set_ideal_network [get_pins rst]
这样DC不会对reset信号进行优化,不会进行DRC检查。
set_dont_touch_network [get_pins rst]
这样DC不会对reset信号进行优化。
2.3 如果内部设计是同步reset设计,在读入hdl之前还要设定:
hdlin_ff_sync_set_reset
这样DC会将同步reset在combinational逻辑之后在和在一起,输入给flip-flop的D端。
2.4 reset tree的生成,skew balance等工作交给后端处理。
3. STA
3.1 布局布线后做静态仿真,根据reset和clock的关系决定是否检查recovery/removal violation。对于reset时关掉clock的设计,reset动作前后保证没有clock,可以set_false_path。其它就要检查recovery/removal。
3.2 对于同步reset设计,不需要关心recovery/removal,因为reset是连到flip-flop的D端,和其它逻辑一样,做setup/hold检查。
4. P&R
4.1 encounter中处理(参考:http://www.edacn.net/bbs/viewthread.php?tid=52252&page=1)
1)去掉dont_touch
2)设置max_transition/fanout/cap
3)优化
3)或者用bufferTreeSynthesis为reset信号作buffer tree
4)布线
5)再做power analysis就没问题了
5. DFT综合
5.1 有内部控制的异步reset时(如子模块的reset由其他模块的寄存器输出控制),由其异步reset的flip-flop不做scan chain插入。
tengjingshu_112148725 2009-5-12 13:55