搜索
bottom↓
回复: 13

求助,XILINX做的相机图象抖动。

[复制链接]

出0入0汤圆

发表于 2019-2-15 14:42:12 | 显示全部楼层 |阅读模式
本帖最后由 advantech 于 2019-2-15 14:49 编辑

这个图是网上找的,和自己做的相机类似 。显示器上的图象出现抖动,后来想到一个办法,写入静态图片测试,相当于不使用CMOS图象数据,自己写一帧数据进去。
问题就出在这里,使用主时钟经过PLL产生的一个时钟25M,50M,或者100M,作为FIFO_WRITE的写时钟时图象都正常,而使用CMOS的PCLK时钟(不论频率多少)
作为FIFO_WRITE的写时钟时,都会出现图象抖动,所有的源码都不变,只是改变写入模块的时钟,一个是数据产生模块的时钟,一个是FIFO_WRITE的写时钟;
现象奇怪就在于,只是写入时钟变化,读出时钟及其他时钟都没有变化,就写入一帧图象,自己觉得应该是稳定不抖动的,最坏的是写入的图象数据错误而已。
以前用的是ALTERA的,刚转XILINX不久,用的是SPARTAN6,挂DDR3,这个问题都快一个月了,还没有解决。期间也是试过各种办法,希望兄第们给点思路,
大家一起探讨一下。谢谢了。

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2019-2-15 16:57:00 | 显示全部楼层
问题终于找到了,显示模块有问题,进位链太长,导致时序错误。

出0入442汤圆

发表于 2019-2-15 20:12:12 来自手机 | 显示全部楼层
我靠,你这都不带时序约束的?还有,xilinx的时钟输出要用oddr,不支持直接时钟输出。

出0入0汤圆

 楼主| 发表于 2019-2-15 21:23:13 | 显示全部楼层
wye11083 发表于 2019-2-15 20:12
我靠,你这都不带时序约束的?还有,xilinx的时钟输出要用oddr,不支持直接时钟输出。 ...

ALTERA的时序约束工具直观一些,XILINX的刚开始学,资料少,还不精通,时序的基础知识都差不多。

出0入442汤圆

发表于 2019-2-15 21:41:01 来自手机 | 显示全部楼层
advantech 发表于 2019-2-15 21:23
ALTERA的时序约束工具直观一些,XILINX的刚开始学,资料少,还不精通,时序的基础知识都差不多。 ...

xilinx一样直观。直接用它的时序工具生成一个模板,然后有些信号要自己输。

xilinx的时序约束不能出现环路,即从a到b再从b到a。这是个大坑。这种情况主要出现在多个系统时钟之间的交互。一旦出现环路,所有相关时序就全丢了。tmd坑了我一个多月才发现。

出0入0汤圆

 楼主| 发表于 2019-2-16 20:31:21 | 显示全部楼层
本帖最后由 advantech 于 2019-2-16 20:40 编辑

高兴的太早了。只是改了时钟而已。

PB_Debouncer    u90       (
                          .clk(ccd_clk1),
                               .rst(rst_n),
                          .PB(extern_in),  
         
                          .PB_down(trig)
                          );


cam_test_static   u99    (
                          .clk(ccd_clk1),
                                                                  .rst_n(rst_n & ddr_init_done), //& ddr_init_done
                                                                       
                                                                  .trig(trig),
                                                                       
                                                                  .fifo_load(fifo1_load),
                                                                  .fifo_wr_clk(fifo1_wr_clk),
                                                                  .fifo_wr_en(fifo1_wr_en),
                                                                  .fifo_wr_data(fifo1_din)                   
                                );
改成

PB_Debouncer    u90       (
                          .clk(clk25),
                               .rst(rst_n),
                          .PB(extern_in),  
         
                          .PB_down(trig)
                          );


cam_test_static   u99    (
                          .clk(clk25),
                                                                  .rst_n(rst_n & ddr_init_done), //& ddr_init_done
                                                                       
                                                                  .trig(trig),
                                                                       
                                                                  .fifo_load(fifo1_load),
                                                                  .fifo_wr_clk(fifo1_wr_clk),
                                                                  .fifo_wr_en(fifo1_wr_en),
                                                                  .fifo_wr_data(fifo1_din)                   
                                );

一切都正常,用ccd_clk1就不正常。

出0入0汤圆

 楼主| 发表于 2019-2-16 20:35:43 | 显示全部楼层
本帖最后由 advantech 于 2019-2-16 20:37 编辑
advantech 发表于 2019-2-16 20:31
高兴的太早了。

PB_Debouncer    u90       (


其中CLK25 是晶振经过PLL生成,同时生成的有DDR3时钟和其他读写时钟。
而CCD_CLK1时钟是由CMOS时钟经过IBUF和BUG生成。代码如下。

IBUFG      #(
                           .IOSTANDARD("DEFAULT")  // Specify the input I/O standard
                          )  
          u_ibufg_sys_clk0               (
                          .I  (ccd_clk),
                          .O  (ccd_clk_m)
                          );



BUFG   u999               (
                          .I  (ccd_clk_m),
                          .O  (ccd_clk1)
                          );

出0入0汤圆

 楼主| 发表于 2019-2-16 20:39:25 | 显示全部楼层
wye11083 发表于 2019-2-15 21:41
xilinx一样直观。直接用它的时序工具生成一个模板,然后有些信号要自己输。

xilinx的时序约束不能出现环 ...


我的CCD_CLK1和CLK25同样都是走的全局时钟网络,应该没有什么影响。
难道他们分时钟区域,过不去?

出0入442汤圆

发表于 2019-2-16 21:09:15 | 显示全部楼层
advantech 发表于 2019-2-16 20:39
我的CCD_CLK1和CLK25同样都是走的全局时钟网络,应该没有什么影响。
难道他们分时钟区域,过不去? ...

我看了一下你的框图,比起我的要简单得多。图像抖动似乎是你异步时钟域没处理好。FIFO我看你那个cam_test什么的用了两个异步时钟,这有可能带来一系列问题。

给你一点建议,把你的DDR读写等等全部整合到一个系统时钟里面,把你cam信号独立出来,单独搞个FIFO,另外每帧给FIFO复位一次,确保数据对齐。因此,你可以在cam_writter里面用一个ram而不是fifo,向后面ddr_writter以页为单位写入,每帧地址归0。cam_writter使用ccd_clk,而ddr_writter使用sys_clk,这也是我现在用的方案。我一个DDR端口经过arbiter复用到4路sensor上,带宽几乎跑了一大半,只在最开始信号写错的时候才有毛病。

注意xilinx的约束要比实际的做小点,留点芯片余量。你按照需求做的约束通常批量会出大问题,但是你给约束做小点(90%左右,比如40ns做到36ns的约束)通常不会出问题。Xilinx的片子一致性稍微比较差。

出0入0汤圆

发表于 2019-2-16 21:25:33 | 显示全部楼层
考虑:
# 源同步时钟信号输入做input delay约束。根据所用芯片选择适当的CLK BUF,CLK过DCM,信号加IDELAY,换采样边沿,etc,来满足约束。
时钟走IBUF+CLK-BUF上时钟网再到信号的IOB-REG采样可能需要相当长的Delay。需要加约束让工具确认布线结果正确,必要时进行各种调整以满足约束。

# 没有特殊需求的话,主要模块用一个大的时钟域;I/O的非中断流部分仅进行必要的处理;用浅FIFO做CDC。
主要是约束和下ILA调试比较方便,设计风格的选择而已,不是问题。

# 评估内存带宽/FIFO深度是不是足够。
挂ILA看看是不是有OF/UF。

出0入0汤圆

 楼主| 发表于 2019-2-16 22:29:54 | 显示全部楼层
dr2001 发表于 2019-2-16 21:25
考虑:
# 源同步时钟信号输入做input delay约束。根据所用芯片选择适当的CLK BUF,CLK过DCM,信号加IDELAY ...

请教一下
FIFO_RW_IP      u3       (
                         .rst                    (fifo1_load),      // input rst
                                                                 //.rst                    (~rst_n),
                                                                                                                                  
                         .wr_clk                 (fifo1_wr_clk),           // input wr_clk
                                                                 //.wr_clk                 (ccd_clk1),           // input wr_clk
                                                                 .wr_en                  (fifo1_wr_en),// & frame_en1),   // input wr_en
                                                                 .din                    (fifo1_din),     // input [127 : 0] din               
                                                                 .full                   (fifo1_full),    // output full
                                                                 .wr_data_count          (fifo1_wr_used), // output [6 : 0] wr_data_count
                                                                 
                         //.rd_clk                 (fifo1_rd_clk),           // input rd_clk  
                         .rd_clk                 (c3_clk0),           // input rd_clk                                                                  
                         .rd_en                  (fifo1_rd_en),   // input rd_en
                         .dout                   (fifo1_dout),    // output [127 : 0] dout  
                         .empty                  (fifo1_empty),   // output empty
                         .rd_data_count          (fifo1_rd_used)  // output [6 : 0] rd_data_count  

其中FIFO 的写时钟有两种方式,效果是否一样。
第一种 : .wr_clk       (clk25),  //其中CLK25为全局时钟;
第二种: .wr_clk       (fifo_wr_clk);  assign fifo_wr_clk = clk25  //其中CLK25为全局时钟;

个人觉得应该是不一样的。

出0入0汤圆

 楼主| 发表于 2019-2-16 22:34:21 | 显示全部楼层
dr2001 发表于 2019-2-16 21:25
考虑:
# 源同步时钟信号输入做input delay约束。根据所用芯片选择适当的CLK BUF,CLK过DCM,信号加IDELAY ...


都还没有用到外部的数据,只是用到外部的时钟,数据是由该时钟产生的。

我再用你的方法试试,谢谢拉。

出0入0汤圆

发表于 2019-2-17 09:07:56 | 显示全部楼层
advantech 发表于 2019-2-16 22:29
请教一下
FIFO_RW_IP      u3       (
                         .rst                    (fifo1_load), ...

没区别。

综合完了看看STA结果呗,以及你使用的时钟频率有什么区别
别说你没下时钟约束

出0入0汤圆

 楼主| 发表于 2019-11-28 18:20:39 | 显示全部楼层
最近在用ZYNQ方案了,以前的方案没有这个 好 。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 11:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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