0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于DDS原理设计信号发生器的方案

454398 来源:博客园 作者:Apollo-Mao 2020-10-19 11:50 次阅读

信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。函数信号发生器的实现方法通常是采用分立元件或单片专用集成芯片,但其频率不高,稳定性较差,且不易调试,开发和使用上都受到较大限制。随着可编程逻辑器件(FPGA)的不断发展,直接频率合成(DDS)技术应用的愈加成熟,利用DDS原理在FPGA平台上开发高性能的多种波形信号发生器与基于DDS芯片的信号发生器相比,成本更低,操作更加灵活,而且还能根据要求在线更新配置,系统开发趋于软件化、自定义化。本文研究了基于 FPGA的DDS信号发生器设计,实现了满足预定指标的多波形输出。

DDS建立在采样定理基础上,首先对需要产生的波形进行采样,将采样值数字化后存入存储器作为查找表,然后通过查表读取数据,再经D/A转换器转换为模拟量,将保存的波形重新合成出来。DDS基本原理框图如图1所示。

除了滤波器(LPF)之外,DDS系统都是通过数字集成电路实现的,易于集成和小型化。系统的参考时钟源通常是一个具有高稳定性的晶体振荡器,为各组成部分提供同步时钟。频率控制字(FSW)实际上是相位增量值(二进制编码)作为相位累加器的累加值。相位累加器在每一个参考时钟脉冲输入时,累加一次频率字,其输出相应增加一个步长的相位增量。由于相位累加器的输出连接在波形存储器(ROM)的地址线上,因此其输出的改变就相当于查表。这样就可以通过查表把存储在波形存储器内的波形抽样值(二进制编码)查找出来。ROM的输出送到D/A转换器,经D/A转换器转换成模拟量输出。

设计功能及端口

1.设计实现的功能

用一个8×128的ROM完成对所要显示正弦波形数据的存储,即生成正弦波的波形数据查找表,通过VerilogHDL编写DDS直接数字频率合成代码,在Quartus II与modelsim工具软件的环境中进行设计和仿真,要求能根据相位累加产生的地址并按照不同的频率控制信号(freq)读取ROM波形查找表中的数值做为输出,并正确显示波形。同时还可通过改变相移变量(pha)控制程序从不同的位置开始读取ROM波形查找表中的数据。

2.输入输出端口

input wire clk; //时钟

input wire rst;//复位信号(低电平有效)

input wire [6 : 0] freq;//频率控制信号

input wire [6 : 0] pha;//相移变量信号

input wire key; //使能开关信号(高电平有效)

output wire [7 : 0] data; //ROM查找表数据

功能介绍

1.设计功能模块介绍:

本次设计总体实现的是一个能产生正弦波形的DDS信号发生器,该

DDS信号发生器的程序代码模块主要有以下内容:

(1)ROM地址产生:

当时钟的上升沿到来时,如果复位信号有效,则把地址变量addr清零;否则当使能开关信号key有效时,则将频率控制字写到内部寄存器里,再将频率控制字和上一时刻的地址变量进行相加,将加的结果作为地址输出。另外,还可通过频率控制信号freq控制读取频率,通过相移变量信号pha控制初始读取位置。

(2)ROM查找表:

当时钟的上升沿到来时,如果复位信号有效,则把输出置为零;否则根据ROM地址产生模块产生的地址读取ROM中存储的数值。

另外需通过C语言生成ROM正弦波查找表数据,C语言程序代码如下: #include “stdio.h”

#include “conio.h”

#include “math.h”

main()

{

int i;

float j;

int y;

FILE *fp;

if((fp = fopen(“rom.mif”, “wa”)) == NULL)

exit(1);

for(i = 0; i 《 128; i++)

{

y = 128 * sin(j) + 128;

fprintf(fp, “%d:%d;\n”, i, y);

j += 2 * 3.1416 / 128;

}

fclose(fp);

printf(“Hello, world\n”);

getch();

}

2.系统结构框图:

设计源代码

1.设计源代码:

module DDS(clk,rst,freq,pha,key,data);

input wire clk; //时钟 input wire rst; //复位信号(低电平有效) input wire [6 : 0] freq; //频率控制信号 input wire [6 : 0] pha; //相移变量信号 input wire key; //使能开关信号(高电平有效) output wire [7 : 0] data; //ROM查找表数据

reg [6 : 0] addr; reg [6 : 0] phase; reg [6 : 0] frequency;

always @(posedge clk) begin if(key == 1) begin phase 《= pha; //将相移变量值赋给寄存器phase frequency 《= freq; //将频率控制变量值赋给frequency end end always @(posedge clk or negedge rst) begin if(!rst) begin addr 《= 0; //复位 end else begin if(key == 1) addr 《= phase; //将寄存器phase存储的相值赋给addr else addr 《= addr + frequency; //ROM地址产生 end end rom1 rom_1( .address(addr), .clock(clk), .q(data) ); //实例化调用rom1波形查找表endmodule

验证方案和仿真激励:

`timescale 1 ns/ 100 ps //设置仿真的时间单位和时间精度

module stimulus;

reg clk,rst;

reg[6:0]freq,pha;

reg key;

wire [7:0] data;

initial

begin

freq=7‘d2;

pha=7’d0;

key=1‘b0;

#20 key=1’b1;

#100 key=1‘b0;

end

initial

begin

clk=1’b0;

rst=1‘b1;

#40 rst=1’b0;

#40 rst=1‘b1;

end

always #10 clk=~clk; //时钟翻转

DDS

LXC(.clk(clk),.rst(rst),.freq(freq),.pha(pha),.key(key),.data(data));

endmodule

功能仿真

(1)在ModelSim 中对电路设计进行功能仿真

仿真波形如下:

(2)在Quartus II 中对电路设计进行功能和时序仿真 仿真波形如下:

时序仿真波形如下:

仿真分析:通过观察在ModelSim和Quartus II中的仿真波形,分析其完成的功能与设计预期一致,说明本设计能较好的完成设计所需达到的目标。

综合布线与电路图

综合与布局布线:

1、下图为综合完并且成功后小窗口上生成的报告,报告中显示出了综合的工程名、引脚及所用的芯片的类型和型号。

综合完后生成的电路图如下:

综合布局布线报告

综合完后在Quartus生成了一个名为“DDS.map.rpt”的文件,即为综合布局布线报告。

下载代码和引脚分布报告

下载代码

后仿完后在仿真目录下的\simulation\modelsim路径下生成了一个“ DDS_v.sdo”其即为下载代码文件。

引脚分布

综合完后在工程目录下生成了一个“top.pin”文件,其即为引脚分布。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    161

    文章

    7811

    浏览量

    178075
  • 存储器
    +关注

    关注

    38

    文章

    7490

    浏览量

    163816
  • DDS
    DDS
    +关注

    关注

    21

    文章

    634

    浏览量

    152649
  • 信号发生器
    +关注

    关注

    28

    文章

    1474

    浏览量

    108755
  • 晶体振荡器
    +关注

    关注

    9

    文章

    620

    浏览量

    29122
收藏 人收藏

    评论

    相关推荐

    DDS信号发生器支持单通道50个正弦载波!#信号发生器 #AWG #DDS

    信号发生器
    虹科卫星与无线电通信
    发布于 :2024年12月23日 18:03:30

    FlexDDS-NG直接数字信号合成器(DDS)/波形发生器

    盛铂科技FlexDDS-NG是一种单台机箱最多可达12个通道相位连续直接数字信号合成器 (DDS)。其输出频率可达400MHz,该产品专为量子光学研究而设计, 是直接满足实验物理学家需求的下一代波形发生器
    的头像 发表于 11-28 15:00 170次阅读

    信号发生器单位怎么换mv

    在电子测量领域,信号发生器是一种非常重要的仪器,它能够产生各种类型的电信号,如正弦波、方波、三角波等。信号发生器的输出电压通常以毫伏(mV)
    的头像 发表于 06-03 14:19 1093次阅读

    数字信号发生器频率调整方式有几种

    和稳定性至关重要。本文将详细介绍数字信号发生器的频率调整方式,包括直接数字合成(DDS)、相位锁定环(PLL)、直接频率合成(DFS)等。 1. 直接数字合成(Direct Digital Synthesis,
    的头像 发表于 06-03 14:08 1592次阅读

    信号发生器频率怎么调

    信号发生器是一种电子设备,用于产生具有特定频率、幅度和波形的电信号。这些信号可以用于测试和校准各种电子设备,如放大器、滤波、振荡
    的头像 发表于 06-03 11:06 1822次阅读

    信号发生器的sync什么意思

    信号发生器是一种电子设备,用于产生具有特定频率、幅度和波形的电信号。这些信号可以用于测试和测量电子设备的性能,或者作为其他电子系统的输入信号
    的头像 发表于 06-03 10:59 3223次阅读

    信号发生器的使用方法 信号发生器的幅值是有效值吗

    信号发生器是一种电子设备,用于生成具有特定特性的电信号,如正弦波、方波、锯齿波等。信号发生器广泛应用于测试和测量领域,如电子电路设计、通信系
    的头像 发表于 06-03 10:56 2969次阅读

    如何使用psoc4系列芯片去设计DDS信号发生器

    如何使用psoc4系列芯片去设计DDS信号发生器
    发表于 05-23 06:51

    函数发生器信号发生器和波形发生器的区别

    在电子测试和测量领域,函数发生器信号发生器和波形发生器都是重要的测试仪器,它们各自具有独特的功能和应用场景。本文将详细介绍这三种发生器的原
    的头像 发表于 05-15 14:49 1587次阅读

    基于FPGA 的DDS正弦信号发生器的设计和实现

    电子发烧友网站提供《基于FPGA 的DDS正弦信号发生器的设计和实现.pdf》资料免费下载
    发表于 03-24 09:34 8次下载

    proteus信号发生器怎么设置方波

    Proteus信号发生器是一种强大的虚拟仪器,可以生成各种类型的电子信号,包括方波信号。在本文中,我们将详细介绍如何在Proteus信号
    的头像 发表于 02-23 16:44 9974次阅读

    函数发生器信号发生器的区别和联系

    函数发生器信号发生器是电子工程领域常用的两种设备,它们在实验室和工业制造领域中扮演着重要的角色。尽管两者在名称和功能上有一定的相似性,但它们的原理和应用有所不同。本文将详细探讨函数发生器
    的头像 发表于 02-23 16:10 2269次阅读

    信号发生器是干什么用的 信号发生器和示波器怎么连接

    信号发生器是一种用于产生各种电信号的设备,它在电子设备测试、电路调试、教学实验等领域得到广泛应用。信号发生器可以产生不同频率、幅度、波形和相
    的头像 发表于 01-30 10:08 2937次阅读

    信号发生器是干什么用的 信号发生器的使用方法

    信号发生器是一种电子测试仪器,用于产生各种类型的电信号。它可以在实验室、工厂和其他领域提供标准化的、可重复的信号,用于测试和验证其他电子设备的性能。
    的头像 发表于 01-19 14:51 3131次阅读