面试官给了一张简单的寄存器到寄存器路径图,给了时钟周期、Tco、Tsu、组合逻辑延时,让我算slack并判断是否违例。我只会写create_clock和set_input_delay,setup/hold公式背过但没手推过。想问有没有一套现场能用的推导模板?另外面试前两周该刷哪些时序题才能不慌?
2026年秋招FPGA简历上写「熟悉时序约束」,面试官让你现场推一条路径的slack,只会create_clock的应届生怎么补?
8 个回答

先把两个公式刻进肌肉记忆:setup slack = 要求时间 – 到达时间,hold slack = 到达时间 – 要求时间。然后拿纸画一条 reg2reg 路径,标出时钟沿、Tco、组合延时、Tsu,手推五遍。两周够用了,别慌。你现在用的是哪家的工具链?

现场就用一条式子顶着:slack = 要求时间 – 到达时间。要求时间就是下一个时钟沿减 Tsu 再减不确定度,到达时间就是发射沿加 Tco 再加组合延时。两个一减,正数过、负数违例。先把这条推顺,hold 那套反过来就行。你现在手头有工具能跑波形吗?

别一上来就背公式,先画时间轴。拿张纸横着画两个时钟沿,左边标发射沿,右边标捕获沿,中间把 Tco 和组合延时一段段摞上去,末尾留出 Tsu。看着图你自然就知道到达时间是 发射沿+Tco+组合延时,要求时间是 捕获沿-Tsu。两者一减就是 setup slack。含 skew 和 uncertainty 的题只是在这两处各加一项,skew 进捕获沿、uncertainty 从要求时间里扣掉,别被符号绕晕。练五道就够:纯 reg2reg 一道、加 skew 一道、加 uncertainty 一道、给多周期要求的一道、最后一道故意让你判断违例。每道都手推,不许翻笔记。

面试官要的其实不是你算得多快,而是看你有没有「路径意识」。很多人只会 create_clock,一到现场推 slack 就露馅,因为脑子里没有那条从发射寄存器到捕获寄存器的完整链路。补法是按场景刷题,而不是按公式刷题。第一类纯 reg2reg,考你对 Tco、组合延时、Tsu 的基本盘;第二类带 clock skew,考你分得清发射沿和捕获沿各自被 skew 推到哪;第三类带 uncertainty,考你知道它是从要求时间里减、不是加到数据路径上;第四类多周期路径,考你要求时间该乘几个周期;第五类才是违例判断和修法,比如插寄存器、降频、改约束。两周的话,第一周每天两道路径题加手推时间轴,第二周把常见误区过一遍:把 skew 符号搞反、把 uncertainty 加错边、把 hold 的要求时间和到达时间记混。个人感觉最容易翻车的是 hold,因为它和 setup 的减法是反的,很多人一紧张就写错方向。风险在于你只背结论不去画图,换个数就懵。替代做法是拿一份开源工程的时序报告,对着报告里的路径自己反推一遍 slack,比空刷题更贴实战。你课设或竞赛里有没有跑过带约束的工程?有的话直接拿它练手最快。

先给你一个能当场背出来的推导顺序,比背公式管用。拿到图先别急着算,第一步确认两件事:发射沿和捕获沿分别是哪两个时钟边沿,这两个边沿之间隔几个周期。第二步写到达时间:发射沿 + Tco + 组合逻辑延时(有多个器件就逐个累加)。第三步写要求时间:捕获沿 – Tsu,如果题目给了 clock uncertainty 就从这里再扣掉,如果给了 clock skew 就把它加到捕获沿那一侧。第四步 slack = 要求时间 – 到达时间,正数满足,负数违例。这套流程的关键是「先定沿、再算到达、后算要求」,顺序固定了就不容易把 skew 的符号搞反。两周准备的话,第一周每天手推两道纯 reg2reg 的题,把 Tco、组合延时、Tsu 各自落在时间轴的哪个位置记住;第二周专门刷带 skew、带 uncertainty、带多周期要求的变体,每种两道就够。你现在手边有没有能画时序图的纸笔或工具?

先把公式背成顺口溜:setup slack = 要求时间 – 到达时间,hold slack = 到达时间 – 要求时间。现场推路径时,你脑子里只要想两件事——数据最早/最晚什么时候到,时钟要求它什么时候必须稳。setup 看最晚到达,hold 看最早到达,方向别搞反。
然后练五道题就够:纯 reg2reg 一道、加 skew 一道、加 uncertainty 一道、多周期一道、故意违例一道。每道都手画时间轴,把 Tco、组合延时、Tsu 一段段标上去,再算 slack。两周里前一周每天两道,后一周专攻 skew 和 uncertainty 的符号。这套下来,面试现场基本不会卡。你平时用的是 Quartus 还是 Vivado?

先说个容易踩的坑:很多人把公式背下来了,一到白纸上画图就露馅,原因不是公式不熟,是不知道 Tco、组合延时、Tsu 各自该挂在哪一段。面试官给图的时候,你先把发射寄存器 Q 到捕获寄存器 D 之间那条线画粗,然后问自己一句话:数据最晚什么时候到 D?这就是到达时间,等于发射沿加 Tco 再加组合延时。再问第二句:D 最晚什么时候必须稳?这就是要求时间,等于捕获沿减 Tsu,如果题里给了 clock uncertainty 就从这里再扣。两个一减就是 setup slack。
hold 反过来,看数据最早什么时候到,和捕获沿之后还要保持多久。早期容易把 skew 的符号搞反,我的建议是别去记「加发射沿还是加捕获沿」,直接在时间轴上把两个时钟沿各自偏移后的位置标出来,肉眼一看就知道谁早谁晚。练题的话五道足够:纯 reg2reg 一道、加 skew 一道、加 uncertainty 一道、多周期一道、故意违例一道,每道都手画时间轴,不许翻笔记。
风险提示:如果你只背公式不画图,现场遇到 skew 和多周期混合的题很容易卡住,而面试官往往就是靠这种题筛人。替代做法是拿现成的时序报告(Vivado 或 Quartus 的 timing report)去对照路径,看工具怎么算 slack,比纯背公式有用得多。你手头有能跑综合的工具吗?

先说一个可能有点反直觉的判断:面试官让你现场推 slack,考的真不是「你会不会背公式」,因为公式就两行,谁都背得下来。他真正在筛的是——你有没有把这条路径当成一个会动的系统去理解。只会 create_clock 的应届生最大的问题不是公式不熟,是脑子里没有「时间轴」。
所以补法的顺序很重要,别一上来就刷题。第一步是建立画面感:拿张纸横着画一条时间轴,左边标发射沿,右边标捕获沿,中间那条从发射寄存器 Q 到捕获寄存器 D 的路,就是你要求解的对象。你要问自己的第一个问题是「数据最晚什么时候到 D」,答案是从发射沿出发,加上 Tco,再加上一路组合逻辑延时,这就是到达时间。第二个问题是「D 最晚什么时候必须稳」,答案是从捕获沿往回退一个 Tsu,这就是要求时间。两个一减,setup slack 就出来了。hold 是同一套逻辑反过来看最早到达。
这套推导为什么比背公式管用?因为一旦题目加了 clock skew,你背的公式会立刻失效——skew 到底是加在发射沿还是捕获沿,纯靠记忆特别容易搞反。但你如果已经习惯在时间轴上把两个时钟沿各自偏移后的真实位置标出来,谁早谁晚一眼就看出来了,符号根本不用记。uncertainty 同理,它本质是「时钟自己都不确定,那我得留点余量」,所以是从要求时间里扣,不是加在数据路径上。这个「为什么」想通了,考场上就算紧张也不会算错方向。
至于两周怎么刷,我的建议是别追求题量,五道就够,但要刷得「有层次」。第一道纯 reg2reg,把 Tco、组合延时、Tsu 各自落在时间轴哪一段刻进肌肉记忆;第二道加 skew,专门练符号;第三道加 uncertainty,练它扣在哪一侧;第四道给多周期要求,练要求时间该乘几个周期;第五道故意给你一个违例的,让你判断并说一句怎么修——插寄存器、降频、还是改约束。每道都手推,不许翻笔记,推完再回看公式对不对。
最后说个心态:现场推不出来不可怕,可怕的是推的时候不敢画图。面试官通常很乐意看你画时间轴,那反而说明你思路清晰。你目前是纯自学还是跟着课设/竞赛在练时序这块?
发表回答
登录后可在本页底部提交回答