返回信息流用Verilog写了个程序,仿真发现变状态的时候有可能变成Undefined,然后肯定状态机就死机了,输入啥都没反应了。case语句中的default也写了,为什么会出现Undefined,那代表个什么问题。跪求教育
这是一条镜像帖。来源:北邮人论坛 / circuit / #18427同步于 2011/9/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
关于Verilog,状态机死机的问题
yy2651592
2011/9/23镜像同步23 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
有default 应该不会有啥问题啊,不过建议状态搞成同步电路,最好不要使用异步,如果使用异步,状态编码最好用格雷码,一次变一个,出错的概率会小很多
代码不长的可以贴出来看看
【 在 yy2651592 的大作中提到: 】
: 用Verilog写了个程序,仿真发现变状态的时候有可能变成Undefined,然后肯定状态机就死机了,输入啥都没反应了。case语句中的default也写了,为什么会出现Undefined,那代表个什么问题。跪求教育
: --
【 在 leonzyz 的大作中提到: 】
: 代码不长的可以贴出来看看
: 【 在 yy2651592 的大作中提到: 】
: : 用Verilog写了个程序,仿真发现变状态的时候有可能变成Undefined,然后肯定状态机就死机了,输入啥都没反应了。case语句中的default也写了,为什么会出现Undefined,那代表个什么问题。跪求教育
: ...................
贴了一下代码,死机总是发生在S0到S1的状态的,我把其他状态的一些代码隐藏了,应该还是S0那里的写法有问题,完整的在附件里。
always@(posedge clk)
begin
if (rst == 1'B1)
begin
dat <= 8'B0;//这几个属于寄存器之类的东西
dat_temp <=100'B0;
state <= S0;
end
else
begin
case(state)
S0://wait for ask signal and probe the pins
begin
if(ask == 1'B0)
begin
state <= S1;
byte_num <=4'B0;
dat_shift <= 1'B1;
end
else
begin
dat_temp <= pin;
dat <= 8'B0;
dat_shift <= 1'B0;
state <= S0;
end
end
S1://shift date and send stb after delay
begin
if(dat_shift == 1'B1)//这个是等待别的模块返回个信号
begin
case(byte_num)
endcase
state <= S2;
end
else
begin
state <= S1;
end
end
S2:
begin
if(ack == 1)
begin
stb <= 1'B0;//这几个是控制别的模块的
dat_shift <= 1'B1;
if(byte_num == 4'B1101)
begin
state <= S0;
end
else
begin
state <= S1;
end
end
else
begin
state <= S2;
end
end
default:
begin
state <= S0;
end
endcase
end
end
没有看到附件。。。
用你贴出的代码随便仿真一下也没发现问题,你说的有时候,有可能 是在什么情况下啊?
【 在 yy2651592 的大作中提到: 】
: : 代码不长的可以贴出来看看
: : 【 在 yy2651592 的大作中提到: 】
: : : 用Verilog写了个程序,仿真发现变状态的时候有可能变成Undefined,然后肯定状态机就死机了,输入啥都没反应了。case语句中的default也写了,为什么会出现Undefined,那代表个什么问题。跪求教育
: ...................
【 在 ghy 的大作中提到: 】
: 建议把rst改成异步复位。。。
: 你确定你的ask信号可以变成1么?
: 还有,你这么多信号还是给个注释吧。。。
: ...................
ask是输入信号呀,输入1就是1了呀
【 在 leonzyz 的大作中提到: 】
: 没有看到附件。。。
: 用你贴出的代码随便仿真一下也没发现问题,你说的有时候,有可能 是在什么情况下啊?
: 【 在 yy2651592 的大作中提到: 】
: ...................
附件添上了~~
之前是在时钟上升沿后4纳秒多的时候输入一个ask跳变就挂了,后来代码改了改,以为好了,结果发现还是有死机的可能性
【 在 lanphon 的大作中提到: 】
: 贴个出现undef状态时的波形图撒~~
: --
大概就是这个样子的,比较类似的,不过这个图可能是其他原因引起的