FPGA处理器

2024-06-26

FPGA处理器(共8篇)

FPGA处理器 篇1

摘要:本文设计了一种全流水线结构的CORDIC处理器。该处理器可用于三角函数、反三角函数、双曲线函数和其他的超越函数的计算。在FPGA平台上验证后表明:在高速计算的情况下,能保证较好的计算精度。

关键词:坐标旋转数字计算机,流水线,现场可编程门阵列

1 引言

CORDIC算法最初由Volder提出,用于实时导航中的坐标计算,之后Walther对其进行了扩展。如今CORDIC算法已应用于众多领域,如8087协处理器、雷达信号处理、3D图像处理、以及OFDM等无线通信系统中。本文首先分析了CORDIC算法的原理,然后设计出了高速流水线结构的CORDIC处理器,并最终在FPGA平台上对其进行了验证。

2 CORDIC算法简介

假如将直角坐标平面上的向量(Xn,Yn)旋转角度θ得到向量(Xn+1,Yn+1),CORDIC算法的思想就是把旋转角度θ分成若干步骤,每步旋转一个θn,同时把θ减掉一个θn,然后判断θ的符号,根据θ的正负来决定下一步旋转角θn的正负。依次循环,直到θ趋于零,即该向量已旋转了θ角。根据硬件移位运算的特征,取这一系列θn值时,可令tan(θn)=1/2n。

由上所述,每一步的向量旋转可以写成如下形式:

因此,每一级的向量旋转可以写成:

各级cos(θn)提出来相乘后会趋于一个常数K。中:

现引入一个新的变量“Z”,Z代表角度θ每次旋转后剩余的部分,即:

3 FP GA实现

图1为全流水线CORDIC硬件实现结构图。图中“const(n)”即为每次旋转(迭代)预定角度θn,θn储存在rom中,可通过查找表的方式得到。“sign(Z(n))”即为Sn,可通过判断Z的符号来确定。确定Sn后,通过加减操作得到Z(n),通过移位(>>)加减操作得到X(n),Y(n)。这样迭代n次之后得到向量(Xn+1,Yn+1)。每次迭代需要2个通用移位器、一次查找表、以及3个加法器。在每级加入寄存器后,就得到了并行的全流水线结构的CORDIC处理器。

4 结果分析

在QuartusII平台上,选用Altera公司的CycloneII系列EP2C35F672C6器件进行综合、布局布线和时序分析。计算输入角度为16位宽,迭代次数为20的正余弦函数最高速度可达116MHz。表1是一些常见角度的正余弦计算结果。从表中可以看出,计算误差在0.0001左右。

5 结论

本文设计了一种高速全流水线结构的CORDIC处理器。可计算三角函数、反三角函数、双曲线函数和其他的超越函数。在FPGA上验证表明其具有极高的速度和较好的计算精度。可用于DCT、DFT、数字滤波器及OFDM等系统中。

参考文献

[1]Volder J E.The CORDIC trigonometric computing technique.IRE Trans Electronic Computers.1959,EC-8(3):330~334

[2]Walther J S.A unified algorithm for elementary functions.AFIPS Spring Joint Computer Conference.1971,38:379~385

[3]Baese U M.数字信号处理的FPGA实现(原书第二版).北京:清华大学出版社,2006

FPGA处理器 篇2

引 言

伴随着图像处理技术的快速发展,图像处理系统的性能需求也在不断提高,特别是在实时性上的要求。基于PC或者工作站的图像处理系统,常常不是一个可行的选择,原因如下:应用对处理时间要求苛刻;CCD摄像机数据量太大。另外,这类系统的资源有效利用率较低,体积大而笨重,功耗高,不适合便携式应用场合。

DSP是一种基于指令和代码的流水线处理器,具有强大的数据处理能力和较高的运行速度,采用C/C++或者线性汇编语言编程,可以支持复杂的算法处理,而FPGA则属于真正的并行架构,不同的处理操作无需竞争相同的资源,每个处理任务都可以不受其他逻辑块的影响自主运行,因此FPGA具有强大的并行处理能力,其现场可编程的属性也带来了更大的灵活性,但是,FPGA不擅长复杂的算法处理和逻辑控制。本文基于DSP+FPGA架构构建了一个嵌入式图像处理系统,使得DSP和FPGA可以发挥各自的特长,协同处理,与单独采用DSP或FPGA的系统相比,本系统具有更强大的数据处理能力,且更灵活、更通用。

1.系统架构

本系统采用DSP+FPGA架构,原理方框图如图1所示,其中DSP芯片采用TI公司单核最高性能的TMS320C6455(简称C6455)芯片作为核心处理器,负责完成视频图像的复杂算法处理,FPGA芯片采用Altera公司的Cyclone Ⅲ系列芯片EP3C55,FPGA作为DSP的协处理器,负责完成图像的采集、显示和传输等辅助功能,使得DSP可以专注于算法处理。

DSP和FPGA之间通过32位EMIF接口实现了高速同步无缝互联, 由图1可知,本系统的动态存储器均采用DDR2 SDRAM,其中C6455所带2片DDR2存储器用来存储图像和算法数据,为C6455处理大数据量、复杂算法提供了保证。FPGA所带2片DDR2存储器用来存储捕捉的Camera图像数据,以便VGA显示和DSP读取。FPGA采集的图像数据可通过EMIF和EDMA从FPGA所带的DDR2存储器搬运到DSP所带的DDR2存储器。

图1 系统方框图

2.FPGA设计

本文FPGA的主要功能围绕着DDR2存储器的.读写,如图2所示。

图2 FPGA的主要功能模块图

相机负责向缓冲区写数据,VGA显示和DSP负责从缓冲区读数据。本文中的DDR2控制器工作于Full?rate模式下,需要向DDR2 driver提供2倍数据宽度,即64 b数据。本文对每个读写数据通道,使用独立的FIFO进行不同时钟域之间的数据传输。从CameraLink相机的LVDS接收器解码得到8 b图像数据,在向Write FIFO写之前,需要按8 B进行打包处理,合并为64 b数据;而发向VGA显示的数据在从Read FIFO中读出后,需要先经过拆包处理,得到8 b图像数据后才能送给VGA Controller;从Capture FIFO读出的数据发送给DSP之前也要经过拆包处理,将64 b数据拆为2个32 b数据后,才能发送给EMIFA,进行传输。为方便可视化验证算法处理结果,DSP算法处理结果可以通过McBSP发送给FPGA,FPGA接收到数据,将其转换为可视的屏幕位置送给VGA Controller,在屏幕上进行叠加显示。

本系统应用于近红外图像处理领域,采用的CameraLink相机输出分辨率为1 024×768,帧率为30 f/s,而一般的液晶显示器刷新频率为60 Hz,为了将捕捉到的相机数据显示出来,需要将30帧图像插帧为60帧,但是显示时钟与相机时钟并不是同源时钟,其帧率并不是严格的两倍关系,这种相机和显示之间的异步时序关系如图3所示,所以不能简单地将一帧图像显示2次;同时,本系统的近红外图像算法处理时间根据图像的不同而具有不确定性,并非每帧图像都能在一个帧周期内处理完成。基于这两个因素,本系统没有采用常规的乒乓缓冲处理方式,而是采用了三重缓冲解决了这两个问题。

图3 相机和显示的异步时序关系

所谓三重缓冲,也即在DDR2存储器内开辟了三个缓冲:BufferA,BufferB和BufferC。其中,读写操作各占一个缓冲区,第三个存储区作为中转,先不考虑DSP从缓冲区读数据。

三重缓冲的示意图如图4所示,假设当前缓冲区BufferA正在进行写操作,缓冲区BufferB正在进行读操作,缓冲区BufferC则有2种可能:已写满(FULL)和已读完(EMPTY)两个状态。此时,如果需要进行读写翻页操作,即读复位信号或写复位

信号有效时,DDR2驱动程序可按不同情况给出不同的操作,如表1所示。

例如,当读复位信号有效,写复位信号无效时,说明缓冲区BufferA尚未写满,而缓冲区BufferB已经读完,此时,需要查询缓冲区BufferC的状态,如果缓冲区BufferC处于“FULL”状态,则读缓冲区将由当前的缓冲区BufferB改为缓冲区BufferC,并将缓冲区BufferB设置为“EMPTY”状态;如果缓冲区BufferC处于“EMPTY”状态,则将重新读取缓冲区BufferB。

图4 三重缓冲的示意图

表1 三重缓冲的决策表

再考虑DSP从缓冲区读数据的情况,为保证DSP任意时刻开始读数据,总能读到最新的数据,本文使用图像的场信号FVAL下降沿作为触发,定位DSP读数据的缓冲区地址,如果在下一个FVAL下降沿之前DSP始终未开始读数据,则在新的FVAL下降沿时刻重新定位缓冲区地址,反之,如果DSP开始读数据了,即使在FVAL下降沿未能读完,也会继续读,直到DSP读完数据,再重新定位缓冲区地址,按本文设计的方案,DSP会在很短的时间内完成读数据任务,而如果在两个FVAL内,DSP一直未完成读任务,则认为发生了错误,读控制器会进行复位矫正。

DDR2驱动的读写控制以显示的行信号HD为周期,周期性查询是否需要进行读写操作。其状态转移示意图如图5所示。

图5 DDR2读写控制的状态机

SignalTap Ⅱ Logic Analyzer是Quartus Ⅱ自带的嵌入式逻辑分析仪,与ModelSim软件仿真有所不同,是在线式仿真,可以实时捕捉和显示信号变化。图6所示是本文用SignalTap Ⅱ捕捉到的数据波形。

图6 SignalTap Ⅱ波形图

3.C6455软件设计

本文C6455的软件基于TI提供的抢占式多线程实时内核DSP/BIOS进行开发,网络部分使用了NDK开发套件,为了实现通过网络发送图像数据给计算机和接收来自计算机的图像数据,使用了面向无连接的UDP协议,相比TCP协议,UDP速度更快,更适合应用。C6455软件主要包含三个部分:实时性最高的硬件中断线程(HWI);采集线程和两个任务线程(TSK);处理线程和通信线程,流程图如图7所示。

图7 C6455程序流程图

4.实验结果

FPGA处理器 篇3

DFT作为DSP领域中时域和频域转换的基本运算,存在运算量太大的缺点,导致其应用受到局限。DFT快速算法FFT的提出,简化了DFT的运算过程[1],使其在实时信号处理领域中得到广泛应用。FFT实现的方法包括软件实现和硬件实现两种。采用软件实现FFT的方法存在计算慢,实现过程复杂等缺点,所以目前比较流行的方式是采用硬件实现FFT。硬件实现的具体方法可以分为ASIC方法、FPGA方法、DSP方法和通用处理机方法等。

FPGA是20世纪80年代中期出现的一种新的电子设计自动化技术,具有集成度高,逻辑实现能力强,设计灵活等优势。在FPGA上实现数字信号处理,即用纯数字逻辑进行DSP模块设计,为高速数字信号处理算法提供了实现途径[2]。在此,采用FPGA方法设计64点FFT处理器[3]。

现有的FFT模块可以对多点数据进行运算,但是存在运算周期长,结构复杂,硬件资源耗费大等缺陷。采用64点FFT可以通过优化结构来快速处理多点数数据。目前设计的64点FFT处理器主要采用以专用处理单元取代常规FFT处理单元的方法[4],或者按照固定几何结构设计FFT处理器的方法[5]。这里所介绍的64点FFT处理器是在固定几何结构设计方法的基础上加以改进,将输入的64点数据均匀分成8组,并行输入给FFT运算单元,进行FFT运算。通过对蝶形运算单元进行优化设计,所设计的64点FFT处理器模块较之以往的FFT模块,节省了硬件资源,提高了运算效率。通过ModelSim仿真实验证明,在外部工作时钟频率为40 MHz下,对随机生成的序列进行64点FFT运算处理,运算时间为10 μs,缩短了现有FFT模块的运算时间。

1 按频率抽取的基——4FFT算法原理

对于序列长度为N(N为2的整数次幂)的FFT算法主要有基-2 FFT和基-4 FFT两种。计算一次基-2 FFT需要二次复乘和两次复加;计算一次基-4 FFT需要三次复乘和八次复加。从运算次数上看,基-2 FFT较为简单,但是因为基-2 FFT的复数运算较为复杂,所以在硬件实现上反而要比基-4 FFT占用的资源更多。为了满足对数据高速处理的要求,在此选择在FPGA上实现基-4 FFT的算法。

根据定义,对于长度为N的序列x(N)(0≤NN-1),它的DFT可表示为:

X(k)=DFΤ[x(n)]=n=0Ν-1X(n)WΝknk=0,1,2,,Ν-1(1)

式中:WΝnk=e-j2πNnk称为旋转因子。直接计算DFT,需要的计算量为N2次复乘和N(N-1)次复加。当N很大时,运算量相当大,无法满足实时处理的要求。因此利用旋转因子的对称性、周期性和可约性,把长序列分解成为短序列来进行快速傅里叶变换[1]。

由式(1)可以得到4个子序列:

A=X(k)=m=0(Ν/4)-1x(4m)WΝ4mkB=X(k+1)=m=0(Ν/4)-1x(4m+1)WΝ(4m+1)kC=X(k+2)=m=0(Ν/4)-1x(4m+2)WΝ(4m+2)kD=X(k+3)=m=0(Ν/4)-1x(4m+3)WΝ(4m+3)k(2)

利用旋转因子WΝnk的特性,如:W40=1,W41=-j,W24=-1,W43=j,将A,B,C,D作为复数操作数进行运算,由式(2)可得简化计算式:

[X(k)X(k+1)X(k+2)X(k+3)]=[11111-j1j1-11-11j-1-j][ABWΝkCWΝ2kDWΝ3k](3)

式(3)就是在FPGA上实现基-4 FFT算法的基本运算法则。

不同于以往的基-4 FFT算法,这里是将输入的64点数据以8位输入数据为一组,共分成8组的方式输入给FFT运算单元进行FFT运算的。完整的FFT蝶形运算共分6级,经历196个循环状态。将来自存储单元的数据输入到FFT运算单元中,前三级是按8位1组的方法,分为8组进行运算;后三级是将前三级运算所得到的中间数据送入运算单元进行运算。经过FFT运算后,将所得到运算结果写入存储单元中保存。结果以倒位序方式输出,需要经过调整位序变换成为自然顺序输出。

2 FFT运算器设计

2.1 系统的整体结构

一个完整的FFT运算单元应该包括以下几个组成部分:

全局控制单元 包括控制器和地址产生单元,用于调控整个FFT运算系统,生成蝶形运算单元以及其他子单元所需的地址,控制各子单元时序,保证其正常有序地工作;

蝶形运算器单元 由蝶形运算器和旋转因子存储单元(ROM)组成,负责将送入的输入数据进行蝶形运算,是FFT运算器的核心单元;

存储寄存器单元 采用两个RAM乒乓通信,通过通信接口单元接收总线控制信号,负责存储输入数据、中间数据和运算所得最终结果。

系统整体框图如图1所示。

2.2 各功能单元介绍

(1) 控制单元。

控制单元由控制器和地址总线组成。地址产生单元提供各个功能单元所需要的地址,保证数据存储、读写的顺利进行。在此,采用三位二进制编码来定义每个子单元的地址,并将所得的地址汇总,生成地址图表。由于每个单元模块的地址是惟一的,这就确保了在同一时刻、同一存储单元只能对数据进行单向通信,避免数据间的相互干扰,提高了精度。在时钟信号的控制下,控制器发出控制信号,控制整个FFT运算单元FFT运算。此外,系统中还添加一个复位信号RST。在此信号的激励下,FFT运算单元复位,并在下一时钟信号来临时,重新记录输入数据,开始新的64点FFT运算。

(2) 蝶形运算单元。

蝶形运算单元是实现FFT算法最为重要的部分[6]。蝶形运算主要有两种实现方式:传统的蝶形运算通常以输入倒位序,输出自然顺序,输出数据采用同址运算的方式进行存储,以节省存储单元空间,但是由于这种方式每级蝶形运算的计算单元都是变换位序的,从具体操作上难以实现,不便于扩展;另一种运算是采用输入自然顺序,输出倒位序的方式,这种方式中每级运算的计算单元都是固定的,实现上比较容易,只要对不同级的蝶形运算输入不同的旋转因子,即改变相对应旋转因子ROM的地址,就可以实现扩展[7]。

旋转因子ROM能储存固定地址的旋转因子,给蝶形运算提供所需的乘积项。旋转因子ROM在运算系统中实际上就是用于存放sin和cos的值。三角函数在第二、三、四象限的函数值可以通过第一象限的函数值转化得来,所以对于每一级运算所需要的旋转因子都可以从旋转因子表中得到,无需另外添加存储单元。因此,系统只是在ROM单元中存储第一级的旋转因子数据,其他的旋转因子通过转换得到,从而可节省存储单元ROMR的资源[8]。

(3) 存储单元。

FFT存储单元采用两个并行的双口RAM“乒乓操作”的设计方法。“乒乓操作”的原理是在时钟和控制信号的控制下,数据流在两个RAM之间交替读写。按此方式,数据流不会产生延迟,从而提高存储效率[9]。输入数据先存入存储器中,再导入FFT处理器中,处理结束后写回存储器中。同时系统使用D触发器对原始信号进行延迟,每个D触发器延迟一个时钟周期,由4个周期组成,包括3个周期的FFT运算以及之后把运算结果回写给存储器所占用的1个周期。

每个输入数据的长度是32位(实部为16位,虚部为16位),并行输入给存储器单元。在全局控制单元的调控下,从存储单元读取的输入数据经过判别后,进入蝶形运算单元,与旋转因子表中相应位置的旋转因子乘积运算后得出结果,将所得的输出结果经过判别后,写入RAM1中,同时,前一个时钟周期所得的运算结果由RAM2输出[10]。

通常数据格式的表示方法有浮点、定点和块浮点三种。浮点数是用两组固定的bit表示指数和小数,可以表示的动态范围比较大,不会出现数据的溢出问题,但是实现浮点运算的电路却很复杂;定点数是用固定的bit表示整数和小数,表示的动态范围比较小,容易出现数据溢出,但是其运算电路简单,运算速度也快;块浮点数是介于二者之间的数据表示方法。

在此采用定点数,为了保证数据不会溢出,从蝶形运算单元输出的运算结果被2整除,然后送入存储单元保存以备输出。

综合式(2)、式(3)两个部分,可以组合生成蝶形运算单元部分,蝶形运算单元结构内图如图2所示。

3 实验结果验证

这里的FFT运算器通过硬件描述语言VHDL代码进行编写,在ModelSimSE PLUS 6.1f环境下完成系统仿真,波形仿真如图3所示。

由波形仿真图可以看出,地址控制单元以3位二进制编码定义各子单元的地址,存储的数据在时序信号和地址总线单元控制下进行FFT运算。实验证明,当外部时钟频率为40 MHz时,可以对随机生成的64点序列进行FFT定点运算,运算时间为10 μs。

4 结 语

这里的FFT运算器采用定点数处理,当处理浮点数时,系统存在处理异常、数据溢出等问题。但是由于可以迅速处理多点数信号, 因此在数字图像处理、实时通信系统的调试和解调等方面具有一定的实际意义,达到了使用FPGA实现DSP算法的目的。

本文在以下方面有所创新:

(1) 输入的64位数据以8位共8组的方式并行输入,将FFT运算流程分为6级,整个FFT运算过程清晰,结构合理,提高了运行效率。

(2) 使用2块双口RAM作为存储器,采用“乒乓操作”,在一个时钟周期内保证数据传递的单向性,减少了数据传输的冗余,提高了精度。

(3) 将整个FFT运算器进行模块化设计,在控制模块的调配下,各个子模块准确工作,保证了运算的可靠性。

参考文献

[1]程佩青.数字信号处理教程[M].2版.北京:清华大学出版社,2004.

[2]潘明海,刘英哲,于维双.一种基于FPGA实现的FFT结构[J].微计算机信息,2005(2):156-158.

[3]McAllister J,Woods R,Fischaber S,et al.Rapid Implemen-tation and Optimization of DSP Systems on FPGA-CentricHeterogeneous Platform[J].Journal of Systems Architec-ture,2007,53:511-523.

[4]侯卫华,郭晖,刘明峰,等.一款基于MVR-CORDIC的高速64点基-4FFT处理器[J].电子与封装,2008,8(5):22-25.

[5]赵梅,丁晓磊,朱恩.高速64点FFT芯片设计技术[J].电子工程师,2007,33(3):13-17.

[6]Sansaloni T,Perez-Pascual A,Valls J.Area-efficient FPGA-based FFT Processor[J].Electronics Letters,2003,39(19):1 369-1 370.

[7]田丰.邓建国,贾治华,等.FFT算法的一种FPGA实现[J].现代电子技术,2005,28(8):97-99.

[8]刘小明,吴曼青,洪一.基于FPGA的基-16 FFT模块的实现[J].合肥工业大学学报,2006,29(5):536-539.

[9]付宜利,王保国,靳保.基于FPGA的高速实时FFT处理器设计[J].微计算机信息,2007(2):194-195.

FPGA处理器 篇4

关键词:FFT,FPGA,基4算法,硬件实验结果

数字信号处理领域中FFT作为时域和频域转换的基本运算,是数字谱分析的必要前提。因FFT的超级运算能力,使其在雷达处理、观测、跟踪、定时定位处理、高速图像处理、保密无线通讯和数字通信、匹配滤波等领域中得到极为广泛地应用。

近年来由于现场可编程门阵列(Field Programmable Gate Array,FPGA)的飞速发展,他能够进行并行信号处理,容易实现流水线结构,且升级简便,非常适合实现FFT算法[1,2]。一些FPGA厂商,如Altera公司和XILINX公司,都研制了相应的FFT IP核。但这些器件价格十分昂贵,不能得到广泛应用。因此,自主研发基于FPGA芯片的FFT处理器,把FFT实时化的要求和FPGA芯片设计灵活性结合起来,实现并行算法与硬件结构的优化配置,提高 FFT 处理速度,满足现代信号处理的高速度、高可靠性要求,已经成为了当今数字信号处理的一个研究点。本文正是适应这种趋势,采用频率抽取基4算法,设计并实现了一个集成于FPGA内部的FFT处理器。相对于传统的设计方法,应用FPGA作为算法实现的载体,使得FFT处理器除了具有算法实现准确性高和设备的稳定性强等特点外,更有系统集成度高、简单灵活、体积小、易于升级扩展和成本低廉等优点。

1 FFT的基本原理

对一维时域信号进行傅里叶变换,设xn是长为N的复序列,其DFT定义为:

undefined

其中:WnK=e-j2π/N,xn为时域采样序列。

通过式(1)计算N点DFT,需要进行N2次乘法和N(N-1)次加法运算。当N较大时,运算量是很大的,其中还不包括计算Wk所需的运算量,为了减少运算量、提高运算速度、提高运算结果的实时性,。

2 频率抽取基4算法

在本文应用频率抽取基4算法实现FFT处理器。基4按时域抽取(DIT)是在时域x(n)上将n分为4m,4m+1,4m+2,4m+3分解抽取,式(1)可写为:

undefined

其中undefined;k=0,1,2,…,N-1。

令a(m)=x(4m),b(m)=x(4m+1),c(m)=x(4m+2),d(m)=x(4m+3),由于Wundefined=Wundefined,所以式(2)可以得:

undefined

再令undefined,则式(2)化为:

undefined

再令undefined,则式(4)可以写成:

undefined

由式(5)中可以注意到一些便于硬件实现的特点:如可以用分组加A+CW2P,BWP+DW3P,A-CW2P,BWP-DW3P,然后再进行2次相加等特点。

3 FFT的整体结构

在对频率抽样基4的算法进行介绍后,提出本文设计的FFT处理器的整体结构。本设计应用级联结构,每一级都使用1个独立的蝶型运算单元来加以运算。即:第1个蝶型运算单元计算第1列4只蝶型,第2个单元计算第2列。在实现过程中应用Verilog HDL作为系统设计的实体输入方式,设计了1个集成于FPGA芯片内部的使用基4算法1 024点32位(16位实数,16位虚数)的 FFT 计算单元,如图1所示。

从图1中可以看出,该FFT处理器采用5级流水线结构,RAM采用乒乓操作。每组RAM都由地址发生器进行控制,整个运算单元又接收状态发生器的控制。

4 蝶形单元结构

FFT的核心操作是蝶型运算,蝶型运算的速度直接影响着整个FFT处理器的速度,本文的蝶形单元的结构如图2所示。

由图2可以看出,蝶形运算包括复数乘法和加法2个部分,加法实现较为容易,因此只有提高复数乘法的运算速度才能加快蝶形单元的处理速度。鉴于复数乘法硬件实现较困难,计算速度慢。因此本设计采用CORDIC(坐标旋转数字计算机)算法来实现复数的乘法运算。CORDIC算法不但能够将复数乘法转化为硬件易于实现的加减和移位运算,而且根据他的迭代原理,CORDIC单元可以用流水线结构进行表示,可以使向量旋转并行处理,大大地加快了蝶型运算的速度[3]。

4.1 复数乘法单元

复数乘法单元,简称复乘单元,是FFT算法实现过程用来完成复数乘法的单元模块。在本设计中,应用复乘单元计算出基4算法式(5)中的A,BWP,CW2P,DW3P。

如蝶形单元结构图所示,按照基4算法的信号处理流程,由于第一级运算只有一个旋转因子W0,相当于将B,C,D都乘以1,因此第一级运算是不需要复数乘法单元的。

复乘单元CORDIC算法流水线形式如图3所示。

4.2 后续单元的设计

后续单元的主要作用就是将复乘单元的运算输出结果A,BWP,CW2P,DW3P依次输入到数据缓冲器中进行数据同步,然后对应式(5)进行复数加法运算,得出最终结果。由于4个复乘结果A,BWP,CW2P,DW3P是依次从 CORDIC 复乘单元中读出的,所以必须应用数据缓冲器进行数据同步处理,保证4个复乘结果同时输入到复数加法单元。

5 地址和状态发生器

FFT处理器控制部分主要由地址、状态发生器组成。地址发生器主要是产生FFT运算过程中用到ROM、RAM的存取地址;状态发生器是整个 FFT 处理器的控制中心,他主要功能如下:

(1) 使能或禁止FFT处理器工作;

(2) 使能或禁止各级存储模块工作;

(3) 使能或禁止各级地址发生器,数据分配器工作;

(4) 将FFT复位,将各级存储器清零。

在设计好FFT处理器的各个部分后,应用Actel公司开发的新一款的ILGOOe系列FPGA-AGLE600。他除了具有其他同类产品的基本性能外,更突出的特点是其采用FLASH*Freeze技术,加上其具有低静态、动态功耗,使得此款产品具有其他产品无法比拟的超低功耗性能。设计过程中将FFT处理器的各个部分分别设计输入,将整个FFT处理器烧录到AGLE600芯片内,并对FPGA管脚资源进行了配置,最终实现在1片FPGA芯片内部集成了一套FFT处理器系统。

6 硬件试验

由FFT的运算公式可知,方波经过FFT后应为Sa(ω)。图4所示是由FFT处理器对一个数据总长度为512点、脉冲宽度为20点方波进行FFT运算,并求模归一化后的结果。

7 结 语

本文介绍FFT处理器的实现算法,提出一种以FPGA芯片为载体实现FFT处理器的方法,并对处理器的蝶形单元、后续单元和控制单元做了相关介绍。硬件试验的结果表明,设计的FFT处理器的运算结果满足要求,且具有较高的运算速度。

参考文献

[1]李铎,黄益庄.应用FPGA技术实现FFT[J].电子产品世界,2000(8):58-58.

[2]植强.一种基于FPGA的FFT阵列处理器[J].电子对抗技术,2002,7(6):36-39.

[3]Banerjee Ayan,Sundar Dhar,Anindya.FPGA Realization ofa CORDIC-based FFT Processor for Biomedical Signal Pro-cessing[J].Microprocessors and Microsystems,2001,25(3):131-142.

[4]胡广书.数字信号处理理论、算法与实现[M].北京:清华大学出版社,1997.

[5]丁玉美,高西全.数字信号处理[M].2版.西安:西安电子科技大学出版社,2000.

FPGA处理器 篇5

快速傅里叶变换 (FFT) 的提出, 使得离散傅里叶变换 (DFT) 的运算量减少了1~2 个数量级, 为数字信号处理技术的快速发展提供了有利条件[1]。FFT技术在民用通信 (TD-LTE) 、军用通信 (雷达) 、医疗 (故障诊断) 和图像处理等领域有着广泛的应用, 这些领域不仅要求FFT处理器有着高的精度, 更是对它的实时处理性有着更高的需求。

FFT算法的硬件实现一般采用DSP或FPGA来实现[2]。总体上来说, DSP芯片速度较慢, 存储器容量少, 无法满足现有通信系统数据吞吐量的需求。如今, 随着微电子技术领域的不断扩大, 采用FPGA实现数字信号处理的发展也逐渐加快。现有的FPGA芯片无论在体积、速度和灵活性等各项指标上都优于DSP, 因此能设计出高速的FFT处理器。本文就是在现有的FPGA硬件平台上, 设计一个以基8 算法为基础的高速4096 点FFT处理器。

1 基8FFT算法

FFT算法根据基数的不同, 可以分为基2、基4、基8、基16 以及分裂基等算法。分裂基算法一般适用于软件设计[3]。硬件实现中, 一般最常用的算法是基2 和基4 算法[4]。在本文中, 笔者根据系统实时性的要求, 选择了基8 算法作为FFT实现的算法。相对于前两种算法, 由于FFT级数的减少 (4096 点采用基2 算法需要12 级, 采用基4 算法需要6 级, 采用基8 算法只需4 级) , 整个FFT实现需要复乘的数量会有一定程度的降低, 并且内部RAM的访问也会减少[5]。

基8FFT算法的公式如下所示:

2 FFT硬件设计实现

2.1 FFT硬件设计总体架构

4096 点基8FFT处理器实现框图如图一所示。总体控制模块用于产生所有的控制信号, 用来控制RAM地址产生模块、ROM地址产生模块和基8 蝶形运算模块。RAM地址产生模块为输入输出兵乓模块中的内存访问操作提供读写地址。ROM用于存储蝶形运算所需的旋转因子。ROM地址产生模块为每级蝶形运算提供正确的旋转因子。

2.2 RAM地址产生模块

蝶形运算是FFT运算的核心部分。在蝶形运算过程中, 首先需要从内存中读入相应的数据;执行完这一级蝶形运算后, 又需要将输出的数据写入内存。在RAM地址产生模块里, 设置了一个常规计数器和一个级数计数器。常规计数器随着一个时钟频率的到来完成加一的功能, 级数计数器在每一级结束后自加。最后通过这两个计数器的加减操作和移位操作可以生成每一级蝶形运算所需的地址。

2.3 输入兵乓模块

输入兵乓模块流程图如图二所示, 主要完成的功能如下:

(1) 数据的输入采取乒乓操作模式, 即以系统时钟的频率轮流写入RAM1 和RAM2;

(2) RAM1 和RAM2 组合成数据缓冲区RAM, 当RAM1 写满数据后, 即启动后面的蝶形运算单元模块实现基8 蝶形运算;

(3) 在进行基8 蝶形运算的同时, 下一段输入数据写入RAM2 进行缓存;

(4) RAM1 的数据处理完之后, 则读出RAM2的数据进行下一段数据的蝶形运算, 此时会有另一段的输入数据存入RAM1 进行缓存;

(5) 第2 步至第4 步操作循环执行, 直到所有数据处理完毕。

乒乓操作的好处是整个FFT模块可以执行流水线操作[6,7], 不会增加额外的数据处理延迟时间, 但代价是需要更多的存储器空间。

2.4 基8 蝶形运算单元

FPGA内最宝贵的资源莫过于乘法器和内存。而蝶形单元的主要运算就是复数乘法。直接执行一次复数乘法需要4 次实数乘法和2 次实数加法。

在本文中, 我们通过进行下面变换:

执行一次复数乘法即可省下一次实数乘法[8]。这样, 整个FFT处理器可以节省下1/4 的乘法器。

3 MODELSIM仿真与FPGA实现性能

将所写的所有VerilogHDL代码存在一个目录下, 编写顶层模块的激励测试文件, 然后将所有模块的程序包括顶层模块的激励文件都添加到Modelsim软件中的新建工程中进行仿真, 仿真结果如图三所示。

本设计采用Virtex 6 系列芯片XC6VLX130T, 将FFT模块的所有.V文件添加到新工程中, 通过编译顶层模块得到整个FFT模块的最大时钟频率为115.76MHz, 满足TD-LTE系统100Mbps的数据吞吐率需求。

4 结束语

本文对基于FPGA的高速4096 点复数FFT处理器的硬件实现作了详细的介绍。通过在FPGA硬件平台上的运行结果表明, 采用流水线结构, 本文提出的大点数高速FFT处理器取得了令人满意的效果, 并且节省了1/4 的乘法器资源, 对通信领域的实时数字信号处理提供了一定的参考价值。

参考文献

[1]高西全, 丁玉美.数字信号处理[M].西安:西安电子科技大学出版社, 2008.

[2]王林泉.基于FPGA的超高速FFT硬件实现[J].电子科技大学学报, 2005, 34 (02) :152-155.

[3]Zhong K.An ultra high-speed FFT processor[C].International Symposium on Signals, Circuit and Systems, 2003.

[4]高振斌, 陈禾, 韩月秋.可变点流水线FFT处理器的设计与实现[J].北京理工大学学报, 2005, 25 (03) :268-271.

[5]宋玮.基于FPGA的基8-FFT处理器设计[J].科技导报, 2010, 28 (16) :67-70.

[6]赵国亮.基于FPGA的1024点流水线结构FFT[D].西安:西安电子科技大学, 2011.

[7]钟冠文, 卢亚伟.基于FPGA的1024点高性能FFT处理器的设计[J].微计算机信息, 2012, 28 (08) :66-68.

FPGA处理器 篇6

低容量嵌入式系统常建立在可编程硬件上,尤其是微处理器、DSP和FPGA。现在也已经有很多便宜和公开的处理器设计方案,大多数设计方案是被用于数字系统中执行软件部分的附加处理器CPU。实际上,在FPGA里使用的简单的CPU的电路是强制的。FPGA电路其实能被再利用于改变数据,对于这样的控制,一个相对简单伴随着多样的协处理器接口的CPU表现出比系统处理器更好的作用。在FPGA上的浮点处理器需要建立在CPU的结构上,多被描述为CPU里的部分,是附属于CPU的处理器。高精度的浮点处理器依靠流水线,它不被多数标准处理器设计的简单协处理器接口所支持。一个支持标准单精度操作的流水线浮点数据路径能更加有效地对数字系统提供标准浮点的方法。当不标准的操作或数字格式如对数编码加了进来,FPGA能成为高精度浮点处理的可行选择。

我们的浮点处理器包括了有一些不标准函数浮点数据路径设计和对浮点数据的私人储存器及对多种算法的数据路径使用的控制器。一些控制器加上浮点或是其它协子系统可用在中等大小的FPGA。

1 在FPGA上的CPU的设计

控制器CPU不是为浮点处理器设计的,但是能成为对运用的协处理器设计控制和通信的设施。另一个为控制用户计算电路提出对CPU的要求有:

①有优化控制接口和支持优化控制输入和输出的低复杂度设计;

②CPU能允许在小存储空间有用的编程;

③协处理器是流水作业还能服务几个任务或是线程;

④FPGA能支持多,通信CPU和协处理器子系统。

我们的控制器设计是建立在CPU二型的基础上的16位CPU设计。它有两个口作为对本地存储器的接口,它似乎是在哈佛和冯罗伊曼中的更好的选择。其它的存储带宽被各种方法利用。CPU对只应用逻辑提供了精确的协处理接口和协处理指令。CPU子系统和I/0通信通过16位总线实现,它被定义成了CPU构造的一部分,被特殊指令和一个DMA通道支持。图一就说明了被我们的结构支持的一个典型的CPU子系统。

协处理器接口不仅对电路产生了控制码,而且产生了存储控制信号和两位地址。因为一个协处理器的私人存储器被很多CPU数据寄存器作为地址寄存器。图二说明CPU数据寄存器为地址寄存器,为非标准寄存器的体系结构,分开的协处理器存储器比CPU存储器要宽,这个方案直接扩展到S IMD协处理器阵列而有多数据存储,它们被处理成多带宽的单存储器和并行的被处理,CPU还从组织在I/O总线和协处理器存储的转换DMA单元上支持协处理器。

操作指示指令水平标准是由提供独立指示调遣为输入对输出操作,编码和操作数负责应用它的输入进程,存储操作指令并将当前状态,传输为输出进程。因为包含两个水平传输途径操作指令的协处理器需要三个协处理器指令(不是三个周期):

①协处理器运作cop op:给出的操作进入传输途径,可选的操作数负荷;

②协处理器不运作cop nop:没有操作指令,先前的传输途径将给出下一个操作指令;

③协处理器不运作cop nop:随机存储的结果在此,或者引出下一个操作指令。

传输途径的进一步支持是由一些简单的多线程设备设计取得的。通过一个协处理器中执行所有操作的寄存器作为寄存器的存储库,巩固前后转变过程,例如允许一个屮断服务程序利用没有储存和复位状态功能的协处理器。多任务处理是由作为所有的传输途径协处理器来支持的(包括浮点指示协处理器),允许协处理器指令由两根线并行完成。然后第二线的操作能够填充传输途径里那些没有在第一线被用的位置。

标准控制器设计的选择和协处理器接口配置需要更进一步设计和FPGA设计自动控制。CPU加上协处理器系统以及通常的MIMD系统依附在这样一个由用π网络系统水平语言编译器支持的FPGA构架上,这个支撑实际上扩展到由几个FPGA码的水平网络,并且附上了硬性标准水平的处理器,也能够定义在n网络特殊应用程序协处理器电路,让编译器产生FPGA网络列表延伸到前编译CPU子系统网络列表。.

FPGA电路的设计从本质上说是减少定义协处理器遵守没有顾虑到相继控制和通讯的CPU协处理器界面。协处理器像设计模块一样可以再利用,并且允许新近的应用程序系统设定成一个混合现有的协处理器。协处理器也可以被认为是用于类似于在文学作品中计算时间功能的概念部分的重新配置。

2 浮点协处理器设计

单精度(32位)浮点协处理器遵从于CPU的协处理器接口和增加CPU缺少执行全面深入处理器整数和浮点操作。协处理器在由优化控制指令算法完成基本的加和乘运算,也提供一个混合的加乘。它在CPU的比率下全指示运行,完成一个最高50M浮点八进制的吞吐量。通常倒数和平方根运算仅仅由在那样的软件里执行的低精度运算开始,先前所有的函数运算也是这个软件评估多项近似。

协处理器获取更多通过增加执行标准和非标准的FPGA运算来提升有利条件。如两个浮点数x、y的和可以表示成如下:

x+y=z f+e,z由z=x f+y定义

f+表示循环浮点运算增加在其中。误差界限e是一个好比能够用额外的6个浮点数运算确定的浮点数:

e=xy-((xf (z f-u))f+(yf-(yf-u)),其中u=z fa

类似的,两个浮点数的正确乘积可以表示为:

x*y=(x f*y)+h.

其中*表示循环浮点乘积;h表示一个能够得到像17标准运算的浮点数,或者2个关于由一个循环步调提供乘加的处理器运算。这些运算都需要依CPU利用运算的循环误差在运算。

两个误差期限对应于需要的计算,无论在标准处理运算期间使用的循环浮点操作的运算,然后就停止。在我们的设计里,计算和确定它们是与f+和f*的计算同时进行的。标准的乘加运算是由基于这些运算的延伸运算来反补。在误差范围内,浮点计算能原则性的不需减少任何精度继续下去,这个精度在适当的范围内。

通常,传输进程是依照数据流程和组合函数的深度来定义的。由于浮点乘积运算第一步是拆开操作数、计算指数和乘积尾数;第二步是执行标准化,包括非规格化操作数的情况;第三步是处理必需的误差范围额外正常化和调整方指数;第四步是处理标准化以防下溢(见图三)。混合乘加中乘的标识是用点乘计算的,而混合、延伸乘加的执行是靠有效支撑一个更高精度的点乘。

浮点运算法则遵从循环误差的堆积。一个标准的DSP芯片计算在一个固定点乘的全精度里,而浮点仅仅描述循环运算,中间结果是在最后计算结果出现。由双精度处理器计算产生的邻近误差,大约是一个单精度处理器的4倍。一个额外的加法器不是包括在当前的设计屮,故高精度点乘的结果也可以减少为n的周期。

高精度点乘结果是一个实际胜过硬件浮点处理器芯片,但很少应用FPGA的地方,在当今时代,通过执行非标准精度浮点处理比标准处理器能更好的支持FPGA。

3 比较FPGA和DSP

在图一中系统显示,由3s1500填充的FPGA延伸的四浮点协处理器完成50MHz系统时钟频率。每一个协处理器为标准乘加运算递送一个标准乘加运算50MHz的产量和25MHz高精度乘加运算。这个总数累积为标准的200MHz和非标准的100MHz的乘加运算和。我们用图形来比较两个硬件浮点协处理器,作为最多的必须应用软件,它们是相当保守和昂贵的。

一个TI的DSP芯片TMS320C6727也是用300MHz的频率运行,并且提供一个150MHz的双精度频率,这个处理器不需要多线程支持就可以进一步传输。它计算出一个双精度点乘结果,比由四个协处理器累加成的CPU子系统的FPGA的精度还高,并且更加优越。在SIMD的结构中,通过一个附加的加法器,成本和执行过程变得更加相似。这个关系变化明显的偏向于FPGA,如果一个双精度浮点协处理器在FPGA上执行器特有的运算,点乘的计算结果就是原来的四倍(循环结果是双精度的)。

要求标准和非标准运算的应用软件和接口由混合FPGA和DSP组成的系统可以更好的发挥作用。如果用于处理器芯片特殊运算,像整数和浮点DSP芯片作用于一个混合不同的加有FPGA的处理器,是有成本效益的。设计算法选择有效地混合被概括为一种指定的应用。

4 结束语

我们已经概括了浮点处理器执行低成本FPGA的结构。在较大的FPGA芯片上,几个这样的处理器,或是浮点处理器和没有其它的协处理器的CPU子系统,都能被执行。我们的CPU结构对于这样的目的提供必要的支持。通过它的低控制费用和多线程支持提高FPGA的功效。非标准协处理器接口支持线程操作,需要高效益处理推进SIMD进程和多字节的使用。尽管这样,一个基于处理器的FPGA,在性价比上,几乎能和相同特征尺寸的标准浮点进程硬件芯片相媲美。

CPU对FPGA的作用,就好比浮点控制器,消耗FPGA资源浮点的协处理器的多线程安装和对它的网络支持。最近基于这种协处理器的FPGA通过协处理器接口已经被执行为可控制的硬件芯片。理想情况下,我们的CPU或其它以相似能力控制CPU的器件,应该在FPGA上作为硬件的组成部分,从而在通信和时序控制上不占用有限的标准函数可配置资源。

摘要:本文叙述了基于Spartan3型FPGA的流水线浮点处理器的设计。它是运用在设计流水线数据路径的新的控制器,这种设计提供了高水平的API和FPGA编程。控制器在处理器的设计中加上了多线程和网络,还有SIDM处理。FPGA实现高精度浮点运算是基于RUMP算法的有效实现的基础上的,RUMP算法是计算两个向量的点乘,其精度和运用包括不标准素数的单精度操作的双精度处理器。基于FPGA的处理器的性能超过了浮点DSP机。本设计提供了对FPGA的浮点系统的真实估计。

关键词:浮点处理器,高精度浮点运算,FPGA,DSP

参考文献

[1]F.Mayer-Lindenberg.可扩展体系结构的嵌入式系统设计与应用[M],DSD,2006.

[2]V.Beller.第二代浮点型协处理器CPU[M].TUHH,2005.

基于FPGA的数字信号处理系统 篇7

数字信号处理是信息科学中近几十年来发展最为迅速的学科之一。目前,数字信号处理广泛应用于通信、雷达、声呐、语音与图像处理等领域。而数字信号处理算法的硬件实现一般来讲有三种方式:用于通用目的的可编程DSP芯片;用于特定目的的固定功能DSP芯片组和ASIC;可以由用户编程的FPGA芯片。随着微电子技术的发展,采用现场可编程门阵列FPGA进行数字信号处理的技术得到了飞速发展,FPGA正在越来越多地代替ASIC和DSP用作前端数字信号处理的运算。本文将研究基于FPGA的数字信号处理系统的实现方法及其具体实现方案,为其在实际通信系统中的应用打下基础。

2 数字信号处理系统的基本结构

数字信号处理技术的实质就是将模拟信号或我们现实生活中的一些信号转化为数字信号并对转换后的数字信号进行相应的处理。本文所设计的系统将事先获得的8 位128 个字节时域信号数据先由主机通过以太网传输至以太网控制器模块(MAC),然后再传输快速傅里叶变换模块经行8 位128点快速傅里叶变换,再将变换后的频域数据传回以太网控制器,最后发送回主机。系统结构图如图1 所示。

3 基于FPGA的数字信号处理

3.1 以太网模块设计

以太网控制器程序框架如图2 所示。该部分程序由主机接口、数据发送模块、数据接收模块、控制模块、媒体无关接口模块、状态显示模块和寄存器模块构成。

3.2 快速傅里叶变换模块设计

ISE软件中提供的FFT的IP Core有三种结构,分别为:流水线,Streaming I/O结构,允许连续的数据处理;基4、Burst I/O结构,提供数据导入/ 导出阶段和处理阶段。此结构拥有较小的结构,但转换时间较长;基2、Burst I/O结构,使用最少的逻辑资源,同Radix-4 相同,提供两阶段的过程。为了在硬件结构中获得更快的执行速度,本系统选择了流水线Streaming I/O结构来进行连续的数据处理。该结构可以在进行当前帧的N点数据时,加载下一帧的N点数据,同时输出前一帧的N点数据。如图3所示,流水线Streaming I/O结构由多个基2蝶形的处理单元构成,每个单元都有自己的存储单元来存储输入和中间处理的数据。

4 测试结果分析

采用MACTR发包软件进行测试,测试界面如图4 所示。

载入芯片后,整体电路测试波形如图5所示。

MAC在片上测试的数据如图6所示。

FFT模块仿真波形如图7 所示。从图中可以看出,当输入两个正弦信号时,输出为两个脉冲,与理论相符。

FFT模块在芯片上测试的数据如图8 所示。

5 结语

数字信号处理系统有极大的实际应用价值。本文提出的基于FPGA的数字信号处理系统由以太网模块和快速傅里叶变换模块组成,实现了对数字信号的FFT变换处理,并能够与PC机进行通信,系统性能已达到最优。

参考文献

[1]李洪涛,朱晓华,顾陈.Verilog HDL与FPGA开发设计及应用[D].北京:国防工业出版社,2013.

[2]高西全,丁玉美.数学信号处理(第三版)[D].西安:西安电子科技大学出版社,2008.

[3]徐文波,田耘.Xilinx FPGA开发实用教程(第2版)[D].北京:清华大学出版社,2012.

[4]齐恩勇,沈亮.一种小型雷达数字信号处理系统研究[J].航空兵器,1997(5):16-21.

[5]何振亚.数字信号处理的理论及应用[D].北京:人民邮电出版社,1983.

FPGA处理器 篇8

1 视频图像采集系统设计

图像采集部分采用SAA7113, 它的功能是将输入的复合视频信号采样作A/D变换, 通过8位数据总线输出变换结果, 同时输出相应的各种同步信号。

对于该芯片, 重点在于I2C总线控制、输出信号的格式及相关时序问题。SAA7113具有I2C总线控制端口, 通过I2C总线对其内部寄存器进行配置, 从而完全控制SAA7113的运行。

I2C协议中器件的地址是7位, 加上读写位 (写为“0", 读为“1”) 构成一个完整的字节。默认情况下, 即SAA7113的RTS0没有通过一个3.3k欧姆电阻下拉到地时, 其器件地址是0100 101, 末尾加上读“1”和写“0”位后, 器件地址分别为:写地址01001010 (4AH) 和读地址0100 1011 (4BH) 。如果RTS0有下拉电阻到地时, 器件写地址为48H;器件读地址为49H。从地址是器件内部分配的控制字寄存器的地址。SAA7113提供00H-1FH.40H-62H共43个控制字寄存器。

对SAA7113控制字寄存器读操作比写操作复杂。读操作分为两步进行:首先产生一个开始信号, 完成对器件地址和从地址的写操作, 主器件收到应答位之后, 接着需要重新发送一个开始信号和4BH (器件地址+读) 字节, SAA7113收到后发出应答信号, 从地址的控制字单元数据就从SDA线上输出, 开始接收数据;数据传输结束时发送终止信号。这里需要注意的是, 虽然是读操作, 但仍然要先写入从地址的值。写控制字时, 首先产生一个开始信号, 送出4A (器件地址+写) 的指令, 收到一个应答位之后, 送出要进行写操作的从地址, 同样收到应答位后, 输出要写的内容, 再次收到应答, 产生停止信号。整个配置流程图如图1所示:

2 视频信号图像处理系统设计

本设计有两路视频数据的输入, 分别为:左路视频和右路视频。当FPGA进行视频信号处理设计时, 经过FPGA预处理的两路图像数据分别先存储在左FIFO存储器和右FIFO存储器上, 经过视频编码后, 然后按照设定好的时序逻辑把两路视频信号和同步信号发送到SDRAM存储器中。按照时序逻辑再把SDRAM中的图像数据提出来存在输出FIFO存储器中。

总体框图如图2所示:

2.1 FIFO方面设计

由于后续处理是另外一个时钟域, 所以存在两个时钟域之间的握手问题, 通常运用一个异步FIFO来实现两个时钟域的握手。

异步FIFO缓冲来自SAA7113的数字视频数据流, 因此SAA7113需要与FIFO进行接口。除了将SAA71113的数字视频输出总线VPO与FIFO的输入数据总线相连外, SAA7113还要为异步FIFO提供写使能信号wrreq和写时钟信号wclk。SAA7113在每个LLC的上升沿将数字视频数据打入VPO总线, 所以LLC可以作为FIFO的写时钟信号wclk。SAA7113没有输出专门的写使能信号连接到FIFO的写使能输入wrreq, wrreq必须由SAA7113输出的其它信号经过逻辑变换得到。SAA7113可以通过I2C接口配置, 使RST0和RST1输出行消隐信号HREF和场消隐信号VREF, 在HREF和VREF为低电平时SAA7113芯片VPO总线输出的是行消隐或场消隐数据, 不需要接收。这样综合考虑后, 在系统中用VREF和HREF的逻辑与 (wrreq=VREF&HREF) 关系作为异步FIFO的写使能信号wrreq, 按照此办法就可以将有效视频数据写入到异步FIFO中去。

2.2 I2C接口配置模块设计

设计该模块时需要严格按照I2C总线的时序规范进行, 否则接口不能成功。通过I2C总线写数据位可以分为下面几个状态:空闲、等待开始、产生起始信号、置数据位SDA、产生时钟SCL、保持数据位SDA、接收应答和产生停止信号。

整个过程如图3所示:

2.3 时钟频率变换的设计方案

在视频合成的过程中, 视频输入的时钟频率和视频输出的时钟频率是不一样的。本系统采用LFXP6C内部的时钟锁相环实现视频信号帧频100Hz的倍频。因为来自SAA7113的视频信号为50Hz, 时钟频率为27M, 将此时钟送至PLL作为的输入时钟。因为视频输出要求达到100Hz, 可以采用对FPGA编程的方法实现倍频, 生成54M的时钟信号。

2.4 视频解码模块

视频解码模块用来对异步FIFO模块送来的频流进行解码, 识别出行、场参考信号和图像数据, 并且根据系统需要选择采集图像的大小。

采用Verilog语言实现的视频解码模块的module声明:

2.5 SDRAM存储器控制模块的设计

SDRAM存储器控制模块的主要功能有两方面:一是仲裁写SDRAM存储器的写请求信号和读SDRAM存储器的读请求信号, 二是产生SDRAM存储器控制信号。SDRAM控制器完成初始化、读写和刷新操作, 完成视频采集、视频处理模块与SDRAM的接口。

读写时序:我们以场同步信号VS的二分频VS/2为两帧存储器轮换读写的控制信号, 假设编码模块A在信号VS/2为低电平时写入数据、高电平读出数据, 那么编码模块B就应该是在VS/2为高电平时写入数据、低电平时读出数据。如图4所示

2.6 噪声处理模块的设计

本系统采用Verilog硬件描述语言对快速中值滤波算法进行设计。多次调用起到排序目的任务的Verilog源代码为:

3 结束语

本文以FPGA作为图像处理器, 完成图像的接收, 存储, 处理及各种接口的控制。选用SDRAM作为缓冲存储单元, 速度快, 保证了系统的实时性要求。同时由于SDRAM的行列地址复用等特点, 采用FPGA作为核心处理器, 在一片FPGA内设计了SDRAM的读、写切换控制器, 实现了对双路视频信号的采集及处理功能。

参考文献

[1]杜慧敏.基于Verilog的FPGA设计基础.西安:西安电子科技大学出版社, 2000.

[2]刘韬, 楼兴华.FPGA数字电子系统设计与开发实例导航.北京:人民邮电出版社.2005.

[3]刘文耀.光电图像处理.北京:电子工业出版社.2002.

上一篇:绝对不放松下一篇:怎样写英语日记