在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2163|回复: 0

[求助] 请教,FPGA用双口RAM做图像降帧的问题

[复制链接]
发表于 2016-4-12 22:00:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 wudfwesker 于 2016-4-12 22:03 编辑

用上位机显卡给的图像源,DVI输入是1024*768@75Hz的图像,往RAM中写了100行数据,用自生成的1024*768@50Hz时序读出,经VGA口输出,图像出现明显偏斜,这种情况是什么原因造成的。。。该如何解决呢,代码该如何改进。。。求大神指点

原图

原图

降帧效果图

降帧效果图

附上代码:



  1. module jiangzhen(
  2.   hs_i,
  3.   vs_i,
  4.   de_i,
  5.   dvi_clk_in,
  6.   dvi_data,  
  7.   CLK_OUT1,
  8.   BLANK_N,
  9.   H_S,
  10.   V_S,
  11.   data_out

  12.     );
  13. input hs_i;
  14. input vs_i;
  15. input de_i;
  16. input dvi_clk_in;
  17. input [23:0] dvi_data;
  18. input CLK_OUT1;
  19. output wire BLANK_N;
  20. output reg H_S;
  21. output reg V_S;
  22. output wire [23:0] data_out;


  23. reg RST=0;
  24. reg [10:0]cnt_11=0;
  25. always @ (posedge CLK_OUT1)
  26.         if (cnt_11==11'd1000)
  27.                 cnt_11<=cnt_11;
  28.         else
  29.                 cnt_11<=cnt_11+1;


  30. always @ (posedge CLK_OUT1)
  31.         if (cnt_11>=11'd900)
  32.                 RST<=1;
  33.         else
  34.                 RST<=0;
  35.                

  36. /////////帧计数器/////////
  37. reg [1:0] frame_cnt=0;

  38. wire [23:0] dina;
  39. wire ena;


  40. reg [16:0] addra =0;
  41. reg [16:0] addrb =0;


  42. reg vs_1,vs_2;
  43. wire flag_1;

  44. always @ (posedge dvi_clk_in)
  45.         begin
  46.                 vs_1<=vs_i;
  47.                 vs_2<=vs_1;
  48.         end
  49. assign flag_1=vs_1&&!vs_2;

  50. always @ (posedge dvi_clk_in)
  51.         if(!RST)
  52.                 frame_cnt<=0;               
  53.         else if (flag_1)
  54.                 frame_cnt<=frame_cnt+1;
  55.                

  56. always@(posedge dvi_clk_in)
  57. if(frame_cnt==2'd0)
  58. begin
  59.         if(de_i)
  60.         begin
  61.                 if(addra == 17'd102400)
  62.                         addra <=17'd102400;
  63.                 else
  64.                         addra <= addra+1'b1;
  65.                 end
  66.         else
  67.                 addra <= addra;
  68. end
  69. else
  70. addra <= 0;

  71. assign ena =(frame_cnt ==2'd0)?1:0;

  72. wire wea;
  73. assign wea=1;
  74. reg [23:0] dina_r;
  75. always @(posedge dvi_clk_in)
  76.         dina_r <= dvi_data;
  77.        
  78. assign dina = dina_r;

  79. always @(posedge CLK_OUT1)
  80. if (V_S)
  81. addrb <= 0;
  82. else if(BLANK_N)
  83.         begin
  84.                 if (addrb == 17'd102399)
  85.                         addrb <=addrb;
  86.                 else
  87.                         addrb <= addrb + 1'b1;
  88.         end       

  89.        
  90. //// INST_TAG_END ------ End INSTANTIATION Template ---------
  91. Frame_cnt U1 (
  92.   .clka(dvi_clk_in), // input clka
  93.   .ena(ena), // input ena
  94.   .wea(wea), // input [0 : 0] wea
  95.   .addra(addra), // input [18 : 0] addra
  96.   .dina(dina), // input [7 : 0] dina
  97.   .clkb(CLK_OUT1), // input clkb
  98.   .enb(BLANK_N), // input enb
  99.   .addrb(addrb), // input [18 : 0] addrb
  100.   .doutb(data_out) // output [7 : 0] doutb
  101. );
  102. // INST_TAG_END ------ End INSTANTIATION Template ---------

  103. ////////////1024*768@50Hz////////////       
  104. reg [10:0] H_cnt =0;
  105. reg [10:0] V_cnt =0;

  106. always@(posedge CLK_OUT1)
  107. begin
  108. if(RST ==0)
  109. H_cnt <=0;
  110. else if (H_cnt == 11'd1311)
  111.         H_cnt <= 0;
  112. else
  113.         H_cnt <= H_cnt + 1'b1;
  114. end
  115.        
  116. always@(posedge CLK_OUT1)
  117. begin
  118. if(RST ==0)
  119. V_cnt <=0;
  120. else if ((V_cnt == 11'd790)&&(H_cnt ==11'd1311))
  121.         V_cnt <= 0;
  122. else if(H_cnt ==11'd1311)
  123.         V_cnt <= V_cnt + 1'b1;
  124.        
  125. else V_cnt <= V_cnt;

  126. end
  127.        
  128. always@(posedge CLK_OUT1)
  129. if((H_cnt >= 11'd0)&&(H_cnt <= 11'd103))
  130.   H_S <=0;
  131. else
  132.   H_S <=1;
  133.   
  134.   
  135. always@(posedge CLK_OUT1)
  136. if((V_cnt >= 11'd0)&&(V_cnt <= 11'd2))
  137.   V_S <=1;
  138. else
  139.   V_S <=0;
  140.   
  141. reg Blank_h;
  142. reg Blank_v;

  143. always@(posedge CLK_OUT1)
  144. begin
  145. if((H_cnt >= 11'd247)&&(H_cnt <= 11'd1271))
  146.         Blank_h <= 1;
  147. else
  148.         Blank_h <= 0;
  149. end                               
  150.        
  151. always@(posedge CLK_OUT1)
  152. begin
  153. if((V_cnt >=21)&&(V_cnt <= 789))
  154.         Blank_v <= 1;
  155. else
  156.         Blank_v <= 0;
  157. end                               
  158. assign BLANK_N = (Blank_h&Blank_v);       





  159. endmodule


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

本版积分规则

关闭

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

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-30 01:22 , Processed in 0.016091 second(s), 12 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表