clk : 时钟(每个象素点的显示时钟)
reset : 复位信号
2、 输出信号
vga_hs_control : 行同步
vga_vs_control : 场同步 ;
vga_read_dispaly : 红
vga_green_dispaly : 绿
vga_blue_dispaly : 蓝
3、 技术参数
clk : 24M hs : 30KHZ vs : 57.14HZ
设计原理
VGA( 视频图形阵列 ) 作为一种标准的显示接口得到广泛的应用 , 一般有专用芯片,本实验采用 FPGA( 现场可编程门阵列 ) 设计 VGA 接口可以将要显示的数据直接送到显示器,节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。
显示适配器有多种形式,它可按照所符合的视频显示标准来分类,业界制定了多种显示标准,从最初的 MDA 经历了 CGA , EGA , VGA , XGA,SVGA 等的发展过程。与相应的显示适配器标准相配的显示器也称之为 EGA , VGA , XGA 显示器等。实际上显示器的标准主要反映在它们的接口,显示功能和行,场工作频率上。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
|
(1) 当栅扫描方式 从上向下依次顺序扫描
完一场称逐行扫描。一行用行频控制( hs ) ,
一场用场频控制( vs )。扫完一行回来叫行消
隐,扫完一场回来叫场消隐
(2) 随机扫描方式
VGA 接口标准
时钟频率: 25 . 175 MHz( 像素输出的频率 ) ;行频: 31. 469 Hz ;场频: 59 . 94 Hz 。
设计 VGA
设计 VGA 图像显示控制需要注意两个问题 L2] :一个是时序的驱动,这是完成设计的关键,时序稍有偏差,显示必然不正常,甚至会损坏彩色显示器;另一个是 VGA 信号的电平驱动。显示控制器设计提示:显示器技术规格提供的行频一般在 30 kHz 45 kHz( 保守数据 ) ,场频一般在 50 Hz ~ 75 Hz( 保守数据 ) 。针对以上保守数据,设计分辨率为 640x480 的显示接口(如图 4 所示),以 30 kHz 的行频进行扫描时所需时钟频率为: 30 kHz × 800( 行周期 )=24 MHz ,则场频为: 30 kHz ÷ 525( 场周期 )=5.14 Hz 。本实验实现在显示器上显示彩条的设计,初始时时 GRB= “ 000 ”,用一记数器过一段时间使 R 取反,即变为红色。这样就有黑、红彩条了。
| 黑 蓝 红 品 绿 青 黄 白 |
R
G
B | 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 |
实验验证
1、 仿真时序图
2、 验证平台及芯片
Xilinx 公司的 Xilinx Project Navigate
下载芯片为: Xilinx Sparan2/xsc200
小结
1、 技术难点
显示器显示原理、 VGA 接口原理的理解
2 、设计技巧
3 、不足或改进措施
不足:功能单一(彩条显示)
改进:添加字符显示、图象显示、图形显示模块
参考资料
1 蒋本珊. 计算机组成原理与系统结构 北京航空航天大学出版社 p192-p198
2 陈姚节 卢建华. 基于FPGA的VGA显示接口的研究与设计
源程序
library ieee;
use ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity vga is
port(
reset : in std_logic;
clk : in std_logic;
vga_hs_control : out std_logic;
vga_vs_control : out std_logic;
vga_read_dispaly : out std_logic;
vga_green_dispaly : out std_logic;
vga_blue_dispaly : out std_logic
);
end vga;
ARCHITECTURE a OF vga IS
SIGNAL hs: STD_LOGIC;
SIGNAL vs: STD_LOGIC:='1';
SIGNAL GRB: STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
PROCESS (clk) --clk = 24MHZ hs = 30 Khz vs = 57hz
VARIABLE i : integer range 0 to 799:=0;
VARIABLE j : integer range 0 to 79:=0;
BEGIN
if reset = '1' then
GRB <= "000"; i:=96; j:=0; hs <= '1';
elsif clk'event and clk = '1' then
if i < 96 then
hs <= '0';
elsif i = 799 then
i:=0;
else
hs <= '1';
end if;
if j = 79 then
GRB(1) <= not GRB(1);
j:=0;
end if;
i:=i+1;
j:=j+1;
end if;
vga_hs_control <= hs;
END PROCESS ;
PROCESS (hs)
VARIABLE k : integer range 0 to 524:=0;
BEGIN
if reset = '1' then
k:=2; vs <= '1';
elsif hs'event and hs = '1' then
if k < 2 then
vs <= '0';
elsif k = 524 then
k:=0;
else
vs <= '1';
end if;
k:=k+1;
end if;
vga_vs_control <= vs;
END PROCESS ;
PROCESS (clk)
BEGIN
if clk'event and clk = '1' and vs = '1' and hs ='1' then
vga_green_dispaly <= GRB(2);
vga_read_dispaly <= GRB(1);
vga_blue_dispaly <= GRB(0);
end if;
END PROCESS ;
END a;
用户377235 2012-6-8 15:03
时钟信号是20MHz行不?另外,现在宽屏液晶显示器能不能用?
用户23376 2008-4-2 09:23