利用 FPGA设计万兆网络摄像头

(整期优先)网络出版时间:2020-07-28
/ 3

利用 FPGA设计万兆网络摄像头

张黎翔

中石化管道储运有限公司 江苏徐州 221000

摘要: 随着网络技术的飞速发展,安防领域的需求不断提升,网络摄像头越来越多的被应用在各个领域,传统的网络摄像头多采用硬件、操作系统、软件的形式实现,在一些持续性的不间断的场景下可尝试纯硬件结构设计。本设计采用以FPGA为核心器件,将图像的采集算法、UDP协议传输,通过VHDL语言和Vivado集成开发环境完成顶层文件、COMS控制、FIFO控制、UDP发送、参数配置等模块的设计并进行时序测试等工作,实现以FPGA为核心元器件的硬件式万兆以太网络摄像头的设计。其并行运算模式大大提升了数据处理速度,硬件电路设计大大提高了稳定性与安全性。

关键词:FPGA 网络摄像头 VHDL语言 UDP协议

  1. FPGA与其内部结构

FPGA通常来说全称为现场可编程门阵列,该芯片实则是在传统的逻辑电路以及门阵列之中开拓而来。该芯片与ASIC有差异的是,前者实则为半定制的传统电路,该芯片的功能可依靠重复编程以实现所需要的功能,同时在该芯片内部蕴含数量巨大的可编程逻辑器件以及布线资源[1]

该芯片内涵含有逻辑模块、IO模块以及由内部的连线组建而成的基本逻辑模块阵列,这也是该芯片内的基础单元。该芯片逻辑功能可以依靠芯片内部的查找表以此实现其预期功能。触发器可以连接并驱动其他的逻辑电路从而实现各式各样的组合电路和时序电路功能。

二、VHDL语言

VHDL语言于上世纪80年代后期开发,是一种电路设计的高级语言。该语言全称为超高速集成电路硬件描述语言,通常来说大部分应用于数字电路领域。当实体模块的内外部预期功能开发结束后,其余部分的功能需求设计均可以直接调用该模块。这是使用该语言进行程序设计的一个独有特点,该特点与模块组合的概念雷同[2]。该语言可依靠自身的科学语言架构以及其语言代码以实现对预期功能的设计。通过对实体模块的选用,预期功能的详细描述,最终可以完成电路级描述的设计。该语言的设计形式多种多样,用户可选择自下而上的程序设计流程,亦可以选择自上而下的设计流程;可完成同步异步的电路流程设计。

三、UDP协议

UDP协议全称为用户数据报协议,该协议实则为OSI参考模块中的一种无线传输协议。它的特点是数据包不要求按照排序先手传输,而只提供数据包的序号,排序的内容交给应用层来完成。该协议传输方式相对来说比较简易,虽然该协议的报文并无可靠性、顺序性以及控制性的要求,但是相反也在很大程度上简化了传输流程,以此提高速率。在对速度要求很高,精确度不是特别高的场合比较实用,比如视频图像传输[3]

该协议的数据报主要来说是通过协议报文头以及协议数据相之构成,该协议的报文头主要通过源端口号、目的端口号、数据报长度以及校验相互组建而成。数据报的长度是整个报文的长度,单位为字节。理论上数据报总字节数是65535,通常会小于这个值[4]。UDP协议的组成如表3-1所示。

表3-1 UDP协议组成部分

Tab.3-1 UDP protocol components

16位源端口号

16位目的端口号

16位UDP长度

16位UDP检验和

数据

四、功能模块与程序设计

总程序实现COMS视频采集控制、视频图像的网络传输等功能,硬件采用COMS模组,通过配置COMS模组的相关寄存器实现JPG视频压缩的图像输出。网络传输用Ethernet UDP通信协议,达到视频图像数据的快速传输,上位机通过网口接收UDP数据包,提取JPG的图像数据并显示在电脑上。在FPGA内部,设计使用一个FIFO控制模块用于存储摄像头COMS模组采集的JPG图像数据,当FIFO数据的数量达到一个UDP数据包的长度时,触发一次UDP的数据包发送。总设计逻辑框如图4-2所示。

5f1fc9ae8c47b_html_a537f6e62511f28f.png

5f1fc9ae8c47b_html_6877d9222c5b68b7.gif

图4-1信号触发时序

图4-2设计逻辑框图

Fig.4-2 Signal Trigger Timing

Fig.4-2 Design logic diagram

设计是一个顶层设计包含6个子模块,分别是UDP数据发送模块、FIFO读写控制模块、PLL模块、图像获取模块、寄存器配置模块,以及上电延迟模块。下面分别介绍各个模块的设计过程。

4.1 TOP程序

该程序定义了完整程序的IO接口以及接口端位数,与此同时实例化了协议数据,另外调用了一个PLL IP来产生24Mhz的时钟提供给COMS模组。设计采用自上而下分层次分模块的方法,TOP程序中各子模块的编写见图4-3所示。在编写完总模块的接口与连线后,在编译平台的Synthesize-XST的子目录ViewRTL Schematic可以查看TOP程序的原理图,如图4-4。

5f1fc9ae8c47b_html_9b549e48567e17e0.png

5f1fc9ae8c47b_html_dbc9ec9c96b873b6.png

a) 上电延迟实例化

b) 寄存器配置实例化

a) Power on delay

b) Register configuration

5f1fc9ae8c47b_html_99e5b404a5b71ceb.png

5f1fc9ae8c47b_html_4114287880ee9eea.png

c) COMS控制实例化

d) FIFO控制实例化

c) COMS control

d) FIFO control

5f1fc9ae8c47b_html_270a0ec74c6776a0.png

5f1fc9ae8c47b_html_875daa3b8b399aa.png

e) UDP实例化

f) PLLl实例化

e) UDP send

f) PLL model

图 4-3 TOP程序各部分

Fig.4-3 TOP program parts

5f1fc9ae8c47b_html_60715d0da6ea8a0c.png

图4-4 TOP程序结构

Fig.4-4 TOP program structure

4.2 FIFO控制模块

Xilinx的FPGA集成开发环境已经有FIFO控制器的内核,这里直接调用即可,在调用前需要根据设计配置数据参数,这里设置输入输出数据统一为8位,写深度为2048位。FIFO 的具体配置过程如图4-5所示。

5f1fc9ae8c47b_html_e0e77e6d04649941.png

图4-5 FIFO内核初始化

Fig.4-5 FIFO core initialization

5f1fc9ae8c47b_html_ec3eb719132f75ba.png

图4-6 数据计数程序

Fig.4-6 Data counting program

另外 FIFO 会输出一个rd_data_count信号指示FIFO内部可读数据的长度,程序中会判断此信号来决定发送 UDP 的数据包。如图4-6所示。

4.3 UDP 网络数据发送

整个硬件设计主要由一个顶层模块UDP和两个子模块:UDP发送模块和CRC校验模块组成。UDP顶层程序实例化了UDP模块,定义了UDP模块接口,为总程序调用,UDP的顶层模块示意图如图4-7。双击顶层模块示意图出现了UDP发送模块和CRC校验模块并且给出二者连线如图4-8所示。程序中会用FIFO的数据长度信号fifo_data_count来判断是否触发UDP数据的发送,如果fifo_data_count 长度大于1024,发送一个UDP数据包。该部分程序如图4-9。程序中发送frame_index的参数给PC,这样PC软件可以用这个信号来确认这是一帧中的第几个数据包。

5f1fc9ae8c47b_html_26adffdabf9d2b60.png

图4-7 UDP结构

Fig.4-7UDP structure

5f1fc9ae8c47b_html_c7b1454e512d8b90.png

图4-8 Crc与Ipsend连线

Fig.4-8 Crc connection with Ipsend

5f1fc9ae8c47b_html_803b32d33ba97459.png

图4-9 数据发送程序

Fig.4-9 Data transmission programming

编程后的部分结构原理图如图4-10所示。

5f1fc9ae8c47b_html_f7f0ffd9712bacc5.png

图4-10UDP内部分原理图

Fig.4-10 UDP internal schematic

4.4寄存器配置

我们可以据用户所需要的COMS模组摄像头的储存器,使得储存器输出的图像像素选择为800*600,图像格式所输出图像的每帧所显示视频数据均有所差异,该模式下所输出模式总计共6种,论文所述的程序流程中将图像设置为JPEG模式,该图像格式每行的长度均为定值,图像各帧均由不同行数组成,程序参数的匹配可以通过数据编程以实现预期设定,如图4-11所示。

5f1fc9ae8c47b_html_599606f7e2e71169.png

图4-11 COMS寄存器配置编程

Fig.4-11 COMS register configuration programming

部分内部结构如图4-12所示。

5f1fc9ae8c47b_html_e7ce7f8bf0be5361.png

图4-12寄存器配置模块部分内部原理图

Fig.4-12The internal schematic diagram of the register configuration module

4.5 PLL锁相环

PLL通常称为锁相环,是前文所述芯片中的一项重要资源,因为通常来说一个相对较为复杂的芯片系统,经常需多种频率以及各种相位的信号。因此,一个芯片中所含的锁相环数量,通常来说是判断芯片性能的一项参数指标。在芯片的程序设计中,时钟系统的高速设计相对来说比较重要,系统中如果产生略微抖动以及延迟,系统时钟将会提升芯片的成功率。

赛灵思品牌在该芯片中,给予了大量的有效资源,其中大量的设计人员在其自身的芯片设计之中均可直接使用[5]。在Spartan6的芯片中,含有大量的数字时钟管理器(DCM)以及锁相环(PLL)时钟产品。使用者可直接使用芯片中的管理器以及锁相环资源,以便于实现延迟与抖动的需求。锁相环以及管理器有其各自的功能。

锁相环大部分应用于频率比较综合的场合。通过使用一个锁相环,便通过利用一个输入信号便可以衍生出多个信号。将此结合管理器的应用,便可以用作抖动滤波器。Spartan-6有专用于的管理器到锁相环以及从锁相环至管理器的线路。Spartan-6中的锁相环输出属于非扩频模式。设计人在使用不同种类的时钟信号时,均能够直接调用锁相环来调换管理器。锁相环时钟信号所输出的宽范设置范围,然而管理器所输出的信号均属于实现设定,不能在日后的调配中设定,锁相环以及管理器所选择的程序均可以满足设计的要求。然而如果相移是程序中所需要的,首先应选择管理器模式。锁相环内部框图如下图4-13所示。

5f1fc9ae8c47b_html_81fe528d7fe40eae.png

图4-13 PLL内部功能

Fig.4-13 PLL internal functions

其内部结构如图4-14所示。

5f1fc9ae8c47b_html_1b98261abc12aba3.png

图4-14 PLL内部结构

Fig.4-14 PLLinside structure

  1. 效果展示

在上位机配置好IP地址等信息,抓包成功后,利用上位机网络视频接收软件进行图像显示效果如图5-1所示。

5f1fc9ae8c47b_html_590f3819f0802131.jpg

图5-1 视频效果

Fig.5-1 Video result

  1. Tlelo-Cuautle E, Rangel-Magdaleno J J, Pano-Azucena A D, et al. FPGA realization of multi-scroll chaotic oscillators[J]. Communications in Nonlinear Science and Numerical Simulation, 2015, 27(1-3): 66-80.

  2. Gil P J, Gil D, Gracia J, et al. A Prototype of a VHDL-Based Fault Injection Tool[J]. Journal of Systems Architecture, 2002, 47(10):847-867.

  3. 戴卫兵, 陈欣荣, 黄建文. VHDL 行为描述的功能模拟[J]. 江苏大学学报:自然科学版, 1998(6):50-55.

  4. Parker W J, Jenkins R J, Butler C P, et al. Flash Method of Determining Thermal Diffusivity, Heat Capacity, and Thermal Conductivity[J]. Journal of Applied Physics, 2004, 32(9):1679-1684.

  5. Arnold M. Verilog Digital Computer Design: Algorithms Into Hardware[J]. Microelectronics Journal, 1998, 31(5):371-372.