在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4535|回复: 19

[求助] 用verilog写计数器

[复制链接]
发表于 2013-12-15 10:09:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我想对一个具有不同高电平长度的矩形波进行计数,比如先是50ns的低电平,然后是1000ns的高电平,然后是50ns的低电平,然后是500ns的高电平,后面又是低电平,怎样写代码,实现对1000ns和500ns的分别计数?
发表于 2013-12-15 22:04:38 | 显示全部楼层
可以计时呀 不同电平的保持时间不同  然后由计时的信号计数
发表于 2013-12-15 22:27:57 | 显示全部楼层
如2楼所说,先设置一个有使能的ns级计数器,当矩形波的上升沿一到来,就给计数器一个使能信号使其计时,然后当矩形波下降沿一到来,就关闭计数器,这样就明显了!
发表于 2013-12-16 22:16:31 | 显示全部楼层
类似开关一样计数嘛
发表于 2014-3-31 10:50:38 | 显示全部楼层
路过同求啊
发表于 2014-3-31 18:21:18 | 显示全部楼层
路过,同问,在做课设
发表于 2014-4-4 10:39:09 | 显示全部楼层
是只有1000ns和500ns宽度的高电平出现吗?
发表于 2014-4-4 14:09:41 | 显示全部楼层
本帖最后由 mqlitong 于 2014-4-5 20:51 编辑

写个小程序,仅供参考一下

补充说明一下,仿真时clk为50MHz信号






  1. module counter(
  2.                                         clk,
  3.                                         signal,
  4.                                         rst_n,
  5.                                         o_signal//for test
  6.                                         );
  7.                                        
  8. input clk;
  9. input signal;
  10. input rst_n;

  11. //for test
  12. output o_signal;
  13. assign o_signal = signal;

  14. reg signal_reg;
  15. wire signal_wire;
  16. assign signal_wire = signal_reg;

  17. reg[7:0] count;
  18. reg[31:0] cnt_1;
  19. reg[31:0] cnt_2;

  20. always@(posedge clk or negedge rst_n)
  21. begin
  22.         if (!rst_n)
  23.         begin
  24.                 count <= 8'd0;
  25.                 cnt_1 <= 32'd0;
  26.                 cnt_2 <= 32'd0;
  27.         end
  28. end

  29. always@(posedge clk)
  30.         signal_reg <= signal;

  31. always@(posedge clk)
  32. begin
  33.         if (signal_reg == 1)
  34.                 count <= count + 1'b1;
  35.         else
  36.                 count <= 8'b0;
  37. end

  38. always@(negedge signal_wire)
  39. begin
  40.         if ((count == 8'd50) && (!signal_wire))
  41.                 cnt_1 <= cnt_1 + 1'b1;
  42.         else if ((count == 8'd25)  && (!signal_wire))
  43.                 cnt_2 <= cnt_2 +1'b1;
  44.         else ;
  45. end

  46. endmodule


复制代码



有仿真如下:

ISE软件仿真

ISE软件仿真

发表于 2014-4-4 14:10:50 | 显示全部楼层
回复 5# Arvinliu


   下面有个小程序,可以参考一下
发表于 2014-4-4 19:04:27 | 显示全部楼层
回复 9# mqlitong


   45-52行是什么意思?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-14 10:53 , Processed in 0.022992 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表