verilog高手看看我的reg变量判断为啥第二种写法编译报错呢?

2020-01-26 17:30发布

  1.   reg [31:0]Count;
  2.   //写法1:正确
  3.   always@(posedge sys_clk50,negedge rst_n) begin
  4.     if(!rst_n) begin
  5.       Count <=32'd0;
  6.     end
  7.     else begin
  8.       Count <=Count+1;
  9.       if(Count >= 5000) begin //写法正确
  10.         Count <=0;
  11.       end
  12.     end
  13.   end
  14.   
  15.   //写法2:编译报错
  16.   always@(posedge sys_clk50,negedge rst_n) begin
  17.     if(!rst_n) begin
  18.       Count <=32'd0;
  19.     end
  20.     else begin
  21.       Count <=Count+1;
  22.     end
  23.     //-------------------------编译报错
  24.     if(Count >= 5000) begin
  25.       Count <=0;
  26.     end
  27.   end
复制代码

verilog刚学,,不太明白,报错的提示也不理解,谢谢先
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
(⊙o⊙)你
2020-01-28 12:55
本帖最后由 (⊙o⊙)你 于 2019-9-19 16:24 编辑
(⊙o⊙)你 发表于 2019-9-18 14:02
嗯,我的第一种和他的写法的效果是一样的,刚才仿真了,波形和rtl图都一样,但是我的那个写法不建议写, ...

想明白了,,直接看RTL图就全部明白了
1、第一次时不满足条件条件,所以没有清0,第二次满足了条件,故清了
2、并行执行

详情见下图
222.png

一周热门 更多>