



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于Nios的FFT算法软硬件协同设计 基于Nios的FFT算法软硬件协同设计 类别:单片机/DSP 摘要:在深入研究Nios自定制指令的软硬件接口的基础上,利用MatlabDSP Builder建立快速傅里叶变换FFT核心运算指令基本模型,然后用Altera公司提供的Singacompiler工具对其进行编译,产生 Quartus能够识别的VHDL源程序,并将此程序在Nios中自定制成
2、相关的FFT运算指令。利用自定制的FFT运算指令,在Nios中利用C语言 编写基于Nios的FFT算法程序,实现了FFT运算的软硬件协同设计。经测试表明,将FFT算法加入到Nios嵌入式处理器指令集中,可以帮助系统完成 复杂的数据处理任务,增强Nios系统的实时处理能力。该设计方法打破了软硬件间的屏障,大大加快了系统的功能验证。 在自动控制领域,往往要对被控对象进行状态检测,从而作出下一步的处理,达到控制的目的,因此自动控制系统离不开对被控系统的状态进行监测,以便对其进行 处理,例如滚动轴承故障、电动机故障等均可以利用频谱分析法对其进行状态监测和故障诊断。要检测被控对象的状态,就离不开数字信号
3、处理,因此,数字信号处 理应用广泛。并且FFT(快速傅里叶变换)促进了数字信号处理的发展,它可应用傅里叶变换理论所能涉及的任何领域。对于FFT工程的实现方法有软件法和硬 件法,即通过软件程序完成FFT运算,这种方法可适用于各种数字信号处理的应用场合,很灵活,但缺点是不能进行实时处理。而使用专用硬件完成数字信号处理 的方法能够实现实时处理,但外围电路相对复杂,不易扩展,灵活性差,且价格昂贵。因此人们一方面寻求结构简单、运算速度快,存储量小的FFI实现方法,另 一方面采用先进的VLSI技术改进实现FFT的硬件结构,将算法硬件化。 Nios嵌入式处理器是FPGA生产厂商Althera推出的软核CPU
4、,它是一种面向用户的、可灵活定制的通用RISC嵌入式CPU。用户可以在 Nios指令系统中增加用户自定义指令,以增强对强实时软件算法的处理能力,可以把一个复杂的标准指令序列简化为一条用硬件实现的单个指令。特别是在需要 使用大量FFT算法的场合,可以根据用户的需要,定制专门的FFT处理器硬件和定制一些诸如复数乘法或复数加法等传统运算指令,使Nios系统不但具有常 规数字信号处理器功能,而且具有软件实现FFT运算处理的特点。 1 FFT算法原理 11 按时间抽取的基-2 FFT算法 设序列x(n)长度为N,且满足N=2M,M为正整数。按n的奇偶把x(n)分解为2个N2点的子序列: 则可将DFT化为
5、: 式中,X1(k)与X2(k)分别是x1(r)及x2(r)的N/2点DFT。 由此可以看到,一个N点DFT已分解成2个N2点的DFT。这2个N2点的DFT再按照式(4)组合成1个N点DFT。这里应该看到 X1(k),X2(k)只有N2个点,即k=O,1,(N2)-1。而X(k)却有N个点,即k=0,1,N-1,故用式(4)计算得到的只 是X(k)的前一半的结果,要用X1(k),X2(k)来表达全部的X(k)值,还必须应用系数的周期性,这样可得到: 说明后半部分k值(N2kN-1)所对应的X1(k),X2(k)分别等于前半部分k值(Ok(N2)-1)所对应的X1(k),X2(k)。这样,就可将
6、X(k)表达为前后两部分: 其运算关系可以利用蝶形运算流程图来形象地描述,图l为按时间抽取法的蝶形运算流程图符号。 图1 时间抽取法的蝶形运算流程图 12 按频率抽取的基-2FFT算法 仍设序列点数为N=2M,M为正整数。在把输出X(k)按k的奇偶分组之前,先把输入序列按前、后各一半(不是按偶奇)分开,把N点DFT写成2部分,则可将DFT化为: 图2为按频率抽取法的蝶形运算流程图符号,这样,就把1个N点DFT按k的奇偶分解为2个N2点的DFT了。 图2 频率抽取法的蝶形运算流程图 由以上分析可知,FFT算法中最核心的是蝶形运算单元。而一个蝶形运算单元主要由一次复数乘法,两次复数加法构成。为此整
7、个FFT算法中,复数乘法和复数加法是最为核心的运算单元。 2 FFT算法软硬件协同设计 软硬件协同设计指对系统中的软硬件部分使用统一的描述和工具进行集成开发,完成全系统的设计验证并跨越软硬件界面进行系统优化。其基本的设计流程是先用 VHDL语言和C语言进行系统描述并进行模拟仿真和系统功能验证;然后对软硬件实现进行功能划分,分别用语言进行设计并将其综合起来进行功能验证和性能预 测等仿真确认(协调模拟仿真);其次进行软件和硬件详细设计;最后进行系统测试。 根据上面的分析可知,FFT算法中最核心的是蝶形运算单元,而复数乘法和复数加法又是蝶形运算单元的核心,因此可以采取Nios的自定义指令功能,定制一
8、条复数乘法指令和一条复数加法指令,以便完成一次蝶形运算。 21 建立Nios嵌入式处理器系统 首先,利用Quartus建立项目工程,选用的目标器件为CycloneEP2C5Q:再用SOPCBuider创建Nios组件 模型,生成硬件描述文件,锁定引脚后进行综合与适配,生成Nios硬件系统下载文件;然后建立Nios嵌入式系统,从SOPC Builder组件栏中加入所需的组件(如NiosCPU核、定时器Timer、JTAG_UART、Avalon三态总线桥、键输入IO口和 Flash等)。另外,为了实现Nios处理器对EPCS Flash存储器的读写访问,还要加入EPCS Serial Flash
9、Controller组件。通过此控制器将用于FPGA配置的SOF文件和CPU运行的软件一并存于EPCS器件中,以便大大简化硬件系统组成 结构。为了保证所有组件的地址安排是合法的,要对各组件地址实行自动分配;最后进行全程编译(即分析、综合、适配和输出文件装配),完成Nios硬件系 统的设计。 22 利用DSP Builder生成复数乘法模块 使用DSP Builder在FPGA上进行DSP模块的设计,可实现高速DSP处理。但是,在实际应用中,除了要求DSP高速外,由于DSP处理的算法往往比较复 杂,如果单纯使用DSPBuilder来实现纯硬件的DSP模块,会耗费过多的硬件资源,因此有时也无法完成
10、许多算法复杂的模型。而Nios则是一个建 立在FPGA上的嵌入式微处理器软核,它有一个重要的特性是具有自定制指令。在DSP算法中会反复出现一些运算(如复数乘法器、整数乘法器、浮点乘法器 等),而在通用的CPU中都没有专门用于复数乘法计算和浮点乘法计算的相关指令。在系统设计中,利用MA-TLAB、DSP Builder或者VHDL设计并生成复数乘法器、整数乘法器、浮点乘法器等硬件模块。在Quartus环境中对上述文件做一些修正后,在SOPC Builder窗口中将它们定制为相应的指令,并可设定或修改执行该指令的时钟周期。在进行DSP算法运算时,可通过汇编或C语言,甚至C+语言来运用 这些自定义指
11、令进行嵌入式程序设计。 根据复数运算,设2个复数为a+bj和c+dj,则乘法表述为: 在MATLABSimulink下建立如图3所示的复数乘法模型,图中的Dataal、Databl和Resultl是DSP Builder中SOPCLibrary中Custom Ins-truction中的模块,分别对应Nios内部ALU的2个输入信号dataa和datab,以及ALU的输出信号result。 Datareal、DataImag、DatbReal、Da-thlmag是一个总线位转换模块;BusConeatenation是总线复合模块。 Dataa toComplex和Datab to Comple
12、x是一个实数转复数的模块,Com-plex Product是复数乘法模块,Real Result是复数解出实部和虚部的模块。 图3 复数乘法模型 该模型完成了1个16位的复数乘法。在这个设计中,利用Nios32的32位数据位宽,把32位分成2部分,分别放入复数的实部和虚部,实部、虚部的位宽 都是16位,正好构成1个32位数,两个16位复数进行运算后,把结果设为16位复数,也用32位表示。设此模型的文件名为co-mplexmdl。并 点击Signalcompiler,对complexmdl进行转换,在转换窗口中分别作如下选择:器件选择Cyclone;综合器选择Quart- us;“SOPC In
13、fo”的generate SOPC Builder PTF File项要选择打勾。分别单击转换按钮1-Convert和综合按钮2-Synthesis即可将其转换成标准的VHDL语言。 23 在Nios中加入复数乘法指令 在已建立的SOPC设计中,双击CPU项,点击“Import”按纽,点击“ADD"按纽,打开Complex_eivhd,再点击 “Readport-list from files"按纽,点击“ADD to System”按纽,加入该设计作为指令执行模块。最后再将整个项目重新编译一次,锁定引脚后,再下载到目标器件中。为此即在Nios指令中定制了一条名 为COMP
14、的复数乘法指令,在进行C语言编程时,其调用格式为z=nm_comp(x,y),其中x和y为两个复数,其运算结果放在z中。用同样的方法, 可以建立复数加法指令和复数减法指令。由此可见,利用DSP Builder很容易地实现了FFT算法中的复数运算指令的定制。同时在定制指令时,对于浮点数的处理,采用统一为几位二进制有效数字的办法来解决的,比 如说:小数位数固定为4位,整数位数固定为6位,那么可以定义一个向量signal num:std_logic_vector(9down to 0);在做运算的时候,注意高6位是整数、低4位是小数,就可以达到实型数据的处理。 24 FFT算法软件设计 在Nios硬
15、件系统设计完成后,将配置文件下载到指定的FPGA中,通过SOPC Builder软件窗口,可进入NiosIDE软件开发环境进行软件设计。 通过SOPC Buider软件窗口,启动NiosIDE,然后新建工程,在新建工程的过程中,选择刚才产生的CPU,新工程产生后,在工程添加文件,在文件中写入程 序代码。在软件编程时设计者可以使用多种方式使用自定制指令,为了简化软件开发者使用自定义指令的编程,在生成的SDK中的.h文件中已经包含了自定义指 令的宏定义,可以直接用在C中。下面以基2,8点FFT为例加以说明。在定制了两条复数运算指令后,可以使用C语言编程实现FFT算法。由于有基本的复数 运算指令和复数加法指令,为此采用C语言编写程序,其算法变得相当简单,FFT核心算法如下: 25 系统测试 采用Altera公司的Cyclone 系列芯片EP2C5Q208C8。用Altera提供的Nios SDK,将编译后的可执行代码,通过计算机串口下载到FPGA上的Nios系统内存中去并运行,将输出结果与Matlab仿真结果进行了比较。比较结果如 表1所示,其中参考值是用MATLAB按FFT计算得到的结果,测试值是在Nios中利用C语言编写的FFT程序计算的结果,表中某些数据误差较大,是因 为本系统采用定点数据精度不够,只要增加定点数据的位数就可提高运算的精度。 3 结束语 N
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中海龙湾国际营销策划报告24P
- 思科无线解决方案及成功案例
- 2025年对苯二胺项目建议书
- 跨境电商平台摊位产权分割与跨境电商合作合同
- 新西兰留学签证及住宿安排服务协议
- 广播电视音乐作品版权使用及收益分成协议
- 家庭环保绿化工程责任保证协议
- 子女教育交接及家庭教育资源整合协议
- 游艇码头泊位租赁及船舶交易与维修服务合同
- 虚拟主播电商直播内容创作与版权合作合同
- 销售人员试用期考核表
- 第二单元 水循环-2023-2024学年度五年级科学上册期中专项复习(青岛版)
- 非遗扎染创新创业计划书
- 超星尔雅学习通《先秦诸子导读(浙江大学)》2025章节测试附答案
- 江苏社工考试试题及答案
- 2025年劳务合同模板电子版简短一点
- 二级建造师继续教育题库(带答案)
- 市场监管投诉举报培训
- 《新能源乘用车二手车鉴定评估技术规范 第1部分:纯电动》
- 课题申报参考:西藏地方与祖国关系史融入当地高校“中华民族共同体概论”课教学研究
- 【MOOC】《C++程序设计基础》(华中科技大学)章节作业中国大学慕课答案
评论
0/150
提交评论