从ITU-R BT1120文档上可知,BT1120支持的是1080p:
文档定义一帧为1 125 总行数和1 080 有效行;每行有效像素为1920
图像频率60、 50、 30、 25 和 24Hz包括逐行、隔行和帧分段传输;在60、 30和24 Hz系统中,也包括这些值除以1.001的图像频率,
文档规定对于10位接口对应于数字量化级0(10)至3(10)和1 020(10)至1 023(10)的数据字保留用于数据标识目的,不得
作为图像数据出现。
下面是逐行扫描系统帧结构
SAV和EAV称为定时基准码,定时基准码由 4 个字的序列组成 ,前 3 个字为固定前缀, 第 4个字运载的信息定义出场识别(F)、 场/帧消隐期(V) 和行消隐期(H)。 使用SAV和EAV来指示视频时序,可以减少视频传输的引脚数量。
注1 —EAV和SAV中(F/V/H)的值反映F、V和H比特的状态;该值以F、V、H组成的3比特字用二—十进制记数(BCD)表示(F对应MSB,H对应LSB)。例如,数值3代表的比特为F=0、V=1和H=1
8bit
SAV/EAV |
F |
V |
H |
P3 |
P2 |
P1 |
P0 |
|||
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
80 |
|
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
9D |
|
2 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
AB |
|
3 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
B6 |
P3 = V xor H
P2 = F xor H
P1 = F xor V
P0 = F xor V xor H
辅助数据
EAV终端和SAV始端之间的水平消隐间隔可被应用于传送辅助数据包。 在逐行系统中,在线路1到41(包括)和1 122 到 1 125(包括)期间;
消隐数据
数字消隐期间不应用于定时基准码(SAV 和 EAV) 、行号或者不应用于辅助数据(ANC) 的数据字根据复用数据流中的合适位置, 在这些位置上填充以对应于下列消隐电平的字:
16(8)对于 Y、 R、 G、 B 信号;
128(8)对于 CB/CR(时分复用的色差信号)。
64(10) 对于Y、 R、 G、 B信号;
512(10) 对于CB、 CR(时分复用的色差信号)。
512(10) 对于CB、 CR(时分复用的色差信号)。
接口行号数数据
行号数数据由指明行号数的两个字组成。 行号数数据的位置应紧接在EAV之后 ,行号数数据的比特分配如下:
误码检测码
误码检测码为循环冗余校验码(CRC),用以检测有效数字行、 EAV和行号数数据中的
误码,它由两个字组成,决定于下列多项式发生器式子:
EDC(x)=x18+x5+x4+1
校验码的初始值置0,计算起始于数字有效行的第一个字,结束于行号数数据的末一个
字。计算两个误码检测码,一个用于亮度数据(YCR),一个用于色差数据(CCR)。误码
检测码的比特分配如表9所示。误码检测码的位置应紧接在行号数数据之后。
误码检测码为循环冗余校验码(CRC),用以检测有效数字行、 EAV和行号数数据中的
误码,它由两个字组成,决定于下列多项式发生器式子:
EDC(x)=x18+x5+x4+1
校验码的初始值置0,计算起始于数字有效行的第一个字,结束于行号数数据的末一个
字。计算两个误码检测码,一个用于亮度数据(YCR),一个用于色差数据(CCR)。误码
检测码的比特分配如表9所示。误码检测码的位置应紧接在行号数数据之后。
并行数据与并行数据复用
并行数据流中Y与CbCr分别用10位数据传输,在并行复用中Y与CbCr合并成10位传输。从下图中可以看到SAV/EAV、行号和误码检测码的位置。
视频数据格式
BT656接口使用的是8位或者10位4:2:2 YCbCr数据,为了能够处理HDTV数据传输,有些设计使用16位或者20位YCbCr的接口(本质上是两个BT656数据流,一个为数据Y,一个为数据CbCr),或者使用时钟的两个边沿传输数据。
BT1120与BT656的区别
BT656主要是针对PAL/NTSC等标清视频。时钟频率是27MHz。注意采样频率灰度为12.5MHz,色度为6.25MHz。随着高清视频的发展的需要,又推出了BT1120标准,它与BT656是类似的,只不过时钟频率更高了,以适合高清视频的传输。
601是SDTV的数据结构 656是SDTV的interface
709是HDTV的数据结构 1120是HDTV的interface
实际的同步信号现行同行信号的关系
============================================================================
============================================================================
//该程序通过内嵌同步码产生行和场同步信号
1 module sav_eav_detec( 2 input clk, 3 input [15:0] din, 4 output[15:0] dout, 5 output h_sync_out, 6 output v_sync_out 7 8 ); 9 10 reg [15:0] v_data [6:0] ; 11 12 always @( posedge clk ) 13 begin 14 v_data[0] <= din; 15 end 16 genvar i ; 17 generate 18 19 for( i = 0;i <= 5;i = i+1 ) 20 begin :data_dly 21 always@( posedge clk )begin 22 v_data[i+1] <= v_data[i]; 23 end 24 assign dout = v_data[6]; 25 26 end 27 endgenerate 28 wire [6:0] time_ref_code; 29 reg [6:0] time_ref_code_r = 0; 30 assign time_ref_code [6] = (v_data[3][7:0] == 8'hff ) ? 1'b1 : 1'b0; 31 assign time_ref_code [5] = (v_data[2][7:0] == 8'h00 ) ? 1'b1 : 1'b0; 32 assign time_ref_code [4] = (v_data[1][7:0] == 8'h00 ) ? 1'b1 : 1'b0; 33 //assign time_ref_code [1:0] = (v_data[0][7:0] ==8'h80 )? 2'b00 : ((v_data[0][7:0] ==8'h9d) ? 2'b01:((v_data[0][7:0] ==8'hab )? 2'b10:((v_data[0][7:0] )==8'hab ? 2'b11:0))); 34 assign time_ref_code[0] = (v_data[0][7:0] ==8'h80) ?1'b1 : 1'b0; 35 assign time_ref_code[1] = (v_data[0][7:0] ==8'h9d) ?1'b1 : 1'b0; 36 assign time_ref_code[2] = (v_data[0][7:0] ==8'hab) ?1'b1 : 1'b0; 37 assign time_ref_code[3] = (v_data[0][7:0] ==8'hb6) ?1'b1 : 1'b0; 38 // always @( * ) 39 // begin 40 // case( v_data[0][7:0] ) 41 // 8'h80 :time_ref_code[1:0] = 2'b00; 42 // 8'h9d :time_ref_code[1:0] = 2'b01; 43 // 8'hab :time_ref_code[1:0] = 2'b10; 44 // 8'hb6 :time_ref_code[1:0] = 2'b11; 45 // default :; 46 // endcase 47 // end 48 49 always @( posedge clk ) 50 begin 51 time_ref_code_r <= time_ref_code; 52 end 53 54 // reg h_sync; 55 // reg v_sync; 56 reg h_sync_r = 0; 57 reg v_sync_r = 0; 58 always @( posedge clk ) 59 begin 60 case(time_ref_code_r ) 61 7'h71 :begin h_sync_r = 1'b0; v_sync_r = 1'b0; end 62 7'h72 :begin h_sync_r = 1'b1; v_sync_r = 1'b0; end 63 7'h74 :begin h_sync_r = 1'b0; v_sync_r = 1'b1; end 64 7'h78 :begin h_sync_r = 1'b1; v_sync_r = 1'b1; end 65 default : begin h_sync_r = h_sync_r; v_sync_r = v_sync_r; end 66 endcase 67 end 68 69 reg [3:0] h_sync_dly = 0; 70 reg [3:0] v_sync_dly = 0; 71 always @( posedge clk ) 72 begin 73 h_sync_dly[3:0] <= {h_sync_dly[2:0],h_sync_r}; 74 v_sync_dly[3:0] <= {v_sync_dly[2:0],v_sync_r}; 75 end 76 77 wire h_black ; 78 reg h_black_r = 0; 79 reg v_black_r = 0; 80 assign h_black = h_sync_r | h_sync_dly[3] ; 81 always @( posedge clk ) 82 begin 83 h_black_r <= h_black; 84 v_black_r <= v_sync_r; 85 end 86 87 88 89 90 assign h_sync_out = h_black_r; 91 assign v_sync_out = v_black_r; 92 endmodule