目录

一、VGA简介

二、VGA实现代码

三、参考博客


一、VGA简介

VGA(Video Graphics Array)视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA接口即电脑采用VGA标准输出数据的专用接口。VGA接口共有15针,分成3排,每排5个孔,显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。

常见接口之色差VGA接口(D-Sub接口)

说到VGA接口,相信很多朋友都不会陌生,因为这种接口是电脑显示器上最主要的接口,从块头巨大的CRT显示器时代开始,VGA接口就被使用,并且一直沿用至今,另外VGA接口还被称为D-Sub接口。 [2]

很多人觉得只有HDMI接口才能进行高清信号的传输,但这是一个大家很容易进入的误区,因为通过VGA的连接同样可以显示1080P的图像,甚至分辨率可以达到更高,所以用它连接显示设备观看高清视频是没有问题的,而且虽然它是种模拟接口,但是由于VGA将视频信号分解为R、G、B三原色和HV行场信号进行传输,所以在传输中的损耗还是相当小的.

VGA接口产生原因: 显卡所处理的信息最终都要输出到显示器上,显卡的输出接口就是电脑与显示器之间的桥梁,它负责向显示器输出相应的图像信号。CRT显示器因为设计制造上的原因,只能接受模拟信号输入,这就需要显卡能输出模拟信号。VGA接口就是显卡上输出模拟信号的接口,VGA(Video Graphics Array)接口,也叫D-Sub接口。虽然液晶显示器可以直接接收数字信号,但很多低端产品为了与VGA接口显卡相匹配,因而采用VGA接口。

二、VGA实现代码

代码如下:

module VGA_test(
OSC_50,     //原CLK2_50时钟信号
VGA_CLK,    //VGA自时钟
VGA_HS,     //行同步信号
VGA_VS,     //场同步信号
VGA_BLANK,  //复合空白信号控制信号  当BLANK为低电平时模拟视频输出消隐电平,此时从R9~R0,G9~G0,B9~B0输入的所有数据被忽略
VGA_SYNC,   //符合同步控制信号      行时序和场时序都要产生同步脉冲
VGA_R,      //VGA绿色
VGA_B,      //VGA蓝色
VGA_G);     //VGA绿色input OSC_50;     //外部时钟信号CLK2_50output VGA_CLK,VGA_HS,VGA_VS,VGA_BLANK,VGA_SYNC;output [7:0] VGA_R,VGA_B,VGA_G;parameter H_FRONT = 16;     //行同步前沿信号周期长parameter H_SYNC = 96;      //行同步信号周期长parameter H_BACK = 48;      //行同步后沿信号周期长parameter H_ACT = 640;      //行显示周期长parameter H_BLANK = H_FRONT+H_SYNC+H_BACK;        //行空白信号总周期长parameter H_TOTAL = H_FRONT+H_SYNC+H_BACK+H_ACT;  //行总周期长耗时parameter V_FRONT = 11;     //场同步前沿信号周期长parameter V_SYNC = 2;       //场同步信号周期长parameter V_BACK = 31;      //场同步后沿信号周期长parameter V_ACT = 480;      //场显示周期长parameter V_BLANK = V_FRONT+V_SYNC+V_BACK;        //场空白信号总周期长parameter V_TOTAL = V_FRONT+V_SYNC+V_BACK+V_ACT;  //场总周期长耗时reg [10:0] H_Cont;        //行周期计数器reg [10:0] V_Cont;        //场周期计数器wire [7:0] VGA_R;         //VGA红色控制线wire [7:0] VGA_G;         //VGA绿色控制线wire [7:0] VGA_B;         //VGA蓝色控制线reg VGA_HS;reg VGA_VS;reg [10:0] X;             //当前行第几个像素点reg [10:0] Y;             //当前场第几行reg CLK_25;always@(posedge OSC_50)begin CLK_25=~CLK_25;         //时钟end assign VGA_SYNC = 1'b0;   //同步信号低电平assign VGA_BLANK = ~((H_Cont<H_BLANK)||(V_Cont<V_BLANK));  //当行计数器小于行空白总长或场计数器小于场空白总长时,空白信号低电平assign VGA_CLK = ~CLK_to_DAC;  //VGA时钟等于CLK_25取反assign CLK_to_DAC = CLK_25;always@(posedge CLK_to_DAC)beginif(H_Cont<H_TOTAL)           //如果行计数器小于行总时长H_Cont<=H_Cont+1'b1;      //行计数器+1else H_Cont<=0;              //否则行计数器清零if(H_Cont==H_FRONT-1)        //如果行计数器等于行前沿空白时间-1VGA_HS<=1'b0;             //行同步信号置0if(H_Cont==H_FRONT+H_SYNC-1) //如果行计数器等于行前沿+行同步-1VGA_HS<=1'b1;             //行同步信号置1if(H_Cont>=H_BLANK)          //如果行计数器大于等于行空白总时长X<=H_Cont-H_BLANK;        //X等于行计数器-行空白总时长   (X为当前行第几个像素点)else X<=0;                   //否则X为0endalways@(posedge VGA_HS)beginif(V_Cont<V_TOTAL)           //如果场计数器小于行总时长V_Cont<=V_Cont+1'b1;      //场计数器+1else V_Cont<=0;              //否则场计数器清零if(V_Cont==V_FRONT-1)       //如果场计数器等于场前沿空白时间-1VGA_VS<=1'b0;             //场同步信号置0if(V_Cont==V_FRONT+V_SYNC-1) //如果场计数器等于行前沿+场同步-1VGA_VS<=1'b1;             //场同步信号置1if(V_Cont>=V_BLANK)          //如果场计数器大于等于场空白总时长Y<=V_Cont-V_BLANK;        //Y等于场计数器-场空白总时长    (Y为当前场第几行)  else Y<=0;                   //否则Y为0endreg valid_yr;always@(posedge CLK_to_DAC)if(V_Cont == 10'd32)         //场计数器=32时valid_yr<=1'b1;           //行输入激活else if(V_Cont==10'd512)     //场计数器=512时valid_yr<=1'b0;           //行输入冻结wire valid_y=valid_yr;       //连线   reg valid_r;            always@(posedge CLK_to_DAC)   if((H_Cont == 10'd32)&&valid_y)     //行计数器=32时valid_r<=1'b1;                   //像素输入激活else if((H_Cont==10'd512)&&valid_y) //行计数器=512时 valid_r<=1'b0;                   //像素输入冻结wire valid = valid_r;               //连线wire[10:0] x_dis;     //像素显示控制信号wire[10:0] y_dis;     //行显示控制信号assign x_dis=X;       //连线Xassign y_dis=Y;       //连线Yparameter  //点阵字模:每一行char_lineXX是显示的一行,共272列char_line00=272'h0000000000000000000000000000000000000000000000000000000000000000000,
char_line01=272'h0000000000000000000000000000000000000000000000000000000000000000000,
char_line02=272'h0100001000020000020000000000000000000000000000000000000000000000000,
char_line03=272'h00C0001C00030000030000F00000000000000000000000000000000000000000000,
char_line04=272'h006000180001800002001FC00000000000000000000000000000000000000000000,
char_line05=272'h00700018000180000203E0000000000000000000000000000000000000000000000,
char_line06=272'h0030001800008010021000180000000003C00060008000600000000000000000000,
char_line07=272'h00200618000080387FF818180000000006200060018000600000000000000000000,
char_line08=272'h002186183FFFFFFC02020C30000000000C3000E01F8000E00000000000000000000,
char_line09=272'h3FFFC61800200C0002010C3000000000181800E0018000E00000000000000000000,
char_line0a=272'h0006061800200C00020184200000000018180160018001600000000000000000000,
char_line0b=272'h0007061800200C00022184400000000018080160018001600000000000000000000,
char_line0c=272'h0006061800100C003FF0808000000000300C0260018002600000000000000000000,
char_line0d=272'h080C0618001018000200000000000000300C0460018004600000000000000000000,
char_line0e=272'h040C0618001018000200180000000000300C0460018004600000000000000000000,
char_line0f=272'h020C06180018180002027FFC00000000300C0860018008600000000000000000000,
char_line10=272'h01980618000830000209801800000000300C0860018008600000000000000000000,
char_line11=272'h00D80618000C30007FFD001800000000300C1060018010600000000000000000000,
char_line12=272'h00700618000460000219001800000000300C3060018030600000000000000000000,
char_line13=272'h00380618000660000219001800000000300C2060018020600000000000000000000,
char_line14=272'h007C06180002C0000219101800000000300C4060018040600000000000000000000,
char_line15=272'h00CE06180003C0000211F9F800000000300C7FFC01807FFC0000000000000000000,
char_line16=272'h00C7061800018000021100180000000018080060018000600000000000000000000,
char_line17=272'h018386180003C00002B100180000000018180060018000600000000000000000000,
char_line18=272'h030380180006E000027100180000000018180060018000600000000000000000000,
char_line19=272'h06018018000C780002210018000000000C300060018000600000000000000000000,
char_line1a=272'h0C00001800381E0002010018000000000620006003C000600000000000000000000,
char_line1b=272'h1000001800600FC00201FFF80000000003C003FC1FF803FC0000000000000000000,
char_line1c=272'h200001F8018003FC020100180000000000000000000000000000000000000000000,
char_line1d=272'h400000700E0000F0020100180000000000000000000000000000000000000000000,
char_line1e=272'h0000002030000000020200000000000000000000000000000000000000000000000,
char_line1f=272'h0000000000000000000000000000000000000000000000000000000000000000000;reg[8:0] char_bit;always@(posedge CLK_to_DAC)if(X==10'd144)char_bit<=9'd272;   //当显示到144像素时准备开始输出图像数据else if(X>10'd144&&X<10'd416)     //左边距屏幕144像素到416像素时    416=144+272(图像宽度)char_bit<=char_bit-1'b1;       //倒着输出图像信息 reg[29:0] vga_rgb;                //定义颜色缓存always@(posedge CLK_to_DAC) if(X>10'd144&&X<10'd416)    //X控制图像的横向显示边界:左边距屏幕左边144像素  右边界距屏幕左边界416像素begin //case(Y)vga_rgb<=30'b1111111111_1111111111_0000000000;                            //Y控制图像的纵向显示边界:从距离屏幕顶部160像素开始显示第一行数据/*10'd160:if(char_line00[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;  //如果该行有数据 则颜色为红色else vga_rgb<=30'b0000000000_0000000000_0000000000;                      //否则为黑色10'd162:if(char_line01[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd163:if(char_line02[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd164:if(char_line03[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd165:if(char_line04[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000; 10'd166:if(char_line05[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_z0000000000_0000000000;10'd167:if(char_line06[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000; 10'd168:if(char_line07[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd169:if(char_line08[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000; 10'd170:if(char_line09[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd171:if(char_line0a[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd172:if(char_line0b[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd173:if(char_line0c[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd174:if(char_line0d[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd175:if(char_line0e[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd176:if(char_line0f[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd177:if(char_line10[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd178:if(char_line11[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd179:if(char_line12[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd180:if(char_line13[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd181:if(char_line14[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd182:if(char_line15[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd183:if(char_line16[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd184:if(char_line17[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd185:if(char_line18[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd186:if(char_line19[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd187:if(char_line1a[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd188:if(char_line1b[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd189:if(char_line1c[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd190:if(char_line1d[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd191:if(char_line1e[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;10'd192:if(char_line1f[char_bit])vga_rgb<=30'b1111111111_1111111111_0000000000;else vga_rgb<=30'b0000000000_0000000000_0000000000;default:vga_rgb<=30'h0000000000;   //默认颜色黑色endcase*/  endelse vga_rgb<=30'b1111111111_0000000000_1111111111;             //否则黑色assign VGA_R=vga_rgb[23:16];assign VGA_G=vga_rgb[15:8];assign VGA_B=vga_rgb[7:0];
endmodule

使用汉字点阵将汉字代码中的汉字替换,然后实现VGA显示

三、参考博客

(121条消息) 【FPGA实验】基于DE2-115平台的VGA显示_机智的橙子的博客-CSDN博客

尝试用Verilog驱动VGA_Joyce_Ng的博客-CSDN博客_verilog vga

基于DE2-115 FPGA开发板的VGA显示_春哥笔记的博客-CSDN博客_fpga开发板de2

DE2-115 FPGA开发板的VGA显示相关推荐

  1. 基于DE2-115 FPGA开发板的VGA显示

    文章目录 一.VGA简介 二.基于DE2-115 FPGA开发板的VGA显示 一.VGA简介 VGA的全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传 输的 ...

  2. 使用 FPGA 开发板采用 Verilog 编程练习基于 VGA 图像显示

    目录 一.VGA 简介 二.实验内容 2.1 Quartus 新建工程 2.2 新建 Verilog 文件 2.3 配置管脚 2.4 DE2-115 开发板连接 2.5 烧录程序 三.总结 四.参考资 ...

  3. 共阳数码管段码表_正点原子开拓者FPGA开发板资料连载第十一章 静态数码管显示实验...

    1)实验平台:正点原子开拓者FPGA 开发板 2)摘自<开拓者FPGA开发指南>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载地址:http://www.o ...

  4. 手把手教你如何使用Multisim对Digilent FPGA开发板进行编程

    1.jpg (43.84 KB, 下载次数: 0) 下载附件 2017-6-1 20:03 上传 FPGA正在逐渐成为EECS专业的同学们在校期间学习掌握的一项必备技能.无论是在课程实验.竞赛作品.科 ...

  5. fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...

    1)实验平台:正点原子开拓者FPGA 开发板 2)摘自<开拓者FPGA开发指南>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载地址:http://www.o ...

  6. 异步fifo_正点原子开拓者FPGA开发板资料连载第十五章 IP核之FIFO实验

    1)实验平台:正点原子开拓者FPGA 开发板 2)摘自<开拓者FPGA开发指南>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载地址:http://www.o ...

  7. FPGA开发板的作用

    曾经和几位老朋友谈起来开发板的作用. FPGA开发板的作用(简论,仅代表个人意见) 请先看以下文章: http://www.terasic.com.tw/cgi-bin/page/archive.pl ...

  8. 基于FPGA开发板使用Verilog设计PWM呼吸灯实验

    基于FPGA开发板使用Verilog设计PWM呼吸灯实验 1,实验原理 2,实验模块设计 2.1 RTL设计,呼吸灯模块设计 2.2,测试数据,下载到FPGA开发板板级的数据 2.3,两个模块综合的n ...

  9. VHDL编写多功能数字钟,spartan3 FPGA开发板硬件实现-学习笔记

    VHDL编写多功能数字钟,spartan3 FPGA开发板硬件实现-学习笔记 多功能数字钟硬件测试视频: https://www.bilibili.com/video/av62501230 1.数字钟 ...

最新文章

  1. 树莓派4B Ubuntu18 vnc开机自启动
  2. tkinter中鼠标与键盘事件
  3. 信息学奥赛一本通 1200:分解因数 | OpenJudge 2.2 1751:分解因数
  4. 国际化标签 fmt:bundlefmt:message的使用
  5. 分页 Paginator
  6. java开发之权限管理详解
  7. win10taskkill强行结束进程_强制结束进程命令(ntsd命令/taskkill命令)使用教程
  8. deepl pro 2.0.0专业版
  9. 各大搜索引擎提交入口
  10. 最近四款非常火的广告设计软件,学会大有作为
  11. Linux 系统中如何恢复已删除的文件?
  12. 自制流媒体播放器(Qt+ffmpeg+SDL)小结
  13. document.getelementbyid是什么意思
  14. FileUploadException: Stream closed
  15. 周易六十四卦——同人卦
  16. NOI / 1.13编程基础之综合应用 21:最大质因子序列
  17. 软件测试适合女生吗?我30岁了能学会吗?我大专毕业能做吗?
  18. 操作系统第6次实验报告:使用信号
  19. 解决“E: Package ‘libqtgui4‘ has no installation candidate”无法安装qt4
  20. 软技能:代码之外的生存指南

热门文章

  1. 【51毕设案例】基于51单片机-定时喂食供氧智能鱼缸
  2. Excel插件E灵,一键合并相同且相邻的单元格
  3. 石臻臻的2021总结和2022展望 | 文末彩蛋
  4. C++,ini文件操作(包含类)
  5. 神经网络滤镜不能使用吗,神经滤镜为什么不能用
  6. C语言 程序 复制,C语言实现文件复制
  7. Eclipse代码补全,修改 空格键 = 键不上屏
  8. 施耐德PLC与迪文DGUSⅡ屏软硬件连接指南
  9. Python(2):上机练习——计算y年m月有几天
  10. 实验33:RFID门禁卡实验