via-last TSV 有源转接板物理设计

背景

有源转接板是3D IC中常常用到的组件,分为via-first, via-middle和via-last三种,其中via-first指的是在foundry在晶圆制造晶体管之前完成TSV打孔,via-middle则是在晶圆制造晶体管之后金属层之前完成TSV打孔,这两种工艺都需要foundry具有TSV能力,台积电、三星、global foundry等都具备这项能力。via-last则提供了一种更加灵活的方式来制作有源转接板,晶圆从foundry出片之后已经完成了晶体管和金属层的制造,再在预留的位置上进行TSV打孔,一些没有TSV能力的foundry就可以与拥有成熟TSV工艺的OSAT厂商合作满足有源转接板的需求。至于为什么不能先在OSAT厂完成TSV制作后再将晶圆送进foundry呢?这是因为OSTA厂一般比较“脏”,从OSAT厂出来的晶圆将不满足foundry厂的金属管控,因此不会被接受。

后端流程

有源转接板相比于普通后端物理实现的区别是为TSV提前设计的“留空”,这部分在后端设计中会带来不少麻烦,本文的情形是直接给定了TSV的位置,也就意味着这些不规则的TSV留空会一定程度上阻碍P&R。同时作为转接板,这颗芯片面积是比较大的,因此在收timing上也比较困难。同时最棘手的还是DFM相关,通过DRC、ANT检查有一些需要注意的地方。

floorplan

在floorplan阶段就需要导入TSV的位置,这些位置是由RDL的设计导入的(via-last TSV有源转接板打完TSV孔后一般还需要额外增加RDL层将pad扇出到理想位置,这些RDL层同样也会在OSAT厂完成)。因此在这些TSV的位置创建blockage和route guide。下面是代码,先将RDL习惯的中心坐标表示方式转换成边框表示方式,需要创建所有层的blockage和route guide。

# die area
set width 15000
set height 16000
set rail_spacing 3

# read file
set filepath "./script/tsv_coordinate.txt"
if {![file exists $filepath]} {
    puts "Error: File $filepath does not exist."
    exit 1
}

set tsv_coordinates [open $filepath "r"]
set file_content [read $tsv_coordinates]
close $tsv_coordinates

# Split file content into lines, handling both Unix (\n) and Windows (\r\n) line endings
set tsv_lines [split $file_content "\n"]

# Check if lines are read correctly
puts "Total lines read: [llength $tsv_lines]"

# Create blockage
foreach line $tsv_lines {
    # Trim leading and trailing whitespace, including carriage returns
    set trimmed_line [string trim $line "\r\n "]

    if {$trimmed_line eq ""} {
        continue
    }

    set num_scanned [scan $trimmed_line "%f %f" x y]

    if {$num_scanned != 2} {
        puts "Skipping malformed line: '$line'"
        continue
    }


   
    if {![string is double -strict $x] || ![string is double -strict $y]} {
        puts "Skipping non-numeric coordinates: x=$x, y=$y"
        continue
    }

   
    set x [expr {$x + 0}]
    set y [expr {$y + 0}]

    
    set x_iccad [expr {$x + $width / 2}]
    set y_iccad [expr {$y + $height / 2}]

   
    set size 40

    set x1 [expr {$x_iccad - $size}]
    set y1 [expr {$y_iccad - $size}]
    set x2 [expr {$x_iccad + $size}]
    set y2 [expr {$y_iccad + $size}]

    
#    create_placement_blockage -bbox [list [list $x1 $y1] [list $x2 $y2]] -type hard

    create_routing_blockage -layers {metal1Blockage via1Blockage metal2Blockage via2Blockage metal3Blockage via3Blockage metal4Blockage via4Blockage metal5Blockage} -bbox [list [list $x1 $y1] [list $x2 $y2]]

    create_route_guide \
    -coordinate [list [list $x1 $y1] [list $x2 $y2]] \
    -no_signal_layers "METAL1 METAL2 METAL3 METAL4 METAL5" \
    -no_preroute_layers "METAL1 METAL2 METAL3 METAL4 METAL5" \
    -horizontal_track_utilization 0 \
    -vertical_track_utilization 0 \
    -name "route_guide_${x}_${y}"

}

不规则TSV的坏处就在于创建电源网络时不能保证所有TSV 间隙都能生成power/ground stripe,因此这些地方生成的power/ground rail无法正常供电,导致在这些地方的std cell等也不能被正常供电。因此在自动电源网络生成的情形下,需要直接设置不规则TSV区域直接不让放置std cell或者手动添加stripe,还要在之后每放置、改动std cell、buffer、diode、filler等每一步都多verify_pg_connnection,保证正常供电。

下图是一个TSV块附近的电源轨道,在原本的keep out zoom(route guide和route blockage)的上下左右增加了约1~2个电源轨道的blockage,也就是有的地方可以布线但是不让放置std cell,这可以有效避免出pin的拥塞。

route

由于转接板面积大,一些互连需要跨过半个甚至整个转接板的距离,线长带来的天线效应将会非常明显,一般在route_opt阶段再进行天线效应的修复,但是最好是提前导入天线效应文件,并收紧ratio,比如要求的

define_antenna_layer_rule $lib -mode  4 -layer "METAL1" -ratio 400 -diode_ratio {0.203 0 400.00 2200}

将其收紧到

define_antenna_layer_rule $lib -mode  4 -layer "METAL1" -ratio 200 -diode_ratio {0.203 0 200.00 2200}

并且提前规定好max transition,max_net_route_length,否则在资源紧张的情况下,天线效应将会很难修复。

DFM

在APR工具中完成DRC、ANT、LVS检查后,到calibre检查往往还会检查出新的错,此时可以将检查结果再导回APR工具中,数量少的时候可以手动修复,比如DRC重新调整布线,ANT就增加diode\jump\buffer等手段,在calibre通过检查后才可以最终提交。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值