DSP+FPGA 实时信号处理系统中FPGA设计的关键问题
本帖最后由 fpgaw 于 2011-5-22 09:44 编辑作者:吕宇 吴嗣亮 来源:微计算机信息
摘要:简要分析了DSP+FPGA系统的特点和优越性,并且结合一个实时信号处理板的开发,提出在此类系统中,FPGA设计的几个关键问题,并且给出了详实的分析和解决方案。
关键词:全局时钟 积分清除 三态
实时信号处理系统要求必须具有处理大数据量的能力,以保证系统的实时性;其次,对系统的体积,功耗,稳定性等也有严格的要求。实时信号处理算法当中涉及到的运算,有的计算方式和控制结构比较复杂,难以用纯硬件实现,但是对速度没有特殊的要求;有的运算结构本身比较简单,但是数据量大,计算速度要求高。因此,实时信号处理系统是对运算速度要求高,运算种类多的综合性信息处理系统。
随着数字信号处理器(DSP)和现场可编程门阵列器件(FPGA)的发展,采用DSP+FPGA的数字硬件系统正显示出它的优越性,越来越受到人们的重视。通用DSP的优点是通过编程可以应用到广泛的产品当中去,且已经能满足算法控制结构复杂,运算速度高,寻址方式灵活和通信性能强大等需求。但是传统DSP的结构本质上是串行的,对于需要处理的数据量大,处理速度高,但是运算结构相对比较简单的底层信号处理算法来说,并没有优势可言,而这恰好是FPGA硬件的强项。采用DSP+FPGA的数字硬件系统正好把两者的优点结合到一起,兼顾了速度和灵活性,既满足了底层信号处理的要求,又满足了高层信号处理的要求。
DSP+FPGA系统最大优点是结构灵活,有较强的通用性,适合模块化设计;同时开发周期较短,系统易于维护和扩展,因此特别适合应用于于实时信号处理系统。
下面用一个中频数字接收机的信号处理板的实例来说明DSP+FPGA实时信号处理系统的若干问题。
一系统组成
该信号处理板主要由两片DSP(包括主处理器和通信信号处理器)和三片FPGA(包括主通道FFT快捕FPGA,主通道FPGA和干涉测角FPGA)组成,FPGA和DSP之间通过32bit的双向数据总线来连接,如图1所示:
图1DSP+FPGA的系统组成框图
二系统设计中存在的问题
1时钟方案
在任何数字电路设计中, 稳定可靠的时钟是非常关键的。
1.1 内部生成时钟的使用
使用内部生成的时钟,可能硬气设计中的功能和时限问题。由组合逻辑产生的时钟会引入毛刺造成功能问题,而引入的延迟则可能会导致时限问题。
如果用组合逻辑的输出作为时钟信号,设计中就可能出现毛刺。同步设计中,寄存器输入数据的毛刺是很正常的,对设计没有什么影响,然而,时钟输入上的毛刺则会导致严重的后果。窄毛刺可能违反了寄存器的最小脉冲带宽要求;如果当毛刺到达时钟输入时,寄存器的输入数据正在变化,那么也无法满足建立和保持时限要求。即使设计满足了时限需求,寄存器输出也可能是意想不到的数值,造成设计的其它部分功能的不正常。
由于本设计当中需要用到很多全局时钟的整数倍分频的时钟,且由于分频的倍数较大,利用FPGA当中自带的DCM模块很难实现这样的功能,因此,本设计当中采用了同步计数器的分频方法,并且,在各个时钟信号输出之前,再加一级寄存器输出,这样的操作就避免了组合逻辑生成的毛刺被阻挡在寄存器的数据输入端口上。
1.2 窄脉冲时钟信号的使用
由于本设计当中使用了积分清除器,而该积分清除器的算法算法原理是:在每一个16M时钟上升沿进行一次累加运算,在每一个1K时钟的上升沿将累加结果锁存输出,并且对累加器清0,进行下一个1K时钟的积分清除运算。
由于要求16M时钟的每一个上升沿都要进行累加运算,以此来保证每一个1K时钟周期内进行16000次运算,因此清0操作又不能影响累加运算的进行。同时,由于1K时钟是由16M时钟分频得来的,1K时钟的上升沿到来时,必然会和16M时钟上升沿产生竞争冒险现象,出现累加运算和清0操作同时进行的现象,因此必须要避免,加上VHDL语言的特点,一个进程当中不能出现两个时钟沿操作,因此,常规的设计不能满足系统的要求。
本设计采用了特殊的窄脉冲时钟信号来解决以上的问题。具体操作如下:将16M时钟倍频为32M,同时利用计数器产生一个周期为1K,脉冲宽度为16M时钟周期一半的脉冲,利用32M时钟的下降沿将此脉冲的上升沿调整为落后于16M时钟上升沿1/4个16M时钟周期,从而达到系统运算的要求,其时序图如下图2所示(Sys_clk为16M时钟,Sync_clk为1K的窄脉冲时钟信号):
图2窄脉冲信号与主时钟的时序关系图
2DSP与FPGA之间的数据交互
在本设计当中,DSP和FPGA的互连采用了总线连接的方式,数据交互是通过一个32位的双向数据总线来完成的,而要实现双向总线,就需要使用FPGA的双向口构造三态总线了,使用三态缓冲器实现高,低电平和高阻三个状态。
本设计当中由于使用了三片FPGA与一片DSP,它们之间的数据交互,就必然涉及到如何分配总线的问题。如果总线的分配不恰当,就会导致数据的传输不能达到功能的要求,严重的情况会使总线阻塞,系统失灵,所以在DSP+FPGA系统中,数据交互的问题是需要特别注意的。
本设计当中,DSP利用1K时钟作为中断信号,在1K时钟上升沿到来时,根据系统要求,将不同的控制命令字写入数据总线,然后通过数据总线从不同的FPGA读入所需的数据,这一切都通过DSP在地址线上给出相应不同的地址来完成。为了合理分配总线的使用,设计当中使用了这样的策略:利用片选信号CE,读信号ARE和写信号AWE作为三态缓冲器的控制信号,当CE和AWE有效时(DSP往外写数据),每一片FPGA根据地址线上的变化,将数据总线上的数据读入自身相应的寄存器当中去,由于三片FPGA的寄存器分配了不同的地址,这样就完成了DSP的写操作而不会有冲突;而当CE和ARE有效时(DSP往里读数据),每一片FPGA判断地址线上的变化,如果是分配给自己的地址,则将相应寄存器的结果输入到数据总线上,否则将总线置为高阻态,等待其它的FPGA输入数据到总线,这样就避免了可能产生的总线阻塞现象,使DSP和FPGA之间的数据交互能够顺利的进行。其示意图如下图3所示:
图3双向数据总线的三态门设计
三结束语
DSP+FPGA是目前实时信号处理系统中运用得最广泛的系统组成形式,对速度以及灵活性的要求都能够很好的满足,文中所涉及到的时钟以及数据交换方面的问题都是这样的系统当中存在的关键性问题,文中提出的一些解决方案是作者通过亲身实践总结出来的,具有一定的参考价值。
参考文献
1 曾凡泰,陈美金,VHDL程序设计,北京:人民邮电出版社,2000
2 候伯亨,顾新,VHDL硬件描述语言与数字逻辑电路设计,西安:西安电子科技大学出版社,1999
3 李广军,孟宪元,可编程ASIC设计及应用,电子科技大学出版社,2000 6
页:
[1]