首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

实时视频数据采集的FPGA实现(2)

实时视频数据采集的FPGA实现(2)

2.2 数据采集及控制单元
      数据采集及控制单元主要由3个模块组成:采集模块acquisition、双口RAM器件lpm_ram_dp0和帧存控制模块 sto_ctl,其内部电路图如图5所示。此单元的任务就是由采集模块截取SAA7113H输出的一行数据中的640个有效像素(共1 280 B)写入双口RAM器件进行缓存,帧存控制模块将数据从双口RAM中顺序读出后送入外扩SRAM中逐行存储,同时控制2片SRAM交替读写,读出的数据送入VGA接口单元进行VGA格式转换和图像显示。

2.2.1 采集模块acqusition
      采集模块接收SAA7113H的RTS0、像素时钟信号SYS_CLK和视频数据VPO[7..0],输出为一行数据中的有效数据vpo_out[7..0]、有效像素的计数值tempp[10..0]和表示行状态有效的信号line_state。
      若要截取一行数据中的有效数据,首先要捕捉到有效数据的起始时刻。采集模块根据图3中视频数据流的时间参考代码SAV来获取有效数据的起始时刻。在一帧完整的图像数据中,第一场有效数据阶段的SAV为“1000XXXX”,而消隐阶段的时间参考代码中的SAV为“1010XXXX”。通过判断场有效信号rts0为1时,分析数据流中的“80 10 FF 00 00 SAV”定时参考代码,启动计数模为1 440的计数器tempp。计数值为40时置状态信号line_state为1,标志一行有效数据的开始;计数值为1 320时置line_state为0,结束一行有效数据的采集。在这个时间段内就可以截取一行中1 280 B的有效数据,继而送入双口RAM缓存。
2.2.2 双口RAM器件lpm_ram_dp0
      双口RAM 器件利用FPGA内部的参数可设置模块LPM_RAM_DP定制而成,用来缓存一行的有效视频数据,而后存储在SRAM中。由于SAA7113H输出是8 位的VPO数据,而片外SRAM具有16根数据线,作为连接于两者之间的数据接口,双口RAM应该有两套独立的数据端口和时钟端口,可以同时进行读写操作。在软件QUARTUSⅡ上定制LPM_RAM_DP的参数为:写数据位宽=8;写地址线宽=11;读数据位宽=16,读地址线宽=10;地址输入由时钟的上升沿锁入。双口RAM的容量为2 KB,写时钟采用系统像素时钟,读时钟采用由帧存控制模块产生的像素时钟的二分频信号rdram_clk。
2.2.3 帧存控制模块sto_ctl
     帧存控制模块是FPGA芯片与片外SRAM的接口,其任务是产生片内双口RAM的读地址和片外SRAM的写地址,将每行视频数据从双口RAM中顺序读出,按照逐行存储的形式写入SRAM中。当一片SRAM写满一帧数据后,逐行送入VGA接口单元,同时切换读写操作,在另一片 SRAM里连续写入下一帧视频数据。帧存控制单元的工作主要是对双口RAM的读操作、SRAM的读写操作、SRAM的乒乓控制和帧频的转换。
双口RAM的读操作由模为640的加法计数器rdram_addd完成。为了保证数据不读空,在双口RAM写使能信号有效后的第8个系统时钟,帧存控制模块向双口RAM发出读允许信号rd_ram,同时计数器工作,按照rdram_clk时钟输出双口RAM的读地址。
      SRAM的读写操作主要是对SRAM访问地址的控制。SRAM芯片IS61LV51216具有19根地址线,取其中10根为行向地址线,则每行存储 640个双字节的视频数据;9根为列向地址线,可存储480行的视频数据;剩余的存储空间空闲。视频数据在SRAM中存储的行向地址与双口RAM读地址之间有确定的等同关系,所以行向地址仍然采用计数器rdram_addd的计数值,列向地址由模为480的计数器cnt480产生。为了实现数据的逐行存储,奇场和偶场的行数据必须隔行交错存储,即列向地址是在RTS1=1时(即奇场)从000H按时钟加2递增至1DEH,在RTS1=0时(偶场)从 001H按时钟加2递增至1DFH,这样就实现了隔行扫描到逐行存储的结构转换。
        系统中采用了2片SRAM,以乒乓方式工作,一片在写入视频数据的同时,另一片读出数据送入VGA接口单元。当其中一片SRAM写完一帧数据后,帧存控制模块会产生一个转换信号,输出互补的读允许SRAM_RD和写允许信号SRAM_WR,控制2片SRAM切换工作,从而实现视频数据的实时连续处理。
        帧频的转换是通过复制帧实现的。PAL制式的信号每秒25帧,VGA显示器工作场频是每秒60帧,帧频比为5:12。要转换为能够满足每秒60帧要求的视频信号,最简单的办法就是复制帧。在本设计中每5帧做一次频率放大,第一帧、第三帧传输3次,其余各帧传输2次[3]。由于RTS0信号的上升沿表示新帧的起点,所以可以利用RTS0信号触发一个序列发生器,产生对SRAM读操作次数的控制。
2.3 VGA接口单元
       VGA接口单元由2个模块组成:VGA时序驱动模块,用于产生VGA正常工作所需的时序信号,包括60 Hz扫描时钟VGA_CLK、场同步信号VS和行同步信号HS;VGA信号转换模块,用于接收SRAM中的YUV信号并将其转换成RGB信号,并根据 VGA的扫描时序将RGB信号通过DAC,最后送入VGA显示器。
2.3.1 VGA时序发生模块VGA_SHIXU
        VGA时序发生器遵循VGA工业标准,即640 Hz×480 Hz×60 Hz模式,行同步HS和场同步VS信号的头脉冲是负脉冲,所要求的频率有:像素输出频率为25.175 MHz,行频为31469 Hz,场频为59.94 Hz。VGA水平时序中,每行包括800像素点,其中640像素点为有效显示区,160像素点为行消隐区。VGA垂直时序中,每场有525行,其中480 行为有效显示行,45行为场消隐区。时序发生器接收外部输入50 MHz时钟信号,利用模为800的行点数计数器cnt800完成行扫描时序,模为525的场行数计数器cnt525完成场扫描时序。cnt800对经过 PLL分频得到的25 MHz时钟进行像素计数,并在每次计数值清零前生成一个脉冲L_STATUS,cnt525对L_STATUS进行场行数计数。系统复位时,同步信号 HS、VS为1,计数器全部清零;帧存控制单元的写VGA信号VGA_WR有效时,将HS、VS拉低电平,cnt800开始计数。程序中对cnt800的计数值进行判断,当为95时(行消隐前肩)将L_STATUS置1,为143时将640 B的RGB信号送入VGA显示器,计满后再次拉低HS信号和L_STATUS。当cnt525的计数值为1时(场消隐前肩)将VS置1,为35时场同步输出,允许输出HS信号。行、场消隐的逻辑与即为复合消隐信号,连同行、场同步信号便产生了VGA接口的时序信号[3]。
2.3.2 VGA信号转换模块VGA_COV
VGA信号转换模块将输入的PAL制式的YUV(4:2:2)信号转换成RGB信号。首先对数据采集单元截获的 YUV(4:2:2)视频数据进行插值,得到YUV(4:4:4)视频数据(如图6所示),将一个像素点的数据YUV(如U0Y0V0)合并为独立并行的 24 bit数据,进入色彩转换单元VGA_COV后再经过程序计算来进行色度空间变换,获取并行输出的RGB(8:8:8)值。色彩空间变换公式如下:


计算结果均除以1 024(即右移10位),即可得到RGB的值[4]。对输出的RGB(8:8:8)取高位获得RGB(5:6:5),通过D/A转换器送入VGA显示器。
3 仿真与性能分析
3.1 部分仿真波形
     SRAM写入第一行数据的仿真波形如图7所示。当RTS1=1(奇场)时,在行有效信号有效后,模为1 440的行计数器tempp开始计数;在计数值tempp为40时,应该提取到有效数据流中A8 A9 AA AB AC AD AE……计数值为48时,视频数据开始将双字节的视频数据写入SRAM中,如A8 A9, AA AB, AC AD……。

3.2 系统性能估算
      为了保证系统的实时性,一行有效视频数据的存储必须在下一行数据到来之前完成。本系统中,存储一行有效视频数据以及格式调整等需要占用1 288个系统时钟。SRAM的最高时钟频率可以达到125 MHz,则存储一行视频数据所需的时间T1=1 288/125=10.304 ns。一行视频数据中的消隐期和无效数据占用448字节时间,输出的像素时钟为27 MHz,则消隐期和无效数据所占的时间为T2=448/27=16.592 ns。由于在行消隐期和无效数据所花费的时间T2大于存储一行视频数据所需的时间T1,因此完全可以在行消隐期实现一行视频数据的实时存储,满足实时数据处理的要求。
     本设计在QUARTUSⅡ8.1环境下进行综合验证,其顶层设计采用原理图设计方式,各模块采用VHDL语言设计,共使用了364个LE,程序下载到 FPGA芯片进行仿真验证,很好地实现了实时视频监控的功能。在本设计的基础上稍加改动即可实现可变分辨率的视频图像采集与处理系统。
继承事业,薪火相传
返回列表