基于FPGA的VGA接口使用
前言
什么是VGA?
VGA(视频图形阵列)是IBM公司制定的一种视频数据传输标准。
接口信号主要有5个:R(Red),G(Green),B(Blue),HS(Horizontal synchronization水平同步),VS(Vertical synchronization垂直同步)。水平同步也叫行(line)同步,垂直同步也叫帧(frame)同步。信号都是模拟信号。
用途:连接CRT显示器或者带VGA接口的LCD液晶显示器。
VGA的接口原理是什么?行消隐,场消隐?
逐行扫描的方式,电子束从屏幕左上角一点开始,从左向右逐行扫描。每扫描完一行,电子束回到屏幕的左边下一行的起始位置。当所有行扫描完毕后,电子束回到屏幕的左上角起始位置,开始下一次扫描。水平方向电子束从右侧回到左侧所需的时间叫行消隐;电子束从右下角回到左上角起始位置所需的时间叫场消隐。
听大佬说缩短消隐区,但太短测试我未通过,还是按标准来吧。
VGA时序参数?
可以从网站上查询到你所需要的参数:http://tinyvga.com/vga-timing
本次进行1024*768分辨率下的VGA三道杠条纹显示开发:
VGA接口的工作时序?
图像的显示是以像素为单位的,行同步信号hs的负脉冲到来时要由RGB送出在当前行显示的像素,下一个负向脉冲用来显示下一行。当整个屏幕显示一遍后,由帧同步信号vs送出一个负向脉冲,又从左上角显示。
功能划分:(懒到不想画图了)
编码实现:
系统时钟确定:T=刷新hz*总像素点
总像素点=水平计数*垂直计数=1344*806
推得:T=60*1344*806=65mhz(约等于)
坐标与hs、vs信号产生。
//************************************************
// Filename : coo_out.v
// Author : kingstacker
// Company : School
// Email : kingstacker_work@163.com
// Device : Altera cyclone4 ep4ce6f17c8
// Description : product the coodinate and hs vs;
//************************************************
module coo_out #(parameter WIDTH = )(
//input;
input wire clk, //65mhz;
input wire rst_n,
//output;
output wire hs, //horizontal synchronization;
output wire vs, //vertical syn;
output reg [WIDTH-:] line_coo, //line coodinate;
output reg [WIDTH-:] ver_coo //vertical coodinate;
); //1024*768;
localparam HTA = 'd136, //sync pulse;
HTB = 'd160, //back porch;
HTC = 'd1024, //visible area;
HTD = 'd24, //front porch;
VTA = 'd6, //sync pulse;
VTB = 'd29, //back porch;
VTC = 'd768, //visible area;
VTD = 'd3, //front porch;
LINE_CNTMAX = HTA+HTB+HTC+HTD-'b1, //max line count;
VER_CNTMAX = VTA+VTB+VTC+VTD-'b1, //max ver count;
HSTART = HTA+HTB,
VSTART = VTA+VTB;
reg [WIDTH+:] line_cnt;
reg [WIDTH+:] ver_cnt;
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
line_cnt <= 'd0;
end //if
else begin
if (line_cnt == LINE_CNTMAX) begin
line_cnt <= 'd0;
end //if
else begin
line_cnt <= line_cnt + 'b1;
end //else
end //else
end //always
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
ver_cnt <= 'd0;
end //if
else begin
if ((ver_cnt == VER_CNTMAX)&&(line_cnt == LINE_CNTMAX)) begin
ver_cnt <= 'd0;
end //if
else begin
ver_cnt <= (line_cnt == LINE_CNTMAX)? (ver_cnt + 'b1) : ver_cnt;
end //else
end //else
end //always
assign hs = (line_cnt < HTA) ? 'b0 : 1'b1;
assign vs = (ver_cnt < VTA) ? 'b0 : 1'b1;
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
line_coo <= ;
ver_coo <= ;
end //if
else begin
if((line_cnt >= HSTART)&&(line_cnt < HSTART + HTC)&&(ver_cnt >=VSTART)&&(ver_cnt < VSTART + VTC)) begin
line_coo <= line_cnt - HSTART;
ver_coo <= ver_cnt - VSTART;
end
end //else
end //always endmodule
三道杠产生:
//************************************************
// Filename : color_out.v
// Author : kingstacker
// Company : School
// Email : kingstacker_work@163.com
// Device : Altera cyclone4 ep4ce6f17c8
// Description :
//************************************************
module color_out #(parameter WIDTH = )(
//input;
input wire clk,
input wire rst_n,
input wire [WIDTH-:] line_coo,
input wire [WIDTH-:] ver_coo,
//output;
output reg [:] rgb_o
);
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
rgb_o <= 'd0;
end //if
else begin
if(ver_coo < 'd255) begin
rgb_o <= {'b11111,6'd0,'d0};
end
else begin
if (ver_coo < 'd511) begin
rgb_o <= {'d0,6'b111111,'d0};
end
else begin
rgb_o <= {'d0,6'd0,'b11111};
end
end
end //else
end //always endmodule
综合资源使用:
抓波:
接显示器看看:三道杠少年
修改color_out:九宫格(很无聊的东西hhhhhh)
图片放rom显示:100*100
mif文件可由matalb生成,也可以用下面两个软件生成(更方便):
用lmage2Lcd生成bin文件:
bin文件转换为mif文件:
再把mif文件放rom即可。
显示器显示图片:
以上。
基于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显示设计(二)
上一篇:基于FPGA的VGA显示设计(一) 参照 CrazyBingo 的 基于FPGA的VGA可移植模块终极设计代码 的工程代码风格,模块化处理了上一篇的代码,并增加了一点其它图形. 顶层 ...
- 基于FPGA的VGA显示静态图片
终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为 ...
- 基于FPGA的PCIe接口实现(具体讲解了数据流向)
时间:2014-12-09 来源:西安电子科技大学电子工程学院 作者:姜 宁,陈建春,王 沛,石 婷 摘要 PCI Express是一种高性能互连协议,被广泛应用于网络适配.图形加速器.网络存储.大数 ...
- 基于FPGA的VGA显示设计(一)
前言 FPGA主要运用于芯片验证.通信.图像处理.显示VGA接口的显示器是最基本的要求了. 原理 首先需要了解 : (1)VGA接口协议:VGA端子_维基百科 .VGA视频传输标准_百度 引脚1 RE ...
- 基于FPGA的VGA可移植模块终极设计
一.VGA的诱惑 首先,VGA的驱动,这事,一般的单片机是办不到的:由于FPGA的速度,以及并行的优势,加上可现场配置的优势,VGA的配置,只有俺们FPGA可以胜任,也只有FPGA可以随心所欲地配置( ...
- [置顶]
基于FPGA的VGA简易显存设计&NIOS ii软核接入
项目简介 本项目基于Altera公司的Cyclone IV型芯片,利用NIOS II软核,2-port RAM与时序控制模块,实现64*48分辨率的显存(再大的显存板载资源m9k不够用) 实现效果如下 ...
- FPGA学习-VGA接口
一般FPGA开发板的VGA会向用户暴露两共五个种接口,第一种是时序信号,用于同步传输和显示:第二种是色彩信号,用于随着时序把色彩显示到显示器上 时序接口 行同步信号-用于指示一行内像素的显示 场同步信 ...
随机推荐
- elasticsearch简单操作(一)
1.增加记录 例如1:向指定的 /Index/Type 发送 PUT 请求,就可以在 Index 里面新增一条记录.比如,向/accounts/person发送请求,就可以新增一条人员记录. curl ...
- 使用C# HttpWebRequest进行多线程网页提交。Async httpclient/HttpWebRequest实现批量任务的发布及异步提交和超时取消
使用线程池并发处理request请求及错误重试,使用委托处理UI界面输出. http://www.cnblogs.com/Charltsing/p/httpwebrequest.html for (i ...
- c语言之字符输入输出和输入验证
单字符I/O:getchar()和putchar() #include<stdio.h> int main(void) { char ch; while ((ch = getchar()) ...
- redis的spring的xml配置
<!-- 集群版配置 --> <bean id="jedisCluster" class="redis.clients.jedis.JedisClust ...
- debian6保存iptables规则
iptables规则不保存,一旦机器重启规则就清空了,所以需要保存: iptables-save >/etc/iptables-script vi /etc/rc.local 然后在文件中输入: ...
- 【转】Restful是什么
REST的概念是什么 维基百科 表现层状态转换(REST,英文:Representational State Transfer)是Roy Thomas Fielding博士于2000年在他的博士论文 ...
- nmon for Linux & Java
nmon for Linux | Main / HomePagehttp://nmon.sourceforge.net/pmwiki.php Java Nmon Analyser download | ...
- pip ipython启动错误 Fatal error in launcher: Unable to create process using
完整的错误提示: C:\Users\yyy>ipython3Fatal error in launcher: Unable to create process using '"c:\u ...
- vue router 根据不同的id切换链接界面不刷新
我们一般使用vue的router时候会根据不同的id来切换界面,但是界面没有立刻刷新.下面我们讲下如何解决这个问题. html: <template> <div id="a ...
- idea打包springboot+maven项目并发布在linux上
2018年11月13日我亲测有效的,很简单的,借鉴博客:https://blog.csdn.net/smilecall/article/details/56288972 第一步:随便建一个maven类 ...