查找 CDC dff

在cross domain的设计中, 单bit信号会用多个DFF级联的方式进行同步,来降低亚稳态传播的概率。但是再post-sim的时候这些同步电路的第一个DFF可能会报Violation, 这种violation是正常的, 因为第一个DFF出现亚稳态的概率还是比较高的。

我们需要把这些DFF从post-layout的网表中找到。

RTL coding 注意事项

  1. 为了很方便地找到这些DFF, 建议同步电路写成一个独立module, 不要分散在功能的
    module 里面。

  2. module的名字应该包含async, 比如data_async.v data_async_pos.v等, 这样就很容易在电路的hierarchy中找到。

tcl脚本示例

首先打开PT, 读入STD cell的lib和post-layout网表: 加入u_sub_module下面有很多u_data_async, 我们就可以用下面tcl找出sync电路的第一个DFF。

1
2
3
4
5
6
set dff_list [list \
[sort_collection [get_cell -h -filter "full_name =~ u_sub_module*async*data_reg_0*"]{full_name}] \
]
foreach_in_collection itr $dff_list{
echo [get_objec_name $itr] >> sync_dff.list
}

然后就可以进一步处理这个list, 产生一些*.v 文件, 屏蔽post simulation中可能出现的timing Warning。