本帖最后由 FPGA课程 于 2024-10-14 18:20 编辑
软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
实验平台:米联客-MLK-H3-CZ08-7100开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!
1概述基于前面5篇文章中5个实验,我们已经掌握了AXI4总线协议,现在我们编写一个自定义的AXI-Lite-Slave GPIO IP,并且用编写的AXI-Lite-Master IP对其进行仿真验证和上板验证。 本文实验目的: 1:修改VIVADO产生的saxi-lite- gpio模板,增加GPIO的定义 2:修改VIVADO产生的maxi-lite-gpio模板,增加对saxi-lite- gpio寄存器的读写操作。 3:进一步掌握基于vivado实现的ip的封装 2基于VIVADO的IP封装
2.1封装maxi_lite_gpioIP这节课的源码文件已经编写好了,我们直接拿来使用。新建2个文件,把源码文件 maxi_lite_gpio.v和saxi_lite_gpio.v并且方便放入03_ip/maxi_lite文件夹和03_ip/saxi_lite文件夹。
以创建自定义maxi_lite自定义为例,先创建一个空的创建IP所需要的fpga工程
添加ip源码文件
这里再次提醒是创建maxi_lite_gpio的ip至于saxi_lite_gpio的ip方法一样。
源码后面再分析,暂时我们不分析源码,先完成IP的创建
再tools菜单中找到Create and Package New IP
新增IP编辑窗口
参数接口
信号接口
完成IP打包
2.2创建saxi_lite_gpioip用同样的方法,创建saxi_lite_gpio
3FPGA图形化编程设置IP路径
创建BD工程
添加以上完成的maxi_lite_gpio和saxi_lite_gpio两个IP
再添加虚拟IO用于观察数据
完成连线
编写顶层文件配套代码uisrc/01_rtl路径下有源码 - `timescale 1ns / 1ns
- module system_wrapper
- (
- input sysclk_p,
- input sysclk_n,
- input [1:0] btn,
- output[1:0] led
- );
- wire sysclk;
- //对差分时钟采用 IBUFGDS IP 核去转换
- IBUFGDS CLK_U(
- .I(sysclk_p),
- .IB(sysclk_n),
- .O(sysclk)
- );
- wire ARESETN;
- reg [7:0] rstn_cnt=0;
- always @(posedge sysclk)begin
- if(rstn_cnt[7]==1'b0)
- rstn_cnt <= rstn_cnt + 1'b1;
- end
-
- assign ARESETN = rstn_cnt[7];
-
- system system_i
- (.sysclk(sysclk),
- .ARESETN(rstn_cnt[7]),
- .btn(btn),
- .led(led));
- endmodule
复制代码
4硬件电路分析配套工程的 FPGA PIN 脚定义路径为 fpga_prj/uisrc/04_pin/ fpga_pin.xdc。 最后的set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]是为了对fpga的bit进行压缩,减少bit大小,提高加载速度。 5硬件接线
1:USB-232 USB 数据线(我们已经知道开发板集成了USB 转串口芯片)接入电脑 USB 接口
2:接通电源和 JTAG
6仿真文件编写仿真文件,配套代码uisrc/02_sim路径下有源码 - module axi_top_sim();
- reg sysclk_p;
- reg sysclk_n;
- wire [1:0] btn = 2'b01;
- wire [1:0] led;
-
- system_wrapper system_wrapper_inst
- (
- .sysclk_p(sysclk_p),
- .sysclk_n(sysclk_n),
- .btn(btn),
- .led(led)
- );
-
- initial begin
- sysclk_p <= 1'b0; //系统时钟设置初值
- sysclk_n <= 1'b1;
- #100;
- end
- always #5 sysclk_p = ~sysclk_p;
- always #5 sysclk_n = ~sysclk_n;
-
- endmodule
复制代码
7实验结果为了加快仿真,可以把maxi_lite_gpio的IP源码中读写的间隔时间减少,如下图所示:
maxi写入数据仿真
saxi读出数据仿真
编译下载测试前,把TIME_SET改回到TIME_SET = 99999999,这样对于100M时钟每间隔500ms读写一次。
每次更改ip源码后,在Tcl Console中输入reset_project 对fpga工程进行复位
然后根据提示单击下图中Refresh IP Catalog更新IP状态
再单击Upgrade Selected
最后编译产生bit文件下载到开发板测试。 在路径..\uisrc\06_doc路径有本实验的运行结果视频
|