这次学习我主要掌握了vga的基本运行原理。

vga基本概念:

VGA时序主要包括两条信号线(HS,VS)的输出——行扫描和场扫描。VGA采用逐行扫描,每个像素对应的点扫描。行与行之间存在消隐以及显示时期,场与场之间也类似。行扫描可分为以下几个阶段:同步、消隐后肩、显示期、消隐前肩再到下个周期同步为一个循环,对应的是屏幕上的一行。场同步类似,对应为屏幕显示的一帧。标准的VGA屏幕比例为4:3有固定的帧率以及扫描场频率的标准。
常见的4:3 vga时序表:

网上找的场和行的时序表:

这里可以看出,想要实现基本的vga其实 不难,只需要用verilog描述出:同步脉冲、后沿、前沿、和有效显示区域即可

接下来是代码

module vga(
input clk,
input rst,

output hsync, // 行同步信号
output vsynv, // 场同步信号
output vga_r,
output vga_g,
output vga_b
);

reg [10:0]x_cnt; //行坐标计数器 0~1039-1
reg [9:0]y_cnt; //列坐标计数器 0~666-1

always @(posedge clk or negedge rst)
begin
if(!rst)
x_cnt <= 0;
else if(x_cnt == 11'd1039 - 1)
x_cnt <= 0;
else
x_cnt <= x_cnt + 1;
end

always @(posedge clk or negedge rst)
begin
if(!rst)
y_cnt <= 0;
else if(y_cnt == 10'd666 - 1)
y_cnt <= 0;
else if(x_cnt == 11'd1039 - 1)
y_cnt <= y_cnt + 1;
end

wire valid; //有效显示区域来临的标志

assign valid = (x_cnt >= 11'd187) && (x_cnt < 11'd987)
&& (y_cnt >= 10'd31 ) && (y_cnt < 10'd631);

wire [9:0] xpos,ypos; // 有效的显示区域 800 * 600

assign xpos = x_cnt - 11'187; // 从0开始计数
assign ypos = y_cnt - 10'd31;

reg r_hsync,r_ysync; // 同步信号的产生

always @(posedge clk or negedge rst)
begin
if(!rst)
r_hsync <= 1'b1;
else if(x_cnt == 11'd0)
r_hsync <= 0;
else if(x_cnt == 11'd120 - 1)
r_hsync <= 1'b1
end

always @(posedge clk or negedge rst)
begin
if(!rst)
r_ysync <= 1'b1;
else if(y_cnt == 10'd0)
r_ysync <= 0;
else if(y_cnt == 10'd6 - 1)
r_ysync <= 1'b1
end

assign hsync = r_hsync;
assign vsync = r_vsync;

最后,我让vga在屏幕的左边显示黑色,右边显示蓝色:

always @(*)
begin
if(xpos <= 400) // 黑
vga_r = 0;
vga_g = 0;
vga_b = 0;
else
vga_r = 0; // 蓝
vga_g = 0;
vga_b = 1;
end

最后附上vga颜色搭配

基于fpga的vga学习(1)的更多相关文章

  1. 基于fpga的vga学习(3)

    本次学习如何通过vga发送数字.文字.字母, 首先利用建模软件,将想要发送的数据通过数学建模转换,这里我用的软件是PCtoLCD,具体效果如下 这里可以看出,建模将数据装换成0和1,一个字母用16x8 ...

  2. 基于fpga的vga学习(2)

    本次学习主要向配合basys2实行. 上次学习vga的rgb三个output都是1位的,但是我看了basys2的rgb分别是332位,这里让我卡顿了很久, 之后通过查资料才知道,rgb的不同大小表示的 ...

  3. 基于FPGA的VGA显示设计(二)

    上一篇:基于FPGA的VGA显示设计(一)     参照 CrazyBingo 的 基于FPGA的VGA可移植模块终极设计代码  的工程代码风格,模块化处理了上一篇的代码,并增加了一点其它图形. 顶层 ...

  4. 基于FPGA的VGA可移植模块终极设计【转】

    本文转载自:http://www.cnblogs.com/lueguo/p/3373643.html 略过天涯   基于FPGA的VGA可移植模块终极设计 一.VGA的诱惑 首先,VGA的驱动,这事, ...

  5. 基于FPGA的VGA显示实验设计

    基于FPGA的VGA显示实验设计 成果展示(优酷视频): 视频: 基于FPGA的VGA显示技术(手机控制) http://v.youku.com/v_show/id_XNjk4ODE3ODUy.htm ...

  6. 基于FPGA的VGA显示静态图片

    终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为 ...

  7. [置顶] 基于FPGA的VGA简易显存设计&NIOS ii软核接入

    项目简介 本项目基于Altera公司的Cyclone IV型芯片,利用NIOS II软核,2-port RAM与时序控制模块,实现64*48分辨率的显存(再大的显存板载资源m9k不够用) 实现效果如下 ...

  8. 基于FPGA驱动VGA显示图片的小问题

    学习VGA显示图片的过程中,遇到了一个小问题,我在显示屏上开了一个60x60的框,放了一张图片进去显示,但是最终的结果如下图所示. 出现了一个竖黑边,看了看代码,分析了一下逻辑没问题,然而看这个显示那 ...

  9. 基于FPGA的VGA显示设计(一)

    前言 FPGA主要运用于芯片验证.通信.图像处理.显示VGA接口的显示器是最基本的要求了. 原理 首先需要了解 : (1)VGA接口协议:VGA端子_维基百科 .VGA视频传输标准_百度 引脚1 RE ...

随机推荐

  1. pl/sql报错快速解决方法(新手推荐)

    一:简介 今天登录数据库时莫名报了个奇怪的错:ORA-01033: ORACLE initialization or shutdown in progress可能是昨天匆忙电脑没正常关机导致的... ...

  2. Git命令解释

    pwd命令: Print Working Directory 显示工作目录的路径名称.

  3. 第九周博客作业 <西北师范大学| 周安伟>

    第九周助教作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求博客链接https://www.cnblogs.com/nwnu-daizh/p/10726 ...

  4. RabbitMQ 1

    RabbitMQ能做些什么? 消息系统允许软件.应用相互连接和扩展.这些应用可以相互链接起来组成一个更大的应用,或者将用户设备和数据进行连接.消息系统通过将消息的发送和接收分离来实现应用程序的异步和解 ...

  5. Babel 配置选项

    comments 是否去掉注释,true(默认)/false.

  6. background-attachment: fixed 在iphone设备失效的解决

    下面为引用,源代码有点问题,自己修改了一下.先做记录,回头再细修. 引用部分,但代码有问题 http://www.ptbird.cn/css-background-attachment--fiexed ...

  7. easyui 传递参数报错(错误:uncaught SyntaxError: Unexpected identifier)

    转自:https://www.cnblogs.com/javaboy2018/p/8733585.html 代码: 按钮事件: function formatOper(val, row, index) ...

  8. php 微信自定义分享接口

    <?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...

  9. k8s 网络模型

    一.前言 k8s对Pods之间如何进行组网通信提出了要求,k8s对集群的网络有以下要求: 所有的Pods之间可以在不使用NAT网络地址转换的情况下相互通信 所有的Nodes之间可以在不使用NAT网络地 ...

  10. Struts2源码解析2

    看了前面一节对Struts2各个模块运行有了大概了解,也对调用的函数有了一定的了解,本节希望打断点跑一个Struts2例子! 还是放在struts2结构图: 一:项目启动后解析web.xml文件,会解 ...