《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于FPGA的视频监测系统
基于FPGA的视频监测系统
徐绍剑1, 陈子平2, 刘惠贞3
摘要: 以FPGA为核心芯片的视频监测系统,结合MAX+PLUSII介绍了用VHDL进行的FPGA设计,实现对视频信号的实时监测。详细描述了对图像静止的判断,并指出了在FPGA设计过程中应注意的问题。
Abstract:
Key words :

  摘  要:FPGA为核心芯片的视频监测系统,结合MAX+PLUSII介绍了用VHDL进行的FPGA设计,实现对视频信号的实时监测。详细描述了对图像静止的判断,并指出了在FPGA设计过程中应注意的问题。

    关键词: FPGA  VHDL  视频监测

 

  电视信号质量的优劣直接关系到广大人民群众的切身利益。电视也是现代化大众传媒工具和信息工具,其重要性不言而喻。为了确保电视信号高质量、不间断地播出,必须对播出质量进行实时监测。电视视频实时监测系统就是针对这一目的而设计的。

  实时视频监测系统的主要定性监测指标有:“是否蓝屏”、“是否黑屏”、“是否无图像”和“图像是否出现静止”等,其中对于“图像出现静止”的实时监测具有待处理数据量大且判别方式复杂等特点,同时还要保证处理过程的实时性。所以这是实时视频监测系统中的难点,也是本文的重点。本文主要阐述了采用VHDL硬件描述语言对现场可编程门阵列(Field Programmable Gate Array,FPGA)进行设计,实现大数据量高速处理的算法,以达到对图像静止实时监测的目的。

1 视频监测系统简介

  系统结构如图1所示。系统采用Philip公司的视频A/D芯片SAA7114H,将模拟电视信号转化为数字信号,同时产生同步信号。用ALTERA公司的ACEX1K系列EP1K30芯片作为控制器进行高速数据的读写及比较操作,而以高速SRAM作为存储器。

 

  视频信号进入SAA7114H后,可以得到行场同步信号以及量化后的象素值。然后可以在FPGA中,通过判断有无行场同步信号以得出是否有图像。还可以通过对YUV值的判断知道是否为蓝屏或是黑屏,也可以将某场象素值保存,并与下一场进行比较,就可以知道是否为图像静止。用于比较的门限可以通过8051进行设置,比较的结果送到8051中做进一步的处理。

2  对“图像静止”判断的实现

  分析“图像出现静止不动”的特点是:相邻二场或多场图像的画面相同,此时的视频信号采样后的相邻二场中相同点的象素值应该是相近的。所以,只要能判断出二场象素值是否相近就可以判断图像是否静止。故在系统中,需要将上一场的各点象素值存入SRAM中,并在新一场信号到来时,先读出SRAM中相应点的数值,进行比较,然后将新的数据存入SRAM,等待下一场数据到来时重复以上动作。

  根据以上的算法,系统需要FPGA产生SRAM地址及读写控制信号和比较控制信号,并进行数据的比较。由于待处理数据量大且系统的实时性要求,故对数据的比较以流水方式在时钟的驱动下按拍分解进行。

2.1 视频信号采样

  要实现对模拟电视视频信号的数字化监测,首先要对视频信号进行数字化处理。这里采用Philips公司的SAA7114H芯片对模拟电视信号进行数字化。SAA7114H具有6路视频输入,可以对PAL制、NTSC制和SECAM等制式的全电视信号进行自适应的A/D转换,输出格式为Y:U:V=4:2:2的数字视频码流,量化后的YUV值与模拟视频信号亮度及色度的对应关系如图2所示。在SAA7114H芯片内部集成了抗混迭滤波和梳状滤波等,可以直接输出高质量的数字视频信号。它具有自动的场频检测特性,且可以直接从I/O脚输出场同步信号IGPV、行同步信号IGPH及其时序关系如图3所示的象素时钟ICLK,而省去了同步电路的设计。芯片内部锁相环技术的集成使得系统的可靠性和稳定性均有很大提高。

 

 

  SAA7114H还可以通过对控制字的设置,直接控制行同步的有效时间。这些控制字可以用CPU通过I2C总线进行配置。这样,可以很方便地避开行消隐期的采样,而直接对有效数据进行处理。

2.2 FPGA的模块设计

  本系统的核心控制部分由1片ALTERA公司基于SRAM工艺的ACEX1K系列FPGA实现。它可实现在系统多次编程,特别适合于实验板和多功能样机的设计。这里,采用了Top-Down的设计方法,以VHDL语言进行控制部分的设计。下面先根据系统指标要求,将系统的功能细分如下。

  (1)控制信号产生和比较部分

  本模块产生SRAM的读写控制信号nRDOUT、nWROUT和比较时钟CMPCLK,并且对读出的数据进行实时比较。其中nRDOUT和nWROUT都必须满足相应SRAM的时序要求,CMPCLK必须在数据从SRAM读出并稳定之后才可以有动作。为了便于从上层软件来控制底层硬件的操作,将何时读SRAM并进行比较的权力交给CPU,由SEL来控制,并且可以在需要时将SRAM中的数据读入CPU。其控制信号时序如图4所示。

 

  在CPU需要对数据进行比较时,将数据从SRAM中读出(nRDOUT低电平有效),并与当前数据进行比较,若二者之差在DIFFERENT内则输出EN为高电平,否则为低电平。当EN为高电平时,在CMPCLK的上升沿开始计数。数据比较模块仿真结果如图5所示。

 

  (2)数据预处理和地址产生部分

  为了使在SRAM的相应地址准确地存入相邻二场相同位置的象素值,需要慎重对待SRAM地址的产生,且要避免对行消隐期的数据进行处理。可以用SAA7114H的控制字来控制IGPH的有效宽度,而让IPGH、IPGV和ODDEVEN作为使能信号。

  在系统中,SAA7114H输出的象素时钟高达27MHz(即周期为37ns),而要在如此短的时间内完成数据的读写比较,对SRAM是极大的考验。但可以采用多通道、多SRAM的方法来降低对单个SRAM的读写频率,不过这样会大大占用FPGA的I/O口,增加系统的成本。因此在系统中,基于够用的原则,只对奇场象素中的亮度(Y)进行读写比较,这样数据处理的周期可增加到148ns。该部分的VHDL实现如下:

  ARCHITECTURE behav OF AddrGen IS

              SIGNAL addrclk :STD_LOGIC;

              SIGNAL  temp :INTEGER RANGE 0 TO 3;

              SIGNAL addrtemp:STD_LOGIC_VECTOR

  (18 DOWNTO 0);

  BEGIN

              PROCESS(ICLK,AddrEN)

              BEGIN

                     IF (AddrEN=′0′) THEN//只在IPGH &

             IPGV & ODDEVEN=1时进行操作

                       temp <=0;

                     ELSIF (ICLK′EVENT AND ICLK=′1′) THEN

                       IF (temp=1) THEN

                 //取UYVY格式象素

                 //中的Y值

                            BPD<=IPD;

                       END IF;

                       temp<=temp+1;

                     END IF;

              END PROCESS;

              PROCESS(ICLK,TEMP)

              BEGIN

                     IF (ICLK′EVENT AND ICLK=′0′) THEN

                       IF TEMP=1 THEN  //当象素值为Y值

                     //时,生成地址产生时钟

                            addrclk<=′1′;

                       ELSE

                            addrclk<=′0′;

                       END IF;

                     END IF;

              END PROCESS;

              PROCESS (addrclk,AddrCLR)//生成Y值保存的地址

              BEGIN

                 IF (AddrCLR=′0′) THEN

                      addrtemp<=(OTHERS=>′0′);

                 ELSIF(addrclk′EVENT AND addrclk=′1′) THEN

                      addrtemp<=addrtemp+1;

                 END IF;

              END PROCESS;

              Yclk<=addrclk;

              ADDRESS<=addrtemp;

    END behav;

  (3)与SRAM的接口

  VHDL在语法上提供了in、out、buffer、inout四种端口形式。buffer端口是会传递的,也就是说,与buffer端口相连接的必须还是buffer端口,而in/out端口的信号流向不是很明确。因此通常情况下,只有在与SRAM或CPU的双向数据线连接时使用in/out端口。要注意的是:在仿真时,in/out端口自动分为in和out端口;在输入数据时,让out保持三态,而在要输出数据时打开,此时需注意要满足三态的要求,否则容易出现信号冲突的情况。由于ALTERA公司的器件不支持内部三态,因此内部信号不能赋给高阻,所以建议在底层文件中不要直接使用in/out,而是分别用in和out来实现相同的功能,在顶层文件中用in/out端口或用图形输入时直接用bidir即可,如图6所示。

 

  借助于VHDL语言及其综合工具,可以不关心具体器件的选择。但是在系统设计中需要注意,不能仅从软件的角度来看待VHDL问题。VHDL语句最终是要用硬件实现的,所以应充分考虑到每一条语句在实际中所对应的电路。

3  小  结

  本系统采用专用视频A/D芯片进行模数转换,用FPGA作为控制处理器,可以大大提高系统的运行速度,减小电路板的尺寸,降低系统设计的难度,增加系统的可靠性和设计的灵活性。用VHDL语言进行FPGA设计,具有方法简单、易读和可重用性强等特点。

  本系统能够很好地实现对电视视频的实时定性监测。本设计已成功应用于某电视信号监测系统中,并取得良好效果。

 

参考文献

1  Altera Corporation.ACEX1K Programmable Logic Family Data Sheet.2000

2  Philips Semiconductors.SAA7114H Data Sheet.2000

3  黄正瑾,徐坚.CPLD系统设计技术入门与应用.北京:电子工业出版社,2002

4  曾繁泰,陈美金.VHDL程序设计.北京:清华大学出版社,2001

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