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

从F到0 - From F to 0

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

Quartus Verilog HDL/FPGA 调用状态机时钟延时模块的实例化 实现输出1HZ信号与LED闪烁

[复制链接]
发表于 2023-7-13 17:42:37 | 显示全部楼层 |阅读模式
main.png
  1. module delay_clk(                        //状态机时钟延时模块
  2.         input clk,                                //时钟输入
  3.         input [31:0] delay,        //延时时钟数 1Mhz延时1us 50Mhz延时20ns 以此类推
  4.         input start,                        //上升沿 开始执行延时
  5.         output reg stop                //延时结束 发出上升沿 并将start拉低
  6. );
  7. reg [31:0] timer = 32'd0;
  8. reg [1:0] state = 2'd0;
  9. initial stop = 1'b0;
  10. always @(posedge clk) begin
  11.         case(state)
  12.                 2'd0:begin                        //状态0
  13.                         stop <= 1'b0;
  14.                         if(start) begin
  15.                                 timer <= delay;
  16.                                 state <= 2'd1;
  17.                         end else begin
  18.                                 state <= 2'd0;
  19.                         end
  20.                 end
  21.                        
  22.                 2'd1:begin                        //状态1
  23.                         if(|timer) begin
  24.                                 timer = timer - 32'd1;
  25.                                 state <= 2'd1;
  26.                         end else begin
  27.                                 state <= 2'd2;
  28.                         end
  29.                 end
  30.                        
  31.                 2'd2:begin                        //状态2
  32.                         stop <= 1'b1;
  33.                         state <= start ? 2'd2 : 2'd0;
  34.                 end
  35.                        
  36.                 default:begin                //其他状态
  37.                         state <= 2'd0;
  38.                 end
  39.         endcase
  40. end
  41. endmodule


  42. module main(
  43.         input clk,                                //50Mhz Pin17
  44.         output reg led                        //LED(低电平点亮) Pin3
  45. );
  46. reg start = 1'b0;
  47. wire stop;
  48. reg [31:0] delay;

  49. delay_clk delay_clk(
  50.         .clk(clk),
  51.         .delay(delay),
  52.         .start(start),
  53.         .stop(stop)
  54. );

  55. reg [1:0] state = 2'd0;
  56. always @(posedge clk) begin
  57.         case(state)
  58.                 2'd0:begin                        //状态0
  59.                         delay <= 25000000;
  60.                         state <= 3'd1;
  61.                 end
  62.                
  63.                 2'd1:begin                        //状态1
  64.                         start <= 1'b1;
  65.                         state <= 3'd2;
  66.                 end
  67.                        
  68.                 2'd2:begin                        //状态2
  69.                         state <= stop ? 3'd3 : 3'd2;
  70.                 end
  71.                
  72.                 2'd3:begin                        //状态3
  73.                         start <= 1'b0;
  74.                         led <= !led;
  75.                         state <= 3'd0;
  76.                 end
  77.         endcase
  78. end

  79. endmodule
复制代码

相关帖子

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

本版积分规则

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

腾讯云安全认证

GMT+8, 2024-4-28 02:41 , Processed in 1.180068 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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