首页 VGA控制器设计实现显示器屏幕保护

VGA控制器设计实现显示器屏幕保护

举报
开通vip

VGA控制器设计实现显示器屏幕保护大 学 实 验 报 告 课程名称:      数字系统现场集成技术                          实验项目名称:    实验二(VGA控制器设计实现显示器屏幕保护模块)                                学院:                              专业:                                    指导教师:              报告人:学号: 班级:          实验时间:          ...

VGA控制器设计实现显示器屏幕保护
大 学 实 验 报 告 课程名称:      数字系统现场集成技术                          实验项目名称:    实验二(VGA控制器设计实现显示器屏幕保护模块)                                学院:                              专业:                                    指导教师:              报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 人:学号: 班级:          实验时间:                                    实验报告提交时间:                  教务部制 实验目的与要求: 通过FPGA板的VGA接口在显示器上分别显示不同颜色的横向、竖直条纹图案,横向条纹和竖直条纹的切换通过FPGA板上的按键实现。横向条纹要求是一幅640*480由8条不同颜色的横向条纹组成的图像,从上到下颜色分别为:红,蓝,绿,蓝,红,绿,红,蓝;竖直条纹要求是一幅640*480由8条不同颜色的竖直条纹组成的图像,从左到右颜色分别为:红,蓝,绿,蓝,红,绿,红,蓝。 实验最终达到效果: 本实验实现了实验要求中的基本要求以及高级要求,实验了VGA条纹的显示,以及通过按键,让显示屏显示不同的色彩条纹,还有实验了一个小方块在屏幕上的移动,达到动态显示效果。调用了xilinx官方提供的DCM模块,而且本实验的VGA驱动代码,经过仔细修改和考虑,只要修改自定义的实数,即可实验任何分辨率的显示器显示,方便以后实验或者项目的调用。 实验主要代码(由于代码较多,贴出主要代码): VGA驱动代码: module vga_drv( input clk, input rst, input[7:0] in_rgb, output hsync,vsync, output[7:0] out_rgb, output reg[9:0] h_cnt,v_cnt ); localparam HVA=640; localparam HFP=16; localparam HSP=96; localparam HBP=48; localparam HWL=800; localparam VVA=480; localparam VFP=10; localparam VSP=2; localparam VBP=33; localparam VWL=525; wire valid; //reg[9:0] h_cnt,v_cnt; always@(posedge clk,posedge rst) begin if(rst) h_cnt<=0; else if(h_cnt == (HWL-1)) h_cnt<=0; else h_cnt<=h_cnt+1'd1; end always@(posedge clk,posedge rst) begin if(rst) v_cnt<=0; else if(h_cnt == (HWL-1)) begin if(v_cnt == (VWL-1)) v_cnt<=0; else v_cnt<=v_cnt+1'd1; end else v_cnt<=v_cnt; end assign hsync = ((h_cnt>=(HFP+HVA-1))&&(h_cnt<=(HVA+HFP+HSP - 1)))?1'b0:1'b1; assign vsync = ((v_cnt>=(VVA+VFP - 1))&&(v_cnt<=(VVA+VFP+VSP - 1)))?1'b0:1'b1; assign valid = ((h_cnt<=HVA-1)&& (v_cnt<=VVA-1))?1'b1:1'b0; assign out_rgb = valid ? in_rgb:8'b0000_0000; endmodule VGA条纹产生代码: module colour_bar( input clk, input rst, input[9:0] h_cnt,v_cnt, input mode, output reg[7:0] rgb ); //wire[9:0] h_cnt_wire=h_cnt+16; localparam HVA=640; localparam VVA=480; always@(posedge clk,posedge rst) begin if(rst) rgb<=8'b0000_0000; else if(mode) begin if(h_cnt>=0 && h_cnt<(HVA/8)) rgb<=8'b111_000_00; else if(h_cnt>=(HVA/8)*1 && h_cnt<(HVA/8)*2) rgb<=8'b000_000_11; else if(h_cnt>=(HVA/8)*2 && h_cnt<(HVA/8)*3) rgb<=8'b000_111_00; else if(h_cnt>=(HVA/8)*3 && h_cnt<(HVA/8)*4) rgb<=8'b000_000_11; else if(h_cnt>=(HVA/8)*4 && h_cnt<(HVA/8)*5) rgb<=8'b111_000_00; else if(h_cnt>=(HVA/8)*5 && h_cnt<(HVA/8)*6) rgb<=8'b000_111_00; else if(h_cnt>=(HVA/8)*6 && h_cnt<(HVA/8)*7) rgb<=8'b111_000_00; else if(h_cnt>=(HVA/8)*7 && h_cnt<(HVA/8)*8) rgb<=8'b000_000_11; else rgb<=8'b000_000_000; end else begin if(v_cnt>=0 && v_cnt<(VVA/8)) rgb<=8'b111_000_00; else if(v_cnt>=(VVA/8)*1 && v_cnt<(VVA/8)*2) rgb<=8'b000_000_11; else if(v_cnt>=(VVA/8)*2 && v_cnt<(VVA/8)*3) rgb<=8'b000_111_00; else if(v_cnt>=(VVA/8)*3 && v_cnt<(VVA/8)*4) rgb<=8'b000_000_11; else if(v_cnt>=(VVA/8)*4 && v_cnt<(VVA/8)*5) rgb<=8'b111_000_00; else if(v_cnt>=(VVA/8)*5 && v_cnt<(VVA/8)*6) rgb<=8'b000_111_00; else if(v_cnt>=(VVA/8)*6 && v_cnt<(VVA/8)*7) rgb<=8'b111_000_00; else if(v_cnt>=(VVA/8)*7 && v_cnt<(VVA/8)*8) rgb<=8'b000_000_11; else rgb<=8'b000_000_000; end end Endmodule 按键消抖代码: module btn_scan( input clk, input rst, input btn, output reg btn_down ); localparam[1:0] s0=2'b00, s1=2'b01, s2=2'b10; reg[1:0] state; always@(posedge clk,posedge rst) begin if(rst) begin btn_down<=1'b0; state<=s0; end else begin case(state) s0: begin if(btn) state<=s1; else state<=s0; end s1: begin if(cnt_done) begin if(btn) state<=s2; else state<=s0; end else state<=s1; end s2:begin if(btn==1'b0) begin btn_down<=~btn_down; state<=s0; end else begin btn_down<=btn_down; state<=s2; end end endcase end end reg[19:0] cnt; reg cnt_done; always@(posedge clk,posedge rst) begin if(rst) begin cnt<=20'b0; cnt_done<=1'b0; end else if(state==s1) begin cnt<=cnt+1'b1; if(cnt==20'd500000) begin cnt<=20'b0; cnt_done<=1'b1; end end else begin cnt<=20'b0; cnt_done<=1'b0; end end endmodule 方块图形动态显示代码: module dynamic_display( input clk, input rst, input[7:0] in_rgb, input[9:0] h_cnt,v_cnt, output[7:0] out_rgb ); localparam HVA=640; localparam VVA=480; reg[7:0] rgb_mask; always@(posedge clk,posedge rst) begin if(rst) rgb_mask<=8'b1111_1111; else if((h_cnt>=h_cnt_add)&&(h_cnt<=h_cnt_add+60)&&(v_cnt>=220)&&(v_cnt<=260)) rgb_mask<=8'b0001_1100; else rgb_mask<=8'b1111_1111; end reg[27:0] count; reg second_up; always@(posedge clk,posedge rst) begin if(rst) begin count<=28'd0; second_up<=1'b0; end else if(count==28'd10_000_000) begin second_up<=1'b1; count<=28'd0; end else begin count<=count+1'b1; second_up<=1'b0; end end reg[9:0] h_cnt_add; always@(posedge clk,posedge rst) begin if(rst) h_cnt_add<=10'd0; else if(second_up) begin if(h_cnt_add==640) h_cnt_add<=0; else h_cnt_add<=h_cnt_add+40; end else h_cnt_add<=h_cnt_add; end assign out_rgb=in_rgb & rgb_mask; endmodule   实验模块图:   实验实际效果图:       深圳大学学生实验报告用纸 实验结论: 1.由于太久没有使用verilog语言敲写代码了,对于一些语法有些健忘,这次实验重温了该语言的使用以及技巧 2.更进一步加深了对VGA驱动的理解以及VGA显示工作的原理,相比以前,这次的VGA驱动代码更加短小,而且移植性更强更好 指导教师批阅意见: 成绩评定: 指导教师签字: 年 月 日 备注:   注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。 继续阅读
本文档为【VGA控制器设计实现显示器屏幕保护】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_686908
暂无简介~
格式:doc
大小:37KB
软件:Word
页数:0
分类:互联网
上传时间:2019-06-04
浏览量:17