随着设计规模越来越大,工艺尺寸越来越小,设计里含有的via也越来越多。特别是PG via,当PG via数量达到一定规模数量时,runtime,memory usage,和disk usage用都会受到一定程度的影响。
为了减少巨量PG VIA带来的影响,ICC2用via matrix来解决这个问题。
以前,ndm的via是一个一个独立存在的。假设设计里有10M的via,那ndm里要存一千万个via对象。假设一个via对象占50Byte,那10M的via就要使用500M Byte的disk/memory空间。
via matrix,顾名思义,将独立的孔合成一起成为一个矩阵,只有一个对象。这样将大大减少disk/memory的使用,也会一定程度上加速runtime。
举个栗子。
下图是传统的方法,pg via是独立的。
icc2_shell> sizeof_collection $via2
14878512 (设计里有14M的VIA2)
c_shell> du -sh *
354M placed
现在将PG VIA2用一个命令转换成via matrix
icc2_shell> convert_vias_to_via_matrix-verbose $via2
{VIA_MATRIX_0}
现在成了这个样子:
现在via已经变成了matrix了,随意点击其中一个via,会发现所有的via都被选上了,因为这是个matrix,是个整体。
这时,可以看看硬盘空间的变化
icc2_shll> save_block -as placed_via_matrix
c_shell> du -sh *
296M placed_via_matrix
单单把PG via2改成matrix,硬盘空间就可以节省58M(从354M减少到296M),比例也非常的高。如果把所有的pg via都改成matrix,那将节省更多的disk/memory。
和via matrix相关的命令都有:
icc2_shell> help *via_matrix*
convert_via_matrixes_to_vias # Converts via matrixes to vias
convert_vias_to_via_matrix # Converts vias to via matrix
create_via_matrix # Create a via matrix
edit_via_matrix # edit a via_matrix
get_via_matrixes # Creates a collection of via matrixes
remove_via_matrixes # Removes via matrixes
report_via_matrixes # Report via matrix information
可以退回去吗?
转换成matrix后,就不能单独操作其中某个via了,因为是个整体了。如果还需要操作某些via,我们可以用另一个命令把matrix转换成独立的via:
convert_via_matrixes_to_vias
还可以把零碎的PG拼在一起
一般来说,PG shape都是连续的。但是有时候也会出现好几个shape拼在一起的情况。这个时候,我们也可以用merge_pg_mesh这个命令将几个shape合成一个,同样的可以节省memory/disk usage和runtime。
原文:https://www.cnblogs.com/lelin/p/12582598.html