关于组合逻辑产生latch的一段代码,请大家帮忙分析
时间:10-02
整理:3721RD
点击:
写一个状态机次态转移的组合逻辑,其中有含有nextstate = nextstate;的代码,请大家帮忙看下,是否会产生latch?如果是的话,需要怎么改进?谢谢
always @ (state,nextstate,state_tran_1,state_tran_2) begin
case (state)
3'b000 : nextstate = 3'b001;
3'b001 : if (state_tran_1 == 1'b1) begin
nextstate = 3'b010;
end
else begin
nextstate = nextstate;
end
3'b010 : if (state_tran_2 == 1'b1) begin
nextstate = 3'b011;
end
else begin
nextstate = nextstate;
end
3'b011 : if (state_tran_1 == 1'b1) begin
nextstate = 3'b100;
end
else begin
nextstate = nextstate;
end
3'b100 : if (state_tran_2 == 1'b1) begin
nextstate = 3'b001;
end
else begin
nextstate = nextstate;
end
default: nextstate = 3'b000;
endcase
end
always @ (state,nextstate,state_tran_1,state_tran_2) begin
case (state)
3'b000 : nextstate = 3'b001;
3'b001 : if (state_tran_1 == 1'b1) begin
nextstate = 3'b010;
end
else begin
nextstate = nextstate;
end
3'b010 : if (state_tran_2 == 1'b1) begin
nextstate = 3'b011;
end
else begin
nextstate = nextstate;
end
3'b011 : if (state_tran_1 == 1'b1) begin
nextstate = 3'b100;
end
else begin
nextstate = nextstate;
end
3'b100 : if (state_tran_2 == 1'b1) begin
nextstate = 3'b001;
end
else begin
nextstate = nextstate;
end
default: nextstate = 3'b000;
endcase
end
有个插入代码的功能,怎么不用上啊,怎么不用上啊……
将所有nextstate = nextstate;替换成nextstate = state;即可
ps: 将状态机分开两段写没什么特别的好处,都是十几年前的老规定了(当时是方便古老的综合器识别),大可以写在一段里,新手不容易写错。
楼上正解,顶一个!
3楼正解
谢谢~!
