不知不觉,学到的第四章。但是对于TQ的内部模型和外部模型的完整分析还是没有很好的理解。接着学习。。。。。。。。。
我们也了解静态时序分析的第一步骤,亦即时钟方面的约束。此外,也稍微对 Report Timing 逐步深入了解,何为一举列出多有相关的时序报告等。
在此我们需要用到 set_multicycle_path 约束命令。
严格来说 set_multicycle_path 的约束行为是告诉 TimeQuest 更动某对节点的启动沿和锁存沿 ... 想必读者听不明白是吧?说傻瓜点就是,告诉 TimeQuest 某对节点很可能不是用 1 个时钟周期工作。
笔者不是有意捣乱,在此笔者只是想证明一个事情而已, Set Multicycle Path 的功是告诉 TimeQuest “某对节点用 N 个时钟工作”。不过比较特别的是,它不仅可以针对“所有节点”,同样它也可以针对“单对节点”。此外,笔者也想提醒一件事 ... Set Multicycle Path 充其量是告诉“某对节点用 N 个时钟工作”或者告诉 TimeQuest “某对节点的启动沿和锁存沿有所更动”。实际上该约束命令没有任何能力干涉硬模型的内容。好了!前面只是热身而已,接下来我们会慢慢解剖 Set Multicycle Path 这个命令。
set multicycle path 该约束命令实际上它会更改启动沿或者锁存沿的触发时候.,当我们用set multicycle path 告诉 TimeQuest 某对节点用 N 个时钟工作,可是充其量这也是TimeQuest 的妄想而已,因为实际的 HDL 行为或者硬模型没有任何改变。
笔者需要强调,在 TimeQuest 的妄想中 delay monster 用 5 个时钟工作,或者说 delay monster 有 5 个时钟的模块周期。不过 delay monster 的实际 HDL 行为,只用 2 个时钟工作,或者说实际的 delay monster 有 2 个时钟的模块周期。这种马头不对狗嘴的情形当然不被我们允许啦 ... 在此我们应该更动一下 delay_monster 的 hdl 内容才行.
Set False Path 要 TimeQuest 无视相关的节点分析。
事实上,编译器它不会聪明到可以自动优化延迟怪兽给时序带来的违规,因此我们需要约束相关的节点。用到的命令有 Set Multicycle path ,该功能宛如告诉 TimeQuest 某对节点用 N 个时钟工作,实际上是告诉 TimeQuest 某对节点的启动沿或者锁存沿的触发行为有所更改。虽然使用该约束命令可以使得 TimeQuest 在分析上足以解决问题,可是却导致 TimeQuest 的妄想和实际的 HDL 行为产生出入。所以要小心慎用。此外,Set False Path 是不可理喻的约束命令,它会要求 TimeQuest 无视相关的节点。使用 Set False Path 之前,最好确认自己是否有足够的理论自己的做法是对的。如果实验五的 delay monster 恰恰好仅用 2 个时钟工作,使用该命令反而会弄巧成拙。
derive_pll_clocks 是专门为 pll 打造的懒人版 create clock 约束命令。
总结:
(1)记住derive_pll_clocks是用来驱动所有的pll的时钟约束。
(2)学会使用set multcycle path和理解set multcycle path 不能改变实际硬件模型。
(3)set false path,就是为了使TQ无视相应的节点。