行场都是一样的,唯一不同的是时序的长短

以下说明都建立在640 * 480 的分辨率下:

在行同步

  1. 在行计数器计数到a-96是,行使能输出拉高
  2. 行计数然后会一直计算到800,然后到0时,行使能拉低
  3. 此时 场计数器  由0加1,得到1
  4. 再经过一轮800行计数器,场计数器就自加到2,则达到条件,场使能输出拉高
  5. 一直等到 场计数器一直加到 35时 这才开始传送数据
  6. 但是并不是 场计数一到35就传输的,还必须等到行计数器达到显示后延才行

总体来看:分成段

  1. 行场使能由低拉高,然后输出:使用的时序:800 * 2 = 1600
  2. 行场的显示后延,缓冲阶段:期间度过时序:800 * 33 = 26400
  3. 显示阶段,时钟周期为:480 * 640 = 。。。。
  4. 显示后延

VGA驱动代码:

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 beginif(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) beginif(cnt_v < V_TOTAL - 1'b1)                                               cnt_v <= cnt_v + 1'b1;                               else cnt_v <= 10'd0;  end
endendmodule 

驱动测试代码:

`timescale 1ns/1ps`define clock_period 20module VGA_driver_tb;reg              sys_clk     ;reg                sys_rst_n   ;reg    [15:0]  pixel_data  ;wire               vga_hs          ;wire               vga_vs          ;wire   [15:0]  vga_rgb     ;wire   [ 9:0]  xpos            ;wire   [ 9:0]  ypos            ;vga_driver a1(.vga_clk (sys_clk),      //VGA驱动时钟.sys_rst_n (sys_rst_n),    //复位信号.vga_hs       (vga_hs),       //行同步信号.vga_vs      (vga_vs),       //场同步信号.vga_rgb (vga_rgb),      //红绿蓝三原色输出.pixel_data(pixel_data),   //像素点数据.pixel_xpos (xpos),   //像素点横坐标.pixel_ypos   (ypos)   //像素点纵坐标    );    initial sys_clk = 1;    always #(`clock_period / 2) sys_clk = ~sys_clk;initial beginsys_rst_n = 0 ;pixel_data = 0;#(`clock_period * 20 +1);sys_rst_n = 1 ;pixel_data = 16'h1234;#(`clock_period * 500_000);#20;$stop;  endendmodule

总结:

可以看见,VGA驱动模块的功能为:

1.接收16像素数据

2.运行,行+场 同步时序

2.1 在 行+场 的发送时序,像素数据,发送出去

2.2 在 行+场 的发送时序,将此时此刻的,横纵坐标,发送出去

大概就是这样子了

【FPGA】VGA驱动:行同步时序+场同步时序相关推荐

  1. VGA接口复习笔记(原理,时序)VGA接口FPGA实现

    VGA接口复习笔记(原理,时序)VGA接口FPGA实现 一.显示器工作原理 显示器扫描方式分为逐行扫描和隔行扫描:逐行扫描是扫描从屏幕左上角一点开始,从左向右逐点扫描,每扫描完一行,电子束回到屏幕的左 ...

  2. FPGA|VGA的8色彩条的实现

    VGA显示8色彩条的实现 使用软件:Quartus II 13.1 使用语言 :Verilog HDL 板载芯片:EP4CE6E22C8 VGA显示8色彩条的实现 VGA显示8色彩条的实现 写在前面 ...

  3. FPGA之道(15)组合逻辑与时序逻辑、同步逻辑与异步逻辑的概念

    组合逻辑电路与时序逻辑电路 数字电路根据逻辑功能的不同特点,可以分成两大类:一类叫做组合逻辑电路,简称组合电路或组合逻辑:另一类叫做时序逻辑电路,简称时序电路或时序逻辑. 如果数字电路满足任意时刻的输 ...

  4. 电视信号——行场同步

    电视信号分NTSC制和PAL制两种制式, NTSC制每秒刷新60次, 而PAL制每秒刷新50次. 水平消隐:电子枪从左到右画出象素,它每次只能画一条扫描线,画下一条之前要先回到左边并做好画下一条扫描线 ...

  5. 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--VGA驱动(十)

    声明:本文转载于http://www.cnblogs.com/kingst,版权归akuei2及黑金动力社区(http://www.heijin.org)共同所有. 实验九:VGA驱动 实验九之一:驱 ...

  6. lin通讯从节点同步间隔场_LIN总线节点的设计

    lin总线节点的设计 [日期:2005-5-11] 来源:电子技术应用 作者:宋开臣 陈 舒 [字体:大 中 小] 摘要:介绍了汽车网络系统a类串行总线通信标准lin协议2.0版本(最新版本),设计了 ...

  7. lin通讯从节点同步间隔场_LIN总线节点的设计-控制器/处理器-与非网

    摘要:介绍了汽车网络系统A类串行总线通信标准LIN协议2.0版本(最新版本),设计了总线节点的硬件和通信程序,规划了电动汽车车身网络总线结构. 关键词:LIN总线 通信 节点 随着汽车电子业的飞速发展 ...

  8. lin通讯从节点同步间隔场_Freescale MM908E625的LIN总线

    0  引言 LIN(Local Interconnect Network,本地互连网)由汽车厂商专为汽车工业开发(飞思卡尔半导体是在LIN原始协会成员中唯一的半导体器件供应商),是"一主(节 ...

  9. lin通讯从节点同步间隔场_基于LIN总线的车身控制系统设计

    http://www.eepw.com.cn/article/262205.htm LIN(Local Interconnect Network)是一种低成本的串行通讯网络,用于实现汽车中的分布式电子 ...

  10. lin通讯从节点同步间隔场_基于LIN总线的汽车分级制网络结构

    原标题:基于LIN总线的汽车分级制网络结构 1.引言 汽车总线中通讯节点和数据流量持续增加,节点日益复杂,使得汽车总线在重量.布置.成本.通信效率等方面面临困境,走出这一困境的出路在于实行汽车总线的网 ...

最新文章

  1. mybatis获取表名_mybatis动态调用表名和字段名
  2. FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
  3. java的迭代器类中有哪些类_java中的集合类 以及 迭代器
  4. 优达学城深度学习之三(下)——卷积神经网络
  5. 计算机应用基础课程整体设计说课视频,计算机应用基础说课稿
  6. oracle存储格式化时间,ORACLE日期时间的格式化参数大全
  7. hdoj1159:Common Subsequence(dp基础题-最长公共子序列LCS)
  8. 火焰之纹章java武器代码_《火焰纹章回声:另一个英雄王》金手指全代码一览 代码大全...
  9. Altium Designer库文件与Protel 99SE库文件转化
  10. 爱吃喵粮的小招喵(查找,动态规划)
  11. 惠普M1136 MFP激光打印机打印整张纸全黑
  12. 达观数据爱心公益再出发,走进广西桥业小学开展捐书助学活动
  13. ac68u、r8500 梅林固件扩展为一个小型 linux 系统
  14. 微信小程序---密码输入
  15. python语言要英语基础吗_学编程需要英语基础吗?
  16. 在微服务架构中管理技术债务
  17. 日常学习记录——目前学习记录总结
  18. 活体检测 Face Anti-Spoofing Using TransformersWith Relation-Aware Mechanism 学习笔记
  19. 纯js写的手机版成语填空游戏
  20. DataFrame中将空字符串替换为NaN

热门文章

  1. 推荐6款神器软件,你用过哪些?
  2. Java 使用记事本编写第一个java程序
  3. 笔记:图解网络(小林coding)
  4. 北邮bbs爬取阶段性总结
  5. 操作系统实践 job3
  6. python安装.egg文件_芳草地-小狍子的空间_百度空间
  7. 【毕业设计源码】基于JAVA的自驾游小程序的设计与实现
  8. 【001】半电池的开路电压测试_#LIB
  9. 数据分析的思维逻辑步骤
  10. 输入一个大写或者小写,输出其相反的大小写。(c语言)