我坦白我交代我忏悔——史上最稳定的DIY VGA 模块
2010-11-29 12:15
260 查看
我坦白
我代价
我忏悔
发现有时候,写了比较实用而且完美的程序,老是自己藏起来,感觉太。。。。
还是发放吧,毕竟我也从网络上吸取了那么多有用的知识,取之于民,用之与民
希望对大家有所帮助
VGA驱动真的很简的。先来个简要的说明吧:
最好的网站:http://tinyvga.com/vga-timing
思路: 行显示--行消隐前肩--行消隐--行消隐后肩
场显示--场消隐前肩--场消隐--场消隐后肩
接口: 改每个时期的Pxiel,以及输入时钟就可以随便在各种分辨率下调用,完全没问题,测试了n遍了
VGA_Data: 此处16位是因为我后级电路时通过模拟转换为VGA电平的,可以根据需要修改位数
X_pos,Y_pos: 实时像素坐标反馈,便于其他模块的控制
程序如下:
/********************************************************************
* Module Name : VGA_Driver
* Author : Crazy Bingo
* Device : EP2C8Q208C8N
* Version : Quartus II 9.1
* Date : 2010/11/20
* Description : Dispaly programs for the LCD
*********************************************************************/
/********************************************************************
* Revision Author :
* Date :
* Description :
*********************************************************************/
module VGA_Driver
(
input VGA_CLK, // VGA像素时钟
input RST_n, // 异步复位信号
input [15:0] VGA_Data,
output [15:0] VGA_RGB, // 接收要显示的色彩
output reg VGA_HS, // VGA管脚 行同步
output reg VGA_VS, // VGA管脚 场同步
output [10:0] X_pos, // 像素横坐标位置
output [9:0] Y_pos // 像素纵坐标位置
);
//定义VGA_1024_768_65M_60HZ显示协议标准
parameter H_DISP = 11'd1024; // 显示时序
parameter H_FRONT = 11'd24; // 显示前沿
parameter H_SYNC = 11'd136; // 同步脉冲
parameter H_BACK = 11'd160; // 显示后沿
parameter H_TOTAL = 11'd1344; // 时序帧长
parameter V_DISP = 10'd768; // 显示时序
parameter V_FRONT = 10'd3; // 显示前沿
parameter V_SYNC = 10'd6; // 同步脉冲
parameter V_BACK = 10'd29; // 显示后沿
parameter V_TOTAL = 10'd806; // 时序帧长
// 行同步信号发生器
reg [10:0] hcnt;
always @ (posedge VGA_CLK or negedge RST_n)
begin
if (!RST_n)
begin
hcnt <= 0;
VGA_HS <= 1;
end
else
begin
if (hcnt < H_TOTAL-1)
hcnt <= hcnt+1'b1;
else
hcnt <= 0;
////////////////////////////////////////////////////
if( (hcnt >= H_DISP+H_FRONT) && (hcnt < H_DISP+H_FRONT+H_SYNC) )
VGA_HS <= 0; //同步要求为负脉冲(H_DISP*V_DISP)
else
VGA_HS <= 1;
end
end
// 场同步信号发生器
reg [9:0] vcnt;
always @ (negedge VGA_HS or negedge RST_n) //因为HS由1变为0,是下降沿
begin
if (!RST_n)
begin
vcnt <= 0;
VGA_VS <= 1;
end
else
begin
if (vcnt < V_TOTAL-1)
vcnt <= vcnt+1'b1;
else
vcnt <= 0;
////////////////////////////////////////////////////
if( (vcnt >= V_DISP+V_FRONT) && (vcnt < V_DISP+V_FRONT+V_SYNC) )
VGA_VS <= 0; //同步要求为负脉冲(H_DISP*V_DISP)
else
VGA_VS <= 1;
end
end
/*定义H_DISP*V_DISP行列坐标*/
assign X_pos = (hcnt < H_DISP) ? hcnt[9:0] : 10'd0;
assign Y_pos = (vcnt < V_DISP) ? vcnt[9:0] : 10'd0;
assign VGA_RGB = ((hcnt < H_DISP) && (vcnt < V_DISP)) ? VGA_Data : 16'd0;
endmodule
别问为什么,请多思考,中国的FPGA事业可能需要你。。。
我代价
我忏悔
发现有时候,写了比较实用而且完美的程序,老是自己藏起来,感觉太。。。。
还是发放吧,毕竟我也从网络上吸取了那么多有用的知识,取之于民,用之与民
希望对大家有所帮助
VGA驱动真的很简的。先来个简要的说明吧:
最好的网站:http://tinyvga.com/vga-timing
思路: 行显示--行消隐前肩--行消隐--行消隐后肩
场显示--场消隐前肩--场消隐--场消隐后肩
接口: 改每个时期的Pxiel,以及输入时钟就可以随便在各种分辨率下调用,完全没问题,测试了n遍了
VGA_Data: 此处16位是因为我后级电路时通过模拟转换为VGA电平的,可以根据需要修改位数
X_pos,Y_pos: 实时像素坐标反馈,便于其他模块的控制
程序如下:
/********************************************************************
* Module Name : VGA_Driver
* Author : Crazy Bingo
* Device : EP2C8Q208C8N
* Version : Quartus II 9.1
* Date : 2010/11/20
* Description : Dispaly programs for the LCD
*********************************************************************/
/********************************************************************
* Revision Author :
* Date :
* Description :
*********************************************************************/
module VGA_Driver
(
input VGA_CLK, // VGA像素时钟
input RST_n, // 异步复位信号
input [15:0] VGA_Data,
output [15:0] VGA_RGB, // 接收要显示的色彩
output reg VGA_HS, // VGA管脚 行同步
output reg VGA_VS, // VGA管脚 场同步
output [10:0] X_pos, // 像素横坐标位置
output [9:0] Y_pos // 像素纵坐标位置
);
//定义VGA_1024_768_65M_60HZ显示协议标准
parameter H_DISP = 11'd1024; // 显示时序
parameter H_FRONT = 11'd24; // 显示前沿
parameter H_SYNC = 11'd136; // 同步脉冲
parameter H_BACK = 11'd160; // 显示后沿
parameter H_TOTAL = 11'd1344; // 时序帧长
parameter V_DISP = 10'd768; // 显示时序
parameter V_FRONT = 10'd3; // 显示前沿
parameter V_SYNC = 10'd6; // 同步脉冲
parameter V_BACK = 10'd29; // 显示后沿
parameter V_TOTAL = 10'd806; // 时序帧长
// 行同步信号发生器
reg [10:0] hcnt;
always @ (posedge VGA_CLK or negedge RST_n)
begin
if (!RST_n)
begin
hcnt <= 0;
VGA_HS <= 1;
end
else
begin
if (hcnt < H_TOTAL-1)
hcnt <= hcnt+1'b1;
else
hcnt <= 0;
////////////////////////////////////////////////////
if( (hcnt >= H_DISP+H_FRONT) && (hcnt < H_DISP+H_FRONT+H_SYNC) )
VGA_HS <= 0; //同步要求为负脉冲(H_DISP*V_DISP)
else
VGA_HS <= 1;
end
end
// 场同步信号发生器
reg [9:0] vcnt;
always @ (negedge VGA_HS or negedge RST_n) //因为HS由1变为0,是下降沿
begin
if (!RST_n)
begin
vcnt <= 0;
VGA_VS <= 1;
end
else
begin
if (vcnt < V_TOTAL-1)
vcnt <= vcnt+1'b1;
else
vcnt <= 0;
////////////////////////////////////////////////////
if( (vcnt >= V_DISP+V_FRONT) && (vcnt < V_DISP+V_FRONT+V_SYNC) )
VGA_VS <= 0; //同步要求为负脉冲(H_DISP*V_DISP)
else
VGA_VS <= 1;
end
end
/*定义H_DISP*V_DISP行列坐标*/
assign X_pos = (hcnt < H_DISP) ? hcnt[9:0] : 10'd0;
assign Y_pos = (vcnt < V_DISP) ? vcnt[9:0] : 10'd0;
assign VGA_RGB = ((hcnt < H_DISP) && (vcnt < V_DISP)) ? VGA_Data : 16'd0;
endmodule
别问为什么,请多思考,中国的FPGA事业可能需要你。。。
相关文章推荐
- 钱找上门来了,你做好准备了吗?(采购成熟稳定软件模块、按统一要求修正)
- 基于FPGA的VGA可移植模块终极设计
- 【稳定方案】TYPEC转VGA功能NCS8823芯片简介
- 【新产品发布】iM_VGA 真彩显示VGA模块!(含视频教程)
- 装载机稳定模块讲解
- Discuz X前台删除了DIY模块,后台“模块管理”中却删不掉怎么办?解决
- (转载)2012 EEPW ARM DIY功能扩展模块采买建议(ARM)(PCB)
- Discuz X2 模块模板代码详解,DIY更容易!
- discuz 模块模板标签说明 DIY模块模板语法详解
- discuz DIY模块添加自定义字段
- 【discuzx2】在后台添加自定义DIY模块的方法
- diy数据库(十一)--diydb的运行时模块
- Bitbox : a small open, DIY 32 bit VGA console
- 初识Linux内核-DIY内核模块
- 【iCore2模块】VGA模块样板谍照!
- DIY VGA ColorTest
- DX1.5 home模块的DIY功能分析
- discuz x2 diy 模块的样式点击不管用,模块的数据、标题都可以编辑
- DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别
- 利用ROM存储的VGA显示模块