首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于FPGA的DDS基本信号发生器的设计

基于FPGA的DDS基本信号发生器的设计

摘要:本设计基于DDS原理和FPGA技术按照顺序存储方式,将对正弦波、方波、三角波、锯齿波四种波形的取样数据依次全部存储在ROM波形表里,通过外接设备拨扭开关和键盘控制所需波形信号的输出,最终将波形信息显示在LCD液晶显示屏上。各硬件模块之间的协调工作通过嵌入式软核处理器NiosⅡ用编程实现控制。本设计所搭建的LCD12864控制器是通过编程实现的IP核。
关键词:DDS;FPGA技术;顺序存储;NiosⅡ;IP核

    DDS(DiFeet Digital Frequency Synthesis)即直接数字式频率合成,是从相位概念出发直接合成所需波形的一种频率合成技术。与传统信号源所采用的用模拟方式生成信号不同,它是将先进的数字信号处理理论与方法引入信号合成领域。DDS技术在精确度、灵活度等方面都超过模拟信号发生器。并且DDS可实现相位连续变化,且具有良好频谱的信号,这是传统方法无法实现的。
    FPGA的迅速发展为DDS提供了更加优良的技术手段,它具有处理速度快、可靠性高等特点。SOPC(System On Programmable Chip,片上可编程系统)是一种灵活、高效的SOC解决方案。它以IP Core为基础,将处理器、存储器、IO口等系统设计需要的功能模块集成到一个FPGA器件上,构建成一个可编程的片上系统,具有灵活的设计方式。本设计综合以上软硬件可编程协同设计技术,使得DDS电路在灵活性,可行性,精确性等方面得到很大提高。

1 DDS的基本原理
    DDS信号发生器是由:频率控制字、相位累加器、ROM表、D/A转换器以及模拟低通滤波器LPF组成,原理框图如图1所示。


    首先对波形的一个周期进行连续采样,通过计算得到每一点对应的幅度值,然后以二进制格式存放在数据文件中。在时钟脉冲fclk驱动下,每个时钟周期内频率控制字与相位累加器累加一次,产生ROM查找表的地址值,随后通过查表变换,地址值被转化为信号波形的数字幅度序列,即可得到幅度上离散的波形,再由数模变换器(D/A)将表示波形幅度的数字序列转化为模拟量。最后经由LPF将D/A输出的阶梯状波形平滑为所需的连续波形。理论上,采样点数越多,生成波形精确度越高。

2 基于FPGA的DDS设计
    本设计在Altera的EP2C35F672C8芯片的基础上,在SOPCBuilder和OuartusⅡ开发环境下,利用SOPC技术,在FPGA中集成Altera的嵌入式软核处理器NiosⅡ和其他外设,将硬件系统与软件集成在单一可编程芯片中,从而实现片上的系统级设计。系统框图如图2所示,由DDS基本单元(由频率控制字,相位累加器,ROM,DAC,LPF构成),FPGA外部硬件资源(拨扭开关SWTCH、键盘KEY、LCD12864)和NiosⅡ处理器系统等构成了基本电路。四位拨扭开关选择输出波形,键盘控制输出波形信号频率,LCD12864显示波形信号参数,各硬件模块之间的协调工作通过NiosⅡ微处理器在图形化开发环境NiosⅡIDE下用C语言来编程实现控制。




3 各模块设计
3.1 波形数据存储方式
    通过对DDS基本原理的分析得知只需更换波形存储器中的波形采样数据,就可以得到所需波形的信号。波形数据存储方式包括顺序存储方式和间隔存储方式,本设计采用顺序存储方式将方波,三角波,正弦波,锯齿波4种波形采样数据全部依次存储在一个查找表里,数据分布情况如表1所示。通过改变寻址首地址,并在该波形数据存储地址范围内循环寻址,从而实现对所需信号波形的输出。具体实现方法在累加控制模块中有介绍。


    DDS模块中的波形数据存储器是用QuartusⅡ中的MegaWizard Plug_In Manager工具添加的LPM_ROM IP核,此存储器ROM是用波形存储文件.mif进行初始化,波形数据可以用matlab等工具生成,用matlab生成4种波形的波表数据程序如下:
   

    由以上代码生成的.mif文件即可存E盘目录下找到,将.mif文件加载到ROM中,实现对ROM的初始化。
3.2 累加控制模块
    累加控制模块如图3所示,为了实现波形选择性输出,本设计在累加控制部分增加了选择器,即图3的sel模块,作为系统寻址地址的高两位,实现对波形查找表的范围选择功能。累加器Altaccumulate0的输出做为累加控制模块的低32位的输出,实现在指定范围内对查找表进行寻址。此设计方法相当于做了一个多路数据选择器。四位拨扭开关作为sel模块的输入控制,将寻址地址转换成所需波形首地址,即可实现对波形选择的控制。Adder模块将sel和Altaccumulate0模块输出进行位拼接运算。其部分代码如下:
    always@(posedge clk)
    begin
    addr<={q,32’b0}+{2’b0,result};
    end
    设计中为了节省ROM的容量而采用相位截断的方法,取累加器输出的高十位作为ROM的寻址地址来进行查表。

3.3 LCD 12864口核设计

    对于Altera SOPC Builder未提供的一些外设接口模块,用户可以通过自定义逻辑方法在SOPC设计中添加自己开发的IP核,通过Avalon的读写时序对各个设备进行操作。本设计通过构建IP核来直接控制NiosⅡ和LCD12864的接口,按照指定的时序将波形参数显示在LCD上。在SOPC Builder中自己定义component,并把液晶显示模块看成外部存储器,直接做成Avalon总线Slave设备,IP核设计包含软件部分和硬件部分,需要写HDL模块,定义控制状态、数据寄存器和控制位,描述组件与Avalon总线的接口以及组件与液晶屏的接口。系统编辑器从文件中读取I/O信号和参数信息。其次对LCD模块进行初始化,由于SOPC Builder中的LCD12864控制模块已经考虑了LCD的读写时序,所以使用NIOSⅡ IDE进行LCD驱动和控制时只需对LCD进行初始化。
3.4 NiosⅡ嵌入式处理器系统
    NiosⅡ是Altera针对其FPGA设计的嵌入式软核处理器,它与其他IP核可构成SOPC系统的主要部分。它具有灵活的自定义指令集和自定义硬件加速单元,以及图形化开发环境NiosⅡIDE。经由SOPC Builder生成NiosⅡ嵌入式处理器系统,其CPU模块框图如图4所示。


    利用NIOSⅡIDE开发工具完成所有软件开发任务,系统接收拨扭开关扫描模块发来的4位扫描码,根据扫描码数值的不同进入不同的子程序,然后再通过FPGA的键盘扫描模块向NIOSⅡ处理器发送键盘扫描码,软核处理器根据接收到的扫描码产生相应的信号数据以及控制信号,并通过PIO传送给FPGA中的DDS模块,实现频率控制字的变化,即输出频率可调,并将信号数据显示在LCD上。同时DAC器件将DDS产生的8位信号数据进行数模转换,从而产生频率可调的方波、三角波、正弦波、锯齿波。

4 结束语
    该信号源能够很好地满足对不同波形、不同频率的信号的需求,具有很强的实用性,并且可以方便地通过液晶显示器直观地观察到波形信号的参数信息。由FPGA实现的DDS信号发生器不仅可实现频率可调波形变换且具有频率切换快,信号的质量和精度高于模拟方式的特点。
返回列表