关于状态机跑飞的问题
时间:10-02
整理:3721RD
点击:
我写了个状态机,大致如下
parameteridle=0;
state1=1;
state2=2;
state3=3;
state4=4;
state5=5;
state6=6;
state7=7;
......
always @(posedge mclk or negedge rst)
......
else
if(enable)
case(state)
idle: if(k==3) k=16;state=state1;
else k=k-1;
state1: if(k==2) k=16;state=state2;
else k=k-1;
state2: if(k==1) k=16;state=state3;
else k=k-1;
.....
state7: if(k==1) k=16;state=idle;
else k=k-1;
default: state=idle;
.....
其中enable信号是由每5个mclk到来,便产生一个高电平,维持1个mclk后变低。
这里的问题是,当运行一段时间后,状态机的状态就不再变化,每次只进state1到state7其中一个状态中(具体停在哪个状态是随机的)
如果修改位always @(posedge enable or negedge rst) 就不会出现这个问题了,大家觉得问题可能出在什么地方呢?小弟弄了很久,一直没找到原因,请大家帮帮忙,谢谢了。
parameteridle=0;
state1=1;
state2=2;
state3=3;
state4=4;
state5=5;
state6=6;
state7=7;
......
always @(posedge mclk or negedge rst)
......
else
if(enable)
case(state)
idle: if(k==3) k=16;state=state1;
else k=k-1;
state1: if(k==2) k=16;state=state2;
else k=k-1;
state2: if(k==1) k=16;state=state3;
else k=k-1;
.....
state7: if(k==1) k=16;state=idle;
else k=k-1;
default: state=idle;
.....
其中enable信号是由每5个mclk到来,便产生一个高电平,维持1个mclk后变低。
这里的问题是,当运行一段时间后,状态机的状态就不再变化,每次只进state1到state7其中一个状态中(具体停在哪个状态是随机的)
如果修改位always @(posedge enable or negedge rst) 就不会出现这个问题了,大家觉得问题可能出在什么地方呢?小弟弄了很久,一直没找到原因,请大家帮帮忙,谢谢了。
代码不完整也看不出来 问题出在你的状态转换上 你要查查 看看为什么状态转换的条件不符 可以用modelsim等软件单步调试一下 看看状态转换条件出了什么问题