高速采集程序的设计主要有接口匹配、采集状态机和数据存储三部分。在接口匹配中由于LVDS 的输入与输出都是内匹配的,所以LVDS 间可直接连接。在FPGA 内,需对差分输入时钟缓冲器(IBUFDS)、差分输入的全局时钟缓冲器(IBUFGDS)和差分输出时钟缓冲器(OBUFDS) 例化。
FPGA 的部分代码如下:
component IBUFDS - - 差分输入时钟缓冲器( IBUFDS)
port (O : out STD_ULOGIC;
I : in STD_ULOGIC;
IB : in STD_ULOGIC) ;
end component ;
IBUFDS_INSTANCE_NAME: IBUFDS
port map (O=>user_O,I=> user_I,IB =>user_IB) ;
3.2数据处理模块
Spartan3系列FPGA有丰富的乘法器资源,在不使用任何优化算法的情况下每一个蝶形运算需要4个实数乘法器,因此在FPGA中每个蝶形运算可以用 4个乘法器在一个时钟周期内完成。丰富的RAM资源便于实现数据的流水操作,即对于输入、输出数据以及中间变量可以开辟不同的存储区,例如当计算第i组数据时,第i-1组计算结果正在输出,第i+1组数据正在输入。
由于在FFT运算中必然产生复数,因此为使计算方便,在设计之初就将FFT变换器的数据输入口分为实数和虚数。1024点复数FFT运算,按照基-2频率抽取运算分成10级,每级包括1个双端RAM,1个地址发生器,一个ROM用于存储旋转因子表,1个蝶形运算单元,2个选择缓冲单元。为了简化地址单元电路,将复数数据的实部虚部组合成一个数据存储在RAM中。由于使用双口RAM ,当一个存储单元中的数据读出做运算时,该存储单元就能够存储上一级来的数据,因此这种结构的FFT 可以进行流水线操作,能够对信号样本进行实时连续的运算。选择缓冲器的用途是拉齐数据,将RAM 输出的2个复数数据拆成4个实数数据输入到蝶形运算单元,完成蝶形运算后的数据进入选择缓冲器组合成2个复数数据输出。