当前位置:   article > 正文

FPGA-计时器的实现_fpga计时器代码

fpga计时器代码

一、基础知识

T=1/f

1.时间之间的换算:

   1s=1000ms

   1ms=1000us

   1us=1000ns

   1ns=1000ps

   1ps=1000fs

2.频率之间的换算

     1Ghz=1000Mhz

     1Mhz=1000Kz

     1khz=1000hz

例:计算50Mhz的周期T方式如下

T=1/f=1/50Mhz=1/50*10^6= 0.00000002 s*10^9=20ns

三、简单计算周期方法

1\x(Mhz) * 1000 = y(ns)

二、计时器实现

1.Design Source

  1. //time_top.v
  2. module time_top(
  3. input clk, //定义一个时钟信号输入
  4. input reset, //定义个一复位按钮
  5. output time_en //定义一个时间输出
  6. );
  7. reg [15:0]cnt_num=0; //建立一个16位的计数器
  8. always @(posedge clk) begin //若在时钟的上升沿,则运行该循环
  9. if (reset) begin
  10. cnt_num<=16'd0;
  11. end
  12. else if (cnt_num==299) begin
  13. cnt_num<=16'd0;
  14. end
  15. else begin
  16. cnt_num=cnt_num+16'd1;
  17. end
  18. end
  19. assign time_en = (cnt_num==16'd299)?16'd1:16'd0; //cnt_num是否等于预设值,若到则赋值1,否则赋值0
  20. endmodule

2.simulation Sources

  1. //TB_time_top
  2. module TB_time_top(
  3. );
  4. reg clk1;
  5. reg reset1;
  6. wire time_en1;
  7. initial begin //初始化各个信号
  8. clk1=0;
  9. reset1=1;
  10. #1000;
  11. reset1=0;
  12. end
  13. always #50 clk1=~clk1; //创建一个矩形波信号
  14. time_top inst_time_top( //实例化设计文件,该处函数名必须和设计文件中的函数名相同
  15. .clk(clk1),
  16. .reset(reset1),
  17. .time_en(time_en1)
  18. );
  19. endmodule

最终右键设置仿真器选择Questa

 若有错误,根据错误提示进行修改,一般有提示错误,基本上为代码问题,仔细检查

三、波形图

 

右键inst,将实例化的波形图添加到波形列表中,之后点击下图红圈内的Restart将波形图进行重置

 重置完成后,此时波形图为空,之后在下图命令框中输入run 10ms 让其程序跑10ms,之后查看inst_time_en中两个相邻的上升沿的波形图,若与预期一致,则说明该程序无错误,否则,查看时钟设置第模块,查找错误。

结果:两个time_en上升沿时间间隔与预期相同,此时说明结果正确

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

闽ICP备14008679号