BT601 BT656 BT709 BT1120 解析

从ITU-R BT1120文档上可知,BT1120支持的是1080p:

文档定义一帧为1 125 总行数和1 080 有效行;每行有效像素为1920
图像频率60、 50、 30、 25 和 24Hz包括逐行、隔行和帧分段传输;60、 3024 Hz系统中,也包括这些值除以1.001
的图像频率, 

文档规定对于10位接口对应于数字量化级0(10)3(10)1 020(10)1 023(10)的数据字保留用于数据标识目的,不得
作为图像数据出现。 

 

 

 

 下面是逐行扫描系统帧结构
 
BT601 BT656 BT709 BT1120 解析
BT601 BT656 BT709 BT1120 解析

 

 
 SAV和EAV称为定时基准码,定时基准码由 个字的序列组成 ,前 个字为固定前缀, 第 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
 

BT601 BT656 BT709 BT1120 解析

 

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始端之间的水平消隐间隔可被应用于传送辅助数据包。 在逐行系统中,在线路141(包括)和1 122 到 1 125(包括)期间; 

消隐数据

数字消隐期间不应用于定时基准码SAV 和 EAV) 、行号或者不应用于辅助数据ANC) 的数据字根据复用数据流中的合适位置, 在这些位置上填充以对应于下列消隐电平的字

16(8)对于 Y、 R、 G、 信号
128(8)对于 CB/CR时分复用的色差信号)。

 64(10) 对于Y、 R、 G、 B信号;
512(10) 对于CB、 CR(时分复用的色差信号)。
接口行号数数据 
 
行号数数据由指明行号数的两个字组成。 行号数数据的位置应紧接在EAV之后 ,行号数数据的比特分配如下:
BT601 BT656 BT709 BT1120 解析

 

 误码检测码
误码检测码为循环冗余校验码(CRC),用以检测有效数字行、 EAV和行号数数据中的
误码,它由两个字组成,决定于下列多项式发生器式子:
EDC(x)=x18+x5+x4+1
校验码的初始值置0,计算起始于数字有效行的第一个字,结束于行号数数据的末一个
字。计算两个误码检测码,一个用于亮度数据(YCR),一个用于色差数据(CCR)。误码
检测码的比特分配如表9所示。误码检测码的位置应紧接在行号数数据之后。
BT601 BT656 BT709 BT1120 解析

 并行数据与并行数据复用

并行数据流中Y与CbCr分别用10位数据传输,在并行复用中Y与CbCr合并成10位传输。从下图中可以看到SAV/EAV、行号和误码检测码的位置。


BT601 BT656 BT709 BT1120 解析

 

 
 视频数据格式 
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


 

实际的同步信号现行同行信号的关系
============================================================================
============================================================================
//该程序通过内嵌同步码产生行和场同步信号
 
BT601 BT656 BT709 BT1120 解析
 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
BT601 BT656 BT709 BT1120 解析