关键字 |
DSP, FFT, FPGA, Fixed_Pkg, base -2算法,STD_LOGIC_1164,合成,VHDL, Virtex-5。 |
介绍 |
本文针对FPGA[6]提出了DSP设计中存在的综合问题及解决方法。在VHDL上设计的DSP算法并不保证可以被FPGA合成。这些HDL设计可能在HDL模拟器和编译器上正确地编译和模拟,但仍然不确定它们是否完全可以合成到FPGA[5]。有几个问题限制了这些代码合成[7]。FPGA供应商提供他们的软件工具来合成HDL代码。为了综合HDL设计,所使用的库和包必须得到这些工具[8]的支持。用于DSP算法HDL设计的数据类型也是设计综合[3]的一个重要因素。本文在Virtex- 5 FPGA上合成了基于基2的32点快速傅里叶变换算法[4]。用于合成的FFT的VHDL设计主要通过以下两种方式开发: |
1)使用IEEE定点包' fixed_pkg '[2]。 |
2)使用IEEE包,' STD_LOGIC_1164 '[5]。 |
DSP算法的数据类型多为带符号实型[3]。VHDL提供了各种定点和浮点数据类型来表示真实类型数据[1]。由于浮点数据类型合成到FPGA的效率不高,所以采用定点数据类型。为实现仅使用IEEE包STD_LOGIC_1164的DSP算法,提出了一种用比特数组表示真实数据类型的方法。所有实数运算,如乘法、加法和减法,都是由专门的算法实现的。这些算法操作bit_vector来实现真正的算法。 |
RADIX-2算法 |
它是最简单的快速傅里叶变换算法之一,其中蝴蝶结构复制得到高阶FFT。 |
在复制蝴蝶结构中,我们根据蝴蝶的位置改变加权系数“w”的值。基数-2算法可采用时域抽取或频域抽取两种方式实现。在时间抽取算法中,我们对输入进行洗牌,而在频率抽取算法中,我们对输出进行洗牌。本文采用实时抽取算法实现32点FFT。 |
基于ieee定点包' fixed_pkg '的FFT设计仿真 |
IEEE认可的定点包;' fixed_pkg '在VHDL-2008[1]。该软件包具有强大的运算符和功能,特别适合DSP算法的设计。使用该包首先在VHDL上设计32点FFT,基数-2算法,然后在ModelSim PE Student Edition 10.2a上编译和模拟HDL设计。 |
A.蝴蝶结构模拟 |
其中(ar, ai)和(br, bi)是两个不动点实输入,(yr0, yi0)和(yr1, yi1)是Butterfly结构的输出。(wr, wi)为蝶形结构的加权系数。Butterfly组件仿真结果如下图所示。 |
B. 32点FFT仿真 |
在此32点FFT设计中,采用了上述模拟蝴蝶作为组件。Butterfly组件分五个阶段使用,每个阶段使用16个Butterfly实例。这里xr和xi是输入x的实部和虚部。同理,yr, yi和wr, wi分别是y和w的实部和虚部。有32个复杂输入,32个复杂输出和17个不同的加权系数。32点FFT的仿真结果如下图所示。 |
C.综合本设计的问题 |
定点包fixed_pkg由IEEE引入VHDL-2008。据说使用这个包的设计将是可合成的。这个包中使用的所有数据结构都是定点的。 |
该软件包包含功能强大的运算符和函数,在DSP算法的设计中具有很高的效率。但是,这个包仍然不是绝对的合成器,因为合成器工具不完全支持它。 |
FFT的实现使用ieee包,' std_logic_1164 '单独 |
为了使用IEEE包实现DSP算法,' STD_LOGIC_1164 '单独,需要一个数据类型,可以实现实数和复数。它的实际数据类型是浮点数,因此不能被合成。为此,提出了一种用“bit_vector”表示实数和复数的方法。 |
A.用' bit_vector '表示实数和复数 |
“A”是一个长度为“L”的比特数组,其中M位表示部分,N位表示整部分。A = b (n - 1)……b2b1b0 b1.....b(M-1)bM根据实数的精度和范围选择N和M。这里重要的一点是,软件和FPGA将把这个比特“A”数组简单地视为长度为“M+N”的位向量。 |
B.对该数据结构进行算术运算的算法 |
开发了专门的算法,这些算法将对上述定义的数据结构进行操作,并以这样一种方式操作比特数组,以实现复数和实数的功能。对于32点FFT计算,使用加法、减法和乘法算法。乘数算法将在下面介绍。 |
C.乘法器算法 |
该乘法器是为FFT设计中的乘法运算而设计的。它以两个位向量作为输入,并给出一个位向量作为输出,其长度等于乘数。 |
D.使用ieee包“std_logic_1164”实现FFT的合成与仿真 |
这些结果在Modelsim PE Student Edition 10.2a上编译和模拟,并在Xilinx ISE 10.1设计套件上合成。仿真设计采用Xilinx Virtex-5 FPGA。 |
1.蝶形结构仿真 |
模拟结果如下图所示。如图1所示,它有两个复输入,两个复输出和一个复加权系数。每个输入和输出的长度为23位,系数的长度为12位。最低有效位是分数位。 |
2.蝶形结构的合成结果 |
采用Xilinx ISE 10.1设计套件对Butterfly的HDL进行了综合设计。蝴蝶结构的RTL视图如下图所示。这个RTL结构是在使用Xilinx设计套件综合设计后自动生成的。其次是基于Virtex-5 FPGA的Butterfly的综合设计总结。 |
3.时间总结 |
设计的FFT-32在FPGA上的最大组合路径时延为95.814ns。 |
4.32点FFT的仿真 |
在32点FFT设计中,采用了上述Butterfly设计作为组件。本设计共使用了80个Butterfly实例。 |
5.32点FFT的合成 |
采用Xilinx ISE 10.1设计套件综合了32-FFT块的设计方案。综合设计后得到的RTL块如下图所示。 |
从上面合成的内部RTL体系结构可以清楚地看出,整个体系结构分为五个阶段,每个阶段包含16个Butterfly实例,因此在上面所示的RTL体系结构中总共可以看到80个Butterfly实例。 |
其次是基于Virtex-5 FPGA的32点FFT的综合设计总结,展示了Xilinx设计套件所使用的Virtex-5 FPGA的特点。最大组合路径延迟:466.732ns。 |
结果与matlab 7.11.0.584的比较 |
利用STD_logic_1164包对32点FFT进行综合设计的仿真结果与Matlab进行比较,计算各输出的误差百分比。对比表如下所示。 |
结论 |
32点FFT的HDL设计采用IEEE定点包' fixed_pkg '实现。此设计在Modelsim上正常工作,但不可合成。设计了一种新的数据结构,即位向量,它满足了所有复杂的、真实的数据结构需求。这个数据结构完全由IEEE包STD_logic_1164定义。为了利用这种数据结构实现DSP算法,设计了一些专门的算法。32点FFT再次用这种数据结构实现,该设计是完全可综合的。将可综合32点FFT设计的仿真结果与Matlab仿真结果进行比较,平均误差为0.1%。这表明该方法设计和实现DSP算法的效率很高,可完全综合。 |
表格一览 |
|
|
数字一览 |
|
|
|
|
|
图1 |
图2 |
图3 |
图4 |
图5 |
|
|
|
|
|
图6 |
图7 |
图8 |
图9 |
图10 |
|
|
参考文献 |
- - IEEE标准VHDL语言参考手册,DOI: 10.1109/ ieeestd . 2009.4772740,2009。
- David Bishop,定点包用户指南。URL: www.vhdl.org/fphdl/Fixed_ug.pdf。
- Uwe Meyer-Base,现场可编程门阵列的数字信号处理3E, 2007
- John G. Proakis,数字信号处理:原理、算法和应用,4E, 2007。
- Charles H. Roth,使用VHDL的数字系统设计,1998。
- Douglas J. Smith:使用VHDL或Verilog设计、合成和模拟asic和fpga的实用指南,1996。
- Xilinx综合论坛,UTL: http://forums.xilinx.com/t5/Synthesis/compilation-of-ieee-proposed-library- fails-ISE-13-2/td-p/200101。
- Xilinx ISE设计套件软件手册。
|