在自身实际操作Vivado 2023.1版本时,遭遇过网表反标之后时序未更新的情况,碰到过反标失败出现报错的情况,还遇到过反标之后功能出现异常的问题。
反标前必须做的文件准备
先开启综合之后的工程,在Tcl Console当中键入open_run synth_1,将综合的结果加载。接着,实施write_verilog -force post_synth.v以及write_sdf -force post_synth.sdf,把网表跟SDF文件引出至工程目录之处范围里之处。留意, SDF 文件当中应该包括所有路径的延迟相关信息,不要去勾选仅仅导出顶层。
【新手避坑】
常见出现的报错呈现为Error: [Vivado 12-1345]这种情况,它会有所提示表明找不到某一个单元的延迟方面的信息。而其核心的原因在于你并没有勾选 -include_timing这个参数,又或者是在进行综合起来的时候没有使能时序方面的分析。解决之道为:在write_sdf指令之后添加上 -include.timing与 -process_corner slow,以此强行包括所有工艺角的延迟。
第二个步骤,去创建一个空的工程,将刚刚导出的那个post_synth.v以及post_synth.sdf进行复制并放置进去。在Sources面板那里,通过右键点击Add Sources,选择Add or create design sources,以此加入网表文件。随后必须要把post_synth.v设定为顶层,不然的话反标就会出现找不到顶层模块的情况。
【新手避坑】
万一碰到ERROR: [VRFC 10-716],讲模块实例化存在不匹配情况,大多是因为网表里对综合库的单元进行了调用,然而新工程却没有添加综合库,解决的办法是:在工程设置当中把xilinx_vivado_lib路径增添到Library Search Path。
反标执行与参数校准
第三步,在Tcl Console当中输入read_sdf -load_delay yes post_synth.sdf,随后进行report_timing -max_paths 10,以此来检查在时序报告里是不是会显示SDF annotation: complete。最优推荐值的关键参数为:反标时设置-scale 1.0,其原因在于该数值最贴近真实的芯片延迟,如果设置得过大或者过小,均会导致时序过于宽松或者过于紧凑,进而造成仿真结果失实。
【新手避坑】
反标之后,时序报告始终呈现 SDF annotation: incomplete 的状态,很大概率是 SDF 文件当中的延迟数值跟网表端口不相对应。不要直接重新运行综合,先去运行 report_sdf -file check_sdf.rpt,查看哪些路径没有匹配成功,手动对网表里端口的命名规范作出调整(比如让 SDF 里的 I 与网表的 IN 相对应)。
两种反标方案对比与高频报错处理
之于实操环节,存在的是两种常见的有关方案,其一为方案A,此方案所采用的方式是借助Vivado自身所带有的read_sdf这一操作进行一键反标,其具备的优点在于速度快,适宜应用于功能验证工作里;其二为方案B,该方案是手动凭借vcs -sdf命令于第三方仿真器内部实施反标操作,其优点体现为具备灵活性,能够针对每一条路径的延迟情况调整。若你的设计当中存在跨时钟域逻辑,那么方案B会更加靠谱些,这是由于Vivado的反标有时候会遗漏掉异步路径;要是属于纯同步设计的话,方案A会更省事些。
【新手避坑】
方案 A 完成之后,功能仿真出现报错 X propagation,其原因在于 Vivado 进行反标时未对处理 setuphold 违例处理。解决的办法为:在read_sdf 命令之后添加 -recompute_setuphold,以此强制重新计算建立保持时间。
时刻保持高频出现的完整报错情况为: ERROR, [该报错具体代码为SDF 4 – 2],出现了针对实例‘u_dut/u_reg’进行注释计时过程中失败的现象。
完整解决流程:
1. 使用report_hierarchy,查看u_dut,看其是否在网表里,查看u_reg,看其是否在网表里。
2. 要是不存在,那就是在综合的时候被优化给去掉了,然后回到综合阶段,再加上( keep =”true” )这样的约束。
3. 要是存在然而反标遭遇失败这种情况,那就去运行report_delay_calc -to u_dut/u_reg/CK,瞧瞧延迟模型是不是相匹配。
4. 在不匹配的情况下,在SDF文件里,将(PATHPULSE)这个段落进行注释处理,而后重新运行反标。
这样的反标方式仅仅适用于那个需要单工艺角、小规模模块的时序验证。要是你的设计里存在多个电压域,或者使用了黑盒子,那么反标就会遗漏掉其中的内部路径。有简易替代方案:转而使用xsim的-sdf模式。它能够自动处理跨越电压域的延迟反标,不过速度会减慢一半。不要将反标过分神化,它只不过是在早期用于定位时序瓶颈的辅助手段而已。










