当我使用for循环时,如何解决推断出的闩锁错误?

时间:2019-01-05 05:11:58

标签: verilog

我正在实现一个模块,以对输入向量中的'1'进行计数,并且无法修复推断锁存器错误。

警告(10240):Verilog HDL始终在top_module.v(15)处构造警告:推断变量“ count”的锁存器,该变量在始终构造文件的一个或多个路径中保留其先前值:/ var /www/verilog/work/vlgaaQTZu_dir/top_module.v行:15 警告(10240):Verilog HDL始终在top_module.v(15)处构造警告:推断变量“掩码”的锁存器,该变量在始终构造文件的一个或多个路径中保留其先前值:/ var / www / verilog / work / vlgaaQTZu_dir / top_module.v行:15

我试图在if语句后的for循环中添加一个else表达式,并且还添加一个初始语句来初始化count和mask的值。

module top_module( 
    input [254:0] in,
    output [7:0] out );

    wire [7:0]count;
    wire [254:0]mask;

    initial begin 
    count = 8'h0;
    mask = 255'h1;
    end 

    always @(*)
    begin
        for(int i = 0; i < 255; i = i + 1)
            begin
                if(in & mask)
                  begin
                    count = count + 1;
                    mask = mask << 1;
                  end
                else
                  begin
                    count = count;
                    mask = mask;
                  end
            end
      out = count;
    end

endmodule

我没有通过合规。

1 个答案:

答案 0 :(得分:0)

添加initial语句仅在时间0初始化一次变量。每次输入Always块时都需要进行初始化,因此您永远都不会引用以前的值。

 always @(*)
    begin
        count = 8'h0;
        mask = 255'h1;
        for(int i = 0; i < 255; i = i + 1)
            begin
                if(in & mask)
                  begin
                    count = count + 1;
                    mask = mask << 1;
                  end
            end
      out = count;
    end