FPGA|CPLD|ASIC论坛
直播中

张国龙

4年用户 94经验值
擅长:存储技术 控制/MCU
私信 关注

求助大佬解惑这两段verilog代码区别,感觉功能一样,但是实际一个有输出一个没输出,万分感谢您的解答!

` 本帖最后由 hanareuok 于 2021-7-26 16:25 编辑

代码1:TM无递增,一直保持0
  1. always @(posedge CLK_10M or negedge RST)
  2. begin
  3.   if(RST==1'b0)
  4.   TM<=12'd0;
  5.   else if(CLK_10M==1'b1)
  6.    begin
  7.     if(TM==12'd1000)
  8.      TM<=12'd0;
  9.     else
  10.      TM<=TM+1'b1;
  11.    end
  12. end

代码2:TM递增正常
  1. always @(posedge CLK_10M or negedge RST)
  2. begin
  3.   if(RST==1'b0)
  4.    TM<=12'd0;
  5.   else if(TM==12'd1000)
  6.    TM<=12'd0;   
  7.   else
  8.    TM<=TM+1'b1;
  9.   end
代码目标实现在10M频率下TM递增到1000后重新递增。
代码1TM一直保持0,代码2保持递增正常。通过quartus和modelsim中仿真代码1结果正常,但是代码1在ISE中下载到xilinx的FPGA中最终实际输出不正确。
请教各位这是什么原因呢,verilog语句有问题吗?万分感谢您的解答!!!


` 无标题.png

回帖(2)

卿小小_9e6

2021-7-26 12:12:56

最佳答案

我在vivado仿真,两段代码的TM值是同步的。
//------建议
就编码方式而言,不推荐第一种,即用时钟检测时钟自身。
//------其他
第一段代码最后少了一个end,不确定是否还少其他内容。
1 举报
  • 张国龙: 首先感谢您的解答,end源代码有忘记加了,已修改。您的解答和建议很有帮助,再次感谢!

wuyan101

2021-7-27 11:05:06
第一种仿真可以,不适合硬件实现
举报

更多回帖

发帖
×
20
完善资料,
赚取积分