学 院
EDA技术 课 程 设 计
题 目 VGA显示控制器设计 系 (部) 信息工程系 班 级 姓 名 学 号 指导教师
(完整版)VGA显示控制器设计..
2013 年 7 月 8 日至 7 月 12 日 共 1 周
课程设计成绩评定表
出勤 情况 出勤天数 缺勤天数 出勤情况及设计过程表现(20成 绩 评 设计成果(60分) 定 总成绩(100分) 分) 课设答辩(20分) 提问 (答辩) 问题 情况 (完整版)VGA显示控制器设计..
综 合 评 定 指导教师签名: 年 月 日 (完整版)VGA显示控制器设计..
1 引言
如今人们的生活水平和质量不断提高,对生活设备的智能化程度的要求越来越高.现代电子产品在性能提高、复杂度增大的同时,价格却一直呈下降趋势,而且产品更新换代的步伐也越来越快,实现这种进步的主要因素是生产制造技术和电子设计技术的发展。前者以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶体管。后者的核心就是EDA技术,EDA是指以计算机为工作平台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作:IC设计、电子电路设计、PCB设计。 没有EDA技术的支持,想要完成上述超大规模集成电路的设计制造是不可想象的,反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。随着电子技术的发展和人们对电子设计开发的难度及周期要求,EDA技术必将广发应用于电子设计的各个领域,因此本设计也采用了EDA的设计方法,其设计的优越性明显高于传统的设计方法.
为了实现VGA彩色显示的原理, 我们从本质上去认识了生成图像的原理, 从而制造更多更复杂的元器件做铺垫,本设计立足系统可靠性及稳定性等高技术要求,采用FPGA芯片实现VGA显示屏控制电路,通过对接口的认识,我们知道了怎么去设置接口成像参数.其电路设计比较简单,外围电路少,易于控制和检查,较传统的分离元件实现方式有着明显的优势,尤其是其设计电路实现周期,其抗干扰及调试过程都很简单。
(完整版)VGA显示控制器设计..
2 应用软件介绍
2。1Quartus II软件介绍
Quartus II是Altera公司推出的一种针对其公司生产的CPLD/FPGA系列器件的综合性开发软件,是一个集成了编译、布局布线和仿真工具在内的完全集成化的可编程逻辑设计环境,是最先进的EDA工具软件.它能完成从代码输入到物理实现的全部设计流程,支持Altera公司的所有FPGA和CPLD器件,是MaxPlusII的后继版本.该软件具有开放性、与结构无关、多平台、完全集成化、丰富的设计库、模块化工具等特点,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,还提供了完善的用户图形界面设计方式.具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
2.2 Quartus II工作环境介绍
(1)启动QuartusII,其管理窗口如图2-1.
(完整版)VGA显示控制器设计..
图2—1 Quartus II管理窗口
(2) 首先新建一个工程,选择菜单命令File/New Project Wizard ,点击next将弹出如图所示对话框,对话框中第一行表示工程所在的工作库文件夹,第二行表示此项工程的工程名。选择项目存放目录、填写项目名称,注意项目顶层设计实体名称必须和项目名称保持一致,接下来对器件进行相关的设置。
图2—2 New Project Wizard 窗口
(3)然后新建一个VHDL文件,出现一个空白窗口,在这个空白窗口可以输入VHDL代码,如图2—3所示。
图2-3 输入VHDL代码窗口
输入完VHDL代码后点击Start Compilation即可进行编译。如果程序语法有错就会进行错误提示,如果代码正确则编译提示正确,代码无语法错误。
2。3ModelSim软件介绍
ModelSim是一种第三方EDA仿真工具,它是由Model公司开发的,支持Verilog、VHDL以及两者的混合仿真。它可以将整个程序分步执行,并且可以在程序执行的任何步骤任何时刻都可以查看任意变量的当前值,和某一单元或模块的输入输出的连续变化等。其主要特点是仿真速度
(完整版)VGA显示控制器设计..
快,仿真精度高,是目前业界最流行最通用的仿真器之一。
编写完VHDL代码且编译通过后,即可对其进行波形仿真。
(1)首先选择QuartusⅡ主窗口 Tools/Options命令,改变ModelSim-Altera的存储地址,如图2—4所示.
图2—4 Options界面
(2)然后选择QuartusⅡ主窗口Assignments菜Device命令,进入 Settings对话框的 Device页面进行设置,如图2—4所示。再点击 Test Benches 按钮,进入New Test Benches Setting 界面进行一系列设置。
图2—4 Device设置页面
(3)最后在 Tools 的下拉菜单中选择Run EDA Simulation Tool/EDA RTL Simulation,即可得到波形的仿真结果。
3 电路设计及仿真
3。1实验原理
(完整版)VGA显示控制器设计..
3.1.1显示控制原理
常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(Green Red Blue)基色组成.显示采用逐行扫描的方式解决,阴极射线发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT、对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。 3.1。2 VGA时序信号
计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R、G、B 三原色信号和行、场同步信号,信号通过电缆传输到显示设备中.对于模拟显示设备,如模拟CRT 显示器,信号被直接送到相应的处理电路,驱动控制显像管生成图像。设计 VGA 控制器的关键是产生符合VGA 接口协议规定的行同步和场同步信号,它们的时序关系如下图所示:
行同步信号(hs)是以时钟信号计数的.它的前沿为16个像素数;行同步为96个像素数;数据为0个像素数;后沿为48个像素数;总像素数为800.
场同步信号(vs)是以同步信号计数的。它的前沿为10个行数;场同步为2个行数;数据为480个行数;后沿为33个行数;总行数为525.表格如下:
(完整版)VGA显示控制器设计..
行同步信号(HS) 时序名称 前沿 行同步 数据 后沿 总像素数
时钟数(像素数)
16 96 0 48 800
场同步信号(VS) 时序名称 前沿 场同步 数据 后沿 总行数
行数 10 2 480 33 525
颜色编码如下:
颜色 R G L
红 0 1 0
绿 1 0 0
蓝 0 0 1
白 1 1 1
3.2原理图与仿真
3。2。1总体原理图
(完整版)VGA显示控制器设计..
其中s为控制横条纹和竖条纹的,当s=‘1'时为竖条纹;为‘0’时为横条纹。
3.2。2横条纹仿真图
3.2.3竖条纹仿真图
(完整版)VGA显示控制器设计..
4 总结
通过这次设计,加深了我对EDA的了解。在这个星期里,我们的任课老师请来了北京至芯科
(完整版)VGA显示控制器设计..
技公司的老师为我们讲解相关的知识.取代之前采用硬件仿真波形的方法,在这次的课设中,我们使用ModelSim来进行波形仿真。
本实验历时两周,我们的课程设计题目是“VGA彩色信号发生器”,在这两周我们使用Verilog语言编程来实现完成了“VGA彩色信号发生器”基本任务要求,并进行了拓展。
此次实验我倾尽了心血,系统设计反复修改了三次,Verilog代码重写了三次,其间经过了不断地优化和修改.这一过程虽然辛苦,但却让人快乐。因为每次修改和完善设计,思路都在不断优化,对FPGA的认识都在不断加深。两周下来,自主学习了大量的资料,积累了不少经验.虽然VGA显示控制器本身并不复杂,但其设计思路是通用的,或者至少是可供以后借鉴的。我相信这种系统设计的思路将给我以后的实验和开发提供有益的参考.三年的本科学习中,一直在关注编程和具体实现,从未真正站在一个系统的角度去理解和思考问题,这是一大缺憾。代码只不过是设计者思考和想法的外在表现而已,真正精华的是设计思路.代码描述值得借鉴,但设计思想更值得学习。
5参考文献
[1]董士海,张倪,肖磊,等.EGA/VGA程序员手册[M].北京:北京大学出版社,1999
[2]夏宇闻。Verilog数字系统设计教程[M] .北京: 北京航空航天大学出版社,2003年7月 [3]徐光辉,程东旭,黄如,等.基于FPGA的嵌入式开发与运用[M]。北京:电子工业出版社,2006. [4]谭会生,张昌凡,等。EDA技术及应用[M]。陕西:西安电子科技大学出版社,2011
(完整版)VGA显示控制器设计..
[5]潘松,黄继业。EDA技术实用教程(第三版)[M]。科学出版社,2010 [6]阎石.数字电子技术基础[M]。高等教育出版社,1998 [7]江国强。现代数字逻辑电路[M].电子工业出版社,2002
6.1 vga_2源程序 library ieee;
use ieee.std_logic_11。all; use ieee.std_logic_unsigned。all;use ieee.std_logic_arith.all;
6 附录
(完整版)VGA显示控制器设计..
entity VGA_2 is
port(rst,clk:in std_logic;
vs,hs:buffer std_logic;
x,y:buffer std_logic_vector(9 downto 0); rin,gin,bin:in std_logic; rout,gout,bout:out std_logic);
end VGA_2;
architecture bhv of VGA_2 is
signal h_count:integer; constant g0:integer:=96; constant g1:integer:=96+48; constant g2:integer:=96+48+0;
constant h_total:integer:=96+48+0+16;
signal v_count:integer;
constant v0:integer:=1;
constant v1:integer:=2+33; constant v2:integer:=2+33+480;
constant v_total:integer:=2+33+480+10;
begin
lsm_1:process(rst,clk,h_count) begin
if rst='1’then
h_count<=0;
elsif (clk'event and clk=’1’) then if h_count〉=h_total—1 then
h_count<=0;
else
h_count<=h_count+1;
end if;
end if;
end process;
lsm_2:process(h_count,clk,rst) begin if rst=’1’then x<=(others=>’0’);
hs<=’0’;
elsif (clk'event and clk=’1') then if (h_count=799) then
hs<=’0’;x〈=(others=>'0');
elsif (h_count=g0) then
hs<=’1';
elsif (h_count=g1) then
x<=”0000000001\";
elsif (h_count〉g1 and h_count〈=g2-1)
x〈=x+1;
(完整版)VGA显示控制器设计..
then(完整版)VGA显示控制器设计..
end if;
end if;
end process;
lsm_3:process(rst,hs,v_count) begin
if rst=’1'then
v_count<=0;
elsif (hs’event and hs='1’) then
if v_count>=v_total-1 then
v_count〈=0;
else
v_count〈=v_count+1;
end if;
end if;
end process;
lsm_4:process(v_count,hs,rst) begin
if rst=’1’then
y〈=(others=>’0’); vs〈=’0’;
elsif (hs’event and hs='1’) then
if (v_count=524) then
vs<=’0';y<=(others=〉’0’);
(完整版)VGA显示控制器设计..
elsif (v_count=v0) then
vs〈=’1’;
elsif (v_count=v1) then
y〈=\"0000000001”;
elsif (v_count〉v1 and v_count<=v2-1) then
y〈=y+1;
end if;
end if;
end process;
rout〈=rin; gout<=gin; bout<=bin;
end bhv;
6.2 vga_2_tb 程序 library ieee;
use ieee.std_logic_11.all;
entity VGA_2_tb is end VGA_2_tb;
architecture bhv of VGA_2_tb is
component VGA_2
port(rst,clk:in std_logic;
(完整版)VGA显示控制器设计..
vs,hs:buffer std_logic;
x,y:buffer std_logic_vector(9 downto 0); rin,gin,bin:in std_logic; rout,gout,bout:out std_logic);
end component;
signal rst,clk:std_logic; signal vs,hs:std_logic;
signal x,y:std_logic_vector(9 downto 0);
signal rin,gin,bin,rout,gout,bout:std_logic;
begin
u1:VGA_2 port map (
rst=〉rst, clk=>clk, vs=>vs, hs=>hs, x=>x, y=>y, rin=>rin, gin=>gin, bin=〉bin, rout=>rout, gout=〉gout, bout=〉bout
(完整版)VGA显示控制器设计..
);
clk_process:process begin wait for 0
ns; clk〈='1’;
wait for 19。86 ns; clk〈='0’;
wait for 19。86 ns; clk<=’1’;
end process;
main_process:process begin wait for 0
ns; rst<=’1’;rin〈='1';gin<=’1’;bin<='1'; wait for 200 ns; rst<='0’;
wait;
end process;
end bhv; 6.3 vga_3程序 library ieee;
use ieee.std_logic_11.all; use ieee.std_logic_arith.all; use ieee。std_logic_unsigned。all;
entity vga_slip is port ( x : in std_logic_vector(9 downto 0);
y : in std_logic_vector(9 downto 0);
(完整版)VGA显示控制器设计..
s : in std_logic;
rout,gout,bout :out std_logic); end vga_slip;
architecture behaviour of vga_slip is
constant Y_0 : std_logic_vector(9 downto 0) := conv_std_logic_vector(0, 10); constant Y_1 : std_logic_vector(9 downto 0) := conv_std_logic_vector(120, 10); constant Y_2 : std_logic_vector(9 downto 0) := conv_std_logic_vector(240, 10); constant Y_3 : std_logic_vector(9 downto 0) := conv_std_logic_vector(360, 10); constant Y_4 : std_logic_vector(9 downto 0) := conv_std_logic_vector(480, 10);
constant X_0 : std_logic_vector(9 downto 0) := conv_std_logic_vector(0, 10);
constant X_1 : std_logic_vector(9 downto 0) := conv_std_logic_vector(160, 10); constant X_2 : std_logic_vector(9 downto 0) := conv_std_logic_vector(320, 10); constant X_3 : std_logic_vector(9 downto 0) := conv_std_logic_vector(480, 10); constant X_4 : std_logic_vector(9 downto 0) := conv_std_logic_vector(0, 10);
begin
hv_slip : process(x,y,s) begin case s is when '0’=〉
if (y 〉= Y_0 and y < Y_1) then
rout 〈= '1'; gout <= ’0';
(完整版)VGA显示控制器设计..
bout 〈= '0’;
elsif (y >= Y_1 and y 〈 Y_2) then
rout 〈= ’0’; gout 〈= '1'; bout 〈= '0';
elsif (y >= Y_2 and y < Y_3) then
rout 〈= '0'; gout <= '0’; bout <= ’1’;
else
rout 〈= ’1’; gout <= ’1'; bout <= '1';
end if; when '1’=>
if (x 〉= X_0 and x < X_1) then
rout 〈= '1’; gout <= '0'; bout <= ’0';
elsif (x 〉= X_1 and x 〈 X_2) then
rout 〈= ’0'; gout <= ’1’; bout 〈= ’0’;
elsif (x 〉= X_2 and x < X_3) then
(完整版)VGA显示控制器设计..
rout 〈= ’0’; gout <= ’0’; bout <= '1';
else
rout <= ’1'; gout 〈= ’1'; bout <= '1’;
end if; when others=> rout <= ’0’;
gout <= ’0'; bout 〈= '0’; end case;
end process;
end behaviour; 6。4 top程序
-— Copyright (C) 1991-2009 Altera Corporation
-- Your use of Altera Corporation's design tools, logic functions —— and other software and tools, and its AMPP partner logic -— functions, and any output files from any of the foregoing —— (including device programming or simulation files), and any -— associated documentation or information are expressly subject —— to the terms and conditions of the Altera Program License —- Subscription Agreement, Altera MegaCore Function License
(完整版)VGA显示控制器设计..
-- Agreement, or other applicable license agreement, including, —— without limitation, that your use is for the sole purpose of —- programming logic devices manufactured by Altera and sold by —— Altera or its authorized distributors。 Please refer to the —— applicable agreement for further details。
—- PROGRAM —- VERSION —- CREATED
”Quartus II”
”Version 9。1 Build 222 10/21/2009 SJ Full Version\" ”Thu Jul 11 00:37:45 2013”
LIBRARY ieee;
USE ieee。std_logic_11.all;
LIBRARY work;
ENTITY top IS
PORT (
s : IN STD_LOGIC; rst : IN STD_LOGIC; clk : IN STD_LOGIC; vs : OUT STD_LOGIC; hs : OUT STD_LOGIC; rout : OUT STD_LOGIC; gout : OUT STD_LOGIC; bout : OUT STD_LOGIC
(完整版)VGA显示控制器设计..
);
END top;
ARCHITECTURE bdf_type OF top IS
COMPONENT vga_2
PORT(rst : IN STD_LOGIC;
clk : IN STD_LOGIC; rin : IN STD_LOGIC; gin : IN STD_LOGIC; bin : IN STD_LOGIC; vs : OUT STD_LOGIC; hs : OUT STD_LOGIC; rout : OUT STD_LOGIC; gout : OUT STD_LOGIC; bout : OUT STD_LOGIC;
x : OUT STD_LOGIC_VECTOR(9 DOWNTO 0); y : OUT STD_LOGIC_VECTOR(9 DOWNTO 0)
);
END COMPONENT;
COMPONENT vga_slip
PORT(s : IN STD_LOGIC;
x : IN STD_LOGIC_VECTOR(9 DOWNTO 0); y : IN STD_LOGIC_VECTOR(9 DOWNTO 0); rout : OUT STD_LOGIC;
(完整版)VGA显示控制器设计..
gout : OUT STD_LOGIC; bout : OUT STD_LOGIC
);
END COMPONENT;
SIGNAL SYNTHESIZED_WIRE_0 : STD_LOGIC; SIGNAL SYNTHESIZED_WIRE_1 : STD_LOGIC; SIGNAL SYNTHESIZED_WIRE_2 : STD_LOGIC;
SIGNAL SYNTHESIZED_WIRE_3 : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL SYNTHESIZED_WIRE_4 : STD_LOGIC_VECTOR(9 DOWNTO 0);
BEGIN
b2v_inst : vga_2 PORT MAP(rst => rst,
clk =〉 clk,
rin =〉 SYNTHESIZED_WIRE_0, gin =〉 SYNTHESIZED_WIRE_1, bin => SYNTHESIZED_WIRE_2, vs => vs, hs =〉 hs, rout =〉 rout, gout =〉 gout, bout => bout,
(完整版)VGA显示控制器设计..
x =〉 SYNTHESIZED_WIRE_3, y =〉 SYNTHESIZED_WIRE_4);
b2v_inst1 :vga_slip PORT MAP(s => s,
x =〉 SYNTHESIZED_WIRE_3, y => SYNTHESIZED_WIRE_4, rout => SYNTHESIZED_WIRE_0, gout => SYNTHESIZED_WIRE_1, bout => SYNTHESIZED_WIRE_2);
END bdf_type; 6.5 top程序
LIBRARY ieee;
USE ieee.std_logic_11.all;
LIBRARY work;
ENTITY top IS
PORT (
s : IN STD_LOGIC; rst : IN STD_LOGIC; clk : IN STD_LOGIC; vs : OUT STD_LOGIC;
(完整版)VGA显示控制器设计..
hs : OUT STD_LOGIC; rout : OUT STD_LOGIC; gout : OUT STD_LOGIC; bout : OUT STD_LOGIC
);
END top;
ARCHITECTURE bdf_type OF top IS
COMPONENT vga_2
PORT(rst : IN STD_LOGIC; );
clk : IN STD_LOGIC; rin : IN STD_LOGIC; gin : IN STD_LOGIC; bin : IN STD_LOGIC; vs : OUT STD_LOGIC; hs : OUT STD_LOGIC; rout : OUT STD_LOGIC; gout : OUT STD_LOGIC; bout : OUT STD_LOGIC;
x : OUT STD_LOGIC_VECTOR(9 DOWNTO 0); y : OUT STD_LOGIC_VECTOR(9 DOWNTO 0)
END COMPONENT;
COMPONENT vga_slip
(完整版)VGA显示控制器设计..
PORT(s : IN STD_LOGIC;
x : IN STD_LOGIC_VECTOR(9 DOWNTO 0); y : IN STD_LOGIC_VECTOR(9 DOWNTO 0); rout : OUT STD_LOGIC; gout : OUT STD_LOGIC; bout : OUT STD_LOGIC
);
END COMPONENT;
SIGNAL SYNTHESIZED_WIRE_0 : STD_LOGIC; SIGNAL SYNTHESIZED_WIRE_1 : STD_LOGIC; SIGNAL SYNTHESIZED_WIRE_2 : STD_LOGIC;
SIGNAL SYNTHESIZED_WIRE_3 : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL SYNTHESIZED_WIRE_4 : STD_LOGIC_VECTOR(9 DOWNTO 0);
BEGIN
b2v_inst : vga_2 PORT MAP(rst =〉 rst,
clk =〉 clk,
rin =〉 SYNTHESIZED_WIRE_0, gin => SYNTHESIZED_WIRE_1, bin =〉 SYNTHESIZED_WIRE_2, vs => vs,
(完整版)VGA显示控制器设计..
hs => hs, rout => rout, gout => gout, bout => bout,
x =〉 SYNTHESIZED_WIRE_3, y =〉 SYNTHESIZED_WIRE_4);
b2v_inst1 :vga_slip PORT MAP(s =〉 s,
x =〉 SYNTHESIZED_WIRE_3, y => SYNTHESIZED_WIRE_4, rout =〉 SYNTHESIZED_WIRE_0, gout => SYNTHESIZED_WIRE_1, bout =〉 SYNTHESIZED_WIRE_2);
END bdf_type; 6。6 top_tb程序 library ieee;
use ieee.std_logic_11。all;
entity top_tb is end top_tb;
architecture bhv of top_tb is
component top
(完整版)VGA显示控制器设计..
PORT(
s : IN STD_LOGIC; rst : IN STD_LOGIC; clk : IN STD_LOGIC; vs : OUT STD_LOGIC; hs : OUT STD_LOGIC; rout : OUT STD_LOGIC; gout : OUT STD_LOGIC; bout : OUT STD_LOGIC);
end component;
signal rst,clk:std_logic; signal vs,hs:std_logic;
signal rout,gout,bout:std_logic; signal s:std_logic;
begin
u1:top port map (
rst=〉rst, clk=>clk, vs=>vs, hs=〉hs, rout=〉rout, gout=〉gout, bout=〉bout,
(完整版)VGA显示控制器设计..
s=>s );
clk_process:process begin
wait for 0
ns; clk〈=’1’;
wait for 19.86 ns; clk〈='0'; wait for 19.86 ns; clk〈=’1';
end process;
main_process:process begin
wait for 0
ns; rst 〈=’1'; s <= '1';
wait for 200 ns; rst 〈=’0';
wait;
end process;
end bhv;
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务