当前位置:   article > 正文

m基于FPGA的多功能信号发生器verilog实现,包含testbench,可以调整波形类型,幅度,频率,初始相位等_verilog查找表输出波形

verilog查找表输出波形

目录

1.算法仿真效果

2.算法涉及理论知识概要

2.1 DDS基本原理

2.2 波形参数调整

3.Verilog核心程序

4.完整算法代码文件获得


1.算法仿真效果

vivado2019.2仿真结果如下:

输出正弦,并改变幅度,频率等。

输出方波,并改变幅度,频率等。

输出锯齿波,并改变幅度,频率等。

输出三角波,并改变幅度,频率等。

2.算法涉及理论知识概要

       DDS(Direct Digital Synthesis,直接数字频率合成)技术是一种通过高性能数字计数器和查找表技术生成高精度、灵活可控的模拟信号的手段。DDS多功能信号发生器可以输出正弦波、方波、锯齿波、三角波等多种波形,并能够方便地调整波形类型、幅度、频率和初始相位。以下是DDS信号发生器的详细原理及其相关数学公式。

2.1 DDS基本原理

DDS信号发生器的核心部件包括高速累加器、波形存储器(查找表)和数模转换器(DAC)。

高速累加器:每次时钟周期,累加器都会将输入的频率控制字(Frequency Control Word, FCW)与前一周期的累加结果相加。频率控制字决定了输出信号的频率。

ACCUMULATOR:N(t)=N(t−1)+FCW

其中,N(t) 是在时间t 时刻的累加器输出,FCW 是频率控制字,决定了输出信号的频率。

波形存储器(查找表):累加器的输出值会被当作地址,用于查询预先存储在波形存储器中的幅度数据。对于正弦波,存储器中的数据是对正弦函数的离散采样;对于方波、锯齿波、三角波等其他波形,存储的是这些波形在固定区间内的离散值。

LUT:X[N(t)]

其中,X 是波形存储器,N(t) 作为地址,取出对应的幅度值。

2.2 波形参数调整

幅度调整:可以通过对波形存储器中的数据进行标度变换来调整输出信号的幅度。

其中,K 是幅度调整系数。

频率调整:通过改变频率控制字(FCW)可以调整输出信号的频率。

其中,fout​ 是所需的输出频率,fclk​ 是DDS的时钟频率,Nacc​ 是累加器的位数。

相位调整:相位调整通常是通过预加载累加器的方式来实现的,即在累加之前先加入一个初始值。

其中,ϕinit​ 是所需的初始相位,N(0) 是累加器的初始值。

       DDS多功能信号发生器利用高速累加器、波形存储器和数模转换器,通过调整频率控制字、波形存储器的内容以及累加器的初始值,可以灵活地生成各种波形,并精确控制其幅度、频率和初始相位。这项技术因其高度的灵活性和优异的频率分辨率,在通信、测量仪器、雷达、声纳等诸多领域有着广泛应用。

3.Verilog核心程序

  1. `timescale 1ns / 1ps
  2. //
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 2024/04/01 15:42:00
  7. // Design Name:
  8. // Module Name: TEST
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. module TEST();
  20. reg i_clk;
  21. reg i_rst;
  22. reg[1:0]i_sel;//信号选择00011011
  23. reg[7:0]i_amp;//调整幅度,设置1~16,小于8缩小,大于8放大,等于8不变
  24. reg[7:0]i_FK; //调整频率,1最慢,逐渐增加
  25. reg[13:0]i_phase;//初始相位
  26. wire signed[15:0]o_dout;
  27. tops uut(
  28. .i_clk (i_clk),
  29. .i_rst (i_rst),
  30. .i_sel (i_sel),//信号选择00011011
  31. .i_amp (i_amp),
  32. .i_FK (i_FK),
  33. .i_phase (i_phase),
  34. .o_dout (o_dout)
  35. );
  36. initial
  37. begin
  38. i_clk = 1'b1;
  39. i_rst = 1'b1;
  40. i_sel = 2'b11;
  41. i_amp = 5'd10;
  42. i_FK = 8'd1;
  43. i_phase = 14'd0;
  44. #1000
  45. i_rst = 1'b0;
  46. #500000
  47. i_amp = 5'd15;
  48. i_FK = 8'd4;
  49. end
  50. always #5 i_clk=~i_clk;
  51. endmodule
  52. 00_062m

4.完整算法代码文件获得

V

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/528415
推荐阅读
相关标签
  

闽ICP备14008679号