作者naticom (踢踢~)
看板Electronics
标题[问题] 一些STA launch/capture的问题
时间Wed Aug 24 04:33:17 2016
通常在 Flip-Flip timing path中,若是single cycle single clock design
capture端预计是在launch端的下一个cycle拿到资料对吧
http://i.imgur.com/PYsZthr.jpg
就此图而言,若资料於E2被喂入UFF0,则UFF1应该是在E3 capture这个资料
(single cycle design,假设两个FF都是positive trigger)
timing engine在做setup check时候UFF0的triggering edge是E2
UFF1则是E3
但如果clock skew太大了(如下图),实际上UFF0在E2之後吐出的资料
就会变成也是在E2的时候被UFF1吃回去(甚至E1)
http://i.imgur.com/UMXacye.jpg
但我发现timing engine还是用E3去trigger UFF1,造成setup check的时候
根本不会有setup violation(多给了一个T以上的时间)
当然这不代表说电路没问题,因为hold time就没过了
请问STA这样的model是正确的吗?
主要是我们在写一个timing check的小程式,发现和其他的timing engine结果不一样
我觉得STA是把clock对齐到time=0s的时候开始,并且single cycle design的capture端
本来就是要在下一个cycle才可以动作(designer设计也是这样),因此应该忠於这个假设
下去做timing check,反正setup没问题hold也会出现问题,到时候还是得修
但我的组员是觉得应该忠於电路真实的行为,例如第二个例子我们应该用E1去trigger
UFF1,因他觉得电路不知道什麽E1/E2/E3,UFF1看到E1来了就准备接收资料
这个例子就会刚好接收到UFF0 E2的资料,因此我们应该用E1来检查setup violation
我觉得这样不太对,因为UFF1拿到资料的时间点不对,整个电路的行为就错了
你去对一个错的行为检查setup time没有意义
他的论点是说那是因为我们在clock=0s的时候就假设电路开始动作并且标记了E1/E2/E3
若我们先把clock启动後一阵子再让电路开始动作,这样UFF1的clock看起来就没有delay
到1T以上了(我是有回说那你这样就是做simulation不是STA了)
其实我觉得他说的很有道理,但timing report却依然用next cycle triggering edge来
计算setup time
不知有没有版友孰悉这一块可以给一些意见呢? 谢谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 96.55.76.82
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Electronics/M.1471984399.A.8BD.html
1F:推 shengyeh: 为什麽先启动电路 最後看到的skew 可以变小? 08/24 06:26
2F:推 kyo547896321: STA应该是照你说的那样算,只管set-up time,hold t 08/24 07:36
3F:→ kyo547896321: ime就等APR再修 08/24 07:36
4F:推 wait: STA model错了吧... create_clock後DC跟PT就会用next cycle 08/25 09:42
5F:→ wait: 当作setup time来确认(除非有设multicycle_path) 08/25 09:43
6F:→ wait: 所以PT check时还是以CLKM作为基准加上clk network...去检查 08/25 09:52
7F:推 ViewMoon: 你的理解是对的,你的组员是错的,timing engine 对 08/27 23:11
8F:→ ViewMoon: setup/hold edge 的计算方式不随着 back annotation 08/27 23:12
9F:→ ViewMoon: from SDF or calculated delay from SPEF 的 delay 而 08/27 23:13
10F:→ ViewMoon: 动态改变 edge 的算法 08/27 23:14