集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1213|回复: 3

初试VGA

[复制链接]
lcx 发表于 2014-5-17 16:11:31 | 显示全部楼层 |阅读模式
您好,这学期我们开了fpga课程,总共就6、7节课,然后现在最后在开发板上做一个画图仪,是用ps2的鼠标加vga显示。
现在在做vga显示这块,就先根据例程做了一个二色的240*320的位图的显示。
就是在白色的像素,RGB一共30位全发1,黑色的像素则全发0。
但是效果不是很理想,出现了这种东西:

然后,我将代码改了一下,白色的RGB值改为了:
RValue=10’h2ff;
GValue=10'h2ff;
BValue=10'h2ff;
即次高位为0,效果变成了这样

虽然那些紫色斑纹没了,但是整个图像很暗,几乎看不出白色的样子。我又试着改变其他位的值,发现只要第8位为1,就会出现紫斑。
现在很困惑。
ps:显示器应该是好的,接在主机上是没问题的:

最后附上,时序部分的程序:
  reg [10:0]a = 11'd136;
  reg [10:0]b = 11'd160;
  reg [10:0]c = 11'd1024;
  reg [10:0]d = 11'd24;
  reg [10:0]e = 11'd1344;
  
  reg [10:0]o = 11'd6;
  reg [10:0]p = 11'd29;
  reg [10:0]q = 11'd768;
  reg [10:0]r = 11'd3;
  reg [10:0]s = 11'd806;
  
  always @ (posedge CLK or negedge RSTn)
  begin
    if(!RSTn)
      Count_H <= 11'd0;
    else if(Count_H == e)
      Count_H <= 11'd0;
    else
      Count_H <= Count_H + 11'd1;
  end
  
  always @ (posedge CLK or negedge RSTn)
  begin
    if(!RSTn)
      Count_V <= 11'd0;
    else if(Count_V == s)
      Count_V <= 11'd0;
    else if(Count_H == e)
      Count_V <= Count_V + 11'd1;
  end
  
  always @ (posedge CLK or negedge RSTn)
  begin
    if(!RSTn)
      isReady <= 0;
    else if((Count_H >= (a+b) && Count_H <= (a+b+c+11'd1)) &&
            (Count_V >= (o+p)  && Count_V <= (o+p+q+11'd1)))         //这里,在例程上分别是a+b+c+11‘1和o+p+q,我不知道原因,但是我把所有情况
                                                                                                           //都试了一次,即a+b+c和o+p+q、a+b+c+11'd1和o+p+q、a+b+c和o+p+q+11’d1
                                                                                                           //a+b+c+11'd1和o+p+q+11‘d1都试过了,效果并没有改变
      isReady <= 1'd1;
    else
      isReady <= 1'd0;
  end
  
  assign VSYNC_Sig = (Count_V <= o)   ?1'd0 : 1'd1;
  assign HSYNC_Sig = (Count_H <= a)   ?1'd0 : 1'd1;
  assign De_Sig    = (Count_V<=o || Count_H<=a)? 1'd0 : 1'd1;
  
  assign Ready_Sig = isReady;
  
  assign Column_Addr_Sig = (Ready_Sig) ? (Count_H - (a+b+11'd1))  : 11'd0;
  assign Row_Addr_Sig    = (Ready_Sig) ? (Count_V - (o+p+11'd1))  : 11'd0;
  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcx 发表于 2014-5-20 09:03:34 | 显示全部楼层
谢谢呀,这两天考试……我头都快晕了,今天来看到你的回复,实在非常感谢。我下午试一下,看行不行。不过不管怎样都十分感谢。
 楼主| lcx 发表于 2014-5-20 23:34:56 | 显示全部楼层
laokai 发表于 2014-5-19 14:27
从现象来看是你的时序问题我给你个例子程序,你去看看!驱动时钟25M!输出色条!

您好,我试了下你的程序,不过,我不知道怎么产生25.175的时钟,只能产生25MHz的。
结果,屏幕上什么都没有。
然后,我将参数改成了800*600@60的,时钟用40Mhz,结果屏幕上显示 “input signal out of range”
我改了的部分如下:
parameter        H_SYNC_TIME            =10'd128;
parameter        H_BACK_PORCH         =10'd80;
parameter        H_LEFT_BORDER         =10'd8;
parameter        H_ACT_START            =H_SYNC_TIME + H_BACK_PORCH + H_LEFT_BORDER;
parameter        H_ACTIVE_TIME         =10'd800;
parameter        H_ACT_END            =H_ACT_START + H_ACTIVE_TIME;
parameter        H_TOTAL_TIME         =10'd1056;
parameter        V_TOTAL_TIME         =10'd628;
parameter        V_SYNC_TIME            =10'd4;
parameter        V_BACK_PORCH         =10'd15;
parameter        V_TOP_BORDER         =10'd8;
parameter        V_ACT_START            =V_SYNC_TIME + V_BACK_PORCH + V_TOP_BORDER;
parameter        V_ACTIVE_TIME         =10'd600;
parameter        V_ACT_END            =V_ACT_START + V_ACTIVE_TIME;

我这几天都快崩溃了……这两个星期,三场考试,一篇论文,十份个实验报告,一场答辩……
 楼主| lcx 发表于 2014-5-21 13:13:48 | 显示全部楼层
laokai 发表于 2014-5-21 11:19
你改的参数需要按照标准走的,我给你的640*480外部加个PLL给25M时钟就行,看看那是否能跑通,然后再尝试修 ...

我又跑了次程序,这次倒是有画面了,不过还是有那种紫斑给:

就是左边那一溜~~~
不过还是很感谢了……
我后天就要交了,暂时就这种程度吧。
不过,我改了参数的还是不行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-7 05:08 , Processed in 0.105070 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表