关于状态编码问题
时间:10-02
整理:3721RD
点击:
一个小状态机,开始使用独热码,只有3个状态,用的3'b001,3'b010,3'b100,时序仿真时,发现NS态会被赋其他一些值,导致CS也受影响,后换成格雷码,NS值就很干净了,我自己分析的原因是,两个相邻的独热码变化是有两个位同时变,所以会出现毛刺,而格雷码是只有1位变,不会出毛刺,那我就想,抛开译码速度,占用资源这些,独热码不就和二进制码一样吗,会出毛刺,会导致NS赋其他值,那不是很不安全吗?请大侠解答我的疑惑,谢谢!
下面是状态值采用独热码时序仿真图:
时序逻辑的状态机不必考虑毛刺,NS、CS中各个信号的setup time和hold time满足就不会有问题。
问题在于,我用独热码,确实导致CS出现了其他值,而使用格雷码,没有其他值出现
并行的数据如果有2位及以上发生变化,都是这样的。时序逻辑中只要时钟的有效沿出现时数据变化成你想要的状态就行。
我理解了楼上的意思,如果信号是edge-sensitive,在时钟有效沿采样信号,信号的宽度及毛刺的存在不会对信号有影响;如果信号是level-sensitive,信号就必须稳定,并且不能有毛刺。
2楼说的对啊,同步电路不怕毛刺的。
用独热码跑500M的,状态更多,同步电路,没有小编的问题。
