首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我使用for循环时,如何修复推断闩锁错误?

当我使用for循环时,如何修复推断闩锁错误?
EN

Stack Overflow用户
提问于 2019-01-05 13:11:58
回答 1查看 511关注 0票数 0

我正在实现一个模块来计算输入向量中的‘1’的数量,并且无法修复推断锁存器错误。

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

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

代码语言:javascript
运行
复制
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

我没有通过合规考试。

EN

回答 1

Stack Overflow用户

发布于 2019-01-05 14:59:51

添加initial语句仅在时间0初始化变量一次。每次进入always块时都需要初始化,这样就不会引用以前的值。

代码语言:javascript
运行
复制
 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54049179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档