如何在ICC中加入IO和POWER PAD? 在线等!
各位大侠,小弟在学习ICC,最近遇到一个问题,IO pad我通过在TOP中例化得到了,然后生成的网表里也有,如下:
PI UPI_RST ( .PAD(RST), .C(PAD_RST) );
PI UPI_CLK ( .PAD(CLK), .C(PAD_CLK) );
PI UPI_SCL ( .PAD(SCL), .C(PAD_SCL) );
但是POWER PAD是怎么加进去的?我是直接手动写在网表中的,如下:
PVDD1 UVDD1 ( .VDD(VDD) );
PVSS1 UVSS1 ( .VSS(VSS) );
PVDD2 UVDD2 ();
PVSS2 UVSS2 ();
我用自己的设计按照lab的操作顺序,执行到
derive_pg_connection -power_net VDD-power_pin VDD-ground_net VSS-ground_pin VSS
时报如下错误:
Error: Net VDD is not a power net. (MWUI-714)
derive pg failed
然后我打入:create_net -power VDD
Error: Net 'VDD' already exists in design 'I2C_Top'.(UIED-13)
0
还有就是上面的网表中添加PAD的方法是我在网上看到的,不知道对不对,初学者求高手指点,非常感谢!
没人回呀,自己顶一个
还是没人帮忙呀。
解决么我也遇到这个问题了?解决了 给我说下思路!
在你的网表里,把
PVDD1 UVDD1 ( .VDD(VDD) );
PVSS1 UVSS1 ( .VSS(VSS) );
都删掉,重新写一个PAD的约束文件,再derive_pg_connection -power_net VDD-power_pin VDD-ground_net VSS-ground_pin VSS
PAD约束文件怎么写的?谢谢!
# Create corners and P/G pads
create_cell {cornerll cornerlr cornerul cornerur}PCORNER
create_cell {vss1left vss1right vss1top vss1bottom} PVSS1
create_cell {vdd1left vdd1right vdd1top vdd1bottom} PVDD1
create_cell {vss2left vss2right vss2top vss2bottom} PVSS2
create_cell {vdd2left vdd2right vdd2top vdd2bottom} PVDD2
# Define corner pad locations
set_pad_physical_constraints -pad_name "cornerul" -side 1
set_pad_physical_constraints -pad_name "cornerur" -side 2
set_pad_physical_constraints -pad_name "cornerlr" -side 3
set_pad_physical_constraints -pad_name "cornerll" -side 4
# Define signal and PGpad locations
# Left side
set_pad_physical_constraints -pad_name "pad_t2ex" -side 1 -order 1
set_pad_physical_constraints -pad_name "p2_0_o" -side 1 -order 2
set_pad_physical_constraints -pad_name "p2_1_o" -side 1 -order 3
set_pad_physical_constraints -pad_name "p2_2_o" -side 1 -order 4
set_pad_physical_constraints -pad_name "p2_3_o" -side 1 -order 5
set_pad_physical_constraints -pad_name "p2_4_o" -side 1 -order 6
set_pad_physical_constraints -pad_name "p2_5_o" -side 1 -order 7
set_pad_physical_constraints -pad_name "p2_6_o" -side 1 -order 8
set_pad_physical_constraints -pad_name "p2_7_o" -side 1 -order 9
set_pad_physical_constraints -pad_name "vdd2left" -side 1 -order 10
set_pad_physical_constraints -pad_name "vdd1left" -side 1 -order 11
set_pad_physical_constraints -pad_name "vss1left" -side 1 -order 12
set_pad_physical_constraints -pad_name "vss2left" -side 1 -order 13
set_pad_physical_constraints -pad_name "pad_rxd" -side 1 -order 14
set_pad_physical_constraints -pad_name "pad_txd" -side 1 -order 15
set_pad_physical_constraints -pad_name "p3_0_i" -side 1 -order 16
set_pad_physical_constraints -pad_name "p3_1_i" -side 1 -order 17
set_pad_physical_constraints -pad_name "p3_2_i" -side 1 -order 18
set_pad_physical_constraints -pad_name "p3_3_i" -side 1 -order 19
set_pad_physical_constraints -pad_name "p3_4_i" -side 1 -order 20
set_pad_physical_constraints -pad_name "p3_5_i" -side 1 -order 21
set_pad_physical_constraints -pad_name "p3_6_i" -side 1 -order 22
set_pad_physical_constraints -pad_name "p3_7_i" -side 1 -order 23
# Top side
set_pad_physical_constraints -pad_name "p0_7_i" -side 2 -order 1
set_pad_physical_constraints -pad_name "p0_6_i" -side 2 -order 2
set_pad_physical_constraints -pad_name "p0_5_i" -side 2 -order 3
set_pad_physical_constraints -pad_name "p0_4_i" -side 2 -order 4
set_pad_physical_constraints -pad_name "p0_3_i" -side 2 -order 5
set_pad_physical_constraints -pad_name "p0_2_i" -side 2 -order 6
set_pad_physical_constraints -pad_name "p0_1_i" -side 2 -order 7
set_pad_physical_constraints -pad_name "p0_0_i" -side 2 -order 8
set_pad_physical_constraints -pad_name "pad_int0" -side 2 -order 9
set_pad_physical_constraints -pad_name "vdd2top" -side 2 -order 10
set_pad_physical_constraints -pad_name "vdd1top" -side 2 -order 11
set_pad_physical_constraints -pad_name "vss1top" -side 2 -order 12
set_pad_physical_constraints -pad_name "vss2top" -side 2 -order 13
set_pad_physical_constraints -pad_name "pad_int1" -side 2 -order 14
set_pad_physical_constraints -pad_name "p3_7_o" -side 2 -order 15
set_pad_physical_constraints -pad_name "p3_6_o" -side 2 -order 16
set_pad_physical_constraints -pad_name "p3_5_o" -side 2 -order 17
set_pad_physical_constraints -pad_name "p3_4_o" -side 2 -order 18
set_pad_physical_constraints -pad_name "p3_3_o" -side 2 -order 19
set_pad_physical_constraints -pad_name "p3_2_o" -side 2 -order 20
set_pad_physical_constraints -pad_name "p3_1_o" -side 2 -order 21
set_pad_physical_constraints -pad_name "p3_0_o" -side 2 -order 22
# Right side
set_pad_physical_constraints -pad_name "p1_7_i" -side 3 -order 1
set_pad_physical_constraints -pad_name "p1_6_i" -side 3 -order 2
set_pad_physical_constraints -pad_name "p1_5_i" -side 3 -order 3
set_pad_physical_constraints -pad_name "p1_4_i" -side 3 -order 4
set_pad_physical_constraints -pad_name "p1_3_i" -side 3 -order 5
set_pad_physical_constraints -pad_name "p1_2_i" -side 3 -order 6
set_pad_physical_constraints -pad_name "p1_1_i" -side 3 -order 7
set_pad_physical_constraints -pad_name "p1_0_i" -side 3 -order 8
set_pad_physical_constraints -pad_name "pad_t2" -side 3 -order 9
set_pad_physical_constraints -pad_name "vdd2right" -side 3 -order 10
set_pad_physical_constraints -pad_name "vdd1right" -side 3 -order 11
set_pad_physical_constraints -pad_name "vss1right" -side 3 -order 12
set_pad_physical_constraints -pad_name "vss2right" -side 3 -order 13
set_pad_physical_constraints -pad_name "pad_clk" -side 3 -order 14
set_pad_physical_constraints -pad_name "pad_rst" -side 3 -order 15
set_pad_physical_constraints -pad_name "p0_7_o" -side 3 -order 16
set_pad_physical_constraints -pad_name "p0_6_o" -side 3 -order 17
set_pad_physical_constraints -pad_name "p0_5_o" -side 3 -order 18
set_pad_physical_constraints -pad_name "p0_4_o" -side 3 -order 19
set_pad_physical_constraints -pad_name "p0_3_o" -side 3 -order 20
set_pad_physical_constraints -pad_name "p0_2_o" -side 3 -order 21
set_pad_physical_constraints -pad_name "p0_1_o" -side 3 -order 22
set_pad_physical_constraints -pad_name "p0_0_o" -side 3 -order 23
# Bottom side
set_pad_physical_constraints -pad_name "p1_0_o" -side 4 -order 1
set_pad_physical_constraints -pad_name "p1_1_o" -side 4 -order 2
set_pad_physical_constraints -pad_name "p1_2_o" -side 4 -order 3
set_pad_physical_constraints -pad_name "p1_3_o" -side 4 -order 4
set_pad_physical_constraints -pad_name "p1_4_o" -side 4 -order 5
set_pad_physical_constraints -pad_name "p1_5_o" -side 4 -order 6
set_pad_physical_constraints -pad_name "p1_6_o" -side 4 -order 7
set_pad_physical_constraints -pad_name "p1_7_o" -side 4 -order 8
set_pad_physical_constraints -pad_name "pad_t0" -side 4 -order 9
set_pad_physical_constraints -pad_name "vdd2bottom" -side 4 -order 10
set_pad_physical_constraints -pad_name "vdd1bottom" -side 4 -order 11
set_pad_physical_constraints -pad_name "vss1bottom" -side 4 -order 12
set_pad_physical_constraints -pad_name "vss2bottom" -side 4 -order 13
set_pad_physical_constraints -pad_name "pad_t1" -side 4 -order 14
set_pad_physical_constraints -pad_name "p2_0_i" -side 4 -order 15
set_pad_physical_constraints -pad_name "p2_1_i" -side 4 -order 16
set_pad_physical_constraints -pad_name "p2_2_i" -side 4 -order 17
set_pad_physical_constraints -pad_name "p2_3_i" -side 4 -order 18
set_pad_physical_constraints -pad_name "p2_4_i" -side 4 -order 19
set_pad_physical_constraints -pad_name "p2_5_i" -side 4 -order 20
set_pad_physical_constraints -pad_name "p2_6_i" -side 4 -order 21
set_pad_physical_constraints -pad_name "p2_7_i" -side 4 -order 22
仅供参考。你试试看行不行哈。
想请问,ICC里究竟是如何识别power 和 ground的,如果是通过IO类型识别,那么在网表里声明应该就可以了,向你刚刚那种通过命令添加IO的方式,也只能通过IO类型来判断啊?不了解,求指教。
同为新手,来讨论讨论。
现在做的流程里面,IO和PAD都没有写在网表中,而是自己创建之后place的。
另外我觉得网标里声明POWER和GROUND有点不对劲,网表里没有PIN和PORT的物理位置呀。
我查了下tsmc给的lef文件里,电源pin,port带有 USE POWER 的记述,·mw 的database应该是基于lef创建的吧
谢谢!
我把网表里的port去掉了,按照上面你说的这样做过一次,但是还是没有出现像例子里那样的电源和地环,不知道什么原因,求高手赐教!
恩,我按照7楼的例子写了一个,把原来网表中的
PVDD1 UVDD1 ( .VDD(VDD) );
PVSS1 UVSS1 ( .VSS(VSS) );
PVDD2 UVDD2 ();
PVSS2 UVSS2 ();
去掉了,但是现在的问题是我做完insert_pad_filler后在PAD之间出现了filler,但是create_pad_rings的时候在这之间没有发现metal routes,这和例子中的不一样,不知道错哪了,求教中~
PVDD1 UVDD1 ( );
PVSS1 UVSS1 ();
PVDD2 UVDD2 ();
PVSS2 UVSS2 ();
大神什么意思?是说在网表里这样写吗?谢谢!
是的,这样写
谢谢大神!
我试试去,能不能顺便帮我看看11楼的问题?你遇到过吗?求赐教,谢谢!
不需要create_pad_rings,PAD的GDS里面已经有ring了
filler中就有ring, 如果filler能无缝连接的话,就不用再加ring了。 这一点可以通过查看IO,PAD的GDS文件来确认。milk way的
数据库是保存成macro的,所以看不到内部结构。
另外我想问一下,为什么要在pad中间加filler呢?从芯片的结构来看,信号应该是 外部信号--wire bond--pad--IO cells,最后与core内连接, 那么IO cell连成环应该就可以了呀,觉得PAD不用做成一个环也可以呢。
谢谢!
同样遇到11楼的问题,小编解决了麻烦不吝赐教
像楼上说的现在做完filler填充就行了,PAD直接就形成了环,这包含了ring,你可以导出GDS看看,如果没有就是你的IO库有问题,换一个库
我还有个问题就是在做PNS时执行synthesize_fp_rail的时候提示error:all the P/G pads do not have power ports ,or all the power ports are not connected to power or ground net logically. 在论坛上找,说是IO库中的power pads和ground pads 的ports属性没有定义好,却又不知道如何去定义 在哪个文件里定义,不知小编是否遇到过这个错误?
小编,你例化IO PAD的时候,比如我的设计是core_design(ports1),例化的时候设置一个top(ports)顶层,在这个顶层里面例化core_design和IO,top的需要ports吗?还是直接将和PAD连接的信号设置成wire?比如:module top(input clk,input en,output dout);
PI u_pI1(.c(en_to_core),.PAD(en));//PI是输入IO,PAD是输入端,C是输出端
PI U_PI2(.c(clk_to_core),.PAD(clk));
然后把clk_to_core和en_to_core和core_design链接起来;还是:
module top()
wire clk,en,dout;
PI u_pI1(.c(en_to_core),.PAD(en));//PI是输入IO,PAD是输入端,C是输出端
PI U_PI2(.c(clk_to_core),.PAD(clk));
我也是加了filler后 create pad ring无反应pad电源地端口derive_pg_connection不成功为什么
用set_pad_physical_constraints设置约束后
layout中看不到预期的效果怎么回事
比如我把一些port设置成 -side 1 理论上应该出现在左边,可是却出现在了右边
而且还不是在boundary上
我用你说的这种格式创建IO pad 为什么出现error extra positional option "side"error extra positional option "1"等等 代码不能弄出来只能手动打出来了,我感觉是已经创建了pad但是set的时候出现了问题 可以帮我下么 我是新手 勿喷
please create the tdf file for it.
In this file, you can create_cell and put the location for it.
显示进行电源约束,然后进行电源网络综合,如果没有报错,commit就可以啦
首先,power io pad最好用命令添加
其次,power io pad的pin都是在lef里面定义的,有问题的话可能要修改lef里面pin的属性
最后,现在的IO ring一般是直接添加io filler就完成设计了的,不用其他多余的操作
我知道,这是因为在顶层中你少了最重要的两句语句!
能说的详细点吗?跪求呀,卡在这里好久了。大神。