设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 706|回复: 0
收起左侧

Quartus Verilog HDL/FPGA 实现 超声波扫频信号发生器 20000Hz~100000Hz 改进版

[复制链接]
发表于 2022-11-15 17:30:37 | 显示全部楼层 |阅读模式
此程序没有除法运算,与 /thread-3964-1-1.html 使用的算法不同。
上电后从20KHz开始扫频,加到100Khz再减回去,以此类推。

main.png
  1. module clk_div5(                        //时钟5分频模块
  2.         input in,
  3.         output reg out
  4. );
  5. reg Q = 1'b0;
  6. wire x2 = Q ^ in;
  7. reg [2:0] i = 1'b0;
  8. always @(posedge x2) begin
  9.         Q <= !Q;
  10.         i = i + 1'b1;
  11.         if(i >= 5) begin
  12.                 i = 1'b0;
  13.                 out = !out;
  14.         end
  15. end
  16. endmodule

  17. module clk_div(                        //时钟分频模块 输出频率=输入频率/分频因子/2
  18.         input clk,                                //时钟输入
  19.         input [7:0] div,                //分频因子
  20.         output reg out                        //分频输出
  21. );

  22. reg [7:0] i;
  23. initial begin
  24.         i = 1'b0;
  25.         out = 1'b1;
  26. end

  27. always @(posedge clk) begin
  28.         i = i + 1'b1;
  29.         if(i >= div) begin
  30.                 i = 0;
  31.                 out <= !out;
  32.         end
  33. end
  34. endmodule


  35. module main(
  36.         input clk,                        //50Mhz 板载时钟输入 Pin17
  37.         output out                        //扫频信号输出 20Khz~100Khz Pin40
  38. );

  39. wire clk_10Mhz;
  40. clk_div5 clk_div5(       
  41.         .in(clk),                        //50Mhz输入
  42.         .out(clk_10Mhz)        //10Mhz输出
  43. );

  44. reg [7:0] div;                //分频因子 (值越小频率越高)
  45. reg ab;                                //1:因子增加(频率减小) 0:因子减小(频率增加)
  46. initial begin
  47.         ab = 1'b0;
  48.         div = 8'd250;        // 10000000/250/2=20000Hz
  49. end

  50. clk_div clk_div(
  51.         .clk(clk_10Mhz),
  52.         .div(div),
  53.         .out(out)
  54. );

  55. reg [19:0] z;                //扫频频率步进分频寄存器
  56. always @(posedge clk_10Mhz) begin
  57.         z <= z + 1;
  58. end

  59. always @(posedge z[19]) begin
  60.         div = ab ? (div + 1'b1) : (div - 1'b1);
  61.         if(div == 50 || div == 250) begin
  62.                 ab <= !ab;
  63.         end
  64. end
  65. endmodule
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-30 10:53 , Processed in 0.947054 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表