飞机座舱图形显现体系已发展到第六代,即选用有源矩阵五颜六色液晶显现器AMLCD(Active Matrix Liquid Crystal Display)。当时高分辨率的军用AMLCD显现模块还只能依托进口,且操控电路板须装置在该显现模块供给的机箱内。这种装置办法对AMLCD操控电路板的尺度要求高,要求尽可能削减所规划电路板的尺度。在笔者规划的新一代飞机座舱图形显现体系中使用了大规模现场可编程门阵列FPGA(Field Programmable Gata Array),这种规划办法能够将曾经需求多块集成芯片的电路规划到一块大模块可编程逻辑器材中,大大削减了电路板的尺度,增强了体系的可靠性和规划的灵活性。本文具体介绍了已在实践项目中使用的依据FPGA的图办法AMLCD操控器规划,这种规划办法稍作修正即可使用于常见VGA视频接口电路的规划。
1 图形显现体系简介
图1是飞机座舱图形显现体系结构框图。图中处理器选用AD公司的ADSP21061芯片,AMLCD选用Korry公司的KDM710全五颜六色液晶显现模块,该模块为5×5英寸、600×600分辨率五颜六色液晶显现模块,24位数字RGB输入。两个帧存A和B选用IDT公司的71V424高速异步静态RAM,体系选用两个帧存轮番操作的办法:当DSP向其间一个帧存写象素时,由FPGA构成的帧存操控器将另一个帧存中的象素次序读出送给AMLCD,反之亦然。图形显现体系经过IDT公司的71V04双口RAM接纳主机的显现信息。图1中的帧存操控器和视频操控器由Xilinx公司的SpartanII芯片XS2S50完成。
2 KMD710显现模块
如图1所示,美国Korry公司供给的KDM710全五颜六色液晶显现模块接口信号首要如下几组:3个8位RGB数字信号、行同步信号HSYNC、场同步信号VSYNC、数据使能信号DATA_EN和点时钟输入DCLK。依据AMLCD数据手册所需求的时序,确认扫描时序和相应的时序参数如图2所示。一般,图形终端显现器扫描制式与广播电视的规范有点不同,须依据显现模块所供给的时刻要求来确认扫描时序,其间的行场同步的前后肩,能够依据需求进行微调,一般为了防止每行的第一个象素丢掉,要求行同步后肩C与行同步脉冲宽B尽量持平。图2中的点时钟为20MHz,行周期为650个时钟周期,场周期为615个行周期(场频为50Hz)。
3 LCDVGA操控器规划
规划行场扫描时序,一般有两种办法:查找表办法和编程逻辑办法。查找表办法首要由存储芯片构成,如SRAM、EPROM、PORM等。使用时,先依据所要发生的时序在存储单元写入相应的数值,查表时再从表内读出时应存储单元的数值,以构成扫描时序。扫描时序查找表分为行扫描时序查找表和场扫描时序查找表。场扫描时序查找表的输入时钟由行同步脉冲供给。用查找表构成时序的办法存在体积大、核算烦琐的缺陷。跟着大规模逻辑芯片的呈现,使用编程逻辑办法发生行场扫描时序是一个发展方向。这种办法具有电路简略、功用强、修正便利、可靠性高级长处。图3为LCD操控器的框图。
在本规划中,点时钟DCLK由处理器DSP的体系时钟40MHz经数字锁相环二分频得到。点时钟驱动行时序生成器,发生图2所示的行同步信号HS和行消隐信号HB。为防止毛刺,操控器规划选用同步规划办法,如图3所示,行同步信号HS经过一个微分电路,发生一个点时钟周期宽的场时序生成器使能信号。在使能信号有用时,场时序生成器开端计数,并发生场同步信号VS和场消隐信号VB。行消隐信号HB和场消隐信号VB相与后即为数据使能信号DATA_EN。该数据使能信号作为发生帧存地址计数器的计数使能,以确保DATA_EN信号为高时,将象素送给AMLCD显现。在DCLK的上升沿,帧存地址计数器加一,帧存SRAM经过一段延时后,象素数据呈现在总线上。在DCLK的下降沿AMLCD将数据读入。该LCD操控器的规划办法很简略用于VGA视频接口。在VGA接口电路的规划中,不需点时钟电路,只须将行同步信号与场同步信号输出,将数据使能信号作为复合消隐信号输入即可。发生行场扫描时序的VHDL描绘如下:
entity seq_gen is
port(clk_seq : in std_logic;
rst_seq : in std_logic;
lcd_hs_out : out std_logic;
lcd_dataen : out std_logic;
lcd_vs_out : out std_logic;
pix_clk : out std_logic );
end seq_gen;
architecture rtl_seq_gen of seq_gen is
signal lcd_hb : std_logic;
signal lcd_hs : std_logic;
signal lcd_vb : std_logic;
signal lcd_vs : std_logic;
signal clken_vcount : std_logic;
begin
hcount: block
signal hcountreg :std_logic_vector(9 downto 0);
signal hz_temp : std_logic;
signal lcd_hz : std_logic;
begin
process (clk_seq,lcd_hz)
begin
if (lcd_hz = ‘1’) then
hcountreg = (others =>’0′);
elsif clk_seq’event and clk_seq = ‘1’ then
hcountreg = hcountreg +1;
end if;
end process;
lcd_hb = ‘0’ when hcountreg >=600 and hcountreg 650
else ‘1’;
lcd_hs =’0′ when hcountreg >=610 and hcountreg 630
else ‘1’;
hz_temp = ‘1’ when hcountreg = 650 else ‘0’;
lcd_hz =hz_temp or rst_seq;
end block hcount;
diff : block
signal inputrega : std_logic;
signal inputregb : std_logic;
begin
process(clk_seq)
begin
if clk_seq’event and clk_seq=’1′ then
inputregb = inputrega;
inputrega = not lcd_hs;
end if;
end process;
clken_vcount = not inputregb and inputrega;
end block diff;
vcount : block
signal vcountreg : std_logic_vector(9 downto 0);
signal vz_temp : std_logic;
signal lcd_vz : std_logic;
begin
process (clk_seq,lcd_vz)
begin
if(lcd_vz=’1′)then
vcountreg = (others => ‘0’);
elsif clk_seq’event and clk_seq = ‘1’ then
if clken_vcount = ‘1’ then
vcountreg = vcountreg +1;
end if;
end if;
end process;
lcd_vb = ‘0’ when vcountreg >=600 and vcountreg 615
else ‘1’;
lcd_vs =’0′ when vcountreg >=607 and vcounreg 610
else ‘1’;
vz_temp = ‘1’ when vcountreg = 615 else ‘0’;
lcd_vz = vz_temp or rst_seq;
end block vcount;
pix_clk =clk_seq;
lcd_dataen =lcd_hb and lcd_vb;
lcd_hs_out =lcd_hs;
lcd_vs_out =lcd_vs;
end rtl_seq_gen;
这种用VHDL发生扫描时序的办法简略、易读,而且易于修正。在代码中只须修正一些时序参数就能发生恣意时序的波形,具有很好的可重用性。用FPGA Express 3.5半VHDL代码归纳后,经过Foundation 3.1i进行布局和布线,用Foundation供给的门级仿真东西发生的行扫描时序仿真图如图4所示。
选用FPGA技术规划的AMLCD操控器,大大削减了电路板的尺度,一起增加了体系可靠性和规划灵活性。这种用VHDL言语完成现行场扫描时序生成器的办法,具有简洁。易读和可重用性强的特色。该AMLCD操控器已用Xilinx公司的SpartanII系列器材XC2S50完成,并在飞机座舱图形显现体系中完成使用。