您的位置:首页 > 其它

BT601 BT656 BT709 BT1120 解析

2018-04-01 11:19 218 查看
从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 FVHP3P2P1P0  
01000000080 
1100111019D 
210101011AB 
310110110B6 
P3 = V xor HP2 = F xor HP1 = F xor VP0 = 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(时分复用的色差信号)。接口行号数数据 
<
10ae7
/span> 行号数数据由指明行号数的两个字组成。 行号数数据的位置应紧接在EAV之后 ,行号数数据的比特分配如下:


  误码检测码
误码检测码为循环冗余校验码(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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息