path 横跨ip导致的 data tran violation 怎么修
“横跨 IP” 指的是在 P&R 阶段,一条数据路径的起点和终点分别落在两个不同的 IP macro 上;由于 IP 的摆放已经固定或只能微调,这根跨 IP 的 net 往往很长,寄生电容大,fanout 也可能高,于是很容易产生 data transition violation。这类 violation 的修复思路与普通 tran violation 一致,但受限于 IP 无法移动,更强调 “缓冲前移”+“资源借用” 的组合打法。下面给出系统步骤:
精确定位
用 report_timing -transition_time -from <start_IP_pin> -to <end_IP_pin> 把跨 IP 的路径拉出来,确认
– 实际 transition 与 lib 上限差多少
– net 长度、fanout、电容 三项中哪一项是瓶颈不能动 IP,那就动线——“缓冲前移”
把 buffer tree 尽量放到离驱动 IP 的出 pin 最近的地方;如果 IP 出 pin 区域有空隙,可先在 IP 边界 legalize 一个 buffer cell,避免后续绕线再拉长。
# Innovus 示例:在驱动 IP 的出 pin 旁插 buffer
create_cell -buffer BUF_X8 U_pre_ip
legalize_placement -cell U_pre_ip ;# 让工具就近 legalize
connect_pin U_pre_ip/A <driver_pin>
connect_pin U_pre_ip/Z <net_to_remote_IP>
这样跨 IP 的 net 被切成两段:
第一段:IP 出 pin → buffer(极短,transition 立即下降)
第二段:buffer → 目标 IP(虽然仍跨 IP,但由大驱动 cell 承担,transition OK)
借助 IP 与 IP 之间的 channel 资源
在 floorplan 阶段,macro channel 往往预留了走线资源。如果 channel 足够宽,可在 channel 里再插一级 buffer,把跨 IP 的长线拆成三段,进一步压低 transition。
先用 get_placement_blockage 看 channel 是否有 placement blockage
若有 soft blockage,可用 set_placement_status -soft_blockage 0 临时关掉后 legalize 一个 buffer,再恢复 blockage“clone & buffer” 组合
当跨 IP 的 net 同时 fanout 到多个 sink 时,可以在 IP 出口处 clone 一份信号,分别给不同 IP 做 buffer tree,避免一条长 net 带多个负载。如果 IP 出 pin 区域确实无资源
与前端/IP owner 沟通,在 IP 内部把输出 port 加一个 buffer,出 pin 已经是大驱动版本(相当于把 buffer “预埋” 在 IP 里)。
如果 IP 为 hard macro 无法改动,只能 在 IP 外 1~2 个 site 的范围内塞 cell,必要时使用 ecoPlace -fixed 把周围 cell 推开一个 site,再 legalize。
# 1. 报 violation
report_timing -transition_time -from IP_A/OUT -to IP_B/IN -nworst 1
# 2. 在起点 IP 出口插 buffer
create_cell -buffer BUF_X12 U_buf1
legalize_placement -cell U_buf1
disconnect_net <old_net>
connect_pin U_buf1/A IP_A/OUT
connect_pin U_buf1/Z <new_seg1>
# 3. 如果跨 IP 段仍长,再插一级
create_cell -buffer BUF_X8 U_buf2
legalize_placement -cell U_buf2 -channel
connect_pin U_buf2/A <new_seg1>
connect_pin U_buf2/Z IP_B/IN
一句话总结:
跨 IP 的 tran violation 不能靠挪 IP,只能“在 IP 出口就近插强驱动 buffer + 利用 macro channel 再插 buffer”,把长线切成几段短线,靠多级驱动把 transition 压下去。
经验总结
“修tran其实就是修cap和fanout,插buffer最管用,别纠结lib参数,先插再验,大不了再调。”