博主福利:100G+电子设计学习资源包!

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect
--------------------------------------------------------------------------------------------------------------------------

在Verilog中最常用的编码方式有二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码。

二进制码和格雷码是压缩状态编码。 若使用格雷编码,则相邻状态转换时只有一个状态位发生翻转,这样不仅能消除状态转换时由多条状态信号线的传输延迟所造成的毛刺,又可以降低功耗。

二进制编码也可称连续编码,也就是码元值的大小是连续变化的。如S0=3'd0,S1=3'd1,S2=3'd2,S3=3'd3....

格雷码的相邻码元值间只有一位是不同的,如S0=3'b000,S1=3'b001,S2=3'b011,S3=3'b010....

独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。虽然使用较多的触发器,但由于状态译码简单,可减少组合逻辑且速度较快, 这种编码方式还易于修改,增加状态或改变状态转换条件都可以在不影响状态机的其它部分的情况下很方便地实现。另外,它的速度独立于状态数量。与之相比,压缩状态编码在状态增加时速度会明显下降。

二进制编码、格雷码编码使用最少的触发器,消耗较多的组合逻辑,而独热码编码反之。独热码编码的最大优势在于状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑。虽然在需要表示同样的状态数时,独热编码占用较多的位,也就是消耗较多的触发器,但这些额外触发器占用的面积可与译码电路省下来的面积相抵消。

为了进一步提高独热编码的速度,可以使用并行 CASE语句"即在case(1‘b1) 后添加综合器可以辨认的并行CASE注释语句。注意:并行CASE 只推荐在独热编码时使用,在二进制编码和格雷编码时使用有时反而会增大面积降低速度。

在CPLD中,由于器件拥有较多的地提供组合逻辑资源,所以CPLD多使用二进制编码或格雷码,而FPGA更多地提供触发器资源,所以在FPGA中多使用独热码编码。当然,这并不是说在FPGA中就非得用独热编码,在CPLD中不能用独热编码,一般的,对于小型设计(状态数小于4)使用二进制编码,当状态数处于4-24之间时,宜采用独热码编码,而大型状态机(状态数大于24)使用格雷码更高效。

在设计状态机时有几种状态编码方法:二进制,格雷码(gray)和独热码(one hot code)。

独热 格雷 二进制
4'b0001 4'b0000 4‘b0000
4'b0010 4'b0001 4’b0001
4'b0100 4'b0011 4‘b0010
4'b1000 4'b0010 4’b0011

格雷码:相邻之间只变1bit,编码密度高。
独热码:任何状态只有1bit为1,其余皆为0,编码密度低。
比如说,表示4个状态,那么状态机寄存器采用格雷码编码只需要2bit:00(S0),01(S1),11(S2),10(S3);
采用独热码需要4bit:0001(S0),0010(S1),0100(S2),1000(S3)。所以很明显采用格雷码可以省2bit寄存器。

难理解的是,为什么独热码更节省组合逻辑:
其实很简单,

例一:
假如我们要在代码中判断状态机是否处于某状态S1,
对于格雷码的状态机来说,代码是这样的:assign S1 = (STATUS==2'b01);
对于独热码来说,代码是这样的就行:assign S1=STATUS[1];
所以独热码的译码非常简单。

例二:
考虑最简单的跳变,当A为1时,状态机会从S0跳到S1:。
采用格雷码写:
STATUS[1:0] <= (STATUS==2'h00) & A ? 2'h01 : 2'h00;
采用独热码写:
STATUS[1] <= STATUS[0] & A;

有人怀疑这里的逻辑,认为只check独热码的一个bit有问题。当然是没问题的,0110,0011等编码属于不care的编码,在卡诺图化简中,不care的编码可以与其余的有效编码合并化简。实际上综合器也会这么做,所以独热码非常容易化简。
假如说S0跳到S1条件为A;S1跳到S2条件为B;S2跳到S3条件为C;S3跳到S0条件为D;
那么整个状态机化简之后代码就是:
STATUS[0] <= STATUS[3] & D;
STATUS[1] <= STATUS[0] & A;
STATUS[2] <= STATUS[1] & B;
STATUS[3] <= STATUS[2] & C;

总结一下:
独热码适合写条件复杂但是状态少的状态机;
格雷码适合写条件不复杂但是状态多的状态机。

Verilog-状态机编码方式对比:独热码 vs 格雷码相关推荐

  1. Verilog --状态机编码方式

    状态机所包含的N种状态通常需要用某种编码方式表示,即状态编码,或状态分配. 选择合适的编码方案,将有助于电路的面积和资源的利用. 状态编码最常见的三种类型是:顺序二进制编码.格雷码和独热码.约翰逊编码 ...

  2. Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码

    一般的,在Verilog中最常用的编码方式有二进制编码(Binary).格雷码(Gray-code)编码.独热码(One-hot)编码. 二进制码和格雷码是压缩状态编码. 若使用格雷编码,则相邻状态转 ...

  3. Verilog常见编码方式:二进制码、格雷码、独热码

    Verilog常见编码方式有:二进制码.格雷码.独热码:三种编码方式各有特点利弊,因此有必要理解比较,以求不同场合的合理选择: 目录 一.结论: 二.详细了解 二进制码 格雷码 独热码 比较 三.参考 ...

  4. FPGA学习笔记---二进制码、独热码、格雷码分析对比

    在Verilog学习中常用的编码方式有二进制编码(Binary).格雷码(Gray-code)编码.独热码(One-hot)编码,对于新手来说,搞不清楚编码为什么要分这么多格式?统一用一种格式不好吗? ...

  5. 状态机与独热码、格雷码、二进制码

    状态机 简称FSM,也叫同步有限状态机 同步:同步的意思就是在系统时钟的作用下 有限:有限代表状态机中的状态是有限的 根据影响输出分为两大类,一为Moore.二为Mealy Moore:若最后的输出只 ...

  6. 有限状态机:独热码vs格雷码

    有限状态机编码时采用格雷码和采用独热码的选择 格雷码:相邻之间只变1bit,编码密度高. 独热码:任何状态只有1bit为1,其余皆为0,编码密度低. 比如说,表示4个状态,那么状态机寄存器采用格雷码编 ...

  7. php bcd编码,什么是BCD码、8421码、余三码、格雷码

    用四位二进制代码来表示一位十进制数,称为二--十进制编码,简称BCD(Binary Coded Decimal)码.根据代码的每一位是否有权值BCD码可分为有权码和无权码两类,应用最多的是8421BC ...

  8. 数制和码制(数制的转换的方法,BCD码<8421,2421,5421,余三码>,格雷码,原码,反码,补码,定点数和浮点数)

    目录 1.数制的转换 1)二,八,十六进制进制转十进制 加权系数求和法 2)十进制转二,八,十六进制 除基取余法(短除法) 减权定位法 3)二,八,十六进制的相互转换 2.BCD码 3.格雷码 4.原 ...

  9. BCD码、8421码、余三码、格雷码

    用四位二进制代码来表示一位十进制数,称为二--十进制编码,简称BCD(Binary Coded Decimal)码.根据代码的每一位是否有权值BCD码可分为有权码和无权码两类,应用最多的是8421BC ...

最新文章

  1. ExtJs TreePanel 不能加载ashx数据的解决办法
  2. C++总结笔记(二)——指针
  3. 关于 tomcat启动后无法访问的问题(localhost:8080 (or your port specified))
  4. 恶意软件伪装“正规军”,撕开Booster Cleaner“画皮”下的真相
  5. jQuery源码研究分析学习笔记-回调函数(11)
  6. CFileDialog多选文件的最大数量
  7. centos 7 安装pip
  8. Ubuntu配置机顶盒踩坑记录(Airplay/DLNA/UPuP/Miracast)
  9. opencv之扩展模块安装
  10. node安装及环境配置
  11. 关于苹果开发者证书的续费问题改动2021
  12. Granted QOS different to Requested QOS
  13. 【课程】03 Richards方程数值解
  14. JavaScript系列---for循环(打印星星)
  15. 怎么看外文文献的影响因子_sci 上的论文影响因子怎么看
  16. hp ilo 服务器 hpssacli 做 raid
  17. 移动端 react + antd-mobile 二级联动(一二级均多选)
  18. HTML制作登录页面
  19. 小程序好看的渐变色按钮
  20. 京东软件测试工程师招聘信息,【京东工资】软件测试工程师待遇-看准网

热门文章

  1. StarRocks社区版安装
  2. 潜意识的力量 (四)
  3. 基于深度学习的时间序列预测
  4. VTFEdit和GCFScape无法打开的解决办法
  5. javascript——单向链表
  6. RS+BCH级联编译码误码率性能matlab仿真
  7. 很多时候,我们以为自己知道就是全部了,其实知道和做到中间差了太多。而这些就是失败和成功之间的根本原因。 再好的方案,如果没有有效的执行,结果都不会太好
  8. 二叉树序列化和反序列化的两种方式
  9. 数字IC笔试面试题目总结1_同步异步、竞争冒险
  10. 全球与中国室内运动地板市场深度研究分析报告