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

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

    关注

    158

    文章

    7329

    浏览量

    174769
  • 存储器
    +关注

    关注

    38

    文章

    7144

    浏览量

    161978
  • DDS
    DDS
    +关注

    关注

    21

    文章

    614

    浏览量

    151730
  • 信号发生器
    +关注

    关注

    28

    文章

    1275

    浏览量

    107768
  • 晶体振荡器
    +关注

    关注

    9

    文章

    500

    浏览量

    28456
收藏 人收藏

    评论

    相关推荐

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

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

    信号发生器的特点 信号发生器可以产生哪些波形?

    信号发生器的特点 信号发生器可以产生哪些波形? 信号发生器是一种用于产生各种频率、振幅和波形的电
    的头像 发表于 12-21 15:05 710次阅读

    信号发生器如何发出双脉冲?

    信号发生器如何发出双脉冲? 信号发生器是一种用于产生各种信号波形的仪器。双脉冲信号是一种特殊的
    的头像 发表于 12-21 15:03 624次阅读

    信号发生器的占空比是什么 信号发生器占空比怎么设置

    信号发生器的占空比是什么 信号发生器占空比怎么设置  信号发生器的占空比是指方波波形中高电平和低
    的头像 发表于 12-21 14:02 1822次阅读

    信号发生器的基本使用方法

    电路信号发生器
    油泼辣子
    发布于 :2023年11月30日 15:26:53

    函数信号发生器产生信号的方法有哪些?

    的测试和分析。 信号发生器的应用非常广泛,涵盖了多个领域,包括电子工程、通信、音频和视频设备测试等。下面将详细介绍函数信号发生器产生信号的方
    的头像 发表于 11-20 16:23 654次阅读

    简易信号发生器设计方案

    电子发烧友网站提供《简易信号发生器设计方案.pdf》资料免费下载
    发表于 10-20 09:43 1次下载
    简易<b class='flag-5'>信号</b><b class='flag-5'>发生器</b>设计<b class='flag-5'>方案</b>

    信号发生器的功能 信号发生器的使用方法

    信号发生器是一种用于产生各种类型的电子信号的设备。它被广泛应用于电子测试、仪器校准、电子设备研发等领域。信号发生器能够产生多种波形
    的头像 发表于 10-05 16:04 3111次阅读

    简易信号发生器的设计

    简易信号发生器的设计  信号发生器是一种能够产生可靠、标准化的交替电流、交流电压和脉冲的电子设备。在电子测试和测量、频率标准校准等领域中,信号
    的头像 发表于 08-24 15:49 1348次阅读

    如何使用基于Raspberry Pi的DDS信号发生器实现精确RF测试

    在涉及射频(RF)的硬件测试中,选择可配置、已校准的可靠信号源是其中最重要的方面之一。本文提供了基于Raspberry Pi的高度集成解决方案,其可用于合成RF信号发生器,输出DC至5
    的头像 发表于 06-17 10:35 455次阅读
    如何使用基于Raspberry Pi的<b class='flag-5'>DDS</b><b class='flag-5'>信号</b><b class='flag-5'>发生器</b>实现精确RF测试

    使用基于Raspberry Pi的DDS信号发生器实现精确RF测试

    本文提出了一种高频、低失真、低噪声的信号源。所介绍的系统是一种采用基于高速DAC的DDS架构的低成本RF信号频率合成器解决方案,通过使用基于DDS
    的头像 发表于 06-08 15:19 449次阅读
    使用基于Raspberry Pi的<b class='flag-5'>DDS</b><b class='flag-5'>信号</b><b class='flag-5'>发生器</b>实现精确RF测试

    FPGA常用运算模块-DDS信号发生器

    本文是本系列的第六篇,本文主要介绍FPGA常用运算模块-DDS信号发生器,xilinx提供了相关的IP以便于用户进行开发使用。
    的头像 发表于 05-24 10:37 4081次阅读
    FPGA常用运算模块-<b class='flag-5'>DDS</b><b class='flag-5'>信号</b><b class='flag-5'>发生器</b>

    DDS信号发生器原理图/电路板

    DDS信号发生器,带AVR电路,带Atmega16微控制器,带BNC输出。一个方波输出高达8MHz,另一个DDS输出,具有正弦波,方波,三角波,ECG,噪声,倒锯齿波。失调可在+V至-
    的头像 发表于 05-15 17:48 1767次阅读
    <b class='flag-5'>DDS</b><b class='flag-5'>信号</b><b class='flag-5'>发生器</b>原理图/电路板