EETOP 创芯网论坛 (原名:电子顶级开发网)
标题:
状态机 毛刺
[打印本页]
作者:
zerorenee
时间:
2013-3-11 21:40
标题:
状态机 毛刺
写的三段式状态机,发现next_state信号出现毛刺,如下:
( , 下载次数: 129 )
上传
点击文件名下载附件
代码为always @(current_state or in)
begin
case(current_state)
s1:
if (in == ...)
next_state = s2;
....
default:
next_state = s1;
....
状态为格雷编码
请问毛刺的产生原因以及如何消除?
作者:
rdl890208
时间:
2013-3-12 17:45
没太仔细看...说说我的看法,
如果是前仿真,看一下in 信号是不是在时钟沿变化了。
如果是后仿真,current_state各个位会有延迟这是正常现象。
作者:
zerorenee
时间:
2013-3-12 18:56
回复
2#
rdl890208
前仿 对的 in信号的确是在时钟沿变化的。
请问,有什么解决方法么?
作者:
rdl890208
时间:
2013-3-13 16:25
回复
3#
zerorenee
写testbench的时候,让in别在时钟沿变化,看看结果对不对
作者:
zerorenee
时间:
2013-3-13 20:26
回复
4#
rdl890208
可是。。in的确是在时钟上升沿变化 啊。。
作者:
rdl890208
时间:
2013-3-14 10:41
回复
5#
zerorenee
其实我觉得这个现象对你的状态机没有影响吧,在下个时钟沿来之前,next_state已经稳定了,那状态的转换也不会有什么问题。
作者:
Holtek12
时间:
2013-3-16 21:15
如果你的後級電路倚靠 state machine 的 state value, 那麼 output 一定也有 glitch, 將此訊號透過相同的 CLK latch 一次再輸出即可.
作者:
waterligx
时间:
2013-6-6 18:45
纯支持,不太懂
作者:
xinghw01
时间:
2013-6-11 21:41
纯支持,不太懂
作者:
eeares
时间:
2013-6-13 09:23
try using non-blocking assignment
作者:
wendy.gg.yang
时间:
2013-6-14 14:42
在testbench中对你的in的信号相对clock都做#1的延迟
作者:
gordonyjh
时间:
2013-6-16 22:50
本帖最后由 gordonyjh 于 2013-6-16 22:55 编辑
如果IN有毛刺,那么Next_state就会有毛刺。可以用时钟锁一拍IN。此外IN和当前状态不应该“同时”发生变化。
作者:
uvmer
时间:
2013-6-19 15:18
问题解决了吗?
作者:
basketballn
时间:
2013-6-24 10:35
本帖最后由 basketballn 于 2013-6-24 10:37 编辑
若不想改设计,就加个delay cel 或一下就行了。或者in信号先过一个触发器。
作者:
小支
时间:
2013-8-2 09:40
使用verilog写状态机,记得好像是可以通过调整触发时间消除毛刺,具体不是太清楚,不过这应该不会影响你的仿真结果,只要不出现竞争冒险,一般不许要理会!
作者:
pogulu
时间:
2013-8-2 10:06
使用 one hot编码
作者:
HADIST
时间:
2013-8-3 20:01
状态机的输入应该是前级capture的,不会在时钟边沿到来的吧,不满足hold time了
作者:
kaka5358
时间:
2013-8-6 23:00
这个和setup time ,hold time没有关系,要看你的in激励是怎么加的(是直接#XX,还是由clock触发?)。
还要看仿真器的调度机制。
最简单的做法是不要让IN和clock同沿变化,加个delay 就好。
作者:
HADIST
时间:
2013-8-7 01:03
回复
18#
kaka5358
实际状态机的电路里面输入信号是不可能在时钟边沿到来的。。。。我说的这个没错么。。。。意思就是楼主的这个激励信号没加正确
作者:
smmaxl
时间:
2013-8-7 15:30
这是前仿真,肯定是状态机写的不对。你确定你是三段的方式吗?每次状态都是时钟沿后面变化?
欢迎光临 EETOP 创芯网论坛 (原名:电子顶级开发网) (https://bbs.eetop.cn/)
Powered by Discuz! X3.5