在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6596|回复: 9

[求助] Innovus修hold违例

[复制链接]
发表于 2021-1-26 18:07:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
小弟在做一个模块,design中除了std cell就是level shifter cell了,做PR的时候,没有setup的违例,但是出现很大的hold违例。1.用optdesign -postcts -hold后发现工具并没有去修hold,请问是什么原因呢?2.in2reg中有一条很大hold违例的path,主要原因是capture上有半个周期的delay。请问这有什么办法解决?时钟为scl,周期为1000ns求各位大佬指教。附图: image.png
image.png
image.png
image.png


发表于 2021-1-27 03:21:05 | 显示全部楼层
1. Path 1 的报告标题已经讲了 VIOLATED Clock Gating Hold Check。 报错的 gate 并不是 flop 或 clock gate cell, 而是一个普通的 NO2。这就有问题了。 设计中是真要在这里用组合逻辑搭个 clock gate 吗? 显然不是。

2. SDC 也有问题。 create_clock “scl" 同是加到了 scl 和 sda 上,显然是不对的。 至少应该是两个不同的 clock,虽然周期相同。

3. 这种把一个输入 sda_in 同时当成数据和时钟来用,肯定会造成工具误解的。

I2C 貌似简单,真的要做得好,其实有很多细节的。
 楼主| 发表于 2021-1-27 16:00:35 | 显示全部楼层
本帖最后由 蘑菇君 于 2021-1-27 16:21 编辑


jake 发表于 2021-1-27 03:21
1. Path 1 的报告标题已经讲了 VIOLATED Clock Gating Hold Check。 报错的 gate 并不是 flop 或 clock gat ...


感谢您的回复。1.sda_in应该是数据而不是时钟,设计中只有一个时钟。

2.clock gate用普通逻辑门搭确实奇怪,看了网表确实是这样规定的连接关系,现在还有一些其他的hold vio工具修不下去了,这是什么原因呢?setup的余量够了,明明可以插delay cell却没插。

image.png
clock gate:
image.png
vio path:
image.png
发表于 2021-1-27 22:42:31 | 显示全部楼层
还是觉得 create_clock 那句是有错的。如果 sda_in 不是时钟,不应该出现在 create_clock 。

scl 是时钟,工具会把 scl 路径上的门当成 clock gate,inverter, buffer 除外, level shifter 也除外。 显然设计里 scl 经过一些组合逻辑。 工具自动把组合逻辑当成 clock gate。 这不是工具的错,是设计思想的错。 当然,非要用 set_disable_clock_gating 也可以。 如果不能保证 timing, 图中那个 NOR2 门输出会有毛刺,整个电路就废了。

Path 2 估计有一个比较大的 set_input_delay 加到了 sda_in。 先 report_timing -view <your_setup_view> 看一下 setup 有多少余量。 估计很勉强。 工具也就不加 buffer 修 hold 了。  


 楼主| 发表于 2021-1-28 16:59:30 | 显示全部楼层


jake 发表于 2021-1-27 22:42
还是觉得 create_clock 那句是有错的。如果 sda_in 不是时钟,不应该出现在 create_clock 。

scl 是时钟 ...


感谢您的回复!
1.我在sdc里把sda_in从create_clock中删去了,sda_in确实应该有一个250ns的input_delay,我update_io_latency后report识别到了这个delay。
image.png

2.对于Path1这个组合逻辑gate,setup margin很充足,这条data path没设dont_touch,工具放着不管很奇怪,放图:
image.png
setup:
image.png
hold:
image.png
*info: Run optDesign holdfix with 1 thread.
Info: 666 don't touch nets, 0 undriven net  excluded from IPO operation.
Info: 274 nets with fixed/cover wires excluded.
Info: 274 clock nets excluded from IPO operation.
Info: Done creating the CCOpt slew target map.


3.另外我发现一条warning:
**WARN: (IMPOPT-3555):        Final critical path includes at least one clock net connected to an output port. This may limit optimization capabilities. To stop CTE clock phase propagation on these ports, you can use `set_global timing_set_clock_source_to_output_as_data true`.

发表于 2021-1-28 23:34:35 | 显示全部楼层


蘑菇君 发表于 2021-1-28 02:59
感谢您的回复!
1.我在sdc里把sda_in从create_clock中删去了,sda_in确实应该有一个250ns的input_delay, ...


2 不奇怪。 Hold slack -250,怎么修? 加 2000个 buffer?  
从信号名字看,像是 reset。 设计里是否没有加复位同步 reset synchronizer?  你可以做个简单试验,把 RST 的 input delay 设成 505。
这种把 reset 用到 clock path 上是非常混乱的做法。

RTL 写得乱,工具也无能为力。 要从根本上解决,建议还是重写 RTL


发表于 2022-8-24 17:18:13 | 显示全部楼层
hold clk起点就差了250 不对吧
发表于 2023-11-10 00:04:06 | 显示全部楼层
hold check 起点250,这肯定是设置了set_input_delay ,这个sdc。可以尝试在db里面写出sdc,看sdc是否有设置。
(哈哈哈都2023年了)
发表于 2024-1-2 20:32:28 | 显示全部楼层
尽管过去很长时间了,建议作者可以将如何根据他人的建议最后的解决过程附上,这样故事有收尾,对别人更有学习的过程。
发表于 2024-6-10 18:01:56 | 显示全部楼层
我想问下作者、后来人,如何在timingDesign里面打印出hold违例的path呢?感激不尽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-24 07:33 , Processed in 0.023562 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表