from : 好友博客:http://www.edabc.net/blog/?uid-20-action-viewspace-itemid-591
下面的图是本人画了一个晚上的结果,个人认为能够比较详细的阐述VGA的信号时序
VGA的时序根据不同的显示分辨率和刷新频率会有变化,具体各种类型的时序信息可以参考下面的网站
这里非常详细的说明的每一种显示模式的VGA时序信息
http://www.epanorama.net/documents/pc/vga_timing.html
二、VGA电平
VSYNC,HSYNC为标准TTL电平,0V~3.3V
RGB的电平在0V~0.7V之间(0V为黑色,0.7V为全色)
三、程序顶层框图
VGA产生行同步(HSYNC),场同步信号(VSYNC),并产生每个像素的地址输入单口ROM(显存)中,ROM输出该点需要显示的颜色值
四、单口ROM(显存)设计
程序的显示模式为800*600,72Hz刷新频率,像素频率为50MHz
每个像素需要显示的颜色存储在单口RAM中,每种颜色用8个字节表示
则如果要显示800*600分辨率,则需要800*600字节(480KB)的单口ROM
由于FPGA内部没有这么大的RAM,因此我把屏幕上100*100个像素组成的矩形作为一个逻辑像素(即显示同一种颜色)
这样只要8*6字节(48字节),用FPGA自带的RAM是很容易实现的
ROM中颜色存储地址表:
将全屏划分成8*6的方格,每个方格的颜色存储在ROM中,VGA控制器不断产生行坐标(ROM水平地址)和场坐标(ROM垂直地址)
最后组合成ROM实际地址输入ROM中,ROM输出该地址的颜色值,显示在LCD中
五、程序设计
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
六、后记
在这次程序中只在ROM中存储了一些随机的数,因此显示出来是一些小方格
如果ROM做的更大,完全可以存储一幅图像,显示在LCD中
不过由于由于用ROM做为显存,每次只能显示一幅静态的图像,而且没有加入字符库,不能显示字符
在下次的文章中,我将使用双口RAM,加上Nios II处理器,这样可以方便的显示各种字符