使用DSP_builder设计的DDS
2013-10-21王志强
摘 要:随着电子设计和通信测试的飞速发展,一些具有特定频率、特殊规律的信号在设计和测试过程中不可或缺,而市场上出售的信号发生器往往由于各种因素不能满足设计要求,使用FPGA器件设计的信号发生器可以胜任不同要求的任意信号发生器。
Altera DSP_builder是一款基于Matlab的系统级设计工具,依赖于Matlab/Simulink进行图形化系统设计和功能仿真,其最大特点在于可以通过signalCompiler直接将设计生成的模型文件(.mdl)转换成硬件描述语言VHDL,进而在QuartusII等软件上做更复杂精确地仿真,并生成.sof文件下载到芯片上使用。开发过程不涉及任何编程,图形化设计界面一目了然,是一种方便快捷的设计方式。
关键词:FPGA;DSP_builder;DDS;SignalCompile
1 DDS设计
1.1 基本原理
直接数字频率合成(Direct Digital Frequency Synthesis ,简称DDS)是以采样定理为基本原理,根据相位间隔对正弦信号进行取样、量化、编码,然后储存在EEPROM中构成一个正弦查询表,通过查表法产生波形。本设计基于DDS的基本原理,在时钟脉冲fc的控制下,对输入频率控制字K进行累加,当累加满量时产生溢出。相位累加器的输出对应于该合成周期信号的相位,并且这个相位是在0~2π范围内周期性的变化。相位累加器位数为N,对应于2π的相位, 最大输出为2N-1,累加一次就输出一个相应的相位码,将这个相位码作为查找表地址,通过查表得到正弦信号的幅度输出,然后经高速D/A转换成模拟量并通过低通滤波器滤除不需要的取样分量,输出频谱纯净的正弦波信号。
1.2 系统设计
1.2.1系统总体设计
下图为在Matlab/DSP_builder11.0平台建立DDS的Simulink模型:
系统模型图
系统的三个输入分别任频率控制字输入Freqword、相位控制字Phaseword、信号输入控制模块input。Input通过乘法器product模块控制信号输出,相位累加器模块由deiay模块、Parallel Adder Subtractor模块和Phaseword1模块组成,相位调制模块由Parallel Adder Subtractor1模块和Bus Conversion组成,其中加法器使用Pipeline,内部包含寄存器,最后由DDSout输出波形。
把输出的8位数字信号接入高速DA转换模块,就可以用示波器观察输出波形。
1.2.2正弦查找表模块设计
正弦查找表有多种设计方式,本设计采用调用Altera DSP_builder元件库中的LUT模块实现,取相位调制高6位作为查找表地址。正弦查找表部分还可以调用ROM模块实现,在使用ROM模块时,需要先编写查找表.mif或.hex文件,然后在ROM设置中指定文件位置即可。
以下是Matlab生成正弦查找表的代码:
width=8; %数据宽度8位;
depth=2^width;
N=0:1:depth-1;
s=sin(pi*N/depth); %计算0~pi/2的Sin值;
fidc=fopen('dds1.mif','wt'); %以"wt"的形式打开,\n为换行
% 写入 dds.mif %
fprintf(fidc,'width=%d;\n',width);
fprintf(fidc,'depth=%d;\n',depth);
fprintf(fidc,'address_radix=uns;\n');
fprintf(fidc,'data_radix = uns;\n');
fprintf(fidc,'content begin\n');
for(x=1:depth);
fprintf(fidc,'%d:%d;\n',x-1, round( (depth/2-1)*sin(pi*(x-1)/(depth/2)) + depth/2) );
end
fprintf(fidc,'end;');
fclose(fidc);
2 系統仿真
设置相位控制字0,频率控制字9000000,信号输入控制125,用Matlab Sinulink对电路进行系统级功能仿真,观察到系统输出波形如下:
3 硬件实现
双击原理图中的SignalCompiler工具,在弹出对话框中设置参数,点击Compile,DSP_builder将自动调用QuartusII进行编译。过程中会自动创建QuartusII工程并综合适配,生成QuartusII能识别的VHDL源程序。在QuartusII中打开工程,编译通过,分配管脚。生成的.sof文件可下载到FPGA芯片,将输出的数字信号接入高速DA转换模块就可以观察到输出波形。
4 结束语
在本设计中,由于设计信号发生器的全部基本组件模块都已经存在,我们仅仅需要逐一连接并设置好参数即可,简单直观的实现了一个较为复杂的电子系统。在更为复杂的设计中,还可以通过SubsystemBuilder调用编写好的VHDL源程序。SignalCompile工具直接把设计的.mdl文件转换为VHDL语言,从而使设计过程不涉及编程,操作更简单,过程更直观,更容易查找修正设计中的错误。使用DSP_builder的设计极大简化开发过程,缩短设计周期,提高开发效率,值得我们在开发过程中加以利用。
作者简介
王志强(1991-),男,湖北省宜昌市,职称:学生,学历:本科,研究方向:电子信息工程。