电子设计自动化课程设计汇本报告_第1页
电子设计自动化课程设计汇本报告_第2页
电子设计自动化课程设计汇本报告_第3页
电子设计自动化课程设计汇本报告_第4页
电子设计自动化课程设计汇本报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...电子设计自动化课程设计报告学生姓名:学号:课设题目:VGA彩条信号显示控制器设计同组人:电子设计自动化课程设计报告郝欣欣一、课程设计内容使用Verilog语言和Modelsim仿真器完成可显示横彩条、竖彩条、棋盘格相间的VGA控制器的设计和验证设计并验证可显示英语单词〞HIT〞的VGA控制器使用QuartusII和SOPC实验箱验证设计的正确性Verilog代码要符合微电子中心编码标准二、FPGA原理CPLD、FPGA是在PAL、GAL等根基上开展起来的一种具有丰富的可编程I/O引脚、逻辑宏单元、门电路以及RAM空间的可编程逻辑器件,几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。CPLD的设计是基于乘积项选择矩阵来实现的,而FPGA基于查找表来设计的。查找表就是实现将输入信号的各种组合功能以一定的次序写入RAM中,然后在输入信号的作用下,输出特定的函数运算结果。其构造图如图1所示:图1.FPGA查找表单元一个N输入查找表(LUT,LookUpTable)可以实现N个输入变量的任何逻辑功能,如N输入“与〞、N输入“异或〞等。输入多于N个的函数、方程必须分开用几个查找表〔LUT〕实现〔如图2所示〕。图2FPGA查找表单元内部构造该系统设计中,FPGA芯片用的是ALTERA公司的EP1K30QC208-2,它的系统构造如图3所示。它由假设干个逻辑单元和中央布线池加I/O端口构成图3EP1K30QC208内部构造三、VGA接口VGA的全称为VideoGraphicArray,即显示绘图阵列。在PC行业开展的初期,VGA以其支持在640X480的较高分辨率下同时显示16种色彩或256种灰度,同时在320X240分辨率下可以同时显示256种颜色的良好特性得到广泛支持。后来,厂商们纷纷在VGA根基上加以扩大,如将显存提高至1M并使其支持更高分辨率如800X600或1024X768,这些扩大的模式就称之为VESA(VideoElectronicsStandardsAssociation,视频电子标准协会)的SuperVGA模式,简称SVGA,现在的显卡和显示器都支持SVGA模式。图4VGA接口VGA接口就是显卡上输出模拟信号的接口,也叫D-Sub接口。VGA接口是一种D型接口,上面共有15针空,分成三排,每排五个。VGA接口是显卡上应用最为广泛的接口类型,绝大多数的显卡都带有此种接口。表1VGA管脚定义管脚定义1红基色red2绿基色green3蓝基色blue4地址码IDBit5自测试(各家定义不同)6红地7绿地8蓝地9保存(各家定义不同)10数字地11地址码12地址码13行同步14场同步15地址码(各家定义不同)通过模拟VGA接口和计算机连接的显示器的工作原理,是计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R、G、B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。对于模拟显示设备,如模拟CRT显示器,信号被直接送到相应的处理电路,驱动控制显像管生成图像。而对于LCD、DLP等数字显示设备,显示设备中需配置相应的A/D(模拟/数字)转换器,将模拟信号转变为数字信号。在经过D/A和A/D2次转换后,不可防止地造成了一些图像细节的损失。VGA接口应用于CRT显示器无可厚非,但用于连接液晶之类的显示设备,则转换过程的图像损失会使显示效果略微下降。CRT显示器因为设计制造上的原因,只能承受模拟信号输入,也就是我们为什么在CRT显示器上只看到VGA接口的原因。四、VGA显示接口原理计算机显示器的显示有许多标准,常见的有VGA、SVGA等。本系统采用FPGA来实现图像显示控制器,这在产品开发设计中有许多实际应用。常见的彩色显示器,一般由CRT〔阴极射线管〕构成,彩色是由G、R、B〔绿:Green,红:Red,蓝:Blue〕三基色组成。显示是用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB三基色,合成一个彩色像素。扫描从屏幕的左上方开场,从左到右,从上到下,进展扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进展消隐,每行完毕时,用行同步信号进展行同步;扫描完所有行,用场同步信号进展场同步,并使扫描回到屏幕的左上方,同时进展场消隐,预备下一场的扫描。对于普通的VGA显示器,其引出线共含5个信号:G、R、B:三基色信号;HS:行同步信号;VS:场同步信号。对于5个信号的时序驱动,对于VGA显示器要严格遵循“VGA工业标准〞,即640×480×60Hz模式。通常我们用的显示器都满足工业标准,因此我们设计VGA控制器时要参考显示器的技术规格。图5是VGA行扫描、场扫描的时序图:图5VGA行扫描、场扫描时序图表2VGA参考时序设计VGA工业标准所要求的频率:时钟频率〔Clockfrequency〕:25.175MHz〔像素输出的频率〕;行频〔Linefrequency〕:31469Hz;场频〔Fieldfrequency〕:59.94Hz〔每秒图像刷新频率〕。五、FPGA的设计实现设计VGA图像显示控制需要注意两个问题:一个是时序的驱动,这是完成设计的关键,时序稍有偏差,显示必然不正常,甚至会损坏彩色显示器;另一个是VGA信号的电平驱动。显示控制器设计提示:显示器的技术规格提供的行频一般都满足在30-45KHz〔保守数据〕,场频一般满足在50-75Hz〔保守数据〕,针对以上保守数据,我们以30KHz的行频进展扫描时所需时钟频率为:30KHz×800〔行周期〕=24MHz,则场频为:30KHz÷525〔场周期〕=57.14Hz,针对实验箱的条件,可以用12MHz的信号经过倍频〔EP1K30QC208-2芯片特有的功能,在MaxPlusII软件中调用参数可设置兆功能元件库mega_lpm的CLKLOCK元件来倍频〕来产生24MHz的时钟频率,参考设计的顶层文件如以下列图所示:图6.VGA接口实现顶视图VGACORE模块包含了扫描时序产生模块、图像描述模块。时序产生模块的设计可参考图5所示来设计,图像描述模块主要通过640×480个像素点来描述图像。如本项设计的彩条信号发生器可通过图像描述模块产生如下表所示的3种显示模式,共6种显示变化的图像。表3VGA图形编码1行彩条1:白黄青绿品红蓝黑2:黑蓝红品绿青黄白2竖彩条1:白黄青绿品红蓝黑2:黑蓝红品绿青黄白3棋盘格1:棋盘格显示模式12:棋盘格显示模式2上表颜色对应的编码为:表4VGA颜色编码颜色黑蓝红品绿青黄白G00001111R00110011B01010101在设计完彩条信号发生器的根基上很容易完成汉字/图像的设计。由于本设计是对视频数据进展处理,用普通的设计方法〔不使用专用芯片〕,在单芯片上实现是不可思议的,而在此用FPGA设计,轻松地到达了面积和速度上的要求。六、程序及仿真〔一〕、管脚分配本设计采用主板上的VGA接口实验模式:模式5时钟及控制clk----->pin_29clock9实验要求采用12M的时钟rst----->pin_240键8,低电平有效,作为使能信号MD----->pin_233键1,模式选择信号,共有6种模式显示器输出R----->pin_180PIO29G----->pin_181PIO30B----->pin_182PIO31HS----->pin_183PIO32VS----->pin_185PIO34〔二〕、彩条发生器程序实现及仿真1、主程序modulevga( clk_25m,rst_n, //系统控制hsync,vsync,vga_rgb,MD //VGA控制 );inputclk_25m; //25MHzinputrst_n; //低电平复位inputMD; //FPGA与VGA接口信号outputhsync; //行同步信号outputvsync; //场同步信号output[2:0]vga_rgb;//-------------------------------------------------- //坐标计数reg[9:0]x_cnt; //行坐标reg[9:0]y_cnt; //列坐标always@(posedgeclk_25mornegedgerst_n) if(!rst_n)x_cnt<=10'd0; elseif(x_cnt==10'd799)x_cnt<=10'd0; elsex_cnt<=x_cnt+1'b1;always@(posedgeclk_25mornegedgerst_n) if(!rst_n)y_cnt<=10'd0; elseif(y_cnt==10'd524)y_cnt<=10'd0; elseif(x_cnt==10'd799)y_cnt<=y_cnt+1'b1;//-------------------------------------------------- //产生VGA场同步,行同步信号reghsync_r,vsync_r; always@(posedgeclk_25mornegedgerst_n) if(!rst_n)hsync_r<=1'b1; elseif(x_cnt==10'd0)hsync_r<=1'b0; //产生hsync信号 elseif(x_cnt==10'd96)hsync_r<=1'b1;always@(posedgeclk_25mornegedgerst_n) if(!rst_n)vsync_r<=1'b1; elseif(y_cnt==10'd0)vsync_r<=1'b0; //产生vsync信号 elseif(y_cnt==10'd2)vsync_r<=1'b1;assignhsync=hsync_r;assignvsync=vsync_r;//-------------------------------------------------- //有效显示标志位产生regvalid_yr; //行显示有效信号always@(posedgeclk_25mornegedgerst_n) if(!rst_n)valid_yr<=1'b0; elseif(y_cnt==10'd32)valid_yr<=1'b1; elseif(y_cnt==10'd512)valid_yr<=1'b0; wirevalid_y=valid_yr;regvalid_r; //VGA有效显示区标志位always@(posedgeclk_25mornegedgerst_n) if(!rst_n)valid_r<=1'b0; elseif((x_cnt==10'd141)&&valid_y)valid_r<=1'b1; elseif((x_cnt==10'd781)&&valid_y)valid_r<=1'b0;wirevalid=valid_r; wire[9:0]x_dis; //横坐标显示有效区域相对坐标值0-639wire[9:0]y_dis; //竖坐标显示有效区域相对坐标值0-479assignx_dis=x_cnt-10'd142;assigny_dis=y_cnt-10'd33;//--------------------------------------------------//---------------------------------------------reg[2:0]cnt;always@(posedgeMDornegedgerst_n)beginif(!rst_n)cnt<=3'd0;elseif(cnt==3'd5)cnt<=3'd0;elsecnt<=cnt+3'd1;end//-------------------------------------------------- //VGA色彩信号产生/*RGB=000 黑色 RGB=100 红色=001 蓝色 =101 紫色=010 绿色 =110 黄色=011 青色 =111 白色*/ //----------------------------------------------------reg[2:0]vga_rgb;always@(posedgeclk_25m)beginif(!valid)vga_rgb<=3'd0;elsebeginif(cnt==3'd0)begin//竖彩条模式if(x_dis>=10'd0&&x_dis<10'd80)vga_rgb<=3'd0;elseif(x_dis>=10'd80&&x_dis<10'd160)vga_rgb<=3'd1;elseif(x_dis>=10'd160&&x_dis<10'd240)vga_rgb<=3'd2;elseif(x_dis>=10'd240&&x_dis<10'd320)vga_rgb<=3'd3;elseif(x_dis>=10'd320&&x_dis<10'd400)vga_rgb<=3'd4;elseif(x_dis>=10'd400&&x_dis<10'd480)vga_rgb<=3'd5;elseif(x_dis>=10'd480&&x_dis<10'd560)vga_rgb<=3'd6;elseif(x_dis>=10'd560&&x_dis<10'd640)vga_rgb<=3'd7;endif(cnt==3'd1)begin//竖彩条模式if(x_dis>=10'd0&&x_dis<10'd80)vga_rgb<=3'd7;elseif(x_dis>=10'd80&&x_dis<10'd160)vga_rgb<=3'd6;elseif(x_dis>=10'd160&&x_dis<10'd240)vga_rgb<=3'd5;elseif(x_dis>=10'd240&&x_dis<10'd320)vga_rgb<=3'd4;elseif(x_dis>=10'd320&&x_dis<10'd400)vga_rgb<=3'd3;elseif(x_dis>=10'd400&&x_dis<10'd480)vga_rgb<=3'd2;elseif(x_dis>=10'd480&&x_dis<10'd560)vga_rgb<=3'd1;elseif(x_dis>=10'd560&&x_dis<10'd640)vga_rgb<=3'd0;endif(cnt==3'd2)begin//横彩条模式if(y_dis>=10'd0&&y_dis<10'd60)vga_rgb<=3'd0;elseif(y_dis>=10'd60&&y_dis<10'd120)vga_rgb<=3'd1;elseif(y_dis>=10'd120&&y_dis<10'd180)vga_rgb<=3'd2;elseif(y_dis>=10'd180&&y_dis<10'd240)vga_rgb<=3'd3;elseif(y_dis>=10'd240&&y_dis<10'd300)vga_rgb<=3'd4;elseif(y_dis>=10'd300&&y_dis<10'd360)vga_rgb<=3'd5;elseif(y_dis>=10'd360&&y_dis<10'd420)vga_rgb<=3'd6;elseif(y_dis>=10'd420&&y_dis<10'd480)vga_rgb<=3'd7;endif(cnt==3'd3)begin//横彩条模式if(y_dis>=10'd0&&y_dis<10'd60)vga_rgb<=3'd7;elseif(y_dis>=10'd60&&y_dis<10'd120)vga_rgb<=3'd6;elseif(y_dis>=10'd120&&y_dis<10'd180)vga_rgb<=3'd5;elseif(y_dis>=10'd180&&y_dis<10'd240)vga_rgb<=3'd4;elseif(y_dis>=10'd240&&y_dis<10'd300)vga_rgb<=3'd3;elseif(y_dis>=10'd300&&y_dis<10'd360)vga_rgb<=3'd2;elseif(y_dis>=10'd360&&y_dis<10'd420)vga_rgb<=3'd1;elseif(y_dis>=10'd420&&y_dis<10'd480)vga_rgb<=3'd0;endif(cnt==3'd4)begin//棋盘格模式case(x_dis)10'd0:begin if(y_dis>=10'd0&&y_dis<10'd60)vga_rgb<=3'd0;elseif(y_dis>=10'd60&&y_dis<10'd120)vga_rgb<=3'd1;elseif(y_dis>=10'd120&&y_dis<10'd180)vga_rgb<=3'd2;elseif(y_dis>=10'd180&&y_dis<10'd240)vga_rgb<=3'd3;elseif(y_dis>=10'd240&&y_dis<10'd300)vga_rgb<=3'd4;elseif(y_dis>=10'd300&&y_dis<10'd360)vga_rgb<=3'd5;elseif(y_dis>=10'd360&&y_dis<10'd420)vga_rgb<=3'd6;elseif(y_dis>=10'd420&&y_dis<10'd480)vga_rgb<=3'd7;end10'd80,10'd160,10'd240,10'd320,10'd400,10'd480,10'd560,10'd640:vga_rgb<=vga_rgb+3'd1;//每80个横坐标像素点后显示色彩数据增1变化default:;endcaseendif(cnt==3'd5)begin//棋盘格模式case(x_dis)10'd0:beginif(y_dis>=10'd0&&y_dis<10'd60)vga_rgb<=3'd7;elseif(y_dis>=10'd60&&y_dis<10'd120)vga_rgb<=3'd6;elseif(y_dis>=10'd120&&y_dis<10'd180)vga_rgb<=3'd5;elseif(y_dis>=10'd180&&y_dis<10'd240)vga_rgb<=3'd4;elseif(y_dis>=10'd240&&y_dis<10'd300)vga_rgb<=3'd3;elseif(y_dis>=10'd300&&y_dis<10'd360)vga_rgb<=3'd2;elseif(y_dis>=10'd360&&y_dis<10'd420)vga_rgb<=3'd1;elseif(y_dis>=10'd420&&y_dis<10'd480)vga_rgb<=3'd0;end10'd80,10'd160,10'd240,10'd320,10'd400,10'd480,10'd560,10'd640:vga_rgb<=vga_rgb+3'd1;//每80个横坐标像素点后显示色彩数据增1变化default:;endcaseendendendendmodule2、验证程序`timescale1ns/1psmoduletb_vga();regt_clk_25m;regt_rst_n;wiret_hsync;wire[2:0]t_vga_rgb;wiret_vsync;wiret_MD;vgahctdut(.clk_25m(t_clk_25m),.hsync(t_hsync),.rst_n(t_rst_n),.vga_rgb(t_vga_rgb),.vsync(t_vsync),.MD(t_MD));initialbegint_clk_25m=0;t_rst_n=1;t)MD=0;#20;t_rst_n=0;#50;t_rst_n=1;$display("Runningtestbench");#10000000000$stop;endalways#0.04t_clk_25m=~t_clk_25m;always#200t_MD=~t_MD;endmodule3、仿真波形〔三〕、字符显示程序及仿真1、主程序`timescale1ns/1psmodulevga_char( clk_25m,rst_n, //系统控制 hsync,vsync,vga_rgb //VGA控制 );inputclk_25m; //25MHzinputrst_n; //低电平复位 //FPGA与VGA接口信号outputhsync; //行同步信号outputvsync; //场同步信号output[2:0]vga_rgb;//-------------------------------------------------- //坐标计数reg[9:0]x_cnt; //行坐标reg[9:0]y_cnt; //列坐标always@(posedgeclk_25mornegedgerst_n) if(!rst_n)x_cnt<=10'd0; elseif(x_cnt==10'd799)x_cnt<=10'd0; elsex_cnt<=x_cnt+1'b1;always@(posedgeclk_25mornegedgerst_n) if(!rst_n)y_cnt<=10'd0; elseif(y_cnt==10'd524)y_cnt<=10'd0; elseif(x_cnt==10'd799)y_cnt<=y_cnt+1'b1;//-------------------------------------------------- //VGA场同步,行同步信号reghsync_r,vsync_r; //同步信号always@(posedgeclk_25mornegedgerst_n) if(!rst_n)hsync_r<=1'b1; elseif(x_cnt==10'd0)hsync_r<=1'b0; //产生hsync信号 elseif(x_cnt==10'd96)hsync_r<=1'b1;always@(posedgeclk_25mornegedgerst_n) if(!rst_n)vsync_r<=1'b1; elseif(y_cnt==10'd0)vsync_r<=1'b0; //产生vsync信号 elseif(y_cnt==10'd2)vsync_r<=1'b1;assignhsync=hsync_r;assignvsync=vsync_r;//-------------------------------------------------- //有效显示标志位产生regvalid_yr; //行显示有效信号always@(posedgeclk_25mornegedgerst_n) if(!rst_n)valid_yr<=1'b0; elseif(y_cnt==10'd32)valid_yr<=1'b1; elseif(y_cnt==10'd512)valid_yr<=1'b0; wirevalid_y=valid_yr;regvalid_r; //VGA有效显示区标志位always@(posedgeclk_25mornegedgerst_n) if(!rst_n)valid_r<=1'b0; elseif((x_cnt==10'd141)&&valid_y)valid_r<=1'b1; elseif((x_cnt==10'd781)&&valid_y)valid_r<=1'b0;wirevalid=valid_r; //wire[9:0]x_dis; //横坐标显示有效区域相对坐标值0-639wire[9:0]y_dis; //竖坐标显示有效区域相对坐标值0-479//assignx_dis=x_cnt-10'd142;assigny_dis=y_cnt-10'd33;//--------------------------------------------------//-------------------------------------------------- //VGA色彩信号产生/*RGB=000 黑色 RGB=100 红色 =001 蓝色 =101 紫色 =010 绿色 =110 黄色 =011 青色 =111 白色*/ /*HIT字模参数*/parameter char_line0=24'h000000,char_line1=24'h000000,char_line2=24'h000000,char_line3=24'he77cfe,char_line4=24'h421092,char_line5=24'h421010,char_line6=24'h421010,char_line7=24'h421010,char_line8=24'h7e1010,char_line9=24'h421010,char_linea=24'h421010,char_lineb=24'h421010,char_linec=24'h421010,char_lined=24'he77c38,char_linee=24'h000000,char_linef=24'h000000;reg[4:0]char_bit; //显示位计算always@(posedgeclk_25mornegedgerst_n) if(!rst_n)char_bit<=5'h1f; elseif(x_cnt==10'd442)char_bit<=5'd23; //显示最高位数据 elseif(x_cnt>10'd442&&x_cnt<10'd466)char_bit<=char_bit-1'b1; //依次显示后面的数据reg[2:0]vga_rgb; //VGA色彩显示存放器always@(posedgeclk_25m) if(!valid)vga_rgb<=3'd0; elseif(x_cnt>10'd442&&x_cnt<10'd467)begin case(y_dis) 10'd231:if(char_line0[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd232:if(char_line1[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd233:if(char_line2[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd234:if(char_line3[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd235:if(char_line4[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd236:if(char_line5[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd237:if(char_line6[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd238:if(char_line7[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd239:if(char_line8[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd240:if(char_line9[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'b010; //绿色 10'd241:if(char_linea[char_bit])vga_rgb<=3'b100; //红色 elsevga_rgb<=3'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论