Vivado生成网表文件

这篇具有很好参考价值的文章主要介绍了Vivado生成网表文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

仅供个人纪录!!!

什么是网表文件?

在vivado中执行综合后即可生成网表文件,简单来说网表文件是对电路设计逻辑结构的描述,如网表由单元(cell)、引脚(pin)、端口(port)和网络(Net)构成。

综合之后Open Synthesis Design可以看到这样一个窗口,这就是记录了电路的网表信息。
Vivado生成网表文件

如何导出网表文件?

如要导出网表信息,首先在综合前在Tools->Settings->Synthesis中进行设置,Option中这一项设置为
full,意思是模块综合后的层级结构全部为平层,只剩下顶层。看到一个解释说是为了打平整个设计,防止别人看到模块层次。选择full和默认选项rebuilt,后续网表再导入到别的项目时,综合出的结果不一样。
Vivado生成网表文件

因为Vivado在综合时会自动将顶层的I/O口插入buffer,设置-mode out_of_context属性,表示在该级不插入任何I/O buffer。
Vivado生成网表文件

设置好后进行综合,以如下代码为例:

module test(
	input	a0,
    input	a1,
    input	a2,
    input	a3,
    input	a4,
    input	a5,
    output 	y
);
 
	assign y = a0 & a1 & a2 & a3 & a4 & a5;

endmodule

综合后可以看到,代码被综合成了一个LUT6查找表。
Vivado生成网表文件
在TCL console中输入指令来导出网表文件

  • 导出空壳引脚描述文件:
write_verilog -mode synth_stub E:/BaiduSyncdisk/FPGA01/LUT/test1.v

//***********************************************************************
module test(a0, a1, a2, a3, a4, a5, y)
/* synthesis syn_black_box black_box_pad_pin="a0,a1,a2,a3,a4,a5,y" */;
  input a0;
  input a1;
  input a2;
  input a3;
  input a4;
  input a5;
  output y;
endmodule
  • 若需调用仿真,改用如下指令:
write_verilog -mode funcsim E:/BaiduSyncdisk/FPGA01/LUT/test3.v

//***********************************************************************
`timescale 1 ps / 1 ps

(* NotValidForBitStream *)
module test
   (a0,
    a1,
    a2,
    a3,
    a4,
    a5,
    y);
  input a0;
  input a1;
  input a2;
  input a3;
  input a4;
  input a5;
  output y;

  wire a0;
  wire a1;
  wire a2;
  wire a3;
  wire a4;
  wire a5;
  wire y;

  LUT6 #(
    .INIT(64'h8000000000000000)) 
    y_INST_0
       (.I0(a5),
        .I1(a0),
        .I2(a2),
        .I3(a1),
        .I4(a4),
        .I5(a3),
        .O(y));
endmodule
`ifndef GLBL
`define GLBL
`timescale  1 ps / 1 ps

module glbl ();

    parameter ROC_WIDTH = 100000;
    parameter TOC_WIDTH = 0;

//--------   STARTUP Globals --------------
    wire GSR;
    wire GTS;
    wire GWE;
    wire PRLD;
    tri1 p_up_tmp;
    tri (weak1, strong0) PLL_LOCKG = p_up_tmp;

    wire PROGB_GLBL;
    wire CCLKO_GLBL;
    wire FCSBO_GLBL;
    wire [3:0] DO_GLBL;
    wire [3:0] DI_GLBL;
   
    reg GSR_int;
    reg GTS_int;
    reg PRLD_int;

//--------   JTAG Globals --------------
    wire JTAG_TDO_GLBL;
    wire JTAG_TCK_GLBL;
    wire JTAG_TDI_GLBL;
    wire JTAG_TMS_GLBL;
    wire JTAG_TRST_GLBL;

    reg JTAG_CAPTURE_GLBL;
    reg JTAG_RESET_GLBL;
    reg JTAG_SHIFT_GLBL;
    reg JTAG_UPDATE_GLBL;
    reg JTAG_RUNTEST_GLBL;

    reg JTAG_SEL1_GLBL = 0;
    reg JTAG_SEL2_GLBL = 0 ;
    reg JTAG_SEL3_GLBL = 0;
    reg JTAG_SEL4_GLBL = 0;

    reg JTAG_USER_TDO1_GLBL = 1'bz;
    reg JTAG_USER_TDO2_GLBL = 1'bz;
    reg JTAG_USER_TDO3_GLBL = 1'bz;
    reg JTAG_USER_TDO4_GLBL = 1'bz;

    assign (strong1, weak0) GSR = GSR_int;
    assign (strong1, weak0) GTS = GTS_int;
    assign (weak1, weak0) PRLD = PRLD_int;

    initial begin
	GSR_int = 1'b1;
	PRLD_int = 1'b1;
	#(ROC_WIDTH)
	GSR_int = 1'b0;
	PRLD_int = 1'b0;
    end

    initial begin
	GTS_int = 1'b1;
	#(TOC_WIDTH)
	GTS_int = 1'b0;
    end

endmodule
`endif
  • 不指定-mode导出verilog代码(应该相当于综合后的电路代码):
write_verilog E:/BaiduSyncdisk/FPGA01/LUT/test3.v

//**********************************************************
`timescale 1 ps / 1 ps

(* STRUCTURAL_NETLIST = "yes" *)
module test
   (a0,
    a1,
    a2,
    a3,
    a4,
    a5,
    y);
  input a0;
  input a1;
  input a2;
  input a3;
  input a4;
  input a5;
  output y;

  wire a0;
  wire a1;
  wire a2;
  wire a3;
  wire a4;
  wire a5;
  wire y;

  LUT6 #(
    .INIT(64'h8000000000000000)) 
    y_INST_0
       (.I0(a5),
        .I1(a0),
        .I2(a2),
        .I3(a1),
        .I4(a4),
        .I5(a3),
        .O(y));
endmodule
  • 导出综合后的网表文件

若不含Xilinx IP

write_edif E:/BaiduSyncdisk/FPGA01/LUT/test.edf

若含Xilinx IP

write_edif -security_mode all E:/BaiduSyncdisk/FPGA01/LUT/test2.edf

//**************************************************************************
(edif test
  (edifversion 2 0 0)
  (edifLevel 0)
  (keywordmap (keywordlevel 0))
(status
 (written
  (timeStamp 2023 02 06 11 09 52)
  (program "Vivado" (version "2018.3"))
  (comment "Built on 'Thu Dec  6 23:38:27 MST 2018'")
  (comment "Built by 'xbuild'")
 )
)
  (Library hdi_primitives
    (edifLevel 0)
    (technology (numberDefinition ))
   (cell LUT6 (celltype GENERIC)
     (view netlist (viewtype NETLIST)
       (interface 
        (port O (direction OUTPUT))
        (port I0 (direction INPUT))
        (port I1 (direction INPUT))
        (port I2 (direction INPUT))
        (port I3 (direction INPUT))
        (port I4 (direction INPUT))
        (port I5 (direction INPUT))
       )
     )
   )
   (cell INV (celltype GENERIC)
     (view netlist (viewtype NETLIST)
       (interface
         (port I (direction INPUT))
         (port O (direction OUTPUT))
       )
     )
   )
  )
  (Library work
    (edifLevel 0)
    (technology (numberDefinition ))
   (cell test (celltype GENERIC)
     (view test (viewtype NETLIST)
       (interface 
        (port a0 (direction INPUT))
        (port a1 (direction INPUT))
        (port a2 (direction INPUT))
        (port a3 (direction INPUT))
        (port a4 (direction INPUT))
        (port a5 (direction INPUT))
        (port y (direction OUTPUT))
       )
       (contents
         (instance y_INST_0 (viewref netlist (cellref LUT6 (libraryref hdi_primitives)))
           (property INIT (string "64'h8000000000000000"))
         )
         (net a0 (joined
          (portref I1 (instanceref y_INST_0))
          (portref a0)
          )
         )
         (net a1 (joined
          (portref I3 (instanceref y_INST_0))
          (portref a1)
          )
         )
         (net a2 (joined
          (portref I2 (instanceref y_INST_0))
          (portref a2)
          )
         )
         (net a3 (joined
          (portref I5 (instanceref y_INST_0))
          (portref a3)
          )
         )
         (net a4 (joined
          (portref I4 (instanceref y_INST_0))
          (portref a4)
          )
         )
         (net a5 (joined
          (portref I0 (instanceref y_INST_0))
          (portref a5)
          )
         )
         (net y (joined
          (portref O (instanceref y_INST_0))
          (portref y)
          )
         )
       )
     )
   )
  )
(comment "Reference To The Cell Of Highest Level")

  (design test
    (cellref test (libraryref work))
    (property XLNX_PROJ_DIR (string "E:/BaiduSyncdisk/FPGA01/LUT"))
    (property part (string "xc7vx485tffg1157-1"))
  )
)

生成的网表文件如何导入Vivado?

因为网表文件包含了电路的逻辑结构,各种元件以及连线,因此可以直接用来生成电路、仿真以及生成比特流文件。注意的是仿真分为RTL仿真以及门级仿真,使用网表文件不能进行RTL仿真,因为里面描述的都是门级原语。

把生成的引脚描述文件和edf文件导入到新项目中,并写一个top模块进行调用,可以看到电路图如图所示。
Vivado生成网表文件
一开始顶层文件没有加输入输出引脚,只是调用了一下test,结果综合出来没有结果。加了输入输出之后,综合结果如下。
Vivado生成网表文件
综合后,就可以进行门级功能仿真了。Implementation后,可以查看在FPGA中对应的结构(下图另一个project的截图,仅供展示)。
Vivado生成网表文件文章来源地址https://www.toymoban.com/news/detail-403723.html

到了这里,关于Vivado生成网表文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】Xilinx vivado生成.dcp文件的方法

    DCP文件是vivado软件生成的网表文件,主要起到加密的作用,在不需要提供源代码的情况下运行工程。 首先,需要新建工程,工程顶层文件就是生成后dcp文件的名称,然后在vivado-Tool-setting-project-setting-synthesis路径下,在More options中输入-mode out_of_context(综合时不产生IO buffer),

    2024年04月12日
    浏览(37)
  • vivado中如何生成、例化和仿真DCP文件

    1、在vivado-Tool-setting-project-setting-synthesis路径下,设置 -mode out_of_context(综合时不产生IO buffer) 2、将引脚约束注释掉,防止例化使用DCP文件时报错 3、将工程综合,打开综合设计。 4、在console输入命令,生成DCP文件: write_checkpoint -key C:/Users/YDQ/Desktop/key_files.txt -encrypt top.dcp 其

    2024年02月05日
    浏览(35)
  • 生成FPGA bit文件时,Vivado出现错误如何解决?

    生成FPGA bit文件时,Vivado出现错误如何解决? FPGA的编程过程中,生成bit文件是最后的关键步骤。然而,由于各种因素导致Vivado生成bit文件时可能会出现各种错误,其中一个常见问题是出现错误信息“[Vivado生成bit文件出现error解决 FPGA]”(Error generating bitstream),可能会让人感

    2024年01月22日
    浏览(40)
  • Vivado生成压缩后的FPGA bit文件方法详解

    Vivado生成压缩后的FPGA bit文件方法详解 当我们使用Xilinx公司的FPGA开发环境Vivado进行开发时,通常会需要将设计好的程序烧录到目标板上进行测试和验证。而这个过程中,需要将设计好的FPGA bit文件通过一些方式传输到目标板上。 但是,FPGA bit文件通常都比较大,如果直接传输

    2024年02月06日
    浏览(34)
  • Vivado 2018.3入门教程(三):生成比特流文件+硬件连接

    这是我的Vivado 2018.3入门教程(三):生成比特流文件+硬件连接 我的Vivado 2018.3入门教程大致分为四个部分: Vivado 2018.3入门教程(一):创建工程+新建源文件. Vivado 2018.3入门教程(二):逻辑编写+IO配置. Vivado 2018.3入门教程(三):生成比特流文件+硬件连接. 想要完整的进行

    2023年04月21日
    浏览(32)
  • “FPGA开发中Vivado生成bit文件遇到的错误解决方案“

    “FPGA开发中Vivado生成bit文件遇到的错误解决方案” FPGA开发是现在工业界中越来越广泛使用的技术,但是在开发过程中难免会出现一些问题。其中,Vivado生成bit文件报错是一个比较常见的问题。下面,我将详细介绍这个问题以及如何彻底解决。 一、问题描述 当我们进行FPGA项

    2024年02月04日
    浏览(50)
  • Vivado block design 导出与导入(tcl文件的生成与载入)

    摘要:Vivado block design 导出与导入 主要步骤:open block design —— File —— Export —— Export block design open block design File —— Export —— Export block design 将block design 保存到自己想要的位置,然后在Tcl console中使用tcl命令,直接source   我在source的时候会遇到版本不一致的问题,这个

    2024年02月11日
    浏览(33)
  • FPGA 学习笔记:Vivado 生成的 Bitstream bit 文件 超大的解决方法

    最近学习FPGA,使用Vivado,照着开发板例程,写了个流水灯的Verilog程序,配置好引脚约束后,下载到开发板,发现下载的速度有点慢,我一查看 生成的 bit文件,发现竟然接近11MB。 开始以为是 Vivado 版本出了问题,我先后更换为 Vivado 2018.2 Vivado 2019.2 Vivado 2022.2,生成的 bit 文件

    2024年02月13日
    浏览(49)
  • 【FPGA】Quartus18.1打包封装网表文件(.qxp)详细教程

    当我们在做项目的过程中,编写的底层Verilog代码不想交给甲方时怎么办呢?此时可以将源代码打包封装成网表文件(.qxp)进行加密,并且在工程中进行调用。 Quartus II的.qxp文件为QuartusII Exported Partition,用于创建综合或者PAR之后的网表文件。 在QuartusII的Project Navigator中选中欲

    2024年04月12日
    浏览(29)
  • 【LabVIEW FPGA图形化】 ngc、edf网表文件的编写:LED流水灯

    【LabVIEW FPGA图形化】 ngc、edf网表文件的编写:LED流水灯 FPGA图形化可以提高FPGA的开发效率,为产品迭代、功能机验证,产品参数调试提供的便捷的编程方式。LabVIEW作为一款图形化开发软件可以为FPGA提供零代码开发,图形化界面可以非常直观的展示出FPGA的并行结构。LabVIEW的开

    2023年04月27日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包