EDN China > 设计实例 > 模拟设计 > 时钟/PLL > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

(多图) 基于FPGA的系统通过合成两条视频流来提供3D视频

Witold Kaczurba?? ADI?? 2014年08月12日 ?? 收藏0

对齐误差测量

两个数字化数据流之间的对齐误差可以在视频FIFO输出端进行测量,其方法是使用一个单一时钟计数器,该计数器在输入信号之一的垂直同步(VS)脉冲上复位。图12所示两个视频流(vs_a_in和vs_b_in)的对齐误差为4个像素。计数器使用列表1中所示方法测量对齐误差。计数从VS1的上升沿开始,并在VS2的上升沿终止。

如果一个帧的总像素长度是已知的,则可以通过从帧长中减去计数值,从而算出负偏斜(VS2位于VS1之前)。该负值应在偏斜超过像素帧长的一半时计算。结果应用来重新对齐FIFO中存储的数据。

图12 对齐误差测量
图12 对齐误差测量

列表1 简单对齐误差测量(Verilog)。

module misalign_measurement(

input wire reset,

input wire clk_in,

input wire vs_a_in,

input wire vs_b_in,

output reg [15:0] misalign,

output reg ready);

reg [15:0] cnt;

reg cnt_en, cnt_reset;

reg vs_a_in_r, vs_b_in_r;

assign vs_a_rising = vs_a_in > vs_a_in_r;

assign vs_b_rising = vs_b_in > vs_b_in_r;

always @(posedge clk_in)

begin

vs_a_in_r <= vs_a_in;

vs_b_in_r <= vs_b_in;

end

always @(posedge clk_in)

if (reset)

begin

{ ready, cnt_en } <= 2'b00;

misalign <= 0;

end else begin

if ((vs_a_in == 1'b0) && (vs_b_in == 1'b0))

{ ready, cnt_reset } <= 2'b01;

else

cnt_reset <= 1'b0;

/* beginning */

if (vs_a_rising && vs_b_rising)

begin

misalign <= 0;

{ ready, cnt_en } <= 2'b10;

end

else if ((vs_a_rising > vs_b_in) || (vs_b_rising > vs_a_in))

{ ready, cnt_en } <= 2'b01;

/* ending */

if ((cnt_en == 1'b1) && (vs_a_rising || vs_b_rising))

begin

{ ready, cnt_en } <= 2'b10;

misalign <= vs_a_rising ? (-(cnt + 1)) : (cnt + 1);

end

end

always @(posedge clk_in) /* counter */

if ((cnt_reset) || (reset))

cnt <= 0;

else if (cnt_en)

cnt <= cnt + 1;

endmodule

【分页导航】


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

时钟? 视频解码? HDMI? 3D视频?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈