教你打包一个自己的Vivado IP核

写在前面
模块复用是逻辑设计人员必须掌握的一个基本功,通过将成熟模块打包成ip核,可实现重复利用,避免重复造轮子,大幅提高我们的开发效率。
接下来将之前设计的串口接收模块和串口发送模块打包成ip核,再分别调用这两个ip核,构成串口接收--发送循回,依次验证ip核打包及调用是否成功。
源码在这:串口(uart)的fpga实现
vivado版本:vivado 2019.2
开发板:xc7a35tfgg484-2
打包
打包串口发送模块uart_tx
1、首先打开发送模块的vivado工程,确保其编译无误(最好进行仿真验证、上板验证保证其功能正确性),如下:
2、点击tools-----create and package new ip
3、点击next
4、选择选项1,点击next,各选项含义:
1---将当前工程打包为ip核
2----将当前工程的模块设计打包为ip核
3----将一个特定的文件夹目录打包为ip核
4----创建一个带axi接口的ip核
5、选择ip存放路径,建议专门建一个文件夹来管理所有建立的ip核,然后点击next
6、点击ok,然后点击next,会自动创建一个新工程,用来生成ip核
7、新生成的ip核打包工程如下:
在右边的界面可以配置一系列参数:
identification:主要是一系列信息,如ip名字,开发者、版本号等。因为本文仅作示范,所以我这边所有信息都没改
compatibility:兼容的系列,这里根据自己需求添加所需要的系列芯片就好了。我这边保持默认
file groups:ip核的文件架构,可以添加或删除文件。比如添加仿真文件、例化文件,说明文件等。我这边保持默认
customization parameters:定制化参数。可对参数进行自己的配置,如参数名称啊,类型啊,自定义区间,可选列表等。
点击bps----edit parameter,对参数进行配置(该参数为串口模块的波特率)
将格式format改为long类型,再勾上specify range,type改成list of values,再添加3个参数(仅作示范)--4800、9600、115200。再将默认值default value改为9600。这样就将该参数配置成了可选参数,默认9600,可选值:4800、9600、115200。
再使用同样的方法将参数clk_fre(模块时钟频率)改为long类型,默认50000000.
ports and interfaces:这里展示了ip的接口,可根据需求添加、删除接口或者总线。
需要说明的是,这里很容易报警告:
这个警告是因为ip核打包器在设计中推断出了时钟端口或是复位端口。例如:如果信号名称包含以下任何一种:[ ]clk,[ ]clkin, [ ]clock[ ], [ ]aclk 或 [ ]aclkin,那么ip打包器就会为将其判断成为时钟接口。被自动判断出的接口,ip打包器会倾向于认为你使用axi接口来处理这个信号,因为ip打包器工具主要是针对于axi接口。所以如果你的ip中并不使用axi总线,这两条警告可以直接忽略,在实际的ip中不会有任何的影响。
addressing and memory:地址分配和储存映射。本设计用不到,直接跳过,感兴趣的可以看xilinx的手册ug1118。
customization gui:参数设置的gui界面。可以对以后配置ip核的界面做一个修改。可以看到,红框内的参数都是我设置好的默认值。
review and package:ip核总览及生成界面。点击package ip完成ip打包
ip核成功打包,如下:
打包串口接收模块uart_rx
使用同样的方法把串口接收模块也打包成ip。
调用
接下来分别调用这两个ip核,构成串口接收--发送循回,依次验证ip核打包及调用是否成功。
首先新建一个工程,点击settings----ip----repository, 添加ip核所在路径:
点击 create block design,新建一个bd模块,建议名称与项目名称一致。
在bd编辑窗口添加ip,搜uart就出现了我们打包的两个ip核:
分别添加串口发送模块和串口接收模块:
把对外的四个端口(clk,rst,txd,rxd)引出来,右击sys_clk,点击make external ,其他三个端口操作一致;再把对应的线连接,然后点击regenerate layout:
这里我们的 block design 就设计完成了,在 diagram 窗口空白处右击,然后选择“validate design” 验证设计。验证完成后弹出对话框提示“validation successful”表明设计无误,点击“ok”确认。最后按 快捷键“ctrl+s”保存设计。
接下来在 source 窗口中右键点击 block design 设计文件“system.bd”,然后依次执行“generate output products”和“create hdl wrapper”。
然后添加管脚约束,生成bit流文件。
测试
下载bit流文件,使用串口调试助手发送一包数据给fpga,理论上fpga马上回相同的信息给串口调试助手(此时串口波特率9600):
返回设计阶段,点击ip核框图,将波特率改为115200,如下:
重新生成并下载bit流文件,使用串口调试助手发送一包数据给fpga,理论上fpga马上回相同的信息给串口调试助手(此时串口波特率115200):
参考资料:
ug1118----creating and packaging custom ip
米联客----xilinx 7 系列 fpga 基础入门


阵列波导光栅(AWG)的工作原理
液压传动系统由哪几部分组成
低码率语音编码MELP声码器的SOPC实现
高保真音频功率放大器LM1875
制造革新-首家使用Stratasys Infinite Build 3D打印机的汽车制造商
教你打包一个自己的Vivado IP核
SII精工半导体正式改名为ABLIC Inc“3S”理念扩大模拟IC市场
中软国际数据治理专业服务解决方案获得华为云联合基线解决方案认证
贸泽开售适用于可编程光纤模块的 Renesas高性能FemtoClock2合成器
激光熔覆工艺深度解析:原理、分类与材料选择
shijidianli变频串联谐振中闪络保护指的什么?
如何制作一个随环境温度和声音强度改变光线的灯?
一起来看看家居风、简约风的摆件音箱设计
光纤尾纤是什么?有什么类型?
工业互联网应用场景百花齐放,当前发展面临哪些难题
英特尔与智芯原动推动智慧交通创新
即插即用,运维工程师必会正则表达式大全
分立器件在IGBT驱动电源板中的应用
重启NFC公交卡支付方案,支付宝自己打脸?
串行 RapidIO: 高性能嵌入式互连技术