"); //-->
空里找闲,继续实验了VGA功能。
电路很简单,就是几个电阻。关于VGA的知识上网学习了下。
参考:
http://www.tinyvga.com/vga-timing/800x600@72Hz
http://bbs.****.com/BLOG_ARTICLE_184836.HTM
实验内容:
显示800x600分辨率,72Hz刷新,时钟50MHz。用示波器测试,都符合。
屏幕分成8x6块,每块100x100。RGB三色中红色用行计数,绿色用场计数,蓝色是1s变化一次
module m_vga(clk, rst, hsync, vsync, vga_r, vga_g, vga_b);
input clk; //系统时钟输入,50MHz,0.02us
input rst; //系统复位输入
output hsync; //行同步输出,48kHz
output vsync; //场同步输出,72Hz
reg hsync, vsync;
output[2:0] vga_r; //RGB信号输出
output[2:0] vga_g;
output[1:0] vga_b;
reg[10:0] pixel; //行向时序,1040像素
reg[9:0] line; //场向时序,666行
//行向时序
always @(posedge clk or negedge rst)
begin
if(rst == 0) pixel <= 11'd0;
else if(pixel == 11'd1040) pixel <= 11'd0;
else pixel <= pixel + 1'b1;
end
//场向时序
always @(posedge clk or negedge rst)
begin
if(rst == 0) line <= 10'd0;
else if(line == 10'd666) line <= 10'd0;
else if(pixel == 11'd1040) line <= line + 1'b1;
end
//hsync信号(行同步),vsync信号(场同步)
always @(posedge clk or negedge rst)
begin
if (rst == 0)
begin
hsync <= 1'b0;
vsync <= 1'b0;
end
else
begin
hsync <= pixel >= 11'd120;
vsync <= line >= 10'd6;
end
end
reg[2:0] xpos;
reg[2:0] ypos;
parameter
Left = 120 + 64,
PixelWidth = 100,
Top = 6 + 23;
//计算8x6色块行地址
always @(posedge clk or negedge rst)
begin
if(rst == 0) xpos <= 3'b000;
else if(pixel >= Left && pixel < Left + PixelWidth) xpos <= 3'b000;
else if(pixel >= Left + PixelWidth && pixel < Left + 2 * PixelWidth) xpos <= 3'b001;
else if(pixel >= Left + 2 * PixelWidth && pixel < Left + 3 * PixelWidth) xpos <= 3'b010;
else if(pixel >= Left + 3 * PixelWidth && pixel < Left + 4 * PixelWidth) xpos <= 3'b011;
else if(pixel >= Left + 4 * PixelWidth && pixel < Left + 5 * PixelWidth) xpos <= 3'b100;
else if(pixel >= Left + 5 * PixelWidth && pixel < Left + 6 * PixelWidth) xpos <= 3'b101;
else if(pixel >= Left + 6 * PixelWidth && pixel < Left + 7 * PixelWidth) xpos <= 3'b110;
else if(pixel >= Left + 7 * PixelWidth && pixel < Left + 8 * PixelWidth) xpos <= 3'b111;
else xpos <= 3'b000;
end
//计算8x6色块场地址
always @(posedge clk or negedge rst)
begin
if(rst == 0) ypos <= 3'b000;
else if(line >= Top && line < Top + PixelWidth) ypos <= 3'b000;
else if(line >= Top + PixelWidth && line < Top + 2 * PixelWidth) ypos <= 3'b001;
else if(line >= Top + 2 * PixelWidth && line < Top + 3 * PixelWidth) ypos <= 3'b010;
else if(line >= Top + 3 * PixelWidth && line < Top + 4 * PixelWidth) ypos <= 3'b011;
else if(line >= Top + 4 * PixelWidth && line < Top + 5 * PixelWidth) ypos <= 3'b100;
else if(line >= Top + 5 * PixelWidth && line < Top + 6 * PixelWidth) ypos <= 3'b101;
else ypos <= 3'b110;
end
reg clk1s; //分频时钟
reg[25:0] clk_cnt; //分频计数器
//系统时钟分频,产生1s的时钟
always @(posedge clk)
begin
if(clk_cnt == 25'd25000000)
begin
clk1s = ~clk1s;
clk_cnt = 0;
end
else
begin
clk_cnt = clk_cnt + 1'b1;
end
end
reg[1:0] color_cnt;
//每1s改变蓝色
always @(posedge clk1s or negedge rst)
begin
if(rst == 0)
color_cnt = 2'b00;
else
color_cnt <= color_cnt + 1'b1;
end
wire[7:0] color;
reg [7:0] color_r;
always @(posedge clk or negedge rst)
begin
if(rst == 0)
begin
color_r = 8'b00000000;
end
else
begin
color_r <= { xpos, ypos, color_cnt }; //红色+绿色+蓝色
end
end
assign color = color_r;
//显示区标志
wire valid;
assign valid = (pixel > 10'd184) && (pixel < 10'd984) && (line > 10'd29) && (line < 10'd629);
//颜色输出
assign vga_r[2] = valid ? color[7] : 1'b0;
assign vga_r[1] = valid ? color[6] : 1'b0;
assign vga_r[0] = valid ? color[5] : 1'b0;
assign vga_g[2] = valid ? color[4] : 1'b0;
assign vga_g[1] = valid ? color[3] : 1'b0;
assign vga_g[0] = valid ? color[2] : 1'b0;
assign vga_b[1] = valid ? color[1] : 1'b0;
assign vga_b[0] = valid ? color[0] : 1'b0;
endmodule
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
AT89C51单片机在无线数据传输中的应用
CFl55系列双电源高输入阻抗单运放
ARM7TDMI-S(Rev 4)技术参考手册
at 89c320 单片机资料
罗克韦尔自动化发布《可持续发展2024年度报告》
检测DC电动机的电流是否超过阈值的电路
恩智浦持续深化在华布局,开启中国战略新篇章!
ARM芯片的应用和选型
意法半导体监事会拟在2025年度股东大会提名新监事人选
运算放大器失调调整的方法
PT100的前端电路
论AGI时代AI的本质
Smart-ICE功能齐全,性价比最好的仿真器
具有迟滞特性的比较器电路(施密特触发器)
2010英特尔杯大学生电子设计竞赛(9)
恭喜恭喜!
由于个人原因,消失3个月!
首款基于i.MX MPU的FRDM开发板推出:工业物联网边缘计算开发理想之选!
650V耐压GaN HEMT新增小型与高散热TOLL封装
MCX L系列:超低功耗MCU是如何实现的?
富士通半导体 MB95260系列“Easy-Kit”演示
英飞凌成立新业务部门加强传感器和射频产品组合
由于个人原因,消失3个月!
祝各位大侠新年快乐,也希望论坛人气越来越旺!
鲁欧智造完成A+轮融资,全力打造热数字孪生技术体系
arm移植代码
2010英特尔杯大学生电子设计竞赛(8)
高通推出第四代骁龙6移动平台,带来出色性能与增强的游戏体验
2010英特尔杯大学生电子设计竞赛(7)
Mathcad在6西格玛方面的应用