原创 基于verilog的VGA简单接口驱动

2008-8-6 19:14 8170 12 20 分类: FPGA/CPLD

基于verilogVGA简单接口驱动<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


       断断续续的利用业余的时间终于搞定了VGA的驱动,从VGA的显像原理到接口的定义再到编程驱动。其实现在想想还是蛮简单的,显像的原理就不废话了,前面的日志里有详细的说明,今天就主要谈一下用verilogVGA编程驱动。


       FPGA芯片用的还是Spartan3系列的xc3s400。即使是编程,也还是不得不先看看它的接口连接电路:


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


点击看大图


       标准VGA一共15个接口(拔下你家的液晶或是CRT显示器看看就知道了),真正用到的信号接口不多,就五个,HSYNC是行同步信号,VSYNC是场同步信号,VGA_RVGA_GVGA_B是三原色信号,这三个信号接口都是输入模拟信号的,所以它们都有相应的地线需要连接。我的这块FPGA开发板上面做的比较简单,直接用IO口去连接VGA的五个信号接口了,并且三原色信号接口输入的只可能是数字信号(01),因此驱动液晶屏上显示的颜色最多也就8种,一般来说,可以在FPGAVGA接口间加一个DA模块的设计,这样就可能实现65536或者更多种可能的配色效果。


       看完接口电路,就看程序吧,这个程序要实现的显示效果很简单,屏幕是800*60015寸液晶)的,如图:



点击看大图 


Verilog代码以及详细注释如下:


module vga_rgb8(clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b);


 


input clk;       //50MHz


input rst_n;    //低电平复位


output hsync; //行同步信号


output vsync; //场同步信号


       //三原色信号接口RGB


output vga_r;


output vga_g;


output vga_b;


 


//--------------------------------------------------


reg[9:0] x_cnt;      //行坐标(这里包括了行同步、后沿、有效数据区、前沿)


reg[9:0] y_cnt;      //列坐标(这里包括了场同步、后沿、有效数据区、前沿)


 


always @ (posedge clk or negedge rst_n)


       if(!rst_n) x_cnt <= 10'd0;


       else if(x_cnt == 10'd1000) x_cnt <= 10'd0;           //行计数只记到1000


       else x_cnt <= x_cnt+1'b1;


 


always @ (posedge clk or negedge rst_n)


       if(!rst_n) y_cnt <= 10'd0;


       else if(y_cnt == 10'd665) y_cnt <= 10'd0;             //场同步只记到665


       else if(x_cnt == 10'd1000) y_cnt <= y_cnt+1'b1;//每计数完一行,场同步就加一


 


//--------------------------------------------------


wire valid;      //有效数据显示区标志,就是你在液晶屏幕上可以看到的区域


/*要说明的一点是,当坐标不处于有效显示区时,RGB三原色信号接的电平都必须拉底(0*/


 


assign valid = (x_cnt > 10'd180) && (x_cnt < 10'd980)


                                   && (y_cnt > 10'd35) && (y_cnt < 10'd635);


 


wire[9:0] xpos,ypos;    //有效显示区坐标


 


assign xpos = x_cnt-10'd180;


assign ypos = y_cnt-10'd35;


 


//--------------------------------------------------


reg hsync_r,vsync_r;


 


always @ (posedge clk or negedge rst_n)


   if (!rst_n) begin


              hsync_r <= 1'b0;


      vsync_r <= 1'b0;


      end


   else begin


      hsync_r <= x_cnt <= 10'd50;  //产生hsync信号(行同步)


      vsync_r <= y_cnt <= 10'd6;   //产生vsync信号(场同步)


      end


 


assign hsync = hsync_r;


assign vsync = vsync_r;


 


//--------------------------------------------------


       //显示一个矩形框


wire a_dis,b_dis,c_dis,d_dis;     //矩形框显示区域定位


 


assign a_dis = ( (xpos>=200) && (xpos<=220) )


                            && ( (ypos>=140) && (ypos<=460) );


                           


assign b_dis = ( (xpos>=580) && (xpos<=600) )


                            && ( (ypos>=140) && (ypos<=460) );


 


assign c_dis = ( (xpos>=220) && (xpos<=580) )


                            && ( (ypos>140)  && (ypos<=160) );


                           


assign d_dis = ( (xpos>=220) && (xpos<=580) )


                            && ( (ypos>=440) && (ypos<=460) );


 


       //显示一个小矩形


wire e_rdy;    //矩形的显示有效矩形区域


 


assign e_rdy = ( (xpos>=385) && (xpos<=415) )


                            && ( (ypos>=285) && (ypos<=315) );


 


//--------------------------------------------------


       //r,g,b控制液晶屏颜色显示,背景显示蓝色,矩形框显示红蓝色


assign vga_r = valid ? e_rdy : 1'b0;


assign vga_g = valid ?  (a_dis | b_dis | c_dis | d_dis) : 1'b0;


assign vga_b = valid ? ~(a_dis | b_dis | c_dis | d_dis) : 1'b0;  


 


endmodule


 


 

PARTNER CONTENT

文章评论8条评论)

登录后参与讨论

用户1316439 2012-11-14 22:09

第一次来你的博客就被你的内容深深吸引了,以后会经常向你学习的。

zhanghaokm_428385128 2011-7-10 20:24

学习学习

ilove314_323192455 2011-3-9 21:55

CFI_FLASH和Avalon-MM Tristate Bridge组件在添加完后需要连接的,好像是手动连接吧,估计是你忽略了这一步吧

用户1606089 2011-3-8 22:55

特权同学,我在配置CFI_FLASH和Avalon-MM Tristate Bridge时总是出现如下错误:cfi_flash_0.s1 must be connected to an Avalon_MM Trister master;tristate_bridge_1.tristate_master must be connected to Avalon_MM Trister slave 我不知道这是什么原因,折腾了好几天,还是没有解决。希望你抽出宝贵的时间帮我解决一下,谢谢咯。我用的是quartus ii 9.1版本的。

用户1638247 2011-3-8 22:41

特权同学,我用的9.1版本的,在最后添加PLL的时候不能Launch 编辑PLL的编辑界面,请问遇到过这种问题吗?无解了。。。

用户183270 2011-1-13 23:04

不好意思 是俺没看清

ilove314_323192455 2011-1-13 11:12

不是很明白您的问题在哪。也许您是没有分清Byte和bit?

用户183270 2011-1-12 11:37

特权同学 你文章里说道epcs的配置容量问题是说对于epcs4,EP2C8Q208 所占的存储量为 247,974Bytes。那么也就是有 256KBytes左右的存储空间是可以用于软件程序的存储,是不是有错误,应该有3M多,请指教。

ilove314_323192455 2010-12-31 17:12

在NIOS2系统之外不使用可以不接

用户233562 2010-12-31 17:04

向特权同学请教:nios2 系统例化中有: .altpll_0_c0_out (clk_25m), .altpll_0_c1_out (clk_50m), clk_25m与clk_50m只是wire型变量,最后它们接到哪儿去了啊?最后的管脚也没有它们?
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
EE直播间
更多
我要评论
8
12
关闭 站长推荐上一条 /3 下一条