7-DE10-Nano的HDMI方块移动案例的整体实现(含Quartus完整工程免费下载)

1 实验要求

在FPGA上生成1280x720@60分辨率的视频信号,通过DE10-Nano的 HDMI输出到显示屏上进行显示,显示的内容是一个黑色方块每隔10ms移动一个像素位置,方块遇到边框自行回弹,屏幕背景为白色,屏幕边框为绿色。

2 设计框图

根据实验要求分析可得出,想要控制ADV7513最终在HDMI显示器上显示画面,需要先配置ADV7513寄存器,配置通过I2C总线,该部分的控制原理在前面(参考文末往期阅读的链接)已经讲解过。

想要在HDMI显示器上显示边框,方块和白色背景,需要设计一个满足DMT时序的视频信号。

1280x720@60分辨率的像素时钟是74.25MHz,所以这里可调用Altera的PLL IP来生成这个时钟(系统时钟是50MHz)。

整个系统的设计框图如下所示:

3 代码实现

(1)Top level代码

主要是例化PLL、HDMI显示和I2C控制三个模块。具体代码参考工程。

(2)HDMI控制器模块

HDMI控制器模块用于生成1280x720分辨率的视频信号,并在屏幕上显示一个每隔10ms移动的黑色方块,背景为白色,屏幕边框为绿色。

1. 首先是1280*720分辨率时序参数的设定。如下是行时序参数设定:

这些参数对应到时序如下图所示:

如下是场时序参数设定:

这些参数对应到时序如下图所示:

2. 实现行计数器和场计数器,用于跟踪当前像素位置,以及生成像素点横纵坐标:

3. 根据行场计数器生成行场同步信号:

4. 根据行场计数器生成像素点横纵坐标:

5. hdmi_ctrl模块的时钟是74.25MHz(1280*720@60对应的像素时钟),利用计数器产生10ms间隔:

6. 当方块移动到边界时,改变移动方向:

根据代码画出方向改变的框图示意图如下:

7. 根据方块移动方向,改变其纵横坐标:

8. 给不同的区域绘制不同的颜色:

(3)I2C控制模块

I2C控制模块直接参考本文第8.3章节(内容一模一样)。

4 硬件准备

  • DE10-Nano开发板一套(包括电源和USB 线缆)

  • HDMI显示器一台

  • HDMI cable 一根

5 软件安装

1. 进入Altera官网选择Quartus Prime Lite 17.1版本:

2. 点击Indicidual Files 找到Cyclone V的器件包并下载:

3. 往下继续找到Intel® Quartus® Software下载QuartusLiteSetup压缩包和ModelSimSetup压缩包(后续会有仿真章节):

4. 所有文件都下载完以后,双击QuartusLiteSetup-17.1.0.590-windows.exe文件进行安装。安装的过程中会默认选择一起安装Nios II IDE、ModelSim和Cyclone V器件包(未勾选时可自行勾选这些内容),建议安装的过程中所有默认设置都保留(除了安装路径自己选择外)。USB Blaster II驱动程序将在软件安装结束时提示安装。

6 操作步骤

1. 打开Quartus软件,点击File------New Project Wizard...

2. 点击Next:

3. 在如下对话框里面选择工程路径和工程名称:

4. 继续点击Next:

5. 继续点击Next:

6. 然后在如下对话框里面键入DE10-Nano对应的FPGA器件(5CSEBA6U23I7):

7. 点击Finish结束工程的创建:

8. 开始新建Top工程,点击File------New...

9. 选择Verilog HDL File 然后点击OK:

10. 编Verilog代码(代码可以参考随本文一起提供的工程)并保存为HDMI_block_move.v文件:

11. 用同样的方法新建.v文件,编Verilog代码(代码可以参考随本文一起提供的工程)并保存为hdmi_ctrl.v文件:

12. 将第八章节提到的I2C控制器所包含的三个.v文件拷贝到当前工程路径下:

13. 并将这三个文件添加到当前工程里面以便后面编译的时候会调用这三个文件,具体做法是点击Project------Add/Remove Files in Project..., 然后点击File Name旁边的...浏览到三个文件所在路径,选中这三个文件然后点击打开按钮:

14. 然后点击Apply和OK按钮结束工程文件的添加:

15. 接下来配置PLL IP,在IP Catalog里面搜索pll 找到Altera PLL,点击它:

16. 在出现如下的对话框里填入pll的名称为pll,然后点击OK:

17. 在Reference Clock Frequency处填写50,在outclk0处填写74.25,然后点击Finish结束pll的配置:

18. 等pll模块生成以后会弹出如下对话框,点击Yes将其添加到当前工程:

19. 这时FPGA电路设计基本完成,接下来是引脚分配,首先点击Start Analysis&Synthesis按钮对工程进行分析和综合,这样在后面引脚分配的时候信号端口才能出现:

20. 接下来参考DE10-Nano的 usermanual文档或者schematic文件来分配引脚,该工程引脚分配如下:

21. 引脚分配完成就点击Start Compilation按钮开始全编译工程:

22. 工程全编译结束后在HDMI_block_move\output_files路径下会产生HDMI_block_move.sof文件,接下来点击Programmer 按钮将此文件配置到FPGA里面去:

23. 点击Hardware Setup(在这之前记得用一根HDMI线缆连接HDMI显示器和DE10-Nano, 然后用一根Mini USB线连接PC和DE10-Nano, 然后给DE10-Nano开发板插上5V电源),选择DE-SoCUSB-1端口,点击Close:

24. 点击Auto Detect,选择5CSEBA6,然后点击OK:

25. 如果出现如下窗口,点击Yes:

26. 此时系统会出现两个器件,一个是SOCVHPS, 一个是5CSEBA6U23,鼠标右击5CSEBA6U23选择Change File:

27. 浏览到HDMI_block_move.sof路径下选择该文件,然后点击Open:

28. 点选如下复选框,然后点击Start开始FPGA 文件配置:

29. 当Progress进度条显示100%(颜色变绿了)代表FPGA配置完成:

7 实验现象

可以观察到HDMI显示器上有个绿色边框,中间背景为白色,有个黑色小方块在屏幕中移动:

实验现象

HDMI_block_move工程下载链接: https://pan.baidu.com/s/1LwQjqLpmZMl5IkvTgzo-3w 提取码: tera

往期阅读

1-DE10-Nano的HDMI方块移动案例------显示器时序(DMT)标准介绍

2-DE10-Nano的HDMI方块移动案例------HDMI接口介绍(含TMDS)

3-DE10-Nano的HDMI方块移动案例------ADV7513芯片解读

4-DE10-Nano的HDMI方块移动案例------I2C通信协议

5-DE10-Nano的HDMI方块移动案例------基于FPGA的I2C控制模块设计

6-DE10-Nano的HDMI方块移动案例------使用Modelsim仿真I2C控制器

相关推荐
ItJavawfc6 小时前
Linux驱动-IIC完善FT5X06设备节点和驱动
i2c·驱动-完善i2c 设备树·i2c-完善驱动
仲南音6 小时前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner20 小时前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy1 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia1 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20201 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安2 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd