参考:

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各信号的配置

三、问题1RGB565转化成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彩条显示相关推荐

  1. FPGA学习--RGB-LCD屏彩条显示实验

    FPGA学习--RGB-LCD屏彩条显示实验 RGB-LCD屏原理 程序设计 参考正点原子视频 RGB-LCD屏原理 LCD 是一种液晶显示屏,它采用薄膜晶体管(TFT)技术提升图像质量,如提高图像亮 ...

  2. 简单的eda实验vga在linux系统中,《EDA实验报告VGA彩条显示.doc

    <EDA实验报告VGA彩条显示 VGA彩条信号显示控制 一.实验目的: 1. 熟练掌握 Verilog HDL语言和QuartusII 软件的使用: 2. 理解状态机的工作原理和设计方法: 3. ...

  3. 简单的eda实验vga在linux系统中,EDA实验报告-VGA彩条显示.doc

    VGA彩条信号显示控制 一.实验目的: 1. 熟练掌握 Verilog HDL语言和QuartusII 软件的使用: 2. 理解状态机的工作原理和设计方法: 3. 熟悉 VGA 接口协议规范. 4.通 ...

  4. VGA彩条显示(可以在显示屏上看到白黑红绿蓝的彩条)

    VGA  ,视频图形阵列,使用模拟信号进行视频传输的标准 module vga_display(input vga_clk, //VGA驱动时钟input sys_rst_n, //复位信号input ...

  5. 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 波 ...

  6. NEXYS4_DDR迪芝伦XC7A100TCSG324-1型,VGA接口显示彩条

    vga彩条显示,640*480模式可以显示1600*900 1. VGA显示 1.1 VGA的端口定义 1.2 VGA的显示时序 1.3 像素点与时序 1.4 此处选择DELL_E2016HV型显示器 ...

  7. 【正点原子FPGA连载】第二十一章 HDMI彩条显示实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  8. 【Zedboard】FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现

    [Zedboard]FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现 在项目开始到目前为止已经完成了在Zedboard的PL部分即FPG ...

  9. 【正点原子FPGA连载】第十五章 RGB LCD彩条显示实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

最新文章

  1. svn merger的时候 报远程主机强迫_SVN与Git比较的优缺点差异
  2. block的用法以及block和delegate的比较(转发)
  3. mongoDB 小练习
  4. java提示找不到或无法加载主类
  5. 文件2. 文件重命名
  6. pymysql 数据库操控
  7. BeyondCompare This license key has been revoked:
  8. MySQL 中随机抽样:order by rand limit 的替代方案
  9. 20169217 《Linux内核原理与分析》 第十周作业
  10. Studio 3T for MongoDB
  11. php中求10递归算法,php递归算法
  12. 我看过的关于职业规划最好最全面的一篇文章
  13. 嵌入式系统开发与应用——Linux系统Socket网络编程
  14. windbg加载符号
  15. android app调用第三方地图路线规划导航(百度,高德,腾讯)
  16. 【RK3399 GMAC】Linux Debian9 gmac 主控输出clk ,即output模式
  17. 怎么用html3秒自动跳网页,HTML页面3秒后自动跳转的三种常见方法
  18. 欧式距离与曼哈顿距离的区别以及曼哈顿距离的应用
  19. ojbk的sas proc 过程之proc format
  20. 分享五年码农生涯历程经验及2018总结 | 掘金年度征文

热门文章

  1. 【微信小程序】 通过用户登录实现批量收集formId
  2. WinRAR曝遗留19年重大漏洞,可完全控制电脑(附解决方法)
  3. 台式计算机购买cpu,如何选购台式机电脑CPU?看完你就会明白
  4. 如何在 XMind 中绘制流程图?
  5. webpack+nginx开启gzip压缩部署项目
  6. 认证机构ISO证书真伪鉴别辨别
  7. FMpeg分析5:AVCodecContext和AVCodec
  8. Blender基础技巧小结
  9. Matlab深度学习-手写体数字识别
  10. 电池续航已成智能手机用户抱怨头号问题