微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 使用ADV7125芯片控制的VGA显示问题

使用ADV7125芯片控制的VGA显示问题

时间:10-02 整理:3721RD 点击:

小弟最近在做VGA实验,采用的时钟是59.944MHz,使用DCM进行了一次1.5倍分频,显示为800x600@60,随便写了一个代码,让显示屏全部显示白色,但是显示器没反应,我觉得自己是不是把原理理解错了,所以把代码贴在这里,希望各位不吝赐教。
另外附上了一张图板子用户手册上ADV7125和VGA连接的示意图。


  1. //////////////////////////////////////////////////////////////////////////////////
  2. module vga_dis(
  3. clk,rst_n,
  4. hs,vs,
  5. vga_r,vga_g,vga_b,
  6. );

  7. input clk; //59.944MHz
  8. input rst_n; //低电平复位
  9. output hs; //行同步信号
  10. output vs; //场同步信号
  11. output [7:0]vga_r; //RGB各8位800X600@60
  12. output [7:0]vga_g;
  13. output [7:0]vga_b;

  14. //-----------
  15. wire clk_40M;

  16. DCM1 instance_name (
  17. .CLKIN_IN(clk),
  18. .CLKDV_OUT(clk_40M)
  19. );


  20. //----------vs,vh产生----------

  21. reg[10:0] x_cnt; //行坐标
  22. reg[10:0] y_cnt; //列坐标

  23. always @ (posedge clk_40M or negedge rst_n)
  24. if(!rst_n) x_cnt <= 11'd0;
  25. else if(x_cnt == 11'd1056) x_cnt <= 11'd0;
  26. else x_cnt <= x_cnt+1'b1;

  27. always @ (posedge clk_40M or negedge rst_n)
  28. if(!rst_n) y_cnt <= 11'd0;
  29. else if(y_cnt == 11'd628) y_cnt <= 11'd0;
  30. else if(x_cnt == 11'd1056) y_cnt <= y_cnt+1'b1;

  31. reg valid;
  32. always @ (posedge clk_40M or negedge rst_n)
  33. if(!rst_n) valid<= 1'b0;
  34. else if((x_cnt>11'd216)&&(x_cnt< 11'd1017)&&(y_cnt> 11'd27)&&(y_cnt<11'd627))
  35. valid <= 1'b1;
  36. else valid <= 1'b0;

  37. assign vs=(x_cnt<= 11'd4 )?1'b0: 1'b1;
  38. assign hs= (y_cnt<= 11'd128 )? 1'b0 : 1'b1;

  39. reg [23:0]vga;

  40. always @ (posedge clk_40M )
  41. if(!valid) vga <= 24'd0;
  42. else

  43. vga<=24'b1111_1111_1111_1111_1111_1111;

  44. assign vga_r = vga[23:16];
  45. assign vga_g = vga[15:8];
  46. assign vga_b = vga[7:0];

  47. endmodule

复制代码

行时序128+88+800+40=1056
帧时序4+23+600+1=628

:dizzy:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top