在进行FPGA开发时,如果不希望将源代码交给别人时,有两种方式: 一种方法是将自己的源代码生成网表文件,交出网表文件即可,网表文件又分为DCP网表和EDF网表。;另一种方法是将自己的源代码封装为无源代码IP核。
本文详细介绍生成.edf网表文件的方法和步骤。生成.dcp网表文件方法详见文章: Vivado生成RTL代码网表文件(.dcp网表和.edf网表)–续
软件版本: Vivado2019.2
一. dcp网表和edf网表的区别
-
DCP:是Vivado 原生二进制格式,为 Xilinx FPGA 设计流程量身打造,从综合、实现到比特流生成,全流程无缝支持,无需任何额外配置,适配 XCZU19EG 这类 UltraScale + 大器件的所有特性(如 HR Bank LVDS、IODELAYE3、BRAM/DSP 硬核)。EDF:是通用 ASCII 文本网表,由 Cadence 提出,初衷是解决 ASIC/FPGA 在不同 EDA 工具间的网表交换问题,并非为 Vivado 定制,因此在 Vivado 中使用时需手动 “适配”(如库映射、技术节点指定),容易出现兼容问题。
-
DCP 是自包含文件:生成时会将设计逻辑、时序 / 物理约束、器件库信息、模块层级、IP 配置(甚至布局布线结果)全部打包,单独一个 DCP 文件即可完成后续所有开发(无需额外添加任何文件)。比如你将 FM 解调模块生成为 DCP 后,导入新工程可直接运行实现,无需再添加约束文件。EDF 是碎片化文件:仅包含基础逻辑连接,无任何约束、无层级、无布局信息,使用时必须单独配套.xdc 时序约束、.sdc 物理约束、器件库映射文件,少一个文件就会导致编译 / 实现报错。
-
DCP: 二进制格式无法直接读取,通过-encrypt参数加密后,几乎无法反推逻辑,源码保护级别高;EDF: 纯文本格式可直接用记事本打开,能清晰看到逻辑单元(LUT/FF/BRAM)的连接关系,易被反推核心逻。
二. 将要生成网表文件的模块设置为顶层

三. 综合前设置
打开菜单栏Tools—>Settings—>Synthesis设置-flatten_hierarchy和More Options

-flatten_hierarchy: 控制 Vivado 综合时对设计层级结构(模块嵌套) 的处理方式 —— 是保留模块层级、部分展平,还是完全展平为单层网表。FPGA 设计通常由多层模块嵌套组成,-flatten_hierarchy决定综合后这些层级是否被 “合并”,直接影响:
a.综合优化效果(展平越彻底,优化空间越大);
b.调试便利性(保留层级更易定位问题);
c.资源占用与时序性能 ;
d.网表可读性 / IP 封装兼容性;
-
rebuilt(默认): “重建层级”, 综合时临时展平所有层级以最大化优化(如跨模块的资源共享、逻辑重组),但综合完成后会重建原始的模块层级结构,最终输出的网表仍保留你代码中定义的模块嵌套关系。
-
full: “完全展平”, 综合时彻底展平所有模块层级,将整个设计合并为单个顶层模块,综合后不重建任何层级,最终网表仅包含顶层模块和底层原语(如 LUT、FF、BRAM),无自定义模块边界。
full缺点:
(1) 综合后网表无任何自定义模块层级,所有逻辑都混在顶层,ILA 抓信号时只能看到信号名,无法按模块筛选;
(2) 定位问题时无法快速关联到原始代码的模块,修改代码后需重新全量综合,效率低;
(3) 对封装的无源码 IP,full可能破坏 IP 的独立层级,导致 IP 调用异常。 -
none: “不展平”, 仅保留原始层级,不跨模块优化,仅适用于严格要求层级隔离的场景(如多团队协作的子模块)。
More Options: Vivado在综合时会自动将顶层的I/O口插入buffer,设置-mode out_of_context属性,表示在该级不插入任何I/O buffer。
四. 综合并导出网表文件
综合完成后,打开Open Synthesized Design,在TCL控制台输入命令导出网表文件:
(1)导出空壳引脚描述文件,输出文件名跟顶层名一致。
write_verilog -mode synth_stub /目标路径/led_test.v
若需要调用仿真,则改为以下命令:
write_verilog -mode funcsim /目标路径/led_test.v
(2) 导出综合后的网表文件。
包含Xilinx官方IP核:
write_edif /目标路径/led_test.edf
不包含Xilinx官方IP核:
write_edif -security_mode all /目标路径/led_test.edf
五. 新建工程导入网表文件

如果不新建工程,在原工程文件中导入.v和.edf文件,则需要将步骤二的Setting中More Options改为默认值,否则生成Bit文件会报错
综合后打开网表设计查看:

六. 注意事项
- 生成网表文件时多出.edn文件,则.edn文件需要一起导入到新工程
- 步骤四中如果不新建工程,在原工程文件中导入.v和.edf文件,则需要将步骤二的Setting中More Options改为默认值,否则生成Bit文件会报错
- 调用edf文件时parameter参数无法配置,顶层调用需要去掉宏定义参数,生产的时候注意配置parameter为最终实际使用的,否则模块不能正常工作。
- 在生成网表文件时,如果生成的edf文件中包含PLL IP核,则对应的IP的时序约束会失效,建议不要在edf文件中不要使用PLL IP核,可以将PLL放在网表外面。
1万+



被折叠的 条评论
为什么被折叠?



