DDS设计报告带程序.docx

上传人:b****7 文档编号:23649460 上传时间:2023-05-19 格式:DOCX 页数:23 大小:1.21MB
下载 相关 举报
DDS设计报告带程序.docx_第1页
第1页 / 共23页
DDS设计报告带程序.docx_第2页
第2页 / 共23页
DDS设计报告带程序.docx_第3页
第3页 / 共23页
DDS设计报告带程序.docx_第4页
第4页 / 共23页
DDS设计报告带程序.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

DDS设计报告带程序.docx

《DDS设计报告带程序.docx》由会员分享,可在线阅读,更多相关《DDS设计报告带程序.docx(23页珍藏版)》请在冰豆网上搜索。

DDS设计报告带程序.docx

DDS设计报告带程序

 

电子线路课程设计

直接数字频率合成计

 

院系:

学号:

912000720

姓名:

同组人:

指导老师:

时间:

2014年11月

 

 

 

摘要

本实验通过使用QuartusⅡ7.1软件,并结合verilog语言的知识设计直接频率合成器,简称DDS。

DDS中的正余弦波形存储器模块用

类型的芯片实现,基准频率为1MHz,利用实验箱上的D/A转换器件将ROM输出的数字信号转换为模拟信号,能够通过示波器观察到正、余弦两路波形。

除此之外,本实验还实现了多种波形任意切换,0-200kHz频率任意可调,并在数码管上显示生成的波形频率等附加功能。

 

关键词

QuartusII,直接数字频率合成计(DDS),VerilogHDL,状态机

 

Abstract

Inthisstudy,byusingQuartusⅡ7.1software,combinedwiththeknowledgeofverilog-language,wedesignedthedirectfrequencysynthesizer,alsocalledDDS.ThetypeofsineandcosinewaveformmemorymoduleinDDSis

.Andthereferencefrequencyis1MHz.PassingthroughtheD/Aexperimentalbox,thedigitalsignalconversiondeviceconvertstheoutputoftheROMtoananalogsignal.Wecanobservetwowaveformonthescreenofoscilloscope.Inaddition,thisexperimentalsoimplementsanarbitrarywaveformswitching,a0-200kHzarbitraryfrequencyswitching,andtheresultingwaveformfrequencydisplaying.

Keywords

QuartusⅡ,Directfrequencysynthesizer,VerilogHDL,Statemachine

 

一、设计要求……………………………………………………………………...........................3

二、分层设计及其分工……………………………………………………………………...........3

3、直接数字频率合成计顶层设计…………………………....………………...........................4

四、各子模块设计原理及程序…………………………………………...................................…5

4.1分频电路…………………………………………………..............................................……5

4.2相位累加器和数据锁存器器电路....……………....……………..........................................6

4.3波形存储器ROM的生成...……………………......................................……………………6

4.4三角波及方波输出电路..........................................................................................................7

4.5波形的综合输出电路…………………………………...........................................…………8

4.6状态机控制电路.......................................................................................................................8

4.7状态机专用消颤电路.............................................................................................................10

4.8LED频率显示电路……………………………………………....................……………….11

五、程序下载、仿真与调试……………………………………….............................….....……13

5.1管脚设定…………………………………………….......................................………….…13

5.2修改Device&PinsOptions及重新编译…………………........................................……..14

5.3程序下载及运行结果………………………………………………………............……….15

六、实验中遇到的问题及其应对方案……………………………………….............…………..15

七、实验总结与感想…………………………………………………..............................………..15

八、参考文献…………………………………………………………….............................……..16

1、设计要求

1.1设计基本部分要求

①利用QuartusII软件和SmartSOPC试验箱实现DDS的设计;

②DDS中的波形存储器模块用Altera公司的CycloneIII系列FPGA芯片中的ROM实现,ROM结构配置成

类型;

③具体参数要求:

频率控制字K取4位;基准频率

,由实验板上的系统时钟分频得到;

④系统具有使能功能;

⑤利用实验箱上的D/A转换器件将ROM输出的数字信号转换为模拟信号,能够通过示波器观察到正、余弦两路波形;

⑥通过开关输入DDS的频率和相位控制字,并能用示波器观察加以验证;

1.2设计提高部分要求

①通过按键(实验箱上的Si)输入DDS的频率和相位控制字,以扩大频率控制和相位控制的范围;(注意:

按键后有消颤电路)

②在数码管上显示生成的波形频率;

③设计能输出多种波形(三角波、锯齿波、方波等)的多功能波形发生器;

④充分考虑ROM结构及正弦函数的特点,进行合理的配置,提高计算精度;

⑤基于DDS的AM调制器的设计;

⑥自己添加其他功能。

二、分层设计及其分工

2.1分层设计

为了实现直接数字频率合成计,我们采用了Verilog语言描述其功能,如图2.1所示,为本实验的层次分析设计结构图。

图2.1直接数字频率合成计的层次模型

①原始分频电路将系统提供的48MHz晶振频率分为1MHz的基础频率,是所有子模块中clk的基础。

②状态机可以实现复位、波形切换、0-200kHz频率任意可调的功能。

③LED电路通过对频率与相位控制字的相对数量计算,实现了显示频率的功能

2.2分工情况

整个直接数字频率合成器设计由郑蕤荻和我(徐洁)共同完成,既有明确的分工以提高效率,也有互相帮助,互相指出错误的合作过程,以下为我们两个人明确分工的情况:

***:

DDS频率发生器顶层设计、状态机控制电路、LED显示电路;

**:

三种波形的生成、状态机专用消颤电路、相位累加器及锁存器、分频电路。

.

三、直接数字频率合成计顶层设计

DDS为整个直接数字频率合成计的顶层设计,它直接或间接的调用了所有的子程序,实现了将整个底层程序贯穿联接的功能,规定了直接数字频率合成计的输入和输出。

输入有:

EP3C25F324C8的自带晶振频率48MHz,键入值;输出有:

波形数据,LED管的位码和段码,接地信号。

verilog语言程序如下:

moduledds(_48MHz,keyin,wavevalue,wavevalue2,Segout,SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8,GND,GND2,clk);

input_48MHz;

outputclk;

outputGND,GND2;

input[3:

0]keyin;

output[9:

0]wavevalue,wavevalue2;

output[6:

0]Segout;

outputSG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8;//selectLED

wire[11:

0]address;

wire[1:

0]wavemode;

wire[23:

0]length;

wire[9:

0]wavevalue,wavevalue2;

wire[3:

0]keyOUT;

wire_48MHz,clk;

supply0GND,GND2;

keyS0(clk,keyin,keyOUT);

Original_FrequencyS1(_48MHz,clk);

controlS2(clk,keyOUT,wavemode,length);

counterS3(clk,length,address);

selectionS4(clk,address,wavemode,wavevalue);

cos_romS5(address,clk,wavevalue2);

shumaguanS6(clk,length,Segout,SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8);

endmodule

四、各子模块设计原理及程序

4.1分频电路

分频模块是为了实现EP3C25F324C8的自带晶振频率48MHz,往1MHz的分频,主体思想是使用一个模48计数器直接取其最高位,下面是该电路的verilog程序:

//Original_Frequency.v

moduleOriginal_Frequency(_48MHz,_1MHz);

input_48MHz;

output_1MHz;

reg[3:

0]CntH,CntL;

wire_1MHz;

always@(posedge_48MHz)

begin

if((CntH>4)||(CntL>9)||(CntH==4)&&(CntL>=7))

{CntH,CntL}<=8'h00;

elseif((CntH==4)&&(CntL<7))

beginCntH<=CntH;CntL<=CntL+1'b1;end

elseif(CntL==9)

beginCntH<=CntH+1'b1;CntL<=4'b0000;end

else

beginCntH<=CntH;CntL<=CntL+1'b1;end

end

assign_1MHz=CntH[2];

endmodule

分频电路的仿真波形图如下:

 

4.2相位累加器和数据锁存器器电路

相位累加器是DDS系统设计的核心,它决定着频率的范围和分辨率。

本设计中采用的是24位的二进制累加器和寄存器,其中累加器与寄存器在同一个模块中,并取锁存数据的高十位作为查表的地址值。

Verilog程序如下:

//counter.v

modulecounter(clk,fre_word,address);

inputclk;

input[23:

0]fre_word;

outputreg[11:

0]address;

reg[23:

0]phaseadder;

always@(posedgeclk)

begin

phaseadder=phaseadder+fre_word;

address=phaseadder[23:

12];

end

endmodule

4.3波形存储器ROM的生成

在我们的程序中,波形存储器ROM是由VC++程序生成的,以*.mif文件的格式存放在电脑中,并可以被QuartusII调用。

程序及其原理简介如下:

#include

#include"math.h"

voidmain()

{ints;

inti;

FILE*fp;

fp=fopen("4096.mif","w+");//新建4096.mif文件,只写模式

fprintf(fp,"--MAX+plus-generatedMemoryInitializationFile\n");

fprintf(fp,"--ByDiandJie\n\n\n\n\n");//作者

fprintf(fp,"WIDTH=10;\n\n");//定义字宽

fprintf(fp,"DEPTH=4096;\n\n");//定义内存容量

fprintf(fp,"ADDRESS_RADIX=HEX;\n\n");//定义地址进制

fprintf(fp,"DATA_RADIX=HEX;\n\n");//定义内容进制

fprintf(fp,"CONTENTBEGIN\n");//内存开始

for(i=0;i<4096;i++)

{s=512+511*sin(i*atan(1.0)*8/4096);//512和511是为了最大的利用sinx小数点后面的有效内容,并将其调节为x轴上方的无符号数,4*atan(1.0)为π,再乘以2i除以4096是将sin的一个周期分为4096个值。

fprintf(fp,"%x\t:

\t%x;\n",i,s);}//Quartus调用*.mif文件时所需满足的格式

fprintf(fp,"END;\n");//内存结束

fclose(fp);

}

余弦波文件的生成与正弦波文件的生成是一样的,只是将公式改为{s=512+511*sin(i*atan(1.0)*8/4096+2*atan(1.0));当然,这样做只是为了简便编程者的操作,我们也可以将address的值加上4096/4之后进行寻址,便可以减少内存的使用。

4.4三角波及方波输出电路

由于方波只有高、低电平两种状态,因此只需要在一个周期时间的中间位置翻转电平就可以形成方波。

程序及其原理简介如下:

//fangbo.v

modulefangbo(clk,enable,address,qsquare);

inputclk;

inputenable;

input[11:

0]address;

outputreg[9:

0]qsquare;

always@(posedgeclk)

if(!

enable)qsquare=10'b00_0000_0000;

elsebegin

if(address<=12'b0111_1111_1111)

qsquare[9:

0]=10'b11_1111_1111;//利用address在中间位置实现翻转

elseqsquare[9:

0]=10'b00_0000_0000;

end

endmodule

三角波则是先判断出address的中间状态,然后将address或address的非赋给相应的输出,即可得到我们所需的三角波。

其verilog语言及原理简介如下:

//sanjiao.v

modulesanjiao(clk,enable,address,qtriangle);

inputclk,enable;

input[11:

0]address;

output[9:

0]qtriangle;

reg[9:

0]qtriangle;

always@(posedgeclk)

if(!

enable)qtriangle=10'b00_0000_0000;

elsebegin

if(address<=12'b0111_1111_1111)

qtriangle[9:

0]=address[10:

1];

elseqtriangle[9:

0]=~address[10:

1];//address的非与address一个递减一个递增,正好形成了三角波的一个周期。

end

endmodule

4.5波形的综合输出电路

有了三种波形,就要在特定时刻进行选择,在每一个时刻只能有一种波输出,在示波器上显示,所以用case语句写了一个选择性输出,程序如下:

//selection.v

moduleselection(clk,address,wavemode,wavevalue);

inputclk;

input[1:

0]wavemode;

input[11:

0]address;

output[9:

0]wavevalue;

reg[9:

0]wavevalue;

wire[9:

0]wavevalue1,wavevalue2,wavevalue3;

wire[9:

0]q;

supply1Vdd;

fangboU0(clk,Vdd,address,wavevalue2);

sanjiaoU1(clk,Vdd,address,wavevalue3);

sin_romU2(address,clk,q);

assignwavevalue1=q;

always@(posedgeclk)

case(wavemode)

2'b01:

wavevalue=wavevalue1;

2'b10:

wavevalue=wavevalue2;

2'b11:

wavevalue=wavevalue3;

endcase

endmodule

4.6状态机控制电路

状态机控制电路主要包括按键模块和工作模块两个部分,由于按键的有限性,状态机的利用大大的提高开关的利用率,使得我们0-200kHz频率任意切换的功能得以实现。

其verilog程序如下,思路清晰,使用简便,将在实验结果中具体介绍,也是本实验的亮点所在。

//control.v

modulecontrol(clk,keyin,wavemode,length);

input[3:

0]keyin;

inputclk;

outputreg[1:

0]wavemode;

outputreg[23:

0]length;

reg[23:

0]fredata;

reg[3:

0]key;

integersingle_state=1,single_frc=1;

always@(posedgeclk)

begin

key=keyin;

case(key)

4'b0001:

beginwavemode=2'b01;length=24'd17;end//key1-reset

4'b0010:

begincase(single_state)//key2-wavemode

1:

wavemode=2'b01;//sin

2:

wavemode=2'b10;//fangbo

3:

wavemode=2'b11;//sanjiao

default:

beginwavemode=2'b01;single_state=0;end

endcase

single_state=single_state+1;

end

4'b0100:

begincase(single_frc)//key3-frequencydangwei

1:

length=24'd17;//1Hz~100Hz

2:

length=24'd1678;//100Hz~500Hz

3:

length=24'd8389;//500Hz~1kHz

4:

length=24'd16777;//1kHz~5kHz

5:

length=42'd83886;//5kHz~10kHz

6:

length=24'd167772;//10kHz~50kHz

7:

length=24'd838861;//50kHz~200kHz

default:

beginlength=24'd671088;single_frc=0;end

endcase

single_frc=single_frc+1;

end

4'b1000:

begincase(single_frc)//key4-frequencybujin

1:

length=length+24'd16777;//1kHz

2:

length=length+24'd17;//1Hz

3:

length=length+24'd168;//10Hz

4:

length=length+24'd839;//50Hz

5:

length=length+24'd1678;//100Hz

6:

length=length+24'd8389;//500Hz

7:

length=length+24'd16777;//1kHz

8:

length=length+24'd83886;//5kHz

default:

length=length+24'd0;//0

endcase

end

endcase

end

endmodule

4.7状态机专用消颤电路

消颤电路时经常用到的一种电路,普通消颤电路以D触发器锁存并在时钟上升沿赋值为基础,原理简便,但并不适用于状态机电路。

状态机电路会在每一个时钟上升沿检测开关的0、1状态,如果高电平时间长(大于1us),将会导致其测试出无数个高电平而使得输出只能是循环的任意状态,或累加的最高状态。

状态机专用消颤电路,既继承了普通消颤电路忽略开关的颤的的功能,又使得开关按下后每0.5s才产生一个1us的微小脉冲,相当于状态机切换一个状态,使得状态机的功能得以全部实现。

以下为状态机专用消颤电路的verilog程序及原理简介:

//key.v

modulekey(clk,keyIN,keyOUT);

inputclk;

input[3:

0]keyIN;

output[3:

0]keyOUT;

reg[3:

0]keyOUT;

reg[19:

0]scan;

wire[3:

0]keyIN;

always@(posedgeclk)

if(scan==20'h7A120)//每50000个系统脉冲(合为0.5s)的持续1可输出一个1us的脉冲

beginkeyOUT<=keyIN;scan<=scan+1;end

elseif(scan==20'h7A121)

beginkeyOUT<=0;scan<=0;end

else

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

当前位置:首页 > 医药卫生 > 预防医学

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

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