《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于FPGA的HD-SDI编解码技术的研究与开发
基于FPGA的HD-SDI编解码技术的研究与开发
来源:电子技术应用2012年第12期
李彦迪,金伟正,王 丹
武汉大学 电子信息学院,湖北 武汉430079
摘要: 采用Xilinx公司Spartan-6系列FPGA芯片,成功设计了一种符合SMPTE292M标准的HD-SDI编码方案,并且通过功能仿真验证了方案的可行性。
中图分类号: TN919.81
文献标识码: B
文章编号: 0258-7998(2012)12-0048-03
Research and development of HD-SDI CODEC technology based on FPGA
Li Yandi,Jin Weizheng,Wang Dan
Electronic Information Institute,Wuhan University,Wuhan 430079,China
Abstract: This paper designs a kind of HD-SDI CODEC technology using FPGA chip of series of Spartan-6 produced by Xilinx Company. And it has been proved to be useful and accord with SMPTE292M standard through the function test.
Key words : HD-SDI;CODEC;FPGA;HD video

    随着数字技术的迅猛发展,视频设备市场正在大规模地从模拟设备向数字设备转型,从而导致对数字解码芯片开发的大量需求。而在安防领域,高清产品的研发也在如火如荼地进行。其中,高清串行数字接口HD-SDI产品也凭借其独特的优势受到了广泛关注,尤其是在从模拟设备升级到数字设备的过程中。

    HD-SDI设备采用BNC接口,在从传统的模拟框架转为高清数字监控系统的过程中不需要重新布线,只需要更换前端和后端设备即可,为工程节约了巨大的成本。而且,HD-SDI系统不像IP监控系统那样需要先将视频信号进行打包压缩,它是以未经压缩的数字信号在同轴电缆上进行高速传输,因此具有更高的稳定性,有效地减少了失真,也不会产生IP高清的延迟现象,符合实时监控的要求。同时,它采用75-5同轴线进行系统布线,可以保持图像的完整性和原始性,为智能视频分析IVS提供了保障。
    考虑到HD-SDI在监控领域的巨大发展潜力和目前芯片量不能满足市场需求的现状,本文通过对高清视频信号传输的研究,在应用FPGA功能的基础上,设计了一种符合SMPTE292M的高清晰度数字信号转换电路,以实现对HD-SDI中的有效视频数据、视频定时基准码、行号数据、校验码的分析,并对信号进行串/并和并/串的转换。
1 系统设计
    本系统主要使用Xilinx公司的Xilinx ISE Design Suite 13.3软件进行设计。高清信号采用2:1隔行扫描,总行数为1 125行,场频为60 Hz,有效行为1 080行,一行1 920个像素。
    本系统主要由GTP收发模块、数据分析模块及有效信号提取模块、双口RAM和数据变换等模块组成。GTP收发模块为系统的核心部分,包含发送和接收两个部分,完成对信号的解串和串码。考虑到HD-SDI信号中并非所有的信号都是有效的视频信号,因而在信号处理之前,必须要先分离出有效视频信号,这部分功能由数据分析模块实现,并将提取出来的有效视频信号存于RAM中。数据变换模块完成对信号模式的转换。整个系统的设计框图如图1所示。

2 核心模块设计方法
2.1 GTP模块的设计

    该模块用于HD-SDI视频信号的接收与发射,以及串/并和并/串转换编码,为本系统的核心。ISE13.3软件中的IP(CORE Generator&Architecture Wizard)中有GTP Transceiver Wizard,只需要设定相应的参数即可。参数设计可以根据Xilinx发布的官方文件《Spartan-6 FPGA GTP Transceivers User Guide(UG386)》来设定。
    根据参考文献[1],本系统针对的信号为高清视频信号,传输速率为1.485 Gb/s,数据位宽为20 bit(Cb/Cr,Y),即20 bit数据按照前Cb/Cr、后Y进行处理。相关功能TX Buffer、Rx Buffer、PRBS设定为Enabled。将相应的参数、选项设定好之后,即可将该Core添加到所建立的工程之中。
2.2 数据分析和有效信号提取模块
    该模块的主要功能是根据HD-SDI数字行、场定时特点,从GTP转化的高清并行信号中提取有效数字视频,并以并行的形式输出,存储到RAM之中,以方便对信号作进一步变换。
    该模块输入信号包括并行时钟pclk、未处理的20 bit并行数据(pre_parallel_in);输出信号包括提取出的有效数据输出(processed_parallel_out)、出场识别(f)、场/帧消隐期信号(v)、行消隐期信号(h)、有效信号输出使能(valid_en)。
    参考文献[2]中设计了4个20 bit的移位寄存器。在每个时钟周期,前一位的移位寄存器的寄存数据都移到下一个寄存器,即一个时钟周期里,收到的字节写入第一个寄存器,而第一个寄存器的数据移到第二个寄存器,以此类推。因此,越早接收到的数据寄存的位置就越靠后,4个寄存器中的数据顺序是字节输入顺序的逆序。
    逆序之后,要对其中的数据进行检测,从而判定行起始标志码和行结束标志码。如果第1个寄存器的数据为十六进制的3FF3FF,而第2、3个寄存器是0,第4个寄存器的第7位和第17位也是0,那么这就是有效行的起始标志码,其后面的数据则为有效视频数据,所以要对接下来的数据进行处理和操作;如果前3个寄存器和上述前3个寄存器相同,第4个寄存器的第7位和第17位为1,那么这就是有效行的结束标识码,其后的数据也就没有用,应将其舍弃。
    同时,也要对XYZ其他各位数据进行分析。通过对第8位的分析,可以判断当前是在哪一个场区间;通过对第6位的判断,可以判定信号是SAV信号,还是EAV信号;如果有效数据中连续两行的第8位都有变化,则表明正在传输一场新的数据,其中SAV的标志位是场区间的头部的位置。核心判定代码如下:
    if(mem4==20'h3ff3ff && mem3==20'h0 && mem2==20'h0 && mem1[9]==1 && mem1[19]==1 && mem1[6]==0 && mem1[16]==0)  //3ff,000,000,1xyz;有效图形起始
    else if(mem4==20'h3ff3ff && mem3==20'h0 && mem2==20'h0 && mem1[9]==1 && mem1[19]==1 && mem1[6]==1 && mem1[16]==1) //有效图形结束
2.3 双口RAM模块
    根据参考文献[3],可以利用双口RAM具有两个独立系统的功能达到数据共享的目的。实现双口RAM的设计方法有很多,考虑到设计的产品可以进行升级,并且尽可能减少系统测试和维护的成本,决定采用FPGA来进行设计实现,所得产品可以实现对数据并行和高速传送的要求。
    本系统中,高清信号的格式为1 920×1 080,一行共1 920个像素,总数据量为1 920×20 bit=38 400 bit,且RAM的数据宽度为20 bit。因此,需要1 920个存储单元,地址线可取为11 bit。
    本模块包括时钟clk、20 bit并行写数据口(data_in)、20 bit并行读数据口(data_out)、11 bit写地址线(wr_address)、11 bit读地址线(rd_address)、写使能信号线(write)、读使能信号线(read)。双口RAM的实现代码如下:
    module dual_port_ram( clk, data_in, rd_address, read,wr_address,write, data_out );
        input clk;
        input [19:0] data_in;
        input [10:0] rd_address;
        input read;
        input [10:0] wr_address;
        input write;
        output [19:0] data_out;
    reg[19:0]data_out;
    reg[19:0]mem[10:0];
    always@(posedge clk)
    begin
      if(write)
        mem[wr_address]<=data_in;
      else
        mem[wr_address]<=mem[wr_address];
      if(read)
        data_out<=mem[rd_address];
      else
        data_out<=data_out;
    end
    endmodule
2.4 数据变换模块
    该模块为数据分析与提取模块的逆过程。从双口RAM中得到有效数据,根据IHD-SDI数字行、场定时特点,添加相应的图像定时基准码、行号数据、误码检测码、辅助数据和消隐数据。
    根据HD-SDI数字行、场定时特点,一行数据的顺序为:EAV(FFFFF、00000、00000、XYZXYZ)、有效数据、SAV(FFFFF、00000、00000、XYZXYZ)、LN0LN1、CCR0YCR0、消隐数据。根据相应标准,消隐期数据为Y(16=10h)、Cr/Cb(128=1000h),即Y中固定的16 bit填充位置填充的是10h,Cb/Cr中128 bit填充位置填充的是1000h。
    根据参考文献[4],设计该模块先输出EAV,然后输出从双口RAM得到的有效视频信号,再输出SAV信号,最后输出消隐期数据,至此即完成了将有效数据变为高清视频对应格式的并行数据输出,如图2所示。

    由图3可知,当输入信号pre_parallel_in[19:0]依次输入十六进制数&lsquo;ffffff&rsquo;、&lsquo;00000&rsquo;、&lsquo;00000&rsquo;、&lsquo;ab2ac&rsquo;时,数据分析与提取模块正确地判断此为SAV信号,后面的数据为有效数据,因此Valid_en由&lsquo;0&rsquo;变为&lsquo;1&rsquo;,同时并行输出口processed_parallel_out[19:0]由原来设置的高阻态变为正常输出状态,开始输出有效视频信号。由该图可以看出,f、v、h相应地发生变化。由HD-SDI数字行、场定时特点可知,这符合设计要求。
    由图4可知,当有效视频信号输入完之后,pre_parallel_in[19:0]再依次输入&lsquo;ffffff&rsquo;、&lsquo;00000&rsquo;、&lsquo;00000&rsquo;、&lsquo;bb2ec&rsquo;时,该模块正确地判断此为EAV信号,有效视频信号在此时已经输入完毕,后面的数据不再有效,因此Valid_en由&lsquo;1&rsquo;变为&lsquo;0&rsquo;,同时并行数据输出口processed_parallel_out[19:0]由正常输出有效数据状态变回为高阻态。由该图可以看出,v、h相应地发生变化,由&lsquo;0&rsquo;变为&lsquo;1&rsquo;;f没变,依旧为&lsquo;0&rsquo;。由HD-SDI数字行、场定时特点可知,这符合设计要求。
    数据变化模块的仿真结果如图5和图6所示。

 

 

    如图5所示,数据输出端data_converter_out[19:0]首先正确地输出SAV信号(fffff、00000、00000、ab2ac),之后便将从双口RAM得到的有效数据data_in[19:0]送到输出口输出,这里仿真时将输入数据都置为00007。
    由图6所示,数据输出端data_converter_out[19:0]在将1 920个有效数据正确地输出之后输出EAV信号(fffff、00000h、00000h、bb2ec),然后输出消隐期数据40010h。
    本文通过对高清视频信号的研究,在对数字视频相关知识、HD-SDI、Xilinx公司的FPGA、GTP高速串行收发器进行深入研究的基础上,用Xilinx公司最新生产的Spartan-6系列FPGA芯片,成功设计了一种HD-SDI编码技术。该设计是一种符合SMPTE292M标准的高清晰度数字电视信号转换电路,可以对HD-SDI中的有效视频数据、视频定时基准码、行号数据、校验码进行分析,并就信号进行串/并和并/串的转换。通过功能仿真验证了本方案能够成功实现设计的功能,并且不需使用以前常用的专业集成芯片GS1560解串器和串码器GS1532等,具有很强的创新性和实用价值。
参考文献
[1] 刘晓军.采用HD-SDI的高清视频采集卡的设计与实现[J].电视技术,2009,33(1):91-93.
[2] 李鸿强,苗长云,刘晓军,等.HD-SDI数字视频信号处理及传输的FPGA设计与实现[J].计算机应用研究,2007,24(10):269-272.
[3] 秦鸿刚,刘京科,吴迪.基于FPGA的双口RAM实现及应用[J].电子设计工程,2010,18(2):72-74.
[4] 彭慧英.基于GS1560的HD-SDI码流解串器的硬件设计[J].电子质量,2010(6):27-31.

此内容为AET网站原创,未经授权禁止转载。