将 VGA 控制器封装成AXI_LITE 外设并在PS端进行编程显示图像和点阵
学习内容
本课内容仍 基于 前几 课 中基于 VGA 显示, 具体实现 是 将 之前做的 VGA接
口通过 AXI_LITE总线挂在 PS的 存储空间上 通过写地址寄存器和数据寄存保
存内容到 VGA显示缓存,并在 SDK编写代码实现在字符的显示,以及位图文
件的显示 。
实现步骤
(1) 学习 显示 点阵 字符。
(2) 封装 IP
(3) 调用 IP 实现 工程 。
Step1 使用 VIVADO 新建 工程,并且新建 在 Tools 菜单下选择创建 IP 注意选 择 AXI4外设 ,可见下图 。
设置IP 名字后 选择默认设置,最后一步中选择 Edit IP 选项
之前
课程中 实现 的 VGA 驱动 序提供在以下文件夹 复制到新建 IP 的 hdl 文件 夹中
将
上述驱 动 模块例化到当前的 IP接口 中。
主要代码可参照预先 编辑的 片段 .txt
(1) 声明 VGA 接口
将接口声明代码复制到 工程中文件 中
(2 进行时钟 端口连接
(3 调用 VGA 显示 驱动模块 进行例化
(4 写 数据寄存器和控制寄存器,并完成上述例化模块的端口连接
(5 使用 Add Source 将 my_vga_syn.v 和 vga_drv.v 文件添加到 工程中
由于代码中有使用到VGA_BARM 但却没有包含这个模块的源代码,所以
我们需要重新写一个存储模块,我们使用block_desgin来实现
添加block bram 设置为、
其它选项中可以将 bmp_init.coe 设置 为初始 文件 ,具体 生成 方法可参照上 节 课
程。
设置好IP 之后 引出引脚, 生成 .wrapper 文件 ,将 vga_buffer_wrapper 文件
中的 vga_buffer_wrapper 模块例化 到 vga_drv.v 文件中。
可以通过综合 确认一下 并无错误后,选择 Package IP 更新 一下 IP 后重新 封装
IP 完成 IP 核 设计。
Step2 在 vivado 工程中 新建 block design,添加 ZYNQ PS VGA IP 时钟模块 等,连接如 下 ,注意设置 时钟 模块,输入 100MHz,输出 25MHz
Step3 生成 顶层文件,添加引脚 约束 文件,可参照代码提供 的 pins.xdc 生成 bitstream 文件 。
Step4 导出硬件 到 SDK 在 SDK 中 新建 fsbl 工程 和 vga_test (以 helleoworld 为模板) 工程
在
vga_test 工程 src 中添加提供工程 的 C 文件 夹下的 helloworld.c 、 VGA.c 和
转换 工具下的 bmp.init.h 、 bmp.init0.h 、 bmp.init1.h 、 bmp.init2.h 进行 编译 。
Step4 生成 boot.bin 文件 。
将这 步 中生成的 BOOT.bin 文件 复制到 SD卡 中,将 SD 卡 插入开发板上电测试
即可 。