为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于FPGA进行VGA控制器设置实现显示器条纹显示

2017-09-29 17页 doc 381KB 31阅读

用户头像

is_594905

暂无简介

举报
基于FPGA进行VGA控制器设置实现显示器条纹显示基于FPGA进行VGA控制器设置实现显示器条纹显示 实验目的与要求: VGA控制器设计实现显示器条纹显示 要求:通过FPGA板的VGA接口在显示器上显示一幅640*480由六条不同颜色的条纹组成的 图像。 实验内容: VGA简介 VGA彩色显示器,彩色是由R、G、B(红、绿、蓝)三基色组成,CRT用逐行扫描方式实现图像显示,由VGA控制模块产生的水平同步信号(HS)和垂直同步信号(VS)控制阴极射线枪产生的电子束,打在涂有荧光粉的荧光屏上,产生R、G、B三基色,合成一个彩色像素。扫描从屏幕的左上方开始,由左至右,...
基于FPGA进行VGA控制器设置实现显示器条纹显示
基于FPGA进行VGA控制器设置实现显示器条纹显示 实验目的与要求: VGA控制器设计实现显示器条纹显示 要求:通过FPGA板的VGA接口在显示器上显示一幅640*480由六条不同颜色的条纹组成的 图像。 实验内容: VGA简介 VGA彩色显示器,彩色是由R、G、B(红、绿、蓝)三基色组成,CRT用逐行扫描方式实现图像显示,由VGA控制模块产生的水平同步信号(HS)和垂直同步信号(VS)控制阴极射线枪产生的电子束,打在涂有荧光粉的荧光屏上,产生R、G、B三基色,合成一个彩色像素。扫描从屏幕的左上方开始,由左至右,由上到下,逐行进行扫描,每扫完一行,电子束回到屏幕下一行的起始位置,在回扫期间,CRT对电子束进行消隐,每行结束是用行同步信号HS进行行同步;扫描完所有行,再由场同步信号VS进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。显示需要R,G,B,Hsync(行同步),Vsync(帧同步)五个信号输出到显示器,本设计按照VGA工业标准输出640*480@60Hz.对应的时序如下: 图1 VGA接口信号基本时序图 图2 FPGA板上的VGA接口 图3 VGA(640*480@60Hz)时序图 VGA显示的设计模块为: hsclk vs VGA显示模r块 grst_n b 说明:设计中FPGA板的VGA接口将R,G,B分别设为定义为2位,3位,3位,例如显示红色RGB可以输出为11000000,绿色输出为00111000,蓝色输出为00000111. 1 25MHz 640*480@60Hz模式下VGA的时序 规格说明 1. 像素时钟配置为25Mhz。 2. 编写代码时,需要用到的常数参考表一。 3. 输出到显示器上的条纹为从上到下依次为R G B R G B,640*80,。 4. 本实验使用FPGA板:Sparant3EXC3S500E,建project时,需要选择板的型号,。 实验、步骤: 1、基本设计思想如下图所示: 分为这四个模块,产生Hsync(行同步),Vsync(帧同步)以及RGB色彩的输出。 2、具体设计VHDL代码 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity main is port(clk,rst:in std_logic; Vsync,Hsync:out std_logic; data:out std_logic_vector(7 downto 0) ); end main; architecture Behavioral of main is component dcn is ---------DCM 分频模块,输出25M 时钟 port ( CLKIN_IN : in std_logic; RST_IN : in std_logic; CLKFX_OUT : out std_logic; ----输出时钟 CLKIN_IBUFG_OUT : out std_logic; LOCKED_OUT : out std_logic); end component; signal div_25m,Nrst: std_logic; signal Vsys_20b:std_logic_vector(19 downto 0); signal Hsys_10b:std_logic_vector(9 downto 0); signal data_Vsend,data_Hsend:std_logic; signal Scan_16b:std_logic_vector(15 downto 0); signal Scan_clc:std_logic; signal data_sel:std_logic_vector(1 downto 0); begin div:dcn port map(clk,Nrst,div_25m,open,open); ---分频模块 Nrst<= not rst; process(div_25m,rst) begin if rst='0' then Vsys_20b<="00000000000000000000"; elsif div_25m'event and div_25m='1' then Vsys_20b<=Vsys_20b + 1; if Vsys_20b=416799 then Vsys_20b<="00000000000000000000"; end if; end if; end process; process(div_25m,rst,Vsys_20b) begin if rst='0' then Vsync<='1';data_Vsend<='0'; elsif div_25m'event and div_25m='1' then if Vsys_20b < 8000 then Vsync<='1';data_Vsend<='0'; elsif Vsys_20b>=8000 and Vsys_20b<9600 then Vsync<='0';data_Vsend<='0'; elsif Vsys_20b>=9600 and Vsys_20b<32800 then--128*255+160=32800 Vsync<='1';data_Vsend<='0'; elsif Vsys_20b>=32800 and Vsys_20b<416800 then Vsync<='1';data_Vsend<='1'; end if; end if; end process; process(div_25m,rst) begin if rst='0' then Hsys_10b<="0000000000"; elsif div_25m'event and div_25m='1' then Hsys_10b<=Hsys_10b + 1; if Hsys_10b=799 then Hsys_10b<="0000000000"; end if; end if; end process; process(div_25m,rst,Hsys_10b) begin if rst='0' then Hsync<='1';data_Hsend<='0'; elsif div_25m'event and div_25m='1' then if Hsys_10b < 16 then Hsync<='1';data_Hsend<='0'; elsif Hsys_10b>=16 and Hsys_10b<112 then Hsync<='0';data_Hsend<='0'; elsif Hsys_10b>=112 and Hsys_10b<160 then Hsync<='1';data_Hsend<='0'; elsif Hsys_10b>=160 and Hsys_10b<800 then Hsync<='1';data_Hsend<='1'; end if; end if; end process; process(div_25m,rst,data_Vsend ) begin if rst='0' then -- Scan_16b<="0000000000000000";Scan_clc<='0'; elsif div_25m'event and div_25m='1' then --- Scan_clc<='0'; if data_Vsend='1' then Scan_16b<=Scan_16b + 1; if Scan_16b=63999 then Scan_16b<="0000000000000000"; Scan_clc<='1'; end if; end if; end if; end process; process(rst,div_25m,Scan_clc,data_sel,data_Vsend ) begin if rst='0' then data_sel<="00"; elsif div_25m'event and div_25m='1' then if Scan_clc ='1' then data_sel<=data_sel+1; end if; if data_sel="11" then data_sel<="00"; end if; end if; end process; process(rst,div_25m,data_Vsend,data_Hsend) begin if rst='0' then data<="00000000"; elsif div_25m'event and div_25m='1' then if data_Vsend ='1' and data_Hsend ='1' then -- case data_sel is when "00"=> data<="11000000"; when "01"=> data<="00111000"; when "10"=> data<="00000111"; when others=> data<="00000000"; end case; else data<="00000000"; end if; end if; end process; end Behavioral; UCF 管脚定义 : NET "clk" LOC = "P183"; NET clk IOSTANDARD = LVCMOS33; NET "rst" LOC = "P142";# NET "rst" PULLUP; NET "rst" IOSTANDARD = LVCMOS33; NET "data(0)" LOC = "P74"; # NET "data(1)" LOC = "P75"; # NET "data(2)" LOC = "P76"; # NET "data(3)" LOC = "P77"; # NET "data(4)" LOC = "P78"; # NET "data(5)" LOC = "P82"; # NET "data(6)" LOC = "P83"; # NET "data(7)" LOC = "P89"; # NET "Vsync" LOC = "P68"; # NET "Hsync" LOC = "P69"; # DCM设置: 综合结果: 综合分析: 仿真波形 实际测试: 实验结论: 本实验设计达到了实验要求,产生了预期效果,通过本实验 ,进一步了解了 如何设计FPGA外部设备的 驱动时钟,对计数器的设计有了更深一步的认识。 进一步熟悉了FPGA涉及的过程以及方法 指导教师批阅意见: 成绩评定: 指导教师签字: 年 月 日 备注: 注:1、内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生时间应在学生提交实验报告时间后10日内。
/
本文档为【基于FPGA进行VGA控制器设置实现显示器条纹显示】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索