文献标识码: A
文章编号: 0258-7998(2011)06-091-04
信号发生器是各种测试和实验过程中不可缺少的仪器,在通信、测量、雷达、控制、教学、科研等领域应用十分广泛。随着我国经济和科技的发展,对相应的测试仪器和测试手段也提出了更高的要求。传统的信号发生器大多采用专用芯片或单片机或模拟电路,具有成本高、控制方式不灵活或波形种类较少等缺点。
本文采用直接数字合成(DDS)技术[1],通过基于 NIOSⅡ的SoPC系统实现一个任意波形发生器。DDS技术是一种新颖的频率合成技术,具有易于程控、相位连续、输出频率稳定度高、频率转换速度快和分辨率高等优点。SoPC(System on a Programmable Chip)[2-3]技术是美国Altrea公司于2000年最早提出的,并同时推出了相应的开发软件Quartus II及硬件平台FPGA(Field-Programmable Gate Array)芯片。SoPC是基于FPGA解决方案的SoC,SoPC的设计是以IP为基础、以硬件描述语言VHDL为主要设计手段、借助于以计算机为平台的EDA工具进行的,具有灵活的设计方式和软硬件在系统可编程的功能。本设计通过Altera公司的FPGA芯片和NIOSⅡ嵌入式系统实现SoPC。
1 系统总体方案设计
本设计实现一个基于SoPC的任意波形发生器, 其输出频率范围为10 Hz~1 MHz,频率分辨率为1Hz,输出电压幅值范围为 0~5 V,步进间隔为0.1 V,输出信号的频率和电压值可通过键盘进行设置,可实时显示输出信号的类型、幅度、频率和频率步进值。
片上系统在Altera CycloneⅡ系列的 EP2C8Q208C8 FPGA上实现,构建了一个基于NIOSⅡ的SoPC系统,完成系统控制和DDS信号发生,通过PS/2鼠标键盘设定波形的种类、任意频率和任意幅度的信号输出,最后通过外部电路将片上系统数字输出转换为模拟输出、放大、滤波和幅度控制,系统框图如图1所示。
2 片上系统设计
片上系统为一个基于NIOSⅡ的SoPC系统,由四部分组成:NIOS Ⅱ模块、DDS模块、PLL模块和片上RAM 模块。
2.1 NIOS Ⅱ模块
本模块提供主控CPU部分,NIOS II模块通过在SoPC Builder[2]中调用IP库组件实现,由Quartus软件定制,需加入SDRAM、LCD、RS232等控制器。利用SDRAM配合FPGA构成片上系统,建立NIOS控制系统,完成任务调度及人机交互控制。对DDS部分的控制由PIO口完成,均为输出口,包括频率控制字输出口、波形选择输出口、幅度控制输出口。本设计中,由于NIOSⅡ CPU主要负责UART串口的数据传输和简单的I/O接口控制,所以选用经济型NIOSⅡ/e 内核,以达到节省资源的目的,NIOS II CPU顶层原理图如图2所示。
2.2 DDS 模块
2.2.1直接数字频率合成器原理
直接数字合成DDS(Direct Digital Synthesis)是一种从相位出发的新的频率合成技术和信号产生方法。DDS的原理框图如图3所示[4]。图中相位累加器可在每一个时钟周期来临时将频率控制字(FTW)所决定的相位增量M累加一次,如果记数大于N,则自动溢出,而只保留后面的N位数字于累加器中。正弦查询表ROM用于实现从相位累加器输出的相位值到正弦幅度值的转换,然后送到DAC中将正弦幅度值的数字量转换为模拟量,最后通过滤波器输出一个很纯净的正弦波信号。
2.2.2正弦波产生原理
上式中,M为相位累加器的位数,FTW为频率步进控制字,fclk为时钟频率,输出信号频率主要取决于频率控制字FTW。当FTW增大时,fout可以不断增加,综合考虑Nyquist 采样定理,最高输出频率应小于fout/2。根据实验所得,实际工作频率应小于fclk/ 3。由于本案例只要求设计出最高为1 MHz的信号,根据D/A及FPAG的速度,可以很容易地满足设计需要。本例中选用32 MHz的CLK时钟,在输出最高1 MHz的信号时,波形在一个周期内仍有32个点,能够完整描述出波形。
2.2.3 DDS模块的FPGA实现
DDS模块采用DDS技术基于FPGA设计信号发生模块,由三个子模块组成,产生要求的信号序列。该模块通过 VHDL 语言直接编程,用于完成频率控制字的相位累加和截断输出,从而实现波形数据的输出和频率调制功能,是整个系统的核心模块。由于其采用VHDL语言编写,所以必须将其转换为图形符号,加入设计顶层图中,如图5所示。
子模块“xianglei”为32位的相位累加器,它由一个32 bit字长的二进制加法器和一个固定时钟脉冲clk取样的32 bit相位寄存器组成,32 bit的din[31..0]输入为相位累加器频率控制字输入端,在时钟脉冲的控制下,改变频率控制字,即可改变输出频率;子模块“rom”是一个采用Quartus 软件定制的LPM_ROM正弦查询表,正弦数据由Matlab软件生成,并以mif 的文件格式存储后加载到ROM模块中,文件为sin10bit.mif,输入为10 bit地址,在时钟的作用下,输出存储的正弦数据;子模块“outs”为波形输出模块,10 bit地址输入端与相位累加器模块输出相连,10 bit数据输入端与正弦查询表的ROM输出相连,sel为波形选择端,当选择端为0、1、2、3时,在时钟的作用下,分别输出正弦波、方波、三角波和锯齿波,由于D/A转换模块采用的是8 bit D/A,因此输出端仅接qout的前8 bit。
2.3 PLL模块
该模块通过调用QuartusⅡ内嵌的器件函数实现,QuartusⅡ内嵌了许多常用器件的函数,用户只需要进行设置即可直接调用,而不需要自己编程,大大提高了系统开发的效率。本设计需要两个PLL模块,一个用于产生NIOS及片外SDRAM所需的时钟,另一个用于DDS时钟,采用32 MHz,其中片外SDRAM 的时钟输入必须比系统的时钟滞后63°相位。
2.4 片上RAM模块
该模块采用Quartus软件定制的LPM_ROM模块,用来存储一个周期的波形数据。DDS模块对RAM进行读操作,读取波形数据,产生幅度量化序列。片上RAM地址位为10 bit,数据位为10 bit,空间大小为10 KB,即存储了1 024个10 bit数据。
2.5 软件设计
片上系统的软件设计利用Altera的SoPC Builder系统开发工具和QuatrtusII 7.2设计软件,在集成开发软件NIOSⅡ IDE中通过C语言编程实现。主要是DDS控制、LCD显示控制接口和键盘扫描程序的的编写。如要产生某个1 kHz波形,由键盘设置相应数值、波形类别、波形幅值和步进幅度,通过PIO的控制口送给DDS模块,就可得到相应的波形。限于篇幅,软件设计流程图不再给出。
3 SoPC外围电路
SoPC的外围电路是完成人机接口、信号处理及驱动负载等重要功能,主要由RS232 & PS2模块、D/A转换与幅度控制模块、LCD1602模块组成。其中RS232 & PS2模块由RS232电平转换电路和PS2键盘接口电路两部分组成,用于完成RS232串口通信和PS2接口通信,可实现与计算机串口通信、PS键盘扩展等功能,该模块通过8针接口连接到EDA-SoPC核心板;D/A转换与幅度控制模块,相当于两路D/A输出,一路使用D/A芯片完成,即在时钟的作用下,将8 bit的数据送到输出端,在D/A模拟输出相应模拟电压,另一路D/A使用电阻网络完成转换后作为输出信号的幅度调节,经过EDA-SoPC核心板的DDS技术可实现任意波形、一定频率、一定幅度范围的信号输出;LCD1602模块主要提供EDA-SoPC核心板与LCD1602液晶接口及液晶所需的负压调节及背光控制电路。由于篇幅所限,本文只给出D/A转换及驱动电路,如图6所示。
信号D/A转换及驱动电路由DDS输入的8 bit数据通过DAC908转换为模拟信号,DAC908是一个8 bit高速、低功耗CMOS DAC芯片,最高转换速率为125 Mb/s,采用单端模拟输出,再通过AD8058运放驱动后,作为信号输出。AD8058是一款低成本、高性能的电压反馈型放大器,可以在高增益的条件下保持带宽特性,噪声和失真性能符合高速放大要求,具有很高的稳定性。
4 测试结果
在指标测试中,采用了60 MHz数字示波器固纬GDS1062,其面板上可直接显示信号的频率与幅值。
4.1 输出波形频率测试
在10 Hz~1 MHz范围内以不同的步进分别进行了正弦波、三角波、方波的频率测试。在10 Hz~100Hz范围内步进间隔为1 Hz;在100 Hz~1 kHz范围内步进间隔为10 Hz;在1 kHz~1 MHz范围内步进间隔为1 kHz。测试结果表明,输出信号频率稳定度优于10-5,与频率设定值完全一致,波形稳定无失真。
4.2 正弦波带负载能力测试
输入频率为f=1 kHz的正弦波,在空载和带负载(1 kΩ)情况下,幅值设定了0.1 V~5 V共10组数据,测得负载变化率最大值为0.22%,输出波形的幅度与设定幅度非常接近,系统带负载能力很强。
本设计完成了任意波形发生器的软硬件设计和调试,而基于NIOS II的嵌入式处理SoPC技术,使系统性能得到了极大的提高,系统波形显示清晰、工作稳定。实验结果表明,系统指标方面远远超过了传统频率合成技术所能达到的水平。
参考文献
[1] 林丹,肖启俊,郑小燕.基于SoPC的任意波形发生器[D]. 深圳:深圳大学,2007.
[2] 李兰英.NiosⅡ嵌入式软核SoPC设计原理及应用[M]. 北京:北京航空航天大学出版社,2006.
[3] 江国强.正版SoPC技术与应用[M].北京:机械工业出版社,2006.
[4] 帅倩,吴国辉,代冀阳.基于FPGA的DDS设计及实现[J]. 现代电子技术,2010,34(13):90-92.