在自身实际操作Vivado 2023.1版本时, 遭遇过网表反标之后时序未更新的状况, 碰到过反标失败出现报错的情形, 还遇到过反标之后功能出现异常的问题, 新手只要依照步骤一步……
在自身实际操作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模式。它能够自动处理跨越电压域的延迟反标, 不过速度会减慢一半。不要将反标过分神化, 它只不过是在早期用于定位时序瓶颈的辅助手段而已。
微信扫一扫
还没有评论呢,快来抢沙发~