微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM+FPGA+多DSP的嵌入式实时图像处理系统

基于ARM+FPGA+多DSP的嵌入式实时图像处理系统

时间:11-01 来源:互联网 点击:

2.3 S3C6410的DMA与软FIFO接口实现
根据DMA接口原理,设计S3C6410与FPGA之间的接口简图如图5所示。

读时钟由ARM的时钟输出引脚CLKOUT0提供。CLKOUT0根据S3C6410内部寄存器的设置可以输出不同的时钟频率。FIFO输出数据经过以nGCS4为选通信号的缓冲器(Buffer)后接到S3C6410的数据总线上。nGCS4是S3C6410存储空间中BNAK4的片选信号,当S3C6410对该信号对应存储空间进行读写操作时,BANK4为低电平,其余时间均为高电平。
  FIFO的写请求信号由S3C6410与FIFO的满状态共同控制。当S3C6410发出START信号并且FIFO未满时,写请求信号为高电平,FIFO在写时钟的控制下写入数据;当START信号撤销或者FIFO满时,写请求信号变为低电平,停止写操作。
  FIFO的读操作与S3C6410的DMA操作配合进行。系统采用单服务命令模式的DMA操作,每次传输一个字节的数据。当DREQ0信号变为低电平时,DMA操作开始,每次传输一个字节后产生一个DACK0应答信号,而且只要DREQ0为低电平DMA操作就继续进行,直到DMA控制寄存器中的计数器为0,产生DMA中断。根据上述时序特点,将FIFO的空信号作为DMA的请求信号DREQ0。当CCD输出的数据写入FIFO中时,空信号跳变为低电平启动DMA操作,同时以DACK0信号作为FIFO的读请求。每次DMA传输完成后应答信号使FIFO的读指针移动一位,以实现数据的快速准确采集。
3 图像采集模块
用可编程视频输入处理器SAA7113H进行视频信号处理。SAA7113H内部集成了强大图像色度、亮度处理功能以及多种输出模式[3];有32个工作寄存器,在系统复位时,必须通过I2C总线对其进行初始化。本系统使用灰度图像,没有使用色度信号,所以数据线为8 bit。SAA7113H与FPGA的接口如图6所示。

在本系统中,FPGA内部需要设计一逻辑时序完成图像数据的采集,数据的传输采用异步FIFO完成。采用此方案可以解决CCD输出数据频率与从DSP和ARM不匹配的问题。
4 DSP的EMIFA与FPGA实现的软FIFO接口
4.1 DSP的EMIFA接口[4-5]

DSP(TMS320DM6416T)之间的通信都是通过外部存储器接口(EMIFA)访问片外存储器进行的。EMIFA由64 bit数据线D[63:0]、20 bit地址线A [22:03]、 8 bit字节使能线BE[7:0]、4 bit地址区域片选线/CE3~/CE0和各类存储器的读/写控制信号组成。TMS320DM6416T 的每个
/CEx空间都有256 MB寻址空间,并且可配置为与SRAM、SDRAM、ZBTSRAM、Flash、FIFO等各类存储器接口。EMIFA读/写各类存储器的时钟可由软件配置为EMIF的AECLKIN、CPU/4或CPU/6。本设计配置为EMIF的AECLKIN,且为133 MHz。
4.2 EMIF与软FIFO接口实现
DSP之间通过EMIF口与FPGA实现的异步FIFO进行通信。EMIF异步接口的每个读/写周期分为三个阶段:建立时间(SETUP)、触发时间(STROBE)、保持时间(HOLD),且每个阶段时间可编程设置,以适应不同的读写速度。DSP读写异步FIFO的时序图分别如图7、图8所示[6]。DSP读写FIFO控制信号由FPGA产生,其逻辑关系如下:
写FIFO信号:writ_clk= AECLKOUT
   writ_req=! (/CE+/AWE)
读FIFO信号:read_clk = AECLKOUT
   read_req = ! (/CE+/ARE)


另外,写FIFO的DSP要相应为满状态标志,读FIFO的DSP则相应为半满状态标志。
5 DSP之间数据通信[7]
为了设计一款通用性比较强的图像处理平台,各处理器间的数据传输必需达到通用性,这样可以针对不同系统的应用,只须修改图像处理算法代码,而不须要修改各处理器之间的通信。具体设计分为如下两部分:
 (1) 数据通信协议说明(x=0,1,2,3)
 Se/Re (Send/Receive)[0]:ARM通过FPGA请求DSPx接收(该数据位为1)或发送。
 ARM[1:3]:该段数据为DSPx向FPGA发出请求数的DSP编号。
DSPx[4:6]:ARM处理器向FPGA提出要求响应的DSP的编号。
Da_Le(Data_Leng)[7:18]:ARM请求DSPx接收或发送的数据长度。
 Da_Un (Data_Unit)[19]:该标志位表示是否按照Data_leng*K(1K=1 024 bit)的数据长度传输数据,若为1,表示接收或发送数据长度为Data_leng*K(1K=1024 bit);若为0,表示接收或发送数据长度为Data_leng。
 Da_Bl (Data_Block)[20:27]:该数据表示ARM请求DSPx接收或发送Data_Block个Data_leng K或Data_leng数据块。
 Da_Ch(Data _Result)[7:18]:ARM请求DSPx接收或发送的算法代码中间运行结果或最终结果,此数据段与Data_Leng共用。
In_Pr (Interrupt _Priority) [27:30]:设置DSP的中断优先权。
Ot_Use (DSP_State) [31:34]:DSP状态标志信息。
 
Ot_Use (Other_Use) [36:47]:用户自定义数据段。
 (2) 数据通信主要流程
 首先,FPGA接收到ARM[1:3]处理器的请求信号,然后根据Data[0:34]计算出校验数据SUM与Parity_Check[35]比较,若不等,则FPGA向ARM处理器重新发请求信号;若相等、且DSPx为空闲状态时,则FPGA由Send/Receive向DSPx发送接收或发送数据请求,并将采集到的图像数据传输给DSPx,同时使能对应的FIFO数据通道;DSPx根据收到的数据信息,同样计算出校验数据,若与Parity_Check相等,则根据Send/Receive标志位,采用EDMA方式向EMIF口接收或发送Data_Block* Data_leng(或Data_Block* Data_leng K)数据。如果FPGA同时接收到2个或2个以上的DSPx数据传输请求信号,则FPGA根据Interrupt _Priority端口数据判其执行的先后顺序。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top