所有提交的EM系统将被重定向到网上投稿系统.作者被要求将文章直接提交给网上投稿系统各自的日志。

DSP器件设计中的综合问题分析

阿卡什Verma1, b·s·雷2
  1. M.Tech。(追求),电子工程系,MMMEC,戈勒克布尔,印度1
  2. 印度戈勒克布尔MMMEC电子工程系系主任2
有关文章载于Pubmed谷歌学者

更多相关文章请访问国际电气、电子和仪器工程高级研究杂志

摘要

本文讨论了将DSP器件的设计集成到FPGA中的相关问题。用于合成输入的高级代码在VHDL中。设计背后的核心问题是是否可合成,使用的HDL库和数据类型。所有的问题和解决方案,说明了使用32点快速傅里叶变换。首先使用IEEE定点包(fixed_pkg)设计FFT-32,然后使用一个IEEE包(STD_LOGIC_1164)设计整个逻辑,该包完全可以被FPGA合成。对于使用' STD_LOGIC_1164 '实现DSP算法,'实类型'数据结构由比特数组表示,即' bit_vector '。利用位元阵列开发了实型加、减、乘算法,实现了复数和实数运算功能。通过该设计方法实现的DSP算法综合能力强,实现精度高

关键字

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

数字一览

图1 图2 图3 图4 图5
图1 图2 图3 图4 图5
图6 图7 图8 图9 图10
图6 图7 图8 图9 图10

参考文献









全球科技峰会