老话题,关于独热码状态机
最近做一个项目,发现状态机(不大,十多个状态)用独热码编码
得出的时序分析报告反倒不如使用普通编码
各位对这个有什么看法 大家讨论一下?
和具体电路有关
除了扇出之类的原因 跟状态的跳转的关系是怎样的呢
一般来说 很少有总是顺序跳转的状态机吧 一般都是有交叉跳转的
那么如何判断一个状态机该使用什么样的编码最好?
视情况而定吧,无绝对
看你是不是真的理解了one hot,
和是否好好用了one hot code的output。
假设两个状态,一个是read_mem,一个是write_mem,
用one hot编码出来是01,10,
则bit0,1直接就是read、write信号,这样一定会快。
但是如果只是简单的在宣告state的时候用one_hot,不一定有效果。
学习中
学习了
是的
7# amormio124
看状态数以及应用场合而综合考虑
学习中
coding中是one-hot,实现时不一定是,还得看综合结果。另外,如果状态数量少,用二进制的很可能会更快,而且还省FF资源。
明白点了
不过对于较复杂的状态机 如何选择合适的编码还是不很清楚
不过现在很多综合工具会自动的优化状态机 自己的编码会被改动
而貌似综合工具改的编码方式也不一定是最好的
是啊,状态机编码有好几种方式,如二进制,one-hot,Gray,等等。以前有个一般的认识,状态数少(如小于8个)的用二进制,多一点的用one-hot或者Gray,现在一般都交给综合工具去优化了。
这个和用的FPGA的内部结构及所用的综合器有关的,在状态少的时候差别不大。
看下综合结果吧,很多综合工具都会自动将二进制码综合one_hot,或者倒过来,还得看你用的FPGA类型.还有你的具体要求以及设置了,如果是做ASIC的,one_hot一般都比二进制的快
学习了
学习了
学习中
个人总结: 状态小于5个,时钟小于100M,使用C8器件,一般使用独热
超过5个,时钟大于100M,使用C8器件,一般用格雷
独热码 译码方面,但是不见得 状态变化 逻辑, 有计数器简单
只是单纯的移位寄存器的状态 出现情况还是特别小的
另外三段式中的,
case(next_state) **** 译码后 其他信号寄存器输出
会照成各条路径的差异比较大,
而且也会比
case(state) ***** 译码后,其他信号的寄存器输出 路径长,
因为多了一个 当前state 到 next_state 的路径
如果后续的编码电路非常简单,one-hot的优势就显示不出来了。
内容学习中
不一定时序快 省功耗倒是肯定的
确实不一定
独热码可以省掉组合译码逻辑的面积,但需要更多的寄存器,不过对于fpga实现的设计,独热码还是有优势的。
