写在前面
参考文章:https://www.cnblogs.com/kingstacker/p/11508111.html
软件版本:Vivado2017.4
封装生成.edf,.edif文件
1建立工程设置顶层模块
将需要封装的模块设置为顶层模块。(shift_bus模块)
2、综合待封装模块
在设置选项的综合设置中选中打平整个设计,防止别人看到模块层次。
设置-mode out_of_context属性,表示在该级不插入任何I/O BUFFER。类似在ISE的综合选项中去掉-iobuf选项。
然后综合即可。
3、生成.edif/.edf网表文件
打开综合后的设计:在Flow Navigator中点击“Open Synthesis Deisgn”
在TCL Console中输入
a)导出空壳引脚描述文件: write_verilog -mode synth_stub 自定义目录/da1_gen.v
特别注意:路径分隔字符为“/”
b) 导出综合后的网表文件:
若不含Xilinx IP则可通过如下命令生成edf文件:
write_edif 盘符目录/ da1_gen.edf
若含Xilinx IP则需通过如下命令生成edf文件:
write_edif -security_mode all盘符目录/ da1_gen.edf
可以看见我的工程目录下生成了两个文件:da1_gen.v和da1_gen.edf。
4、调用
将da1_gen.v和da1_gen.edif文件添加到需要调用的工程中,然后直接对da1_gen模块进行例化即可。
在vivado中使用( read_edif 路径/xxx.ngc )读入网表文件到工程中,添加只包含端口信息的文件
综合后生成BIT文件完成。
封装成自定义IP
1. 将待封装模块设置为top层
2. I/O Buffers设置
设置Settings–>综合 synthesis–>选项options下拉至最后一项:More Options,将其值设置为:
-mode out_of_context
-mode out_of_context表示在该级不插入任何I/O BUFFERs,该选项类似ISE里在相应设置处不勾选I/O BUFFERs。
另外还可以在选项options中找到“-flatten_hierarchy”,将层级结构设置为“full”,
层级结构则可设置“-flatten_hierarchy”选项为“full”:“全”该选项指示工具把层级全面变平,只剩下顶层,保护IP的层级结构不被其他用户清楚查看。
可以看到在IP Catalog中找到自定义IP carrier_test_v1_0。可以点击添加自定义IP。
可以看到在工程目录下生成了自定义IP的所有文件
工程使用时,将整个文件拷贝到自己正式工程里
综合如下错误:
经过分析,需要将之前生成IP核里的.COE文件也一起拷贝过来。按照指定目录存放。
由此可见,自定义IP里,需要将整个设计文件全部包含在内。
文末总结:
这两种方法各有优劣,笔者的意见是:当需要给合作方提供封装模块时(有版权需求),可以提供EDF文件。当给同事们相互提交模块时,可以提供自定义IP核。