DDS实现正弦波的输出Verilog_第1页
DDS实现正弦波的输出Verilog_第2页
DDS实现正弦波的输出Verilog_第3页
DDS实现正弦波的输出Verilog_第4页
DDS实现正弦波的输出Verilog_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、直接数字式频率合成器一一DDS>DDS原理:dds主耍由四部分组成,第一部分为相位累加器,用决定输出信号频率的范围和精度:第二部分为正弦函数功能表(波形存储器),用J存储经最化和离散后的正眩函数的幅值;第三部分为D/A转换,可产生所需的模拟信号;第四部分为低通滤波,用來减少屋化噪声'消除波形尖峰。参考频率源是一个高稳定度的晶体振荡器,它是用高稳定的固定时钟频率來对所要合成的信号进行相位取样的,单位时间内取样駅越大,则合成的频率越低。取样鼠的大小由可程控的频率设定数据决定。其工作过程为: 将存J-ROM中的数字波形,经数模转换器D/A,形成模拟起波形。 两种方法可以改变输出信号的频

2、率:(1)改变查表寻址的时钟频率,可以改变输出波形的频率。(2)改变寻址的步长來改变输出信号的频率。步长即为对数字波形查表的相位增駅。由累加器对相位増量进行累加,累加器的值作为査表地址。 D/A输出的阶梯形波形,经低通(带通)滤波,成为质崑符合需耍的模拟波形。DDS基本结构框图由上图所示可知。相位累加器是DDS的核心所在,它由一个加法器和一个位相位寄存器组成,每來一个时钟,相位寄存器以步长增加,相位寄存器的输出与相位控制字相加,然后输入到正弦查询表地址上。正眩查询表包含一个周期正弦波的数字幅度信息,每个地址对应正弦波中0-360°范围的一个相位点。査询表把输入的地址和位信息映射成正眩

3、波幅度的数字量信号,驱动DAC,输出模拟最。和位寄存器每经过2/M个fc时钟后回到初始状态,和应地正弦查询表经过一个循环回到初始位置,整个DDS系统输出一个正弦波。输出正眩波周期为To=Tc*2N/Mo最小分辨率为fo=fc/2"Na(N为累加器位宽,M为步长,Tc为时钟周期)>Verilog实现DDS产生正弦波/*顶层模块*/moduleddS_top(clk,sin_out,dac_en,dac_rst,dac.sync,clk_p,clk2);inputinputoutput15:0outputregoutputoutputoutputelk;clk2;sin_out;e

4、lk;dac_sync;dac_rst;dac_en;/AD时钟源/DA时钟源wire9:0outdata;2wire9:0wire/*wirewire3:0assigndac_en=/bl;/DA工作address;dds_bps;EN.sel;in_data;*/#assigndac_sync=l,bl;分频时钟给7005相位累加模块assigndac_rst=l'bl;always©(posedgeelk)beginclk_p<=clk_p;endassignaddress=out_data;ddsdds(.clk2(clk2),dds_bps(dds_bps),

5、/*.EN(EN), sei(sei), irvdata(idata),*/ out_data(out_data);/*dds_storeddsstoreCdds_bps(dds_bps),控制波形输出模块,仿真中用到,在测验中省略该模块 EN(EN), sei(sei), irvdata(irt_data);*/romroii(.clka(dds_bps),/ROM査找表模块,例化参数 addra(address), douta(sirvout);endmodule/*水相位累力|模块*/#moduledds(clk2,dds.bps/*,EN,sei,in_data*/,out.data)

6、;inputoutput9:0outputwire/*inputinput3:0clk2;out_data;dds.bps;EN,sei;in.data;*/3reg3:0con_fre=4,blO;reg3:0con_pha=rbOO;/reg12:0clk_cnt;regparameterparameterassigndds_bps_reg;para=6400;para_half=3200;dds_bps=dds_bps_reg;/DA时钟分频always©(posedgeclk2)#beginif(clk_cnt>=0)&&(clk_cnt<para

7、_half)beginclk_cnt<=clk_cnt+l,bl;dds_bps_reg<=l,bO;elseif(clk_cnt>=para_half)&&(clk_cnt<para)beginclk_cnt<=clk_cnt+l,bl;dds_bps_reg<=l,bl;endelseclk_cnt<=13,dO;end/相位累加reg9:0data_fre=10,bO;reg9:0out_data=10,bO;always©(posedgedds.bps)begindata_fre=data_fre+con_fre;ou

8、t_data=data_fre+conj)ha;end/频率控制字累加/相位控制字累加/*alvays0(posedgedds_bps)beginif(EN)begincase(sel)l'bO:con_fre<=in_data;l'bl:conpha<=in_data;设置频率/相位控制字参数endcaseendend*/endmodule/*控制波形输出模块(电路板调试中被省略)*/moduledds_store(dds_bps,EN,sei,in_data);inputdds_bps;outputEN,sel;outputin_data;regEN,sel;r

9、eg3:0in_data=4,bl;/reg9:0count=10,b0;always©(posedgedds.bps)/频率控制字和相位控制字参数设理beginif(count<10'd255)beginin_data<=4,blOl;endelsebeginir.data<=4,blOil;endendalways©(posedgedds_bps)beginif(count<10'd600)begincount<=count+10,dl;endelsebegincount<=10?dO;endend/reg6:0cnt

10、l=7,bO;reg5:0cnt2=6,bO;always©(posedgedds_bps)产生EN控制信号beginif(cntl<7,blOlO)beginEN<=1'b0;endelseif(ent1>=7*bl010)&&(ent1<7*bl00010)beginEN<=1,bl;endelseEN<=rbO;endalways©(posedgedds_bps)beginif(cntl<7,bllOOOOO)begincntl<=cntl+7,bl;endelsebegincntl<=7,

11、b0;endend/always©(posedgedds_bps)/产生sei控制信号beginif(ent2<6'bl1100)beginsel<=l'bO;endelsebeginsel<=l'bl;endendalways©(posedgedds_bps)beginif(cnt2<6'bl01100)begincnt2<=cnt2+6,bl;endelsebegincnt2<=6,bO;endend/endnoduleTestbench代码moduletestbench;/Irutsregelk;/O

12、utputsvire16:1sinout;/InstantiatetheUnitUnderTest(UUT)ddS_topuut(clk(clk),.sirvout(sirvout);initialbeginelk=0;#100;forever#8clk=clk;endEndmodule>仿真结果及分析:QC16tfeC1SJIfeC14JIfeC13JIgjC12JIgjCnJlifeCxojLfeEHLfeZLfeEl島g1城C3JQIfeCUWo让1<X>ss150ss图1:confi'e'bl口nnnnnnrnrnnnnnn_nOIL送JI1200=s

13、1250=»ijr|LrLnrnrniinnnnni-irn.rLJmilli_nnnnn_n_nnsRSmsLll1G5d22Illlllll9875432lc-rLrLrLrLrLrLrLrLrLrLrLrLrLrurLrLKin巴巫见础码础吗KI咼础咼咼咼码wgelkF8Vn_rirunKinjiwjrnmnnnnnnjiniLMiraM叩厂nwn_n_TLnjuIjTiirrnjiniuirxiniiMiiimiiimrLnj楓绷nrra楼LJWCTlTUiWJUIWIOW丄niFiawinnjjiHW幼ni呻口Biifflim沆tiHLmunjyiui由前而提到的输出正弦波

14、周期公式:To=Tc*2N/M可知,当相位累加器位宽为10,步长为1时,To=(1/9600)*210/1106.7ms,仿真中测得该正弦波周期约为105.5ms。图2:con_fre=4b,blOlTo二(l/9600)*2"10/5213ms。仿真测得周期为21.1mso通过chipscope获取的波形为BusPlotDEV:0MyDeviceO(XC6SLX150T)UNIT:0MylLAO(ILA)口”才冈Plot()datavstimeOdatavsdataDisplay1000line75CBusSelection.lsin_out50C25MinXaxX01023Y01

15、024Min/fvlaxi:02004006008001000总结 完成时间12.13-12.20前期:该阶段主要是熟悉DDS基本结构及其工作原理,掌握和认识DDST作过程。中期:在熟悉DDS的整体结构和工作原理之后,开始尝试编写代码,并结合matlab制作rom表数据。后期:进行波形仿真、chipscope调试及电路板上波形输出验证。 问题及分析正眩波的产生可以通过算法或査找ROM实现,实验中采用后者较为方便简洁。然而在这过程中遇到的最人问题在丁制作ROM査找表。在了解利用IP核生成ROM后开始制作ROM,但是编译后就出现cannotfind'ROM',检查后发现是生成的RO

16、M并没有直接添加到工程里面,还需手动添加一次。添加后编译依然出现无法找到'rom'的提示信息,经过一番网上搜索,依然无法解决,在群里问了一下,没人遇过这问题。后来,有一热心网友提到之前他用quartus的时候也遇到类似的问题,原因也是未知,后来她用其他版本的quartus就没出现这样的情况。经过一番分析讨论,我们总结出出现这一问题的两种可能:license的权限和软件的版本(包括软件安装)有问题。暂定出现error的源头后,我搜査了一下别人生成的rom中包含的所有文件,发现我生成的rom有很大一部分文件缺失,我又用quartus制作了一份ROM,对比一下,发现里面有一个重耍文件

17、,ROM.V在ISE中没有,该文件里面包含了一些重要信息特别是端口声明和初始化。我就先用quartus仿真了一遍,基本实现了我的预期耍求。之后我再尝试用ISE制作ROM,把做好的工程打包发给登江学长,用他电脑上的ISE软件制作ROM,编译就通过了,问题很明显软件本身有问题,是安装上还是权限上还需卞一步考证。slK1S0t-3£g;e484凹品aas_toPc:Mkiiog:ddsdds(C:WerilosKDLtnds2ROM-ROM(C:WerilogKDLmrddsZ/CreateDesxgnName:ModuleName:Therequired,fileRDfil.vfortK

18、eITcoreRDffl.xcowasnotfoundintKeIfcow©=o-ur-cIn£<»xsi.stoa-urtsxaccq=5EulLLy,yoxiwlIIneedtoeithercopythefileCsJtotheIPcoresourcedirectoryorjtu芳unuxr01uthucoitp.WwildyouLikucreat=tKeseEllassby:raEanawaAirig:haTPCoye*?8#CLick"Yun"toi-cgcrfcci-atetRisIPcovc:七o七©七heccssi-yc(s).Click"Ko"toskipreverteratior*ofthisIPcoronlyTRqRogcriuQ*-o-toAJ.1Conoupx-oca=sinF2-0JactHav£galor*c-clLzobauuodto:SAitomatettvereeenerat1ono£allcoresintheproject.ClielcA-boi-1*taa*i,thep1-0cassartdyetnyiitoP»-ojaalNavigatc*r*.aviga-#?/DidnotfindtheFunctiona

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论