搜档网
当前位置:搜档网 › 基于DE1开发板的VGA图像显示

基于DE1开发板的VGA图像显示

基于DE1开发板的VGA图像显示
基于DE1开发板的VGA图像显示

题目基于DE1开发板的VGA图像显示

目录

一简介 (3)

1 功能简介 (3)

2 用途 (3)

3 难度部分 (3)

4 创新部分 (3)

二设计思路 (4)

1 系统整体结构 (4)

2 像素时钟产生模块 (5)

VGA硬件电路 (5)

VGA协议 (6)

3同步信号产生模块 (7)

4显示控制模块 (8)

5图像产生模块 (10)

6 数码管显示模块 (11)

7 串口通信模块 (11)

8端口选择模块 (14)

三实验结果 (16)

四总结 (17)

附录1 (18)

附录2 (21)

一简介

1 功能简介

VGA(Video Graphics Array)是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。本设计是基于altera公司的Development & Education Board 1 上的VGA接口开发的一个图形显示模块。通过VGA协议,可以在显示屏上显示分辨率为640*480,刷新频率为60Hz的彩条及彩色图片。图片数据可以从24bit 宽的bmp图像通过一个C程序来转化成需要的格式。本设计可以通过altera DE1自带的软件来把图片数据下载到sram里,也可以通过串口把数据下载到sram 里。

2 用途

该模块可以用于显示器工厂里对显示屏的坏点检测,也可以在大屏幕上显示需要的图像信息,由于系统简单,可扩展性好,图像更新方便,比传统用PC机控制的方法有成本上的极大优势。并且可以通过加大像素同步信号的频率或者并联几个同样的显示模块来达到控制更大显示屏的目的,有极大的灵活性。

3 难度部分

本设计的难度部分主要在图像产生模块与串口通信模块两部分,在图像产生模块里完成了对ram里压缩格式数据的解压缩,否则未压缩的数据无法完全放到sram里。串口通信模块在开始信号捕捉,数据计数以及数据和时钟的同步上逻辑关系不太好处理,特别是一个进程里只能捕捉一个时钟沿信号,并且对同一信号的赋值只能在同一个进程里,这样就造成捕捉到起始信号的下降沿后无法直接对数据进行计数,只能通过标志位传递来进行同步。

4 创新部分

创新部分在于串口通信模块没有采用常用的状态机加移位寄存器的结构,而是采用直接对号入座的方法,便于对接收到的数据进行变换,使软件和硬件可以共同完成数据的编码解码,增加了系统的灵活性。

二设计思路

1 系统整体结构

系统的整体结构如图所示,本电路包含7个模块。像素时钟产生模块(pixel),同步信号产生模块(sync),显示控制模块(control),图像产生模块(picture_style),数码管显示模块(hex_display),串口通信模块(RS232_RXD),端口选择模块(sram_latch)。

图1 系统整体结构

像素时钟产生模块由系统时钟50MHz分频出25MHz的像素时钟。同步信号产生模块用来产生VGA相关的行同步时钟,场同步时钟以及奇偶场同步信号。显示控制模块定义了两种切换图片的模式,即手动模式和自动模式。图像产生模块里定义了8种显示图像,有从sram里读取的,也有直接产生的。通过计数,循环显示8种图片。数码管显示模块用来在数码管上显示图片的计数。串口通信模块完成与PC通过串口向sram下载图片的功能。端口选择模块用来对sram 的数据源和地址源进行选取。

顶层实体的端口定义如下。

entity vga is

port(

CLOCK_50 :in std_logic;

KEY3 :in std_logic;

SW0 :in std_logic;

VGA_R :out std_logic_vector(3 downto 0);

VGA_G :out std_logic_vector(3 downto 0);

VGA_B :out std_logic_vector(3 downto 0);

VGA_HS :out std_logic;

VGA_VS :out std_logic;

rxd :in std_logic;

mode :in std_logic;

SRAM_ADDR :buffer std_logic_vector(17 downto 0);

SRAM_DQ :inout std_logic_vector(15 downto 0);

HEX0 :out std_logic_vector(6 downto 0);

LEDG :out std_logic_vector(7 downto 0);

LEDR :out std_logic_vector(9 downto 0);

SRAM_WE_N,

SRAM_OE_N,

SRAM_UB_N,

SRAM_LB_N,

SRAM_CE_N :out std_logic

);

end entity;

其中,CLOCK_50为时钟输入引脚,输入50MHz的时钟信号作为系统时钟。KEY3按键是手动切换按钮,每按一次就切换一次画面。SW0开关是自动/手动切换开关,高电平时自动定时切换画面,低电平是用KEY3来控制切换。VGA_R,

VGA_G和VGA_B为RGB数据输入端,每个均为4位宽。VGA_HS是行同步信号。mode为工作模式选择端口,高电平时通过串口通信向sram里写数据,低电平时通过VGA在屏幕上显示图像。由FPGA按VGA时序产生。同理VGA_VS是场同步信号。rxd是RS232串口通信的接收端,SRAM_ADDR为与sram相连的18位地址总线,可0到512K随机寻址。SRAM_DQ为16位数据总线,给出地址后就可以在数据总线上直接进行读写。SRAM_WE_N,SRAM_OE_N, SRAM_UB_N, SRAM_LB_N和SRAM_CE_N为sram的控制总线,均为低电平有效。根据sram的真值表进行相应的控制,这里由于之需要进行读操作,故除SRAM_WE_N接可控制端,其他都直接接地就可以。

2 像素时钟产生模块

图2 像素时钟产生模块

根据VGA协议,像素时钟为大约25MHz的信号,故只需对50MHz的系统时钟二分频就能得到。

图3 分频仿真图

entity pixel is

port(

CLOCK_50 :in std_logic;

pixel_clk :out std_logic

);

end;

architecture arc of pixel is

begin

pixel: --generate 25MHz clock process(CLOCK_50)

variable pixel_clk_t :std_logic;

begin

if CLOCK_50'event and CLOCK_50='1' then

pixel_clk_t:= not pixel_clk_t;

end if;

pixel_clk<=pixel_clk_t;

end process;

end;

VGA硬件电路

DE1的VGA接口自带电阻阵列进行了简单的DA转换,电路图如图4。RGB每个通道都是由4位宽的数据来控制,故能够显示16*16*16=4096种颜色,这就使得可以用此电路显示一些颜色相对复杂的图片。

图4 VGA模块电路图

VGA协议

VGA的显示协议如图2-2。要想在屏幕上显示图像,FPGA需要输出VGA需要的3个同步信号,即像素同步,行同步和场同步。三个信号的时间关系如表2-1所示。具体来说。检测到每个像素同步的上升沿时对RGB数据端口的数据进行更新,即输出数据。行有效期间输出数据,行消隐期间停止输出数据。场有效期间正常输出数据,场消隐期间必须使RGB输出均为0,行同步信号可以输出,也可以不输出。这里场消隐区如果有数据输出,就会造成显示器识别不出数据而显示频率超出范围。行同步和场同步为高电平脉冲和低电平脉冲都可以,因为显示器内部能够自动识别这两种规范,故只要脉冲持续时间及周期对就可以。

图5 VGA时序

Parameter

Vertical Sync Horizontal Sync Time Clocks Lines Time Clocks

Sync pulse time 416800 521 32us 800 Display time 384000 480 640 Pulse width 64us 1600 2 96 Front porch 320us 8000 10 640us 16 Back proch 928us 23200 29 48

表1 VGA时序与时钟关系

3同步信号产生模块

图6 同步信号产生模块

根据VGA协议,需要通过对像素同步信号计数,产生行同步信号VGA_HS 和场同步信号VGA_VS以及奇偶场同步信号VGA_VS_period。同时,在本模块中也产生一些控制信号。

在pixel进程里从50MHz的系统时钟中分频出25MHz的时钟作为像素同步。在href进程里通过查像素同步的个数来确定行同步信号。并为行消隐区不显示数据定义pixel_en信号来进行控制。在vsync进程里通过查行同步脉冲的个数来确定场同步脉冲。在scencewait进程中通过查场的个数来确定自动图片切换时间,这里选择每隔60场自动切换一次图片。

图7 像素同步信号与行同步信号仿真

图8 像素同步信号与行同步信号仿真的局部放大

仿真1显示了像素同步时钟与行同步信号的关系,其中pixel_count是对pixel_clk的计数,当数到31E,即798时,VGA_HS变为高电平,之后又数到96后变为低电平,然后重复,这就产生了行同步信号,href_count是对行同步信号的脉冲计数。同理,行同步信号与场同步信号之间的关系也是如此。由于本模块的其他信号时间差距比较大,比如像素时钟为25MHz,而场同步为60Hz,故仿真起来很不方便,所以只是从示波器上观察产生的信号是否正确。

entity sync is

port(

VGA_HS :out std_logic;

VGA_VS :out std_logic;

pixel_clk :in std_logic;

pixel_en :out std_logic;

VGA_VS_period :buffer std_logic;

href_count :buffer integer range 0 to 525;

pixel_count :buffer integer range 0 to 798;

href_en :buffer std_logic

);

end;

architecture arc of sync is

constant href_all_dot:integer:=798; --800 pixel dots in a line including blanking zone

constant href_sy_dot :integer:=96; --href high level time is 96 dot

constant ver_all_line:integer:=525;

signal VGA_HS_period:std_logic;

begin

href: --generate Hsync -high level puls process(pixel_clk,href_en)

begin

if pixel_clk'event and pixel_clk='1' then

if pixel_count

VGA_HS_period<='1';

pixel_en<='0';

elsif pixel_count<144 then

VGA_HS_period<='0';

pixel_en<='0';

elsif pixel_count<784 then --pixel enable when 136-784

VGA_HS_period<='0';

pixel_en<='1';

elsif pixel_count

VGA_HS_period<='0';

pixel_en<='0';

end if;

if pixel_count=href_all_dot then

pixel_count<=0;

else pixel_count<=pixel_count+1;

end if;

end if;

if href_en='0' then

pixel_en<='0'; --stop pixel when href is disabled end if;

VGA_HS<=VGA_HS_period;

end process;

vsync: --generate Vsync process(VGA_HS_period)

begin

if VGA_HS_period'event and VGA_HS_period='1' then

if href_count<2 then --pull down to 0 when Vsync

VGA_VS_period<='0';

href_en<='0';

elsif href_count<35 then

VGA_VS_period<='1';

href_en<='0';

elsif href_count<515 then

VGA_VS_period<='1';

href_en<='1'; --href enable when 35-515 elsif href_count

VGA_VS_period<='1';

href_en<='0';

end if;

if href_count=ver_all_line then

href_count<=0;

else href_count<=href_count+1;

end if;

end if;

VGA_VS<=VGA_VS_period;

end process;

end;

4显示控制模块

图9 显示控制模块

数够60场的时间后auto_picture_count_s产生一个上升沿,按键KEY3按一下产生一个低电平脉冲。故定义picture_count_s为auto_picture_count_s与KEY3相异或,在Style_control进程里识别picture_count_s的上升沿,每个上升沿到来就让图片计数加一。这样就能达到既能手动控制又能自动控制的目的。

图10 显示控制模块时序仿真

如图,SW0为低电平时是手动模式,此时没按一次KEY3,即KEY3段产生一个低电平脉冲,picture计数加1。不按KEY3时picture不变。当SW0为高电平时为自动模式,此时隔一定的时间picture自动加1,并且在自动模式下,每按一次KEY3,picture也加1。达到了手动与自动相结合控制的目的。

entity control is

port(

VGA_VS_period :in std_logic;

SW0 :in std_logic;

KEY3 :in std_logic;

picture :buffer integer range 0 to 7

);

end;

architecture arc of control is

signal scence_wait :std_logic;

signal SW0_t :std_logic;

signal picture_count_s:std_logic;

signal auto_picture_count_s:std_logic;

begin

scencewait: --change picture after some scences process(VGA_VS_period)

variable scence_wait_t :integer range 0 to 31;

begin

if VGA_VS_period'event and VGA_VS_period='1' then

if scence_wait_t<30 then

scence_wait_t:=scence_wait_t+1;

else scence_wait_t:=0;

scence_wait<=not scence_wait;

end if;

end if;

end process;

SW0_t<=SW0;

auto_count_s: --change picture after push SW0 process(SW0_t,scence_wait)

begin

if SW0_t='1' then

if scence_wait'event and scence_wait='1' then

auto_picture_count_s<=not auto_picture_count_s;

end if;

else auto_picture_count_s<='1';

end if;

end process;

picture_count_s<=auto_picture_count_s xor KEY3; --two ways to control

Style_control:

process(picture_count_s)

begin

if picture_count_s'event and picture_count_s='1' then

picture<=picture+1;

end if;

end process;

end;

5图像产生模块

图11 图像产生模块

Picture_style进程是对显示的图片进行控制。这里定义了8种显示图像,0为自定义的图片;1为纯白;2为纯黑;3为纯红;4为纯绿;5为竖直彩条;6为竖直渐变彩条;7为水平彩条。每个像素时钟到来时,就按照图片计数里的数字显示相应的图片。其中第0种情况是读取sram里的数据来进行显示,由于sram 的读取时间为10ns,而FPGA的时钟周期为20ns,故可以直接对sram进行读取。这里用到一个状态机是因为对原始图像数据进行了压缩,把空余的空间也用上了,即用3个存储单元储存4个像素的数据。故读取的时候需要读三个数据后空一次,并把每次读取的数据跟RGB三个通道对应好。

分辨率是640*480,每个像素由RGB3个分量组成,每个分量由四位二进制数来表示,这样一幅彩色图片在不压缩的情况下要用640*480*12bit,即大约460K字节.所以需要外部存储器来储存图像信息。开发板上有一片512k字节的sram,并且sram的存取相对简单,故这里用sram作为存储器件。Sram的硬件连接如图9。由于sram的数据总线是18位,一个储存单元只放一个像素会空出四位,即加入一个像素的数据为F(R)F(G)F(B),则在sram中储存格式为0FFF。而且这样用存一张图片要用400k字节的空间,sram无法提供这么大的空间。故只能考虑对数据进行压缩,即(FFF)(F FF)(FF F)(FFF),用三个存储单元储存4个像素的数据,这就要求在用VHDL实现的时候需要注意以下读取格式。

图12 sram硬件连接图

本部分代码比较长,故在附录1中给出。

由于本电路只能显示已经储存在sram里的特定格式的图片,故需要先用自

己编写的c程序对bmp格式的图片进行转换,并用altera自带的软件把数据先烧写到sram中。图像处理的C程序见附录2。

6 数码管显示模块

图13 数码管显示模块

本模块的作用是把对显示图像的计数用数码管显示出来,即显示0-7。

图14 数码管显示模块仿真波形

entity hex_display is

port(

HEX0 :out std_logic_vector(6 downto 0);

CLOCK_50 :in std_logic;

picture :in integer range 0 to 7

);

end;

architecture art of hex_display is

begin

hex_display:

process(picture,CLOCK_50)

begin

if CLOCK_50'event and CLOCK_50='1' then

case picture is

when 0 =>HEX0<="1000000";

when 1 =>HEX0<="1111001";

when 2 =>HEX0<="0100100";

when 3 =>HEX0<="0110000";

when 4 =>HEX0<="0011001";

when 5 =>HEX0<="0010010";

when 6 =>HEX0<="0000010";

when 7 =>HEX0<="1011000";

when others=>NULL;

end case;

end if;

end process;

end;

7 串口通信模块

图15 串口通信模块

该模块的功能是通过串口从PC机上读取图像信息,并把读到的图像数据写

到sram里面,以供在图像输出模式时进行读取。在本模块中,包含一个子模块用于产生波特率为115200的时钟。

由前面可知一个图片的数据量为450K byte,而传输速率为115200/10= byte/s,故理想的最小传输时间为450/=39s。这是用PC机通过串口传输原始格式的图片数据的最小时间。

捕捉rxd端在空闲状态下的下降沿,来识别数据的开始,由于数据传输格式是8位数据,无奇偶校验,一个停止位,故检测到开始信号后经过八个时钟可以读取八位数据,之后就是停止位。在读到停止位的时候把读到的完整数据写到sram里,由于sram的数据总线宽度为16位,而串口一次只能传8位,故需要连续采集两次然后一起写入sram,模块里的double_done就是用来标志连续采集完两个字节,可以发送的标志位。LEDG和LEDR总共18个led灯,用来以二进制形式显示写到的地址,可以大体检测传输数量是否正确。

图16 串口通信模块SignalTapII分析

上图为用SignalTapII进行逻辑分析的波形图。用串口工具在rxd端输入0x01,clk为波特率是115200bps的时钟信号。Data储存串口读到的信号。Bitcount是对读入的数据位进行计数。

无数据时rxd为高电平,此时模块处于idle状态,当rxd端有数据,首先捕捉起始信号,即下降沿,之后在每个时钟的上升沿读取rxd端的数据,并按位存到data中,每读一位bitcount就加1,直到读完1个起始位,8个数据位。由图可见读完8位数据位后data的数为01h,与发送数据一致。

这里需要注意的一点就是如果FPGA产生的clk比PC的波特率频率高,则会出现同一个数据位读两次的错误,而如果小一些,则会出现某一数据位无法读出的情况,即跳过了一位。如果二者频率相等,也会有很小的概率读取到不稳定的信号。故这种传输机制误码是无法避免的。

entity RS232_RXD is

port(

CLOCK_50 :in std_logic;

rxd :in std_logic;

mode :in std_logic; --0:reset 1:transmit

LEDG :out std_logic_vector(7 downto 0); --display the address

LEDR :out std_logic_vector(9 downto 0);

SRAM_ADDR_W :buffer std_logic_vector(17 downto 0);

SRAM_DQ_W :out std_logic_vector(15 downto 0)

);

end;

architecture arc of RS232_RXD is

component baud

port(

CLOCK_50 :in std_logic;

clk :out std_logic

);

end component;

signal clk :std_logic;

signal rxdata_start:std_logic:='0'; --set to 1 when capture the falling edge of rxd when in idle state(rxd_done=0)

signal rxd_done :std_logic:='1'; --0 whne transmiting while 1 when transmission is done.

signal double_done :std_logic:='0'; --collect two byte then write in to ram

signal bitcount :integer range 0 to 15; --1 start, 8 data,1 stop.

signal data :std_logic_vector(7 downto 0);

begin

u1:baud port map(CLOCK_50,clk);

process(rxd)

begin

if rxd_done='1' then

if rxd'event and rxd='0' then

rxdata_start<='1';

end if;

end if;

if bitcount=10 then

rxdata_start<='0';

end if;

end process;

txdata:

process(clk)

variable bitcount_t :integer range 0 to 15;

begin

case bitcount_t is

when 0 => NULL;--SRAM_DQ_W<=(others=>'Z');--start

when 1 => data(0)<=rxd;rxd_done<='0'; --data

when 2 => data(1)<=rxd;

when 3 => data(2)<=rxd;

when 4 => data(3)<=rxd;

when 5 => data(4)<=rxd;

when 6 => data(5)<=rxd;

when 7 => data(6)<=rxd;

when 8 => data(7)<=rxd;

when 9 => rxd_done<='1'; --stop

when others => NULL;

end case;

if mode='1' then

if rxdata_start='1' then

if clk'event and clk='1' then

bitcount_t:=bitcount_t+1;

if bitcount=9 then --write data into ram

double_done<=not double_done;

if double_done='0' then

SRAM_DQ_W(15 downto 8)<=data;

elsif double_done='1' then

SRAM_DQ_W(7 downto 0)<=data;

end if;

end if;

if bitcount=8 then

if double_done='0' then

SRAM_ADDR_W<=SRAM_ADDR_W+1;

LEDG<=SRAM_ADDR_W(7 downto 0);

LEDR<=SRAM_ADDR_W(17 downto 8);

end if;

end if;

end if;

else

rxd_done<='1';

bitcount_t:=0;

end if;

else

SRAM_ADDR_W<=(others=>'0');

bitcount_t:=0;

double_done<='1';

end if;

bitcount<=bitcount_t;

end process;

end;end;

8端口选择模块

图17 端口选择模块及其RTL视图

由于图像产生模块和串口通信模块都要对sram进行读写,故需要一个锁存器对端口进行锁存,以免信号混乱或者多驱动源的错误,同时,本模块也对sram 进行一些端口设置。通过mode来选择sram的地址和数据的输入源,SRAM_ADDR_R和SRAM_DQ_R与图像产生模块相连。SRAM_ADDR_W和SRAM_DQ_W与串口通信模块相连。根据mode端选择从SRAM_ADDR和SRAM_DQ输出。向sram里写数据的时候SRAM_WE_N为低电平,读的时候需要为高电平。从RTL视图可以看出生成了2个数据选择器,mode为控制端,与模块欲完成功能一致。下面是仿真波形。

图18 端口选择模块仿真波形

entity sram_latch is

port(

mode :in std_logic;

SRAM_ADDR :out std_logic_vector(17 downto 0);

SRAM_DQ :out std_logic_vector(15 downto 0);

SRAM_ADDR_R :in std_logic_vector(17 downto 0);

SRAM_DQ_R :in std_logic_vector(15 downto 0);

SRAM_ADDR_W :in std_logic_vector(17 downto 0);

SRAM_DQ_W :in std_logic_vector(15 downto 0);

SRAM_WE_N,

SRAM_OE_N,

SRAM_UB_N,

SRAM_LB_N,

SRAM_CE_N :out std_logic );

end;

architecture arc of sram_latch is

begin

SRAM_OE_N<='0';

SRAM_UB_N<='0';

SRAM_LB_N<='0';

SRAM_CE_N<='0';

process(mode)

begin

if mode='0' then --display

SRAM_WE_N<='1';

SRAM_ADDR<=SRAM_ADDR_R;

SRAM_DQ<=SRAM_DQ_R;

else SRAM_WE_N<='0'; --transmission

SRAM_ADDR<=SRAM_ADDR_W;

SRAM_DQ<=SRAM_DQ_W;

end if;

end process;

end;

三实验结果

图19 从ram里读取图像0信息图20 显示图像1纯白图像

图21 显示图像2纯蓝图像图22 显示图像3纯红图像

图23 显示图像4纯绿图像图24 显示图像5竖直彩条

图25 显示图像6颜色渐变图26 显示图像7水平彩条

四总结

通过本电路的实现,我对VGA接口,sram的读写控制以及图像的格式处理有了比较全面的了解。通过串口通信模块的编写,对通信协议的编写也有了一定的了解。但是本实验还存在一些遗留问题。

一是sram的存储空间毕竟还是有限,如果想储存几张照片来进行照片的切换时无法实现的,故考虑用sdram来实现,但是sdram的速度相对sram和FPGA 比较慢,一般需要通过并联几个sdram的方法来弥补速度缺陷,但是在开发板只有一片sdram的情况下无法试验,另外就是采用动态加载的方式,即把几个图片的数据都存在sdram里,切换时从sdram加载到sram里,然后再对sram 进行实时读取,这种方法有待于进一步实验。

二是想要显示动态图像的话一般是用双口ram来实现,如果用双口ram也可以做到串口下载与图像显示实时进行,并能在此基础上实现简单动画效果,但由于片内资源有限,无法做出足够大的双口ram。单口sram由于速度比较快,在FPGA加入PLL的情况下理论上应该可以实现动态图像的显示,但是时序控制会复杂很多,需要再做相关实验。

三是虽然可以用串口下载图片,比用软件下载操作简单一些,但是现有的串口助手没有太合适的,虽然有可以以HEX格式传送文件的工具,但是由于没压缩的图片数据量比较大,串口工具无法一次加载所有数据,只能分段加载,造成比用altera自带软件操作更繁琐,而用超级终端还需要遵循它特定的协议,故理想状况下需要自己编写一个串口助手能一次性加载900K字节的数据并批量发送,计划以后用QT来实现。

四是如串口通信模块里所说,由于主机和从机的波特率时钟相互有三种关系,并且在本模块定义的传输机制下每种情况都有误码的概率,因此希望找到一种方法可以消除误码,或许加入奇偶校验可以在一定程度上降低误码率。

另外就是在系统优化方面速度和面积优化都没有考虑,还需要进行进一步优化。

附录1

entity picture_style is

port(

VGA_R :out std_logic_vector(3 downto 0);

VGA_G :out std_logic_vector(3 downto 0);

VGA_B :out std_logic_vector(3 downto 0);

SRAM_ADDR_R :buffer std_logic_vector(17 downto 0);

SRAM_DQ_R :in std_logic_vector(15 downto 0);

picture :in integer range 0 to 7;

pixel_en :in std_logic;

pixel_clk :in std_logic;

href_en :in std_logic;

mode :in std_logic;

href_count :in integer range 0 to 525;

pixel_count :in integer range 0 to 798

);

end;

architecture art of picture_style is

begin

picture_style:

process(picture,pixel_en,pixel_clk,href_en)

variable rgb_state :integer range 0 to 3;

variable RGB_add :std_logic_vector(11 downto 0);

variable rgb_temp1b,rgb_temp2b,rgb_temp3g,rgb_temp4b,rgb_temp5g,rgb_temp6r:std_logic_vector(3 downto 0);

begin

if mode='0' then

if pixel_en='1' then

if pixel_clk'event and pixel_clk='1' then

case picture is

when 0 => --picture in sram

if href_count<515 then

if rgb_state=3 then

rgb_state:=0;

else rgb_state:=rgb_state+1;

end if;

case rgb_state is

when 0 => --read 4 byte one time,RGBR GBRG BRGB .so read 3 times while display 4 pixels

SRAM_ADDR_R<=SRAM_ADDR_R+1;

VGA_R<=SRAM_DQ_R(11 downto 8);

VGA_G<=SRAM_DQ_R(7 downto 4);

VGA_B<=SRAM_DQ_R(3 downto 0);

rgb_temp1b:=SRAM_DQ_R(15 downto 12);

when 1 =>

SRAM_ADDR_R<=SRAM_ADDR_R+1;

VGA_R<=SRAM_DQ_R(7 downto 4);

VGA_G<=SRAM_DQ_R(3 downto 0);

VGA_B<=rgb_temp1b;

rgb_temp2b:=SRAM_DQ_R(11 downto 8);

rgb_temp3g:=SRAM_DQ_R(15 downto 12);

when 2 =>

SRAM_ADDR_R<=SRAM_ADDR_R+1;

VGA_R<=SRAM_DQ_R(3 downto 0);

VGA_G<=rgb_temp3g;

VGA_B<=rgb_temp2b;

rgb_temp4b:=SRAM_DQ_R(7 downto 4);

rgb_temp5g:=SRAM_DQ_R(11 downto 8);

rgb_temp6r:=SRAM_DQ_R(15 downto 12);

when 3 =>

VGA_R<=rgb_temp6r;

VGA_G<=rgb_temp5g;

VGA_B<=rgb_temp4b;

when others => NULL;

end case;

else SRAM_ADDR_R<=(others=>'0');--b"00011";--4AFF";--

VGA_R<="0000"; --black

VGA_G<="0000";

VGA_B<="0000";

rgb_state:=0;

end if;

when 1 =>

VGA_R<="1111"; --white

VGA_G<="1111";

VGA_B<="1111";

when 2 =>

VGA_R<="0000"; --blue

VGA_G<="0000";

VGA_B<="1111";

when 3 =>

VGA_R<="1111"; --red

VGA_G<="0000";

VGA_B<="0000";

when 4 =>

VGA_R<="0000"; --green

VGA_G<="1111";

VGA_B<="0000";

when 5 => --vertical colour bar

if pixel_count<224 then

VGA_R<="1111";

VGA_G<="1111";

VGA_B<="1111";

elsif pixel_count<304 then

VGA_R<="0000";

VGA_G<="1111";

VGA_B<="0000";

elsif pixel_count<384 then

VGA_R<="0000";

VGA_G<="0000";

VGA_B<="1111";

elsif pixel_count<464 then

VGA_R<="1111";

VGA_G<="1111";

VGA_B<="0000";

elsif pixel_count<544 then

VGA_R<="0000";

VGA_G<="1111";

VGA_B<="1111";

elsif pixel_count<624 then

VGA_R<="1111";

VGA_G<="0000";

VGA_B<="1111";

elsif pixel_count<704 then

VGA_R<="1111";

VGA_G<="0000";

VGA_B<="0000";

else

VGA_R<="0000";

VGA_G<="0000";

VGA_B<="0000";

end if;

when 6 => --colour changed gradually

if href_count<515 then

RGB_add:=RGB_add+1;

VGA_R<=RGB_add(3 downto 0);

VGA_G<=RGB_add(7 downto 4);

VGA_B<=RGB_add(11 downto 8);

else RGB_add:=(others=>'0');

end if;

when others => --horizontal colour bar

if href_count<155 then

VGA_R<="1111";

VGA_G<="1000";

VGA_B<="0100";

elsif href_count<270 then

VGA_R<="1000";

VGA_G<="0000";

VGA_B<="1111";

elsif href_count<390 then

VGA_R<="1111";

VGA_G<="1111";

VGA_B<="0000";

else

VGA_R<="1111";

VGA_G<="0000";

VGA_B<="1111";

end if;

end case;

end if;

else VGA_R<="0000"; --else must output 0,or there won't any picture on the screen

VGA_G<="0000";

VGA_B<="0000";

end if;

end if;

end process;

end;

VGA图像显示控制器 一、摘要和关键词 摘要:VGA显示屏显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。通过控制扫描计数器不同值时对RGB三原色信号的控制,来完成显示设计。 关键词:行列扫描行列同步RGB三原色控制 二、设计任务要求 实验目的 1. 熟练掌握VHDL 语言和QuartusII 软件的使用; 2. 理解状态机的工作原理和设计方法; 3. 掌握利用EDA 工具进行自顶向下的电子系统设计方法; 4. 熟悉VGA 接口协议规范。 实验要求: 设计一个VGA 图像显示控制器,达到如下功能: 显示模式为640×480×60HZ 模式; 用拨码开关控制R、G、B(每个2 位),使显示器可以显示64种纯色; 在显示器上显示横向彩条信号(至少6 种颜色); 在显示器上显示纵向彩条信号(至少8 种颜色); 在显示器上显示自行设定的图形、图像等。 选做:自拟其它功能。 三、实验原理 1、显示控制原理 常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(Green Red Blue)基色组成。显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT、对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。VGA显示控制器控制CRT显示图象的过程如图1所示

编号: 版本: LCD-VGA微型显示驱动电路 软件详细设计说明书 编写: 2015年05月18日 校对: 2015年06月12日 审核: 2015年06月15日 批准: 2015年06月20日 目录 一、项目背景 (2) 二、软件功能介绍 (2) 三、软件特性介绍 (2) 四、软件的运行环境介绍 (2) 五、系统的物理结构 (2) 六、系统总结构 (3) 七、系统各个模块介绍 (5) 七、算法设计 ............................................................ 错误!未定义书签。 八、接口设计 ............................................................ 错误!未定义书签。 九、需求规定 (10) 十、测试计划 (10)

一、项目背景 随着便携式多媒体终端需求量迅速增加,在视频解码等方面对芯片低功耗的要求也越来越高。因此,只有将模拟视频信号转换成为符合ITU-R BT、656标准的数字信号,才可方便地利用FPGA或者DSP甚至PC机来进行信号处理。本模块就就是利用TI公司的超低功耗视频解码芯片TVP5150对视频信号A/D解码,由单片机通过I2C总线控制,实现驱动VGA级别(640X480)的微型显示模组,并预留地址数据等接口,作为模块验证以及后续数字信号处理之用。 二、软件功能介绍 本系统主要由视频转换模块TVP5150、按键模块、8051内核单片机与液晶图形缩放引擎(A912)组成,系统框图6、1所示。STC单片机通过I2C接口控制其余三部分模块的工作,视频解码IC把复合视频转换成标准8位的ITU-RBI、656格式的数字信号传输到A912,A912通过解码矩阵电路把解调后的信号转换成三基色RGB信号,最后通过增益/偏移控制、伽马校正、抖动处理与图形缩放变RGB信号输出到液晶屏、 三、软件特性介绍 以STC单片机 MCU为控制中心,以视频转换芯片TVP5150为硬件核心。电路将模拟视频信号编码为ITU-R BT.656类型的数据流。单片机管理整个工作流程,缩放引擎芯片进行图像处理,把数据流转换为RGB信号,最终在液晶屏上获得显示图像。该显示器结构轻薄,电路简单,性能可靠,图像显示清晰稳定。 四、软件的运行环境介绍 软件应在以下环境中运行: 硬件环境:选用256字节 RAM+1K AUX-RAM、4KB ROM、S0P 型号为STC11F04E 单片机 计算机软件:采用C语言进行编译并生成相应执行文件格式,在STC11F04E 单片机上运行。 五、系统的物理结构 微型显示嵌入式软件中的硬件就是由主控、显示驱动模块、按键输入模块、视频解码器模块TVP5150组成,其物理结构图如下图所示

实验五 VGA图像显示控制 一实验目的 1.进一步掌握VGA显示控制的设计原理。 2.了解图像的存储和读取方法。 3.进一步掌握4×4键盘或PS/2键盘接口电路设计方法。 4.掌握状态机设计复杂控制电路的基本方法。 二硬件需求 1.EDA/SOPC实验箱一台。 三实验原理 VGA图像显示控制利用实验三中学习的《VGA显示控制模块》显示存储于ROM中的图像数据。 要显示的图像是四块64*64像素大小的彩色图片,通过键盘控制可以选择不同的图片显示。图像可以在屏幕上移动(水平和垂直方向每帧分别移动“H_Step”点和“V_Step”点),通过键盘改变“H_Step”和“V_Step”的值即可改变其移动速度和方向。图像碰到屏幕边沿会反弹回去。如图5.1所示 H_Step V_Step 图5.1 VGA图像显示控制示意图 实验中要用到4×4键盘、VGA显示控制、ROM等模块,在《实验三常用模块电路的设计》中已经讲述,可以直接使用已做好的模块(可能需要修改部分代码)。键盘也可以使用PS/2接口键盘,这样可以输入更多的字符。 四实验内容 1、图5.2是整个设计的顶层电路。

图5.2 VGA图像显示控制顶层电路图 2、实验三中学习的几个模块 ①“Read_Keyboard”模块与实验三中的4×4键盘模块一致; ②四个ROM模块使用宏功能模块实现,并设置其内存初始化文件分别为“FBB.mif”、“dog.mif”、“cat.mif”、“flower.mif”,如图5.3所示。当然也可以用其他图片(大小为64*64)使用“BmpToMif”软件生成对应的“mif”文件,如图5.4所示。

基于FPGA 的VGA显示控制 摘要 VGA(Video Graphics Array)即视频图形阵列,是IBM公司1987年推出的一种传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛应用。 本次课程设计是基于FPGA和主芯片为 EP4CE30F23C8N的ALTER公司的开发板Cyclone IV来实现的。数字图像信息在VGA接口显示器正确、完整地显示,涉及到时序的构建和数字图像信息的模拟化两方面,提出一种能够广泛应用的VGA显示接口方案,详细阐述了数字图像数据DA转化并输出到VGA接口显示器显示的方法,其中包括接口的硬件设计、视频DA转换器的使用方法、通过FPGA构造VGA时序信号的方法等等。方案可以应用于各种仪器,数字视频系统、高分辨率的彩色图片图像处理、视频信号再现等。 课设主要用到的芯片是ADV7123,它是一款高速、高精度数模转换芯片。拥有三路十位D/A转换器,能够将代表颜色的数据锁存到数据寄存器中,然后通过D/A 转换器转换成模拟信号输出,得到我们要的色彩。

VGA显示的硬件设计和原理 1.1 FPGA主芯片 课程设计所用开发板的主芯片是EP4CE30F23C8N——Cyclone IV,其由Altera公司开发,值得注意的是该开发板所支持的QUARTUS II的版本较高,并且11.0的版本较12.0的版本编译好的程序更好下载。 图-1 1.2 ADV7123 实现VGA的控制显示主要用到的芯片就是ADV7123,ADV7123由完全独立的三个I0位高速D/A转换器组成,RGB(红绿蓝)视频数据分别从R9~R0、G9~G0、B9~B0输入,在时钟CLOCK的上升沿锁存到数据寄存器中,然后经告诉D/A转换器转换成模拟信号。三个独立的视频D/A转换器都是电流型输出,可以接成差分输出,也可以接成单端输出。DE2-115上按单端输出,在模拟输出端用75欧姆电阻接地,以满足工业标准。低电平有效的BLANK信号为复合消隐信号,当BLANK为低电平时,模拟视频输出消隐电平,此时从R9~R0,G9~G0,B9~B0输入的所有数据被忽略。BLANK和SYNC都是在CLOCK 的上升沿被锁存的。 图-2是ADV7123的功能原理图:

数字电路综合实验 报告 学校:北京邮电大学 学院:信息与通信工程学院 专业:通信工程 班级:2008211115 学号:08210460 班内序号:30 姓名:唐秋月 2011年1月5日

VGA图像显示控制器 一、摘要和关键词 摘要:VGA显示屏显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。通过控制扫描计数器不同值时对RGB三原色信号的控制,来完成显示设计。 关键词:行列扫描行列同步RGB三原色控制 二、设计任务要求 实验目的 1. 熟练掌握VHDL 语言和QuartusII 软件的使用; 2. 理解状态机的工作原理和设计方法; 3. 掌握利用EDA 工具进行自顶向下的电子系统设计方法; 4. 熟悉VGA 接口协议规范。 实验要求: 设计一个VGA 图像显示控制器,达到如下功能: 显示模式为640×480×60HZ 模式; 用拨码开关控制R、G、B(每个2 位),使显示器可以显示64种纯色; 在显示器上显示横向彩条信号(至少6 种颜色); 在显示器上显示纵向彩条信号(至少8 种颜色); 在显示器上显示自行设定的图形、图像等。 选做:自拟其它功能。 三、实验原理 1、显示控制原理 常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(Green Red Blue)基色组成。显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT、对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。VGA显示控制器控制CRT显示图象的过程如图1所示

基于FPGA的VGA图像显示与控制 课程要求:采用verilog语言,基于FPGA的VGA图像显示,即能够在显示器上实现动态彩色图像的显示。 VGA显示接口的理论分析:硬件采用CycloneII系列的EP2C20Q240C8N,它含有240个引脚。对于VGA的显示器遵循800*600@75模式,其中800是指每行中显示的像素的个数,而600是指屏幕每一列所包含的像素的个数。 VGA工业标准规定了具体地,在扫描过程中的时序图如下: 行扫描时序图 场扫描时序图 每场信号对应625个行周期,其中600行为图像显示行,每场有场同步信号,该脉冲宽度为3个行周期的负脉冲;每行显示行包括1056个点时钟,其中800点为有效显示区,每行有一个行同步信号的负脉冲,该脉冲宽度为80个点时钟。这样我们可以知道,行频为625*75=46857Hz。需要的点时钟的频率为:625*1056*75=49.5MHz约为50MHz。由上图可知,实际上在真正的实现过程中,每一行扫描所花的时间实际上比显示一行的像素所花的时间多了1056-800=256个像素点。同理,每一场的扫描时间多了625-600=25个行时间。 设计思路: 我们采用BmpToMif工具把BMP格式的图像转换为.mif文件。利用QuartusII7.2自带的MegaWizard Plug-In Manager产生一个ROM存储器,并用其来初始时.mif 文件。即将图像文件写入到存储器里面。然后利用编程来控制图像的显示。 设计步骤: 1、工程创建:创建一个Project取名字为vga,在创建工程的向导中选着CycloneII 系列的EP2C20Q240C8。 2、代码书写:新建一个Verilog HDL File编写程序代码如下: `timescale 1ns/1ps module tupian (clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b,addr); input clk,rst_n;

《电子设计自动化》 课程设计 题目:VGA 图像显示控制器 院(系): 年级: 班级: 姓名: 学号: 指导老师:

摘要:本文介绍了一种利用可编程逻辑器件实现VGA图像显示控制的方法,阐述了VGA图像显示控制器中VGA显像的基本原理以及功能演示,利用可编程器件FPGA设计VGA图像显示控制的VHDL设计方案,并在Altera公司的QuartusII 软件环境下完成VGA模块的设计。而且给出了VGA模块的设计思路和顶层逻辑框图。最终实现VGA图像显示控制器,VGA图像控制器是一个较大的数字系统,传统的图像显示的方法是在图像数据传输到计算机,并通过显示屏显示出在传输过程中,将图像数据的CPU需要不断的信号控制,所以造成CPU的资源浪费,系统还需要依靠计算机,从而减少了系统的灵活性。FPGA芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要,产品的升级换代和方便迅速。

目录 设计思路 ............................................................................................. - 1 - 一、系统设计 ........................................................................... - 1 - 1.设计要求 ........................................................................... - 1 - 2.设计方案 ........................................................................... - 1 - 二、单元电路设计.................................................................... - 2 - 1.VGA显示控制模块............................................................ - 3 - 2.数据存储模块.................................................................... - 7 - 3.锁相环模块........................................................................ - 8 - 三、软件设计 ......................................................................... - 10 - 1.VHDL语言........................................................................ - 10 - 2.Quartus II简介................................................................. - 11 - 3.硬件开发工具.................................................................. - 12 - 四、硬件验证 ......................................................................... - 14 -附录................................................................................................... - 15 - 1.程序 ................................................................................. - 15 - 2.仪器设备名称型号.......................................................... - 17 - 3.系统的性能指标.............................................................. - 18 -

题目基于FPGA的VGA图像汉字显示及PS/2键盘控制设计与应用 1.方案设计及工作原理 1.1 VGA模块方案设计 采用模块化设计方法,我们对VGA 图形控制器按功能进行层次划分。本设计的VGA控制器主要由以下模块组成:VGA 时序控制模块、ROM 内存地址控制模块、ROM内存模块、按键扫描控制模块。如图 1 所示。 图1.方案模块框图 1.2工作原理 VGA时序控制模块ROM内存地址控制模块ROM 按键扫描控制模块50MHz 5Hz addr data 首坐标xx、yy VGA 接口RGB HS、VS D/A CRT 根据VGA的显示协议,可以选择不同的显示分辨率。本设计选择的是800*600的分辨率。根据相应协议,在“VGA时序控制模块”对行扫描信号HS和场扫描信号VS进行相应的时序控制(具体控制详细信息见“VGA驱动原理”资料文档)。“ROM内存地址控制模块”根据“按键扫描控制模块”获得的图片显示首坐标xx、yy信息和“VGA时序控制模块”传送过来的ht(列计数器值)、vt(行计数器值)及相关控制信号计算出正确的内存地址,从rom中取出所需要的像素点的三基色数据。

1.3 PS/2接口电路的工作原理 PS/2协议和接口最初是IBM公司开发并推广使用的一种应用于键盘/鼠标的协议和接口,PS/2键盘按键接口是6芯的插头与PC机的键盘相连接,插头、插座定义如图所示。 键盘/鼠标接口的数据线和时钟线采用集电极开路结构,平时都是高电平当这些设备等待发送数据时,它首先检查clock是否为高。如果为低,则认为PC抑制了通讯,此时它缓冲数据直到获得总线的控制权。如果clock为高电平,设备则开始向PC发送数据。一般都是由ps2设备产生时钟信号。发送按帧格式。数据位在clock为高电平时准备好,在clock下降沿被PC读入。图3所示是按下Q 键的时序图“Q”键的扫描码从键盘发送到计算机(通道A是时钟信号,通道B 是数据信号)。因本设计只需进行控制,所以PS/2模块并未设计转码功能。 2.模块设计及仿真 2.1 VGA显示模块 图片想要在显示器上显示出来,它主要需要5个信号,行同步信号(HS)、场同步信号(VS)和RGB三基色信号。 VGA时序控制模块是须严格按照VGA

基于FPGA的VGA彩条图像显示 1. 设计的任务及内容 在电子电路领域中,设计自动化工具已经被广大电子工程师所接受,它必将取代人工设计方法并成为主要的设计手段。目前,Verilog语言已经成为各家EDA工具和集成电路厂商认同和共同推广的标准化硬件描述语言,随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展,这种发展必将导致集成电路的设计规模日益增大。 该实训的设计是用Verilog语言硬件描述语言设计出一个VGA图象显示控制器,用Verilog 硬件描述语言进行编程,把Verilog语言描述的VGA图象显示控制器所需的程序在QuartusⅡ软件环境下进行模拟仿真,以此来验证所设计的结果是否满足设计的要求。在结果符合要求的情况下把Verilog程序下载到FPGA器件上,利用FPGA器件内部存储器存储所需要的数据,再通过VGA接口输出到显示器上,从而达到设计的要求。 VGA显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备,FPGA以其结构的优势可以使用很少的资源产生VGA的各种控制信号。 CRT显示器作为一种通用型显示设备,如今已广泛应用于我们的工作和生活中。与嵌入式系统中常用的显示器件相比,它具有显示面积大、色彩丰富、承载信息量大、接口简单等优点,如果将其应用到嵌入式系统中,可以显著提升产品的视觉效果。如今随着液晶显示器的出现,越来越多的数字产品开始使用液晶作为显示终端。但基于VGA标准的显示器仍是目前普及率最高的显示器[1]。若驱动此类显示器,需要很高的扫面频率,以及极短的处理时间,正是由于这些特点,所以可以用FPGA来实现对VGA显示器的驱动。本次专业课程设计即选用FPGA 来实现VGA的显示。 随着FPGA的不断发展及其价格的不断下降,FPGA的可编程逻辑设计的应用优势逐渐显现出来。现在,越来越多的嵌入式系统选择了基于FPGA的设计方案。在基于FPGA的大规模嵌入式系统设计中,为实现VGA显示功能,既可以使用专用的VGA接口芯片如SPX7111A等,也可以设计和使用基于FPGA的VGA接口软核。虽然使用VGA专用芯片具有更稳定的VGA时序和更多的显示模式可供选择等优点,但设计和使用VGA接口软核更具有以下优势:(1)使用芯片更少,节省板上资源,减小布线难度;(2)当进行高速数据传输时,具有更小的高频噪声干扰;(3) FPGA(现场可编程门阵列)设计VGA接口可以将要显示的数据直接送到显示器,节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。 1.1 FPGA简介 FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分[9]。FPGA的基本特点主要有: 1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2)FPGA可做其它全定制或半定制ASIC电路的中试样片。 3)FPGA内部有丰富的触发器和I/O引脚。 4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5) FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 1

8.8 VGA图形显示控制器的设计与实现 1.实验目的 (1)进一步熟悉QuartusⅡ软件的使用。 (2)掌握数字系统的设计方法。 (3)掌握VGA显示的原理和接口协议规范。 (4)熟悉实验平台的使用。 2.设计目标 设计实现一个VGA图形显示控制器,控制图像信号传输到CRT显示器上显示出来。要求显示模式为640×480×60Hz,通过拨码开关控制R、G、B使显示器可以显示64种纯色,并可在显示器上显示横向彩条信号(至少6种颜色)、纵向彩条信号(至少8种颜色)和棋盘格信号。 3.设计思路 VGA显示控制器控制图像信号通过电缆传输到CRT显示器上并显示出来。CRT通过帧同步信号和行同步信号控制电子枪的电子束逐行逐点的扫描,把电子打在荧光屏上,采用的是动态扫描的显示方式。但是CRT是模拟方式的,需要通过数/模转换电路实现控制,VGA 显示控制器控制过程如图6-6所示。 图6-6 VGA显示控制器示意图 电子枪的扫描在行同步、场同步信号控制下,实现水平扫描、水平回归、垂直扫描、垂直回归等过程,如图6-7所示。整个扫描过程为水平扫描结束后应该有个消隐信号使电子枪回归到行的开始并且进行场同步扫描,当扫描完一帧后还要有个场消隐信号使电子枪回归到

帧画面的开始。 图6-7 电子枪的扫描过程 设计VGA 控制器的关键是产生符合VGA 接口协议规定的行同步和场同步信号,它们扫描时序如图6-8所示。 图6-8 VGA信号时序图 根据上述介绍,结合设计任务要求可以看出VGA显示控制器只需要解决行场扫描和颜

色输出两个问题,设计组成框图如图6-9所示。 图6-9 系统逻辑框图 由于行场扫描时间是固定的,只要在这段时间内扫描不同的点数,就产生不同的分辨率。由于要显示64色,这就要求R、G、B中的每个通道需要有四色,对于二进制编码来说每个通道就需要两位拨码开关,然后采用查找表的方法,先将颜色信息编个表,然后根据行场计数器的值去查找颜色信息表中的值,就可将颜色信息输出。

课程设计 开课学期:第六学期 课程名称:FPGA课程设计学院: 专业: 班级: 学号: 姓名: 任课教师: 2015 年7 月20 日

基于FPGA的VGA显示控制器设计 一、设计方案 1. 设计的主要内容 此设计要求实现某一分辨率下(如640*480@60Hz)的VGA显示驱动,能简单显示彩条和图像等。能够熟悉VGA接口协议、工作时序及VGA工作原理,并计算出合适的时序,对原始时钟进行分频处理以获取符合时序要求的各率,此外须要显示的图像等可存储于外部存储器,运行时,从外部存储器读取显示数据。将图像控制模块分为这样几部分;二分频电路、地址发生器、VGA时序控制模块、图像数据存储器读出模块.如图1-1所示: 图1-1 VGA显示控制系统框图 2. 设计原理 显示控制器是一个较大的数字系统,采用模块化设计原则、借鉴自顶向下的程序设计思想,进行功能分离并按层次设计。利用VHDL硬件描述语言对每个功能模块进行描述,并逐一对每个功能模块进行编译仿真,使顶层VGA显示控制器的模块实体仿真综合得以顺利通过。其中二分频把50MHZ实在频率分成25Mhz并提供给其它模块作为时钟;VGA时序控制模块用于产生640X480显示范围,并控制显示范围和消隐范围以及产生水平同步时序信号HS和垂直同步时序信号VS的值;存储器读出模块提供给SRAM地址并按地址读出八位数据(灰度值Y),然后得到R、G、B的值(若Y>中间值,则R=G=B=1;

否则R=G=B=0),并把R、G、B 的值通过VGA接口传送给VRT显示器[9]。地址发生器接收所要显示的数据读取控制信号,产生与图像数据ROM模块对应得地址,根据VGA显示的像素分布,确定读取对应数据的地址,由于所显示的图形每行需256个像素,而ROM中每个地址存储的数据时64位,故每4个地址取出的数据用于一行的显示。VGA显示控制模块:主要分为时序信号和数据颜色的控制,imgrom模块即图像数据ROM模块,在这一模块中需要解决的是图像数据BMP位图文件的来源及转换成HEX文件,利用Image2lcd 对本次设计图片处理得到BMP文件,最终在Quartus II得到HEX文件,在已设置LPM_ROM 进行加载图像数据。注意其数据线宽为3,恰好可以放置RGB三信号数据,因此此设计图像仅能显示8种颜色。此外注意各模块对图像显示的区域控制。 二、系统实现 此系统设计分主要由,二分频模块,地址译码器模块,VGA显示控制模块及图像数据ROM来实现对图像的显示。计数器模块设计简单,用计数器计数来控制,以实现某一个区域显示相应的颜色。具体以VGA显示模块和图像数据ROM为例进行详细分析与操作。 1. VGA显示控制模块 VGA显示控制模块主要通过VGA时序产生640*480显示范围,并控制和消隐范围以及产生水平同步时序信号hs和垂直同步时序信号vs的值。 一个独立的计数器产生垂直时序信号。垂直同步计数器在每个HS脉冲信号来临时自动加1,译码值产生VS信号。计数器产生当前显示行。这两个计数器从地址到显示缓冲器连续计数。 首先启动QUARTUS Ⅱ软件,新建vga640480显示扫描模块工程文件,如下图2-1所示:

基于FPGA的VGA图像显示控制器设计 第1页

一.实验简介 本实验介绍了一种利用可编程逻辑器件实现VGA图像显示控制的方法,阐述了VGA 图像显示控制器中VGA显像的基本原理以及功能演示,利用可编程器件FPGA设计VGA 图像显示控制的VHDL设计方案,并在Altera公司的QuartusII软件环境下完成VGA 模块的设计。而且给出了VGA模块的设计思路和顶层逻辑框图。最终实现VGA图像显示控制器,VGA图像控制器是一个较大的数字系统,传统的图像显示的方法是在图像数据传输到计算机,并通过显示屏显示出在传输过程中,将图像数据的CPU需要不断的信号控制,所以造成CPU的资源浪费,系统还需要依靠计算机,从而减少了系统的灵活性。FPGA芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要,产品的升级换代和方便迅速。 二.任务要求 2.1课题要求 设计一个VGA 图像显示控制器。 1.显示模式为640×480×60Hz 模式; 2.用拨码开关控制R、G、B(每个2 位),使显示器可以显示64 种纯色; 3.在显示器上显示横向彩条信号(至少6 种颜色); 4.在显示器上显示纵向彩条信号(至少8 种颜色); 5.在显示器上显示自行设定的图形、图像等。 2.2设计目标 根据课题要求,实验中将目标进行了细化,叙述如下: 1.设定4种显示模式:横彩模式、纵彩模式、纯色模式、用户模式; 第2页

2.拨码开关最低两位SW1~SW0控制4种模式的切换; 3.拨码开关高6位SW7~SW2每两位分别控制RGB显示64种纯色; 4.横向和纵向彩条均设置为8种内置的颜色; 5.用户模式中分3种子模式: 1)子模式1是沿固定轨迹运动模式,固定图形沿水平方向运动,行运动到边界后折回到下一行继续水平 运动; 2)子模式2是反弹球模式,固定图形在矩形屏幕做内直线运动,到边界后沿反射角方向反弹,周而复始; 3)子模式3是受控运动模式,使用上下左右4个按键控制固定图形在屏幕内的运动方向; 4)子模式间的切换由一个单独的按键进行控制,按键按下后顺序切换子模式。 第3页

信息与通信工程学院 数字电路综合实验报告 课题名称:VGA图像显示控制器设计 班级:2008211113 姓名: 学号: 序号: 日期: 2011年1月

摘要 本实验报告为VGA显示控制器设计报告。 实验设计了基于VHDL描述的VGA显示控制器,通过FPGA控制CRT显示器显示色彩和图形。完成的功能包括64种纯色的显示、横向和纵向彩色条幅的显示以及正方形色块的运动与控制。实验的重心放在了显示控制器的系统层面的设计,采用了自顶向下的思路进行设计,系统的核心为有限状态机。报告中给出了完整的设计思路和过程,并将系统分模块进行了详细的设计,给出了VHDL语言描述。完成了状态机和核心模块以及系统整体的仿真验证。最终下载到实验板上测试通过。 关键词:FPGA;VHDL;VGA显示控制;状态机

第一部分任务要求 (1) 1.1课题要求 (1) 1.2设计目标 (1) 第二部分系统设计 (2) 2.1设计思路 (2) 2.2系统结构设计 (3) 2.2.1系统结构框图 (3) 2.2.2系统逻辑功能划分 (3) 2.2.3层次模块划分 (4) 2.2.4模块设计图 (6) 2.2.5控制器设计 (7) 2.2.6状态机设计 (8) 2.2.7基本模式设计 (9) 2.2.8用户模式设计 (10) 2.3系统硬件语言描述 (12) 2.3.1VHDL描述思路 (12) 2.3.2总体电路的描述 (12) 2.3.3分块电路的描述 (16)

2.4系统仿真验证 (28) 第三部分结果与分析 (32) 3.1实现功能说明 (32) 3.2器件资源分析 (33) 3.3VHDL设计优化 (35) 3.4故障和问题分析 (37) 第四部分总结与结论 (38) 4.1实验结论 (38) 4.2总结体会 (38) 第五部分附录部分 (40) 5.1元器件和仪表清单 (40) 5.2VHDL源代码 (40) 5.3电路图 (56) 5.4参考文献 (63)

FPGA实验报告 关于VGA彩条信号和VGA图像显示控制设计器的学习报告 1.VGA彩条信号发生器 VGA(Vedio Graphics Array)显示器采用光栅扫描方式,即轰击荧光屏的电子束在CRT显示器上从左到右,从上到下有规律的移动。 其水平移动受到水平同步信号HSYNC控制。 垂直移动受到垂直同步信号VSYNC控制。 完成一行的扫描时间称为水平扫描时间,其倒数称为行频率。完成一帧(整屏)扫描的时间称为垂直扫描时间,其倒数称为场频,又称为刷新率。 VGA显示器总是从屏幕的坐上角开始扫描,先水平扫描完一行(640个像素)到最右边,然后再回到最左边(期间CRT对电子束作行消隐),换下一行,继续扫描,知道扫描到屏幕的最右下角(480行),这样就扫描完了一帧图像,然后再回到屏幕的最左上角(期间CRT对电子束进行场消隐)。这样的扫描在标准的VGA模式(640*480@60HZ)下,每秒需要扫描60帧,这样算来每一个像素点的扫描周期大约为40ns。 VGA显示器与FPGA间通过VGA接口进行连接,(也叫D-sub接口)。

VGA显示器上的每个像素点可有多种颜色,由三基色信号R,G,B组合构成,VGA在指定色版颜色时,一个颜色频道有6个bit,红、绿、蓝各有64种不同的变化,因此总共有262,144 种颜色。在这其中的任何256 种颜色可以被选为色版颜色(而这256 种的任何16 种可以用来显示CGA 模式的色彩)。如R,G,B信号分别用多位表示的话,则屏幕上现实的颜色会大大丰富,但会好用更多的存储空间,另外还需要配置相应D/A 转换器。本例采用三位R,G,B信号。 根据以上的行,场扫描时许的要求,我们可设置两个计数器,一个行扫描计数

本科学生设计性实验报告 项目组长学号 成员无 专业通信工程___班级101 实验项目名称VGA图片(动态)显示与乐曲硬件演奏电路设计指导教师及职称 开课学期2012 至2013 学年第二学期上课时间2013 年05 月05 日

一、实验设计方案 实验名称:乐曲硬件演奏电路设计与VGA图片(动 实验时间:20130505 态)显示 小组合作:是○否○小组成员: 实验目的和要求 1.学习利用数控分频器设计硬件乐曲演奏电路 2.掌握模块化和层次化的设计方法以及音符编码的设计思想 3.学习VGA图像显示控制电路设计 4.根据VGA的工作时序,然后完成VGA图片动态显示。 5.熟悉和掌握基于ROM的VGA显示原理以及ROM的使用方法。 1、实验场地及仪器、设备和材料: PC计算机,Quartus II 9.0软件,EDA/SOPC实验箱

2、实验思路(实验内容、数据处理方法及实验步骤等): 一.VGA图片(动态)显示 1.实验原理:VGA工业标准显示模式要求,行同步,场同步都为负极性,即同步脉冲要求是负脉冲。设计VGA图像显示控制要注意两个问题:一个是时序驱动,这是完成设计的关键,时序有偏差,显示必然不正常;另一个是VGA显示信号电平驱动 我选的是800X600时钟为40MHZ的工业标准显示模式。 所以我的相应的时序控制的程序如下: module vga(clk,hs,vs,r,g,b,rgbin,dout); input clk; output hs,vs; output r,g,b; input [2:0] rgbin; output[14:0] dout; reg [10:0] hcnt; reg[9:0] vcnt; reg r,g,b; reg hs,vs; assign dout={vcnt[6:0],hcnt[6:0]}; always @(posedge clk) begin if(hcnt<1056) hcnt<=hcnt+1; else hcnt<={11{1'b0}};end always @(posedge clk) begin if(hcnt==825)begin

华北水利水电学院 North China Institute of Water Conservancy and Hydroelectric Power 课程设计报告 题目VGA图象显示控制器设计 学院信息工程学院 专业通信工程 学号、姓名 指导教师 2011-1-6

摘要 该论文简述了QuartusⅡ仿真软件的基本操作方法,同时介绍FPGA逻辑器件的相关知识和VHDL硬件描述语言的相关知识,在基于FPGA逻辑器件、QuartusⅡ仿真软件和VHDL硬件描述语言下,设计了VGA图象显示控制器。该VGA图象显示控制器是用模块设计并通过它们的级连实现的,具体是通过硬件电路的设计且能实现的方案来用VHDL语言对硬件电路进行描述,同时把VHDL语言在QuartusⅡ中进行仿真。 关键词:VGA显示控制;VHDL;QuartusⅡ;EDA6000 前言 在电子电路领域中,设计自动化工具已经被广大电子工程师所接受,它必将取代人工设计方法并成为主要的设计手段。目前,VHDL已经成为各家EDA工具和集成电路厂商认同和共同推广的标准化硬件描述语言,随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展,这种发展必将导致集成电路的设计规模日益增大。 该论文的设计是用VHDL硬件描述语言设计出一个VGA图象显示控制器,用VHDL硬件描述语言进行编程,把VHDL语言描述的VGA图象显示控制器所需的程序在QuartusⅡ软件环境下进行模拟仿真,以此来验证所设计的结果是否满足设计的要求。在结果符合要求的情况下把VHDL程序下载到FPGA器件上,利用FPGA 器件内部存储器存储所需要的数据,再通过VGA接口输出到显示器上,从而达到设计的要求。 VGA显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备,FPGA以其结构的优势可以使用很少的资源产生VGA的各种控制信号。

四川师范大学成都学院本科毕业设计 基于FPGA的VGA图像显示控制器设计 学生姓名郑旺明 学号2008104058 所在系电子工程系 专业名称电子信息工程(工民电) 班级2008级2班 指导教师胡迎刚 四川师范大学成都学院 二○一二年五月

摘要 本文介绍了一种利用可编程逻辑器件实现VGA图像显示控制的方法,阐述了VGA 图像显示控制器中VGA显像的基本原理以及功能演示,利用可编程器件FPGA设计VGA 图像显示控制的VHDL设计方案,并在Altera公司的QuartusII软件环境下完成VGA模块的设计。而且给出了VGA模块的设计思路和顶层逻辑框图。最终实现VGA图像显示控制器,VGA图像控制器是一个较大的数字系统,传统的图像显示的方法是在图像数据传输到计算机,并通过显示屏显示出在传输过程中,将图像数据的CPU需要不断的信号控制,所以造成CPU的资源浪费,系统还需要依靠计算机,从而减少了系统的灵活性。FPGA 芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要,产品的升级换代和方便迅速。 关键词:可编程逻辑器件 VGA 图像控制器

Abstract This paper introduces a kind of make use of the programmable logic devices realize VGA images show control method, and expounds the VGA images show controller VGA imaging the basic principle and the demo function, using the programmable device FPGA design VGA images show the control design VHDL, Altera company in the QuartusII software environment complete VGA module design. Given the VGA module, the design idea and top logic diagram. Finally realize the VGA image display controller, VGA image controller is a larger number system, the traditional image shows the method is in the image data transmission to the computer, and through the screen shows in the transmission process, the image data CPU requires constant signal control, therefore creates CPU resources waste, the system also need to rely on the computer, thus reducing the flexibility of the system. FPGA chip and EDA design method of use, can according to customer demand, designed to provide targeted VGA display controller, don't need to rely on the computer, it can greatly reduce the cost, and can satisfy the production practice changing needs, product upgrading and convenient quickly. Keywords:Programmable logic devices VGA Image controller

题目基于DE1开发板的VGA图像显示

目录 一简介 (3) 1 功能简介 (3) 2 用途 (3) 3 难度部分 (3) 4 创新部分 (3) 二设计思路 (4) 1 系统整体结构 (4) 2 像素时钟产生模块 (5) VGA硬件电路 (5) VGA协议 (6) 3同步信号产生模块 (7) 4显示控制模块 (8) 5图像产生模块 (10) 6 数码管显示模块 (11) 7 串口通信模块 (11) 8端口选择模块 (14) 三实验结果 (16) 四总结 (17) 附录1 (18) 附录2 (21)

一简介 1 功能简介 VGA(Video Graphics Array)是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。本设计是基于altera公司的Development & Education Board 1 上的VGA接口开发的一个图形显示模块。通过VGA协议,可以在显示屏上显示分辨率为640*480,刷新频率为60Hz的彩条及彩色图片。图片数据可以从24bit 宽的bmp图像通过一个C程序来转化成需要的格式。本设计可以通过altera DE1自带的软件来把图片数据下载到sram里,也可以通过串口把数据下载到sram 里。 2 用途 该模块可以用于显示器工厂里对显示屏的坏点检测,也可以在大屏幕上显示需要的图像信息,由于系统简单,可扩展性好,图像更新方便,比传统用PC机控制的方法有成本上的极大优势。并且可以通过加大像素同步信号的频率或者并联几个同样的显示模块来达到控制更大显示屏的目的,有极大的灵活性。 3 难度部分 本设计的难度部分主要在图像产生模块与串口通信模块两部分,在图像产生模块里完成了对ram里压缩格式数据的解压缩,否则未压缩的数据无法完全放到sram里。串口通信模块在开始信号捕捉,数据计数以及数据和时钟的同步上逻辑关系不太好处理,特别是一个进程里只能捕捉一个时钟沿信号,并且对同一信号的赋值只能在同一个进程里,这样就造成捕捉到起始信号的下降沿后无法直接对数据进行计数,只能通过标志位传递来进行同步。 4 创新部分 创新部分在于串口通信模块没有采用常用的状态机加移位寄存器的结构,而是采用直接对号入座的方法,便于对接收到的数据进行变换,使软件和硬件可以共同完成数据的编码解码,增加了系统的灵活性。

相关主题