微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 计数器在程序初始阶段就+1,究竟是什么原因呢

计数器在程序初始阶段就+1,究竟是什么原因呢

时间:10-02 整理:3721RD 点击:
本人编写的一个fpga发送预定频宽的高电平,当数据准备完毕data_ready=1,模块使能信号shitong_EN=1,之后,发出shitong_sig 信号脉冲,即shitong_sig 信号置1,同时计数器cnt0开始计数,当计数值到达指定的PW0时,shitong_sig 就清零,从而能够发出一个指定宽度的脉冲。程序代码如下:

  1. always @ (posedge clk or negedge rst_n) begin
  2. if(!rst_n) begin
  3. cnt0 <= 8'b0;
  4. shitong_sig<= 1'b0;
  5. delay_EN<= 1'b0;
  6. end

  7. else begin
  8. if (rst_soft) begin
  9. cnt0 <= 8'b0;
  10. shitong_sig<= 1'b0;
  11. delay_EN<= 1'b0;
  12. end
  13. else begin
  14. if(data_ready) begin
  15. if(shitong_EN) begin
  16. if(cnt0 < PW0) begin//一旦全局使能开始,数据准备完毕,开始发波
  17. shitong_sig <= 1'b1;
  18. delay_EN <= 1'b1;
  19. cnt0 <= cnt0+1'b1;
  20. end
  21. if(cnt0 == PW0[7:0]) begin
  22. shitong_sig<= 1'b0;
  23. cnt0<=cnt0+1'b1;
  24. delay_EN <= 1'b1;
  25. end
  26. if(cnt0 > PW0[7:0]) begin
  27. shitong_sig<= 1'b0;
  28. delay_EN <= 1'b1;
  29. cnt0<=cnt0;
  30. end
  31. end
  32. end
  33. end
  34. end
  35. end
  36. endmodule//08.16

复制代码


但是我在用逻辑分析仪时,发现程序一运行,cnt0 自动+1了,如图:


而在modelsim功能仿真时没有出现这个情况,


求大神指点迷津啊。

明显PW0信号变化导致cnt动作了



    在modelsim里面是正常的,PW0达到预定值,信号跳变,可是在板调试时,也就是用signaltap  ii 调试时,PW0还是0的时候,使能也为0 他就自动+1了,这不干PW0的事儿啊

注意看signaltapII 的仿真结果图,PW0还没跳变之前,cnt0就已经是1了,百思不得其解啊



    找到原因了,原来是我在modelsim之后新加的模块导致的,我来改改试试看,坑爹啊

复位信号处理的很怪异。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top