结合Altera公司推出的Nios II嵌入式软核处理器,提出一种具有常规DSP处理器功能的NiosII系统SOPC解决方案;利用NiosII可自定叉指令的特点。
通过Matlab和DSP Builder或直接用VHDL设计并生成复数乘法器、整数乘法器和浮点乘法器等硬件模块,将它们定制为相应的指令,从而将软件的灵活性和硬件的高速性结合起来,较好地解决了传统DSP处理器所面临的速度问题、硬件结构不可重构性问题、开发升级周期长和不可移植性等问题。
随着微电子技术和计算机工具软件的发展,可编程片上系统SOPC的设计理念和设计方法成为了一种趋势。为了解决传统DSP处理器所面临的速度问题、硬件结构不可重构性问题、开发升级周期长和不可移植性等问题,我们应用Altera公司推出的Nios II嵌入式软核处理器,提出了一种具有常规DSP处理器功能的Nios II系统SOPC解决方案。
由于可编辑的Nios II核含有许多可配置的接口模块核,因此用户可根据设计要求,利用Quar-tusII和SOPC Builder对NiosII及其外围系统进行构建。而且用户可通过Matlab和DSP Builder,或直接用VHDL等硬件描述语言设计,为Nios II嵌入式处理器设计各类硬件模块,并以指令的形式加入Nios II的指令系统,从而成为Nios II系统的一个接口设备,与整个片内嵌入式系统融为一体,而不是直接下载到FPGA中生成庞大的硬件系统。正是Nios II所具有的这些重要特点,使得可重构单片DSP处理器功能系统的设计成为可能。
1 系统结构
本系统为单片DSP可重构系统,能实现数字信号处理方面各种功能。其中,Nios II软核处理器的建立,主要起人机交互和控制作用。FPGA的逻辑模块从Nios II处理器接收控制信号和数据后,实现相应的硬件功能。系统结构框图如图l所示。除了软核处理器Nios II外,存储器和I/O接口以及FIR数字滤波器、IIR数字滤波器和DDS等应用模块均可作为外设嵌入在FPGA中。这样,整个DSP的数字信号处理部分全部集成在FPGA器件中,各模块均受Nios II处理器的控制。Nios II处理器系统中有Avalon总线,它规定了控制器与从属模块间的端口连接以及模块阃通信的时序。数字频率合成器DDS通过Avalon总线与Nios II处理器相连,能很方便地完成控制及数据传送。
本系统的FPGA采用Cyclone EPICl2,它有12 060个逻辑单元(LE)和2个锁相环(PLLs),提供6个输出和层次时钟结构以及复杂设计的时钟管理电路。选用超高速10位D/A转换器565l实现D/A转换功能,转换速率最高为150 MHz。整个系统在Nios II处理器的控制下,可实现FIR数字滤波、IIR数字滤波、快速傅里叶变换(FFT)算法、编/解码、DDS功能模块设计,以及由它构成的数控频率调制、正交载波调制解调、数控相位调制等功能的信号发生器。
系统中各功能模块的选择,以及输出信号调制方式和频率的选择,均可通过外接的按键自由选择。下面构建一个具有常规DSP处理器功能的Nios II系统。
2 Nios II嵌入式系统设计流程
NiosII嵌入式处理器是Altera公司推出的一种专门为单芯片可编程系统(SOPC)设计而优化的CPU软核,是一种面向用
户、可以灵活定村的通用RISC(精简指令集)嵌入式CPU。它采用Avalon总线结构通信接口,带有增强的内存、调试和软件功能,可采用汇编或C、C++等语言进行程序优化开发;具有32位指令集、32位数据通道和可配置的指令及数据缓冲。与普通嵌入式CPU系统的特性不同,其外设可以灵活选择或增删,可以自定制用户逻辑为外设,可以允许用户定制自己的指令集。由硬件模块构成的自定制指令可通过硬件算法操作来完成复杂的软件处理任务,也能访问存储器或Nios II系统外的接口逻辑。设计者可以使用Nios II加上外部的Flash、SRAM等,在FPGA上构建一个嵌入式处理器系统。
完整的基于Nios II的SOPC系统是一个软硬件复合的系统,因此在设计时可分为硬件和软件两部分。Nios II的硬件设计是为了定制合适的CPU和外设,在SOPCBuider和Quartus II中完成。在这里,可以灵活定制NiosII CPU的许多特性甚至指令;可以使用Altera公司提供的大量IP核来加快开发Ntos II外设的速度,提高外设性能;也可使用第三方的IP核,或VHDL自己来定制外设。完成Nios II的硬件开发后,SOPC Buider可自动生成与自定义的Nios II CPU和外设系统、存储器、外设地址映射等相对应的软件开发包SDK;在生成的SDK基础上,进入软件开发流程。可使用汇编或C语言,甚至C++语言来进行嵌入式程序设计,使用GNU工具或其他第三方工具进行程序的编译、链接及调试。
3 系统硬件设计
系统的硬件系统包括3个部分:FPGA部分、存储器部分和外围元器件部分。FPGA部分是建立在FPGA内的,在SOPC Buider中需要设计的就是该部分。其中包含1个NiosII CPU核,1个内部时钟,1个Avalon总线控制器,连接Nios II核的下载和调试程序的JTAG_UART通信模块,DDS接口模块及DDS模块,FIR、IIR数字滤波器接口模块及功能模块,编解码模块及接口模块,以及Flash存储器模块等。其设计与一般的嵌入式开发不同,可在Nios II核外(但还在同一个FPGA芯片内)加入相应的外设模块核,并通过在片上的Avalon总线与Nios II相连。为使具有DSP处理器功能的Nios II系统正常工作,在FPGA外围接有一些控制键,以调度各模块的应用。
3.1 建立Nios II嵌入式处理器系统
首先,利用Quartus II建立项目工程,选用的目标器件为Cyclone EPIC12;
再用SOPC Bider创建Nios II组件模型,生成硬件描述文件,锁定引脚后进行综合与适配,生成Nios II硬件系统下载文件;然后建立Nios II嵌入式系统,从SOPC Buider组件栏中加入所需的组件(如Nios IICPU核、定时器Timer、JTAG_UART、Avalon三态总线桥、键输入I/O口和Flash等)。另外,为了实现NiosII处理器对EPCS Flash存储器的读写访问,还要加入一个EPCS Serial F1ash Controller组件。通过此控制器将用于FPGA配置的SOF文件和CPU运行的软件一并存于EPCS器件中,以便大大简化硬件系统组成结构。为了保证所有组件的地址安排是合法的,要对各组件地址实行自动分配;最后进行全程编译(即分析、综合、适配和输出文件装配),完成Nios II硬件系统的设计。
在Nios II硬件系统设计完成后。将配置文件下载到指定的FPGA中。通过SOPC Buider软件窗口,可进入Nios II IDE软件开发环境进行软件设计。
3.2 DSP处理器功能系统的建立
使用DSP Buider在FPGA上进行DSP模块的设计,可实现高速DSP处理。但是,在实际应用中,除了要求DSP高速外,由于DSP处理的算法往往比较复杂,如果单纯使用DSP Bider来实现纯硬件的DSP模块,会耗费过多的硬件资源,因此有时也无法完成许多算法复杂的模型。而Nios II则是一个建立在FPGA上的嵌入式微处理器软核,它有一个重要的特性是具有自定制指令。
在DSP算法中会反复出现一些运算(如复数乘法器、整数乘法器、浮点乘法器等),而在通用的CPU中都没有专门用于复数乘法计算和浮点乘法计算的相关指令。在系统设计中,利用MATLAB、DSP Buider或者VHDL设计并生成复数乘法器、整数乘法器、浮点乘法器等硬件模块。在Quartus II环境中对上述文件做一些修正后,在SOPC Buider窗口中将它们定制为相应的指令,并可设定或修改执行该指令的时钟周期。在进行DSP算法运算时,可通过汇编或C语言,甚至C++语言来运用这些自定义指令进行嵌入式程序设计。
根据复数运算的算法,假设有2个复数为a+bj和c+dj,则乘法表述为:
图2是用MATLAB、DSP Buider设计的复数乘法器模型。它实现了一个16位的复数乘法,虚部和实部都是16位,可以用一个32位的值表示该复数。在设计中,NiosII为32位数据,正好可以放置2个复数。
要将这个复数乘法器硬件模块设置成相应的指令,还须进行以下操作:
①单击图标SignalCompiler对其进行转换,选择器件(用Cyclone)和Quartus II综合器.转换后使其生成SOPCBuider的PTF文件。
②退出MATLAB后,在Quartus II环境中对转换后所生成的复数乘法器的顶层VHDL文件进行修改。在SOPC Buider窗口双击CPU项,进入“指令加入”编辑窗,将这个硬件模块设置成自定义的复数乘法指令。
指令生成后,可利用Quartus II编辑C程序进行测试;测试成功后,在DSP算法计算中遇到复数乘法就可以运用复数乘法指令。这种方法将常用的硬件模块生成指令,通过软硬件并存的设计方法在FPGA中实现较复杂的DSP算法,能够将软件的灵活性和硬件的高速性结合起来,较好地解决了现代DSP设计中的诸多问题。但对于DDS模块,还是以硬件形式固化在FPGA中。可以根据需要,利用DDS设计出幅度、相位和频率调制器。
另外,Nios II的外设是可任意定制的,Nios II系统的所有外设都是通过Avalon总线与Nios II CPU相接的。Avalon总线是一种协议较为简单的片内总线,Nios II通过Avalon总线与外界进行数据交换。在本系统中,采用AvalonSlave外设方式加入了自定制AvalorL总线组件A/D转换接口模块、D/A接口模块,用于控制采样A/D的工作以及高速D/A的波形数据输出;而自定义的Avalon总线组件DDS模块接口和DSP功能转换控制接口,则用于Nios II CPU对DDS模块的控制,以及通过外部键盘来控制DSP功能的选择。
结语
整个系统除了A/D、D/A转换器和控制选择键盘外接外,其余都在一片FPGA町编程芯片中。由于有NiosII作CPU,因此既可自定义指令,也可通过Avalon总线自定义各种接口模块组件,使整个DSP系统的使用灵活多样,在现代DSP技术中有着越来越多的应用。