4755|1

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

VGA实验遇到的一些问题----新手求助 [复制链接]

本帖最后由 seu_zc 于 2016-10-14 21:13 编辑

    VGA时序图:
    显示模式:

     那么对于800x600x60hz的显示模式,显示图片的时间应该是下图所示:
    设计的电路图如下:
说明:U1是锁相环来实现频率转换,U2是同步模块设置显示模式,U3是显示控制模块
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
问题描述:

1、如果我按照上面原理设置的话,代码如下
  1. always @(posedge CLK or negedge RSTn)//定义显示图片的时间
  2.         if(!RSTn)
  3.                 isReady <= 1'b0;
  4.         else if((Count_H > 11'd216 && Count_H <11'd1017) && (Count_V > 11'd27 && Count_V <
  5. 11'd628))
  6.                 isReady <= 1'b1;
  7.         elseA
  8.                 isReady <= 1'b0;
复制代码
没有下载程序时这一块是有显示的,说明屏幕应该没问题:


显示出来是这样的,左边红框内应该显示的但没显示出来:

后来我将上面的设置修改了一下,行时序直接从同步段开始,也就是Count_H > 11'd128,结果是右边少了一小块:


下面贴出完整代码(我参照低级建模上面的代码修改的):
###同步代码
  1. /**
  2. *同步模块
  3. */
  4. module sync_module(
  5.         CLK,RSTn,
  6.         VSYNC_Sig,HSYNC_Sig,Ready_Sig,
  7.         Column_Addr_Sig,Row_Addr_Sig
  8. );

  9. input CLK;
  10. input RSTn;
  11. output VSYNC_Sig;
  12. output HSYNC_Sig;
  13. output Ready_Sig;
  14. output [10:0] Column_Addr_Sig;
  15. output [10:0] Row_Addr_Sig;

  16. /************************************************/
  17. reg [10:0] Count_H;

  18. always @ (posedge CLK or negedge RSTn)
  19.         if(!RSTn)
  20.                 Count_H <= 11'd0;
  21.         else if(Count_H == 11'd1056)
  22.                 Count_H <= 11'd0;
  23.         else
  24.                 Count_H <= Count_H + 1'b1;

  25. /************************************************/
  26. reg [10:0]Count_V;

  27. always @(posedge CLK or negedge RSTn)
  28.         if(!RSTn)
  29.                 Count_V <= 11'd0;
  30.         else if(Count_V == 11'd628)
  31.                 Count_V <= 11'd0;
  32.         else if(Count_H == 11'd1056)
  33.                 Count_V <= Count_V + 1'b1;//&&&&

  34. reg isReady;

  35. always @(posedge CLK or negedge RSTn)//定义显示图片的时间
  36.         if(!RSTn)
  37.                 isReady <= 1'b0;
  38.         else if((Count_H > 11'd216 && Count_H < 11'd1017) && (Count_V > 11'd27 && Count_V <
  39. 11'd628))
  40.                 isReady <= 1'b1;
  41.         else
  42.                 isReady <= 1'b0;

  43. /************************************************/
  44. assign VSYNC_Sig = (Count_V <= 11'd4)?1'b0:1'b1;//同步段为低电平,其他三段为高点平,行信号输出
  45. assign HSYNC_Sig = (Count_H <= 11'd128)?1'b0:1'b1;//同步段为低电平,其他三段为高点平,列信号输出
  46. assign Ready_Sig = isReady;//信号准备完毕标志输出

  47. /************************************************/
  48. assign Column_Addr_Sig = isReady?Count_H-11'd217:11'd0;//列地址信号输出,从0开始
  49. assign Row_Addr_Sig = isReady?Count_V-11'd28:11'd0;//行地址信号输出,从0开始

  50. /************************************************/
  51. endmodule
复制代码

###显示控制代码
  1. module vga_control_module_nine(
  2. CLK, RSTn,
  3. Ready_Sig, Column_Addr_Sig, Row_Addr_Sig,
  4. Pix
  5. );
  6.          input CLK;
  7.          input RSTn;
  8.          input Ready_Sig;
  9.          input [10:0]Column_Addr_Sig;//800列地址
  10.          input [10:0]Row_Addr_Sig;//600行地址
  11.          output [15:0] Pix;
  12.          
  13. /************************************************************/
  14.         parameter         RED        =        16'hF800;
  15.         parameter         GREEN        =        16'h07e0;
  16.         parameter         BLUE        =        16'h001f;
  17.         parameter   YELLOW = 16'hFFE0;
  18.         parameter         CYAN        =        16'h07FF;
  19.         parameter         BLACK        =        16'h0000;
  20.         parameter         WHITE        =        16'hFFFF;

  21. /************************************************************/
  22. reg [15:0]        PColor;

  23. always @(posedge CLK or negedge RSTn)
  24. begin
  25.         if(!RSTn)
  26.                 PColor <= 16'd0;
  27.         else if(( Column_Addr_Sig>0) && ( Column_Addr_Sig<800))
  28.         begin
  29.                         if((Row_Addr_Sig>0) && (Row_Addr_Sig<100))
  30.                                 PColor <= RED;                        
  31.                         else if((Row_Addr_Sig>101) && (Row_Addr_Sig<200))
  32.                                 PColor <= GREEN;        
  33.                         else if((Row_Addr_Sig>201) && (Row_Addr_Sig<300))
  34.                                 PColor <= BLUE;
  35.                         else if((Row_Addr_Sig>301) && (Row_Addr_Sig<400))
  36.                                 PColor <= YELLOW;
  37.                         else if((Row_Addr_Sig>401) && (Row_Addr_Sig<500))
  38.                                 PColor <= CYAN;
  39.                         else if(Row_Addr_Sig >501)
  40.                                 PColor <= RED;
  41.         end
  42.         else
  43.                 PColor <= BLACK;
  44. end

  45. assign Pix = PColor;
  46.         
  47. endmodule
复制代码
  

此帖出自FPGA/CPLD论坛

最新回复

同学,有一些资料你看能不能帮助你  https://bbs.eeworld.com.cn/thread-502904-1-1.html  详情 回复 发表于 2016-10-19 11:07
点赞 关注
 

回复
举报

20

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
同学,有一些资料你看能不能帮助你  https://bbs.eeworld.com.cn/thread-502904-1-1.html
此帖出自FPGA/CPLD论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表