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”时,它们就被定位了。尽管我已经将“行计数器”的初始值设置为零,如下所示
initial
begin
rowcounter <= 1'b0;
end它仍然可以推断出闩锁。有什么替代办法来移除闩锁?
发布于 2014-03-31 11:05:45
组合块(always @*)将推断锁存是否保持状态。组合逻辑的输出一般由当前输入来定义。
在数字逻辑中,只有锁存、和触发器才能保持状态.因为你还没有定义触发器,你就有了锁存器。
触发器是通过使用always @(posedge clk)推断的,您也应该使用非阻塞赋值<=。
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
endhttps://stackoverflow.com/questions/22759193
复制相似问题