对齐误差测量
两个数字化数据流之间的对齐误差可以在视频FIFO输出端进行测量,其方法是使用一个单一时钟计数器,该计数器在输入信号之一的垂直同步(VS)脉冲上复位。图12所示两个视频流(vs_a_in和vs_b_in)的对齐误差为4个像素。计数器使用列表1中所示方法测量对齐误差。计数从VS1的上升沿开始,并在VS2的上升沿终止。
如果一个帧的总像素长度是已知的,则可以通过从帧长中减去计数值,从而算出负偏斜(VS2位于VS1之前)。该负值应在偏斜超过像素帧长的一半时计算。结果应用来重新对齐FIFO中存储的数据。
列表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.
从两个对齐视频流生成3D视频
一旦像素、行和帧数据都真正同步,FPGA可以将视频数据转换成3D视频流,如图13所示。
对齐误差测量
两个数字化数据流之间的对齐误差可以在视频FIFO输出端进行测量,其方法是使用一个单一时钟计数器,该计数器在输入信号之一的垂直同步(VS)脉冲上复位。图12所示两个视频流(vs_a_in和vs_b_in)的对齐误差为4个像素。计数器使用列表1中所示方法测量对齐误差。计数从VS1的上升沿开始,并在VS2的上升沿终止。
如果一个帧的总像素长度是已知的,则可以通过从帧长中减去计数值,从而算出负偏斜(VS2位于VS1之前)。该负值应在偏斜超过像素帧长的一半时计算。结果应用来重新对齐FIFO中存储的数据。
列表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.
从两个对齐视频流生成3D视频
一旦像素、行和帧数据都真正同步,FPGA可以将视频数据转换成3D视频流,如图13所示。