1、电子设计自动化课程设计报告学生姓名: 学 号: 课设题目: VGA 彩条信号显示控制器设计同组人: 电子设计自动化课程设计报告郝欣欣一 、 课 程 设 计 内 容1、 使用 Verilog 语言和 Modelsim 仿真器完成可显示横彩条、竖彩条、棋盘格相间的 VGA控制器的设计和验证2、 设计并验证可显示英语单词”HIT”的 VGA 控制器3、 使用 Quartus II 和 SOPC 实验箱验证设计的正确性4、 Verilog 代码要符合微电子中心编码标准二、FPGA 原理CPLD、FPGA 是在 PAL、GAL 等基础上发展起来的一种具有丰富的可编程 I/O引脚、逻辑宏单元、门电路以及
2、RAM 空间的可编程逻辑器件,几乎所有应用门阵列、PLD 和中小规模通用数字集成电路的场合均可应用 FPGA 和 CPLD 器件。CPLD 的设计是基于乘积项选择矩阵来实现的,而 FPGA 基于查找表来设计的。查找表就是实现将输入信号的各种组合功能以一定的次序写入 RAM 中,然后在输入信号的作用下,输出特定的函数运算结果。其结构图如图 1 所示:图 1. FPGA 查找表单元一个 N 输入查找表 (LUT,Look Up Table)可以实现 N 个输入变量的任何逻辑功能,如 N 输入“与” 、 N 输入“异或”等。输入多于 N 个的函数、方程必须分开用几个查找表( LUT)实现(如图 2所
3、示) 。图 2 FPGA 查找表单元内部结构该系统设计中,FPGA 芯片用的是 ALTERA 公司的 EP1K30QC208-2,它的系统结构如图 3 所示。它由若干个逻辑单元和中央布线池加 I/O 端口构成图 3 EP1K30QC208 内部结构三、VGA 接口VGA 的全称为 Video Graphic Array,即显示绘图阵列。在 PC 行业发展的初期,VGA 以其支持在 640X480 的较高分辨率下同时显示 16 种色彩或 256 种灰度,同时在 320X240 分辨率下可以同时显示 256 种颜色的良好特性得到广泛支持。后来,厂商们纷纷在 VGA 基础上加以扩充,如将显存提高至
4、1M 并使其支持更高分辨率如 800X600 或 1024X768,这些扩充的模式就称之为 VESA(Video Electronics Standards Association,视频电子标准协会)的 Super VGA 模式,简称 SVGA,现在的显卡和显示器都支持 SVGA 模式。图 4 VGA 接口VGA 接口就是显卡上输出模拟信号的接口,也叫 D-Sub 接口。VGA 接口是一种 D 型接口,上面共有 15 针空,分成三排,每排五个。VGA 接口是显卡上应用最为广泛的接口类型,绝大多数的显卡都带有此种接口。表 1 VGA 管脚定义管脚 定义1 红基色 red 2 绿基色 green
5、3 蓝基色 blue4 地址码 ID Bit5 自测试 (各家定义不同)6 红地7 绿地8 蓝地9 保留(各家定义不同)10 数字地11 地址码12 地址码13 行同步14 场同步15 地址码 (各家定义不同)通过模拟 VGA 接口和计算机连接的显示器的工作原理,是计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为 R、G、B 三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。对于模拟显示设备,如模拟 CRT 显示器,信号被直接送到相应的处理电路,驱动控制显像管生成图像。而对于 LCD、DLP 等数字显示设备,显示设备中需配置相应的 A/D(模拟/数字)转换器,将
6、模拟信号转变为数字信号。在经过 D/A 和 A/D2 次转换后,不可避免地造成了一些图像细节的损失。VGA 接口应用于 CRT 显示器无可厚非,但用于连接液晶之类的显示设备,则转换过程的图像损失会使显示效果略微下降。CRT 显示器因为设计制造上的原因,只能接受模拟信号输入,也就是我们为什么在 CRT 显示器上只看到 VGA 接口的原因。四、VGA 显示接口原理计算机显示器的显示有许多标准,常见的有 VGA、SVGA 等。本系统采用FPGA 来实现图像显示控制器,这在产品开发设计中有许多实际应用。常见的彩色显示器,一般由 CRT(阴极射线管)构成,彩色是由G、R、B(绿:Green,红:Red,
7、蓝:Blue)三基色组成。显示是用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生 GRB 三基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,进行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。对于普通的 VGA 显示器,其引出线共含 5 个信号:G、R、B:三基色信号;HS:行同步信号;VS:场同步信号。对于 5 个信号的时序驱动,对于 VGA 显示器要严格遵循“VGA 工业
8、标准” ,即 64048060Hz 模式。通常我们用的显示器都满足工业标准,因此我们设计VGA 控制器时要参考显示器的技术规格。图 5 是 VGA 行扫描、场扫描的时序图:图 5 VGA 行扫描、场扫描时序图表 2 VGA 参考时序设计VGA 工业标准所要求的频率:时钟频率(Clock frequency):25.175MHz(像素输出的频率) ;行频(Line frequency):31469Hz;场频(Field frequency):59.94Hz(每秒图像刷新频率) 。五、FPGA 的设计实现设计 VGA 图像显示控制需要注意两个问题:一个是时序的驱动,这是完成设计的关键,时序稍有偏差
9、,显示必然不正常,甚至会损坏彩色显示器;另一个是 VGA 信号的电平驱动。显示控制器设计提示:显示器的技术规格提供的行频一般都满足在 30-45KHz(保守数据) ,场频一般满足在 50-75Hz(保守数据) ,针对以上保守数据,我们以 30KHz 的行频进行扫描时所需时钟频率为:30KHz800(行周期)=24MHz,则场频为:30KHz525(场周期)=57.14Hz,针对实验箱的条件,可以用 12MHz 的信号经过倍频(EP1K30QC208-2 芯片特有的功能,在 MaxPlusII 软件中调用参数可设置兆功能元件库 mega_lpm 的 CLKLOCK 元件来倍频)来产生24MHz
10、的时钟频率,参考设计的顶层文件如下图所示:图 6.VGA 接口实现顶视图VGACORE 模块包含了扫描时序产生模块、图像描述模块。时序产生模块的设计可参考图 5 所示来设计,图像描述模块主要通过 640480 个像素点来描述图像。如本项设计的彩条信号发生器可通过图像描述模块产生如下表所示的 3种显示模式,共 6 种显示变化的图像。表 3 VGA 图形编码1 行彩条 1:白黄青绿品红蓝黑 2:黑蓝红品绿青黄白2 竖彩条 1:白黄青绿品红蓝黑 2:黑蓝红品绿青黄白3 棋盘格 1:棋盘格显示模式 1 2:棋盘格显示模式 2上表颜色对应的编码为:表 4 VGA 颜色编码颜 色 黑 蓝 红 品 绿 青
11、黄 白G 0 0 0 0 1 1 1 1R 0 0 1 1 0 0 1 1B 0 1 0 1 0 1 0 1在设计完彩条信号发生器的基础上很容易完成汉字/图像的设计。由于本设计是对视频数据进行处理,用普通的设计方法(不使用专用芯片) ,在单芯片上实现是不可思议的,而在此用 FPGA 设计,轻松地达到了面积和速度上的要求。六、程序及仿真(一) 、管脚分配本设计采用主板上的 VGA 接口实验模式:模式 5时钟及控制clk-pin_29 clock9 实验要求采用 12M 的时钟rst-pin_240 键 8,低电平有效,作为使能信号MD -pin_233 键 1,模式选择信号,共有 6 种模式显示
12、器输出R -pin_180 PIO29G -pin_181 PIO30B -pin_182 PIO31HS -pin_183 PIO32VS -pin_185 PIO34(二) 、彩条发生器程序实现及仿真1、主程序module vga( clk_25m,rst_n, /系统控制hsync,vsync,vga_rgb,MD / VGA 控制);input clk_25m; / 25MHzinput rst_n; /低电平复位input MD;/ FPGA 与 VGA 接口信号output hsync; /行同步信号output vsync; /场同步信号output2:0 vga_rgb;/-/
13、 坐标计数reg9:0 x_cnt; /行坐标reg9:0 y_cnt; /列坐标always (posedge clk_25m or negedge rst_n)if(!rst_n) x_cnt = 10d0 /红色else vga_rgb = 3b010;/绿色10d232: if(char_line1char_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d233: if(char_line2char_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d234: if(char_l
14、ine3char_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d235: if(char_line4char_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d236: if(char_line5char_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d237: if(char_line6char_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d238: if(char_l
15、ine7char_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d239: if(char_line8char_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d240: if(char_line9char_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d241: if(char_lineachar_bit) vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色 10d242: if(char_
16、linebchar_bit)vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色 10d243: if(char_linecchar_bit)vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d244: if(char_linedchar_bit)vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d245: if(char_lineechar_bit)vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色10d246: if(char_lin
17、efchar_bit)vga_rgb = 3b100; /红色else vga_rgb = 3b010;/绿色 default: vga_rgb = 3b000;endcaseendelse vga_rgb =3b000 ;endmodule2、验证程序timescale 1 ns/ 1 psmodule tb_vga_char();reg t_clk_25m;reg t_rst_n; wire t_hsync;wire 1:0 t_vga_b;wire 2:0 t_vga_g;wire 2:0 t_vga_r;wire t_vsync; vga_char dut( .clk_25m(t_cl
18、k_25m),.hsync(t_hsync),.rst_n(t_rst_n),.vga_b(t_vga_b),.vga_g(t_vga_g),.vga_r(t_vga_r),.vsync(t_vsync);initial begin t_clk_25m=0;t_rst_n=1;#20;t_rst_n=0; #50; t_rst_n=1; $display(“Running testbench“); #1000 $stop; endalways #0.04 t_clk_25m=t_clk_25m; endmodule3、仿真波形六、总结在本次课程设计中,对 VGA 显示的原理有了一定的了解,在团队的分工合作下使用 Verilog 语言和 Modelsim 仿真器完成了可显示横彩条、竖彩条、棋盘格相间的 VGA 控制器的设计和验证,设计并验证了可显示英语单词”HIT”的VGA 控制器,并掌握了 Quartus II 软件和 SOPC 实验箱的使用。本次课程设计让我受益匪浅,让我提高了研究、解决问题的能力,和团队合作的意识。对我今后的学习有一定的启迪作用,使我对 FPGA 设计产生了新的认识,并产生了很浓厚的兴趣。