一、原理图

原理图应用小梅哥上课的笔记的截图【行扫描和场扫描的图一样】

二、行扫描和场扫描的关系

以显示像素位640*480的图像为例,每一行显示640个像素,一共显示480行。

行扫描相当于显示一行的像素,场扫描显示列的像素。没当一行扫描完事(计数器计满)列扫描的计数器增一(列计数器未满的情况下),直到记满列计数器(480).

这样的行和列组成一个二维矩阵,只有当二维矩阵都为visible area的时段时才会显示图像。

下面以一个网上的图为例,这个图非常形象。

该图来源于VGA系列之一:VGA显示器驱动篇

三、驱动程序和生成tb文件注意点

1、测试文件要求能够判断生成有效图像数据的位置是否正确,这里引入一个时序逻辑

always@(posedge clk or negedge rst_n)begin
if(!rst_n)
vga_data_in<=0;
else if(vga_blk_en==1)
vga_data_in<=vga_data_in+1;
else if(!vga_blk_en)
vga_data_in<=vga_data_in;
end

四、驱动的程序

module vga_ctrl(
clk,
rst_n,
HSYC,
VSYC,
vga_data_out,
vga_data_in,
vga_blk,
vga_blk_en);input clk;input rst_n;input [23:0] vga_data_in;output HSYC;output VSYC;output [23:0]vga_data_out;//output vga_blk;output vga_blk_en;localparam hnum_1=96;localparam hnum_2=96+40+8;localparam hnum_3=96+40+8+640;localparam hnum_4=96+40+8+640+8+8;localparam vnum_1=2;localparam vnum_2=2+25+8;localparam vnum_3=2+25+8+480;localparam vnum_4=2+8+8+25+2+480;reg [9:0]hcount;reg [9:0]vcount;reg HSYC;reg VSYC;reg vga_blk;reg vga_blk_en;reg [23:0]vga_data_out;
//行时钟
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
hcount<=0;
else if(hcount==hnum_4-1)
hcount<=0;
else
hcount<=hcount+1;
end
//场时钟
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
vcount<=0;
else if(hcount==hnum_4-1)begin
if(vcount==vnum_4-1)
vcount<=0;
else
vcount<=vcount+1;
end
else
vcount<=vcount;
end
//行同步脉冲的开始和结束
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
HSYC=0;
else if(hcount==hnum_4-1)
HSYC<=0;
else if(hcount==hnum_1-1)
HSYC<=1;
end//场同步脉冲开始和结束
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
VSYC=0;
else if(vcount==vnum_4-1)
VSYC<=0;
else if(vcount==vnum_1-1)
VSYC<=1;
end
//收到脉冲以后到传输数据之间的等待
//标志什么时候开始输出有效数据
//行输出标志
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
vga_blk<=0;
else if((hcount>(hnum_2-1))&&(hcount<(hnum_3))&&(vcount>(vnum_2-1))&&(vcount<(vnum_3)))
vga_blk<=1;
else
vga_blk<=0;
end
//如果下面的标志位是vga_data_in的话会滞后一拍在输出数据,也就是每一行开头会有0
//因此我们做以下修正
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
vga_blk<=0;
else if((hcount>(hnum_2-1))&&(hcount<(hnum_3))&&(vcount>(vnum_2-1))&&(vcount<(vnum_3)))
vga_blk_en<=1;
else
vga_blk_en<=0;
end
//有效数据的输出
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
vga_data_out<=0;
else if(vga_blk_en==1)
vga_data_out<=vga_data_in;
else
vga_data_out<=0;
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
vga_data_out<=0;
else if(vga_blk_en==1)
vga_blk<=1;
else
vga_blk<=0;
endendmodule

vivado中实现VGA驱动学习笔记相关推荐

  1. 转载:mongoDB java驱动学习笔记

    http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...

  2. 【嵌入式环境下linux内核及驱动学习笔记-(16)linux总线、设备、驱动模型之input框架】

    目录 1.Linux内核输入子系统概念导入 1.1 输入设备工作机制 1.2 运行框架 1.3 分层思想 2.驱动开发步骤 2.1 在init()或probe()函数中 2.2 在exit()或rem ...

  3. 【嵌入式环境下linux内核及驱动学习笔记-(15-1)例程】

    目录 1.在APP直接调用标准文件IO操作I2C(针对学习笔记-15的15.3节) 1.1 mail.c 1.2 mpu6050.h 1.3 mpu6050.c 1.4 Makefile 2.以外称i ...

  4. Linux 驱动学习笔记 - beep(九)

    Linux 驱动学习笔记 - beep(九) 本系列均为正点原子 Linux 驱动的学习笔记, 以便加深笔者记忆.如读者想进一步学习,可以到正点原子官网中下载资料进行学习. 添加 pinctrl 节点 ...

  5. Linux驱动学习笔记

    驱动学习笔记 1.字符设备驱动 Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启 动的时候就会自动运行驱动程序. 第二种就是将驱动编译成模块(Li ...

  6. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  7. C++ 中 参数包 (typename ...) 学习笔记

    C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...

  8. web前端分享HTML5中的nav标签学习笔记

    好程序员web前端分享HTML5中的nav标签学习笔记,nav标签全称navigation,顾名思义,是导航的意思.根据HTML5的相关标准定义如下: "A section of a pag ...

  9. VGA 接口 学习笔记

    VGA定义 VGA的全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传输的标准.是 IBM 于1987年提出的一个使用类比讯号的电脑显示标准.这个标准已对于现 ...

  10. linux中内核中machine_desc,Linux-内核-学习笔记(13):移植三星官方内核

    Linux-内核-学习笔记(13):移植三星官方内核 一.移植前的准备 当拿到源代码时,首先要在window下利用SourceInsight创建一个工程,并将uboot源代码加载到SI中,方便修改和查 ...

最新文章

  1. C/C++二级指针概念及应用(有向图的邻接表(拓扑排序)、有向网图的邻接表、树的孩子表示)
  2. Js打印表格时部分边框不显示(table 标签)
  3. 算法----七进制数
  4. 9/100. Reverse Linked List
  5. java 调优参数 newRatio, survivorRatio
  6. 二叉树的基本特性和二叉树的几种基本操作的机制_深入理解二叉树01 二叉树基础
  7. 1.用代码演示String类中的以下方法的用法 (2018.08.09作业)
  8. eltable刷新整个表格方法_利用SSAS实现PBI报表增量刷新
  9. 截至2018年,目前,企业主流的消息中间件有哪些?各有什么优缺点?面试常问 RabbitMQ使用较多
  10. memcached运行情况监测
  11. 如何设计学术海报(翻译)
  12. Python文件输入输出
  13. 数据结构算法基础定义
  14. 课程设计(飞机订票系统) 超全
  15. 婚姻是一场精神上的门当户对
  16. AlteraFPGA使用通用SPIFlash
  17. LapSRN tensorflow版本环境配置
  18. Scratch编程初体验-小猫跳舞
  19. 智慧社区网格化服务管理信息平台
  20. calibre电子书管理软件

热门文章

  1. 百度Uditor富文本编辑器使用以及图片不显示问题
  2. 《互联网时代》第五集 崛起
  3. linux gz he xz,gz与xz两种压缩格式的对比
  4. 潮流计算程序————支路功率计算与输出程序
  5. 键盘密码(Qwerty)——python解密
  6. 在美女如云的时尚公司当程序员是怎样的体验?
  7. 总线(Bus)-计算机硬件系统
  8. vue 使用html2canvas实现图片合成,将两张图片合成一张,并下载海报
  9. (中英)作文 —— 标题与小标题
  10. 互联网产品用户体验设计方法和用户体验优化方法