假设这样一种情况:

绕线完修完timing 后,designer 修改了netlist,给了eco.v,其中改动了 clock tree 的一个分支,导致这个分支上的buffer 都没有了,如下图

create_buffer_tree  example-LMLPHP

一个 mux 驱动60个 register,驱动力不够,导致这些 register 的 ck 端的 transition 超大

为了修掉这些transition,首先考虑在 mux 后面加buffer(mux 已经是最大size了),但是这样buffer 的fanout 还是很大,可能还是会有transition,

此时考虑将这些 register 分成两组,分别用 buffer 去驱动,如下图:

create_buffer_tree  example-LMLPHP

这样每个 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

05-11 20:52