【Verilog基础】为什么状态机中多使用独热码,而不是二进制码或者格雷码?

本文探讨了Verilog状态机中为何通常选择独热码编码,而非二进制码或格雷码。独热码在FPGA中能有效节省组合逻辑资源,适合高速系统,但会增加寄存器需求。二进制码则相反,减少寄存器但增加组合逻辑。格雷码作为折中方案,能降低毛刺并节省功耗,适用于大量状态的情况。综合器有时会根据设置自动转换编码方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么例子中我们使用的是独热码而非二进制码或格雷码呢?

那就要从每种编码的特性上说起了,首先独热码因为每个状态只有 1bit 是不同的,例如在执行到(state== TWO)这条语句时,综合器会识别出这是一个比较器,而因为只有 1 比特为 1,所以综合器会进行智能优化为(state[2] == 1’b1),这就相当于把之前 3 比特的比较器变为了 1 比特的比较器,大大节省了组合逻辑资源,但是付出的代价就是状态变量的位宽需要的比较多,而我们 FPGA 中组合逻辑资源相对较少,所以比较宝贵,而寄存器资源较多,所以很完美。

二进制编码的情况和独热码刚好相反,他因为使用了较少的状态变量,使之在减少了寄存器状态的同时无法进行比较器部分的优化,所以使用的寄存器资源较少,而使用的组合逻辑资源较多。

我们还知道 CPLD 就是一个组合逻辑资源多而寄存器逻辑资源少的器件,因为这里我们使用的是 FPGA 器件,所以使用独热码进行编码。

就因为这个比较部分的优化,还使得使用独热码编码的状态机可以在高速系统上运行,其原因是多比特的比较器每个比特到达比较器的时间可能会因为布局布线的走线长短而导致路径延时的不同,这样在高速系统下,就会导致采集到不稳定的状态,导致比较后的结果产生一个时钟的毛刺,使输出不稳定,而单比特的比较器就不用考虑这种问题。下面是示意图解析。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值