Verilog一段错误代码分析

reg [3:0] Count_EN;
localparam PWen=4'd12;
always@(posedge CLK or negedge RST)
begin
  if(!RST)
    Count_EN<=0;
  else if(Count_EN==PWen)
    Count_EN<=0;
  else
    Count_EN<=Count_EN+1'b1;
end

此电路存在一个问题即:

Count_EN没有初始化值。

也就是说:当RST从一开始的时候就是1的话,即不满足条件一,Count_EN<=0不执行。那么Count_EN将一直处于不定态。于是else语句的加1操作相当于在一个不定态加1,得出的结果自然还是不定态。所以电路最终不能实现计数功能!

从仿真结果看:

counter_en_x

RST从一开始就是1,所以该电路不存在计数功能。

如果一开始RST为0,那么Count_EN将被初始化为0,电路的计数功能也自然能够工作。

counter_en_x1

解决办法:

解决办法就是初始化寄存器:reg [3:0] Count_EN=0;

http://stackoverflow.com/questions/10005411/assign-a-synthesizable-initial-value-to-a-reg-in-verilog

仿真结果如下:

counter_en

Verilog一段错误代码分析》上有4条评论

    1. Muggle 文章作者

      哈哈,谢谢。其实我不知道要写什么,就随便写了的。O(∩_∩)O

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注