假设这样一种情况:
绕线完修完timing 后,designer 修改了netlist,给了eco.v,其中改动了 clock tree 的一个分支,导致这个分支上的buffer 都没有了,如下图
一个 mux 驱动60个 register,驱动力不够,导致这些 register 的 ck 端的 transition 超大
为了修掉这些transition,首先考虑在 mux 后面加buffer(mux 已经是最大size了),但是这样buffer 的fanout 还是很大,可能还是会有transition,
此时考虑将这些 register 分成两组,分别用 buffer 去驱动,如下图:
这样每个 buffer 只需要驱动 30 个 register,transition 应该能降下来。
但是怎样达到这个目的呢?
首先考虑用 insert_buffer,抓出其中 30个register,然后 insert_buffer -object_list,就可以让buffer 驱动这30个register了,
问题是如何抓出这60个reg 中的30 个,最好这30个 reg 的物理位置都是比较靠近的,似乎只能手动去选择,这个就很麻烦了
另外有一个办法,直接用 create_buffer_tree 就可以达到这个目的,图中的这种一分为二的结构其实就是典型的 buffer tree,直接在 mux 输出端 create_buffer_tree 即可
命令如下:
set_ahfs_options -default_reference {CKBUFD6 CKBUFD8 CKBUFD12} ## 指定创建buffer tree 用的buffer
create_buffer_tree -from mux_output_net ## 创建 buffer tree