整个芯片能不能工作全看我约束的 soc IO constraint 了

常说block io 么瞎xx 约约好啦,洒洒水咯,反正上层能看到真实timing。我block 约的紧修不掉也没关系啦,反正到顶层看咯。

soc 额整个芯片能不能工作全看我约束的 soc IO constraint 了

首先SOC 上的io都是通过pad cell来连接到 soc chip内部的。 soc 上的port 包括 input output inout
那么怎么搞呢。

第一你得搞清楚pad cell 上哪些pin之间有arc ,有arc 才有算timing的需求,没有arc 你也不用管。

比如我列出一些pad cell 画出的有arc的连接


其次你要搞清,哪些port里面连接的是模拟单元pin, 这些也不用管。

你只需要管 reg—> through pad → io
io → through pad → reg
同时不要干扰 reg-> through pad → reg path的check.

其次你要了解各个io 工作在多少频率下。或者说需要保证整个timing 路径(pad-> through pad-> reg reg → through pad → io ) 工作的延时

约束方法。
如果你只不关心所有 reg-> pad pad-> reg 的延时。 只关注 pad-> through pad-> reg reg → through pad → io 整个的延时的话。那么只需要
set_max_delay -from $io $delay
set_max_delay -to $io $delay
用set_max_delay 这种timing exception 来吧io设置成 timing path 的startpoint endpoint 并且 赋予延时

如果你关心 reg-> pad pad-> reg 的延时 需要保证这部分延时的一致。
你可以把延时分为三部分
1(reg-> pad pad-> reg)
2 ( pad 内部延时)
3 (pad 和 io之间的延时)

注意不要尝试在同一个内部 的pin 上 设置 set_max_delay -from xxxa/A set_max_delay -to xxxa/A 在内部pin上 它们之间会相互覆盖。 这种内部pin好像不能同时是 timing start point 同时也是timing end point
但是port缺可以同时是start point 也是endpoint

pin: 哎呀mmp好xx不公平呀

范例脚本


然后你约束完了,繁殖某些io没有约咋办?
检查一下就好了。
吧pt里面的报告 uncon path 的 参数设置true

然后foreach s [get_ports * -filter “direction =~ in*”] {
report_timing -from $s >> check_in}
foreach s [get_ports * -filter "direction =~ *out] {
report_timing -to $s >> check_out}

然后到这两个文件里grep uncontrained 字样
找得到就是有没有约的io

然后对于一些不关心的 feedthru 的IO PATH 可以用false path 关掉

关于这个话题有一点要补充,
就是IO PAD 附近有很多DFT tessent cell 如果你的DFT 使用Mentor 工具植入的话

有一些IO pad 也要区分master slave.
如果只发不收 只约出去的
如果只收不发 只约进来的
收发都有,那么进入发送都要约

然后这些tessent cell toggle 很慢, 这些reg可以不用约束io 。 需要过滤掉
然后有一些 toggle 很慢的function reg 比如使能 中断 , 或者pcl_bank 的也可以过滤掉。

过滤命令

2 个赞