每日工作记录——状态机的编码选择

本文详细介绍了状态机中常用的三种编码方式:二进制码、格雷码和独热码,并对比了它们在触发器资源、组合逻辑资源及实现速度等方面的优劣。适合于对状态机编码感兴趣的读者。

复习面试题中,复习到了状态机的码制选择这里,以前根本没有关注过这个,一看才知道原来东西还是很多的,因此做一些记录。


状态机常用码二进制、格雷码和独热码。

二进制码就不用细说了,就是正常的顺序编码,四个状态的话就是

s_0 = 2'b00;
s_1 = 2'b01;
s_2 = 2'b10;
s_3 = 2'b11;


格雷码特点是相邻码元之间只有一位是不同的,四个状态的话就是
s_0 = 2'b00;
s_1 = 2'b01;
s_2 = 2'b11;
s_3 = 2'b10;


独热码的特点是只有一位是“1”其余都是“0”,四个状态的话就是
s_0 = 2'b0001;
s_1 = 2'b0010;
s_2 = 2'b0100;
s_3 = 2'b1000;

观察这些状态机的编码可以发现,二进制和格雷码占用的触发器资源比较少(位宽小啊),不过进行对比和跳转时候消耗的组合逻辑会比较多;而独热码的触发器资源占用比较多,不过组合逻辑消耗比较少。简单点想,在case里我们要确定state==s_1?那么对于二进制和格雷码来说需要对比两位,而对于独热码来说只需要看state[1]==1?就可以了,因此在组合逻辑资源上会有所节省,速度也会比二进制和格雷码更快(组合逻辑简化导致的路径时序缩短)。

二进制码与格雷码对比的话,格雷码跳转时候只有一个状态位发生跳转,可以有效的消除多条信号线由于传输延时或门延时所产生的毛刺,也可以减低功耗。不过此处有疑问,因为不一定是1-2-3-4这样跳转,也有可能是1-3-2-4这样跳转,格雷码也会出现多位跳转的情况,需要进一步查看资料。

因为独热码消占用的触发器比较多,而LUT和DFF是FPGA里最不缺的资源(大量触发器闲置),因此在FPGA编程时用独热码效果比较好。CPLD中组合资源较多时序资源较少,因此用格雷码或二进制码较好。IC设计中需要综合考虑,如果时序满足的情况下面积与速度综合看用格雷码比较好,因为独热码的资源会大大增加面积。

还有一点就是,在状态较少时用独热码效果好,状态多时格雷码效果好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼德兰的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值