想写这个内容大概是在半个月之前吧,苦于没有比较系统的介绍PAD的放置的教程,一直在到处收集摸索,现在把自己的经验大致总结一下:
首先阐明一点,这次放置的PAD只是应项目需要,在芯片外面添加一些备用的框框给后端使用,因此具体到手动添加时,不知道会不会有什么问题(~。~)
1.首先,可以将PAD分为两类,一种是类似VDD/GND/CORNER之类的全局PAD,这种需要在综合之后手动添加到产生的网表中,一种是需要自己去在前端例化的PAD,如输出PAD_OUT,这些可以跟前段工程师进行讨论
2.对于PAD,这个定义,有的人把它定义为芯片外接的金属,我把它暂时考虑为instance,方便理解。
3.所有关于PAD的结构,选择,适用类型,datasheet等内容,都可以在fab提供的doc文件中找到,此处不再赘述啦~
下面就是在放置PAD的时候的流程了:
1.与前端工程师沟通,大致了解需要在芯片设置的管脚数目和位置,根据以上对PAD的分类在综合之前的verilog中添加例化,例如:
...
module sample(in,out); //芯片core
input in;
output out;
endmodule
module top(in_top,out_top);//在顶层文件中例化,添加PAD
BT3320_PM_A PAD_in(.PAD(in),.Z(in_top));//选择合适的PAD结构和类型,例化需要的管脚即可
...
可以看到,例化PAD的过程,不过是在写好的RTL代码外围再添加一层壳子,可以这么理解吧
2.例化之后,用VCS进行前端的综合,然后会生成一系列网表文件:*.sdc *.v 等等
3.打开生成的*.v就可以在里面添加第一种PAD了。例如:
VDD_33_PM PAD_VDD1();//VDD
VDD_18_PM PAD_VDD2();
GND_PM PAD_GND();//GND
CORNER CORNER1();//这里是例化芯片外围的四个CORNER
...
4.完成了在综合产生的网表中添加PAD之后就可以进行encounter的使用了
5.在encounter时,需要注意的一点是,在import design的时候要顺便添加FAB 给提供的IO的lef库,之后的流程就基本与普通的综合无异了。
6.如果需要固定PAD的位置坐标,有一个比较简单的办法:
先按照以上步骤跑个流程出来,然后在完成optimize deign/post-CTS之后保存一下IO file,可以手动修改这个file然后重新开始一个新的版本,只要额外load进去这个io file即可。