基于fpga的vga学习(1)
这次学习我主要掌握了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)的更多相关文章
- 基于fpga的vga学习(3)
本次学习如何通过vga发送数字.文字.字母, 首先利用建模软件,将想要发送的数据通过数学建模转换,这里我用的软件是PCtoLCD,具体效果如下 这里可以看出,建模将数据装换成0和1,一个字母用16x8 ...
- 基于fpga的vga学习(2)
本次学习主要向配合basys2实行. 上次学习vga的rgb三个output都是1位的,但是我看了basys2的rgb分别是332位,这里让我卡顿了很久, 之后通过查资料才知道,rgb的不同大小表示的 ...
- 基于FPGA的VGA显示设计(二)
上一篇:基于FPGA的VGA显示设计(一) 参照 CrazyBingo 的 基于FPGA的VGA可移植模块终极设计代码 的工程代码风格,模块化处理了上一篇的代码,并增加了一点其它图形. 顶层 ...
- 基于FPGA的VGA可移植模块终极设计【转】
本文转载自:http://www.cnblogs.com/lueguo/p/3373643.html 略过天涯 基于FPGA的VGA可移植模块终极设计 一.VGA的诱惑 首先,VGA的驱动,这事, ...
- 基于FPGA的VGA显示实验设计
基于FPGA的VGA显示实验设计 成果展示(优酷视频): 视频: 基于FPGA的VGA显示技术(手机控制) http://v.youku.com/v_show/id_XNjk4ODE3ODUy.htm ...
- 基于FPGA的VGA显示静态图片
终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为 ...
- [置顶]
基于FPGA的VGA简易显存设计&NIOS ii软核接入
项目简介 本项目基于Altera公司的Cyclone IV型芯片,利用NIOS II软核,2-port RAM与时序控制模块,实现64*48分辨率的显存(再大的显存板载资源m9k不够用) 实现效果如下 ...
- 基于FPGA驱动VGA显示图片的小问题
学习VGA显示图片的过程中,遇到了一个小问题,我在显示屏上开了一个60x60的框,放了一张图片进去显示,但是最终的结果如下图所示. 出现了一个竖黑边,看了看代码,分析了一下逻辑没问题,然而看这个显示那 ...
- 基于FPGA的VGA显示设计(一)
前言 FPGA主要运用于芯片验证.通信.图像处理.显示VGA接口的显示器是最基本的要求了. 原理 首先需要了解 : (1)VGA接口协议:VGA端子_维基百科 .VGA视频传输标准_百度 引脚1 RE ...
随机推荐
- Myeclipse运行单个jsp页面
点击窗口--->打开透视图--->其他 选中Web(WTP Extras) 如果没有这一项勾选 全部显示 应该是会生成一个Server文件夹
- 在Tomcat文件中,点击start.bat启动的是另一个tomcat
遇到问题:在下载了一个免安装的Tomcat7之后解压,点击startup.bat启动tomcat,却报了异常. 后来在电脑一个文件夹中发现了另一个Tomcat8,是安装版本,并配置了环境变量.其环境变 ...
- composer的安装以及具体使用
1. 简介 Composer 是 PHP5.3以上 的一个依赖管理工具.它允许你声明项目所依赖的代码库,它会在你的项目中为你安装他们.Composer 不是一个包管理器.是的,它涉及 "pa ...
- 19-03【golang】strings包
golang的strings包提供了字符串操作的一系列函数.下面做个简单介绍 函数 用法 备注 Compare(a,b sring) 比较两个字符串 Contains(s, substr stri ...
- I2C与SMBus
关于I2C与SMBus,许多人很少去谈论与了解两者的细节差异,包括很多国外的简报,文章也经常将两者混写.交杂描述.交替运用. 确实,在一般运用下,I2C Bus与SMBus没有太大的差别,从实际接线上 ...
- The declared package does not match the expected package Java
今天使用vscode 编写java代码做测试时候,发现这个问题,大概总结一下. 目录结构 bao -> Point.java test.java package bao; public clas ...
- java_24.1文件流的应用--复制文件
注意:先开的流要最后关 用字节流传输 public class Demo { public static void main(String[] args){ FileInputStream fis = ...
- 视频剪辑软件原型-videocut
制作软件:墨刀 分享网址:<iframe src="https://modao.cc/app/fb0e31590711295ebebdf50fff7dd9861b7a9c1d/embe ...
- makefile入门-初步了解
自己开始学习makefile是由于VScode配置工程文件,看别人的配置不是很懂,于是决定入门学习下makefile. 先来说说makefile是做什么用的:makefile可以实现工程的自动化编译, ...
- g++ 学习笔记
gcc and g++分别是GNU的c & c++编译器.gcc/g++在执行编译的时候一般有下面4步: 1 预处理,生成.i的文件. 命令如下:g++ -E test.cpp 此命令只进行 ...