vivado中bit文件怎么没有生成_【划水】Vivado生成网表文件是怎么回事呢?

48e1819e2166fbc00dd1db6092fb434f.png

Vivado生成网表文件是怎么回事呢?Vivado相信大家都很熟悉,但是Vivado生成网表文件是怎么回事呢,下面就让小编带大家一起了解吧。

Vivado生成网表文件,其实就是让写的RTL源码不被看见,大家可能会很惊讶Vivado怎么会生成网表文件呢?但事实就是这样,小编也感到非常惊讶。

这就是关于Vivado生成网表文件的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦![1]

28331087d79a94aa0d66e7ed695a2e0d.png

营销号生成器真有意思,不过话说回来,Vivado生成网表文件是怎么回事呢?回答之前先设想以下几个场景:

⭐场景一:多人同时在做一个FPGA项目,如果一个老哥写的模块包含30个RAM、80个FIFO,还位宽深度都不一样,同时还例化了200个子模块,而你作为集成项目的人,该怎么办?

场景二:你和老哥两个人写的模块需要联合调试,然后调试有问题,那个老哥不管三七二十一,先把你的代码改一通,最后崩了,你该怎么办?

场景三:给甲方写了个模块,钱没到位,但是拿着你的源码跑路了,你又该怎么办?

那是不是说如果可以把写的模块封装成一个文件,但是并没有源码且不能修改,直接例化就可以使用,就解决了上述的几个问题?那么网表文件就是在做这样一件事情。

如何操作?

以之前写的采用有限状态机实现序列检测模块为例,现在写了个两路“101”序列检测器模块(就是把原来的例化两个),该模块的结构如下:

module 

然后要求需要把“fsm_test_top”这个模块生成网表文件,步骤如下

  • 将模块设为顶层

25e3a3bfcf267c9dee76976ffa2752dd.png
将fsm_test_top设为顶层
  • 找到综合设置(Synthesis Settings)

8e46aa9275adecbd5b39e9d8295602ca.png
Synthesis Settings
  • 修改Options选项

ee4f6f86da2274570dd6ad185b2fdf63.png
修改Synthesis Options

其中需要注意的是,Options中将-flatten_hierarchy设为full,意思是模块综合后的层次结构全部为平级,只剩下顶层,这样产生的网表文件就不易被查看到层级关系了,可详见UG901的第11页[2]

5183faea7c463acec9f77647af35bda6.png
UG901的第11页 -flatten_hierarchy选项

此外,More Options选项设置为-mode out_of_context,原因是因为Vivado在综合的时候会自动将顶层的IO口自动插入buffer,而现在需要生成网表的模块往往不是顶层,生成的文件是需要被其他模块例化的,所以不能含有IO buffer,设为-mode out_of_context即表示不插入IO buffers,注意mode前面有个"-",具体可详见UG901的第26页[2]

59b3d2ba1c8e0fb3dd40f6a521d2f007.png
UG901的第26页 More Options注意事项
  • 对模块综合(Synthesis)

3b494e3bdb99545e388e49b4030ade50.png
Run Synthesis
  • Open Synthesized Design

ac49e9377a64fc8b56954eae6c6343c3.png
Open Synthesized Design

8f545ece17e0cb3cac449346b2882db6.png
可以得到这个界面
  • 生成网表文件

生成网表文件前需要先Open Synthesized Design,然后在Tcl Console中输入[3]

//vivado 2017.4及以前
write_verilog -mode port <design_name>.v

//vivado 2018.1及以后
write_verilog -mode synth_stub <design_name>.v

//例如本次,文件名前面不加地址则默认保存在C:/Users/<user>/AppData/Roaming/Xilinx/Vivado/下
write_verilog -mode synth_stub D:/fsm_test_top.v

ca25bdf959c7439e289795108298590d.png
生成只有IO接口信息的.v文件

然后再生成网表edf文件,同样在Tcl Console中输入[3]

//模块不包含Xilinx的IP
write_edif <design_name>.edf

//模块包含Xilinx的IP
write_edif -security_mode all <design_name>.edf

//本次模块中没有使用Xilinx的IP
write_edif D:/fsm_test_top.edf

9227d6cc0342e2eec832e6bbaefb088c.png
生成edf文件
  • 获得网表文件

到设置的目录下找到生成的网表文件,一个.v文件和一个.edf文件

2a8ac5db55f4438fd622f7b15cfde33f.png

可以打开看看里面是个啥

首先fsm_test_top.v里面是只有包含IO接口信息,其他什么内容都没有

1da2a6b262a38a6a34cb74db5d92d97d.png
fsm_test_top.v

然后打开fsm_test_top.edf可以看到,产生的内容为使用了LUT、FDCE情况和一些连接信息,没有RTL源码

9399c71c66f2e89d7f901a4750243b61.png
fsm_test_top.edf

怎么使用?

  • 将生成的两个文件导入到目标工程中

2eff533569c1521bba543990f9bd6af5.png

cb42e1b407d52c9a81cdbddc79eac1e4.png
  • 直接例化就可以使用

例如笔者想在模块edf_test.v中使用这个导入的网表文件,那么直接在模块里对其例化就可以使用了,如图

06af7b71755db7558657e7d981bc8bc9.png
例化使用网表

f6b342542c6d34363c3bff91c721e4ef.png
例化后结构
  • 查看综合后的情况

6eda9aa9124b2a6b40fa24f6cefb3fe0.png

9d5050a7939d28954fb437b8cce611cc.png
对U_0展开

通过对例化了网表文件的模块,并查看RTL综合后的原理图中可以发现,与原来模块fsm_test_top的结构一致。

如果综合结构层次不选择flatten(根据评论区补充)

即在Synthesis Settings中的-flatten_hierarchy不选择flatten,而保持默认的none,那么在其他所有操作不变的情况下,在其他工程实例化该网表文件,并且对其进行综合,可以得到以下综合后的结果

e0b80d9761a6e153bb2a39fbad09da59.png
其他工程调用网表文件综合的结果

5cdd48343856293d8e546f577b07665a.png
其他工程调用网表文件综合的结果(展开)

可以发现如果不将模块的层次打平(flatten),在其他工程使用该网表后依旧可以保留原模块的结构层次。

总结

当然,笔者只是测试了一个很小很小的模块,如果对于较大的模块,结构会更加复杂,这样一来,使用网表文件的话,就可以对刚开始提到的三个场景的问题进行很好的解决。


大致操作就如上所述的了,之后想到再做补充,如有不足,望批评指正~

参考

  1. ^营销号生成器 http://kaseidis.gitee.io/interesting_gadgets/marketing_generator/index.htm
  2. ^abXilinx文档UG901 http://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_3/ug901-vivado-synthesis.pdf
  3. ^ab使用Vivado将包含Xilinx IP的用户模块封装成网表文件 https://blog.csdn.net/weixin_44384867/article/details/86591338
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值