Vivado生成网表文件并创建自定义IP

平台:vivado2018.3

应用场景,在设计的过程中,我们一些特定的模块需要交付给别人,但是又不想让他们看到其中的源码。就可以将源码封装成网表和IP文件。

vivado生成网表文件

设置综合。设置-flatten_hierarchy* 为full。

这里可以设置为full或者rebuilt。

设置为full,后续需要生成.v文件和.edf文件。设置成rebuilt只需要生成.edf文件。

在more options*选项中设置为 -mode out_of_context,让输入输出的引脚不加IO buffer。

综合成网表后生.v文件,该文件的名字不应该和你的名字一样建议加上后缀。

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

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

//<design_name>.v为设置的文件路径及.v文件名,例如:D:/Users/Desktop/1/a.v (注意斜线)

生成.edf文件语句。

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

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

//<design_name>.edf为设置的文件路径及.edf文件名,例如:D:/Users/Desktop/1/a.edf (注意斜线,与.v文件名保持相同)

生成的网表如果需要调用仿真。

write_verilog -mode funcsim <design_name>.v

不指定-mode导出verilog代码(应该相当于综合后的电路代码):

write_verilog <design_name>.v

如原文件为pcie_top.v新生成的文件名字为pcie_top1.v。

综合完成后将顶层写成.v和.edf文件。

检查文件夹中是否生成了。

两个文件。

下面我们新建工程在新工程中调用这两个文件.v和.edf文件。

综合完成后。

使用该网表生成IP核

点击ok和finish。该过程会生成一个vivado工程,该工程只是在配置该IP的时候有效。下面进行配置IP。名字叫做my_pcie3,类型为UserIP。

对一下你的IP端口,输入输出。

生成该IP。

查看生成的IP文件夹。Src文件夹下只包含顶层文件和网表文件。

下面在pcie_recon6中调用该IP。验证项目的可行性。

新建工程,将IP文件夹保存在当前项目目录下。

在工程中添加该IP。

生成IP报错。

根据报错将网表文件添加到该文件夹。


 

IP成功编译。

将IP添加到项目。通过综合和实现后,发现时序编译不过。

从vivado的report timing summer中可以看到。Vivado自动识别的时钟并不准确。可以看到和正常编译过了的版本工程很多时钟周期约束都不准确。下面是正常版本的时钟约束。

准备将该版本中的时钟进行约束一遍。看看能否过静态时序分析。

同时在tcl中使用report_clock查看时钟约束是否正常,经过分析报告,发现时钟约束很多都有问题。(原因暂时没有想到,我是通过工程生成的网表,然在生成的IP,按理说应该拥有正常的时钟约束,这点没有想明白)

创建时钟约束。

前面是正常出来的lb_clk_0后面这个是使用网表综合后生成的就变了。这个情况该怎么办呢?对这个错误的时钟从新约束一次吗?

经过查阅资料发现,在生成网表文件时,若生成的edf文件中包含PLL IP CORE,则对应的IP的时序约束会失效,建议不要在edf文件中不要使用PLL IP,可以将PLL放在网表外面。

### Vivado生成 `.bin` 文件的教程 在 Vivado 工具中生成 `.bin` 文件是一个常见的操作,尤其是在需要将 FPGA 配置数据存储到外部 Flash 或其他非易失性设备时。以下是关于如何通过 Vivado 生成 `.bin` 文件的具体方法: #### 设置项目属性 为了确保生成的位流文件能够被正确转换为 `.bin` 文件,在设计过程中需设置一些必要的属性。这些属性可以通过 Tcl 命令或者 GUI 界面完成。 ```tcl set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design] # 设置 SPI 总线宽度为 4 set_property CONFIG_MODE SPIx4 [current_design] # 使用 SPIx4 模式配置 set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design] # 设置配置速率 set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] # 启用压缩功能 set_property BITSTREAM.CONFIG.UNUSEDPIN Pullup [current_design] # 将未使用的引脚设为上拉 set_property CFGBVS VCCO [current_design] # 设置电源电压模式 set_property CONFIG_VOLTAGE 3.3 [current_design] # 设定配置电压为 3.3V ``` 上述命令可以手动输入到 Vivado 的 Tcl 控制台中,也可以将其保存在一个单独的 Tcl 脚本文件执行[^3]。 #### 创建 Bitstream 文件 一旦完成了所有的设计工作(包括编码、综合、布局布线),下一步就是生成 `bitstream` 文件。这一步骤可以在 **Flow Navigator** 下找到对应的选项 “Generate Bitstream”。点击此按钮后,Vivado 将自动处理剩余的工作直到生成最终的 `.bit` 文件[^1]。 #### 转换 .bit 到 .bin 文件 当成功生成了 `.bit` 文件之后,就可以利用内置工具将其转化为所需的二进制格式即 `.bin` 文件。具体步骤如下所示: - 打开菜单栏中的 **Tools -> Create Boot Image...** - 在弹出窗口内指定源 `.bit` 文件的位置以及目标输出路径。 - 完成参数设定后按下 OK 键即可启动转换过程。 另外一种方式则是借助于命令行接口来实现同样的目的。例如下面这条指令展示了怎样调用 bootgen 实现这一转化: ```bash bootgen -image design.bif -arch zynq -o BOOT.bin ``` 这里需要注意的是,`.bif` 是一个描述引导镜像结构的小型文本文件,它指定了哪些部分应该被打包进入最终的结果当中[^2]。 #### 自动生成机制 值得注意的一点是,在某些情况下,比如当你按照标准流程设置了所有必需的设计约束条件,且选择了合适的硬件平台支持的情况下,那么仅仅只是触发一次完整的编译周期就足以让整个系统自动生成相应的 `.bin` 文件而无需额外干预。 --- ### 示例代码片段 以下是一段简单的 Python 脚本来展示如何自动化这个流程的一部分: ```python import os def generate_bin_file(vivado_path, project_name): commands = [ f"cd {os.path.join(vivado_path, 'projects', project_name)}", "vivado -mode batch -source create_bit_to_bin.tcl" ] with open("run_vivado.sh", "w") as script: script.write("\n".join(commands)) print(f"Script generated at run_vivado.sh") # Example usage generate_bin_file("/path/to/vivado/installation", "my_project") ``` 这段代码可以帮助构建一个批处理作业用于连续地从头至尾管理项目的建立直至最后阶段——也就是生产出期望形式的数据文件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值