请选择 进入手机版 | 继续访问电脑版
[X]关闭

2-3-34 AMD(XILINX) FPGA VIVADO自定义IP简单封装方法

文档创建者:uisrc
浏览次数:331
最后更新:2023-12-29
文档课程分类
AMD: FPGA部分(2024样板资料) » 2_FPGA实验篇(仅旗舰) » 1-FPGA基础入门实验
软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用XILINX A7/K7/Z7/ZU/KU系列FPGA
登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!
1 概述
XILINX作为FPGA全球老大,不仅仅是硬件技术实力,而且EDA软件也是非常优秀,XILINX VIVADO是业内最先进的开发工具。从VIVADO开始,支持通过图形化编程FPGA,极大提高了开发效率,图形化开发方法减少了低端接口输入输出错误。
但是,为了方便图形化设计,VIVAOD需要用户编写的代码封装成图形化的IP。当然封装后的IP也可以和原来一样方便的调用。本文以实现串口IP封装为例,介绍VIVADO IP图形化封装的方法,以及调用方法。
本文的目前以简单的UART IP封装为例,简单介绍图形化IP的封装方法,一些复杂接口IP封装方法,比如uifdma_dbuf IP的封装我们后续特色课程中再单独提供。
2 硬件电路分析
硬件接口和子卡模块请阅读"附录 1"
配套工程的 FPGA PIN 脚定义路径为 soc_prj/uisrc/04_pin/ fpga_pin.xdc。
3 准备源码
我们把之前编写的uart串口的程序需要稍作修改,把波特率分频参数放到端口中,这样可以方便我们双击IP后设置默认的分频参数。
修改后的顶层文件
`timescale 1ns / 1ns //仿真时钟刻度和精度

module ui_uart#
(
parameter  integer   BAUD_BSP  = 115200,  //波特率
parameter  integer   SYSCLK_HZ = 50_000_000  //系统时钟
)
(
input  I_sysclk,//系统时钟输入
input  I_uart_rx,//uart rx接收信号
output O_uart_tx //uart tx发送信号
);

reg [11:0] rstn_cnt = 0;//上电后延迟复位
wire uart_rstn_i;//内部复位信号
wire uart_wreq,uart_rvalid;
wire [7:0]uart_wdata,uart_rdata;

assign uart_wreq  = uart_rvalid;//用uart rx接收数据有效的uart_rvalid信号,控制uart发送模块的发送请求
assign uart_wdata = uart_rdata; //接收的数据给发送模块发送
assign uart_rstn_i = rstn_cnt[11];//延迟复位设计,用计数器的高bit控制复位

//同步计数器实现复位
always @(posedge I_sysclk)begin
    if(rstn_cnt[11] == 1'b0)
        rstn_cnt <= rstn_cnt + 1'b1;
    else
        rstn_cnt <= rstn_cnt;
end

//例化uart 发送模块
uiuart_tx#
(
.BAUD_DIV(SYSCLK_HZ/BAUD_BSP -1)
)
uart_tx_u
(
.I_clk(I_sysclk),//系统时钟输入
.I_uart_rstn(uart_rstn_i), //系统复位
.I_uart_wreq(uart_wreq), //uart发送驱动的写请求信号,高电平有效
.I_uart_wdata(uart_wdata), //uart发送驱动的写数据
.O_uart_wbusy(),//uart 发送驱动的忙标志
.O_uart_tx(O_uart_tx)//uart 串行数据发送
);

//例化uart 接收
uiuart_rx#
(
.BAUD_DIV(SYSCLK_HZ/BAUD_BSP -1)
)
uiuart_rx_u
(
.I_clk(I_sysclk), //系统时钟输入
.I_uart_rstn(uart_rstn_i),//系统复位
.I_uart_rx(I_uart_rx), //uart 串行数据接收
.O_uart_rdata(uart_rdata), //uart 接收数据
.O_uart_rvalid(uart_rvalid)//uart 接收数据有效,当uart_rvalid_o =1'b1 uart_rdata_o输出的数据有效
);

endmodule



4 封装图形化IP
首先新建一个FPGA工程把源文件添加进去
2504661-20231229182658888-1982585084.jpg
单击菜单Tools->选择Create and Package New IP
2504661-20231229182659413-1295515383.jpg

2504661-20231229182700038-876439185.jpg

2504661-20231229182700523-652800266.jpg
2504661-20231229182700919-1210944247.jpg

2504661-20231229182701344-44909327.jpg



Identification页面主要设置一些描述信息,其中最关键的是IP的名字设置
2504661-20231229182701795-402774919.jpg
Compatibility页面设置该IP 支持的芯片型号
2504661-20231229182702256-1026805910.jpg
File Groups设置文件路径
2504661-20231229182702772-1765968641.jpg
Customization Parameters 页面设置用户参数,这就是顶层文件中的参数
2504661-20231229182703205-162806870.jpg
2504661-20231229182703559-319213093.jpg
双击参数可以进行修改,我们这里定义的parameter integer默认就是long整形,其他包包括:
float浮点类型
bool 布尔类型 FALSE 0 或 TRUE 1
bitString 类型 通常用二进制或者16进制表示
Default Value设置默认值
string 字符串
2504661-20231229182704026-2140791153.jpg
Ports and Interfaces信号接口
2504661-20231229182704416-1366391133.jpg
Customization GUI,最终IP以图形化呈现的形式
2504661-20231229182704813-1315374705.jpg
Review and Package重新产生IP
2504661-20231229182705307-877772925.jpg
封装的参数会保存到这个文件
2504661-20231229182705703-723743244.jpg
检查IP路径的文件夹
2504661-20231229182706035-2008976825.jpg
5 测试结果
测试结果和前面的文章测试结果一致,参照第12课。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则