Vivado无法识别Yosys生成的EDIF文件中的单元格

时间:2019-02-09 02:50:15

标签: yosys

我正在尝试使用Yosys生成edif文件,然后将其与Vivado tcl脚本一起使用,以为Artix 7(xc7a15t)FPGA生成位流。但是,Vivado似乎对edif文件中的一些单元格有麻烦。

当我在Vivado中完全使用相同的Verilog和约束文件时,可以很好地创建位流,并且在将其加载到FPGA时可以按预期工作。

我已经根据示例here对工作流程进行了建模。

具体来说,我将以下shell脚本用作yosys和Vivado命令的前端:

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

run_yosys.ys:

read_verilog top.v
synth_xilinx -edif top.edif -top top

run_vivado.tcl

read_xdc top.xdc
read_edif top.edif
link_design -part xc7a15tftg256-1 -top top
opt_design
place_design
route_design
report_utilization
report_timing
write_bitstream -force top.bit

top.v(简单的眨眼示例):

`default_nettype none

module top (
            input wire clk,
            output reg led);

        reg [24:0]     cnt = 25'b0;

        always @(posedge clk) begin
                cnt <= cnt + 1'b1;
                if (cnt == 25'b0) begin
                        led <= !led;
                end
                else begin
                        led <= led;
                end
        end

endmodule // top

top.xdc:

create_clock -period 25.000 -name clk -waveform {0.000 12.500} [get_ports clk]

set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN N11} [get_ports clk]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D1} [get_ports led]

set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property CFGBVS VCCO [current_design]

Vivado tcl命令opt_design产生以下错误:

ERROR: [DRC INBB-3] Black Box Instances: Cell 'GND' of type 'GND/GND' has undefined contents and is considered a black box.  The contents of this cell must be defined for opt_design to complete successfully.

单元格'VCC'遇到相同的错误。

致电link_design时也会收到与此相关的警告:

CRITICAL WARNING: [Netlist 29-181] Cell 'GND' defined in file 'top.edif' has pin 'Y' which is not valid on primitive 'GND'.  Instance 'GND' will be treated as a black box, not an architecture primitive

我在这里错误地使用了Yosys吗?正确的流程是什么?我是Yosys的新手,所以如果我错过了明显的事情,请原谅我。

我正在使用Yosys 0.8 + 147和Vivado 2017.2

1 个答案:

答案 0 :(得分:1)

解决方案在Yosys user manual中。 Vivado抱怨'VCC'和'GND'单元,因此我们必须将-nogndvcc选项传递给write_edif。如-nogndvcc选项说明中所述,要执行此操作,我们必须使用hilomap将VCC和GND与自定义驱动程序关联。完整的xilinx合成可以通过以下方式实现:

synth_xilinx -top top
hilomap -hicell VCC P -locell GND G
write_edif -nogndvcc top.edif