[工学]EDA课件第四章改.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]EDA课件第四章改

频率计的顶层主程序 module top(sel, fb_in, fs_in, fx_in, clear, Ns, Nx ); ? input [1:0] sel; input fb_in; input fs_in; input fx_in; input clear; output [19:0] Ns; output [19:0] Nx; reg tp,fstemp; tp_generator u0( .clk(fb_in), .tp(tp), .sel(sel) ); fs_generator u1( .clk(fs_in), .fs_out(fstemp), .sel(sel) ); measure u2( .fx_in(fx_in), .fs_in(fstemp), .tp(tp), .clear(clear), .Ns(Ns), .Nx(Nx) ); endmodule 4.8 数字信号发生器的原理及设计 4.8.1 数字信号发生器(DDS)的原理 工作原理是以数控振荡器的方式产生频率、相位可控制的不同波形,用DDS实现的信号发生器电路主要包括时基电路、相位累加器、波形发生器、d/A转换器和滤波器。 每来一个时钟脉冲Fclk,n位加法器将频率控制数据X与累加寄存器输出的累加相位数据相加,把相加后的结果Y送至累加寄存器的输入端。累加寄存器一方面将在上一时钟周期作用后所产生的新的相位数据反馈到加法器的输入端,以使加法器在下一时钟的作用下继续与频率控制数据X相加;另一方面将这个值作为取样地址值送入波形存储器,波形存储器根据这个地址输出相应的波形数据。最后经D/A转换器和滤波器将波形数据转换成所需要频率的模拟波形。相位累加器在基准时钟的作用下,进行线性相位累加,当相位累加器加满量程时就会产生一次溢出,这样就完成了一个波形周期。 存在问题是单个周期的数据抽样越少,会在一定程度上降低输出信号的平滑度。若要产生低频信号时,单个周期的数据抽样太多,会浪费波形存储器的存储空间。 改进后的DDS控制器结构框图 仍然用相位累加器作为频率控制电路,但是不输出其累加结果,而是输出其累加溢出信号,即相位累加器每溢出一次,就在Fout输出一个脉冲。其频率为: 其中n为相位累加器的位宽,X为输入频率控制数据数值 在波形发生器中,用Fout作为地址发生器的时钟输入脉冲。在每个周期的数据抽样点M数目固定的条件下,可以得到的输出信号频率为: 其中M为单周期的数据抽样点数目 4.8.2 数字信号发生器(DDS)的Verilog HDL 描述 顶层文件结构图 相位累加器(宽度为16位)在时基脉冲clk的控制下对频率控制数据x(15:0)进行累加,累加器每溢出一次,在clk_out输出一个脉冲,其频率为: 其中X为频率控制数据x(15:0)所对应的数值 波形数据存储单元中分别存储了正弦波、方波和三角波的数据。这些波形数据用以计数频率为fclk_out的地址发生器读出,然后根据波形选择控制信号sel(1:0)的状态选择一种波形数据输出。 由波形数据存储单元输出的波形数据直接输出到D/A转换器中,经过D/A转换和滤波器就可以获得所需要的波形。 参考程序 相位累加器模块 module fre_control (clk, load, x, clk_out ); input clk; input load; input [15:0] x; output clk_out; reg clk_out_buffer; reg [16:0] reg0; reg [16:0] regt; assign clk_out=clk_out_buffer; always@(posedge clk or posedge load) begin if (load==1b1) regt={1b0,x}; else begin reg0=reg0+regt; if(reg0[16]==1b1) begin clk_out_buffer=1‘b1; reg0=16b0; end else clk_out_buffer=1b0; end end endmodule 正弦波发生器模块 module gen_sin(clk, d ); input clk; output [7:0] d; reg [7:0] d_buffer; reg [5:0] temp; assign d=d_buffer; always@(posedge clk) begin if(temp==6d63) temp=6d0; else temp=temp+6d1; case(temp) 6d0:d_buffer=8d255;

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档