ZYNQ——FPGA工程之VGA彩条显示
参考:
https://blog.csdn.net/Taneeyo/article/details/115180568?spm=1001.2014.3001.5501
https://www.bilibili.com/video/BV17U4y157gp?spm_id_from=333.999.0.0
本文的工程下载链接:
https://download.csdn.net/download/weixin_50988214/21979975
主要内容:
使用vivado实现VGA端口,输出一幅彩条图像。
目录:
一、VGA时序
二、VGA各信号的配置
三、问题1、RGB565转化成RGB444
四、代码
五、出错问题
一、VGA时序
VGA显示信号由以下部分组成:
1、RGB444的数据值
2、VGA-HS: VGA行同步信号
3、VGA-VS: VGA场同步信号(列同步)
行同步有效说明一行扫描完了,到达下一行开始扫描‘场同步信号有效说明整个屏幕完成,又回到第一行开始扫描。以此重复达到持续绘制VGA显示屏幕这一功能。
但是,在显示器上的电子枪在扫描过程中需要进行复位调整,这时如果我们在复位时开始执行有效的行或者场扫描的话,那么会出现错误。这也是为什么VGA时序图中有FRONT_PORCH和BACK_PORCH空隙原因。
二、VGA各信号的配置
三、问题1、RGB565转化成RGB444
问题1、
若输入为RGB565转化成输出的RGB444
只取每个的高位
四、代码
1、vga_display.h
module vga_display( input vga_clk, //VGA驱动时钟 input sys_rst_n, //复位信号 input [ 9:0] pixel_xpos, //像素点横坐标 input [ 9:0] pixel_ypos, //像素点纵坐标 output reg [15:0] pixel_data //像素点数 ? ); parameter H_DISP = 10'd640; //分辨率—— ? parameter V_DISP = 10'd480; //分辨率——列 localparam WHITE = 16'b11111_111111_11111; //RGB565 白色 localparam BLACK = 16'b00000_000000_00000; //RGB565 黑色 localparam RED = 16'b11111_000000_00000; //RGB565 红色 localparam GREEN = 16'b00000_111111_00000; //RGB565 绿色 localparam BLUE = 16'b00000_000000_11111; //RGB565 蓝色 //***************************************************** //** main code //***************************************************** //根据当前像素点坐标指定当前像素点颜色数据,在屏幕上显示彩 ? always @(posedge vga_clk or negedge sys_rst_n) begin if (!sys_rst_n) pixel_data <= 16'd0; else begin if((pixel_xpos >= 0) && (pixel_xpos <= (H_DISP/5)*1)) pixel_data <= WHITE; else if((pixel_xpos >= (H_DISP/5)*1) && (pixel_xpos < (H_DISP/5)*2)) pixel_data <= BLACK; else if((pixel_xpos >= (H_DISP/5)*2) && (pixel_xpos < (H_DISP/5)*3)) pixel_data <= RED; else if((pixel_xpos >= (H_DISP/5)*3) && (pixel_xpos < (H_DISP/5)*4)) pixel_data <= GREEN; else pixel_data <= BLUE; end end endmodule |
2、vga_driver.h
module vga_driver( input vga_clk, //VGA驱动时钟 input sys_rst_n, //复位信号 //VGA接口 output vga_hs, //行同步信 ? output vga_vs, //场同步信 ? output [15:0] vga_rgb, //红绿蓝三原色输出 input [15:0] pixel_data, //像素点数 ? output [ 9:0] pixel_xpos, //像素点横坐标 output [ 9:0] pixel_ypos //像素点纵坐标 ); //parameter define parameter H_SYNC = 10'd96; //行同 ? parameter H_BACK = 10'd48; //行显示后 ? parameter H_DISP = 10'd640; //行有效数 ? parameter H_FRONT = 10'd16; //行显示前 ? parameter H_TOTAL = 10'd800; //行扫描周 ? parameter V_SYNC = 10'd2; //场同 ? parameter V_BACK = 10'd33; //场显示后 ? parameter V_DISP = 10'd480; //场有效数 ? parameter V_FRONT = 10'd10; //场显示前 ? parameter V_TOTAL = 10'd525; //场扫描周 ? //reg define reg [9:0] cnt_h; reg [9:0] cnt_v; //wire define wire vga_en; wire data_req; //***************************************************** //** main code //***************************************************** //VGA行场同 ?信号 assign vga_hs = (cnt_h <= H_SYNC - 1'b1) ? 1'b0 : 1'b1; assign vga_vs = (cnt_v <= V_SYNC - 1'b1) ? 1'b0 : 1'b1; //使能RGB565数据输出 assign vga_en = (((cnt_h >= H_SYNC+H_BACK) && (cnt_h < H_SYNC+H_BACK+H_DISP)) &&((cnt_v >= V_SYNC+V_BACK) && (cnt_v < V_SYNC+V_BACK+V_DISP))) ? 1'b1 : 1'b0; //RGB565数据输出 assign vga_rgb = vga_en ? pixel_data : 16'd0; //请求像素点 ?色数 ? ? assign data_req = (((cnt_h >= H_SYNC+H_BACK-1'b1) && (cnt_h < H_SYNC+H_BACK+H_DISP-1'b1)) && ((cnt_v >= V_SYNC+V_BACK) && (cnt_v < V_SYNC+V_BACK+V_DISP))) ? 1'b1 : 1'b0; //像素点坐 ? assign pixel_xpos = data_req ? (cnt_h - (H_SYNC + H_BACK - 1'b1)) : 10'd0; assign pixel_ypos = data_req ? (cnt_v - (V_SYNC + V_BACK - 1'b1)) : 10'd0; //行 ?数器对像素时钟 ? ? always @(posedge vga_clk or negedge sys_rst_n) begin if (!sys_rst_n) cnt_h <= 10'd0; else begin if(cnt_h < H_TOTAL - 1'b1) cnt_h <= cnt_h + 1'b1; else cnt_h <= 10'd0; end end //场 ?数器对 ?计数 always @(posedge vga_clk or negedge sys_rst_n) begin if (!sys_rst_n) cnt_v <= 10'd0; else if(cnt_h == H_TOTAL - 1'b1) begin if(cnt_v < V_TOTAL - 1'b1) cnt_v <= cnt_v + 1'b1; else cnt_v <= 10'd0; end end endmodule |
3、clk_wiz_0
直接使用ip生成,设置为PLL,且输出频率与二节中的配置图相同
4、vga_colorbar.h
module vga_colorbar( input sys_clk, //系统时钟 input sys_rst_n, //复位信号 //VGA接口 output vga_hs, //行同步信 ? output vga_vs, //场同步信 ? output [15:0] vga_rgb //红绿蓝三原色输出 ); //wire define wire vga_clk_w; //PLL分 ?得到25Mhz时钟 wire locked_w; //PLL输出稳定信号 wire rst_n_w; //内部复位信号 wire [15:0] pixel_data_w; //像素点数 ? wire [ 9:0] pixel_xpos_w; //像素点横坐标 wire [ 9:0] pixel_ypos_w; //像素点纵坐标 //***************************************************** //** main code //***************************************************** //待PLL输出稳定之后,停止 ? ? assign rst_n_w = sys_rst_n && locked_w; clk_wiz_0 u_clk_wiz_0 ( // Clock out ports .clk_out1(vga_clk_w), // Status and control signals .reset(~sys_rst_n), .locked(locked_w), // Clock in ports .clk_in1(sys_clk) ); vga_driver u_vga_driver( .vga_clk (vga_clk_w), .sys_rst_n (rst_n_w), .vga_hs (vga_hs), .vga_vs (vga_vs), .vga_rgb (vga_rgb), .pixel_data (pixel_data_w), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w) ); vga_display u_vga_display( .vga_clk (vga_clk_w), .sys_rst_n (rst_n_w), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .pixel_data (pixel_data_w) ); endmodule |
5、tb_top.h
`timescale 1ns / 1ps module tb_top(); reg clk; //系统时钟 reg rst_n; //复位信号 //VGA接口 wire vga_hs; //行同步信 ? wire vga_vs; //场同步信 ? wire[15:0] vga_rgb; initial begin clk<=1'b0; rst_n<=1'b0; #20; rst_n<=1'b1; end always #5 clk=~clk; vga_colorbar u_vga_colorbar( .sys_clk(clk), //系统时钟 .sys_rst_n(rst_n), //复位信号 //VGA接口 .vga_hs(vga_hs), //行同步信 ? .vga_vs(vga_vs), //场同步信 ? .vga_rgb(vga_rgb) //红绿蓝三原色输出 ); endmodule |
五、出错问题:
ZYNQ——FPGA工程之VGA彩条显示相关推荐
- FPGA学习--RGB-LCD屏彩条显示实验
FPGA学习--RGB-LCD屏彩条显示实验 RGB-LCD屏原理 程序设计 参考正点原子视频 RGB-LCD屏原理 LCD 是一种液晶显示屏,它采用薄膜晶体管(TFT)技术提升图像质量,如提高图像亮 ...
- 简单的eda实验vga在linux系统中,《EDA实验报告VGA彩条显示.doc
<EDA实验报告VGA彩条显示 VGA彩条信号显示控制 一.实验目的: 1. 熟练掌握 Verilog HDL语言和QuartusII 软件的使用: 2. 理解状态机的工作原理和设计方法: 3. ...
- 简单的eda实验vga在linux系统中,EDA实验报告-VGA彩条显示.doc
VGA彩条信号显示控制 一.实验目的: 1. 熟练掌握 Verilog HDL语言和QuartusII 软件的使用: 2. 理解状态机的工作原理和设计方法: 3. 熟悉 VGA 接口协议规范. 4.通 ...
- VGA彩条显示(可以在显示屏上看到白黑红绿蓝的彩条)
VGA ,视频图形阵列,使用模拟信号进行视频传输的标准 module vga_display(input vga_clk, //VGA驱动时钟input sys_rst_n, //复位信号input ...
- FPGA—VGA 显示器显示彩条(附代码)
目录 1. 理论 2. 实操 2.1 顶层设计 2.1.1 模块框图 2.1.2 代码编写 2.1.3 仿真验证 2.2 时钟生成模块 2.3 VGA时序控制模块 2.3.1 模块框图 2.3.2 波 ...
- NEXYS4_DDR迪芝伦XC7A100TCSG324-1型,VGA接口显示彩条
vga彩条显示,640*480模式可以显示1600*900 1. VGA显示 1.1 VGA的端口定义 1.2 VGA的显示时序 1.3 像素点与时序 1.4 此处选择DELL_E2016HV型显示器 ...
- 【正点原子FPGA连载】第二十一章 HDMI彩条显示实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- 【Zedboard】FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现
[Zedboard]FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现 在项目开始到目前为止已经完成了在Zedboard的PL部分即FPG ...
- 【正点原子FPGA连载】第十五章 RGB LCD彩条显示实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...
最新文章
- svn merger的时候 报远程主机强迫_SVN与Git比较的优缺点差异
- block的用法以及block和delegate的比较(转发)
- mongoDB 小练习
- java提示找不到或无法加载主类
- 文件2. 文件重命名
- pymysql 数据库操控
- BeyondCompare This license key has been revoked:
- MySQL 中随机抽样:order by rand limit 的替代方案
- 20169217 《Linux内核原理与分析》 第十周作业
- Studio 3T for MongoDB
- php中求10递归算法,php递归算法
- 我看过的关于职业规划最好最全面的一篇文章
- 嵌入式系统开发与应用——Linux系统Socket网络编程
- windbg加载符号
- android app调用第三方地图路线规划导航(百度,高德,腾讯)
- 【RK3399 GMAC】Linux Debian9 gmac 主控输出clk ,即output模式
- 怎么用html3秒自动跳网页,HTML页面3秒后自动跳转的三种常见方法
- 欧式距离与曼哈顿距离的区别以及曼哈顿距离的应用
- ojbk的sas proc 过程之proc format
- 分享五年码农生涯历程经验及2018总结 | 掘金年度征文