You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Yosys生成EDIF文件后Vivado无法识别GND/VCC单元求助

我之前刚碰到过一模一样的问题!其实这是Yosys生成的EDIF文件里,GND和VCC单元的格式和Vivado期望的Xilinx原语不匹配导致的:

  • Yosys输出的GND/VCC单元用的引脚是Y,但Vivado的官方GND/VCC原语要求引脚是O
  • EDIF里的单元类型写的是GND/GND,但Vivado只认单纯的GND原语类型

这就直接导致Vivado把这些单元当成黑盒,根本没法完成优化步骤。


怎么搞定它?

有两种靠谱的方法可以调整Yosys的输出,让EDIF兼容Vivado:

方法1:用Yosys自带的Xilinx映射库

修改你的run_yosys.ys脚本,在综合后加上一步techmap,用Yosys官方提供的Xilinx映射文件修正单元定义:

read_verilog top.v
# 明确指定目标是Artix-7系列,让综合更精准
synth_xilinx -family artix7 -top top
# 用官方映射文件修正GND/VCC等单元的格式,适配Vivado
techmap -map $::env(YOSYS_DIR)/techlibs/xilinx/cells_map.v
# 生成兼容的EDIF文件
write_edif top.edif

小提示:如果你的Yosys没自动设置YOSYS_DIR环境变量,直接换成实际路径就行,比如/usr/share/yosys/techlibs/xilinx/cells_map.v

方法2:手动修正GND/VCC单元

要是方法1不生效,你可以直接在Yosys脚本里手动调整这两个单元的引脚和类型:

read_verilog top.v
synth_xilinx -top top
# 处理所有GND单元:把引脚Y改成O,修正单元类型
foreach i [get_cells -filter "ref_name == GND"] {
    rename $i/Y $i/O
    set_attr $i ref_name GND
}
# 处理所有VCC单元:同样调整引脚和类型
foreach i [get_cells -filter "ref_name == VCC"] {
    rename $i/Y $i/O
    set_attr $i ref_name VCC
}
write_edif top.edif

验证修正后的流程

改完Yosys脚本后,重新运行你的shell脚本:

#!/bin/bash
yosys run_yosys.ys
vivado -nolog -nojournal -mode batch -source run_vivado.tcl

这时候Vivado的opt_designlink_design应该就不会再报GND/VCC的黑盒错误了,能顺利走完流程生成比特流。


为啥全Vivado流程没问题?

因为Vivado自己的综合工具会直接生成符合自身规范的Xilinx原语,不需要额外适配。而Yosys作为第三方综合工具,默认生成的EDIF在一些细节上和Vivado的要求有差异,所以需要我们手动调整这些单元定义来兼容。

内容的提问来源于stack exchange,提问作者MattHusz

火山引擎 最新活动