首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除verilog推断锁存(递增寄存器)

删除verilog推断锁存(递增寄存器)
EN

Stack Overflow用户
提问于 2014-03-31 10:26:55
回答 1查看 1.4K关注 0票数 0
代码语言:javascript
复制
always @(state) 
     begin
          case (state)
               zero:
                    rowcounter = 1'b0;
               one:
                    rowcounter = 1'b0;
               two:
                    rowcounter = rowcounter + 1'b0;
               three:
                    rowcounter = rowcounter + 1'b1;
               default:
                    rowcounter = 1'b0;
          endcase
     end

基本上,当state =2时,我希望“行计数器”保留其当前值,而如果state = 3,则希望“行计数器”增加。

在合成上述代码时,我遇到了问题,它说存在推断锁存。我跟踪了锁存器,当状态为“2”或“3”时,它们就被定位了。尽管我已经将“行计数器”的初始值设置为零,如下所示

代码语言:javascript
复制
initial
begin
rowcounter <= 1'b0;
end

它仍然可以推断出闩锁。有什么替代办法来移除闩锁?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-31 11:05:45

组合块(always @*)将推断锁存是否保持状态。组合逻辑的输出一般由当前输入来定义。

在数字逻辑中,只有锁存、触发器才能保持状态.因为你还没有定义触发器,你就有了锁存器。

触发器是通过使用always @(posedge clk)推断的,您也应该使用非阻塞赋值<=

代码语言:javascript
复制
always @(posedge clk) begin
  case (state)
    zero:  rowcounter <= 1'b0;
    one:   rowcounter <= 1'b0;
    two:   rowcounter <= rowcounter + 1'b0;
    three: rowcounter <= rowcounter + 1'b1;
    default: rowcounter <= 1'b0;
  endcase
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22759193

复制
相关文章

相似问题

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