DM8168板上CameraLink视频输入部分是通过DS90CR288解串芯片和Cyclone IV配合工作的,初始调试之后,发现出现了噪点,这些点在明暗的交界之间闪烁,调整摄像头的光圈,还明显的发现有一圈圈的东西,网上查了查说是缺了数据线,于是就用SignalTap采了几次数据,发现以下现象:
其中PORTA中的6位5位在相邻的两个下降沿,它们的值都改变,这貌似不正常,这种情况同样也发生在PORTB,而且除了5,6数据位,别的数据位也都会随机出现这种相邻两个下降沿数据突变的情况。估计视频上闪烁的点就是这些跳变的杰作。于是就是去找硬件原因,匹配电阻换了换值,换了换位置,测了差分对的幅度,还是无果而终。得出了几个可能性:
①DS90CR288解串芯片供电不足。
②差分线阻抗和100欧电阻不匹配(传输线短,可能性较小)。
③视频线不同步(做了等长处理,可能性小)
④TOP层走了视频数据线和时钟线,TTL信号对差分线上的电流造成了串扰?TTL离匹配电阻不够远?
硬件上暂时没有确切的思路,希望有经验的前辈能看到我的现象给出指导,我这里先用Verilog想办法把这些相邻两个下降沿突变的点给抹平,也就是消除这些突变造成的闪点,再看看图像。添加三个缓存,用这三个缓存数据去判断,达到抹平以上突变点的目的。
要修改的原始代码:
always @ (negedge clk80m ) begin PORTA<=(220*in[23:16]+4096)>>8; end always @ (negedge clk80m ) begin PORTB<=(220*in[15:8]+4096)>>8; end修改后代码:
always @ (negedge clk80m ) begin PA<=(220*in[23:16]+4096)>>8; PA1<=PA; PA2<=PA1; if(PA[7]==PA2[7])PA2[7]<=PA[7]; if(PA[6]==PA2[6])PA2[6]<=PA[6]; if(PA[5]==PA2[5])PA2[5]<=PA[5]; if(PA[4]==PA2[4])PA2[4]<=PA[4]; if(PA[3]==PA2[3])PA2[3]<=PA[3]; if(PA[2]==PA2[2])PA2[2]<=PA[2]; if(PA[1]==PA2[1])PA2[1]<=PA[1]; if(PA[0]==PA2[0])PA2[0]<=PA[0]; PORTA<=PA2; end always@(negedge clk80m) begin PB<=(220*in[15:8]+4096)>>8; PB1<=PB; PB2<=PB1; if(PB[7]==PB2[7])PB2[7]<=PB[7]; if(PB[6]==PB2[6])PB2[6]<=PB[6]; if(PB[5]==PB2[5])PB2[5]<=PB[5]; if(PB[4]==PB2[4])PB2[4]<=PB[4]; if(PB[3]==PB2[3])PB2[3]<=PB[3]; if(PB[2]==PB2[2])PB2[2]<=PB[2]; if(PB[1]==PB2[1])PB2[1]<=PB[1]; if(PB[0]==PB2[0])PB2[0]<=PB[0]; PORTB<=PB2; end
多牺牲了三个时钟周期,将相邻两个下降沿产生突变的点给去除之后,再次观察图像,发现噪点基本上全部去除,但是这种办法始终不可靠,硬件上产生的毛病用Verilog去弥补的方法只能是治标不治本。因为较之前的720P图像,现在的图像清晰度有所下降,下降多少还没有评估,先记录一下。
原文地址:http://blog.csdn.net/wu20093346/article/details/40780921