2 控制模块中DSP与FPGA数据通信
由于FPGA基于SRAM工艺,上电后数据会丢失。一般FPGA除了采用边界扫描方式JTAG下载外,更多采用与FPGA相对应PROM芯片静态配置,这种配置方式由于PROM容量小,价格昂贵,易于烧坏等缺点,在产品化之前一般不予采用,更可取的方法是采用控制器动态配置FPGA,比如单片机、DSP。同时,视频服务器通过网口发送视频数据,需要一个控制部分前向网口接收视频服务器的数据,后向配置FPGA,发送视频数据。基于以上考虑,整个系统中控制部分均由ADI公司的Blackfin系列DSP BF537完成,DSPBF537通过接口与视频服务器和FPGA通信。
2.1 硬件平台
ADSP是ADI(Analog Device Inc.)公司推出的一系列高性能低功耗DSP芯片,而基于Blackfin处理器的ADSP-BF537具有接口丰富,性能优良,价格低廉等特点,并具有强大的多媒体数据处理能力。Blackfin处理器集成了一个由ADI公司和Intel公司联合开发的基于MSA(Micro Signal Architecture)的16/32位嵌入式处理器,支持32位RISC指令集,采用10级流水线,集成了两个16位乘法加速器,内核主频最高可以达到600 MHz。ADSF-BF537总线有一个以DMA控制器为中心的高速自主数据通道。DMA总线可以在存储器之间、存储器和外部接口之间快速地传递数据,并且可以和内核并行操作。ADSP的集成开发环境Visual DSP++中嵌入了实时操作系统内核VDK,适合多任务多线程的嵌入式操作。ADI还提供了一个用于Blackfin系列嵌入式处理器的轻量级TCP/IP(LwIP)协议栈端口,可以快速将一个独立的嵌入式应用联网。
2.2 硬件系统架构
DSP与视频服务器采用轻量级TCP/IP(LwIP)交互数据,这里不过多介绍。主要介绍DSP与FPGA连接。由于FPGA基于SRAM工艺,掉电后数据会丢失。采用的方法是将作用于FPGA的通信基带算法文件存储在DSP的FLASH中。一般调试时,DSP及FPGA都需要从PC机通过JTAG口进行程序的下载。但当系统程序已经调试完毕,当需要到户外进行测试或作为产品使用时,针对系统调试的方便性,采用DSP自启动及配置FPGA部分。
ADI公司的ADSP-BF537上电后启动方式一共有7种。本设计中采用的DSP上电从16位FLASH启动,启动程序采用Analog公司提供的烧写启动FLASH的程序。第一次上电时,利用JTAG,结合ADSP自带工具“FLASH Programmer”将写好的DSP程序烧入FLASH中。并且将FPGA的配置文件(.bit格式)读到缓存,通过DSP烧写到FLASH的Bankl和Bank2中,把Bank0用来做DSP自启动。断电复位后,启动过程如下:
(1)BF537从FLASH引导启动,完成DSP板级初始化。
(2)FPGA的配置文件动态加载到FPGA中。
(3)用DSP的GPIO端口对FPGA的时钟和数据配置专用引脚进行模拟时序,即完成对FPGA的动态配置。
在启动过程完成后,DSP与视频服务器进行Sock-et连接,接收压缩的视频码流,并送到FPGA进行基带部分的处理。
DSP通过自身的外部总线与FPGA相连,FPGA内部实现了两个2 KB的异步存储器SRAM0,SRAM1,对存储器的访问满足DSP外部总线的时序要求。
对DSP而言,DSP通过外部总线连接到SRAM0和SRAM1,这就相当于外扩了两个外部RAM,DSP可以自由地访问它们。图2中的SRAM0,SRAM1分别用于DSP发送数据和接收数据。SRAM0和SRAM1本身是双口RAM,可以供DSP和FPGA访问,就是通过这种共享存储器的方式完成数据交互。
2.3 软件系统结构
相关程序是用含有VDK(Visual DSP Kernel)的DSP软件开发工具Visual DSP开发的。VDK是一种带有API函数库的实时操作系统内核,它具有任务调度和任务管理功能,一共支持32个任务。VDK是整个软件的基础,所有其他的程序都运行在该Kernel上。
上电或复位后,DSP自启动后VDK启动线程lwip_sysboot_threadtype开始运行。在线程lwip_sysboot_threadtype中进行板级初始化和Lwip协议栈和网口初始化,其中板级初始化包括FPGA初始化,EBIU初始化,MDMA初始化,FLAG初始化。接下来创建下面几个线程:
(1)数据传输:视频数据传输。用于从编码器获取编码后的视频数据流,并存储到缓冲区中。
(2)FPGA中断:视频数据发送中断;MDMA中断。
DSP首先通过Socket与视频服务器连接,从视频服务器获取视频数据,并将数据缓存后按照特定的格式打包,等待FPGA触发视频数据发送中断。中断触发后,DSP启动MDMA将一帧大小的数据发送给FPGA发送缓冲区。当MDMA操作完成后,触发MDMA中断,将帧头写入FPGA发送缓冲区的头两个字节。FPGA将接收的数据进行基带算法处理后再将数据发送给射频部分,之后FPGA再触发视频数据发送中断,告诉DSP可以下一帧的发送,于是又启动MDMA,如此循环。