vga驱动设计
作者:李西锐 校对:陆辉
vga(video graphics array)视频图形阵列是ibm于1987年提出的一个使用模拟信号的电脑显示标准。vga接口即电脑采用vga标准输出数据的专用接口。vga接口共有15针,分成3排,每排5个孔,显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。
vga作为视频接口,具有分辨率高、显示速度快、颜色丰富等优点。随着电子产品以及视频图像处理技术的发展,vga接口应用越来越广泛。
首先我们先来看一下vga接口,如下图:
在我们的接口中,有很多针脚,我们在驱动之前,首先要了解每一个针脚的作用。接口原理图如下:
如图,我们可以看出在这15个针脚中,只有5个针脚需要我们去驱动,其他的针脚要么是电源或者地,要么就没有接。所以,在我们驱动时,只需要驱动这5个针脚即可。
首先我们在驱动之前,需要了解一下视频显示的扫描方式。平时大家看到的图片是由一个一个的像素点构成的,显示器显示时也是如此,一个点一个点的显示。在扫描显示时,有两种扫描方式:隔行扫描和逐行扫描。第一种扫描方式控制复杂,而且图像闪烁,人眼易疲劳,所以现在很少使用,基本上主流的扫描方式都是逐行扫描。逐行扫描是从左上角第一个点开始一行一行的进行扫描,直至最后一个点。在扫描时就需要我们确定扫描位置然后进行时序约束。vga_hs和vga_vs这两个信号为行列同步信号,用来同步扫描的。在时序上,要求在a段必须为低电平。
行时序每拉低一次即为一行的开始,场时序每拉低一次即为一帧图片的开始。
另外,在了解完扫描的问题之后,还有一个问题需要解决,那就是我们在扫描到显示区域时,要给出颜色数据,使得屏幕显示出我们想看到的颜色。vga 显示器上每一个像素点可以很多种颜色,由r、g、b 三种颜色构成。如果每个像素点采用3 位二进制数表示,即r 用1bit 表示,g 用1bit 表示,b 用1bit 表示,则此像素点一共可以显示8种颜色;如果每个像素点采用8 位二进制数表示,即r 用3bit 表示,g 用3bit 表示,b 用2bit 表示,则此像素点一共可以显示256 种颜色。此次实验,采用rgb332 的进行表示。
在进行扫描时,不同的分辨率对应不同的扫描时钟,下图为各个常用分辨率的时序参数。
此次实验,我们选择分辨率为640*480,那么我们需要提供一个25mhz的时钟,这个时钟我们可以通过锁相环输出,代码如下:
1 module vga_ctrl (2 3 input wire clk,4 input wire rst_n,5 6 output reg vga_hs,7 output reg vga_vs,8 output reg [7:0] vga_rgb9 );10 11 parameter hs_a = 96;12 parameter hs_b = 48;13 parameter hs_c = 640;14 parameter hs_d = 16;15 parameter hs_e = 800;16 17 parameter vs_a = 2;18 parameter vs_b = 33;19 parameter vs_c = 480;20 parameter vs_d = 10;21 parameter vs_e = 525;22 23 reg [9:0] cnt_hs;24 reg [9:0] cnt_vs;25 wire hs_en;26 wire vs_en;27 28 always @ (posedge clk, negedge rst_n) begin29 if (rst_n == 1'b0)30 cnt_hs <= 10'd0;31 else32 if (cnt_hs < hs_e - 1'b1)33 cnt_hs <= cnt_hs + 1'b1;34 else35 cnt_hs <= 10'd0;36 end37 38 always @ (posedge clk, negedge rst_n) begin39 if (rst_n == 1'b0)40 vga_hs <= 1'b1;41 else42 if (cnt_hs < hs_a)43 vga_hs <= 1'b0;44 else45 vga_hs <= 1'b1;46 end47 48 always @ (posedge clk, negedge rst_n) begin49 if (rst_n == 1'b0)50 cnt_vs <= 10'd0;51 else52 if (cnt_hs == hs_e - 1'b1)53 if (cnt_vs < vs_e - 1'b1)54 cnt_vs <= cnt_vs + 1'b1;55 else56 cnt_vs <= 10'd0;57 else58 cnt_vs <= cnt_vs;59 end60 61 always @ (posedge clk, negedge rst_n) begin62 if (rst_n == 1'b0)63 vga_vs <= 1'b1;64 else65 if (cnt_vs < vs_a) 66 vga_vs <= 1'b0;67 else68 vga_vs hs_a + hs_b - 1'b1) && (cnt_hs vs_a + vs_b - 1'b1) && (cnt_vs < vs_a + vs_b + vs_c);73 74 always @ (posedge clk, negedge rst_n) begin75 if (rst_n == 1'b0)76 vga_rgb <= 8'd0;77 else 78 if (hs_en == 1'b1 && vs_en == 1'b1)79 vga_rgb <= 8'b111_000_00;80 else81 vga_rgb <= 8'd0;82 end83 84 endmodule
以上代码为显示纯红色的驱动,如果我们想显示不同的纯色,可以修改代码79行的值。
在代码71行和72行分别规定了显示c区,也就是我们能够看到的最大显示区域。如果大家想画出不同形状或者位置的,可以在这两行约束出想要的区域。
特斯拉自燃情况分析 知道热失控原理很重要
7812引脚图_7812典型应用电路图
轨道检查时利用无人机进行电力巡检更快速、准确
顾海巍:新基建背后的新数据挑战
工业物联网的成功,有助于制造商数字化转型
VGA接口驱动设计
不止骁龙835,小米6或搭载联发科X30亮相,两个版本
利用3D打印复制骑马者青铜雕像
人工智能是半导体下一个重要市场
5G技术在垂直行业的全球市场中存在巨大的潜在价值
福建晋华DRAM芯片领域将实现量产遭美禁售
基于51单片机的PC机硬盘驱动器接口分析
成立仅6年的蔚来汽车 已成为中国市值最高的车企
提高嵌入式开发人员效率的 5 种方法
全球最大AI芯片竟有1.2万亿个晶体管
阿里巴巴用物联网技术解决灌溉问题
TXGA上线“T+聚合创变”活动 开创连接器的互联网营销时代
满足EMC严苛测试要求,使用示波器检验ESD仿真器
军用机器人,代替军人在恶劣的环境下完成军事任务可减少军人伤亡
这六大技术凭什么能成为英特尔的“支柱”?