本帖最后由 fpgaw 于 2010-11-18 16:20 编辑
我的状态机碰到一个奇怪的问题,现在不清楚是不是状态机的问题
大虾们帮我看看
。。。
parameter Idle= 2'b00,
Wt_L= 2'b01,
Wt_S= 2'b10,
Svda= 2'b11;
always@(posedge clk)
if(!reset)begin
state <= Idle;
wr <= 0
end
else
case(state)
Idle: begin
if(!save_flag)
state <= Wt_L;
else
state <= Idle;
end
Wt_L: begin
if(!L) begin
state <= Wt_S;
wr <= ~wr;
end
elsestate <= Wt_L;
end
Wt_S: begin
if(save_flag)
state<= Svda;
else
state <= Wt_S;
end
Svda: begin
if(!save_flag)
state <= Wt_L;
else
state <= Svda;
end
endcase
end
。。。
其中save_flag 与wr 有关,只有在wr信号翻转后由外围电路产生。
状态机一开始正确,在循环了 n 次(n为不确定值)之后,就停在了状态 Wt_S,经查发现当L 由高电平变为低电平,状态 由Wt_L变为Wt_S ( state <= Wt_S )
但是示波器中观测到 wr 却没有翻转 ( wr <= ~wr ), 好像 wr <= ~wr 这句没有执行一样, 但是状态却是变了 state <= Wt_S
请教大家,是什么原因. |