你状态机的状态跳转有问题,不过你写的有点乱,我懒得详细看了。
debug的时候,可以根据波形看信号的跳转来检查。
给你贴一个比较规范的简单的状态机看看吧:
parameter FT_IDLE = 3'b001,
FT_TST = 3'b010,
FT_DOUT = 3'b100;
reg [2:0] FTSTSM, FTSTSMNXT;
always @(posedge BASE_CLK or negedge RESET) begin
if(~RESET)
FTSTSM <= FT_IDLE;
else
FTSTSM <= FTSTSMNXT;
end
always @(FTSTSM or TST_EN or TST_END_2Q) begin
FTSTSMNXT = FTSTSM;
case (FTSTSM)
FT_IDLE:
if(TST_EN)
FTSTSMNXT = FT_TST;
else
FTSTSMNXT = FT_IDLE;
FT_TST:
if(TST_END_2Q)
FTSTSMNXT = FT_DOUT;
else
FTSTSMNXT = FT_TST;
FT_DOUT:
FTSTSMNXT = FT_IDLE;
default:
FTSTSMNXT = FT_IDLE;
endcase
end
|