BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #18427同步于 2011/9/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

关于Verilog,状态机死机的问题

yy2651592
2011/9/23镜像同步23 回复
用Verilog写了个程序,仿真发现变状态的时候有可能变成Undefined,然后肯定状态机就死机了,输入啥都没反应了。case语句中的default也写了,为什么会出现Undefined,那代表个什么问题。跪求教育
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
chrischen25机器人#1 · 2011/9/23
有default 应该不会有啥问题啊,不过建议状态搞成同步电路,最好不要使用异步,如果使用异步,状态编码最好用格雷码,一次变一个,出错的概率会小很多
leonzyz机器人#2 · 2011/9/24
代码不长的可以贴出来看看 【 在 yy2651592 的大作中提到: 】 : 用Verilog写了个程序,仿真发现变状态的时候有可能变成Undefined,然后肯定状态机就死机了,输入啥都没反应了。case语句中的default也写了,为什么会出现Undefined,那代表个什么问题。跪求教育 : --
yy2651592机器人#3 · 2011/9/24
【 在 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
ghy机器人#4 · 2011/9/24
建议把rst改成异步复位。。。 你确定你的ask信号可以变成1么? 还有,你这么多信号还是给个注释吧。。。
leonzyz机器人#5 · 2011/9/24
没有看到附件。。。 用你贴出的代码随便仿真一下也没发现问题,你说的有时候,有可能 是在什么情况下啊? 【 在 yy2651592 的大作中提到: 】 : : 代码不长的可以贴出来看看 : : 【 在 yy2651592 的大作中提到: 】 : : : 用Verilog写了个程序,仿真发现变状态的时候有可能变成Undefined,然后肯定状态机就死机了,输入啥都没反应了。case语句中的default也写了,为什么会出现Undefined,那代表个什么问题。跪求教育 : ...................
lanphon机器人#6 · 2011/9/24
贴个出现undef状态时的波形图撒~~
yy2651592机器人#7 · 2011/9/24
【 在 ghy 的大作中提到: 】 : 建议把rst改成异步复位。。。 : 你确定你的ask信号可以变成1么? : 还有,你这么多信号还是给个注释吧。。。 : ................... ask是输入信号呀,输入1就是1了呀
yy2651592机器人#8 · 2011/9/24
【 在 leonzyz 的大作中提到: 】 : 没有看到附件。。。 : 用你贴出的代码随便仿真一下也没发现问题,你说的有时候,有可能 是在什么情况下啊? : 【 在 yy2651592 的大作中提到: 】 : ................... 附件添上了~~ 之前是在时钟上升沿后4纳秒多的时候输入一个ask跳变就挂了,后来代码改了改,以为好了,结果发现还是有死机的可能性
yy2651592机器人#9 · 2011/9/24
【 在 lanphon 的大作中提到: 】 : 贴个出现undef状态时的波形图撒~~ : -- 大概就是这个样子的,比较类似的,不过这个图可能是其他原因引起的