These prompts mix closure and signoff topics. Say the check, draw if it helps, compute, then give the trade-off and the evidence.
# | Prompt | Answer |
|---|---|---|
1 | Two views, three endpoints. View A slacks: -0.05, -0.02, +0.10. View B: -0.03, -0.04, +0.05. Union TNS, and the naive sum of the views' TNS? | Union -0.09 ns (worst per endpoint: -0.05, -0.04, +0.05); naive sum -0.14 ns |
2 | A 0.80 ns data path with a late derate of 1.10. Cost? | 0.08 ns |
3 | A path has +0.008 ns of slack and 0.012 ns of crosstalk delta. New slack? | -0.004 ns |
4 | A hold fix needs 0.035 ns of delay; the endpoint has 0.020 ns of setup slack. Does it fit? | No, short by 0.015 ns: the sum of setup and hold slack is too small for delay insertion |
5 | Removal check: minimum release arrival 0.60 ns, capture latency 0.35 ns, removal time 0.30 ns. Slack? | -0.05 ns: 0.60 - (0.35 + 0.30) |
6 | A flop has setup -0.04 into it, hold +0.06 into it, setup +0.08 out of it, hold +0.05 out of it. Skew window for its clock, zero margin? | 0.04 to 0.06 ns of clock delay |
def r(x): return round(x, 3)
va, vb = [-0.05, -0.02, 0.10], [-0.03, -0.04, 0.05]
union = [min(a, b) for a, b in zip(va, vb)]
tns_union = sum(x for x in union if x < 0)
tns_naive = sum(x for x in va if x < 0) + sum(x for x in vb if x < 0)
assert [r(x) for x in union] == [-0.05, -0.04, 0.05] and r(tns_union) == -0.09 and r(tns_naive) == -0.14
cost = 0.80 * (1.10 - 1.0)
assert r(cost) == 0.08
assert r(0.008 - 0.012) == -0.004
assert r(0.020 - 0.035) == -0.015
assert r(0.60 - (0.35 + 0.30)) == -0.05
s1, h1, s2, h2 = -0.04, 0.06, 0.08, 0.05
lo, hi = max(-s1, -h2), min(h1, s2)
assert (r(lo), r(hi)) == (0.04, 0.06)
print("PASS: union TNS", r(tns_union), "naive", r(tns_naive), "; skew window", (r(lo), r(hi)))Prompt 1: says which number is the work to do (union) and which is a misleading total.
Prompt 4: states the invariant (delay insertion moves slack between setup and hold) and proposes a structural alternative.
Prompt 5: names recovery and removal, says removal is the hold-like one, and where it is worst (fast corner).
Prompt 6: gives the four inequalities and points out that the answer is a window, not a value.
0.045 to 0.055 ns: lo = max(0.04 + 0.005, -0.05 + 0.005) = 0.045 and hi = min(0.06, 0.08) - 0.005 = 0.055.