E
Member
最近复盘一个板级问题,教训很直接:约束写错不一定立刻报错,反而可能把问题藏到上板之后。false path 的本意,是告诉工具某条路径确实不存在时序关系,例如测试逻辑,或互斥模式下不可能同时有效的路径。工具不再检查它,报告自然变干净,但前提是这个判断必须是对的。
常见误用有三类:一是跨时钟域路径图省事全标 false path,有数据要过域却不做同步器,只把违例压下去,亚稳态风险一点没少;二是复位路径不加分析直接豁免,复位释放时序本来需要认真看,一刀切等于放弃对上电序列的检查;三是多周期路径不写 multicycle 反而标 false,数据需要多个周期才稳定,标 false 等于告诉工具永远不用管它的到达时间。
实测教训是:板子上偶发功能异常,复现不稳定,时序报告却全绿。定位时先把可疑约束逐条注释掉重跑,看违例是否现形,几条跨域路径一放开,违例立刻出现,问题点随之收敛。
正确做法是:CDC 先用同步器,结构上保证数据安全过域;再对确实无关的路径写约束,不确定的宁可留着违例分析;并在注释里写清理由,哪条路径、为什么无关。约束文件也是设计文档,写得含糊迟早要还。
你们复查别人约束时,最先看的是 false path 还是时钟定义?
常见误用有三类:一是跨时钟域路径图省事全标 false path,有数据要过域却不做同步器,只把违例压下去,亚稳态风险一点没少;二是复位路径不加分析直接豁免,复位释放时序本来需要认真看,一刀切等于放弃对上电序列的检查;三是多周期路径不写 multicycle 反而标 false,数据需要多个周期才稳定,标 false 等于告诉工具永远不用管它的到达时间。
实测教训是:板子上偶发功能异常,复现不稳定,时序报告却全绿。定位时先把可疑约束逐条注释掉重跑,看违例是否现形,几条跨域路径一放开,违例立刻出现,问题点随之收敛。
正确做法是:CDC 先用同步器,结构上保证数据安全过域;再对确实无关的路径写约束,不确定的宁可留着违例分析;并在注释里写清理由,哪条路径、为什么无关。约束文件也是设计文档,写得含糊迟早要还。
你们复查别人约束时,最先看的是 false path 还是时钟定义?
