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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7832|回复: 3

[求助] 脉冲计数器的verilog程序中一个输入信号无法起效

[复制链接]
发表于 2013-5-8 21:53:24 | 显示全部楼层 |阅读模式

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

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

x
我在做一个计数器,功能是计算每秒接收到的脉冲个数,通过八段数码管显示,使用的时钟是100MHz,接收的脉冲其频率远低于100MHz,代码如下:



  1. //在高频信号中读取低频脉冲;
  2. module pulse_counter(pulse,clk,rst_n,out1,out2,out3,out4,out5,di);
  3. output reg [7:0] out1,out2,out3,out4,out5;
  4. output wire [9:0] di;
  5. input pulse;
  6. input clk;
  7. input rst_n;
  8. reg        now=0;
  9. reg past;

  10. parameter num_0=8'b11100111;
  11. parameter num_1=8'b00100001;
  12. parameter num_2=8'b11001011;
  13. parameter num_3=8'b01101011;   
  14. parameter num_4=8'b00101101;   
  15. parameter num_5=8'b01101110;
  16. parameter num_6=8'b11101110;
  17. parameter num_7=8'b00100011;
  18. parameter num_8=8'b11101111;   
  19. parameter num_9=8'b00101111;   

  20. reg [7:0] num1,num2,num3,num4,num5;
  21. //reg  [7:0]out_1,out_2,out_3,out_4,out_5;
  22. reg [26:0]counter1; //每秒显示一次数字;  
  23. reg [16:0] counter2;//显示的数字;
  24. reg rst;
  25. //reg [26:0] reference=27'd0;//通过reference来判断是否在1s之内;

  26. assign di=10'd0;
  27. parameter range=27'd100000000;

  28. always @(posedge clk)
  29.         rst=rst_n;

  30. always @(posedge clk or negedge rst)
  31.         if(!rst)
  32.                 begin
  33.                 counter1=0;
  34.                 out1=num_0;
  35.                 out2=num_0;
  36.                 out3=num_0;
  37.                 out4=num_0;
  38.                 out5=num_0;
  39.                 end
  40.         else if(counter1<range-1)
  41.                 counter1=counter1+1;
  42.                 else
  43.                         begin
  44.                         num5=30000/10000;
  45.                                 num4=(30000-num5*10000)/1000;
  46.                                 num3=(30000-num5*10000-num4*1000)/100;
  47.                                 num2=(30000-num5*10000-num4*1000-num3*100)/10;
  48.                                 num1=30000-num5*10000-num4*1000-num3*100-num2*10;
  49.                                
  50.                                 case(num5)
  51.     0:  out5=num_0;
  52.     1:  out5=num_1;
  53.     2:  out5=num_2;
  54.     3:  out5=num_3;   
  55.     4:  out5=num_4;
  56.     5:  out5=num_5;
  57.     6:  out5=num_6;
  58.     7:  out5=num_7;
  59.     8:  out5=num_8;
  60.     9:  out5=num_9;   
  61. endcase

  62. case(num4)
  63.     0:  out4=num_0;
  64.     1:  out4=num_1;
  65.     2:  out4=num_2;
  66.     3:  out4=num_3;   
  67.     4:  out4=num_4;
  68.     5:  out4=num_5;
  69.     6:  out4=num_6;
  70.     7:  out4=num_7;
  71.     8:  out4=num_8;
  72.     9:  out4=num_9;   
  73. endcase

  74. case(num3)
  75.     0:  out3=num_0;
  76.     1:  out3=num_1;
  77.     2:  out3=num_2;
  78.     3:  out3=num_3;   
  79.     4:  out3=num_4;
  80.     5:  out3=num_5;
  81.     6:  out3=num_6;
  82.     7:  out3=num_7;
  83.     8:  out3=num_8;
  84.     9:  out3=num_9;   
  85. endcase

  86. case(num2)
  87.     0:  out2=num_0;
  88.     1:  out2=num_1;
  89.     2:  out2=num_2;
  90.     3:  out2=num_3;   
  91.     4:  out2=num_4;
  92.     5:  out2=num_5;
  93.     6:  out2=num_6;
  94.     7:  out2=num_7;
  95.     8:  out2=num_8;
  96.     9:  out2=num_9;   
  97. endcase

  98. case(num1)
  99.     0:  out1=num_0;
  100.     1:  out1=num_1;
  101.     2:  out1=num_2;
  102.     3:  out1=num_3;   
  103.     4:  out1=num_4;
  104.     5:  out1=num_5;
  105.     6:  out1=num_6;
  106.     7:  out1=num_7;
  107.     8:  out1=num_8;
  108.     9:  out1=num_9;   
  109. endcase
  110.                         counter1=0;
  111.                         end



  112. always @(posedge clk or negedge rst)
  113.         if(!rst)
  114.                 begin
  115.                         past=0;
  116.                         now=0;
  117.                 end
  118.         else
  119.         begin
  120.                
  121. //        if(!rst)
  122. //                counter2=0;
  123. //        else if(past==0&&now==1)
  124. //                counter2=counter2+1;
  125. //                else
  126. //                counter2=counter2;
  127.                 past=now;
  128.                 now=pulse;
  129.         end
  130.        
  131. always @(now)
  132.         if(!rst)
  133.                 counter2=0;
  134.                 else if(now==1&&past==0)
  135.                         counter2=counter2+1;
  136.                         else
  137.                                 counter2=counter2;
  138.                                

  139. endmodule


复制代码



但是警告如下:
WARNING - ngdbuild: logical net 'pulse' has no load
WARNING - map: IO buffer missing for top level port pulse...logic will be discarded.
从而使得在speedsheet view中缺少pulse这一项;

通过仿真,观察得到RTL图中根本就没有关于counter2的电路部分。


求指教!为什么会出现WARNING - ngdbuild: logical net 'pulse' has no load
发表于 2013-5-8 21:57:32 | 显示全部楼层
因为counter2没有load,逐级优化到源头就变成pulse没有load......
发表于 2013-5-9 09:32:01 | 显示全部楼层
2楼说得有道理。pulse只用在了counter2相关逻辑,但counter2既不是输出,又没有驱动任何其他逻辑,综合的时候会被优化掉。
 楼主| 发表于 2013-5-9 09:44:35 | 显示全部楼层
回复 2# Timme

是的,我将counter2设为output,就可以了。非常感谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-23 13:12 , Processed in 0.019813 second(s), 9 queries , Gzip On, Redis On.

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