乐于分享
好东西不私藏

FPGA不暴露源码怎么交付?Vivado 生成DCP网表保姆级教程!

FPGA不暴露源码怎么交付?Vivado 生成DCP网表保姆级教程!

FPGA团队协作时,模块要交给别人却不想暴露源码?Vivado里的DCP网表能做到:对方拿到手就能直接布局布线出bit文件,源码完全看不见。这个网表到底怎么生成、怎么交付,一文讲清楚。

一、Vivado设置

如图1所示,在Settings中找到Synthesis设置,将flatten_hierarchy设为full,More Options填入-mode out_of_context后点击Apply保存。

图1 Vivado层次展平设置界面

flatten_hierarchy有三个选项:full表示将所有子模块逻辑展开到同一层级;none保持原始层次结构不变;rebuilt让综合器自动重新构建层次。生成DCP时推荐用full。

-mode out_of_context表示以"上下文无关"模式综合,即端口不被当作顶层物理引脚,综合器不会插入I/OBUF,也不依赖上层设计进行跨层优化。

接下来如图2所示,将要生成DCP的模块设为顶层,点击Run Synthesis,综合完成后点击Open Synthesized Design进入综合后设计界面。

图2 设置顶层模块并运行综合

需要注意的是,如果模块包含parameter参数,生成DCP后参数值会被固化为固定值。这与Xilinx IP核设置好参数后都需要重新综合是同样的道理。

二、生成DCP网表与仿真文件

在Tcl Console中执行cd命令切换保存路径,例如:

cd E:/play_vivado/test_dcp/test_dcp.srcs/sources_1/new/test_computer

然后执行以下命令生成DCP文件:

write_checkpoint -force <design_name>.dcp

如图3所示,执行后就能在所在路径看到生成的DCP文件,如图4所示。

图3 Tcl控制台执行write_checkpoint命令
图4 生成的DCP网表和端口描述文件

这里checkpoint意为检查点,即保存当前设计快照;force表示强制覆盖同名文件。无论是否包含Xilinx IP,生成DCP都用这个命令,不同于生成EDF网表。

接下来还需要生成端口描述文件,输入以下命令:

write_verilog -mode synth_stub -force <design_name>.v

执行后就能在所在路径看到生成好的端口描述文件。mode synth_stub生成只包含端口声明的文件。

然后生成功能仿真文件,在Tcl Console执行open_checkpoint <design_name>.dcp,Vivado会弹出新窗口,在弹出的窗口Tcl Console执行:

write_verilog -force -mode funcsim <design_name>_sim.v

如图4所示,执行后生成仿真文件。mode funcsim即functional simulation,生成用于功能仿真的Verilog网表。生成后需要将文件名改为<design_name>_sim.v,这样同一工程便可以同时将端口描述文件和仿真文件导入,综合和仿真分别使用不同的文件。完成后回到原来窗口并关闭open_checkpoint弹出的窗口。

三、在工程中使用DCP网表

将源码顶层V文件删除,把生成的DCP网表、端口描述文件和仿真文件加入工程,如图5所示。

图5 将DCP网表等文件添加到工程

仅用端口描述文件和DCP网表就能生成bit文件,但生成前需还原设置:将flatten_hierarchy改回rebuilt,More Options保持为空。另外,DCP文件不能单独作为顶层被综合,需要再套一个顶层模块来调用它。

四、DCP网表与EDF网表的区别

Vivado还支持生成EDF(Electronic Design Format,电子设计格式)网表。步骤相同,命令不同。

模块不含Xilinx IP:

write_edif <design_name>.edf

模块含Xilinx IP:

write_edif -security_mode all <design_name>.edf

-security_mode all用于保护IP核安全信息,不加该参数遇到IP核大概率报错或丢失IP信息。如仍报错可加上-force一起用。仿真文件建议后缀改为sim_model:write_verilog -force -mode funcsim <design_name>_sim_model.v

DCP是Xilinx专有格式,信息最完整(网表、约束、属性等),但仅Vivado可读。EDF是行业通用格式,理论跨工具链,但不同厂商解析存在差异,实际仍需调整;且IP核在EDF中常以黑盒形式存在,对方缺少对应IP库会导致报错。Xilinx生态内流转推荐DCP,需对接其他EDA工具可考虑EDF,但要提前确认IP兼容性。

-END-

如果文章对你有帮助,请记得关注公众号,本公众号将持续更新FPGA信号处理相关的知识,谢谢!

如果对你有帮助,请点亮文章底部的爱心,谢谢!
大家如果有问题,欢迎在评论区留言!
👉笔者长期从事FPGA信号处理相关设计与开发,如您有相关项目需求或者需要FPGA设计代做,欢迎私信!