上一文主要介绍了SDI中的PAL格式,本文主要基于XilinxFPGA的sdi IP使用展开介绍
1,SDI IP 支持协议
SD-SDI : PAL NTSC
HD-SDI : SMPTE_274 SMPTE_296 SMPTE_260 SMPTE_2048
3G-SDI : SMPTE_274 SMPTE_296 SMPTE_428 SMPTE_2048
2,HD-SDI smpte 274介绍
分辨率 : 1920*1080
频率:1080p@30HZ,或者1080i@60HZ 74.25Mhz
频率:1080p@60HZ 148.5Mhz
行:280+1920
列:(根据扫描方式不同,有效数据的位置不同):隔行(20+540+23+540+3) 顺序(41+1080+4)
3 ,SDI接收通道
3.1 SDI 接收架构
3.2 信号说明
rx_usrclk :(in) 接收通道的时钟输入; 3G: 148.5MHz HD: 74.25MHz SD: 使用内部收发器时为148.5MHz,外部收发器时为27Mhz;
rx_rst :(in) rx_usrclk的同步复位;
rx_data_in(20bit) :(in) HD和3G的数据输入;
rx_sd_data_in :(in) SD数据输入;
rx_sd_data_strobe :(in) SD模式下的数据输入有效;
rx_frame_en :(in) 生成帧使能;
rx_mode_en(3bit) :(in) 模式使能; [0]--HD [1]--SD [2]--3G
rx_mode (2bit) :(out)模式锁定输出; 00-HD 01-SD 10 --3G
rx_mode_HD/SD/3G :(out)模式类型状态输出;
rx_mode_locked :(out)模式锁定;
rx_mode_detect_en :(in) SDI模式检测使能,检测传入的数据流,判断是SD,HD,3G;
rx_forced_mode(2bit):(in)固定模式类型配置; 00-HD 01-SD 10 --3G
rx_bit_rate :(in) 配置接收速率; HD: 0-1.485Gb/s 1-1.485/1.001Gb/s 3G: 0-2.97Gb/s 1-2.97/1.001Gb/s
rx_t_locked :(out)数据格式相关锁定
rx_t_family(4bit) :(out)数据格式; 0000(1920*1080)--SMPTE ST 274 0001(1280*720)--SMPTE ST 296 0010(2048*1080)--SMPTE 2048-2 0011(1920*1080)--SMPTE 295 1000(720*486)--NTSC 1001(720*576)--PAL
rx_t_rate(4bit) :(out)帧频; 0001--23.98 0011--24 0100--47.95 0101--25 0110--29.97 0111--30 1000--48 1001--50 1010--59.94 1011--60
rx_t_scan :(out)隔行扫描传输还是依次传输标识; 0-隔行 1-依次
rx_level_b_3G :(out)表明3G传输为B级,只在rx_mode_3G有效的情况下有效;
rx_ce_sd :(out)SD模式下的时钟使能;
rx_nsp :(out)
rx_line_a(11bit) :(out)HD或3G模式下的行号;
rx_a_vpid(32bit) :(out)数据流1中的ST 352数据包;
rx_a_vpid_valid :(out)数据包有效
rx_b_vpid(32bit) :(out)数据流2中的ST 352数据包,仅3G模式下有效;
rx_b_vpid_valid :(out)数据包有效
rx_crc_err_a :(out)数据流中的CRC检测错误标识,对于3G-B模式下仅对数据流1有效;
rx_ds1a(10bit) :(out) SD:Y/C数据流 HD:Y 数据流 3G-A: 数据流1 3G-B_DL:数据流1-linkA 3G-B_DS:HD信号1 Y数据流
rx_ds2a(10bit) :(out) SD:不使用 HD:C 数据流 3G-A: 数据流2 3G-B_DL:数据流2-linkA 3G-B_DS:HD信号1 C数据流
rx_eav :(out)EAV输出标识
rx_sav :(out)SAV输出标识
rx_trs :(out)从3FF到EAV/SAV输出4拍高;
rx_line_b(11bit) :(out)3G-B模式下,linkB或HD信号2的Y数据流行号;
rx_dout_rdy_3G :(out)在3G-B模式下,输出74.25M,可作时钟使用;其余模式均输出高;
rx_ds1b(10bit) :(out) 3G-B_DL:数据流1-linkB 3G-B_DS:HD信号2 Y数据流;
rx_ds2b(10bit) :(out) 3G-B_DL:数据流2-linkB 3G-B_DS:HD信号2 C数据流;
rx_crc_err_b :(out)3G-B模式下有效,linkB或HD信号2数据流CRC校验错误;
4 ,SDI发送通道
4.1 SDI 发送架构
4.2 发送端口
tx_usrclk :(in) 发送通道的时钟输入; 3G: 148.5MHz HD: 74.25MHz SD: 使用内部收发器时为148.5MHz,外部收发器时为27Mhz;
tx_ce (3bit) :(in) 在HD和3G模式下始终为高电平;
tx_din_rdy :(in) 对SD HD 3G-A模式下一直为高,3G-B模式下间隔一个周期断言一次;
tx_rst :(in) tx_usrclk的同步复位;
tx_mode(2bit) :(in) 00-HD 01-SD 10 --3G
tx_level_b_3G :(in) 3G模式下,配置A或B; 低-A, 高-B;
tx_insert_crc :(in) 输入为高时,在HD和3G模式下发送器增加CRC值;
tx_insert_ln :(in) 输入为高时,在每个EAV后插入行号,行号在tx_line_a和tx_line_b端口上提供,HD和3G模式有效,SD忽略;
tx_insert_edh :(in) 输入为高时,插入EDH数据包,SD模式有效,HD和3G无效;
tx_insert_vpid :(in) 输入为高时,插入ST 352数据包,SD和HD可选,3G和双路HD必须有;
tx_overwrite_vpid :(in) 输入为高时,ST 352数据包被覆盖,否则不变;
tx_video_a_y_in(10bit) :(in) SD:Y/C数据流 HD:Y 数据流 3G-A: 数据流1 3G-B_DL:数据流1-linkA 3G-B_DS:HD信号1 Y数据流
tx_video_a_c_in(10bit) :(in) SD:不使用 HD:C 数据流 3G-A: 数据流2 3G-B_DL:数据流2-linkA 3G-B_DS:HD信号1 C数据流
tx_video_b_y_in(10bit) :(in) 3G-B_DL:数据流1-linkB 3G-B_DS:HD信号2 Y数据流;
tx_video_b_c_in(10bit) :(in) 3G-B_DL:数据流2-linkB 3G-B_DS:HD信号2 C数据流;
tx_line_a(11bit) :(in)HD或3G模式下的行号;
tx_line_b(11bit) :(in)3G-B模式下,linkB或HD信号2的Y数据流行号;
tx_vpid_byte1(8bit) :(in) ST 352 包第一个数据
tx_vpid_byte2(8bit) :(in) ST 352 包第二个数据
tx_vpid_byte3(8bit) :(in) ST 352 包第三个数据
tx_vpid_byte4a(8bit):(in) ST 352 包第四个数据, 对于3G-B和双链路HD模式的A
tx_vpid_byte4b(8bit):(in) ST 352 包第四个数据, 对于3G-B和双链路HD模式的B
tx_vpid_line_f1(11bit) :(in) ST 352包插入行号的HANC空间
tx_vpid_line_f2(11bit) :(in) ST 352包插入行号的HANC空间
tx_vpid_line_f2_en :(in) 控制ST 352是否插入f2行;
tx_ds1a_out(10bit) :(out) SD:Y/C数据流 HD:Y 数据流 3G-A: 数据流1 3G-B_DL:数据流1-linkA 3G-B_DS:HD信号1 Y数据流
tx_ds2a_out(10bit) :(out) SD:不使用 HD:C 数据流 3G-A: 数据流2 3G-B_DL:数据流2-linkA 3G-B_DS:HD信号1 C数据流
tx_ds1b_out(10bit) :(out) 3G-B_DL:数据流1-linkB 3G-B_DS:HD信号2 Y数据流;
tx_ds2b_out(10bit) :(out) 3G-B_DL:数据流2-linkB 3G-B_DS:HD信号2 C数据流;
tx_use_dsin :(in) 控制使用ds1a/da2a ds1b/da2b端口数据;
tx_ds1a_in(10bit) :(in) SD:Y/C数据流 HD:Y 数据流 3G-A: 数据流1 3G-B_DL:数据流1-linkA 3G-B_DS:HD信号1 Y数据流
tx_ds2a_in(10bit) :(in) SD:不使用 HD:C 数据流 3G-A: 数据流2 3G-B_DL:数据流2-linkA 3G-B_DS:HD信号1 C数据流
tx_ds1b_in(10bit) :(in) 3G-B_DL:数据流1-linkB 3G-B_DS:HD信号2 Y数据流;
tx_ds2b_in(10bit) :(in) 3G-B_DL:数据流2-linkB 3G-B_DS:HD信号2 C数据流;
tx_sd_bitrep_bypass :(in) 使用内部收发器时,为低;
tx_txdata :(out) 发送器数据输出端口, SD模式时使用高10bit;
tx_ce_align_err :(out) SD模式下切tx_sd_bitrep_bypass为低有效
5 SDI IP 例化参考
smpte_sdi_ip smpte_sdi_ip_inst (
.rx_rst (rx_rst ),
.rx_usrclk (rx_clk ), //rx
.rx_data_in (rx_data ),
.rx_sd_data_in (10'd0 ),
.rx_sd_data_strobe (1'b0 ),
.rx_frame_en (1'b1 ),
.rx_mode_en (3'b010 ),
.rx_mode (rx_mode ),
.rx_mode_hd ( ),
.rx_mode_sd ( ),
.rx_mode_3g ( ),
.rx_mode_detect_en (1'b0 ),
.rx_mode_locked ( ),
.rx_forced_mode (2'b00 ),
.rx_bit_rate (1'b0 ),
.rx_t_locked (rx_t_locked ),
.rx_t_family (rx_t_family ),
.rx_t_rate (rx_t_rate ),
.rx_t_scan (rx_t_scan ),
.rx_level_b_3g ( ),
.rx_ce_sd ( ),
.rx_nsp ( ),
.rx_line_a (rx_line_a ),
.rx_a_vpid ( ),
.rx_a_vpid_valid ( ),
.rx_b_vpid ( ),
.rx_b_vpid_valid ( ),
.rx_crc_err_a ( ),
.rx_ds1a (rx_ds1a ),
.rx_ds2a (rx_ds2a ),
.rx_eav (rx_eav ),
.rx_sav (rx_sav ),
.rx_trs (rx_trs ),
.rx_line_b ( ),
.rx_dout_rdy_3g ( ),
.rx_crc_err_b ( ),
.rx_ds1b ( ),
.rx_ds2b ( ),
.rx_edh_errcnt_en (0 ),
.rx_edh_clr_errcnt (0 ),
.rx_edh_ap ( ),
.rx_edh_ff ( ),
.rx_edh_anc ( ),
.rx_edh_ap_flags ( ),
.rx_edh_ff_flags ( ),
.rx_edh_anc_flags ( ),
.rx_edh_packet_flags( ),
.rx_edh_errcnt ( ),
.tx_rst (tx_rst ),
.tx_usrclk (tx_clk ),
.tx_ce (3'b111 ),
.tx_din_rdy (1'b1 ),
.tx_mode (2'b00 ),
.tx_level_b_3g (1'b0 ),
.tx_insert_crc (1'b1 ),
.tx_insert_ln (1'b1 ),
.tx_insert_edh (1'b0 ),
.tx_insert_vpid (1'b0 ),
.tx_overwrite_vpid (1'b0 ),
.tx_video_a_y_in (tx_video_a_y_in),
.tx_video_a_c_in (tx_video_a_c_in),
.tx_video_b_y_in (10'd0 ),
.tx_video_b_c_in (10'd0 ),
.tx_line_a (tx_line_a ),
.tx_line_b (11'd0 ),
.tx_vpid_byte1 (8'd0 ),
.tx_vpid_byte2 (8'd0 ),
.tx_vpid_byte3 (8'd0 ),
.tx_vpid_byte4a (8'd0 ),
.tx_vpid_byte4b (8'd0 ),
.tx_vpid_line_f1 (11'd0 ),
.tx_vpid_line_f2 (11'd0 ),
.tx_vpid_line_f2_en (1'b0 ),
.tx_ds1a_out ( ),
.tx_ds2a_out ( ),
.tx_ds1b_out ( ),
.tx_ds2b_out ( ),
.tx_use_dsin (1'b0 ),
.tx_ds1a_in (10'd0 ),
.tx_ds2a_in (10'd0 ),
.tx_ds1b_in (10'd0 ),
.tx_ds2b_in (10'd0 ),
.tx_sd_bitrep_bypass(1'b0 ),
.tx_txdata (tx_data ),
.tx_ce_align_err ( )
);