基于DDS的基本信号发生器资料.docx

上传人:b****6 文档编号:6625294 上传时间:2023-01-08 格式:DOCX 页数:11 大小:178.33KB
下载 相关 举报
基于DDS的基本信号发生器资料.docx_第1页
第1页 / 共11页
基于DDS的基本信号发生器资料.docx_第2页
第2页 / 共11页
基于DDS的基本信号发生器资料.docx_第3页
第3页 / 共11页
基于DDS的基本信号发生器资料.docx_第4页
第4页 / 共11页
基于DDS的基本信号发生器资料.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

基于DDS的基本信号发生器资料.docx

《基于DDS的基本信号发生器资料.docx》由会员分享,可在线阅读,更多相关《基于DDS的基本信号发生器资料.docx(11页珍藏版)》请在冰豆网上搜索。

基于DDS的基本信号发生器资料.docx

基于DDS的基本信号发生器资料

一、设计目标:

1、利用FPGA完成DDS波形产生的核心电路;

2、输出信号波形:

正弦、方波、三角波波;

3、输出波形的频率48828.15Hz~4882815Hz;

4、完成波形的仿真测试;

二、设计思路

采用直接数字合成器(DDS),可用硬件或软件实现。

即用累加器按频率要求对相应的相位增量进行累加,再以累加相位值作为地址码,取存放于ROM中的波形数据,经D/A转换,滤波即得到所需波形。

以EDA技术为基础,用FPGA实现DDS模型的设计。

电路的规模大小和总线宽度可以由设计者根据自己的需要而设定可将波形数据存入FPGA的ROM中。

同时外部控制逻辑单元也可在FPGA中实现。

方法简单,易于程控,便于集成。

用该方法设计产生的信号频率范围广,频率稳定度高,精度高,频率转换速度快。

在本设计中,用FPGA完成DDS核心电路模块设计,以quartusII软件为开发环境,使用VerilogHDL硬件描述语言完成硬件电路的设计,采用分块设计的思想,整个DDS模块框图如下:

图1系统框图

系统RTL电路图如下:

图2DDS模块RTL视图

各模块功能及设计思路:

1、控制模块

控制模块是从外部接收,实现DDS系统的控制功能,接收外部时钟信号、复位信号、10位频率控制字信号、10相位控制字信号,两位的波形选择字信号。

控制模块通过这些信号控制下层模块各种功能的实现。

顶层模块中以一个10位的累加器产生地址,实现对对底层模块正弦、方波、三角ROM模块的的访问。

2、正弦信号模块功能

该模块式调用FPGA内部的M4K存储器,以宏模块定制一个ROM存储块,存储正弦信号数据。

其中,通过MATLAB软件编程产生,产生的数据生成以个后缀为.Hex的文件,用来初始化ROM模块。

正弦信号模块接收来自控制模块的地址信号,访问内部的ROM模块,并将正弦信号波形数据输出到波形选择模块。

3、方波信号模块

该模块式调用FPGA内部的M4K存储器,以宏模块定制一个ROM存储块,存储方波信号数据。

其中,通过MATLAB软件编程产生,产生的数据生成以个后缀为.Hex的文件,用来初始化ROM模块。

方波信号模块接收来自控制模块的地址信号,访问内部的ROM模块,并将方波信号波形数据输出到波形选择模块。

4、三角波信号模块

该模块式调用FPGA内部的M4K存储器,以宏模块定制一个ROM存储块,存储三角信号数据。

其中,通过MATLAB软件编程产生,产生的数据生成以个后缀为.Hex的文件,用来初始化ROM模块。

三角信号模块接收来自控制模块的地址信号,访问内部的ROM模块,并将三角信号波形数据输出到波形选择模块。

5、波形选择模块

波形选择模块主要多路选择器构成,在接收到来自控制模块的复位信号,波形控制字和正弦、方波、三角模块传来的数据时,通过多路选择器的控制,输出我们想要的波形。

6、顶层模块

顶层模块将个顶层模块封装好,做成DDS的基本函数信号发生器。

三、源代码清单:

顶层模块

/****************************顶层模块********************************模块功能:

按设计要求输入10位频率控制字,10位的相位控制字,2位的波形控制字输出10位并行的波形幅度*********************************************/

moduleDDS(rst,clk,con_f,con_p,sec_w,out_addr,wave_data);

inputrst,//复位信号

clk,//时钟信号

con_f,//频率控制字输入端口

con_p,//相位控制字输入端口

sec_w;//波形选择输入端口

outputwave_data;//波形数据输出

outputout_addr;//测试管脚,观测地址变化

wire[9:

0]con_f;

wire[9:

0]con_p;

wire[1:

0]sec_w;

wire[9:

0]out_addr;

wire[9:

0]link_addr;

wire[9:

0]link_sin;

wire[9:

0]link_tri;

wire[9:

0]link_squ;

wire[9:

0]wave_data;

assignout_addr=link_addr;

controlU1(

.clk(clk),

.rst(rst),

.con_f(con_f),

.con_p(con_p),

.addr(link_addr)

);

sinU2(

.clk(clk),

.addr(link_addr),

.sin_data(link_sin)

);

triangularU3(

.clk(clk),

.addr(link_addr),

.tri_data(link_tri)

);

squareU4(

.clk(clk),

.addr(link_addr),

.squ_data(link_squ)

);

sec_waveU5(

.clk(clk),

.sec_w(sec_w),

.wsin(link_sin),

.wtri(link_tri),

.wsqu(link_squ),

.wave_data(wave_data)

);

Endmodule

控制模块

/************************control.vstart***********************************按设计要求,输入10位的频率控制字,10位的相位控制字,并输出10位二进制的信号幅值数据以累加器产生产生ROM访问地址,频率控制字、相位控制字和累加器输出数据之和形成最终10位地址数据,用来访问ROM*************************/

modulecontrol(clk,rst,con_f,con_p,addr);

inputclk;

inputrst;//复位信号

inputcon_f;//频率控制字输入端口

inputcon_p;//相位控制字输入端口

outputaddr;//ROM访问地址输出端口

wire[9:

0]con_f;

wire[9:

0]con_p;

reg[9:

0]addr;

reg[9:

0]frebuf;//频率控制字数据缓存

reg[9:

0]phebuf;//相位控制字数据缓存

reg[9:

0]count;//累加器数据存储

always@(posedgeclk)//将频率控制字,相位控制字存进缓存器中

begin

if(rst)

begin

frebuf<=0;

phebuf<=0;

end

else

begin

frebuf<=con_f;

phebuf<=con_p;

end

end

//------通过累加器产生ROM访问地址,并实现频率,相位的控制----------------

always@(posedgeclk)

begin

if(rst)

begin

count<=0;

addr<=0;

end

else

begin

count<=count+frebuf;

addr<=count+phebuf;

end

end

endmodule

正弦波形数据模块:

modulesin(

clk,

addr,

sin_data

);

inputwireclk;

inputwire[9:

0]addr;

outputwire[9:

0]sin_data;

sin_datab2v_inst(

.clock(clk),

.address(addr),

.q(sin_data));

endmodule

方波波形数据模块:

modulesquare(

clk,

addr,

squ_data

);

inputwireclk;

inputwire[9:

0]addr;

outputwire[9:

0]squ_data;

squ_datab2v_inst(

.clock(clk),

.address(addr),

.q(squ_data));

Endmodule

三角波波形数据模块:

moduletriangular(

clk,

addr,

tri_data

);

inputwireclk;

inputwire[9:

0]addr;

outputwire[9:

0]tri_data;

tri_datab2v_inst(

.clock(clk),

.address(addr),

.q(tri_data));

endmodule

波形选择模块:

/**************波形选择模块******************************************按照波形控制字,对波形输出进行选择,输出正弦波,方波和三角***************/

modulesec_wave(clk,rst,sec_w,wsin,wtri,wsqu,wave_data);

inputclk,//时钟信号

rst,//复位信号

sec_w,//波形选择输入端口

wsin,//正弦波幅度数据

wtri,//三角波幅度数据

wsqu;//方波波幅度数据

outputwave_data;//波形幅值数据输出端口

wire[1:

0]sec_w;

wire[9:

0]wsin;

wire[9:

0]wtri;

wire[9:

0]wsqu;

wire[9:

0]wave_data;

reg[9:

0]secbuf;//波形数据缓存

assignwave_data=secbuf;//将波形数据送到输出端口

//---------------通过三选一多选择路器实现波形的选择------------------------------

always@(posedgeclk)

begin

if(rst)

begin

//wave_data<=0;

secbuf<=0;

end

else

begin

case(sec_w)

2'b00:

secbuf<=wsin;

2'b01:

secbuf<=wtri;

2'b10:

secbuf<=wsqu;

default:

secbuf<=0;

endcase

end

end

endmodule

四、仿真波形

图3正弦波仿真图

图4三角波仿真图

图5方波仿真图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1