当前位置:   article > 正文

【FPGA入门】简单计时器实现_fpga简易计时器

fpga简易计时器

一、准备工作:

有关Quartusii的初始化配置,参见我的另一篇blog:【FPGA入门】QuartusII初始化配置

二、所用工具:

芯片:10CL006YU256C8G

三、实现功能:

实现数码管从0-60计数显示

四、思路分析:

输入为50Mhz的时钟信号,一分为二,一份经PLL分频后输出到位选段选信号源CNT2,从而输出个位十位选择控制信号到位选段选输出口。

另一份到CNT60将信号源转为M=60的计数器模块,并拆分为十位个位输出到段选数据输入模块,再通过译码器实现显示

五、Quartusii配置:

1、PLL时钟分频设置

从50Mhz分频为2000Hz

2、位选段选信号源CNT2模块

  1. module CNT2(CLK,Q);
  2. input CLK;
  3. output Q;
  4. reg Q1;
  5. assign Q=Q1;
  6. always @(posedge CLK) begin
  7. Q1 <=Q1+1; end
  8. endmodule

3、位选控制器ECODE模块

  1. module ECODE(CD,SG);
  2. input CD;
  3. output [7:0]SG;
  4. reg [7:0]SG;
  5. always @(CD) begin
  6. case (CD)
  7. 1'b0: SG<=8'B11111110;
  8. 1'b1: SG<=8'B11111101;
  9. endcase
  10. end
  11. endmodule

4、分频M=60计数模块

  1. module CNT60(CLK,RST,Q);
  2. input CLK,RST;
  3. output [7:0]Q;
  4. reg [7:0]Q1;
  5. assign Q[7:4]=Q1/10;
  6. assign Q[3:0]=Q1%10;
  7. localparam M=60;
  8. reg [24:0] clk_cnt;
  9. reg clk_one;
  10. always @(posedge CLK or negedge RST)begin
  11. if(!RST)
  12. clk_cnt <= 25'b0;
  13. else if (clk_cnt<25000000-1'b1)
  14. clk_cnt <= clk_cnt+1'b1;
  15. else
  16. clk_cnt <= 25'b0;
  17. end
  18. always @(posedge CLK or negedge RST)begin
  19. if(!RST)
  20. clk_one <= 1'b0;
  21. else if(clk_cnt==2500000-1'b1)
  22. clk_one <=~clk_one;
  23. else
  24. clk_one <=clk_one;
  25. end
  26. always @(posedge clk_one or negedge RST)begin
  27. if(!RST)
  28. Q1=8'b0;
  29. else if(Q1<M-1'b1)
  30. Q1=Q1+1'b1;
  31. else
  32. Q1=8'b0;
  33. end
  34. endmodule

5、段选信号数据选择器模块

  1. module MUXA(A,B,S,Y,DP);
  2. input [3:0]A,B;
  3. input S;
  4. output reg [3:0] Y;
  5. output reg DP;
  6. always @(A,B,S) begin
  7. if (S==1'B0) begin Y=A; DP=1; end
  8. else begin Y=B; DP=1; end
  9. end
  10. endmodule

6、译码器DEC6模块

  1. module DEC6(A,LED7);
  2. input [3:0]A;
  3. output reg [6:0] LED7;
  4. always @(A) begin
  5. if(A==4'B0000) LED7=7'B1000000;
  6. else if(A==4'B0001) LED7=7'B1111001;
  7. else if(A==4'B0010) LED7=7'B0100100;
  8. else if(A==4'B0011) LED7=7'B0110000;
  9. else if(A==4'B0100) LED7=7'B0011001;
  10. else if(A==4'B0101) LED7=7'B0010010;
  11. else if(A==4'B0110) LED7=7'B0000010;
  12. else LED7=7'B1000000;
  13. end
  14. endmodule

六、源码提供:

【免费】【FPGA入门】简单计时器实现

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

闽ICP备14008679号