网表导入后综合报错怎么解决 迈入第一步, 开启Vivado工程, 于Flow Navigator面板之中, 点击PROJECT MANAGER之下的Settings。在弹出窗口的左侧部位, 去选中Synthesis, 于……
网表导入后综合报错怎么解决
迈入第一步, 开启Vivado工程, 于Flow Navigator面板之中, 点击PROJECT MANAGER之下的Settings。在弹出窗口的左侧部位, 去选中Synthesis, 于右侧之处, 寻找到More Options, 在文本框以内, 手动键入-mode out_of_context, 此参数会强制综合工具仅仅处理网表逻辑, 不会自动去绑定器件引脚以及时钟资源, 按OK进行保存。
【新手需避开误区】, 这儿存在一个出现频率较高的报错: [Synth 8 – 439]模块‘xxx’未被找到。出错原因不是你将网表文件放置错误, 而是鉴于Vivado默认综合模式会试着再次解析顶层模块的RTL文件, 然而在网表模式下顶层模块原本是没有RTL源码的。解决方案为: 于Settings当中, 去确认顶层模块名, 即Top Module, 你所书写的要与网表内部模块名全然一致, 大小写是敏感的, 一个字符都不能有差别, 不能差一个字符, 标点符号不能差哦。
第二步, 返回到Flow Navigator那儿, 点击Add Sources, 接着选择Add or create design sources, 随后点击Next。于弹出的文件添加窗口当中点击Add Files, 寻觅到你的.edf或者.ngc网表文件, 选中之后予以确认。留意着,要是网表倚赖若干文件, 诸如一顶层网表与多个子模块网表这般, 那就统统一股脑儿加进去, 可别遗漏。而后点击Finish。
许多人在导入网表之后, 点击运行综合, 进度条行进到一半, 直接弹出关键警告: [综合8 – 555] , 称找不到某个实例化的子模块, 这是因为仅添加了顶层网表, 然而顶层网表里例化调用的子模块网表却未被导入。处理方式为: 返回到Add Sources步骤, 将所有与之相关的.edf文件进行添加, 还有.ngc文件也要添加, 甚至.dcp文件同样添加到项目之中, 接着在Sources窗口, 对着网表文件点击右键, 选择Set As Top来强制去指定顶层。
前行的第三步, 于Sources窗口之中, 将Hierarchy予以展开, 去确认网表文件是否被识别成为灰色带有锁状的图标模样, 而这般情形则代表着其呈现的是黑盒状态。随后, 对该文件实施右键操作, 从中选择Set as Top这一选项。紧接着, 在Flow Navigator处, 点击Synthesis之下的Run Synthesis。当综合全部完成之后, 将Synthesized Design予以打开, 于Timing菜单的下方点击Report Timing Summary, 进而对关键路径的时序余量加以确认。
【新手需避坑】进行综合后, 打开Report Timing Summary, 发觉一堆路径的Slack全是负几百皮秒, 呈现一片红色。这一般是网表里所自带的时钟约束与工程的约束产生了冲突。该有的做法是: 于Synthesis Settings之中将-mode out_of_context参数应用起来, 如此这般综合工具便不会去理会顶层时钟树,而仅是留存你手动于XDC里所添加的约束。另外, 建议把时钟周期设定为10ns(100MHz)作为参照标准, 这个数值对绝大多数中等规模网表而言通用性是最为优良的, 既能够抑制时序违例情况的出现, 又不至于因过于严格以至于使得综合工具进行暴力优化进而增加面积。
网表导入不进去的原因排查
于此存在着两种实操的方案, 依据场景来进行选择, 方案其一为, 运用add_files命令直接施行导入。打开Tcl控制台, 输入add_files, 内容为{./path/to/your_netlist.edf}, 接着输入set_property, 其参数为used_in_synthesis false, 针对的是通过get_files获取的your_netlist.edf, 随后再输入set_property, 参数是used_in_implementation true, 同样是针对通过get_files获取的your_netlist.edf。这组指令强行使得网表仅被应用于实现阶段, 并不介入综合, 适宜网表自身便是后端优化完毕的情形。
首先是方案二, 要在 Flow Navigator 当中找到 IP Catalog 来进行操作;随后在这个已找到的 IP Catalog 之上,需右键点击空白之处, 并选择 New IP Location 这一项;接着要把网表文件进行处理, 将其包成一个自定义的 IP 核;最后, 要在 Block Design 里面对这个已经被处理好的自定义 IP 核进行例化操作。此方案的取舍逻辑为: 方案一适用于单文件、不与其他逻辑作交互的纯网表;方案二适用于网表需与AXI总线、DDR控制器等IP进行互联的复杂情形, 尽管步骤多了一步, 然而后续连线却省去诸多麻烦。
新手要避开的坑当中, 最让人头疼的那种完整报错呈现为, 处于Implementation阶段进行跑路操作的时候, 会弹出一个窗口, 上面显示[Place 30 – 574] Poor placement for routing between an IO pin and an IO buffer , 其产生的缘由在于, 你所导入的网表里将一个顶层I/O进行了例化, 然而工程却并未给这个I/O分配物理管脚。一站式解决流程: 首先, 将Synthesized Design之中的I/O Ports窗口予以打开, 接着, 把报错的端口名找寻出来;然后, 通过右键选择Create Constraint, 输入类似set_property PACKAGE_PIN AB12 [get_ports {xxx}]这样的物理管脚号;随后, 输入set_property IOSTANDARD LVCMOS33 [get_ports {xxx}];最终, 把约束文件进行保存, 再次运行Implementation。
有这么一招, 是关于网表导入的, 它可不是那种在任何情况下都一概适用的。倘若你所使用的网表, 是由Vivado早期版本, 像是在2018.3之前生成出来的, 然后要是直接把它导入到2024.1这个版本中, 就会出现报不兼容错误的情况。在这种时候呢, 就需要开启虚拟机去安装旧版本, 接着重新导出.edf文件, 又或者是运用Tcl命令read_edif, 并且配合file_format参数指定旧版格式。此外, 要是网表自身处于加密状态(像是第三方IP供应商所给予的FLEXlm加密形式), 那么那套流程根本无法通行, 必须联系供应商索要解密文件, 或者运用他们所提供的DC编译脚本再次生成没有加密的网表。
微信扫一扫
还没有评论呢,快来抢沙发~